Changeset 136 for trunk/dll/datamin.c
- Timestamp:
- May 25, 2005, 1:30:12 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/datamin.c
r130 r136 12 12 16 Oct 02 SHL Handle large partitions better 13 13 23 May 05 SHL Use QWL_USER 14 23 May 05 SHL Avoid delays for inaccessible drives 14 15 15 16 ***********************************************************************/ 16 17 17 18 #define INCL_DOS 19 #define INCL_DOSERRORS 18 20 #define INCL_WIN 19 21 #define INCL_GPI … … 25 27 #include <ctype.h> 26 28 #include <limits.h> 29 27 30 #include "fm3dll.h" 28 31 #include "fm3dlg.h" 29 32 #include "fm3str.h" 30 33 #include "procstat.h" 34 #include "datamin.h" 31 35 32 36 #pragma data_seg(DATA2) 33 37 #pragma alloc_text(DATAMIN,DataDlgProc,MiniTimeProc) 34 38 35 APIRET16 APIENTRY16 Dos16MemAvail (PULONG pulAvailMem); 36 37 long MINI_X = 208,MINI_Y = 16; 38 39 40 MRESULT 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); 39 APIRET16 APIENTRY16 Dos16MemAvail(PULONG pulAvailMem); 40 41 static volatile HEV G_hevDataMin = NULLHANDLE; 42 static volatile HWND G_hwndSingle = NULLHANDLE; 43 44 static VOID dataminThread (VOID *pv); 45 46 long MINI_X = 208, MINI_Y = 16; 47 48 //=== MiniTimeProc - time, swap and drive status mini windows procedure === 49 50 MRESULT EXPENTRY MiniTimeProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 51 { 52 APIRET rc; 53 switch (msg) 54 { 55 case WM_CREATE: 56 { 57 PVOID pv = malloc(sizeof(tDataMin)); 58 WinSetWindowPtr(hwnd, QWL_DATAMIN_PTR, pv); 59 } 60 break; 61 62 case WM_BUTTON1CLICK: 63 { 64 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID); 65 66 if (id >= MINI_DRIVEA) 67 { 68 if (G_hevDataMin != NULLHANDLE) 69 { 70 G_hwndSingle = hwnd; 71 rc = DosPostEventSem(G_hevDataMin); 72 if (rc) 73 { 74 Dos_Error(MB_ENTER, 75 rc, 76 HWND_DESKTOP, 77 __FILE__, 78 __LINE__, 79 "Post Semaphore failed" // GetPString(IDS_POSTSEMFAILED) 80 ); 81 } 82 } 83 } 84 else if (id == MINI_TIME) 85 PostMsg(WinQueryWindow(hwnd, QW_PARENT), 86 UM_SETUP6, // Up time 87 MPVOID, 88 MPVOID); 89 else if (id == MINI_PROC) 90 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), 91 WM_SYSCOMMAND, 92 MPFROM2SHORT(SC_TASKMANAGER, 0), 93 MPVOID); 94 } 95 break; 96 97 case WM_BUTTON1DBLCLK: 98 { 99 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID); 100 101 if (id >= MINI_DRIVEA && !hwndMain) 102 { 103 CHAR s[] = " :\\"; 104 105 *s = (CHAR) (id - MINI_DRIVEA) + 'A'; 106 OpenDirCnr((HWND) 0, 107 HWND_DESKTOP, 108 (HWND) 0, 109 FALSE, 110 s); 111 return MRFROMLONG(1L); 112 } 113 else if (id == MINI_TIME) 114 { 115 OpenObject("<WP_CLOCK>", 116 (SHORT2FROMMP(mp2) & KC_SHIFT) ? 117 Default : Settings, 118 hwnd); 119 return MRFROMLONG(1L); 120 } 121 122 #ifdef NEVER 123 else if (id == MINI_MEM) 124 { 125 WinDlgBox(HWND_DESKTOP, 126 HWND_DESKTOP, 127 SysInfoDlgProc, 128 FM3ModHandle, 129 SYS_FRAME, 130 NULL); 131 return MRFROMLONG(1L); 132 } 133 #endif 134 135 else if (id == MINI_PROC || id == MINI_MEM) 136 { 137 WinDlgBox(HWND_DESKTOP, 138 hwnd, 139 KillDlgProc, 140 FM3ModHandle, 141 KILL_FRAME, 142 NULL); 143 return MRFROMLONG(1L); 144 } 145 else if (id == MINI_SWAP && *SwapperDat) 146 { 147 148 char s[5]; 149 150 strncpy(s, SwapperDat, 4); 151 s[3] = 0; 152 WinDlgBox(HWND_DESKTOP, 153 hwndMain, 154 UndeleteDlgProc, 155 FM3ModHandle, 156 UNDEL_FRAME, 157 MPFROMP(s)); 158 return MRFROMLONG(1L); 159 } 160 } 161 break; 162 163 case WM_BUTTON1MOTIONSTART: 164 PostMsg(WinQueryWindow(hwnd, QW_PARENT), 165 UM_BUTTON1MOTIONSTART, 166 MPVOID, 167 MPVOID); 168 break; 169 170 case WM_CONTEXTMENU: 171 PostMsg(WinQueryWindow(hwnd, QW_PARENT), 172 UM_CONTEXTMENU, 173 MPVOID, 174 MPVOID); 175 break; 176 177 case WM_PAINT: 178 { 179 MRESULT mr = 0; 180 USHORT id; 181 182 id = WinQueryWindowUShort(hwnd, QWS_ID); 183 if (id >= MINI_DRIVEA) 184 { 185 HPS hps = WinBeginPaint(hwnd, (HPS) 0, NULL); 186 if (hps) 187 { 188 mr = WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), 189 UM_PAINT, 190 MPFROM2SHORT(id, 0), 191 MPFROMLONG(hps)); 192 WinEndPaint(hps); 193 return mr; // Bypass default paint 194 } 195 } 196 } 197 break; 198 199 case WM_DESTROY: 200 { 201 PVOID pv = WinQueryWindowPtr(hwnd, QWL_DATAMIN_PTR); 202 if (pv) 203 free(pv); 59 204 } 60 205 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 NEVER87 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 #endif97 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 else158 mr = PFNWPStatic(hwnd,msg,mp1,mp2);159 return mr;160 }161 206 } 162 return PFNWPStatic(hwnd,msg,mp1,mp2); 163 } 164 165 166 MRESULT EXPENTRY DataProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { 207 return PFNWPStatic(hwnd, msg, mp1, mp2); 208 209 } // MiniTimeProc 210 211 //=== DataProc - databar client window procedure === 212 213 MRESULT EXPENTRY DataProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 214 { 215 APIRET rc; 167 216 168 217 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); 218 static BOOL NoFloat, noqproc = FALSE, Positioned; 219 static HWND hwndMenu = (HWND) 0; 220 221 switch (msg) 222 { 223 case WM_CREATE: 224 if (DataHwnd) 225 { 226 WinSetWindowPos(DataHwnd, 227 HWND_TOP, 228 0, 229 0, 230 0, 231 0, 232 SWP_ZORDER | SWP_SHOW); 233 return MRFROMLONG(1L); 234 } 235 DataHwnd = WinQueryWindow(hwnd, QW_PARENT); 236 NoFloat = FALSE; 237 Positioned = FALSE; 238 SetPresParams(hwnd, 239 &RGBGREY, 240 &RGBBLACK, 241 &RGBBLACK, 242 GetPString(IDS_8HELVTEXT)); 243 { 244 int c; 245 long x = 3; 246 USHORT ids[] = {MINI_TIME, MINI_MEM, MINI_SWAP, MINI_PROC, 0}; 247 POINTL aptl[TXTBOX_COUNT]; 248 HPS hps; 249 250 hps = WinGetPS(hwnd); 251 if (hps) 252 { 253 GpiQueryTextBox(hps, 254 34, 255 " -=03:08:22 SMW 1998/08/02=- ", 256 TXTBOX_COUNT, 257 aptl); 258 WinReleasePS(hps); 259 MINI_X = aptl[TXTBOX_TOPRIGHT].x + 6; 260 MINI_Y = aptl[TXTBOX_TOPRIGHT].y + 6; 261 } 262 for (c = 0; ids[c]; c++) 263 { 264 WinCreateWindow(hwnd, 265 GetPString(IDS_WCMINITIME), 266 NullStr, 267 SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE, 268 x, 269 3, 270 MINI_X, 271 MINI_Y, 272 hwnd, 273 HWND_TOP, 274 ids[c], 275 NULL, 276 NULL); 277 x += (MINI_X + 4); 278 } 279 } 280 if (!hwndMain) 281 { 282 SWCNTRL swctl; 283 284 memset(&swctl, 0, sizeof(swctl)); 285 swctl.hwnd = WinQueryWindow(hwnd, QW_PARENT); 286 swctl.uchVisibility = SWL_VISIBLE; 287 swctl.fbJump = (fDataToFore) ? SWL_NOTJUMPABLE : SWL_JUMPABLE; 288 swctl.bProgType = PROG_PM; 289 strcpy(swctl.szSwtitle, 290 GetPString(IDS_DATABARTITLETEXT)); 291 WinCreateSwitchEntry(WinQueryAnchorBlock(hwnd), 292 &swctl); 293 } 294 PostMsg(hwnd, 295 UM_SETUP, 296 MPVOID, 297 MPVOID); 298 return 0; 299 300 case WM_MENUEND: 301 NoFloat = FALSE; 302 if (hwndMenu == (HWND) mp2) 303 { 304 WinDestroyWindow(hwndMenu); 305 hwndMenu = (HWND) 0; 306 } 307 break; 308 309 case UM_RESTORE: 310 WinSetWindowPtr(hwnd, QWL_USER, mp1); 311 return 0; 312 313 case UM_SETUP: 314 { 315 long x, y; 316 SWP swp, swpD; 317 int c; 318 ULONG size = sizeof(SWP); 319 ULONG numdrives = 0; 320 ULONG drivestyle = (DRIVE_REMOVABLE | DRIVE_INVALID | 321 DRIVE_IGNORE | DRIVE_ZIPSTREAM); 322 ULONG ulDriveNum, ulDriveMap; 323 324 if (!fDataInclRemote) 325 drivestyle |= DRIVE_REMOTE; 326 if (fDataShowDrives) 327 { 328 DosError(FERR_DISABLEHARDERR); 329 DosQCurDisk(&ulDriveNum, &ulDriveMap); 330 x = 3; 331 y = MINI_Y + 4; 332 // Drive status windows 333 for (c = 2; c < 26; c++) 334 { 335 if ((ulDriveMap & (1L << c)) && !(driveflags[c] & drivestyle)) 336 { 337 WinCreateWindow(hwnd, 338 GetPString(IDS_WCMINITIME), 339 NullStr, 340 SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE, 341 x, 342 y, 343 MINI_X, 344 MINI_Y, 345 hwnd, 346 HWND_TOP, 347 MINI_DRIVEA + c, 348 NULL, 349 NULL); 350 numdrives++; 351 x += (MINI_X + 4); 352 if ((numdrives % 4) == 0) 353 { 354 y += (MINI_Y + 4); 355 x = 3; 356 } 357 } 358 } 359 } 360 x = (MINI_X * 4) + 18; 361 y = (MINI_Y + 4) + ((numdrives / 4) * (MINI_Y + 4)) + 362 (((numdrives % 4) != 0) * (MINI_Y + 4)); 363 if (!Positioned) 364 { 365 if (PrfQueryProfileData(fmprof, 366 appname, 367 "DataMinPos", 368 &swp, 369 &size)) 370 { 371 WinQueryWindowPos(HWND_DESKTOP, &swpD); 372 if (swp.x > swpD.cx - 16) 373 swp.x = swpD.cx - 16; 374 if (swp.y > swpD.cy - 16) 375 swp.y = swpD.cy - 16; 376 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), 377 HWND_TOP, 378 swp.x, 379 swp.y, 380 x, 381 y, 382 SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ZORDER); 383 } 384 else 385 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), 386 HWND_TOP, 387 0, 388 0, 389 x, 390 y, 391 SWP_SHOW | SWP_SIZE | SWP_MOVE | SWP_ZORDER); 392 Positioned = TRUE; 393 } 394 else 395 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), 396 HWND_TOP, 397 0, 398 0, 399 x, 400 y, 401 SWP_SHOW | SWP_SIZE | SWP_ZORDER); 402 WinShowWindow(WinQueryWindow(hwnd, QW_PARENT), 403 TRUE); 404 if (numdrives) { 405 if (_beginthread(dataminThread, 406 NULL, 407 32768, 408 (PVOID)hwnd) == -1) 409 { 410 Dos_Error(MB_ENTER, 411 _doserrno, 412 HWND_DESKTOP, 413 __FILE__, 414 __LINE__, 415 GetPString(IDS_COULDNTSTARTTHREADTEXT)); 416 PostMsg(hwnd, 417 WM_CLOSE, 418 MPVOID, 419 MPVOID); 420 } 342 421 } 343 422 counter = 0; 344 423 PostMsg(hwnd, 345 UM_TIMER, 346 MPVOID, 347 MPVOID); 424 UM_TIMER, 425 MPVOID, 426 MPVOID); 427 } 428 return 0; // UM_SETUP 429 430 case WM_BUTTON1DBLCLK: 431 if (hwndMain) 432 PostMsg(hwnd, 433 WM_CLOSE, 434 MPVOID, 435 MPVOID); 436 break; 437 438 case UM_CONTEXTMENU: 439 case WM_CONTEXTMENU: 440 if (!hwndMenu) 441 hwndMenu = WinLoadMenu(HWND_DESKTOP, 442 FM3ModHandle, 443 MINI_FRAME); 444 if (hwndMenu) 445 { 446 WinCheckMenuItem(hwndMenu, 447 MINI_FLOAT, 448 fDataToFore); 449 WinCheckMenuItem(hwndMenu, 450 MINI_SHOW, 451 fDataShowDrives); 452 WinCheckMenuItem(hwndMenu, 453 MINI_BORING, 454 fDullMin); 455 WinCheckMenuItem(hwndMenu, 456 MINI_INCLREMOTE, 457 fDataInclRemote); 458 NoFloat = TRUE; 459 if (!PopupMenu(hwnd, 460 hwnd, 461 hwndMenu)) 462 NoFloat = FALSE; 463 } 464 if (msg == UM_CONTEXTMENU) 348 465 return 0; 349 350 case WM_BUTTON1DBLCLK: 351 if(hwndMain) 352 PostMsg(hwnd, 353 WM_CLOSE, 354 MPVOID, 355 MPVOID); 466 break; 467 468 case WM_BUTTON2DBLCLK: 469 if (!(SHORT2FROMMP(mp2) & KC_SHIFT)) 470 { 471 PostMsg(hwnd, 472 WM_COMMAND, 473 MPFROM2SHORT(MINI_FLOAT, 0), 474 MPVOID); 356 475 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; 476 } 477 /* else intentional fallthru */ 478 case WM_CHORD: 479 case WM_BUTTON3DBLCLK: 480 PostMsg(hwnd, 481 WM_COMMAND, 482 MPFROM2SHORT(MINI_SHOW, 0), 483 MPVOID); 484 break; 485 486 case UM_BUTTON1MOTIONSTART: 487 case WM_BUTTON1MOTIONSTART: 488 { 489 TRACKINFO TrackInfo; 490 SWP Position; 491 492 memset(&TrackInfo, 0, sizeof(TrackInfo)); 493 TrackInfo.cxBorder = 1; 494 TrackInfo.cyBorder = 1; 495 TrackInfo.cxGrid = 1; 496 TrackInfo.cyGrid = 1; 497 TrackInfo.cxKeyboard = 8; 498 TrackInfo.cyKeyboard = 8; 499 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &Position); 500 TrackInfo.rclTrack.xLeft = Position.x; 501 TrackInfo.rclTrack.xRight = Position.x + Position.cx; 502 TrackInfo.rclTrack.yBottom = Position.y; 503 TrackInfo.rclTrack.yTop = Position.y + Position.cy; 504 WinQueryWindowPos(HWND_DESKTOP, &Position); 505 TrackInfo.rclBoundary.xLeft = Position.x; 506 TrackInfo.rclBoundary.xRight = Position.x + Position.cx; 507 TrackInfo.rclBoundary.yBottom = Position.y; 508 TrackInfo.rclBoundary.yTop = Position.y + Position.cy; 509 TrackInfo.ptlMinTrackSize.x = 0; 510 TrackInfo.ptlMinTrackSize.y = 0; 511 TrackInfo.ptlMaxTrackSize.x = Position.cx; 512 TrackInfo.ptlMaxTrackSize.y = Position.cy; 513 TrackInfo.fs = TF_MOVE | TF_STANDARD | TF_ALLINBOUNDARY; 514 if (WinTrackRect(HWND_DESKTOP, (HPS) 0, &TrackInfo)) 515 { 516 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), 517 HWND_TOP, TrackInfo.rclTrack.xLeft, 518 TrackInfo.rclTrack.yBottom, 0, 0, SWP_MOVE); 519 WinSendMsg(hwnd, WM_SAVEAPPLICATION, MPVOID, MPVOID); 520 } 521 } 522 break; 523 524 case WM_HELP: 525 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_HELP, 0), MPVOID); 526 break; 527 528 case WM_COMMAND: 529 switch (SHORT1FROMMP(mp1)) 530 { 531 case IDM_COMMANDLINE: 532 case IDM_DOSCOMMANDLINE: 533 case IDM_WINFULLSCREEN: 534 { 535 CHAR *env = GetCmdSpec(FALSE), path[CCHMAXPATH]; 536 INT type = SEPARATE | WINDOWED; 537 538 *path = 0; 539 TopWindowName(hwnd, 540 (HWND) 0, 541 path); 542 if (SHORT1FROMMP(mp1) == IDM_DOSCOMMANDLINE) 543 env = GetCmdSpec(TRUE); 544 else if (SHORT1FROMMP(mp1) != IDM_COMMANDLINE) 545 { 546 env = "WINOS2.COM"; 547 type = SEPARATE | FULLSCREEN; 548 } 549 runemf2(type, 550 hwnd, 551 path, 552 NULL, 553 "%s", 554 env); 555 } 385 556 break; 386 557 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: 558 case IDM_HELP: 559 if (hwndHelp) 560 WinSendMsg(hwndHelp, 561 HM_DISPLAY_HELP, 562 MPFROM2SHORT(HELP_DATABAR, 0), 563 MPFROMSHORT(HM_RESOURCEID)); 564 break; 565 566 case MINI_CLOSE: 398 567 PostMsg(hwnd, 399 WM_COMMAND,400 MPFROM2SHORT(MINI_SHOW,0),401 568 WM_CLOSE, 569 MPVOID, 570 MPVOID); 402 571 break; 403 572 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 } 573 case MINI_BORING: 574 fDullMin = (fDullMin) ? FALSE : TRUE; 575 PrfWriteProfileData(fmprof, 576 FM3Str, 577 "DullDatabar", 578 &fDullMin, 579 sizeof(BOOL)); 580 if (G_hevDataMin != NULLHANDLE) 581 { 582 rc = DosPostEventSem(G_hevDataMin); 583 if (rc) { 584 Dos_Error(MB_ENTER, 585 rc, 586 HWND_DESKTOP, 587 __FILE__, 588 __LINE__, 589 "Post Semaphore failed" // GetPString(IDS_POSTSEMFAILED) 590 ); 591 } 592 } 593 439 594 break; 440 595 441 case WM_HELP: 442 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_HELP,0),MPVOID); 596 case MINI_INCLREMOTE: 597 case MINI_SHOW: 598 if (SHORT1FROMMP(mp1) == MINI_SHOW) 599 { 600 fDataShowDrives = (fDataShowDrives) ? FALSE : TRUE; 601 PrfWriteProfileData(fmprof, 602 appname, 603 "DataShowDrives", 604 &fDataShowDrives, 605 sizeof(BOOL)); 606 } 607 else 608 { 609 fDataInclRemote = (fDataInclRemote) ? FALSE : TRUE; 610 PrfWriteProfileData(fmprof, 611 appname, 612 "DataInclRemote", 613 &fDataInclRemote, 614 sizeof(BOOL)); 615 } 616 { 617 HENUM henum; 618 HWND hwndChild; 619 USHORT id; 620 621 henum = WinBeginEnumWindows(hwnd); 622 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE) 623 { 624 id = WinQueryWindowUShort(hwndChild, QWS_ID); 625 if (id >= MINI_DRIVEA) 626 WinDestroyWindow(hwndChild); 627 } 628 WinEndEnumWindows(henum); 629 } 630 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID); 443 631 break; 444 632 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); 633 case MINI_FLOAT: 634 fDataToFore = (fDataToFore) ? FALSE : TRUE; 635 PrfWriteProfileData(fmprof, 636 appname, 637 "DataToFore", 638 &fDataToFore, 639 sizeof(BOOL)); 640 if (!hwndMain) 641 { 642 643 SWCNTRL swcntrl; 644 HSWITCH hswitch; 645 646 hswitch = (HSWITCH) WinQuerySwitchHandle(hwnd, (PID) 0); 647 if (hswitch) 648 { 649 memset(&swcntrl, 0, sizeof(SWCNTRL)); 650 if (!WinQuerySwitchEntry(hswitch, &swcntrl)) 651 { 652 swcntrl.fbJump = (fDataToFore) ? SWL_NOTJUMPABLE : SWL_JUMPABLE; 653 WinChangeSwitchEntry(hswitch, 654 &swcntrl); 655 } 656 } 657 } 570 658 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 659 } 660 return 0; 661 662 case WM_SIZE: 663 WinSetWindowPos(hwnd, 664 HWND_TOP, 665 0, 666 0, 667 SHORT1FROMMP(mp2), 668 SHORT2FROMMP(mp2), 669 SWP_MOVE | SWP_SIZE); 670 break; 671 672 case WM_PAINT: 673 { 674 HPS hps; 675 POINTL ptl; 676 SWP swp; 677 RECTL rcl; 678 679 hps = WinBeginPaint(hwnd, 680 (HPS) 0, 681 &rcl); 682 if (hps) 683 { 684 WinFillRect(hps, 685 (PRECTL) & rcl, 686 CLR_PALEGRAY); 687 GpiSetMix(hps, FM_OVERPAINT); 688 GpiSetColor(hps, CLR_WHITE); 689 WinQueryWindowPos(hwnd, &swp); 690 ptl.x = 0; 691 ptl.y = 0; 692 GpiMove(hps, &ptl); 693 ptl.y = swp.cy - 1; 694 GpiLine(hps, &ptl); 695 ptl.x = swp.cx - 1; 696 GpiLine(hps, &ptl); 697 GpiSetColor(hps, CLR_DARKGRAY); 698 ptl.y = 0; 699 GpiLine(hps, &ptl); 700 ptl.x = 0; 701 GpiLine(hps, &ptl); 702 { 703 HENUM henum; 704 HWND hwndTemp; 705 706 henum = WinBeginEnumWindows(hwnd); 707 while ((hwndTemp = WinGetNextWindow(henum)) != NULLHANDLE) 708 { 709 PaintRecessedWindow(hwndTemp, 710 hps, 711 (WinQueryWindowUShort(hwndTemp, QWS_ID) 712 != MINI_TIME), 713 FALSE); 714 } 715 WinEndEnumWindows(henum); 716 } 717 WinEndPaint(hps); 718 } 719 } 720 return 0; 721 722 case UM_PAINT: 723 { 724 CHAR s[90]; 725 CHAR szFreeQty[38]; 726 CHAR *pszFreeUM; 727 CHAR szDrvLtr[] = " :"; 728 CHAR *pszFSystem; 729 float fltFreeQty; 730 ULONG ulPercentFree; 731 ULONG wasx; 732 HPS hps = (HPS) mp2; 733 HWND hwndChild; 734 USHORT id; 735 SWP swp; 736 POINTL ptl; 737 tDataMin *pDM; 738 739 id = SHORT1FROMMP(mp1); 740 if (id >= MINI_DRIVEA) 741 { 742 hwndChild = WinWindowFromID(hwnd, id); 743 if (!hwndChild) 744 return 0; 745 if (!WinQueryWindowPos(hwndChild, &swp)) 746 return 0; 747 pDM = WinQueryWindowPtr(hwndChild, QWL_DATAMIN_PTR); 748 if (!pDM || pDM -> qfsi_rc) 749 { 750 fltFreeQty = 0; 751 pszFreeUM = ""; 752 ulPercentFree = 0; 753 } 754 else 755 { 756 fltFreeQty = (float) pDM -> fsa.cUnitAvail * 757 (pDM -> fsa.cSectorUnit * pDM -> fsa.cbSector); 758 if (fltFreeQty >= (1024 * 1024)) 759 { 760 fltFreeQty /= (1024 * 1024); 761 pszFreeUM = "mb"; 762 } 763 else if (fltFreeQty >= 1024) 764 { 765 fltFreeQty /= 1024; 766 pszFreeUM = "kb"; 767 } 768 else 769 pszFreeUM = "b"; 770 771 ulPercentFree = (pDM -> fsa.cUnit && pDM -> fsa.cUnitAvail) ? 772 (pDM -> fsa.cUnitAvail * 100) / pDM -> fsa.cUnit : 773 0; 774 } 775 776 commafmt(szFreeQty, sizeof(szFreeQty), (ULONG)fltFreeQty); 777 *szDrvLtr = (CHAR)(id - MINI_DRIVEA) + 'A'; 778 779 if (!pDM || pDM -> qfsi_rc || pDM -> qfsa_rc) 780 pszFSystem = "N/A"; 781 else 782 { 783 pszFSystem = pDM -> fsqb2.szName + 784 pDM -> fsqb2.cbName + 1; 785 pszFSystem[15] = 0; 786 } 787 sprintf(s, 788 " %s %s%s (%lu%%) %s [%s]", 789 szDrvLtr, 790 szFreeQty, 791 pszFreeUM, 792 ulPercentFree, 793 GetPString(IDS_FREETEXT), 794 pszFSystem); 795 if (!hps) 796 hps = WinGetPS(hwndChild); 797 if (hps) 798 { 799 if (!fDullMin) 800 { 801 ptl.x = 0; 802 ptl.y = 0; 803 GpiMove(hps, 804 &ptl); 805 GpiSetColor(hps, 806 CLR_BLACK); 807 ptl.x = swp.cx - 1; 808 ptl.y = swp.cy - 1; 809 GpiBox(hps, 810 DRO_OUTLINE, 811 &ptl, 812 0, 813 0); 814 ptl.x = 1; 815 ptl.y = 1; 816 if (ulPercentFree) 656 817 { 657 pszFreeUM = "b"; 818 GpiMove(hps, &ptl); 819 GpiSetColor(hps, 820 (ulPercentFree < 11) ? CLR_DARKRED : 821 (ulPercentFree < 26) ? CLR_DARKBLUE : 822 CLR_DARKGREEN); 823 ptl.y = swp.cy - 2; 824 ptl.x = ((swp.cx - 2) * ulPercentFree) / 100; 825 wasx = ptl.x; 826 GpiBox(hps, 827 DRO_OUTLINEFILL, 828 &ptl, 829 0, 830 0); 831 GpiSetColor(hps, 832 (ulPercentFree < 11) ? CLR_RED : 833 (ulPercentFree < 26) ? CLR_BLUE : CLR_GREEN); 834 ptl.x = wasx; 835 ptl.y = swp.cy - 2; 836 GpiMove(hps, 837 &ptl); 838 ptl.x = 1; 839 GpiLine(hps, 840 &ptl); 841 ptl.y = 2; 842 ptl.x = 1; 843 GpiLine(hps, 844 &ptl); 845 ptl.x = wasx; 658 846 } 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; 847 if (ulPercentFree < 99) 848 { 849 GpiSetColor(hps, 850 CLR_DARKGRAY); 851 wasx = ptl.x; 852 ptl.y = 2; 853 GpiMove(hps, &ptl); 854 ptl.y = swp.cy - 2; 855 ptl.x = swp.cx - 2; 856 GpiBox(hps, 857 DRO_OUTLINEFILL, 858 &ptl, 859 0, 860 0); 861 ptl.x = wasx; 862 GpiMove(hps, 863 &ptl); 864 GpiSetColor(hps, 865 CLR_PALEGRAY); 866 ptl.x = swp.cx - 3; 867 GpiLine(hps, &ptl); 868 ptl.x = wasx; 869 ptl.y = 1; 870 GpiMove(hps, &ptl); 871 GpiSetColor(hps, 872 CLR_BLACK); 873 ptl.x = swp.cx - 2; 874 GpiLine(hps, &ptl); 875 ptl.y = swp.cy - 3; 876 GpiLine(hps, &ptl); 877 } 878 GpiSetColor(hps, 879 CLR_WHITE); 880 } 881 else 882 { 883 GpiSetColor(hps, 884 CLR_PALEGRAY); 885 ptl.x = 0; 886 ptl.y = 0; 887 GpiMove(hps, 888 &ptl); 889 ptl.x = swp.cx - 1; 890 ptl.y = swp.cy - 1; 891 GpiBox(hps, 892 DRO_OUTLINEFILL, 893 &ptl, 894 0, 895 0); 896 GpiSetColor(hps, 897 (ulPercentFree < 11) ? CLR_DARKRED : 898 CLR_DARKBLUE); 899 } 900 GpiSetBackMix(hps, 901 BM_LEAVEALONE); 902 GpiSetMix(hps, 903 FM_OVERPAINT); 904 { 905 POINTL aptl[TXTBOX_COUNT]; 906 907 GpiQueryTextBox(hps, 908 strlen(s), 909 s, 910 TXTBOX_COUNT, 911 aptl); 912 ptl.y = ((swp.cy / 2) - 913 ((aptl[TXTBOX_TOPRIGHT].y + 914 aptl[TXTBOX_BOTTOMLEFT].y) / 2)); 915 ptl.y++; 916 ptl.x = (swp.cx / 2) - (aptl[TXTBOX_TOPRIGHT].x / 2); 917 if (ptl.x < 2) 918 ptl.x = 2; 919 GpiCharStringAt(hps, 920 &ptl, 921 strlen(s), 922 s); 923 } 924 if (!mp2) 925 WinReleasePS(hps); 926 } 927 } // if drive window 928 } 929 return 0; 930 931 case UM_TIMER: 932 { 933 CHAR s[134]; 934 DATETIME dt; 935 936 if (fDataToFore && !NoFloat) 937 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT), 938 HWND_TOP, 0, 0, 0, 0, SWP_ZORDER); 939 if (counter && (counter % 19) && (counter % 20)) 940 { 941 if (!DosGetDateTime(&dt)) 942 { 943 sprintf(s, 944 " %02hu:%02hu:%02hu %s %04u/%02u/%02u", 945 dt.hours, 946 dt.minutes, 947 dt.seconds, 948 GetPString(IDS_SUNDAY + dt.weekday), 949 dt.year, 950 dt.month, 951 dt.day); 952 WinSetDlgItemText(hwnd, 953 MINI_TIME, 954 s); 955 } 956 } 957 else if (!counter || !(counter % 19)) 958 PostMsg(hwnd, UM_SETUP6, MPVOID, MPVOID); // Uptime 959 if (!(counter % 4)) 960 { 961 PostMsg(hwnd, UM_SETUP3, MPVOID, MPVOID); // Memory utilization 962 if (!(counter % 10)) 963 { 964 PostMsg(hwnd, UM_SETUP5, MPVOID, MPVOID); // Process status 965 if (!(counter % 20)) 966 { 967 PostMsg(hwnd, UM_SETUP2, MPVOID, MPVOID); // Swapper 968 } 969 } 970 } 971 } 972 counter++; 973 return 0; 974 975 case UM_SETUP2: 976 { 977 CHAR s[134], szFileQty[38], szFreeQty[38], *pszFileUM, *pszFreeUM; 978 FILEFINDBUF3 ffb; 979 ULONG nm = 1L; 980 float fltFreeQty; 981 HDIR hdir = HDIR_CREATE; 982 FSALLOCATE fsa; 983 984 if (*SwapperDat) 985 { 986 DosError(FERR_DISABLEHARDERR); 987 if (!DosFindFirst(SwapperDat, &hdir, FILE_NORMAL | FILE_HIDDEN | 988 FILE_SYSTEM | FILE_ARCHIVED | FILE_READONLY, 989 &ffb, sizeof(ffb), &nm, FIL_STANDARD)) 990 { 991 priority_bumped(); 992 DosFindClose(hdir); 993 *szFileQty = *szFreeQty = 0; 994 DosError(FERR_DISABLEHARDERR); 995 if (!DosQueryFSInfo(toupper(*SwapperDat) - '@', FSIL_ALLOC, 996 &fsa, sizeof(FSALLOCATE))) 997 { 998 fltFreeQty = fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector); 999 if (fltFreeQty > 1024 * 1024) 1000 { 1001 pszFreeUM = "mb"; 1002 fltFreeQty /= (1024 * 1024); 1003 } 1004 else if (fltFreeQty > 1024) 1005 { 1006 pszFreeUM = "kb"; 1007 fltFreeQty /= 1024; 1008 } 1009 else 1010 { 1011 pszFreeUM = "b"; 1012 } 1013 commafmt(szFreeQty, sizeof(szFreeQty), (ULONG) fltFreeQty); 1014 } 1015 if (ffb.cbFile > 1024 * 1024) 1016 { 1017 pszFileUM = "mb"; 1018 commafmt(szFileQty, sizeof(szFileQty), ffb.cbFile / (1024 * 1024)); 1019 } 1020 else if (ffb.cbFile > 1024) 1021 { 1022 pszFileUM = "kb"; 1023 commafmt(szFileQty, sizeof(szFileQty), ffb.cbFile / 1024); 1024 } 1025 else 1026 { 1027 pszFileUM = "b"; 1028 commafmt(szFileQty, sizeof(szFileQty), ffb.cbFile); 1029 } 1030 sprintf(s, " %s %s%s%s%s%s", 1031 GetPString(IDS_SWAPTITLETEXT), 1032 szFileQty, 1033 pszFileUM, 1034 (*szFreeQty) ? "/" : NullStr, 1035 szFreeQty, 1036 (*szFreeQty) ? pszFreeUM : NullStr); 1037 WinSetDlgItemText(hwnd, 1038 MINI_SWAP, 1039 s); 1040 } 1041 } 1042 } 1043 return 0; 1044 1045 case UM_SETUP3: // Memory utilization 1046 { 1047 CHAR s[134], tm[38], szQty[38], *pszUM, *tmk; 1048 ULONG amem = 0; 1049 1050 if (!DosQuerySysInfo(QSV_TOTAVAILMEM, QSV_TOTAVAILMEM, 1051 (PVOID) & amem, (ULONG) sizeof(amem))) 1052 { 1053 *tm = *szQty = 0; 1054 if (amem > 1024 * 1024) 1055 { 1056 tmk = "mb"; 1057 commafmt(tm, sizeof(tm), amem / (1024 * 1024)); 1058 } 1059 else if (amem > 1024) 1060 { 1061 tmk = "kb"; 1062 commafmt(tm, sizeof(tm), amem / 1024); 1063 } 1064 else 1065 { 1066 tmk = "b"; 1067 commafmt(tm, sizeof(tm), amem); 1068 } 1069 if (!Dos16MemAvail(&amem)) 1070 { 1071 if (amem > 1024 * 1024) 1072 { 1073 pszUM = "mb"; 1074 commafmt(szQty, sizeof(szQty), amem / (1024 * 1024)); 1075 } 1076 else if (amem > 1024) 1077 { 1078 pszUM = "kb"; 1079 commafmt(szQty, sizeof(szQty), amem / 1024); 1080 } 1081 else 1082 { 1083 pszUM = "b"; 1084 commafmt(szQty, sizeof(szQty), amem); 1085 } 1086 } 1087 sprintf(s, " %s%s%s%s%s%s", 1088 GetPString(IDS_MEMTITLETEXT), 1089 szQty, 1090 (*szQty) ? pszUM : NullStr, 1091 (*szQty) ? "/" : NullStr, 1092 tm, 1093 tmk); 1094 WinSetDlgItemText(hwnd, 1095 MINI_MEM, 1096 s); 1097 } 1098 } 1099 return 0; 1100 1101 case UM_SETUP5: // Process status 1102 { 1103 CHAR s[134], tm[38], szQty[38]; 1104 1105 if (fUseQProcStat && !noqproc) 1106 { 1107 1108 PROCESSINFO *ppi; 1109 BUFFHEADER *pbh = NULL; 1110 MODINFO *pmi; 1111 ULONG numprocs = 0, numthreads = 0; 1112 1113 if (!DosAllocMem((PVOID) & pbh, USHRT_MAX + 4096, 1114 PAG_COMMIT | OBJ_TILE | PAG_READ | PAG_WRITE)) 1115 { 1116 if (!DosQProcStatus(pbh, USHRT_MAX)) 1117 { 1118 ppi = pbh -> ppi; 1119 while (ppi -> ulEndIndicator != PROCESS_END_INDICATOR) 1120 { 1121 pmi = pbh -> pmi; 1122 while (pmi && ppi -> hModRef != pmi -> hMod) 1123 pmi = pmi -> pNext; 1124 if (pmi) 1125 { 1126 numprocs++; 1127 numthreads += ppi -> usThreadCount; 1128 } 1129 ppi = (PPROCESSINFO) (ppi -> ptiFirst + ppi -> usThreadCount); 1130 } 1131 *szQty = *tm = 0; 1132 commafmt(szQty, sizeof(szQty), numprocs); 1133 commafmt(tm, sizeof(tm), numthreads); 1134 sprintf(s, 1135 " %s%s %s%s", 1136 GetPString(IDS_PROCSTITLETEXT), 1137 szQty, 1138 GetPString(IDS_THRDSTITLETEXT), 1139 tm); 1140 WinSetDlgItemText(hwnd, 1141 MINI_PROC, 1142 s); 1143 } 1144 else 1145 noqproc = TRUE; 1146 DosFreeMem(pbh); 1147 } 1148 } 1149 else 1150 { 1151 *szQty = 0; 1152 commafmt(szQty, sizeof(szQty), 1153 WinQuerySwitchList(WinQueryAnchorBlock(hwnd), (PSWBLOCK) 0, 0)); 1154 sprintf(s, 1155 " %s%s", 1156 GetPString(IDS_TASKSTITLETEXT), 1157 szQty); 1158 WinSetDlgItemText(hwnd, 1159 MINI_PROC, 1160 s); 1161 } 1162 } 1163 return 0; 1164 1165 case UM_SETUP6: // Uptime 1166 { 1167 ULONG val = 0, numdays, nummins; 1168 CHAR s[128]; 1169 1170 if (!DosQuerySysInfo(QSV_MS_COUNT, 1171 QSV_MS_COUNT, 1172 (PVOID) & val, 1173 (ULONG) sizeof(val))) 1174 { 1175 val /= 60000L; 1176 numdays = val / (60L * 24L); 1177 strcpy(s, GetPString(IDS_ELAPSEDTITLETEXT)); 1178 if (numdays) 1179 sprintf(s + strlen(s), 1180 " %lu %s%s, ", 1181 numdays, 1182 GetPString(IDS_DAYTEXT), 1183 &"s"[numdays == 1L]); 1184 nummins = val % (60L * 24L); 1185 sprintf(s + strlen(s), 1186 " %lu:%02lu", 1187 nummins / 60, 1188 nummins % 60); 1189 WinSetDlgItemText(hwnd, 1190 MINI_TIME, 1191 s); 1192 } 1193 } 1194 return 0; 1195 1196 case WM_SAVEAPPLICATION: 1197 { 1198 SWP swp; 1199 1200 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp); 1201 PrfWriteProfileData(fmprof, 1202 appname, 1203 "DataMinPos", 1204 &swp, 1205 sizeof(SWP)); 1206 } 1207 break; 1208 1209 case WM_CLOSE: 1210 WinSendMsg(hwnd, 1211 WM_SAVEAPPLICATION, 1212 MPVOID, 1213 MPVOID); 1214 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT)); 1215 return 0; 1216 1217 case WM_DESTROY: 1218 if (DataHwnd == WinQueryWindow(hwnd, QW_PARENT)) 1219 { 1220 DataHwnd = (HWND)0; 1221 if (hwndMenu) 1222 WinDestroyWindow(hwndMenu); 1223 hwndMenu = (HWND)0; 1224 } 1225 if (hwndMain) 1226 { 1227 1228 SWP swp; 1229 ULONG fl = SWP_SHOW | SWP_ZORDER | SWP_ACTIVATE, ofl; 1230 1231 ofl = WinQueryWindowULong(hwnd, QWL_USER); 1232 WinQueryWindowPos(WinQueryWindow(hwndMain, QW_PARENT), &swp); 1233 if (swp.fl & SWP_MINIMIZE) 1234 fl |= ((ofl & SWP_MAXIMIZE) ? SWP_MAXIMIZE : SWP_RESTORE); 1235 WinSetWindowPos(WinQueryWindow(hwndMain, QW_PARENT), 1236 HWND_TOP, 1237 0, 1238 0, 1239 0, 1240 0, 1241 fl); 1242 } 1243 else if (!PostMsg((HWND)0, 1244 WM_QUIT, 1245 MPVOID, 1246 MPVOID)) 1247 WinSendMsg((HWND)0, 1248 WM_QUIT, 1249 MPVOID, 1250 MPVOID); 1251 break; 1133 1252 } 1134 return WinDefWindowProc(hwnd,msg,mp1,mp2); 1135 } 1136 1137 1138 HWND CreateDataBar (HWND hwndParent,ULONG fl) { 1139 1140 HWND hwndClient = (HWND)0; 1253 return WinDefWindowProc(hwnd, msg, mp1, mp2); 1254 1255 } // DataProc 1256 1257 //=== CreateDataBar - create databar windows === 1258 1259 HWND CreateDataBar(HWND hwndParent, ULONG fl) 1260 { 1261 HWND hwndClient = (HWND) 0; 1141 1262 ULONG FrameFlags = 0; 1142 1263 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)) { 1264 if (WinCreateStdWindow(hwndParent, 1265 WS_VISIBLE, 1266 &FrameFlags, 1267 GetPString(IDS_WCDATABAR), 1268 NULL, 1269 WS_VISIBLE, 1270 0, 1271 MINI_FRAME, 1272 &hwndClient)) 1273 { 1152 1274 WinSendMsg(hwndClient, 1153 1154 1155 1275 UM_RESTORE, 1276 MPFROMLONG(fl), 1277 MPVOID); 1156 1278 } 1157 1279 return hwndClient; 1158 } 1280 1281 } // CreateDataBar 1282 1283 //=== dataminThread - drive status thread === 1284 1285 static VOID dataminThread (VOID *pv) 1286 { 1287 HAB hab = NULLHANDLE; 1288 HMQ hmq = NULLHANDLE; 1289 HWND hwndParent = (HWND)pv; 1290 HWND hwnd; 1291 HENUM henum; 1292 BOOL busy = TRUE; 1293 APIRET rc; 1294 USHORT id; 1295 1296 if (G_hevDataMin == NULLHANDLE) 1297 { 1298 // Create just once for any thread that might use it 1299 // Kernel will clean up on exit 1300 rc = DosCreateEventSem(NULL,(PHEV)&G_hevDataMin,0L,FALSE); 1301 if (rc) { 1302 Dos_Error(MB_ENTER, 1303 rc, 1304 HWND_DESKTOP, 1305 __FILE__, 1306 __LINE__, 1307 "Create Semaphore failed" // GetPString(IDS_CREATESEMFAILED) 1308 ); 1309 busy = FALSE; 1310 } 1311 } 1312 1313 // fixme to complain 1314 hab = WinInitialize(0); 1315 if (hab == NULLHANDLE) 1316 busy = FALSE; 1317 else 1318 { 1319 hmq = WinCreateMsgQueue(hab,0); 1320 if (hmq == NULLHANDLE) 1321 busy = FALSE; 1322 else 1323 WinCancelShutdown(hmq,TRUE); 1324 } 1325 1326 while (busy) 1327 { 1328 HWND hwndSingle = G_hwndSingle; 1329 G_hwndSingle = NULLHANDLE; 1330 1331 busy = FALSE; 1332 1333 if (!WinIsWindow(hab,hwndParent)) 1334 break; 1335 1336 henum = WinBeginEnumWindows(hwndParent); 1337 while(henum && (hwnd = WinGetNextWindow(henum)) != NULLHANDLE) 1338 { 1339 if (!WinIsWindow(hab,hwnd)) 1340 continue; 1341 if (hwndSingle && hwndSingle != hwnd) 1342 continue; 1343 id = WinQueryWindowUShort(hwnd,QWS_ID); 1344 if (id > MINI_DRIVEA ) 1345 { 1346 ULONG dskNum = id - MINI_DRIVEA + 1; 1347 tDataMin *pDM = WinQueryWindowPtr(hwnd, QWL_DATAMIN_PTR); 1348 SWP swp; 1349 CHAR szPath[] = " :"; 1350 if (!pDM) 1351 continue; 1352 busy = TRUE; 1353 if (!WinQueryWindowPos(hwnd, &swp)) 1354 continue; 1355 1356 DosError(FERR_DISABLEHARDERR); 1357 pDM -> qfsi_rc = DosQueryFSInfo(dskNum, 1358 FSIL_ALLOC, 1359 &pDM -> fsa, 1360 sizeof(FSALLOCATE)); 1361 1362 if (!pDM -> qfsi_rc) 1363 { 1364 *szPath = (CHAR) dskNum + 'A' - 1; 1365 pDM -> qfsa_cb = sizeof(FSQBUFFER2) + 256; // se tDataMin 1366 DosError(FERR_DISABLEHARDERR); 1367 pDM -> qfsa_rc = DosQueryFSAttach(szPath, 1368 0, /* Ordinal */ 1369 FSAIL_QUERYNAME, 1370 &pDM -> fsqb2, 1371 &pDM -> qfsa_cb); 1372 } 1373 WinInvalidateRect(hwnd, NULL, FALSE); 1374 } // if drive window 1375 } // while henum 1376 WinEndEnumWindows(henum); 1377 1378 if (busy) 1379 { 1380 ULONG clPosted; 1381 rc = DosWaitEventSem(G_hevDataMin,20000L); 1382 if (rc && rc != ERROR_TIMEOUT) 1383 { 1384 Dos_Error(MB_ENTER, 1385 rc, 1386 HWND_DESKTOP, 1387 __FILE__, 1388 __LINE__, 1389 "Wait Semaphore failed" // GetPString(IDS_POSTSEMFAILED) 1390 ); 1391 } 1392 1393 rc = DosResetEventSem(G_hevDataMin,&clPosted); 1394 if (rc && rc != ERROR_ALREADY_RESET) 1395 { 1396 Dos_Error(MB_ENTER, 1397 rc, 1398 HWND_DESKTOP, 1399 __FILE__, 1400 __LINE__, 1401 "Reset Semaphore failed" // GetPString(IDS_POSTSEMFAILED) 1402 ); 1403 } 1404 } 1405 1406 } // while 1407 1408 if (hmq != NULLHANDLE) 1409 WinDestroyMsgQueue(hmq); 1410 1411 if (hab != NULLHANDLE) 1412 WinTerminate(hab); 1413 1414 } // dataminThread
Note:
See TracChangeset
for help on using the changeset viewer.