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