source: trunk/dll/datamin.c@ 2

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