source: trunk/dll/datamin.c@ 36

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

Handle large partitions

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 34.9 KB
Line 
1
2/***********************************************************************
3
4 $Id: datamin.c 36 2002-10-17 01:53:23Z root $
5
6 Minimized data bar
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2001, 2002 Steven H.Levine
10
11 Revisions 14 Sep 02 SHL - Handle large partitions
12 16 Oct 02 SHL - Handle large partitions better
13
14***********************************************************************/
15
16#define INCL_DOS
17#define INCL_WIN
18#define INCL_GPI
19
20#include <os2.h>
21#include <stdio.h>
22#include <stdlib.h>
23#include <string.h>
24#include <ctype.h>
25#include <limits.h>
26#include "fm3dll.h"
27#include "fm3dlg.h"
28#include "fm3str.h"
29#include "procstat.h"
30
31#pragma data_seg(DATA2)
32#pragma alloc_text(DATAMIN,DataDlgProc,MiniTimeProc)
33
34APIRET16 APIENTRY16 Dos16MemAvail (PULONG pulAvailMem);
35
36long MINI_X = 208,MINI_Y = 16;
37
38
39MRESULT EXPENTRY MiniTimeProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
40
41 switch(msg) {
42 case WM_BUTTON1CLICK:
43 {
44 USHORT id = WinQueryWindowUShort(hwnd,QWS_ID);
45
46 if(id >= MINI_DRIVEA)
47 WinInvalidateRect(hwnd,NULL,FALSE);
48 else if(id == MINI_TIME)
49 PostMsg(WinQueryWindow(hwnd,QW_PARENT),
50 UM_SETUP6,
51 MPVOID,
52 MPVOID);
53 else if(id == MINI_PROC)
54 WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),
55 WM_SYSCOMMAND,
56 MPFROM2SHORT(SC_TASKMANAGER,0),
57 MPVOID);
58 }
59 break;
60
61 case WM_BUTTON1DBLCLK:
62 {
63 USHORT id = WinQueryWindowUShort(hwnd,QWS_ID);
64
65 if(id >= MINI_DRIVEA && !hwndMain) {
66
67 CHAR s[] = " :\\";
68
69 *s = (CHAR)(id - MINI_DRIVEA) + 'A';
70 OpenDirCnr((HWND)0,
71 HWND_DESKTOP,
72 (HWND)0,
73 FALSE,
74 s);
75 return MRFROMLONG(1L);
76 }
77 else if(id == MINI_TIME) {
78 OpenObject("<WP_CLOCK>",
79 (SHORT2FROMMP(mp2) & KC_SHIFT) ?
80 Default : Settings,
81 hwnd);
82 return MRFROMLONG(1L);
83 }
84
85#ifdef NEVER
86 else if(id == MINI_MEM) {
87 WinDlgBox(HWND_DESKTOP,
88 HWND_DESKTOP,
89 SysInfoDlgProc,
90 FM3ModHandle,
91 SYS_FRAME,
92 NULL);
93 return MRFROMLONG(1L);
94 }
95#endif
96
97 else if(id == MINI_PROC || id == MINI_MEM) {
98 WinDlgBox(HWND_DESKTOP,
99 hwnd,
100 KillDlgProc,
101 FM3ModHandle,
102 KILL_FRAME,
103 NULL);
104 return MRFROMLONG(1L);
105 }
106 else if(id == MINI_SWAP && *SwapperDat) {
107
108 char s[5];
109
110 strncpy(s,SwapperDat,4);
111 s[3] = 0;
112 WinDlgBox(HWND_DESKTOP,
113 hwndMain,
114 UndeleteDlgProc,
115 FM3ModHandle,
116 UNDEL_FRAME,
117 MPFROMP(s));
118 return MRFROMLONG(1L);
119 }
120 }
121 break;
122
123 case WM_BUTTON1MOTIONSTART:
124 PostMsg(WinQueryWindow(hwnd,QW_PARENT),
125 UM_BUTTON1MOTIONSTART,
126 MPVOID,
127 MPVOID);
128 break;
129
130 case WM_CONTEXTMENU:
131 PostMsg(WinQueryWindow(hwnd,QW_PARENT),
132 UM_CONTEXTMENU,
133 MPVOID,
134 MPVOID);
135 break;
136
137 case WM_PAINT:
138 {
139 MRESULT mr;
140 USHORT id;
141
142 id = WinQueryWindowUShort(hwnd,QWS_ID);
143 if(id >= MINI_DRIVEA) {
144
145 HPS hps;
146
147 hps = WinBeginPaint(hwnd,(HPS)0,NULL);
148 if(hps) {
149 mr = WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),
150 UM_PAINT,
151 MPFROM2SHORT(id,0),
152 MPFROMLONG(hps));
153 WinEndPaint(hps);
154 }
155 }
156 else
157 mr = PFNWPStatic(hwnd,msg,mp1,mp2);
158 return mr;
159 }
160 }
161 return PFNWPStatic(hwnd,msg,mp1,mp2);
162}
163
164
165MRESULT EXPENTRY DataProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
166
167 static ULONG counter;
168 static BOOL NoFloat,noqproc = FALSE,Positioned;
169 static HWND hwndMenu = (HWND)0;
170
171 switch(msg) {
172 case WM_CREATE:
173 if(DataHwnd) {
174 WinSetWindowPos(DataHwnd,
175 HWND_TOP,
176 0,
177 0,
178 0,
179 0,
180 SWP_ZORDER | SWP_SHOW);
181 return MRFROMLONG(1L);
182 }
183 DataHwnd = WinQueryWindow(hwnd,QW_PARENT);
184 NoFloat = FALSE;
185 Positioned = FALSE;
186 SetPresParams(hwnd,
187 &RGBGREY,
188 &RGBBLACK,
189 &RGBBLACK,
190 GetPString(IDS_8HELVTEXT));
191 {
192 int c;
193 long x = 3;
194 USHORT ids[] = {MINI_TIME,MINI_MEM,MINI_SWAP,MINI_PROC,0};
195 POINTL aptl[TXTBOX_COUNT];
196 HPS hps;
197
198 hps = WinGetPS(hwnd);
199 if(hps) {
200 GpiQueryTextBox(hps,
201 34,
202 " -=03:08:22 SMW 1998/08/02=- ",
203 TXTBOX_COUNT,
204 aptl);
205 WinReleasePS(hps);
206 MINI_X = aptl[TXTBOX_TOPRIGHT].x + 6;
207 MINI_Y = aptl[TXTBOX_TOPRIGHT].y + 6;
208 }
209 for(c = 0;ids[c];c++) {
210 WinCreateWindow(hwnd,
211 GetPString(IDS_WCMINITIME),
212 NullStr,
213 SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE,
214 x,
215 3,
216 MINI_X,
217 MINI_Y,
218 hwnd,
219 HWND_TOP,
220 ids[c],
221 NULL,
222 NULL);
223 x += (MINI_X + 4);
224 }
225 }
226 if(!hwndMain) {
227
228 SWCNTRL swctl;
229
230 memset(&swctl,0,sizeof(swctl));
231 swctl.hwnd = WinQueryWindow(hwnd,QW_PARENT);
232 swctl.uchVisibility = SWL_VISIBLE;
233 swctl.fbJump = (fDataToFore) ? SWL_NOTJUMPABLE : SWL_JUMPABLE;
234 swctl.bProgType = PROG_PM;
235 strcpy(swctl.szSwtitle,
236 GetPString(IDS_DATABARTITLETEXT));
237 WinCreateSwitchEntry(WinQueryAnchorBlock(hwnd),
238 &swctl);
239 }
240 PostMsg(hwnd,
241 UM_SETUP,
242 MPVOID,
243 MPVOID);
244 return 0;
245
246 case WM_MENUEND:
247 NoFloat = FALSE;
248 if(hwndMenu == (HWND)mp2) {
249 WinDestroyWindow(hwndMenu);
250 hwndMenu = (HWND)0;
251 }
252 break;
253
254 case UM_RESTORE:
255 WinSetWindowPtr(hwnd,0,mp1);
256 return 0;
257
258 case UM_SETUP:
259 {
260 long x,y;
261 SWP swp,swpD;
262 int c;
263 ULONG size = sizeof(SWP),numdrives = 0,
264 drivestyle = (DRIVE_REMOVABLE | DRIVE_INVALID | DRIVE_IGNORE |
265 DRIVE_ZIPSTREAM),
266 ulDriveNum,ulDriveMap;
267
268 if(!fDataInclRemote)
269 drivestyle |= DRIVE_REMOTE;
270 if(fDataShowDrives) {
271 DosError(FERR_DISABLEHARDERR);
272 DosQCurDisk(&ulDriveNum,&ulDriveMap);
273 x = 3;
274 y = MINI_Y + 4;
275 for(c = 2;c < 26;c++) {
276 if((ulDriveMap & (1L << c)) && !(driveflags[c] & drivestyle)) {
277 WinCreateWindow(hwnd,
278 GetPString(IDS_WCMINITIME),
279 NullStr,
280 SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE,
281 x,
282 y,
283 MINI_X,
284 MINI_Y,
285 hwnd,
286 HWND_TOP,
287 MINI_DRIVEA + c,
288 NULL,
289 NULL);
290 numdrives++;
291 x += (MINI_X + 4);
292 if((numdrives % 4) == 0) {
293 y += (MINI_Y + 4);
294 x = 3;
295 }
296 }
297 }
298 }
299 x = (MINI_X * 4) + 18;
300 y = (MINI_Y + 4) + ((numdrives / 4) * (MINI_Y + 4)) +
301 (((numdrives % 4) != 0) * (MINI_Y + 4));
302 if(!Positioned) {
303 if(PrfQueryProfileData(fmprof,
304 appname,
305 "DataMinPos",
306 &swp,
307 &size)) {
308 WinQueryWindowPos(HWND_DESKTOP,&swpD);
309 if(swp.x > swpD.cx - 16)
310 swp.x = swpD.cx - 16;
311 if(swp.y > swpD.cy - 16)
312 swp.y = swpD.cy - 16;
313 WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),
314 HWND_TOP,
315 swp.x,
316 swp.y,
317 x,
318 y,
319 SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ZORDER);
320 }
321 else
322 WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),
323 HWND_TOP,
324 0,
325 0,
326 x,
327 y,
328 SWP_SHOW | SWP_SIZE | SWP_MOVE | SWP_ZORDER);
329 Positioned = TRUE;
330 }
331 else
332 WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),
333 HWND_TOP,
334 0,
335 0,
336 x,
337 y,
338 SWP_SHOW | SWP_SIZE | SWP_ZORDER);
339 WinShowWindow(WinQueryWindow(hwnd,QW_PARENT),
340 TRUE);
341 }
342 counter = 0;
343 PostMsg(hwnd,
344 UM_TIMER,
345 MPVOID,
346 MPVOID);
347 return 0;
348
349 case WM_BUTTON1DBLCLK:
350 if(hwndMain)
351 PostMsg(hwnd,
352 WM_CLOSE,
353 MPVOID,
354 MPVOID);
355 break;
356
357 case UM_CONTEXTMENU:
358 case WM_CONTEXTMENU:
359 if(!hwndMenu)
360 hwndMenu = WinLoadMenu(HWND_DESKTOP,
361 FM3ModHandle,
362 MINI_FRAME);
363 if(hwndMenu) {
364 WinCheckMenuItem(hwndMenu,
365 MINI_FLOAT,
366 fDataToFore);
367 WinCheckMenuItem(hwndMenu,
368 MINI_SHOW,
369 fDataShowDrives);
370 WinCheckMenuItem(hwndMenu,
371 MINI_BORING,
372 fDullMin);
373 WinCheckMenuItem(hwndMenu,
374 MINI_INCLREMOTE,
375 fDataInclRemote);
376 NoFloat = TRUE;
377 if(!PopupMenu(hwnd,
378 hwnd,
379 hwndMenu))
380 NoFloat = FALSE;
381 }
382 if(msg == UM_CONTEXTMENU)
383 return 0;
384 break;
385
386 case WM_BUTTON2DBLCLK:
387 if(!(SHORT2FROMMP(mp2) & KC_SHIFT)) {
388 PostMsg(hwnd,
389 WM_COMMAND,
390 MPFROM2SHORT(MINI_FLOAT,0),
391 MPVOID);
392 break;
393 }
394 /* else intentional fallthru */
395 case WM_CHORD:
396 case WM_BUTTON3DBLCLK:
397 PostMsg(hwnd,
398 WM_COMMAND,
399 MPFROM2SHORT(MINI_SHOW,0),
400 MPVOID);
401 break;
402
403 case UM_BUTTON1MOTIONSTART:
404 case WM_BUTTON1MOTIONSTART:
405 {
406 TRACKINFO TrackInfo;
407 SWP Position;
408
409 memset(&TrackInfo,0,sizeof(TrackInfo));
410 TrackInfo.cxBorder = 1 ;
411 TrackInfo.cyBorder = 1 ;
412 TrackInfo.cxGrid = 1 ;
413 TrackInfo.cyGrid = 1 ;
414 TrackInfo.cxKeyboard = 8 ;
415 TrackInfo.cyKeyboard = 8 ;
416 WinQueryWindowPos(WinQueryWindow(hwnd,QW_PARENT),&Position);
417 TrackInfo.rclTrack.xLeft = Position.x ;
418 TrackInfo.rclTrack.xRight = Position.x + Position.cx ;
419 TrackInfo.rclTrack.yBottom = Position.y ;
420 TrackInfo.rclTrack.yTop = Position.y + Position.cy ;
421 WinQueryWindowPos(HWND_DESKTOP,&Position);
422 TrackInfo.rclBoundary.xLeft = Position.x ;
423 TrackInfo.rclBoundary.xRight = Position.x + Position.cx ;
424 TrackInfo.rclBoundary.yBottom = Position.y ;
425 TrackInfo.rclBoundary.yTop = Position.y + Position.cy ;
426 TrackInfo.ptlMinTrackSize.x = 0 ;
427 TrackInfo.ptlMinTrackSize.y = 0 ;
428 TrackInfo.ptlMaxTrackSize.x = Position.cx ;
429 TrackInfo.ptlMaxTrackSize.y = Position.cy ;
430 TrackInfo.fs = TF_MOVE | TF_STANDARD | TF_ALLINBOUNDARY ;
431 if(WinTrackRect(HWND_DESKTOP,(HPS)0,&TrackInfo)) {
432 WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),
433 HWND_TOP,TrackInfo.rclTrack.xLeft,
434 TrackInfo.rclTrack.yBottom,0,0,SWP_MOVE);
435 WinSendMsg(hwnd,WM_SAVEAPPLICATION,MPVOID,MPVOID);
436 }
437 }
438 break;
439
440 case WM_HELP:
441 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_HELP,0),MPVOID);
442 break;
443
444 case WM_COMMAND:
445 switch(SHORT1FROMMP(mp1)) {
446 case IDM_COMMANDLINE:
447 case IDM_DOSCOMMANDLINE:
448 case IDM_WINFULLSCREEN:
449 {
450 CHAR *env = GetCmdSpec(FALSE),path[CCHMAXPATH];
451 INT type = SEPARATE | WINDOWED;
452
453 *path = 0;
454 TopWindowName(hwnd,
455 (HWND)0,
456 path);
457 if(SHORT1FROMMP(mp1) == IDM_DOSCOMMANDLINE)
458 env = GetCmdSpec(TRUE);
459 else if(SHORT1FROMMP(mp1) != IDM_COMMANDLINE) {
460 env = "WINOS2.COM";
461 type = SEPARATE | FULLSCREEN;
462 }
463 runemf2(type,
464 hwnd,
465 path,
466 NULL,
467 "%s",
468 env);
469 }
470 break;
471
472 case IDM_HELP:
473 if(hwndHelp)
474 WinSendMsg(hwndHelp,
475 HM_DISPLAY_HELP,
476 MPFROM2SHORT(HELP_DATABAR,0),
477 MPFROMSHORT(HM_RESOURCEID));
478 break;
479
480 case MINI_CLOSE:
481 PostMsg(hwnd,
482 WM_CLOSE,
483 MPVOID,
484 MPVOID);
485 break;
486
487 case MINI_BORING:
488 fDullMin = (fDullMin) ? FALSE : TRUE;
489 PrfWriteProfileData(fmprof,
490 FM3Str,
491 "DullDatabar",
492 &fDullMin,
493 sizeof(BOOL));
494 WinInvalidateRect(hwnd,
495 NULL,
496 TRUE);
497 break;
498
499 case MINI_INCLREMOTE:
500 case MINI_SHOW:
501 if(SHORT1FROMMP(mp1) == MINI_SHOW) {
502 fDataShowDrives = (fDataShowDrives) ? FALSE : TRUE;
503 PrfWriteProfileData(fmprof,
504 appname,
505 "DataShowDrives",
506 &fDataShowDrives,
507 sizeof(BOOL));
508 }
509 else {
510 fDataInclRemote = (fDataInclRemote) ? FALSE : TRUE;
511 PrfWriteProfileData(fmprof,
512 appname,
513 "DataInclRemote",
514 &fDataInclRemote,
515 sizeof(BOOL));
516 }
517 {
518 HENUM henum;
519 HWND hwndTemp;
520 USHORT id;
521
522 henum = WinBeginEnumWindows(hwnd);
523 while((hwndTemp = WinGetNextWindow(henum)) != NULLHANDLE) {
524 id = WinQueryWindowUShort(hwndTemp,QWS_ID);
525 if(id >= MINI_DRIVEA)
526 WinDestroyWindow(hwndTemp);
527 }
528 WinEndEnumWindows(henum);
529 }
530 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID);
531 break;
532
533 case MINI_FLOAT:
534 fDataToFore = (fDataToFore) ? FALSE : TRUE;
535 PrfWriteProfileData(fmprof,
536 appname,
537 "DataToFore",
538 &fDataToFore,
539 sizeof(BOOL));
540 if(!hwndMain) {
541
542 SWCNTRL swcntrl;
543 HSWITCH hswitch;
544
545 hswitch = (HSWITCH)WinQuerySwitchHandle(hwnd,(PID)0);
546 if(hswitch) {
547 memset(&swcntrl,0,sizeof(SWCNTRL));
548 if(!WinQuerySwitchEntry(hswitch,&swcntrl)) {
549 swcntrl.fbJump = (fDataToFore) ?
550 SWL_NOTJUMPABLE :
551 SWL_JUMPABLE;
552 WinChangeSwitchEntry(hswitch,
553 &swcntrl);
554 }
555 }
556 }
557 break;
558 }
559 return 0;
560
561 case WM_SIZE:
562 WinSetWindowPos(hwnd,
563 HWND_TOP,
564 0,
565 0,
566 SHORT1FROMMP(mp2),
567 SHORT2FROMMP(mp2),
568 SWP_MOVE | SWP_SIZE);
569 break;
570
571 case WM_PAINT:
572 {
573 HPS hps;
574 POINTL ptl;
575 SWP swp;
576 RECTL rcl;
577
578 hps = WinBeginPaint(hwnd,
579 (HPS)0,
580 &rcl);
581 if(hps) {
582 WinFillRect(hps,
583 (PRECTL)&rcl,
584 CLR_PALEGRAY);
585 GpiSetMix(hps,FM_OVERPAINT);
586 GpiSetColor(hps,CLR_WHITE);
587 WinQueryWindowPos(hwnd,&swp);
588 ptl.x = 0;
589 ptl.y = 0;
590 GpiMove(hps,&ptl);
591 ptl.y = swp.cy - 1;
592 GpiLine(hps,&ptl);
593 ptl.x = swp.cx - 1;
594 GpiLine(hps,&ptl);
595 GpiSetColor(hps,CLR_DARKGRAY);
596 ptl.y = 0;
597 GpiLine(hps,&ptl);
598 ptl.x = 0;
599 GpiLine(hps,&ptl);
600 {
601 HENUM henum;
602 HWND hwndTemp;
603
604 henum = WinBeginEnumWindows(hwnd);
605 while((hwndTemp = WinGetNextWindow(henum)) != NULLHANDLE) {
606 PaintRecessedWindow(hwndTemp,
607 hps,
608 (WinQueryWindowUShort(hwndTemp,QWS_ID)
609 != MINI_TIME),
610 FALSE);
611 }
612 WinEndEnumWindows(henum);
613 }
614 WinEndPaint(hps);
615 }
616 }
617 return 0;
618
619 case UM_PAINT:
620 {
621 CHAR s[90],szFreeQty[38],*pszFreeUM,path[] = " :",
622 *szBuf = NULL,*FSystem = NULL;
623 float fltFreeQty;
624 ULONG percentfree,wasx,size;
625 HPS hps = (HPS)mp2;
626 FSALLOCATE fsa;
627 HWND hwndTemp;
628 USHORT id;
629 SWP swp;
630 POINTL ptl;
631
632 id = SHORT1FROMMP(mp1);
633 if(id >= MINI_DRIVEA) {
634 hwndTemp = WinWindowFromID(hwnd,id);
635 if(!hwndTemp)
636 return 0;
637 if(!WinQueryWindowPos(hwndTemp,&swp))
638 return 0;
639 *szFreeQty = 0;
640 DosError(FERR_DISABLEHARDERR);
641 if(!DosQueryFSInfo((id - MINI_DRIVEA) + 1,
642 FSIL_ALLOC,
643 &fsa,
644 sizeof(FSALLOCATE))) {
645 fltFreeQty = (float)fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector);
646 if (fltFreeQty >= (1024 * 1024)) {
647 fltFreeQty /= (1024 * 1024);
648 pszFreeUM = "mb";
649 }
650 else if (fltFreeQty >= 1024) {
651 fltFreeQty /= 1024;
652 pszFreeUM = "kb";
653 }
654 else
655 {
656 pszFreeUM = "b";
657 }
658 percentfree = (fsa.cUnit && fsa.cUnitAvail) ?
659 (fsa.cUnitAvail * 100) / fsa.cUnit : 0;
660 commafmt(szFreeQty,sizeof(szFreeQty),(ULONG)fltFreeQty);
661 *path = (CHAR)(id - MINI_DRIVEA) + 'A';
662 if(!DosAllocMem((PVOID)&szBuf,
663 4096,
664 PAG_COMMIT | OBJ_TILE | PAG_READ | PAG_WRITE)) {
665 *szBuf = 0;
666 size = 4096;
667 DosError(FERR_DISABLEHARDERR);
668 if(!DosQueryFSAttach(path,
669 0,
670 FSAIL_QUERYNAME,
671 (PFSQBUFFER2)szBuf,
672 &size)) {
673 FSystem = ((PFSQBUFFER2)szBuf)->szName +
674 ((PFSQBUFFER2)szBuf)->cbName + 1;
675 FSystem[15] = 0;
676 }
677 }
678 else
679 szBuf = NULL;
680 sprintf(s,
681 " %s %s%s (%lu%%) %s%s%s%s",
682 path,
683 szFreeQty,
684 pszFreeUM,
685 percentfree,
686 GetPString(IDS_FREETEXT),
687 (FSystem) ? " [" : NullStr,
688 FSystem,
689 (FSystem) ? "]" : NullStr);
690 if(szBuf)
691 DosFreeMem(szBuf);
692 if(!hps)
693 hps = WinGetPS(hwndTemp);
694 if(hps) {
695 if(!fDullMin) {
696 ptl.x = 0;
697 ptl.y = 0;
698 GpiMove(hps,
699 &ptl);
700 GpiSetColor(hps,
701 CLR_BLACK);
702 ptl.x = swp.cx - 1;
703 ptl.y = swp.cy - 1;
704 GpiBox(hps,
705 DRO_OUTLINE,
706 &ptl,
707 0,
708 0);
709 ptl.x = 1;
710 ptl.y = 1;
711 if(percentfree) {
712 GpiMove(hps,&ptl);
713 GpiSetColor(hps,
714 (percentfree < 11) ? CLR_DARKRED :
715 (percentfree < 26) ? CLR_DARKBLUE :
716 CLR_DARKGREEN);
717 ptl.y = swp.cy - 2;
718 ptl.x = ((swp.cx - 2) * percentfree) / 100;
719 wasx = ptl.x;
720 GpiBox(hps,
721 DRO_OUTLINEFILL,
722 &ptl,
723 0,
724 0);
725 GpiSetColor(hps,
726 (percentfree < 11) ? CLR_RED :
727 (percentfree < 26) ? CLR_BLUE : CLR_GREEN);
728 ptl.x = wasx;
729 ptl.y = swp.cy - 2;
730 GpiMove(hps,
731 &ptl);
732 ptl.x = 1;
733 GpiLine(hps,
734 &ptl);
735 ptl.y = 2;
736 ptl.x = 1;
737 GpiLine(hps,
738 &ptl);
739 ptl.x = wasx;
740 }
741 if(percentfree < 99) {
742 GpiSetColor(hps,
743 CLR_DARKGRAY);
744 wasx = ptl.x;
745 ptl.y = 2;
746 GpiMove(hps,&ptl);
747 ptl.y = swp.cy - 2;
748 ptl.x = swp.cx - 2;
749 GpiBox(hps,
750 DRO_OUTLINEFILL,
751 &ptl,
752 0,
753 0);
754 ptl.x = wasx;
755 GpiMove(hps,
756 &ptl);
757 GpiSetColor(hps,
758 CLR_PALEGRAY);
759 ptl.x = swp.cx - 3;
760 GpiLine(hps,&ptl);
761 ptl.x = wasx;
762 ptl.y = 1;
763 GpiMove(hps,&ptl);
764 GpiSetColor(hps,
765 CLR_BLACK);
766 ptl.x = swp.cx - 2;
767 GpiLine(hps,&ptl);
768 ptl.y = swp.cy - 3;
769 GpiLine(hps,&ptl);
770 }
771 GpiSetColor(hps,
772 CLR_WHITE);
773 }
774 else {
775 GpiSetColor(hps,
776 CLR_PALEGRAY);
777 ptl.x = 0;
778 ptl.y = 0;
779 GpiMove(hps,
780 &ptl);
781 ptl.x = swp.cx - 1;
782 ptl.y = swp.cy - 1;
783 GpiBox(hps,
784 DRO_OUTLINEFILL,
785 &ptl,
786 0,
787 0);
788 GpiSetColor(hps,
789 (percentfree < 11) ? CLR_DARKRED :
790 CLR_DARKBLUE);
791 }
792 GpiSetBackMix(hps,
793 BM_LEAVEALONE);
794 GpiSetMix(hps,
795 FM_OVERPAINT);
796 {
797 POINTL aptl[TXTBOX_COUNT];
798
799 GpiQueryTextBox(hps,
800 strlen(s),
801 s,
802 TXTBOX_COUNT,
803 aptl);
804 ptl.y = ((swp.cy / 2) -
805 ((aptl[TXTBOX_TOPRIGHT].y +
806 aptl[TXTBOX_BOTTOMLEFT].y) / 2));
807 ptl.y++;
808 ptl.x = (swp.cx / 2) - (aptl[TXTBOX_TOPRIGHT].x / 2);
809 if(ptl.x < 2)
810 ptl.x = 2;
811 GpiCharStringAt(hps,
812 &ptl,
813 strlen(s),
814 s);
815 }
816 if(!mp2)
817 WinReleasePS(hps);
818 }
819 }
820 }
821 }
822 return 0;
823
824 case UM_TIMER:
825 {
826 CHAR s[134];
827 DATETIME dt;
828
829 if(fDataToFore && !NoFloat)
830 WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),
831 HWND_TOP,0,0,0,0,SWP_ZORDER);
832 if(counter && (counter % 19) && (counter % 20)) {
833 if(!DosGetDateTime(&dt)) {
834 sprintf(s,
835 " %02hu:%02hu:%02hu %s %04u/%02u/%02u",
836 dt.hours,
837 dt.minutes,
838 dt.seconds,
839 GetPString(IDS_SUNDAY + dt.weekday),
840 dt.year,
841 dt.month,
842 dt.day);
843 WinSetDlgItemText(hwnd,
844 MINI_TIME,
845 s);
846 }
847 }
848 else if(!counter || !(counter % 19))
849 PostMsg(hwnd,UM_SETUP6,MPVOID,MPVOID);
850 if(!(counter % 4)) {
851 PostMsg(hwnd,UM_SETUP3,MPVOID,MPVOID);
852 if(!(counter % 10)) {
853 PostMsg(hwnd,UM_SETUP5,MPVOID,MPVOID);
854 if(!(counter % 20)) {
855 PostMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);
856 PostMsg(hwnd,UM_SETUP4,MPVOID,MPVOID);
857 }
858 }
859 }
860 }
861 counter++;
862 return 0;
863
864 case UM_SETUP2:
865 {
866 CHAR s[134],szFileQty[38],szFreeQty[38],*pszFileUM,*pszFreeUM;
867 FILEFINDBUF3 ffb;
868 ULONG nm = 1L;
869 float fltFreeQty;
870 HDIR hdir = HDIR_CREATE;
871 FSALLOCATE fsa;
872
873 if(*SwapperDat) {
874 DosError(FERR_DISABLEHARDERR);
875 if(!DosFindFirst(SwapperDat,&hdir,FILE_NORMAL | FILE_HIDDEN |
876 FILE_SYSTEM | FILE_ARCHIVED | FILE_READONLY,
877 &ffb,sizeof(ffb),&nm,FIL_STANDARD)) {
878 priority_bumped();
879 DosFindClose(hdir);
880 *szFileQty = *szFreeQty = 0;
881 DosError(FERR_DISABLEHARDERR);
882 if(!DosQueryFSInfo(toupper(*SwapperDat) - '@',FSIL_ALLOC,
883 &fsa,sizeof(FSALLOCATE))) {
884 fltFreeQty = fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector);
885 if(fltFreeQty > 1024 * 1024) {
886 pszFreeUM = "mb";
887 fltFreeQty /= (1024 * 1024);
888 }
889 else if(fltFreeQty > 1024) {
890 pszFreeUM = "kb";
891 fltFreeQty /= 1024;
892 }
893 else {
894 pszFreeUM = "b";
895 }
896 commafmt(szFreeQty,sizeof(szFreeQty),(ULONG)fltFreeQty);
897 }
898 if(ffb.cbFile > 1024 * 1024) {
899 pszFileUM = "mb";
900 commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile / (1024 * 1024));
901 }
902 else if(ffb.cbFile > 1024) {
903 pszFileUM = "kb";
904 commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile / 1024);
905 }
906 else {
907 pszFileUM = "b";
908 commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile);
909 }
910 sprintf(s," %s %s%s%s%s%s",
911 GetPString(IDS_SWAPTITLETEXT),
912 szFileQty,
913 pszFileUM,
914 (*szFreeQty) ? "/" : NullStr,
915 szFreeQty,
916 (*szFreeQty) ? pszFreeUM : NullStr);
917 WinSetDlgItemText(hwnd,
918 MINI_SWAP,
919 s);
920 }
921 }
922 }
923 return 0;
924
925 case UM_SETUP3:
926 {
927 CHAR s[134],tm[38],szQty[38],*pszUM,*tmk;
928 ULONG amem = 0;
929
930 if(!DosQuerySysInfo(QSV_TOTAVAILMEM,QSV_TOTAVAILMEM,
931 (PVOID)&amem,(ULONG)sizeof(amem))) {
932 *tm = *szQty = 0;
933 if(amem > 1024 * 1024) {
934 tmk = "mb";
935 commafmt(tm,sizeof(tm),amem / (1024 * 1024));
936 }
937 else if(amem > 1024) {
938 tmk = "kb";
939 commafmt(tm,sizeof(tm),amem / 1024);
940 }
941 else {
942 tmk = "b";
943 commafmt(tm,sizeof(tm),amem);
944 }
945 if(!Dos16MemAvail(&amem)) {
946 if(amem > 1024 * 1024) {
947 pszUM = "mb";
948 commafmt(szQty,sizeof(szQty),amem / (1024 * 1024));
949 }
950 else if(amem > 1024) {
951 pszUM = "kb";
952 commafmt(szQty,sizeof(szQty),amem / 1024);
953 }
954 else {
955 pszUM = "b";
956 commafmt(szQty,sizeof(szQty),amem);
957 }
958 }
959 sprintf(s," %s%s%s%s%s%s",
960 GetPString(IDS_MEMTITLETEXT),
961 szQty,
962 (*szQty) ? pszUM : NullStr,
963 (*szQty) ? "/" : NullStr,
964 tm,
965 tmk);
966 WinSetDlgItemText(hwnd,
967 MINI_MEM,
968 s);
969 }
970 }
971 return 0;
972
973 case UM_SETUP4:
974 {
975 HWND hwndTemp;
976 HENUM henum;
977 USHORT id;
978
979 henum = WinBeginEnumWindows(hwnd);
980 while((hwndTemp = WinGetNextWindow(henum)) != NULLHANDLE) {
981 id = WinQueryWindowUShort(hwndTemp,QWS_ID);
982 if(id >= MINI_DRIVEA)
983 WinInvalidateRect(hwndTemp,NULL,FALSE);
984 }
985 WinEndEnumWindows(henum);
986 }
987 return 0;
988
989 case UM_SETUP5:
990 {
991 CHAR s[134],tm[38],szQty[38];
992
993 if(fUseQProcStat && !noqproc) {
994
995 PROCESSINFO *ppi;
996 BUFFHEADER *pbh = NULL;
997 MODINFO *pmi;
998 ULONG numprocs = 0,numthreads = 0;
999
1000
1001 if(!DosAllocMem((PVOID)&pbh,USHRT_MAX + 4096,
1002 PAG_COMMIT | OBJ_TILE | PAG_READ | PAG_WRITE)) {
1003 if(!DosQProcStatus(pbh,USHRT_MAX)) {
1004 ppi = pbh->ppi;
1005 while(ppi->ulEndIndicator != PROCESS_END_INDICATOR ) {
1006 pmi = pbh->pmi;
1007 while(pmi && ppi->hModRef != pmi->hMod)
1008 pmi = pmi->pNext;
1009 if(pmi) {
1010 numprocs++;
1011 numthreads += ppi->usThreadCount;
1012 }
1013 ppi = (PPROCESSINFO)(ppi->ptiFirst + ppi->usThreadCount);
1014 }
1015 *szQty = *tm = 0;
1016 commafmt(szQty,sizeof(szQty),numprocs);
1017 commafmt(tm,sizeof(tm),numthreads);
1018 sprintf(s,
1019 " %s%s %s%s",
1020 GetPString(IDS_PROCSTITLETEXT),
1021 szQty,
1022 GetPString(IDS_THRDSTITLETEXT),
1023 tm);
1024 WinSetDlgItemText(hwnd,
1025 MINI_PROC,
1026 s);
1027 }
1028 else
1029 noqproc = TRUE;
1030 DosFreeMem(pbh);
1031 }
1032 }
1033 else {
1034 *szQty = 0;
1035 commafmt(szQty,sizeof(szQty),
1036 WinQuerySwitchList(WinQueryAnchorBlock(hwnd),(PSWBLOCK)0,0));
1037 sprintf(s,
1038 " %s%s",
1039 GetPString(IDS_TASKSTITLETEXT),
1040 szQty);
1041 WinSetDlgItemText(hwnd,
1042 MINI_PROC,
1043 s);
1044 }
1045 }
1046 return 0;
1047
1048 case UM_SETUP6:
1049 {
1050 ULONG val = 0,numdays,nummins;
1051 CHAR s[128];
1052
1053 if(!DosQuerySysInfo(QSV_MS_COUNT,
1054 QSV_MS_COUNT,
1055 (PVOID)&val,
1056 (ULONG)sizeof(val))) {
1057 val /= 60000L;
1058 numdays = val / (60L * 24L);
1059 strcpy(s,GetPString(IDS_ELAPSEDTITLETEXT));
1060 if(numdays)
1061 sprintf(s + strlen(s),
1062 " %lu %s%s, ",
1063 numdays,
1064 GetPString(IDS_DAYTEXT),
1065 &"s"[numdays == 1L]);
1066 nummins = val % (60L * 24L);
1067 sprintf(s + strlen(s),
1068 " %lu:%02lu",
1069 nummins / 60,
1070 nummins % 60);
1071 WinSetDlgItemText(hwnd,
1072 MINI_TIME,
1073 s);
1074 }
1075 }
1076 return 0;
1077
1078 case WM_SAVEAPPLICATION:
1079 {
1080 SWP swp;
1081
1082 WinQueryWindowPos(WinQueryWindow(hwnd,QW_PARENT),&swp);
1083 PrfWriteProfileData(fmprof,
1084 appname,
1085 "DataMinPos",
1086 &swp,
1087 sizeof(SWP));
1088 }
1089 break;
1090
1091 case WM_CLOSE:
1092 WinSendMsg(hwnd,
1093 WM_SAVEAPPLICATION,
1094 MPVOID,
1095 MPVOID);
1096 WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT));
1097 return 0;
1098
1099 case WM_DESTROY:
1100 if(DataHwnd == WinQueryWindow(hwnd,QW_PARENT)) {
1101 DataHwnd = (HWND)0;
1102 if(hwndMenu)
1103 WinDestroyWindow(hwndMenu);
1104 hwndMenu = (HWND)0;
1105 }
1106 if(hwndMain) {
1107
1108 SWP swp;
1109 ULONG fl = SWP_SHOW | SWP_ZORDER | SWP_ACTIVATE,ofl;
1110
1111 ofl = WinQueryWindowULong(hwnd,0);
1112 WinQueryWindowPos(WinQueryWindow(hwndMain,QW_PARENT),&swp);
1113 if(swp.fl & SWP_MINIMIZE)
1114 fl |= ((ofl & SWP_MAXIMIZE) ? SWP_MAXIMIZE : SWP_RESTORE);
1115 WinSetWindowPos(WinQueryWindow(hwndMain,QW_PARENT),
1116 HWND_TOP,
1117 0,
1118 0,
1119 0,
1120 0,
1121 fl);
1122 }
1123 else if(!PostMsg((HWND)0,
1124 WM_QUIT,
1125 MPVOID,
1126 MPVOID))
1127 WinSendMsg((HWND)0,
1128 WM_QUIT,
1129 MPVOID,
1130 MPVOID);
1131 break;
1132 }
1133 return WinDefWindowProc(hwnd,msg,mp1,mp2);
1134}
1135
1136
1137HWND CreateDataBar (HWND hwndParent,ULONG fl) {
1138
1139 HWND hwndClient = (HWND)0;
1140 ULONG FrameFlags = 0;
1141
1142 if(WinCreateStdWindow(hwndParent,
1143 WS_VISIBLE,
1144 &FrameFlags,
1145 GetPString(IDS_WCDATABAR),
1146 NULL,
1147 WS_VISIBLE,
1148 0,
1149 MINI_FRAME,
1150 &hwndClient)) {
1151 WinSendMsg(hwndClient,
1152 UM_RESTORE,
1153 MPFROMLONG(fl),
1154 MPVOID);
1155 }
1156 return hwndClient;
1157}
Note: See TracBrowser for help on using the repository browser.