source: trunk/dll/datamin.c@ 130

Last change on this file since 130 was 130, checked in by root, 20 years ago

Use QWL_USER

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