Changeset 551 for trunk/dirsize.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dirsize.c
r97 r551 28 28 #include "dirsize.h" 29 29 30 31 MRESULT EXPENTRY DirMainProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 30 MRESULT EXPENTRY DirMainProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 32 31 { 33 32 static CHAR curdir[4]; 34 33 35 switch(msg) 36 { 37 case WM_INITDLG: 38 *curdir = 0; 39 WinSendMsg(hwnd,UM_UNDO,MPVOID,MPVOID); 34 switch (msg) { 35 case WM_INITDLG: 36 *curdir = 0; 37 WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID); 38 break; 39 40 case UM_UNDO: 41 { 42 ULONG x; 43 ULONG ulDriveMap; 44 ULONG ulDriveNum; 45 CHAR dirname[] = " :\\"; 46 BOOL first = TRUE; 47 48 WinSendDlgItemMsg(hwnd, DIRSIZE_LISTBOX, LM_DELETEALL, MPVOID, MPVOID); 49 50 DosError(FERR_DISABLEHARDERR); 51 DosQCurDisk(&ulDriveNum, &ulDriveMap); 52 53 for (x = 2; x < 26; x++) { 54 if ((ulDriveMap & (1L << x)) && !(driveflags[x] & DRIVE_IGNORE)) { 55 *dirname = (CHAR) x + 'A'; 56 WinSendDlgItemMsg(hwnd, DIRSIZE_LISTBOX, LM_INSERTITEM, 57 MPFROM2SHORT(LIT_END, 0), MPFROMP(dirname)); 58 if (first) { 59 WinSendDlgItemMsg(hwnd, DIRSIZE_LISTBOX, LM_SELECTITEM, 60 MPFROMSHORT(0), MPFROMSHORT(TRUE)); 61 first = FALSE; 62 } 63 } 64 } 65 } 66 return 0; 67 68 case UM_RESCAN: 69 { 70 CHAR FileSystem[CCHMAXPATH]; 71 CHAR s[CCHMAXPATH * 2]; 72 FSALLOCATE fsa; 73 ULONG type; 74 USHORT percentused; 75 USHORT percentfree; 76 struct 77 { 78 ULONG serial; 79 CHAR volumelength; 80 CHAR volumelabel[CCHMAXPATH]; 81 } 82 volser; 83 INT removable; 84 85 WinSetDlgItemText(hwnd, DIRSIZE_LABEL, ""); 86 WinSetDlgItemText(hwnd, DIRSIZE_UNITSFREE, ""); 87 WinSetDlgItemText(hwnd, DIRSIZE_UNITSUSED, ""); 88 WinSetDlgItemText(hwnd, DIRSIZE_UNITSIZE, ""); 89 WinSetDlgItemText(hwnd, DIRSIZE_PERCENT, ""); 90 WinSetDlgItemText(hwnd, DIRSIZE_BYTESUSED, ""); 91 WinSetDlgItemText(hwnd, DIRSIZE_BYTESFREE, ""); 92 WinSetDlgItemText(hwnd, DIRSIZE_IFS, ""); 93 WinSetDlgItemText(hwnd, DIRSIZE_LOCAL, ""); 94 WinSendDlgItemMsg(hwnd, DIRSIZE_SLIDER, SLM_SETSLIDERINFO, 95 MPFROM2SHORT(SMA_SLIDERARMPOSITION, 96 SMA_INCREMENTVALUE), MPFROMSHORT(0)); 97 removable = CheckDrive(toupper(*curdir), FileSystem, &type); 98 if (removable != -1) { 99 if (type & DRIVE_ZIPSTREAM) 100 WinSetDlgItemText(hwnd, DIRSIZE_LOCAL, "Zipstream drive"); 101 else if (type & DRIVE_REMOTE) 102 WinSetDlgItemText(hwnd, DIRSIZE_LOCAL, "Remote drive"); 103 else { 104 sprintf(s, "Local drive%s", (removable) ? " (removable)" : ""); 105 WinSetDlgItemText(hwnd, DIRSIZE_LOCAL, s); 106 } 107 sprintf(s, "IFS: %s", FileSystem); 108 WinSetDlgItemText(hwnd, DIRSIZE_IFS, s); 109 memset(&volser, 0, sizeof(volser)); 110 DosError(FERR_DISABLEHARDERR); 111 if (!DosQueryFSInfo(toupper(*curdir) - '@', FSIL_VOLSER, 112 &volser, (ULONG) sizeof(volser))) { 113 sprintf(s, "Label: %s", volser.volumelabel); 114 WinSetDlgItemText(hwnd, DIRSIZE_LABEL, s); 115 } 116 if (!DosQueryFSInfo(toupper(*curdir) - '@', 117 FSIL_ALLOC, &fsa, sizeof(FSALLOCATE))) { 118 percentfree = fsa.cUnit ? (fsa.cUnitAvail * 100) / fsa.cUnit : 0; 119 if (!percentfree && fsa.cUnitAvail) 120 percentfree = 1; 121 percentused = 100 - percentfree; 122 sprintf(s, "Units free: %lu", fsa.cUnitAvail); 123 WinSetDlgItemText(hwnd, DIRSIZE_UNITSFREE, s); 124 sprintf(s, "Unit size: %lu x %u = %lu", 125 fsa.cSectorUnit, 126 fsa.cbSector, fsa.cSectorUnit * fsa.cbSector); 127 WinSetDlgItemText(hwnd, DIRSIZE_UNITSIZE, s); 128 sprintf(s, "Units used: %lu", fsa.cUnit - fsa.cUnitAvail); 129 WinSetDlgItemText(hwnd, DIRSIZE_UNITSUSED, s); 130 sprintf(s, "Bytes free: %.0f", 131 (float)fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector)); 132 WinSetDlgItemText(hwnd, DIRSIZE_BYTESFREE, s); 133 sprintf(s, "Bytes used: %.0f", 134 (float)(fsa.cUnit - fsa.cUnitAvail) * 135 (fsa.cSectorUnit * fsa.cbSector)); 136 WinSetDlgItemText(hwnd, DIRSIZE_BYTESUSED, s); 137 sprintf(s, "Percent used: %u%%", percentused); 138 WinSetDlgItemText(hwnd, DIRSIZE_PERCENT, s); 139 WinSendDlgItemMsg(hwnd, DIRSIZE_SLIDER, SLM_SETSLIDERINFO, 140 MPFROM2SHORT(SMA_SLIDERARMPOSITION, 141 SMA_INCREMENTVALUE), 142 MPFROMSHORT(percentused)); 143 WinShowWindow(WinWindowFromID(hwnd, DIRSIZE_SLIDER), TRUE); 144 } 145 } 146 else { 147 WinSetDlgItemText(hwnd, DIRSIZE_LOCAL, "Drive not ready."); 148 WinShowWindow(WinWindowFromID(hwnd, DIRSIZE_SLIDER), FALSE); 149 } 150 } 151 return 0; 152 153 case WM_CONTROL: 154 switch (SHORT1FROMMP(mp1)) { 155 case DIRSIZE_LISTBOX: 156 switch (SHORT2FROMMP(mp1)) { 157 case LN_ENTER: 158 WinPostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID); 159 break; 160 case LN_SELECT: 161 { 162 SHORT x; 163 164 x = (SHORT) WinSendDlgItemMsg(hwnd, DIRSIZE_LISTBOX, 165 LM_QUERYSELECTION, 166 MPFROMSHORT(LIT_FIRST), MPVOID); 167 if (x >= 0) { 168 WinSendDlgItemMsg(hwnd, DIRSIZE_LISTBOX, 169 LM_QUERYITEMTEXT, 170 MPFROM2SHORT(x, sizeof(curdir)), 171 MPFROMP(curdir)); 172 WinPostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 173 } 174 } 175 break; 176 } 40 177 break; 41 42 case UM_UNDO: 43 { 44 ULONG x; 45 ULONG ulDriveMap; 46 ULONG ulDriveNum; 47 CHAR dirname[] = " :\\"; 48 BOOL first = TRUE; 49 50 WinSendDlgItemMsg(hwnd,DIRSIZE_LISTBOX,LM_DELETEALL,MPVOID,MPVOID); 51 52 DosError(FERR_DISABLEHARDERR); 53 DosQCurDisk(&ulDriveNum,&ulDriveMap); 54 55 for (x = 2;x < 26;x++) { 56 if ((ulDriveMap & (1L << x)) && !(driveflags[x] & DRIVE_IGNORE)) { 57 *dirname = (CHAR)x + 'A'; 58 WinSendDlgItemMsg(hwnd,DIRSIZE_LISTBOX,LM_INSERTITEM, 59 MPFROM2SHORT(LIT_END,0),MPFROMP(dirname)); 60 if(first) { 61 WinSendDlgItemMsg(hwnd,DIRSIZE_LISTBOX,LM_SELECTITEM, 62 MPFROMSHORT(0),MPFROMSHORT(TRUE)); 63 first = FALSE; 64 } 65 } 66 } 67 } 68 return 0; 69 70 case UM_RESCAN: 71 { 72 CHAR FileSystem[CCHMAXPATH]; 73 CHAR s[CCHMAXPATH * 2]; 74 FSALLOCATE fsa; 75 ULONG type; 76 USHORT percentused; 77 USHORT percentfree; 78 struct { 79 ULONG serial; 80 CHAR volumelength; 81 CHAR volumelabel[CCHMAXPATH]; 82 } volser; 83 INT removable; 84 85 WinSetDlgItemText(hwnd,DIRSIZE_LABEL,""); 86 WinSetDlgItemText(hwnd,DIRSIZE_UNITSFREE,""); 87 WinSetDlgItemText(hwnd,DIRSIZE_UNITSUSED,""); 88 WinSetDlgItemText(hwnd,DIRSIZE_UNITSIZE,""); 89 WinSetDlgItemText(hwnd,DIRSIZE_PERCENT,""); 90 WinSetDlgItemText(hwnd,DIRSIZE_BYTESUSED,""); 91 WinSetDlgItemText(hwnd,DIRSIZE_BYTESFREE,""); 92 WinSetDlgItemText(hwnd,DIRSIZE_IFS,""); 93 WinSetDlgItemText(hwnd,DIRSIZE_LOCAL,""); 94 WinSendDlgItemMsg(hwnd,DIRSIZE_SLIDER,SLM_SETSLIDERINFO, 95 MPFROM2SHORT(SMA_SLIDERARMPOSITION, 96 SMA_INCREMENTVALUE), 97 MPFROMSHORT(0)); 98 removable = CheckDrive(toupper(*curdir),FileSystem,&type); 99 if (removable != -1) { 100 if (type & DRIVE_ZIPSTREAM) 101 WinSetDlgItemText(hwnd,DIRSIZE_LOCAL,"Zipstream drive"); 102 else if (type & DRIVE_REMOTE) 103 WinSetDlgItemText(hwnd,DIRSIZE_LOCAL,"Remote drive"); 104 else { 105 sprintf(s,"Local drive%s",(removable) ? " (removable)" : ""); 106 WinSetDlgItemText(hwnd,DIRSIZE_LOCAL,s); 107 } 108 sprintf(s,"IFS: %s",FileSystem); 109 WinSetDlgItemText(hwnd,DIRSIZE_IFS,s); 110 memset(&volser,0,sizeof(volser)); 111 DosError(FERR_DISABLEHARDERR); 112 if (!DosQueryFSInfo(toupper(*curdir) - '@',FSIL_VOLSER, 113 &volser,(ULONG)sizeof(volser))) { 114 sprintf(s,"Label: %s",volser.volumelabel); 115 WinSetDlgItemText(hwnd,DIRSIZE_LABEL,s); 116 } 117 if (!DosQueryFSInfo(toupper(*curdir) - '@', 118 FSIL_ALLOC,&fsa,sizeof(FSALLOCATE))) { 119 percentfree = fsa.cUnit ? 120 (fsa.cUnitAvail * 100) / fsa.cUnit : 121 0; 122 if (!percentfree && fsa.cUnitAvail) 123 percentfree = 1; 124 percentused = 100 - percentfree; 125 sprintf(s,"Units free: %lu",fsa.cUnitAvail); 126 WinSetDlgItemText(hwnd,DIRSIZE_UNITSFREE,s); 127 sprintf(s,"Unit size: %lu x %u = %lu", 128 fsa.cSectorUnit, 129 fsa.cbSector, 130 fsa.cSectorUnit * fsa.cbSector); 131 WinSetDlgItemText(hwnd,DIRSIZE_UNITSIZE,s); 132 sprintf(s,"Units used: %lu",fsa.cUnit - fsa.cUnitAvail); 133 WinSetDlgItemText(hwnd,DIRSIZE_UNITSUSED,s); 134 sprintf(s,"Bytes free: %.0f", 135 (float)fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector)); 136 WinSetDlgItemText(hwnd,DIRSIZE_BYTESFREE,s); 137 sprintf(s,"Bytes used: %.0f", 138 (float)(fsa.cUnit - fsa.cUnitAvail) * 139 (fsa.cSectorUnit * fsa.cbSector)); 140 WinSetDlgItemText(hwnd,DIRSIZE_BYTESUSED,s); 141 sprintf(s,"Percent used: %u%%",percentused); 142 WinSetDlgItemText(hwnd,DIRSIZE_PERCENT,s); 143 WinSendDlgItemMsg(hwnd,DIRSIZE_SLIDER,SLM_SETSLIDERINFO, 144 MPFROM2SHORT(SMA_SLIDERARMPOSITION, 145 SMA_INCREMENTVALUE), 146 MPFROMSHORT(percentused)); 147 WinShowWindow(WinWindowFromID(hwnd,DIRSIZE_SLIDER),TRUE); 148 } 149 } 150 else { 151 WinSetDlgItemText(hwnd,DIRSIZE_LOCAL,"Drive not ready."); 152 WinShowWindow(WinWindowFromID(hwnd,DIRSIZE_SLIDER),FALSE); 153 } 154 } 155 return 0; 156 157 case WM_CONTROL: 158 switch(SHORT1FROMMP(mp1)) { 159 case DIRSIZE_LISTBOX: 160 switch(SHORT2FROMMP(mp1)) { 161 case LN_ENTER: 162 WinPostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(DID_OK,0),MPVOID); 163 break; 164 case LN_SELECT: 165 { 166 SHORT x; 167 168 x = (SHORT)WinSendDlgItemMsg(hwnd,DIRSIZE_LISTBOX, 169 LM_QUERYSELECTION, 170 MPFROMSHORT(LIT_FIRST), 171 MPVOID); 172 if (x >= 0) { 173 WinSendDlgItemMsg(hwnd,DIRSIZE_LISTBOX, 174 LM_QUERYITEMTEXT, 175 MPFROM2SHORT(x,sizeof(curdir)), 176 MPFROMP(curdir)); 177 WinPostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 178 } 179 } 180 break; 181 } 182 break; 183 } 184 return 0; 185 186 case WM_COMMAND: 187 switch(SHORT1FROMMP(mp1)) { 188 case DID_CANCEL: 189 WinDismissDlg(hwnd,0); 190 break; 191 192 case DID_OK: 193 if (*curdir) { 194 WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_HIDE); 195 WinDlgBox(HWND_DESKTOP,hwnd, 196 DirSizeProc,FM3ModHandle, 197 DSZ_FRAME,curdir); 198 WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_SHOW); 199 } 200 else 201 DosBeep(50,100); 202 break; 203 } 204 return 0; 205 } // switch 206 return WinDefDlgProc(hwnd,msg,mp1,mp2); 178 } 179 return 0; 180 181 case WM_COMMAND: 182 switch (SHORT1FROMMP(mp1)) { 183 case DID_CANCEL: 184 WinDismissDlg(hwnd, 0); 185 break; 186 187 case DID_OK: 188 if (*curdir) { 189 WinSetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_HIDE); 190 WinDlgBox(HWND_DESKTOP, hwnd, 191 DirSizeProc, FM3ModHandle, DSZ_FRAME, curdir); 192 WinSetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOW); 193 } 194 else 195 DosBeep(50, 100); 196 break; 197 } 198 return 0; 199 } // switch 200 return WinDefDlgProc(hwnd, msg, mp1, mp2); 207 201 } 208 202 209 210 203 #ifdef NEVER 211 204 212 VOID APIENTRY deinit 205 VOID APIENTRY deinit(ULONG why) 213 206 { 214 207 if (fmprof) 215 208 PrfCloseProfile(fmprof); 216 fmprof = (HINI) 0;209 fmprof = (HINI) 0; 217 210 218 211 flushall(); 219 212 220 DosExitList(EXLST_REMOVE, deinit);213 DosExitList(EXLST_REMOVE, deinit); 221 214 } 222 215 223 216 #endif 224 217 225 226 int main (int argc,char *argv[]) 218 int main(int argc, char *argv[]) 227 219 { 228 HAB 229 HMQ 220 HAB hab; 221 HMQ hmq; 230 222 static CHAR fullname[CCHMAXPATH]; 231 INT 232 ULONG 223 INT x; 224 ULONG rcl; 233 225 234 226 DosError(FERR_DISABLEHARDERR); 235 227 *fullname = 0; 236 for(x = 1;x < argc;x++) { 237 if (!strchr("/;,`\'",*argv[x]) && 238 !*fullname && 239 (IsRoot(argv[x]) || 240 IsFile(argv[x]) == 0)) { 228 for (x = 1; x < argc; x++) { 229 if (!strchr("/;,`\'", *argv[x]) && 230 !*fullname && (IsRoot(argv[x]) || IsFile(argv[x]) == 0)) { 241 231 if (IsRoot(argv[x])) 242 strcpy(fullname, argv[x]);232 strcpy(fullname, argv[x]); 243 233 else if (DosQueryPathInfo(argv[x], 244 FIL_QUERYFULLNAME, 245 fullname, 246 sizeof(fullname))) 234 FIL_QUERYFULLNAME, 235 fullname, sizeof(fullname))) 247 236 *fullname = 0; 248 237 } … … 250 239 251 240 # ifdef NEVER 252 DosExitList(EXLST_ADD,deinit);241 DosExitList(EXLST_ADD, deinit); 253 242 # endif 254 243 255 244 hab = WinInitialize(0); 256 245 if (hab) { 257 hmq = WinCreateMsgQueue(hab, 384);246 hmq = WinCreateMsgQueue(hab, 384); 258 247 if (hmq) { 259 if (InitFM3DLL(hab, argc,argv)) {248 if (InitFM3DLL(hab, argc, argv)) { 260 249 if (!*fullname) 261 250 rcl = WinDlgBox(HWND_DESKTOP, 262 HWND_DESKTOP, 263 DirMainProc, 264 0, 265 DIRSIZE_FRAME, 266 NULL); 251 HWND_DESKTOP, DirMainProc, 0, DIRSIZE_FRAME, NULL); 267 252 else 268 253 rcl = WinDlgBox(HWND_DESKTOP, 269 254 HWND_DESKTOP, 270 DirSizeProc, 271 FM3ModHandle, 272 DSZ_FRAME, 273 fullname); 255 DirSizeProc, FM3ModHandle, DSZ_FRAME, fullname); 274 256 if (rcl == DID_ERROR) 275 257 rcl = WinGetLastError(hab); … … 281 263 return 0; 282 264 283 } // main 284 265 } // main
Note:
See TracChangeset
for help on using the changeset viewer.