source: branches/MKIMES/dirsize.c@ 3

Last change on this file since 3 was 2, checked in by root, 23 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.9 KB
Line 
1#define INCL_DOS
2#define INCL_WIN
3
4#include <os2.h>
5#include <stdarg.h>
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <ctype.h>
10#include "dll\fm3dll.h"
11#include "dll\fm3dlg.h"
12#include "dirsize.h"
13
14
15MRESULT EXPENTRY DirMainProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
16
17 static CHAR curdir[4];
18
19 switch(msg) {
20 case WM_INITDLG:
21 *curdir = 0;
22 WinSendMsg(hwnd,UM_UNDO,MPVOID,MPVOID);
23 break;
24
25 case UM_UNDO:
26 WinSendDlgItemMsg(hwnd,DIRSIZE_LISTBOX,LM_DELETEALL,MPVOID,MPVOID);
27 {
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 }
46 }
47 return 0;
48
49 case UM_RESCAN:
50 {
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 }
128 }
129 return 0;
130
131 case WM_CONTROL:
132 switch(SHORT1FROMMP(mp1)) {
133 case DIRSIZE_LISTBOX:
134 switch(SHORT2FROMMP(mp1)) {
135 case LN_ENTER:
136 WinPostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(DID_OK,0),MPVOID);
137 break;
138 case LN_SELECT:
139 {
140 SHORT x;
141
142 x = (SHORT)WinSendDlgItemMsg(hwnd,DIRSIZE_LISTBOX,
143 LM_QUERYSELECTION,
144 MPFROMSHORT(LIT_FIRST),
145 MPVOID);
146 if(x >= 0) {
147 WinSendDlgItemMsg(hwnd,DIRSIZE_LISTBOX,
148 LM_QUERYITEMTEXT,
149 MPFROM2SHORT(x,sizeof(curdir)),
150 MPFROMP(curdir));
151 WinPostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);
152 }
153 }
154 break;
155 }
156 break;
157 }
158 return 0;
159
160 case WM_COMMAND:
161 switch(SHORT1FROMMP(mp1)) {
162 case DID_CANCEL:
163 WinDismissDlg(hwnd,0);
164 break;
165
166 case DID_OK:
167 if(*curdir) {
168 WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_HIDE);
169 WinDlgBox(HWND_DESKTOP,hwnd,
170 DirSizeProc,FM3ModHandle,
171 DSZ_FRAME,curdir);
172 WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_SHOW);
173 }
174 else
175 DosBeep(50,100);
176 break;
177 }
178 return 0;
179 }
180 return WinDefDlgProc(hwnd,msg,mp1,mp2);
181}
182
183
184#ifdef NEVER
185
186VOID APIENTRY deinit (ULONG why) {
187
188 if(fmprof)
189 PrfCloseProfile(fmprof);
190 fmprof = (HINI)0;
191
192 flushall();
193
194 DosExitList(EXLST_REMOVE,deinit);
195}
196
197#endif
198
199
200int main (int argc,char *argv[]) {
201
202 HAB hab;
203 HMQ hmq;
204 static CHAR fullname[CCHMAXPATH];
205 INT x;
206
207 DosError(FERR_DISABLEHARDERR);
208 *fullname = 0;
209 for(x = 1;x < argc;x++) {
210 if(!strchr("/;,`\'",*argv[x]) &&
211 !*fullname &&
212 (IsRoot(argv[x]) ||
213 IsFile(argv[x]) == 0)) {
214 if(IsRoot(argv[x]))
215 strcpy(fullname,argv[x]);
216 else if(DosQueryPathInfo(argv[x],
217 FIL_QUERYFULLNAME,
218 fullname,
219 sizeof(fullname)))
220 *fullname = 0;
221 }
222 }
223#ifdef NEVER
224 DosExitList(EXLST_ADD,deinit);
225#endif
226 hab = WinInitialize(0);
227 if(hab) {
228 hmq = WinCreateMsgQueue(hab,384);
229 if(hmq) {
230 if(InitFM3DLL(hab,argc,argv)) {
231 if(!*fullname)
232 WinDlgBox(HWND_DESKTOP,
233 HWND_DESKTOP,
234 DirMainProc,
235 0,
236 DIRSIZE_FRAME,
237 NULL);
238 else
239 WinDlgBox(HWND_DESKTOP,
240 HWND_DESKTOP,
241 DirSizeProc,
242 FM3ModHandle,
243 DSZ_FRAME,
244 fullname);
245 }
246 WinDestroyMsgQueue(hmq);
247 }
248 WinTerminate(hab);
249 }
250 return 0;
251}
252
Note: See TracBrowser for help on using the repository browser.