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
RevLine 
[30]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
[130]9 Copyright (c) 2001, 2005 Steven H.Levine
[30]10
[130]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
[30]14
15***********************************************************************/
16
[2]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:
[130]256 WinSetWindowPtr(hwnd,QWL_USER,mp1);
[2]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 {
[36]622 CHAR s[90],szFreeQty[38],*pszFreeUM,path[] = " :",
[2]623 *szBuf = NULL,*FSystem = NULL;
[36]624 float fltFreeQty;
625 ULONG percentfree,wasx,size;
[2]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;
[36]640 *szFreeQty = 0;
[2]641 DosError(FERR_DISABLEHARDERR);
642 if(!DosQueryFSInfo((id - MINI_DRIVEA) + 1,
643 FSIL_ALLOC,
644 &fsa,
645 sizeof(FSALLOCATE))) {
[36]646 fltFreeQty = (float)fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector);
647 if (fltFreeQty >= (1024 * 1024)) {
648 fltFreeQty /= (1024 * 1024);
649 pszFreeUM = "mb";
[2]650 }
[36]651 else if (fltFreeQty >= 1024) {
652 fltFreeQty /= 1024;
653 pszFreeUM = "kb";
[2]654 }
655 else
[36]656 {
657 pszFreeUM = "b";
658 }
[2]659 percentfree = (fsa.cUnit && fsa.cUnitAvail) ?
[36]660 (fsa.cUnitAvail * 100) / fsa.cUnit : 0;
661 commafmt(szFreeQty,sizeof(szFreeQty),(ULONG)fltFreeQty);
[2]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,
[36]684 szFreeQty,
685 pszFreeUM,
[2]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 {
[36]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;
[2]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);
[36]881 *szFileQty = *szFreeQty = 0;
[2]882 DosError(FERR_DISABLEHARDERR);
883 if(!DosQueryFSInfo(toupper(*SwapperDat) - '@',FSIL_ALLOC,
884 &fsa,sizeof(FSALLOCATE))) {
[36]885 fltFreeQty = fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector);
886 if(fltFreeQty > 1024 * 1024) {
887 pszFreeUM = "mb";
888 fltFreeQty /= (1024 * 1024);
[2]889 }
[36]890 else if(fltFreeQty > 1024) {
891 pszFreeUM = "kb";
892 fltFreeQty /= 1024;
[2]893 }
894 else {
[36]895 pszFreeUM = "b";
[2]896 }
[36]897 commafmt(szFreeQty,sizeof(szFreeQty),(ULONG)fltFreeQty);
[2]898 }
899 if(ffb.cbFile > 1024 * 1024) {
[36]900 pszFileUM = "mb";
901 commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile / (1024 * 1024));
[2]902 }
903 else if(ffb.cbFile > 1024) {
[36]904 pszFileUM = "kb";
905 commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile / 1024);
[2]906 }
907 else {
[36]908 pszFileUM = "b";
909 commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile);
[2]910 }
911 sprintf(s," %s %s%s%s%s%s",
912 GetPString(IDS_SWAPTITLETEXT),
[36]913 szFileQty,
914 pszFileUM,
915 (*szFreeQty) ? "/" : NullStr,
916 szFreeQty,
917 (*szFreeQty) ? pszFreeUM : NullStr);
[2]918 WinSetDlgItemText(hwnd,
919 MINI_SWAP,
920 s);
921 }
922 }
923 }
924 return 0;
925
926 case UM_SETUP3:
927 {
[36]928 CHAR s[134],tm[38],szQty[38],*pszUM,*tmk;
[2]929 ULONG amem = 0;
930
931 if(!DosQuerySysInfo(QSV_TOTAVAILMEM,QSV_TOTAVAILMEM,
932 (PVOID)&amem,(ULONG)sizeof(amem))) {
[36]933 *tm = *szQty = 0;
[2]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) {
[36]948 pszUM = "mb";
949 commafmt(szQty,sizeof(szQty),amem / (1024 * 1024));
[2]950 }
951 else if(amem > 1024) {
[36]952 pszUM = "kb";
953 commafmt(szQty,sizeof(szQty),amem / 1024);
[2]954 }
955 else {
[36]956 pszUM = "b";
957 commafmt(szQty,sizeof(szQty),amem);
[2]958 }
959 }
960 sprintf(s," %s%s%s%s%s%s",
961 GetPString(IDS_MEMTITLETEXT),
[36]962 szQty,
963 (*szQty) ? pszUM : NullStr,
964 (*szQty) ? "/" : NullStr,
[2]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 {
[36]992 CHAR s[134],tm[38],szQty[38];
[2]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 }
[36]1016 *szQty = *tm = 0;
1017 commafmt(szQty,sizeof(szQty),numprocs);
[2]1018 commafmt(tm,sizeof(tm),numthreads);
1019 sprintf(s,
1020 " %s%s %s%s",
1021 GetPString(IDS_PROCSTITLETEXT),
[36]1022 szQty,
[2]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 {
[36]1035 *szQty = 0;
1036 commafmt(szQty,sizeof(szQty),
[2]1037 WinQuerySwitchList(WinQueryAnchorBlock(hwnd),(PSWBLOCK)0,0));
1038 sprintf(s,
1039 " %s%s",
1040 GetPString(IDS_TASKSTITLETEXT),
[36]1041 szQty);
[2]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
[130]1112 ofl = WinQueryWindowULong(hwnd,QWL_USER);
[2]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.