Changeset 231
- Timestamp:
- Jul 25, 2005, 1:20:35 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/misc.c
r219 r231 13 13 01 Aug 04 SHL LoadLibPath: avoid buffer overflow 14 14 07 Jun 05 SHL Drop obsoletes 15 24 Jul 05 SHL Beautify 15 16 16 17 ***********************************************************************/ … … 50 51 51 52 #ifndef BEGIN_LIBPATH 52 53 #define BEGIN_LIBPATH 1 53 54 #endif 55 54 56 #ifndef END_LIBPATH 55 57 #define END_LIBPATH 2 56 58 #endif 59 57 60 #ifndef ORD_DOS32QUERYEXTLIBPATH 58 61 #define ORD_DOS32QUERYEXTLIBPATH 874 59 62 #endif 60 63 61 62 VOID SetShiftState (VOID) { 63 64 shiftstate = 0; 65 if(WinGetKeyState(HWND_DESKTOP, VK_CTRL) & 0x8000) 66 shiftstate |= KC_CTRL; 67 if(WinGetKeyState(HWND_DESKTOP, VK_SHIFT) & 0x8000) 68 shiftstate |= KC_SHIFT; 69 if(WinGetKeyState(HWND_DESKTOP, VK_ALT) & 0x8000) 70 shiftstate |= KC_ALT; 71 } 72 73 74 void EmphasizeButton (HWND hwnd,BOOL on) { 75 76 HPS hps; 77 78 hps = DrgGetPS(hwnd); 79 if(hps) { 80 64 VOID SetShiftState(VOID) 65 { 66 shiftstate = 0; 67 if (WinGetKeyState(HWND_DESKTOP, VK_CTRL) & 0x8000) 68 shiftstate |= KC_CTRL; 69 if (WinGetKeyState(HWND_DESKTOP, VK_SHIFT) & 0x8000) 70 shiftstate |= KC_SHIFT; 71 if (WinGetKeyState(HWND_DESKTOP, VK_ALT) & 0x8000) 72 shiftstate |= KC_ALT; 73 } 74 75 void EmphasizeButton(HWND hwnd, BOOL on) 76 { 77 HPS hps; 78 79 hps = DrgGetPS(hwnd); 80 if (hps) 81 { 82 83 POINTL ptl; 84 SWP swp; 85 86 WinQueryWindowPos(hwnd, &swp); 87 ptl.x = 1; 88 ptl.y = 1; 89 GpiMove(hps, &ptl); 90 GpiSetColor(hps, ((on) ? CLR_BLACK : CLR_PALEGRAY)); 91 ptl.x = swp.cx - 2; 92 ptl.y = swp.cy - 2; 93 GpiBox(hps, DRO_OUTLINE, &ptl, 0, 0); 94 DrgReleasePS(hps); 95 if (remove) 96 WinInvalidateRect(hwnd, NULL, FALSE); 97 } 98 } 99 100 void DrawTargetEmphasis(HWND hwnd, BOOL on) 101 { 102 HPS hps; 103 104 hps = DrgGetPS(WinQueryWindow(hwnd, QW_PARENT)); 105 if (hps) 106 { 107 BoxWindow(hwnd, hps, ((on) ? CLR_BLACK : CLR_PALEGRAY)); 108 DrgReleasePS(hps); 109 } 110 } 111 112 void BoxWindow(HWND hwnd, HPS hps, LONG color) 113 { 81 114 POINTL ptl; 82 SWP swp; 83 84 WinQueryWindowPos(hwnd,&swp); 85 ptl.x = 1; 86 ptl.y = 1; 87 GpiMove(hps,&ptl); 88 GpiSetColor(hps,((on) ? CLR_BLACK : CLR_PALEGRAY)); 89 ptl.x = swp.cx - 2; 90 ptl.y = swp.cy - 2; 91 GpiBox(hps,DRO_OUTLINE,&ptl,0,0); 92 DrgReleasePS(hps); 93 if(remove) 94 WinInvalidateRect(hwnd,NULL,FALSE); 95 } 96 } 97 98 99 void DrawTargetEmphasis (HWND hwnd,BOOL on) { 100 101 HPS hps; 102 103 hps = DrgGetPS(WinQueryWindow(hwnd,QW_PARENT)); 104 if(hps) { 105 BoxWindow(hwnd,hps,((on) ? CLR_BLACK : CLR_PALEGRAY)); 106 DrgReleasePS(hps); 107 } 108 } 109 110 111 void BoxWindow (HWND hwnd,HPS hps,LONG color) { 112 113 POINTL ptl; 114 SWP swp; 115 BOOL releaseme = FALSE; 116 117 if(!hps) { 118 hps = WinGetPS(WinQueryWindow(hwnd,QW_PARENT)); 119 releaseme = TRUE; 120 } 121 if(hps && WinQueryWindowPos(hwnd,&swp)) { 122 ptl.x = swp.x - 2; 123 ptl.y = swp.y - 2; 124 GpiMove(hps,&ptl); 125 GpiSetColor(hps,color); 126 ptl.x = swp.x + swp.cx + 1; 127 ptl.y = swp.y + swp.cy + 1; 128 GpiBox(hps,DRO_OUTLINE,&ptl,0,0); 129 } 130 if(releaseme && hps) 131 WinReleasePS(hps); 132 } 133 134 135 void PaintSTextWindow (HWND hwnd,HPS hps) { 136 137 /* 138 * paint a text window such that the rightmost part of the text is 139 * always visible even if the text length exceeds the length of the 140 * window -- otherwise, paint the window so that it is left-justified 141 * and vertically centered. 142 */ 143 144 char *s = NULL; 145 long len; 146 POINTL aptl[TXTBOX_COUNT],ptl; 147 RECTL rcl; 148 char *p; 149 BOOL releaseme = FALSE; 150 151 if(!hps) { 152 releaseme = TRUE; 153 hps = WinGetPS(hwnd); 154 } 155 if(hps) { 156 WinQueryWindowRect(hwnd,&rcl); 157 WinFillRect(hps, 158 &rcl, 159 CLR_PALEGRAY); 160 len = WinQueryWindowTextLength(hwnd); 161 if(len) 162 s = malloc(len + 1); 163 if(s) { 164 *s = 0; 165 WinQueryWindowText(hwnd,CCHMAXPATH,s); 166 if(*s) { 167 rcl.xRight -= 3; 168 p = s; 169 GpiQueryTextBox(hps, 170 3, 171 "...", 172 TXTBOX_COUNT, 173 aptl); 174 len = aptl[TXTBOX_TOPRIGHT].x; 175 do { 176 GpiQueryTextBox(hps, 177 strlen(p), 178 p, 179 TXTBOX_COUNT, 180 aptl); 181 if(aptl[TXTBOX_TOPRIGHT].x > 182 (rcl.xRight - ((p != s) ? len : 0))) 183 p++; 184 else 185 break; 186 } while(*p); 187 if(*p) { 188 GpiSetMix(hps,FM_OVERPAINT); 189 GpiSetColor(hps,CLR_BLACK); 190 ptl.x = 3; 191 ptl.y = ((rcl.yTop / 2) - 192 ((aptl[TXTBOX_TOPRIGHT].y + 193 aptl[TXTBOX_BOTTOMLEFT].y) / 2)); 194 GpiMove(hps,&ptl); 195 if(p != s) 196 GpiCharString(hps, 197 3, 198 "..."); 199 GpiCharString(hps, 200 strlen(p), 201 p); 202 } 203 } 204 free(s); 205 } 206 if(releaseme) 207 WinReleasePS(hps); 208 } 209 } 210 211 212 VOID PaintRecessedWindow (HWND hwnd,HPS hps,BOOL outtie, BOOL dbl) { 213 214 /* 215 * paint a recessed box around the window 216 * two pixels width required around window for painting... 217 */ 218 BOOL releaseme = FALSE; 219 220 if(!hps) { 221 hps = WinGetPS(WinQueryWindow(hwnd,QW_PARENT)); 222 releaseme = TRUE; 223 } 224 if(hps) { 225 226 POINTL ptl; 227 SWP swp; 228 229 WinQueryWindowPos(hwnd,&swp); 230 ptl.x = swp.x - 1; 231 ptl.y = swp.y - 1; 232 GpiMove(hps,&ptl); 233 if(!outtie) 234 GpiSetColor(hps,CLR_WHITE); 115 SWP swp; 116 BOOL releaseme = FALSE; 117 118 if (!hps) 119 { 120 hps = WinGetPS(WinQueryWindow(hwnd, QW_PARENT)); 121 releaseme = TRUE; 122 } 123 if (hps && WinQueryWindowPos(hwnd, &swp)) 124 { 125 ptl.x = swp.x - 2; 126 ptl.y = swp.y - 2; 127 GpiMove(hps, &ptl); 128 GpiSetColor(hps, color); 129 ptl.x = swp.x + swp.cx + 1; 130 ptl.y = swp.y + swp.cy + 1; 131 GpiBox(hps, DRO_OUTLINE, &ptl, 0, 0); 132 } 133 if (releaseme && hps) 134 WinReleasePS(hps); 135 } 136 137 void PaintSTextWindow(HWND hwnd, HPS hps) 138 { 139 /* 140 * paint a text window such that the rightmost part of the text is 141 * always visible even if the text length exceeds the length of the 142 * window -- otherwise, paint the window so that it is left-justified 143 * and vertically centered. 144 */ 145 146 char *s = NULL; 147 long len; 148 POINTL aptl[TXTBOX_COUNT], ptl; 149 RECTL rcl; 150 char *p; 151 BOOL releaseme = FALSE; 152 153 if (!hps) 154 { 155 releaseme = TRUE; 156 hps = WinGetPS(hwnd); 157 } 158 if (hps) 159 { 160 WinQueryWindowRect(hwnd, &rcl); 161 WinFillRect(hps, 162 &rcl, 163 CLR_PALEGRAY); 164 len = WinQueryWindowTextLength(hwnd); 165 if (len) 166 s = malloc(len + 1); 167 if (s) 168 { 169 *s = 0; 170 WinQueryWindowText(hwnd, CCHMAXPATH, s); 171 if (*s) 172 { 173 rcl.xRight -= 3; 174 p = s; 175 GpiQueryTextBox(hps, 176 3, 177 "...", 178 TXTBOX_COUNT, 179 aptl); 180 len = aptl[TXTBOX_TOPRIGHT].x; 181 do 182 { 183 GpiQueryTextBox(hps, 184 strlen(p), 185 p, 186 TXTBOX_COUNT, 187 aptl); 188 if (aptl[TXTBOX_TOPRIGHT].x > 189 (rcl.xRight - ((p != s) ? len : 0))) 190 p++; 191 else 192 break; 193 } 194 while (*p); 195 if (*p) 196 { 197 GpiSetMix(hps, FM_OVERPAINT); 198 GpiSetColor(hps, CLR_BLACK); 199 ptl.x = 3; 200 ptl.y = ((rcl.yTop / 2) - 201 ((aptl[TXTBOX_TOPRIGHT].y + 202 aptl[TXTBOX_BOTTOMLEFT].y) / 2)); 203 GpiMove(hps, &ptl); 204 if (p != s) 205 GpiCharString(hps, 206 3, 207 "..."); 208 GpiCharString(hps, 209 strlen(p), 210 p); 211 } 212 } 213 free(s); 214 } 215 if (releaseme) 216 WinReleasePS(hps); 217 } 218 } 219 220 VOID PaintRecessedWindow(HWND hwnd, HPS hps, BOOL outtie, BOOL dbl) 221 { 222 /* 223 * paint a recessed box around the window 224 * two pixels width required around window for painting... 225 */ 226 BOOL releaseme = FALSE; 227 228 if (!hps) 229 { 230 hps = WinGetPS(WinQueryWindow(hwnd, QW_PARENT)); 231 releaseme = TRUE; 232 } 233 if (hps) 234 { 235 236 POINTL ptl; 237 SWP swp; 238 239 WinQueryWindowPos(hwnd, &swp); 240 ptl.x = swp.x - 1; 241 ptl.y = swp.y - 1; 242 GpiMove(hps, &ptl); 243 if (!outtie) 244 GpiSetColor(hps, CLR_WHITE); 245 else 246 GpiSetColor(hps, CLR_DARKGRAY); 247 ptl.x = swp.x + swp.cx; 248 GpiLine(hps, &ptl); 249 ptl.y = swp.y + swp.cy; 250 GpiLine(hps, &ptl); 251 if (dbl) 252 { 253 ptl.x = swp.x - 2; 254 ptl.y = swp.y - 2; 255 GpiMove(hps, &ptl); 256 ptl.x = swp.x + swp.cx + 1; 257 GpiLine(hps, &ptl); 258 ptl.y = swp.y + swp.cy + 1; 259 GpiLine(hps, &ptl); 260 } 261 if (!outtie) 262 GpiSetColor(hps, CLR_DARKGRAY); 263 else 264 GpiSetColor(hps, CLR_WHITE); 265 if (dbl) 266 { 267 ptl.x = swp.x - 2; 268 GpiLine(hps, &ptl); 269 ptl.y = swp.y - 2; 270 GpiLine(hps, &ptl); 271 ptl.x = swp.x + swp.cx; 272 ptl.y = swp.y + swp.cy; 273 GpiMove(hps, &ptl); 274 } 275 ptl.x = swp.x - 1; 276 GpiLine(hps, &ptl); 277 ptl.y = swp.y - 1; 278 GpiLine(hps, &ptl); 279 GpiSetColor(hps, CLR_PALEGRAY); 280 ptl.x = swp.x - (2 + (dbl != FALSE)); 281 ptl.y = swp.y - (2 + (dbl != FALSE)); 282 GpiMove(hps, &ptl); 283 ptl.x = swp.x + swp.cx + (1 + (dbl != FALSE)); 284 GpiLine(hps, &ptl); 285 ptl.y = swp.y + swp.cy + (1 + (dbl != FALSE)); 286 GpiLine(hps, &ptl); 287 ptl.x = swp.x - (2 + (dbl != FALSE)); 288 GpiLine(hps, &ptl); 289 ptl.y = swp.y - (2 + (dbl != FALSE)); 290 GpiLine(hps, &ptl); 291 if (releaseme) 292 WinReleasePS(hps); 293 } 294 } 295 296 BOOL AdjustCnrColVis(HWND hwndCnr, CHAR * title, BOOL visible, BOOL toggle) 297 { 298 PFIELDINFO pfi; 299 300 pfi = (PFIELDINFO) WinSendMsg(hwndCnr, 301 CM_QUERYDETAILFIELDINFO, 302 MPVOID, 303 MPFROMSHORT(CMA_FIRST)); 304 while (pfi) 305 { 306 if (!strcmp(pfi -> pTitleData, title)) 307 { 308 if (toggle) 309 { 310 if (pfi -> flData & CFA_INVISIBLE) 311 pfi -> flData &= (~CFA_INVISIBLE); 312 else 313 pfi -> flData |= CFA_INVISIBLE; 314 return !(pfi -> flData & CFA_INVISIBLE); 315 } 316 else 317 { 318 if (visible) 319 pfi -> flData &= (~CFA_INVISIBLE); 320 else 321 pfi -> flData |= CFA_INVISIBLE; 322 } 323 return TRUE; 324 } 325 pfi = pfi -> pNextFieldInfo; 326 } 327 return FALSE; 328 } 329 330 BOOL AdjustCnrColRO(HWND hwndCnr, CHAR * title, BOOL readonly, BOOL toggle) 331 { 332 PFIELDINFO pfi; 333 334 pfi = (PFIELDINFO) WinSendMsg(hwndCnr, 335 CM_QUERYDETAILFIELDINFO, 336 MPVOID, 337 MPFROMSHORT(CMA_FIRST)); 338 while (pfi) 339 { 340 if (!strcmp(pfi -> pTitleData, title)) 341 { 342 if (toggle) 343 { 344 if (pfi -> flData & CFA_FIREADONLY) 345 pfi -> flData &= (~CFA_FIREADONLY); 346 else 347 pfi -> flData |= CFA_FIREADONLY; 348 return (pfi -> flData & CFA_FIREADONLY); 349 } 350 else 351 { 352 if (!readonly) 353 pfi -> flData &= (~CFA_FIREADONLY); 354 else 355 pfi -> flData |= CFA_FIREADONLY; 356 } 357 return TRUE; 358 } 359 pfi = pfi -> pNextFieldInfo; 360 } 361 return FALSE; 362 } 363 364 VOID AdjustCnrColsForFSType(HWND hwndCnr, CHAR * directory, 365 DIRCNRDATA * dcd) 366 { 367 CHAR FileSystem[CCHMAXPATH]; 368 INT x; 369 BOOL showem, showemA, *bool; 370 371 if (!directory || !*directory) 372 return; 373 x = CheckDrive(toupper(*directory), FileSystem, NULL); 374 if (x != -1) 375 { 376 if (!stricmp(FileSystem, HPFS) || 377 !stricmp(FileSystem, JFS) || 378 !stricmp(FileSystem, CDFS) || 379 !stricmp(FileSystem, FAT32) || 380 !stricmp(FileSystem, HPFS386)) 381 { 382 showem = TRUE; 383 showemA = TRUE; 384 } 385 else if (!strcmp(FileSystem, CDFS)) 386 { 387 showem = TRUE; 388 showemA = FALSE; 389 } 390 else 391 showem = showemA = FALSE; 392 } 235 393 else 236 GpiSetColor(hps,CLR_DARKGRAY); 237 ptl.x = swp.x + swp.cx; 238 GpiLine(hps,&ptl); 239 ptl.y = swp.y + swp.cy; 240 GpiLine(hps,&ptl); 241 if(dbl) { 242 ptl.x = swp.x - 2; 243 ptl.y = swp.y - 2; 244 GpiMove(hps,&ptl); 245 ptl.x = swp.x + swp.cx + 1; 246 GpiLine(hps,&ptl); 247 ptl.y = swp.y + swp.cy + 1; 248 GpiLine(hps,&ptl); 249 } 250 if(!outtie) 251 GpiSetColor(hps,CLR_DARKGRAY); 394 { 395 /* assume FAT */ 396 showem = showemA = FALSE; 397 } 398 bool = (dcd) ? &dcd -> detailsladate : &detailsladate; 399 AdjustCnrColVis(hwndCnr, GetPString(IDS_LADATE), 400 (*bool) ? showemA : FALSE, FALSE); 401 bool = (dcd) ? &dcd -> detailslatime : &detailslatime; 402 AdjustCnrColVis(hwndCnr, GetPString(IDS_LATIME), 403 (*bool) ? showemA : FALSE, FALSE); 404 bool = (dcd) ? &dcd -> detailscrdate : &detailscrdate; 405 AdjustCnrColVis(hwndCnr, GetPString(IDS_CRDATE), 406 (*bool) ? showem : FALSE, FALSE); 407 bool = (dcd) ? &dcd -> detailscrtime : &detailscrtime; 408 AdjustCnrColVis(hwndCnr, GetPString(IDS_CRTIME), 409 (*bool) ? showem : FALSE, FALSE); 410 bool = (dcd) ? &dcd -> detailslongname : &detailslongname; 411 AdjustCnrColVis(hwndCnr, GetPString(IDS_LNAME), 412 (*bool) ? !showem : FALSE, FALSE); 413 WinSendMsg(hwndCnr, 414 CM_INVALIDATEDETAILFIELDINFO, 415 MPVOID, 416 MPVOID); 417 } 418 419 VOID AdjustCnrColsForPref(HWND hwndCnr, CHAR * directory, DIRCNRDATA * dcd, 420 BOOL compare) 421 { 422 BOOL *bool; 423 424 bool = (dcd) ? &dcd -> detailssubject : &detailssubject; 425 AdjustCnrColVis(hwndCnr, ((compare) ? GetPString(IDS_STATUS) : 426 GetPString(IDS_SUBJ)), 427 *bool, FALSE); 428 bool = (dcd) ? &dcd -> detailsattr : &detailsattr; 429 AdjustCnrColVis(hwndCnr, GetPString(IDS_ATTR), 430 *bool, FALSE); 431 bool = (dcd) ? &dcd -> detailsicon : &detailsicon; 432 AdjustCnrColVis(hwndCnr, GetPString(IDS_ICON), 433 *bool, FALSE); 434 bool = (dcd) ? &dcd -> detailslwdate : &detailslwdate; 435 AdjustCnrColVis(hwndCnr, GetPString(IDS_LWDATE), 436 *bool, FALSE); 437 bool = (dcd) ? &dcd -> detailslwtime : &detailslwtime; 438 AdjustCnrColVis(hwndCnr, GetPString(IDS_LWTIME), 439 *bool, FALSE); 440 bool = (dcd) ? &dcd -> detailsea : &detailsea; 441 AdjustCnrColVis(hwndCnr, GetPString(IDS_EA), 442 *bool, FALSE); 443 bool = (dcd) ? &dcd -> detailssize : &detailssize; 444 AdjustCnrColVis(hwndCnr, GetPString(IDS_SIZE), 445 *bool, FALSE); 446 if (!directory) 447 { 448 bool = (dcd) ? &dcd -> detailsladate : &detailsladate; 449 AdjustCnrColVis(hwndCnr, GetPString(IDS_LADATE), 450 *bool, FALSE); 451 bool = (dcd) ? &dcd -> detailslatime : &detailslatime; 452 AdjustCnrColVis(hwndCnr, GetPString(IDS_LATIME), 453 *bool, FALSE); 454 bool = (dcd) ? &dcd -> detailscrdate : &detailscrdate; 455 AdjustCnrColVis(hwndCnr, GetPString(IDS_CRDATE), 456 *bool, FALSE); 457 bool = (dcd) ? &dcd -> detailscrtime : &detailscrtime; 458 AdjustCnrColVis(hwndCnr, GetPString(IDS_CRTIME), 459 *bool, FALSE); 460 bool = (dcd) ? &dcd -> detailslongname : &detailslongname; 461 AdjustCnrColVis(hwndCnr, GetPString(IDS_LNAME), 462 *bool, FALSE); 463 WinSendMsg(hwndCnr, 464 CM_INVALIDATEDETAILFIELDINFO, 465 MPVOID, 466 MPVOID); 467 } 252 468 else 253 GpiSetColor(hps,CLR_WHITE); 254 if(dbl) { 255 ptl.x = swp.x - 2; 256 GpiLine(hps,&ptl); 257 ptl.y = swp.y - 2; 258 GpiLine(hps,&ptl); 259 ptl.x = swp.x + swp.cx; 260 ptl.y = swp.y + swp.cy; 261 GpiMove(hps,&ptl); 262 } 263 ptl.x = swp.x - 1; 264 GpiLine(hps,&ptl); 265 ptl.y = swp.y - 1; 266 GpiLine(hps,&ptl); 267 GpiSetColor(hps,CLR_PALEGRAY); 268 ptl.x = swp.x - (2 + (dbl != FALSE)); 269 ptl.y = swp.y - (2 + (dbl != FALSE)); 270 GpiMove(hps,&ptl); 271 ptl.x = swp.x + swp.cx + (1 + (dbl != FALSE)); 272 GpiLine(hps,&ptl); 273 ptl.y = swp.y + swp.cy + (1 + (dbl != FALSE)); 274 GpiLine(hps,&ptl); 275 ptl.x = swp.x - (2 + (dbl != FALSE)); 276 GpiLine(hps,&ptl); 277 ptl.y = swp.y - (2 + (dbl != FALSE)); 278 GpiLine(hps,&ptl); 279 if(releaseme) 280 WinReleasePS(hps); 281 } 282 } 283 284 285 BOOL AdjustCnrColVis (HWND hwndCnr,CHAR *title,BOOL visible,BOOL toggle) { 286 287 PFIELDINFO pfi; 288 289 pfi = (PFIELDINFO)WinSendMsg(hwndCnr, 290 CM_QUERYDETAILFIELDINFO, 291 MPVOID, 292 MPFROMSHORT(CMA_FIRST)); 293 while(pfi) { 294 if(!strcmp(pfi->pTitleData,title)) { 295 if(toggle) { 296 if(pfi->flData & CFA_INVISIBLE) 297 pfi->flData &= (~CFA_INVISIBLE); 298 else 299 pfi->flData |= CFA_INVISIBLE; 300 return !(pfi->flData & CFA_INVISIBLE); 301 } 302 else { 303 if(visible) 304 pfi->flData &= (~CFA_INVISIBLE); 305 else 306 pfi->flData |= CFA_INVISIBLE; 307 } 308 return TRUE; 309 } 310 pfi = pfi->pNextFieldInfo; 311 } 312 return FALSE; 313 } 314 315 316 BOOL AdjustCnrColRO (HWND hwndCnr,CHAR *title,BOOL readonly,BOOL toggle) 317 { 318 PFIELDINFO pfi; 319 320 pfi = (PFIELDINFO)WinSendMsg(hwndCnr, 321 CM_QUERYDETAILFIELDINFO, 322 MPVOID, 323 MPFROMSHORT(CMA_FIRST)); 324 while(pfi) { 325 if(!strcmp(pfi->pTitleData,title)) { 326 if(toggle) { 327 if(pfi->flData & CFA_FIREADONLY) 328 pfi->flData &= (~CFA_FIREADONLY); 329 else 330 pfi->flData |= CFA_FIREADONLY; 331 return (pfi->flData & CFA_FIREADONLY); 332 } 333 else { 334 if(!readonly) 335 pfi->flData &= (~CFA_FIREADONLY); 336 else 337 pfi->flData |= CFA_FIREADONLY; 338 } 339 return TRUE; 340 } 341 pfi = pfi->pNextFieldInfo; 342 } 343 return FALSE; 344 } 345 346 347 VOID AdjustCnrColsForFSType (HWND hwndCnr,CHAR *directory, 348 DIRCNRDATA *dcd) { 349 350 CHAR FileSystem[CCHMAXPATH]; 351 INT x; 352 BOOL showem,showemA,*bool; 353 354 if(!directory || !*directory) 355 return; 356 x = CheckDrive(toupper(*directory),FileSystem,NULL); 357 if(x != -1) { 358 if (!stricmp(FileSystem,HPFS) || 359 !stricmp(FileSystem,JFS) || 360 !stricmp(FileSystem,CDFS) || 361 !stricmp(FileSystem,FAT32) || 362 !stricmp(FileSystem,HPFS386)) 363 { 364 showem = TRUE; 365 showemA = TRUE; 366 } 367 else if (!strcmp(FileSystem,CDFS)) 368 { 369 showem = TRUE; 370 showemA = FALSE; 469 AdjustCnrColsForFSType(hwndCnr, 470 directory, 471 dcd); 472 } 473 474 BOOL SetCnrCols(HWND hwndCnr, BOOL compare) 475 { 476 BOOL fSuccess = TRUE; 477 PFIELDINFO pfi, pfiLastLeftCol, pfiIconCol; 478 479 // Allocate storage for container column data 480 481 pfi = WinSendMsg(hwndCnr, CM_ALLOCDETAILFIELDINFO, 482 MPFROMLONG(CONTAINER_COLUMNS), NULL); 483 484 if (pfi) 485 { 486 487 PFIELDINFO pfiFirst; 488 FIELDINFOINSERT fii; 489 490 // Store original value of pfi so we won't lose it when it changes. 491 // This will be needed on the CM_INSERTDETAILFIELDINFO message. 492 493 pfiFirst = pfi; 494 495 // Fill in column information for the icon column 496 497 pfi -> flData = CFA_BITMAPORICON | CFA_CENTER | CFA_FIREADONLY; 498 pfi -> flTitle = CFA_CENTER | CFA_FITITLEREADONLY; 499 pfi -> pTitleData = GetPString(IDS_ICON); 500 pfi -> offStruct = FIELDOFFSET(MINIRECORDCORE, hptrIcon); 501 502 pfiIconCol = pfi; 503 504 // Fill in column information for the file name. Note that we are 505 // using the pszFileName variable rather than szFileName. We do this 506 // because the container needs a pointer to the file name. If we used 507 // szFileName (a character array, not a pointer), the container would 508 // take the first 4 bytes of szFileName and think it was a pointer, 509 // which of course it is not. Later in the FillInRecord* functions we set 510 // pszFileName to point to szFileName. 511 512 pfi = pfi -> pNextFieldInfo; 513 pfi -> flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR; 514 pfi -> flTitle = CFA_CENTER; 515 pfi -> pTitleData = GetPString(IDS_FILENAME); 516 pfi -> offStruct = FIELDOFFSET(CNRITEM, pszFileName); 517 518 // Fill in column information for the longname. 519 520 pfi = pfi -> pNextFieldInfo; 521 pfi -> flData = CFA_STRING | CFA_LEFT; 522 pfi -> flTitle = CFA_CENTER | CFA_FITITLEREADONLY; 523 pfi -> pTitleData = GetPString(IDS_LNAME); 524 pfi -> offStruct = FIELDOFFSET(CNRITEM, pszLongname); 525 526 // Store the current pfi value as that will be used to indicate the 527 // last column in the lefthand container window (we have a splitbar) 528 529 pfiLastLeftCol = pfi; 530 531 // Fill in column info for subjects 532 533 pfi = pfi -> pNextFieldInfo; 534 pfi -> flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR; 535 if (compare) 536 pfi -> flData |= CFA_FIREADONLY; 537 pfi -> flTitle = CFA_CENTER | CFA_FITITLEREADONLY; 538 pfi -> pTitleData = (compare) ? GetPString(IDS_STATUS) : 539 GetPString(IDS_SUBJ); 540 pfi -> offStruct = FIELDOFFSET(CNRITEM, pszSubject); 541 542 // Fill in column information for the file size 543 544 pfi = pfi -> pNextFieldInfo; 545 pfi -> flData = CFA_ULONG | CFA_RIGHT | CFA_SEPARATOR | CFA_FIREADONLY; 546 pfi -> flTitle = CFA_CENTER; 547 pfi -> pTitleData = GetPString(IDS_SIZE); 548 pfi -> offStruct = FIELDOFFSET(CNRITEM, cbFile); 549 550 // Fill in the column information for the file's ea size 551 552 pfi = pfi -> pNextFieldInfo; 553 pfi -> flData = CFA_ULONG | CFA_RIGHT | CFA_SEPARATOR | CFA_FIREADONLY; 554 pfi -> flTitle = CFA_CENTER; 555 pfi -> pTitleData = GetPString(IDS_EA); 556 pfi -> offStruct = FIELDOFFSET(CNRITEM, easize); 557 558 // Fill in the column information for the file attribute 559 560 pfi = pfi -> pNextFieldInfo; 561 pfi -> flData = CFA_STRING | CFA_CENTER | CFA_SEPARATOR | CFA_FIREADONLY; 562 pfi -> flTitle = CFA_CENTER | CFA_FITITLEREADONLY; 563 pfi -> pTitleData = GetPString(IDS_ATTR); 564 pfi -> offStruct = FIELDOFFSET(CNRITEM, pszDispAttr); 565 566 // Fill in column information for last write file date 567 568 pfi = pfi -> pNextFieldInfo; 569 pfi -> flData = CFA_DATE | CFA_RIGHT | CFA_FIREADONLY; 570 pfi -> flTitle = CFA_CENTER; 571 pfi -> pTitleData = GetPString(IDS_LWDATE); 572 pfi -> offStruct = FIELDOFFSET(CNRITEM, date); 573 574 // Fill in column information for the last write file time 575 576 pfi = pfi -> pNextFieldInfo; 577 pfi -> flData = CFA_TIME | CFA_RIGHT | CFA_SEPARATOR | CFA_FIREADONLY; 578 pfi -> flTitle = CFA_CENTER; 579 pfi -> pTitleData = GetPString(IDS_LWTIME); 580 pfi -> offStruct = FIELDOFFSET(CNRITEM, time); 581 582 // Fill in column information for last access file date 583 584 pfi = pfi -> pNextFieldInfo; 585 pfi -> flData = CFA_DATE | CFA_RIGHT | CFA_FIREADONLY; 586 pfi -> flTitle = CFA_CENTER; 587 pfi -> pTitleData = GetPString(IDS_LADATE); 588 pfi -> offStruct = FIELDOFFSET(CNRITEM, ladate); 589 590 // Fill in column information for the last access file time 591 592 pfi = pfi -> pNextFieldInfo; 593 pfi -> flData = CFA_TIME | CFA_RIGHT | CFA_SEPARATOR | CFA_FIREADONLY; 594 pfi -> flTitle = CFA_CENTER; 595 pfi -> pTitleData = GetPString(IDS_LATIME); 596 pfi -> offStruct = FIELDOFFSET(CNRITEM, latime); 597 598 // Fill in column information for create file date 599 600 pfi = pfi -> pNextFieldInfo; 601 pfi -> flData = CFA_DATE | CFA_RIGHT | CFA_FIREADONLY; 602 pfi -> flTitle = CFA_CENTER; 603 pfi -> pTitleData = GetPString(IDS_CRDATE); 604 pfi -> offStruct = FIELDOFFSET(CNRITEM, crdate); 605 606 // Fill in column information for the create file time 607 608 pfi = pfi -> pNextFieldInfo; 609 pfi -> flData = CFA_TIME | CFA_RIGHT | CFA_FIREADONLY; 610 pfi -> flTitle = CFA_CENTER; 611 pfi -> pTitleData = GetPString(IDS_CRTIME); 612 pfi -> offStruct = FIELDOFFSET(CNRITEM, crtime); 613 614 // Use the CM_INSERTDETAILFIELDINFO message to tell the container 615 // all the column information it needs to function properly. Place 616 // this column info first in the column list and update the display 617 // after they are inserted (fInvalidateFieldInfo = TRUE) 618 619 (void) memset(&fii, 0, sizeof(FIELDINFOINSERT)); 620 621 fii.cb = sizeof(FIELDINFOINSERT); 622 fii.pFieldInfoOrder = (PFIELDINFO) CMA_FIRST; 623 fii.cFieldInfoInsert = (SHORT) CONTAINER_COLUMNS; 624 fii.fInvalidateFieldInfo = TRUE; 625 626 if (!WinSendMsg(hwndCnr, CM_INSERTDETAILFIELDINFO, MPFROMP(pfiFirst), 627 MPFROMP(&fii))) 628 fSuccess = FALSE; 371 629 } 372 630 else 373 showem = showemA = FALSE; 374 } 375 else 376 { 377 /* assume FAT */ 378 showem = showemA = FALSE; 379 } 380 bool = (dcd) ? &dcd->detailsladate : &detailsladate; 381 AdjustCnrColVis(hwndCnr,GetPString(IDS_LADATE), 382 (*bool) ? showemA : FALSE,FALSE); 383 bool = (dcd) ? &dcd->detailslatime : &detailslatime; 384 AdjustCnrColVis(hwndCnr,GetPString(IDS_LATIME), 385 (*bool) ? showemA : FALSE,FALSE); 386 bool = (dcd) ? &dcd->detailscrdate : &detailscrdate; 387 AdjustCnrColVis(hwndCnr,GetPString(IDS_CRDATE), 388 (*bool) ? showem : FALSE,FALSE); 389 bool = (dcd) ? &dcd->detailscrtime : &detailscrtime; 390 AdjustCnrColVis(hwndCnr,GetPString(IDS_CRTIME), 391 (*bool) ? showem : FALSE,FALSE); 392 bool = (dcd) ? &dcd->detailslongname : &detailslongname; 393 AdjustCnrColVis(hwndCnr,GetPString(IDS_LNAME), 394 (*bool) ? !showem : FALSE,FALSE); 395 WinSendMsg(hwndCnr, 396 CM_INVALIDATEDETAILFIELDINFO, 397 MPVOID, 398 MPVOID); 399 } 400 401 402 VOID AdjustCnrColsForPref (HWND hwndCnr,CHAR *directory,DIRCNRDATA *dcd, 403 BOOL compare) { 404 405 BOOL *bool; 406 407 bool = (dcd) ? &dcd->detailssubject : &detailssubject; 408 AdjustCnrColVis(hwndCnr,((compare) ? GetPString(IDS_STATUS) : 409 GetPString(IDS_SUBJ)), 410 *bool,FALSE); 411 bool = (dcd) ? &dcd->detailsattr : &detailsattr; 412 AdjustCnrColVis(hwndCnr,GetPString(IDS_ATTR), 413 *bool,FALSE); 414 bool = (dcd) ? &dcd->detailsicon : &detailsicon; 415 AdjustCnrColVis(hwndCnr,GetPString(IDS_ICON), 416 *bool,FALSE); 417 bool = (dcd) ? &dcd->detailslwdate : &detailslwdate; 418 AdjustCnrColVis(hwndCnr,GetPString(IDS_LWDATE), 419 *bool,FALSE); 420 bool = (dcd) ? &dcd->detailslwtime : &detailslwtime; 421 AdjustCnrColVis(hwndCnr,GetPString(IDS_LWTIME), 422 *bool,FALSE); 423 bool = (dcd) ? &dcd->detailsea : &detailsea; 424 AdjustCnrColVis(hwndCnr,GetPString(IDS_EA), 425 *bool,FALSE); 426 bool = (dcd) ? &dcd->detailssize : &detailssize; 427 AdjustCnrColVis(hwndCnr,GetPString(IDS_SIZE), 428 *bool,FALSE); 429 if(!directory) { 430 bool = (dcd) ? &dcd->detailsladate : &detailsladate; 431 AdjustCnrColVis(hwndCnr,GetPString(IDS_LADATE), 432 *bool,FALSE); 433 bool = (dcd) ? &dcd->detailslatime : &detailslatime; 434 AdjustCnrColVis(hwndCnr,GetPString(IDS_LATIME), 435 *bool,FALSE); 436 bool = (dcd) ? &dcd->detailscrdate : &detailscrdate; 437 AdjustCnrColVis(hwndCnr,GetPString(IDS_CRDATE), 438 *bool,FALSE); 439 bool = (dcd) ? &dcd->detailscrtime : &detailscrtime; 440 AdjustCnrColVis(hwndCnr,GetPString(IDS_CRTIME), 441 *bool,FALSE); 442 bool = (dcd) ? &dcd->detailslongname : &detailslongname; 443 AdjustCnrColVis(hwndCnr,GetPString(IDS_LNAME), 444 *bool,FALSE); 445 WinSendMsg(hwndCnr, 446 CM_INVALIDATEDETAILFIELDINFO, 447 MPVOID, 448 MPVOID); 449 } 450 else 451 AdjustCnrColsForFSType(hwndCnr, 452 directory, 453 dcd); 454 } 455 456 457 BOOL SetCnrCols (HWND hwndCnr,BOOL compare) { 458 459 BOOL fSuccess = TRUE; 460 PFIELDINFO pfi, pfiLastLeftCol, pfiIconCol; 461 462 // Allocate storage for container column data 463 464 pfi = WinSendMsg(hwndCnr, CM_ALLOCDETAILFIELDINFO, 465 MPFROMLONG(CONTAINER_COLUMNS),NULL); 466 467 if(pfi) { 468 469 PFIELDINFO pfiFirst; 470 FIELDINFOINSERT fii; 471 472 // Store original value of pfi so we won't lose it when it changes. 473 // This will be needed on the CM_INSERTDETAILFIELDINFO message. 474 475 pfiFirst = pfi; 476 477 // Fill in column information for the icon column 478 479 pfi->flData = CFA_BITMAPORICON | CFA_CENTER | CFA_FIREADONLY; 480 pfi->flTitle = CFA_CENTER | CFA_FITITLEREADONLY; 481 pfi->pTitleData = GetPString(IDS_ICON); 482 pfi->offStruct = FIELDOFFSET(MINIRECORDCORE, hptrIcon); 483 484 pfiIconCol = pfi; 485 486 // Fill in column information for the file name. Note that we are 487 // using the pszFileName variable rather than szFileName. We do this 488 // because the container needs a pointer to the file name. If we used 489 // szFileName (a character array, not a pointer), the container would 490 // take the first 4 bytes of szFileName and think it was a pointer, 491 // which of course it is not. Later in the FillInRecord* functions we set 492 // pszFileName to point to szFileName. 493 494 pfi = pfi->pNextFieldInfo; 495 pfi->flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR; 496 pfi->flTitle = CFA_CENTER; 497 pfi->pTitleData = GetPString(IDS_FILENAME); 498 pfi->offStruct = FIELDOFFSET( CNRITEM, pszFileName ); 499 500 // Fill in column information for the longname. 501 502 pfi = pfi->pNextFieldInfo; 503 pfi->flData = CFA_STRING | CFA_LEFT; 504 pfi->flTitle = CFA_CENTER | CFA_FITITLEREADONLY; 505 pfi->pTitleData = GetPString(IDS_LNAME); 506 pfi->offStruct = FIELDOFFSET( CNRITEM, pszLongname ); 507 508 // Store the current pfi value as that will be used to indicate the 509 // last column in the lefthand container window (we have a splitbar) 510 511 pfiLastLeftCol = pfi; 512 513 // Fill in column info for subjects 514 515 pfi = pfi->pNextFieldInfo; 516 pfi->flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR; 517 if(compare) 518 pfi->flData |= CFA_FIREADONLY; 519 pfi->flTitle = CFA_CENTER | CFA_FITITLEREADONLY; 520 pfi->pTitleData = (compare) ? GetPString(IDS_STATUS) : 521 GetPString(IDS_SUBJ); 522 pfi->offStruct = FIELDOFFSET( CNRITEM, pszSubject ); 523 524 // Fill in column information for the file size 525 526 pfi = pfi->pNextFieldInfo; 527 pfi->flData = CFA_ULONG | CFA_RIGHT | CFA_SEPARATOR | CFA_FIREADONLY; 528 pfi->flTitle = CFA_CENTER; 529 pfi->pTitleData = GetPString(IDS_SIZE); 530 pfi->offStruct = FIELDOFFSET( CNRITEM, cbFile ); 531 532 // Fill in the column information for the file's ea size 533 534 pfi = pfi->pNextFieldInfo; 535 pfi->flData = CFA_ULONG | CFA_RIGHT | CFA_SEPARATOR | CFA_FIREADONLY; 536 pfi->flTitle = CFA_CENTER; 537 pfi->pTitleData = GetPString(IDS_EA); 538 pfi->offStruct = FIELDOFFSET( CNRITEM, easize ); 539 540 // Fill in the column information for the file attribute 541 542 pfi = pfi->pNextFieldInfo; 543 pfi->flData = CFA_STRING | CFA_CENTER | CFA_SEPARATOR | CFA_FIREADONLY; 544 pfi->flTitle = CFA_CENTER | CFA_FITITLEREADONLY; 545 pfi->pTitleData = GetPString(IDS_ATTR); 546 pfi->offStruct = FIELDOFFSET(CNRITEM, pszDispAttr); 547 548 // Fill in column information for last write file date 549 550 pfi = pfi->pNextFieldInfo; 551 pfi->flData = CFA_DATE | CFA_RIGHT | CFA_FIREADONLY; 552 pfi->flTitle = CFA_CENTER; 553 pfi->pTitleData = GetPString(IDS_LWDATE); 554 pfi->offStruct = FIELDOFFSET(CNRITEM,date); 555 556 // Fill in column information for the last write file time 557 558 pfi = pfi->pNextFieldInfo; 559 pfi->flData = CFA_TIME | CFA_RIGHT | CFA_SEPARATOR | CFA_FIREADONLY; 560 pfi->flTitle = CFA_CENTER; 561 pfi->pTitleData = GetPString(IDS_LWTIME); 562 pfi->offStruct = FIELDOFFSET( CNRITEM, time ); 563 564 // Fill in column information for last access file date 565 566 pfi = pfi->pNextFieldInfo; 567 pfi->flData = CFA_DATE | CFA_RIGHT | CFA_FIREADONLY; 568 pfi->flTitle = CFA_CENTER; 569 pfi->pTitleData = GetPString(IDS_LADATE); 570 pfi->offStruct = FIELDOFFSET( CNRITEM, ladate ); 571 572 // Fill in column information for the last access file time 573 574 pfi = pfi->pNextFieldInfo; 575 pfi->flData = CFA_TIME | CFA_RIGHT | CFA_SEPARATOR | CFA_FIREADONLY; 576 pfi->flTitle = CFA_CENTER; 577 pfi->pTitleData = GetPString(IDS_LATIME); 578 pfi->offStruct = FIELDOFFSET( CNRITEM, latime ); 579 580 // Fill in column information for create file date 581 582 pfi = pfi->pNextFieldInfo; 583 pfi->flData = CFA_DATE | CFA_RIGHT | CFA_FIREADONLY; 584 pfi->flTitle = CFA_CENTER; 585 pfi->pTitleData = GetPString(IDS_CRDATE); 586 pfi->offStruct = FIELDOFFSET( CNRITEM, crdate ); 587 588 // Fill in column information for the create file time 589 590 pfi = pfi->pNextFieldInfo; 591 pfi->flData = CFA_TIME | CFA_RIGHT | CFA_FIREADONLY; 592 pfi->flTitle = CFA_CENTER; 593 pfi->pTitleData = GetPString(IDS_CRTIME); 594 pfi->offStruct = FIELDOFFSET( CNRITEM, crtime ); 595 596 // Use the CM_INSERTDETAILFIELDINFO message to tell the container 597 // all the column information it needs to function properly. Place 598 // this column info first in the column list and update the display 599 // after they are inserted (fInvalidateFieldInfo = TRUE) 600 601 (void) memset( &fii, 0, sizeof( FIELDINFOINSERT ) ); 602 603 fii.cb = sizeof( FIELDINFOINSERT ); 604 fii.pFieldInfoOrder = (PFIELDINFO) CMA_FIRST; 605 fii.cFieldInfoInsert = (SHORT) CONTAINER_COLUMNS; 606 fii.fInvalidateFieldInfo = TRUE; 607 608 if(!WinSendMsg(hwndCnr,CM_INSERTDETAILFIELDINFO,MPFROMP(pfiFirst), 609 MPFROMP(&fii))) 610 fSuccess = FALSE; 611 } 612 else 613 fSuccess = FALSE; 614 615 if( fSuccess ) { 616 617 CNRINFO cnri; 618 ULONG size; 619 620 // Tell the container about the splitbar and where it goes 621 622 cnri.cb = sizeof( CNRINFO ); 623 cnri.pFieldInfoLast = pfiLastLeftCol; 624 cnri.xVertSplitbar = DIR_SPLITBAR_OFFSET - 32; 625 cnri.pFieldInfoObject = pfiIconCol; 626 size = sizeof(LONG); 627 PrfQueryProfileData(fmprof, 628 appname, 629 "CnrSplitBar", 630 &cnri.xVertSplitbar, 631 &size); 632 if(cnri.xVertSplitbar <= 0) 633 cnri.xVertSplitbar = DIR_SPLITBAR_OFFSET - 32; 634 if(!WinSendMsg(hwndCnr, CM_SETCNRINFO, MPFROMP(&cnri), 635 MPFROMLONG(CMA_PFIELDINFOLAST | CMA_PFIELDINFOOBJECT | 636 CMA_XVERTSPLITBAR))) 637 fSuccess = FALSE; 638 } 639 640 return fSuccess; 641 } 642 643 644 MRESULT CnrDirectEdit (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 645 { 646 switch(SHORT2FROMMP(mp1)) { 631 fSuccess = FALSE; 632 633 if (fSuccess) 634 { 635 636 CNRINFO cnri; 637 ULONG size; 638 639 // Tell the container about the splitbar and where it goes 640 641 cnri.cb = sizeof(CNRINFO); 642 cnri.pFieldInfoLast = pfiLastLeftCol; 643 cnri.xVertSplitbar = DIR_SPLITBAR_OFFSET - 32; 644 cnri.pFieldInfoObject = pfiIconCol; 645 size = sizeof(LONG); 646 PrfQueryProfileData(fmprof, 647 appname, 648 "CnrSplitBar", 649 &cnri.xVertSplitbar, 650 &size); 651 if (cnri.xVertSplitbar <= 0) 652 cnri.xVertSplitbar = DIR_SPLITBAR_OFFSET - 32; 653 if (!WinSendMsg(hwndCnr, CM_SETCNRINFO, MPFROMP(&cnri), 654 MPFROMLONG(CMA_PFIELDINFOLAST | CMA_PFIELDINFOOBJECT | 655 CMA_XVERTSPLITBAR))) 656 fSuccess = FALSE; 657 } 658 659 return fSuccess; 660 } 661 662 MRESULT CnrDirectEdit(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 663 { 664 switch (SHORT2FROMMP(mp1)) 665 { 647 666 case CN_BEGINEDIT: 648 if(mp2) { 649 650 PFIELDINFO pfi = ((PCNREDITDATA)mp2)->pFieldInfo; 651 PCNRITEM pci = (PCNRITEM)((PCNREDITDATA)mp2)->pRecord; 652 653 if(pci && 654 (INT)pci != -1 && 655 !IsRoot(pci->szFileName) && 656 !(pci->flags & RECFLAGS_ENV) && 657 !(pci->flags & RECFLAGS_UNDERENV)) { 658 if(!pfi || 659 pfi->offStruct == FIELDOFFSET(CNRITEM,pszFileName)) { 660 PostMsg(hwnd, 661 UM_FIXEDITNAME, 662 MPFROMP(pci->szFileName), 663 MPVOID); 664 } 665 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,pszSubject)) 666 PostMsg(hwnd, 667 UM_FIXCNRMLE, 668 MPFROMLONG(40), 669 MPVOID); 670 else 671 PostMsg(hwnd, 672 UM_FIXCNRMLE, 673 MPFROMLONG(CCHMAXPATH), 674 MPVOID); 675 } 676 else 677 PostMsg(hwnd, 678 CM_CLOSEEDIT, 679 MPVOID, 680 MPVOID); 681 } 682 break; 667 if (mp2) 668 { 669 670 PFIELDINFO pfi = ((PCNREDITDATA) mp2) -> pFieldInfo; 671 PCNRITEM pci = (PCNRITEM) ((PCNREDITDATA) mp2) -> pRecord; 672 673 if (pci && 674 (INT) pci != -1 && 675 !IsRoot(pci -> szFileName) && 676 !(pci -> flags & RECFLAGS_ENV) && 677 !(pci -> flags & RECFLAGS_UNDERENV)) 678 { 679 if (!pfi || 680 pfi -> offStruct == FIELDOFFSET(CNRITEM, pszFileName)) 681 { 682 PostMsg(hwnd, 683 UM_FIXEDITNAME, 684 MPFROMP(pci -> szFileName), 685 MPVOID); 686 } 687 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, pszSubject)) 688 PostMsg(hwnd, 689 UM_FIXCNRMLE, 690 MPFROMLONG(40), 691 MPVOID); 692 else 693 PostMsg(hwnd, 694 UM_FIXCNRMLE, 695 MPFROMLONG(CCHMAXPATH), 696 MPVOID); 697 } 698 else 699 PostMsg(hwnd, 700 CM_CLOSEEDIT, 701 MPVOID, 702 MPVOID); 703 } 704 break; 683 705 684 706 case CN_REALLOCPSZ: 685 if(mp2) { 686 687 PFIELDINFO pfi = ((PCNREDITDATA)mp2)->pFieldInfo; 688 PCNRITEM pci = (PCNRITEM)((PCNREDITDATA)mp2)->pRecord; 689 CHAR szData[CCHMAXPATH],testname[CCHMAXPATH],*p; 690 HWND hwndMLE = WinWindowFromID(hwnd,CID_MLE); 691 692 if(pci && 693 (INT)pci != -1 && 694 !IsRoot(pci->szFileName)) { 695 if(pfi && 696 pfi->offStruct == FIELDOFFSET(CNRITEM,pszSubject)) { 697 698 APIRET rc; 699 EAOP2 eaop; 700 PFEA2LIST pfealist = NULL; 701 CHAR szSubject[256]; 702 ULONG ealen; 703 USHORT len; 704 CHAR *eaval; 705 706 WinQueryWindowText(hwndMLE,40,szSubject); 707 szSubject[39] = 0; 708 p = strchr(szSubject,'\n'); 709 if(p) 710 *p = 0; 711 p = strchr(szSubject,'\r'); 712 if(p) 713 *p = 0; 714 bstrip(szSubject); 715 WinSetWindowText(hwndMLE,szSubject); 716 len = strlen(szSubject); 717 if(len) 718 ealen = sizeof(FEA2LIST) + 9 + len + 4; 719 else 720 ealen = sizeof(FEALIST) + 9; 721 if(!DosAllocMem((PPVOID)&pfealist, 722 ealen + 64L, 723 OBJ_TILE | PAG_COMMIT | PAG_READ | PAG_WRITE)) { 724 memset(pfealist,0,ealen + 1); 725 pfealist->cbList = ealen; 726 pfealist->list[0].oNextEntryOffset = 0L; 727 pfealist->list[0].fEA = 0; 728 pfealist->list[0].cbName = 8; 729 strcpy(pfealist->list[0].szName,SUBJECT); 730 if(len) { 731 eaval = pfealist->list[0].szName + 9; 732 *(USHORT *)eaval = (USHORT)EAT_ASCII; 733 eaval += sizeof(USHORT); 734 *(USHORT *)eaval = (USHORT)len; 735 eaval += sizeof(USHORT); 736 memcpy(eaval,szSubject,len); 737 pfealist->list[0].cbValue = len + (sizeof(USHORT) * 2); 738 } 739 else 740 pfealist->list[0].cbValue = 0; 741 eaop.fpGEA2List = (PGEA2LIST)0; 742 eaop.fpFEA2List = pfealist; 743 eaop.oError = 0L; 744 rc = DosSetPathInfo(pci->szFileName, 745 FIL_QUERYEASIZE, 746 (PVOID)&eaop, 747 sizeof(EAOP2), 748 DSPI_WRTTHRU); 749 DosFreeMem(pfealist); 750 if(rc) 751 return FALSE; 752 } 753 return (MRESULT)TRUE; 754 } 755 else if(pfi && 756 pfi->offStruct == FIELDOFFSET(CNRITEM,pszLongname)) { 757 758 CHAR longname[CCHMAXPATHCOMP]; 759 760 *longname = 0; 761 WinQueryWindowText(hwndMLE, 762 sizeof(longname), 763 longname); 764 longname[CCHMAXPATHCOMP - 1] = 0; 765 p = strchr(longname,'\n'); 766 if(p) 767 *p = 0; 768 p = strchr(longname,'\r'); 769 if(p) 770 *p = 0; 771 WinSetWindowText(hwndMLE, 772 longname); 773 return (MRESULT)WriteLongName(pci->szFileName, 774 longname); 775 } 776 else { 777 WinQueryWindowText(hwndMLE, 778 sizeof(szData), 779 szData); 780 if(strchr(szData,'?') || 781 strchr(szData,'*') || 782 IsRoot(pci->szFileName)) 783 return (MRESULT)FALSE; 784 /* If the text changed, rename the file system object. */ 785 p = strchr(szData,'\n'); 786 if(p) 787 *p = 0; 788 p = strchr(szData,'\r'); 789 if(p) 790 *p = 0; 791 bstrip(szData); 792 if(IsFullName(szData)) { 793 if(DosQueryPathInfo(szData, 794 FIL_QUERYFULLNAME, 795 testname, 796 sizeof(testname))) 797 return FALSE; 798 if(DosQueryPathInfo(pci->szFileName, 799 FIL_QUERYFULLNAME, 800 szData, 801 sizeof(szData))) 802 strcpy(szData,pci->szFileName); 803 WinSetWindowText(hwndMLE, 804 szData); 805 if(strcmp(szData,testname)) { 806 if(stricmp(szData,testname) && 807 IsFile(testname) != -1) { 808 DosBeep(50,100); /* exists; disallow */ 809 return (MRESULT)FALSE; 810 } 811 if(!docopyf(MOVE, 812 szData, 813 "%s", 814 testname)) { 815 816 CHAR *filename; 817 818 filename = strdup(testname); 819 if(filename) { 820 if(!PostMsg(hwnd, 821 UM_FIXEDITNAME, 822 MPVOID, 823 MPFROMP(filename))) 824 free(filename); 825 } 826 if(stricmp(testname,pci->szFileName)) { 827 PostMsg(hwnd, 828 UM_FIXEDITNAME, 829 MPFROMLONG(-1), 830 MPFROMP(pci)); 831 filename = strdup(pci->szFileName); 832 if(filename) { 833 if(!PostMsg(hwnd, 834 UM_FIXEDITNAME, 835 MPVOID, 836 MPFROMP(filename))) 837 free(filename); 838 } 839 } 840 } 841 else 842 DosBeep(100,100); 843 } 844 } 845 else 846 DosBeep(250,100); 847 } 848 } 849 } 850 return FALSE; 707 if (mp2) 708 { 709 710 PFIELDINFO pfi = ((PCNREDITDATA) mp2) -> pFieldInfo; 711 PCNRITEM pci = (PCNRITEM) ((PCNREDITDATA) mp2) -> pRecord; 712 CHAR szData[CCHMAXPATH], testname[CCHMAXPATH], *p; 713 HWND hwndMLE = WinWindowFromID(hwnd, CID_MLE); 714 715 if (pci && 716 (INT) pci != -1 && 717 !IsRoot(pci -> szFileName)) 718 { 719 if (pfi && 720 pfi -> offStruct == FIELDOFFSET(CNRITEM, pszSubject)) 721 { 722 723 APIRET rc; 724 EAOP2 eaop; 725 PFEA2LIST pfealist = NULL; 726 CHAR szSubject[256]; 727 ULONG ealen; 728 USHORT len; 729 CHAR *eaval; 730 731 WinQueryWindowText(hwndMLE, 40, szSubject); 732 szSubject[39] = 0; 733 p = strchr(szSubject, '\n'); 734 if (p) 735 *p = 0; 736 p = strchr(szSubject, '\r'); 737 if (p) 738 *p = 0; 739 bstrip(szSubject); 740 WinSetWindowText(hwndMLE, szSubject); 741 len = strlen(szSubject); 742 if (len) 743 ealen = sizeof(FEA2LIST) + 9 + len + 4; 744 else 745 ealen = sizeof(FEALIST) + 9; 746 if (!DosAllocMem((PPVOID) & pfealist, 747 ealen + 64L, 748 OBJ_TILE | PAG_COMMIT | PAG_READ | PAG_WRITE)) 749 { 750 memset(pfealist, 0, ealen + 1); 751 pfealist -> cbList = ealen; 752 pfealist -> list[0].oNextEntryOffset = 0L; 753 pfealist -> list[0].fEA = 0; 754 pfealist -> list[0].cbName = 8; 755 strcpy(pfealist -> list[0].szName, SUBJECT); 756 if (len) 757 { 758 eaval = pfealist -> list[0].szName + 9; 759 *(USHORT *) eaval = (USHORT) EAT_ASCII; 760 eaval += sizeof(USHORT); 761 *(USHORT *) eaval = (USHORT) len; 762 eaval += sizeof(USHORT); 763 memcpy(eaval, szSubject, len); 764 pfealist -> list[0].cbValue = len + (sizeof(USHORT) * 2); 765 } 766 else 767 pfealist -> list[0].cbValue = 0; 768 eaop.fpGEA2List = (PGEA2LIST) 0; 769 eaop.fpFEA2List = pfealist; 770 eaop.oError = 0L; 771 rc = DosSetPathInfo(pci -> szFileName, 772 FIL_QUERYEASIZE, 773 (PVOID) & eaop, 774 sizeof(EAOP2), 775 DSPI_WRTTHRU); 776 DosFreeMem(pfealist); 777 if (rc) 778 return FALSE; 779 } 780 return (MRESULT) TRUE; 781 } 782 else if (pfi && 783 pfi -> offStruct == FIELDOFFSET(CNRITEM, pszLongname)) 784 { 785 786 CHAR longname[CCHMAXPATHCOMP]; 787 788 *longname = 0; 789 WinQueryWindowText(hwndMLE, 790 sizeof(longname), 791 longname); 792 longname[CCHMAXPATHCOMP - 1] = 0; 793 p = strchr(longname, '\n'); 794 if (p) 795 *p = 0; 796 p = strchr(longname, '\r'); 797 if (p) 798 *p = 0; 799 WinSetWindowText(hwndMLE, 800 longname); 801 return (MRESULT) WriteLongName(pci -> szFileName, 802 longname); 803 } 804 else 805 { 806 WinQueryWindowText(hwndMLE, 807 sizeof(szData), 808 szData); 809 if (strchr(szData, '?') || 810 strchr(szData, '*') || 811 IsRoot(pci -> szFileName)) 812 return (MRESULT) FALSE; 813 /* If the text changed, rename the file system object. */ 814 p = strchr(szData, '\n'); 815 if (p) 816 *p = 0; 817 p = strchr(szData, '\r'); 818 if (p) 819 *p = 0; 820 bstrip(szData); 821 if (IsFullName(szData)) 822 { 823 if (DosQueryPathInfo(szData, 824 FIL_QUERYFULLNAME, 825 testname, 826 sizeof(testname))) 827 return FALSE; 828 if (DosQueryPathInfo(pci -> szFileName, 829 FIL_QUERYFULLNAME, 830 szData, 831 sizeof(szData))) 832 strcpy(szData, pci -> szFileName); 833 WinSetWindowText(hwndMLE, 834 szData); 835 if (strcmp(szData, testname)) 836 { 837 if (stricmp(szData, testname) && 838 IsFile(testname) != -1) 839 { 840 DosBeep(50, 100); /* exists; disallow */ 841 return (MRESULT) FALSE; 842 } 843 if (!docopyf(MOVE, 844 szData, 845 "%s", 846 testname)) 847 { 848 849 CHAR *filename; 850 851 filename = strdup(testname); 852 if (filename) 853 { 854 if (!PostMsg(hwnd, 855 UM_FIXEDITNAME, 856 MPVOID, 857 MPFROMP(filename))) 858 free(filename); 859 } 860 if (stricmp(testname, pci -> szFileName)) 861 { 862 PostMsg(hwnd, 863 UM_FIXEDITNAME, 864 MPFROMLONG(-1), 865 MPFROMP(pci)); 866 filename = strdup(pci -> szFileName); 867 if (filename) 868 { 869 if (!PostMsg(hwnd, 870 UM_FIXEDITNAME, 871 MPVOID, 872 MPFROMP(filename))) 873 free(filename); 874 } 875 } 876 } 877 else 878 DosBeep(100, 100); 879 } 880 } 881 else 882 DosBeep(250, 100); 883 } 884 } 885 } 886 return FALSE; 851 887 852 888 case CN_ENDEDIT: 853 if(mp2) { 854 855 PFIELDINFO pfi = ((PCNREDITDATA)mp2)->pFieldInfo; 856 PCNRITEM pci = (PCNRITEM)((PCNREDITDATA)mp2)->pRecord; 857 858 if(pci && 859 (INT)pci != -1 && 860 !IsRoot(pci->szFileName)) { 861 WinSendMsg(hwnd, 862 CM_INVALIDATERECORD, 863 MPFROMP(&pci), 864 MPFROM2SHORT(1,CMA_ERASE | CMA_TEXTCHANGED)); 865 if(pfi && 866 pfi->offStruct == FIELDOFFSET(CNRITEM,pszFileName)) 867 PostMsg(hwnd, 868 UM_SORTRECORD, 869 MPVOID, 870 MPVOID); 871 } 872 else { 873 874 USHORT cmd = 0; 875 876 if(!pfi || 877 pfi->offStruct == FIELDOFFSET(CNRITEM,pszFileName)) 878 cmd = IDM_SORTSMARTNAME; 879 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,cbFile)) 880 cmd = IDM_SORTSIZE; 881 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,easize)) 882 cmd = IDM_SORTEASIZE; 883 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,date)) 884 cmd = IDM_SORTLWDATE; 885 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,time)) 886 cmd = IDM_SORTLWDATE; 887 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,ladate)) 888 cmd = IDM_SORTLADATE; 889 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,latime)) 890 cmd = IDM_SORTLADATE; 891 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,crdate)) 892 cmd = IDM_SORTCRDATE; 893 else if(pfi->offStruct == FIELDOFFSET(CNRITEM,crtime)) 894 cmd = IDM_SORTCRDATE; 895 if(cmd) 896 PostMsg(hwnd, 897 WM_COMMAND, 898 MPFROM2SHORT(cmd,0), 899 MPVOID); 900 } 901 } 902 break; 903 } 904 return (MRESULT)-1; 905 } 906 907 908 BOOL SetMenuCheck (HWND hwndMenu, USHORT id, BOOL *bool,BOOL toggle, 909 CHAR *savename) { 910 911 if(toggle) { 912 *bool = (*bool) ? FALSE : TRUE; 913 if(savename && *savename) 914 PrfWriteProfileData(fmprof, 915 appname, 916 savename, 917 bool, 918 sizeof(BOOL)); 919 } 920 WinSendMsg(hwndMenu,MM_SETITEMATTR, 921 MPFROM2SHORT(id,1), 922 MPFROM2SHORT(MIA_CHECKED, 923 MIA_CHECKED * (*bool != 0))); 924 return *bool; 925 } 926 927 928 VOID disable_menuitem (HWND hwndMenu,USHORT id,BOOL enable) { 929 930 WinSendMsg(hwndMenu,MM_SETITEMATTR, 931 MPFROM2SHORT(id,TRUE), 932 MPFROM2SHORT(MIA_DISABLED,((enable == FALSE) * MIA_DISABLED))); 933 } 934 935 936 BOOL ViewHelp (CHAR *filename) { 937 938 CHAR s[CCHMAXPATH + 81]; 939 FILE *fp; 940 INT ret = -1; 941 942 fp = _fsopen(filename,"rb",SH_DENYNO); 943 if(fp) { 889 if (mp2) 890 { 891 892 PFIELDINFO pfi = ((PCNREDITDATA) mp2) -> pFieldInfo; 893 PCNRITEM pci = (PCNRITEM) ((PCNREDITDATA) mp2) -> pRecord; 894 895 if (pci && 896 (INT) pci != -1 && 897 !IsRoot(pci -> szFileName)) 898 { 899 WinSendMsg(hwnd, 900 CM_INVALIDATERECORD, 901 MPFROMP(&pci), 902 MPFROM2SHORT(1, CMA_ERASE | CMA_TEXTCHANGED)); 903 if (pfi && 904 pfi -> offStruct == FIELDOFFSET(CNRITEM, pszFileName)) 905 PostMsg(hwnd, 906 UM_SORTRECORD, 907 MPVOID, 908 MPVOID); 909 } 910 else 911 { 912 913 USHORT cmd = 0; 914 915 if (!pfi || 916 pfi -> offStruct == FIELDOFFSET(CNRITEM, pszFileName)) 917 cmd = IDM_SORTSMARTNAME; 918 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, cbFile)) 919 cmd = IDM_SORTSIZE; 920 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, easize)) 921 cmd = IDM_SORTEASIZE; 922 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, date)) 923 cmd = IDM_SORTLWDATE; 924 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, time)) 925 cmd = IDM_SORTLWDATE; 926 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, ladate)) 927 cmd = IDM_SORTLADATE; 928 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, latime)) 929 cmd = IDM_SORTLADATE; 930 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, crdate)) 931 cmd = IDM_SORTCRDATE; 932 else if (pfi -> offStruct == FIELDOFFSET(CNRITEM, crtime)) 933 cmd = IDM_SORTCRDATE; 934 if (cmd) 935 PostMsg(hwnd, 936 WM_COMMAND, 937 MPFROM2SHORT(cmd, 0), 938 MPVOID); 939 } 940 } 941 break; 942 } 943 return (MRESULT) - 1; 944 } 945 946 BOOL SetMenuCheck(HWND hwndMenu, USHORT id, BOOL * bool, BOOL toggle, 947 CHAR * savename) 948 { 949 if (toggle) 950 { 951 *bool = (*bool) ? FALSE : TRUE; 952 if (savename && *savename) 953 PrfWriteProfileData(fmprof, 954 appname, 955 savename, 956 bool, 957 sizeof(BOOL)); 958 } 959 WinSendMsg(hwndMenu, MM_SETITEMATTR, 960 MPFROM2SHORT(id, 1), 961 MPFROM2SHORT(MIA_CHECKED, 962 MIA_CHECKED * (*bool != 0))); 963 return *bool; 964 } 965 966 VOID disable_menuitem(HWND hwndMenu, USHORT id, BOOL enable) 967 { 968 WinSendMsg(hwndMenu, MM_SETITEMATTR, 969 MPFROM2SHORT(id, TRUE), 970 MPFROM2SHORT(MIA_DISABLED, ((enable == FALSE) * MIA_DISABLED))); 971 } 972 973 BOOL ViewHelp(CHAR * filename) 974 { 975 CHAR s[CCHMAXPATH + 81]; 976 FILE *fp; 977 INT ret = -1; 978 979 fp = _fsopen(filename, "rb", SH_DENYNO); 980 if (fp) 981 { 982 *s = 0; 983 fread(s, 1, 3, fp); 984 if (*s != 'H' || s[1] != 'S' || s[2] != 'P') 985 { 986 fclose(fp); 987 return FALSE; 988 } 989 fclose(fp); 990 ret = runemf2(SEPARATE | WINDOWED, HWND_DESKTOP, NULL, NULL, 991 "VIEW.EXE \"%s\"", 992 filename); 993 } 994 995 return (ret != -1); 996 } 997 998 INT ExecFile(HWND hwnd, CHAR * filename) 999 { 1000 EXECARGS ex; 1001 CHAR cl[1001], path[CCHMAXPATH], *p; 1002 APIRET ret; 1003 static INT lastflags = 0; 1004 1005 strcpy(path, filename); 1006 p = strrchr(path, '\\'); 1007 if (!p) 1008 p = strrchr(path, ':'); 1009 if (p) 1010 { 1011 if (*p == ':') 1012 { 1013 p++; 1014 *p = '\\'; 1015 p++; 1016 } 1017 *p = 0; 1018 } 1019 else 1020 *path = 0; 1021 *cl = 0; 1022 if (needs_quoting(filename)) 1023 strcat(cl, "\""); 1024 strcat(cl, filename); 1025 if (needs_quoting(filename)) 1026 strcat(cl, "\""); 1027 memset(&ex, 0, sizeof(ex)); 1028 ex.flags = lastflags; 1029 ex.commandline = cl; 1030 *ex.path = 0; 1031 *ex.environment = 0; 1032 ret = WinDlgBox(HWND_DESKTOP, hwnd, CmdLineDlgProc, FM3ModHandle, 1033 EXEC_FRAME, &ex); 1034 if (ret == 1) 1035 { 1036 lastflags = ex.flags; 1037 return (runemf2(ex.flags, hwnd, path, 1038 (*ex.environment) ? ex.environment : NULL, 1039 "%s", cl) != -1); 1040 } 1041 else if (ret != 0) 1042 return -1; 1043 return 0; 1044 } 1045 1046 VOID EmptyCnr(HWND hwnd) 1047 { 1048 /* Empty out a container in preparation to it dying */ 1049 1050 PCNRITEM pci; 1051 PFIELDINFO pfi; 1052 1053 pci = (PCNRITEM) WinSendMsg(hwnd, CM_QUERYRECORD, MPVOID, 1054 MPFROMSHORT(CMA_FIRST)); 1055 if (pci && (INT) pci != -1) 1056 WinSendMsg(hwnd, CM_REMOVERECORD, MPVOID, MPFROM2SHORT(0, CMA_FREE)); 1057 pfi = (PFIELDINFO) WinSendMsg(hwnd, CM_QUERYDETAILFIELDINFO, MPVOID, 1058 MPFROMSHORT(CMA_FIRST)); 1059 if (pfi) 1060 WinSendMsg(hwnd, CM_REMOVEDETAILFIELDINFO, MPVOID, 1061 MPFROM2SHORT(0, CMA_FREE)); 1062 } 1063 1064 VOID SetDetailsSwitches(HWND hwnd, DIRCNRDATA * dcd) 1065 { 1066 WinCheckMenuItem(hwnd, IDM_SHOWLNAMES, (dcd) ? dcd -> detailslongname : detailslongname); 1067 WinCheckMenuItem(hwnd, IDM_SHOWSUBJECT, (dcd) ? dcd -> detailssubject : detailssubject); 1068 WinCheckMenuItem(hwnd, IDM_SHOWEAS, (dcd) ? dcd -> detailsea : detailsea); 1069 WinCheckMenuItem(hwnd, IDM_SHOWSIZE, (dcd) ? dcd -> detailssize : detailssize); 1070 WinCheckMenuItem(hwnd, IDM_SHOWICON, (dcd) ? dcd -> detailsicon : detailsicon); 1071 WinCheckMenuItem(hwnd, IDM_SHOWLWDATE, (dcd) ? dcd -> detailslwdate : detailslwdate); 1072 WinCheckMenuItem(hwnd, IDM_SHOWLWTIME, (dcd) ? dcd -> detailslwtime : detailslwtime); 1073 WinCheckMenuItem(hwnd, IDM_SHOWLADATE, (dcd) ? dcd -> detailsladate : detailsladate); 1074 WinCheckMenuItem(hwnd, IDM_SHOWLATIME, (dcd) ? dcd -> detailslatime : detailslatime); 1075 WinCheckMenuItem(hwnd, IDM_SHOWCRDATE, (dcd) ? dcd -> detailscrdate : detailscrdate); 1076 WinCheckMenuItem(hwnd, IDM_SHOWCRTIME, (dcd) ? dcd -> detailscrtime : detailscrtime); 1077 WinCheckMenuItem(hwnd, IDM_SHOWATTR, (dcd) ? dcd -> detailsattr : detailsattr); 1078 } 1079 1080 VOID AdjustDetailsSwitches(HWND hwnd, HWND hwndMenu, USHORT cmd, 1081 CHAR * directory, CHAR * keyroot, 1082 DIRCNRDATA * dcd, BOOL compare) 1083 { 1084 CHAR s[CCHMAXPATH], *eos = s; 1085 BOOL *bool = NULL; 1086 944 1087 *s = 0; 945 fread(s,1,3,fp); 946 if(*s != 'H' || s[1] != 'S' || s[2] != 'P') { 947 fclose(fp); 948 return FALSE; 949 } 1088 if (keyroot) 1089 { 1090 strcpy(s, keyroot); 1091 strcat(s, "."); 1092 eos = &s[strlen(s)]; 1093 } 1094 switch (cmd) 1095 { 1096 case IDM_SHOWLNAMES: 1097 bool = (dcd) ? &dcd -> detailslongname : &detailslongname; 1098 strcpy(eos, "DetailsLongname"); 1099 break; 1100 case IDM_SHOWSUBJECT: 1101 bool = (dcd) ? &dcd -> detailssubject : &detailssubject; 1102 strcpy(eos, "DetailsSubject"); 1103 break; 1104 case IDM_SHOWEAS: 1105 bool = (dcd) ? &dcd -> detailsea : &detailsea; 1106 strcpy(eos, "DetailsEA"); 1107 break; 1108 case IDM_SHOWSIZE: 1109 bool = (dcd) ? &dcd -> detailssize : &detailssize; 1110 strcpy(eos, "DetailsSize"); 1111 break; 1112 case IDM_SHOWICON: 1113 bool = (dcd) ? &dcd -> detailsicon : &detailsicon; 1114 strcpy(eos, "DetailsIcon"); 1115 break; 1116 case IDM_SHOWLWDATE: 1117 bool = (dcd) ? &dcd -> detailslwdate : &detailslwdate; 1118 strcpy(eos, "DetailsLWDate"); 1119 break; 1120 case IDM_SHOWLWTIME: 1121 bool = (dcd) ? &dcd -> detailslwtime : &detailslwtime; 1122 strcpy(eos, "DetailsLWTime"); 1123 break; 1124 case IDM_SHOWLADATE: 1125 bool = (dcd) ? &dcd -> detailsladate : &detailsladate; 1126 strcpy(eos, "DetailsLADate"); 1127 break; 1128 case IDM_SHOWLATIME: 1129 bool = (dcd) ? &dcd -> detailslatime : &detailslatime; 1130 strcpy(eos, "DetailsLATime"); 1131 break; 1132 case IDM_SHOWCRDATE: 1133 bool = (dcd) ? &dcd -> detailscrdate : &detailscrdate; 1134 strcpy(eos, "DetailsCRDate"); 1135 break; 1136 case IDM_SHOWCRTIME: 1137 bool = (dcd) ? &dcd -> detailscrtime : &detailscrtime; 1138 strcpy(eos, "DetailsCRTime"); 1139 break; 1140 case IDM_SHOWATTR: 1141 bool = (dcd) ? &dcd -> detailsattr : &detailsattr; 1142 strcpy(eos, "DetailsAttr"); 1143 break; 1144 default: 1145 if (hwndMenu) 1146 SetDetailsSwitches(hwndMenu, dcd); 1147 return; 1148 } 1149 if (bool) 1150 *bool = (*bool) ? FALSE : TRUE; 1151 if (*s && bool) 1152 PrfWriteProfileData(fmprof, appname, s, bool, sizeof(BOOL)); 1153 if (hwnd) 1154 AdjustCnrColsForPref(hwnd, directory, dcd, compare); 1155 if (hwndMenu) 1156 SetDetailsSwitches(hwndMenu, dcd); 1157 } 1158 1159 VOID SetConditionalCascade(HWND hwndMenu, USHORT id, USHORT def) 1160 { 1161 MENUITEM mi; 1162 1163 mi.iPosition = MIT_END; 1164 mi.hItem = 0L; 1165 mi.hwndSubMenu = (HWND) 0; 1166 mi.afAttribute = 0; 1167 mi.afStyle = MIS_TEXT; 1168 if (WinSendMsg(hwndMenu, MM_QUERYITEM, MPFROM2SHORT(id, TRUE), MPFROMP(&mi))) 1169 { 1170 WinSetWindowBits(mi.hwndSubMenu, QWL_STYLE, 1171 MS_CONDITIONALCASCADE, 1172 MS_CONDITIONALCASCADE); 1173 WinSendMsg(mi.hwndSubMenu, MM_SETDEFAULTITEMID, MPFROMSHORT(def), MPVOID); 1174 WinCheckMenuItem(mi.hwndSubMenu, def, TRUE); 1175 } 1176 } 1177 1178 VOID SetSortChecks(HWND hwndMenu, INT sortflags) 1179 { 1180 WinCheckMenuItem(hwndMenu, IDM_SORTNONE, FALSE); 1181 WinCheckMenuItem(hwndMenu, IDM_SORTFIRST, FALSE); 1182 WinCheckMenuItem(hwndMenu, IDM_SORTLAST, FALSE); 1183 WinCheckMenuItem(hwndMenu, IDM_SORTSIZE, FALSE); 1184 WinCheckMenuItem(hwndMenu, IDM_SORTEASIZE, FALSE); 1185 WinCheckMenuItem(hwndMenu, IDM_SORTLWDATE, FALSE); 1186 WinCheckMenuItem(hwndMenu, IDM_SORTLADATE, FALSE); 1187 WinCheckMenuItem(hwndMenu, IDM_SORTCRDATE, FALSE); 1188 WinCheckMenuItem(hwndMenu, IDM_SORTFILENAME, FALSE); 1189 WinCheckMenuItem(hwndMenu, IDM_SORTNAME, FALSE); 1190 WinCheckMenuItem(hwndMenu, IDM_SORTSUBJECT, FALSE); 1191 WinCheckMenuItem(hwndMenu, IDM_SORTDIRSFIRST, FALSE); 1192 WinCheckMenuItem(hwndMenu, IDM_SORTDIRSLAST, FALSE); 1193 WinCheckMenuItem(hwndMenu, IDM_SORTREVERSE, FALSE); 1194 if (sortflags & SORT_FIRSTEXTENSION) 1195 WinCheckMenuItem(hwndMenu, IDM_SORTFIRST, TRUE); 1196 else if (sortflags & SORT_LASTEXTENSION) 1197 WinCheckMenuItem(hwndMenu, IDM_SORTLAST, TRUE); 1198 else if (sortflags & SORT_SIZE) 1199 WinCheckMenuItem(hwndMenu, IDM_SORTSIZE, TRUE); 1200 else if (sortflags & SORT_EASIZE) 1201 WinCheckMenuItem(hwndMenu, IDM_SORTEASIZE, TRUE); 1202 else if (sortflags & SORT_LWDATE) 1203 WinCheckMenuItem(hwndMenu, IDM_SORTLWDATE, TRUE); 1204 else if (sortflags & SORT_LADATE) 1205 WinCheckMenuItem(hwndMenu, IDM_SORTLADATE, TRUE); 1206 else if (sortflags & SORT_CRDATE) 1207 WinCheckMenuItem(hwndMenu, IDM_SORTCRDATE, TRUE); 1208 else if (sortflags & SORT_FILENAME) 1209 WinCheckMenuItem(hwndMenu, IDM_SORTFILENAME, TRUE); 1210 else if (sortflags & SORT_NOSORT) 1211 WinCheckMenuItem(hwndMenu, IDM_SORTNONE, TRUE); 1212 else if (sortflags & SORT_SUBJECT) 1213 WinCheckMenuItem(hwndMenu, IDM_SORTSUBJECT, TRUE); 1214 else 1215 WinCheckMenuItem(hwndMenu, IDM_SORTNAME, TRUE); 1216 if (sortflags & SORT_DIRSFIRST) 1217 WinCheckMenuItem(hwndMenu, IDM_SORTDIRSFIRST, TRUE); 1218 else if (sortflags & SORT_DIRSLAST) 1219 WinCheckMenuItem(hwndMenu, IDM_SORTDIRSLAST, TRUE); 1220 if (sortflags & SORT_REVERSE) 1221 WinCheckMenuItem(hwndMenu, IDM_SORTREVERSE, TRUE); 1222 } 1223 1224 VOID FreeMallocedMem(VOID * mem) 1225 { 1226 /* for use by apps that don't use the DLLs runtime library */ 1227 1228 free(mem); 1229 } 1230 1231 VOID FcloseFile(FILE * fp) 1232 { 1233 /* for use by apps that don't use the DLLs runtime library */ 1234 950 1235 fclose(fp); 951 ret = runemf2(SEPARATE | WINDOWED,HWND_DESKTOP,NULL,NULL, 952 "VIEW.EXE \"%s\"", 953 filename); 954 } 955 956 return (ret != -1); 957 } 958 959 960 INT ExecFile (HWND hwnd,CHAR *filename) { 961 962 EXECARGS ex; 963 CHAR cl[1001],path[CCHMAXPATH],*p; 964 APIRET ret; 965 static INT lastflags = 0; 966 967 strcpy(path,filename); 968 p = strrchr(path,'\\'); 969 if(!p) 970 p = strrchr(path,':'); 971 if(p) { 972 if(*p == ':') { 973 p++; 974 *p = '\\'; 975 p++; 976 } 977 *p = 0; 978 } 979 else 980 *path = 0; 981 *cl = 0; 982 if(needs_quoting(filename)) 983 strcat(cl,"\""); 984 strcat(cl,filename); 985 if(needs_quoting(filename)) 986 strcat(cl,"\""); 987 memset(&ex,0,sizeof(ex)); 988 ex.flags = lastflags; 989 ex.commandline = cl; 990 *ex.path = 0; 991 *ex.environment = 0; 992 ret = WinDlgBox(HWND_DESKTOP,hwnd,CmdLineDlgProc,FM3ModHandle, 993 EXEC_FRAME,&ex); 994 if(ret == 1) { 995 lastflags = ex.flags; 996 return (runemf2(ex.flags,hwnd,path, 997 (*ex.environment) ? ex.environment : NULL, 998 "%s",cl) != -1); 999 } 1000 else if(ret != 0) 1001 return -1; 1002 return 0; 1003 } 1004 1005 1006 VOID EmptyCnr (HWND hwnd) { 1007 1008 /* Empty out a container in preparation to it dying */ 1009 1010 PCNRITEM pci; 1011 PFIELDINFO pfi; 1012 1013 pci = (PCNRITEM)WinSendMsg(hwnd,CM_QUERYRECORD,MPVOID, 1014 MPFROMSHORT(CMA_FIRST)); 1015 if(pci && (INT)pci != -1) 1016 WinSendMsg(hwnd,CM_REMOVERECORD,MPVOID,MPFROM2SHORT(0,CMA_FREE)); 1017 pfi = (PFIELDINFO)WinSendMsg(hwnd,CM_QUERYDETAILFIELDINFO,MPVOID, 1018 MPFROMSHORT(CMA_FIRST)); 1019 if(pfi) 1020 WinSendMsg(hwnd,CM_REMOVEDETAILFIELDINFO,MPVOID, 1021 MPFROM2SHORT(0,CMA_FREE)); 1022 } 1023 1024 1025 VOID SetDetailsSwitches (HWND hwnd,DIRCNRDATA *dcd) { 1026 1027 WinCheckMenuItem(hwnd,IDM_SHOWLNAMES,(dcd) ? dcd->detailslongname : detailslongname); 1028 WinCheckMenuItem(hwnd,IDM_SHOWSUBJECT,(dcd) ? dcd->detailssubject : detailssubject); 1029 WinCheckMenuItem(hwnd,IDM_SHOWEAS,(dcd) ? dcd->detailsea : detailsea); 1030 WinCheckMenuItem(hwnd,IDM_SHOWSIZE,(dcd) ? dcd->detailssize : detailssize); 1031 WinCheckMenuItem(hwnd,IDM_SHOWICON,(dcd) ? dcd->detailsicon : detailsicon); 1032 WinCheckMenuItem(hwnd,IDM_SHOWLWDATE,(dcd) ? dcd->detailslwdate : detailslwdate); 1033 WinCheckMenuItem(hwnd,IDM_SHOWLWTIME,(dcd) ? dcd->detailslwtime : detailslwtime); 1034 WinCheckMenuItem(hwnd,IDM_SHOWLADATE,(dcd) ? dcd->detailsladate : detailsladate); 1035 WinCheckMenuItem(hwnd,IDM_SHOWLATIME,(dcd) ? dcd->detailslatime : detailslatime); 1036 WinCheckMenuItem(hwnd,IDM_SHOWCRDATE,(dcd) ? dcd->detailscrdate : detailscrdate); 1037 WinCheckMenuItem(hwnd,IDM_SHOWCRTIME,(dcd) ? dcd->detailscrtime : detailscrtime); 1038 WinCheckMenuItem(hwnd,IDM_SHOWATTR,(dcd) ? dcd->detailsattr : detailsattr); 1039 } 1040 1041 1042 VOID AdjustDetailsSwitches (HWND hwnd,HWND hwndMenu,USHORT cmd, 1043 CHAR *directory,CHAR *keyroot, 1044 DIRCNRDATA *dcd,BOOL compare) { 1045 1046 CHAR s[CCHMAXPATH],*eos = s; 1047 BOOL *bool = NULL; 1048 1049 *s = 0; 1050 if(keyroot) { 1051 strcpy(s,keyroot); 1052 strcat(s,"."); 1053 eos = &s[strlen(s)]; 1054 } 1055 switch(cmd) { 1056 case IDM_SHOWLNAMES: 1057 bool = (dcd) ? &dcd->detailslongname : &detailslongname; 1058 strcpy(eos,"DetailsLongname"); 1059 break; 1060 case IDM_SHOWSUBJECT: 1061 bool = (dcd) ? &dcd->detailssubject : &detailssubject; 1062 strcpy(eos,"DetailsSubject"); 1063 break; 1064 case IDM_SHOWEAS: 1065 bool = (dcd) ? &dcd->detailsea : &detailsea; 1066 strcpy(eos,"DetailsEA"); 1067 break; 1068 case IDM_SHOWSIZE: 1069 bool = (dcd) ? &dcd->detailssize : &detailssize; 1070 strcpy(eos,"DetailsSize"); 1071 break; 1072 case IDM_SHOWICON: 1073 bool = (dcd) ? &dcd->detailsicon : &detailsicon; 1074 strcpy(eos,"DetailsIcon"); 1075 break; 1076 case IDM_SHOWLWDATE: 1077 bool = (dcd) ? &dcd->detailslwdate : &detailslwdate; 1078 strcpy(eos,"DetailsLWDate"); 1079 break; 1080 case IDM_SHOWLWTIME: 1081 bool = (dcd) ? &dcd->detailslwtime : &detailslwtime; 1082 strcpy(eos,"DetailsLWTime"); 1083 break; 1084 case IDM_SHOWLADATE: 1085 bool = (dcd) ? &dcd->detailsladate : &detailsladate; 1086 strcpy(eos,"DetailsLADate"); 1087 break; 1088 case IDM_SHOWLATIME: 1089 bool = (dcd) ? &dcd->detailslatime : &detailslatime; 1090 strcpy(eos,"DetailsLATime"); 1091 break; 1092 case IDM_SHOWCRDATE: 1093 bool = (dcd) ? &dcd->detailscrdate : &detailscrdate; 1094 strcpy(eos,"DetailsCRDate"); 1095 break; 1096 case IDM_SHOWCRTIME: 1097 bool = (dcd) ? &dcd->detailscrtime : &detailscrtime; 1098 strcpy(eos,"DetailsCRTime"); 1099 break; 1100 case IDM_SHOWATTR: 1101 bool = (dcd) ? &dcd->detailsattr : &detailsattr; 1102 strcpy(eos,"DetailsAttr"); 1103 break; 1104 default: 1105 if(hwndMenu) 1106 SetDetailsSwitches(hwndMenu,dcd); 1107 return; 1108 } 1109 if(bool) 1110 *bool = (*bool) ? FALSE : TRUE; 1111 if(*s && bool) 1112 PrfWriteProfileData(fmprof,appname,s,bool,sizeof(BOOL)); 1113 if(hwnd) 1114 AdjustCnrColsForPref(hwnd,directory,dcd,compare); 1115 if(hwndMenu) 1116 SetDetailsSwitches(hwndMenu,dcd); 1117 } 1118 1119 1120 VOID SetConditionalCascade (HWND hwndMenu,USHORT id,USHORT def) { 1121 1122 MENUITEM mi; 1123 1124 mi.iPosition = MIT_END; 1125 mi.hItem = 0L; 1126 mi.hwndSubMenu = (HWND)0; 1127 mi.afAttribute = 0; 1128 mi.afStyle = MIS_TEXT; 1129 if(WinSendMsg(hwndMenu,MM_QUERYITEM,MPFROM2SHORT(id,TRUE),MPFROMP(&mi))) { 1130 WinSetWindowBits(mi.hwndSubMenu,QWL_STYLE, 1131 MS_CONDITIONALCASCADE, 1132 MS_CONDITIONALCASCADE); 1133 WinSendMsg(mi.hwndSubMenu,MM_SETDEFAULTITEMID,MPFROMSHORT(def),MPVOID); 1134 WinCheckMenuItem(mi.hwndSubMenu,def,TRUE); 1135 } 1136 } 1137 1138 1139 VOID SetSortChecks (HWND hwndMenu,INT sortflags) { 1140 1141 WinCheckMenuItem(hwndMenu,IDM_SORTNONE,FALSE); 1142 WinCheckMenuItem(hwndMenu,IDM_SORTFIRST,FALSE); 1143 WinCheckMenuItem(hwndMenu,IDM_SORTLAST,FALSE); 1144 WinCheckMenuItem(hwndMenu,IDM_SORTSIZE,FALSE); 1145 WinCheckMenuItem(hwndMenu,IDM_SORTEASIZE,FALSE); 1146 WinCheckMenuItem(hwndMenu,IDM_SORTLWDATE,FALSE); 1147 WinCheckMenuItem(hwndMenu,IDM_SORTLADATE,FALSE); 1148 WinCheckMenuItem(hwndMenu,IDM_SORTCRDATE,FALSE); 1149 WinCheckMenuItem(hwndMenu,IDM_SORTFILENAME,FALSE); 1150 WinCheckMenuItem(hwndMenu,IDM_SORTNAME,FALSE); 1151 WinCheckMenuItem(hwndMenu,IDM_SORTSUBJECT,FALSE); 1152 WinCheckMenuItem(hwndMenu,IDM_SORTDIRSFIRST,FALSE); 1153 WinCheckMenuItem(hwndMenu,IDM_SORTDIRSLAST,FALSE); 1154 WinCheckMenuItem(hwndMenu,IDM_SORTREVERSE,FALSE); 1155 if(sortflags & SORT_FIRSTEXTENSION) 1156 WinCheckMenuItem(hwndMenu,IDM_SORTFIRST,TRUE); 1157 else if(sortflags & SORT_LASTEXTENSION) 1158 WinCheckMenuItem(hwndMenu,IDM_SORTLAST,TRUE); 1159 else if(sortflags & SORT_SIZE) 1160 WinCheckMenuItem(hwndMenu,IDM_SORTSIZE,TRUE); 1161 else if(sortflags & SORT_EASIZE) 1162 WinCheckMenuItem(hwndMenu,IDM_SORTEASIZE,TRUE); 1163 else if(sortflags & SORT_LWDATE) 1164 WinCheckMenuItem(hwndMenu,IDM_SORTLWDATE,TRUE); 1165 else if(sortflags & SORT_LADATE) 1166 WinCheckMenuItem(hwndMenu,IDM_SORTLADATE,TRUE); 1167 else if(sortflags & SORT_CRDATE) 1168 WinCheckMenuItem(hwndMenu,IDM_SORTCRDATE,TRUE); 1169 else if(sortflags & SORT_FILENAME) 1170 WinCheckMenuItem(hwndMenu,IDM_SORTFILENAME,TRUE); 1171 else if(sortflags & SORT_NOSORT) 1172 WinCheckMenuItem(hwndMenu,IDM_SORTNONE,TRUE); 1173 else if(sortflags & SORT_SUBJECT) 1174 WinCheckMenuItem(hwndMenu,IDM_SORTSUBJECT,TRUE); 1175 else 1176 WinCheckMenuItem(hwndMenu,IDM_SORTNAME,TRUE); 1177 if(sortflags & SORT_DIRSFIRST) 1178 WinCheckMenuItem(hwndMenu,IDM_SORTDIRSFIRST,TRUE); 1179 else if(sortflags & SORT_DIRSLAST) 1180 WinCheckMenuItem(hwndMenu,IDM_SORTDIRSLAST,TRUE); 1181 if(sortflags & SORT_REVERSE) 1182 WinCheckMenuItem(hwndMenu,IDM_SORTREVERSE,TRUE); 1183 } 1184 1185 1186 VOID FreeMallocedMem (VOID *mem) { 1187 1188 /* for use by apps that don't use the DLLs runtime library */ 1189 1190 free(mem); 1191 } 1192 1193 VOID FcloseFile (FILE *fp) { 1194 1195 /* for use by apps that don't use the DLLs runtime library */ 1196 1197 fclose(fp); 1198 } 1199 1200 1201 VOID SetupCommandMenu (HWND hwndMenu,HWND hwndCnr) { 1202 1203 MENUITEM mi,mit; 1204 INT x; 1205 SHORT numitems; 1206 LINKCMDS *info; 1207 1208 if(!cmdloaded) 1209 load_commands(); 1210 mi.iPosition = MIT_END; 1211 mi.hwndSubMenu = (HWND)0; 1212 mi.hItem = 0L; 1213 mi.afAttribute = 0; 1214 mi.afStyle = MIS_TEXT; 1215 memset(&mit,0,sizeof(MENUITEM)); 1216 if(WinQueryWindowUShort(hwndMenu,QWS_ID) == IDM_COMMANDSMENU) 1217 mit.hwndSubMenu = hwndMenu; 1218 else 1219 WinSendMsg(hwndMenu,MM_QUERYITEM, 1220 MPFROM2SHORT(IDM_COMMANDSMENU,TRUE), 1221 MPFROMP(&mit)); 1222 if(mit.hwndSubMenu) { 1223 numitems = (SHORT)WinSendMsg(mit.hwndSubMenu,MM_QUERYITEMCOUNT, 1224 MPVOID,MPVOID); 1225 WinSendMsg(mit.hwndSubMenu,MM_DELETEITEM,MPFROMSHORT(-1),MPVOID); 1226 for(x = 0;x < numitems;x++) 1227 WinSendMsg(mit.hwndSubMenu,MM_DELETEITEM, 1228 MPFROMSHORT((SHORT)(x + IDM_COMMANDSTART)), 1229 MPVOID); 1230 if(hwndCnr && cmdhead) { 1231 x = 0; 1232 info = cmdhead; 1233 while(info) { 1234 1235 CHAR s[CCHMAXPATH + 24]; 1236 1237 sprintf(s, 1238 "%s%s%s", 1239 info->title, 1240 (x < 20) ? "\tCtrl + " : NullStr, 1241 (x < 20 && x > 9) ? "Shift + " : NullStr); 1242 if(x < 20) 1243 sprintf(&s[strlen(s)],"%d",(((x % 10) + 1) == 10) ? 0 : (x % 10) + 1); 1244 mi.id = IDM_COMMANDSTART + x; 1245 mi.afAttribute = (((info->flags & ONCE) != 0) ? 1246 MIA_CHECKED : 0) | 1247 (((info->flags & PROMPT) != 0) ? 1248 MIA_FRAMED : 0); 1249 mi.afStyle = MIS_TEXT; 1250 if(!(x % 24) && x && info->next) 1251 mi.afStyle |= MIS_BREAK; 1252 WinSendMsg(mit.hwndSubMenu, MM_INSERTITEM, MPFROMP(&mi), 1253 MPFROMP(s)); 1254 x++; 1255 info = info->next; 1256 } 1257 } 1258 } 1259 } 1260 1261 1262 VOID LoadDetailsSwitches (CHAR *keyroot,DIRCNRDATA *dcd) { 1263 1264 ULONG size; 1265 CHAR s[CCHMAXPATH],*eos = s; 1266 BOOL *bool; 1267 1268 *s = 0; 1269 if(keyroot) { 1270 strcpy(s,keyroot); 1271 strcat(s,"."); 1272 eos = &s[strlen(s)]; 1273 } 1274 strcpy(eos,"DetailsLongname"); 1275 if(dcd) 1276 bool = &dcd->detailslongname; 1277 else 1278 bool = &detailslongname; 1279 *bool = detailslongname; 1280 size = sizeof(BOOL); 1281 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1282 strcpy(eos,"DetailsSubject"); 1283 if(dcd) 1284 bool = &dcd->detailssubject; 1285 else 1286 bool = &detailssubject; 1287 *bool = detailssubject; 1288 size = sizeof(BOOL); 1289 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1290 strcpy(eos,"DetailsEA"); 1291 if(dcd) 1292 bool = &dcd->detailsea; 1293 else 1294 bool = &detailsea; 1295 *bool = detailsea; 1296 size = sizeof(BOOL); 1297 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1298 strcpy(eos,"DetailsSize"); 1299 if(dcd) 1300 bool = &dcd->detailssize; 1301 else 1302 bool = &detailssize; 1303 *bool = detailssize; 1304 size = sizeof(BOOL); 1305 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1306 strcpy(eos,"DetailsIcon"); 1307 if(dcd) 1308 bool = &dcd->detailsicon; 1309 else 1310 bool = &detailsicon; 1311 *bool = detailsicon; 1312 size = sizeof(BOOL); 1313 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1314 strcpy(eos,"DetailsAttr"); 1315 if(dcd) 1316 bool = &dcd->detailsattr; 1317 else 1318 bool = &detailsattr; 1319 *bool = detailsattr; 1320 size = sizeof(BOOL); 1321 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1322 strcpy(eos,"DetailsCRDate"); 1323 if(dcd) 1324 bool = &dcd->detailscrdate; 1325 else 1326 bool = &detailscrdate; 1327 *bool = detailscrdate; 1328 size = sizeof(BOOL); 1329 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1330 strcpy(eos,"DetailsCRTime"); 1331 if(dcd) 1332 bool = &dcd->detailscrtime; 1333 else 1334 bool = &detailscrtime; 1335 *bool = detailscrtime; 1336 size = sizeof(BOOL); 1337 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1338 strcpy(eos,"DetailsLWDate"); 1339 if(dcd) 1340 bool = &dcd->detailslwdate; 1341 else 1342 bool = &detailslwdate; 1343 *bool = detailslwdate; 1344 size = sizeof(BOOL); 1345 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1346 strcpy(eos,"DetailsLWTime"); 1347 if(dcd) 1348 bool = &dcd->detailslwtime; 1349 else 1350 bool = &detailslwtime; 1351 *bool = detailslwtime; 1352 size = sizeof(BOOL); 1353 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1354 strcpy(eos,"DetailsLADate"); 1355 if(dcd) 1356 bool = &dcd->detailsladate; 1357 else 1358 bool = &detailsladate; 1359 *bool = detailsladate; 1360 size = sizeof(BOOL); 1361 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1362 strcpy(eos,"DetailsLATime"); 1363 if(dcd) 1364 bool = &dcd->detailslatime; 1365 else 1366 bool = &detailslatime; 1367 *bool = detailslatime; 1368 size = sizeof(BOOL); 1369 PrfQueryProfileData(fmprof,appname,s,(PVOID)bool,&size); 1370 } 1371 1372 1373 HWND FindDirCnr (HWND hwndParent) { 1374 1375 HWND found,hwndDir = (HWND)0; 1376 HENUM henum; 1377 1378 henum = WinBeginEnumWindows(hwndParent); 1379 while((found = WinGetNextWindow(henum)) != NULLHANDLE) { 1380 hwndDir = WinWindowFromID(found,FID_CLIENT); 1381 if(hwndDir) { 1382 hwndDir = WinWindowFromID(hwndDir,DIR_CNR); 1383 if(hwndDir) 1384 break; 1385 hwndDir = (HWND)0; 1386 } 1387 } 1388 WinEndEnumWindows(henum); 1389 1390 return hwndDir; 1391 } 1392 1393 1394 VOID HeapThread (VOID *dummy) { 1395 1396 ULONG postcount; 1397 1398 if(!DosCreateEventSem(NULL,&CompactSem,0L,FALSE)) { 1399 priority_normal(); 1400 for(;;) { 1401 if(DosWaitEventSem(CompactSem,SEM_INDEFINITE_WAIT)) 1402 break; 1403 _heapmin(); 1404 DosResetEventSem(CompactSem,&postcount); 1405 } 1406 } 1407 else { 1408 DosBeep(250,100); 1409 DosBeep(1000,100); 1410 DosBeep(500,100); 1236 } 1237 1238 VOID SetupCommandMenu(HWND hwndMenu, HWND hwndCnr) 1239 { 1240 MENUITEM mi, mit; 1241 INT x; 1242 SHORT numitems; 1243 LINKCMDS *info; 1244 1245 if (!cmdloaded) 1246 load_commands(); 1247 mi.iPosition = MIT_END; 1248 mi.hwndSubMenu = (HWND) 0; 1249 mi.hItem = 0L; 1250 mi.afAttribute = 0; 1251 mi.afStyle = MIS_TEXT; 1252 memset(&mit, 0, sizeof(MENUITEM)); 1253 if (WinQueryWindowUShort(hwndMenu, QWS_ID) == IDM_COMMANDSMENU) 1254 mit.hwndSubMenu = hwndMenu; 1255 else 1256 WinSendMsg(hwndMenu, MM_QUERYITEM, 1257 MPFROM2SHORT(IDM_COMMANDSMENU, TRUE), 1258 MPFROMP(&mit)); 1259 if (mit.hwndSubMenu) 1260 { 1261 numitems = (SHORT) WinSendMsg(mit.hwndSubMenu, MM_QUERYITEMCOUNT, 1262 MPVOID, MPVOID); 1263 WinSendMsg(mit.hwndSubMenu, MM_DELETEITEM, MPFROMSHORT(-1), MPVOID); 1264 for (x = 0; x < numitems; x++) 1265 WinSendMsg(mit.hwndSubMenu, MM_DELETEITEM, 1266 MPFROMSHORT((SHORT) (x + IDM_COMMANDSTART)), 1267 MPVOID); 1268 if (hwndCnr && cmdhead) 1269 { 1270 x = 0; 1271 info = cmdhead; 1272 while (info) 1273 { 1274 1275 CHAR s[CCHMAXPATH + 24]; 1276 1277 sprintf(s, 1278 "%s%s%s", 1279 info -> title, 1280 (x < 20) ? "\tCtrl + " : NullStr, 1281 (x < 20 && x > 9) ? "Shift + " : NullStr); 1282 if (x < 20) 1283 sprintf(&s[strlen(s)], "%d", (((x % 10) + 1) == 10) ? 0 : (x % 10) + 1); 1284 mi.id = IDM_COMMANDSTART + x; 1285 mi.afAttribute = (((info -> flags & ONCE) != 0) ? 1286 MIA_CHECKED : 0) | 1287 (((info -> flags & PROMPT) != 0) ? 1288 MIA_FRAMED : 0); 1289 mi.afStyle = MIS_TEXT; 1290 if (!(x % 24) && x && info -> next) 1291 mi.afStyle |= MIS_BREAK; 1292 WinSendMsg(mit.hwndSubMenu, MM_INSERTITEM, MPFROMP(&mi), 1293 MPFROMP(s)); 1294 x++; 1295 info = info -> next; 1296 } 1297 } 1298 } 1299 } 1300 1301 VOID LoadDetailsSwitches(CHAR * keyroot, DIRCNRDATA * dcd) 1302 { 1303 ULONG size; 1304 CHAR s[CCHMAXPATH], *eos = s; 1305 BOOL *bool; 1306 1307 *s = 0; 1308 if (keyroot) 1309 { 1310 strcpy(s, keyroot); 1311 strcat(s, "."); 1312 eos = &s[strlen(s)]; 1313 } 1314 strcpy(eos, "DetailsLongname"); 1315 if (dcd) 1316 bool = &dcd -> detailslongname; 1317 else 1318 bool = &detailslongname; 1319 *bool = detailslongname; 1320 size = sizeof(BOOL); 1321 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1322 strcpy(eos, "DetailsSubject"); 1323 if (dcd) 1324 bool = &dcd -> detailssubject; 1325 else 1326 bool = &detailssubject; 1327 *bool = detailssubject; 1328 size = sizeof(BOOL); 1329 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1330 strcpy(eos, "DetailsEA"); 1331 if (dcd) 1332 bool = &dcd -> detailsea; 1333 else 1334 bool = &detailsea; 1335 *bool = detailsea; 1336 size = sizeof(BOOL); 1337 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1338 strcpy(eos, "DetailsSize"); 1339 if (dcd) 1340 bool = &dcd -> detailssize; 1341 else 1342 bool = &detailssize; 1343 *bool = detailssize; 1344 size = sizeof(BOOL); 1345 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1346 strcpy(eos, "DetailsIcon"); 1347 if (dcd) 1348 bool = &dcd -> detailsicon; 1349 else 1350 bool = &detailsicon; 1351 *bool = detailsicon; 1352 size = sizeof(BOOL); 1353 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1354 strcpy(eos, "DetailsAttr"); 1355 if (dcd) 1356 bool = &dcd -> detailsattr; 1357 else 1358 bool = &detailsattr; 1359 *bool = detailsattr; 1360 size = sizeof(BOOL); 1361 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1362 strcpy(eos, "DetailsCRDate"); 1363 if (dcd) 1364 bool = &dcd -> detailscrdate; 1365 else 1366 bool = &detailscrdate; 1367 *bool = detailscrdate; 1368 size = sizeof(BOOL); 1369 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1370 strcpy(eos, "DetailsCRTime"); 1371 if (dcd) 1372 bool = &dcd -> detailscrtime; 1373 else 1374 bool = &detailscrtime; 1375 *bool = detailscrtime; 1376 size = sizeof(BOOL); 1377 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1378 strcpy(eos, "DetailsLWDate"); 1379 if (dcd) 1380 bool = &dcd -> detailslwdate; 1381 else 1382 bool = &detailslwdate; 1383 *bool = detailslwdate; 1384 size = sizeof(BOOL); 1385 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1386 strcpy(eos, "DetailsLWTime"); 1387 if (dcd) 1388 bool = &dcd -> detailslwtime; 1389 else 1390 bool = &detailslwtime; 1391 *bool = detailslwtime; 1392 size = sizeof(BOOL); 1393 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1394 strcpy(eos, "DetailsLADate"); 1395 if (dcd) 1396 bool = &dcd -> detailsladate; 1397 else 1398 bool = &detailsladate; 1399 *bool = detailsladate; 1400 size = sizeof(BOOL); 1401 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1402 strcpy(eos, "DetailsLATime"); 1403 if (dcd) 1404 bool = &dcd -> detailslatime; 1405 else 1406 bool = &detailslatime; 1407 *bool = detailslatime; 1408 size = sizeof(BOOL); 1409 PrfQueryProfileData(fmprof, appname, s, (PVOID) bool, &size); 1410 } 1411 1412 HWND FindDirCnr(HWND hwndParent) 1413 { 1414 HWND found, hwndDir = (HWND) 0; 1415 HENUM henum; 1416 1417 henum = WinBeginEnumWindows(hwndParent); 1418 while ((found = WinGetNextWindow(henum)) != NULLHANDLE) 1419 { 1420 hwndDir = WinWindowFromID(found, FID_CLIENT); 1421 if (hwndDir) 1422 { 1423 hwndDir = WinWindowFromID(hwndDir, DIR_CNR); 1424 if (hwndDir) 1425 break; 1426 hwndDir = (HWND) 0; 1427 } 1428 } 1429 WinEndEnumWindows(henum); 1430 1431 return hwndDir; 1432 } 1433 1434 VOID HeapThread(VOID * dummy) 1435 { 1436 ULONG postcount; 1437 1438 if (!DosCreateEventSem(NULL, &CompactSem, 0L, FALSE)) 1439 { 1440 priority_normal(); 1441 for (;;) 1442 { 1443 if (DosWaitEventSem(CompactSem, SEM_INDEFINITE_WAIT)) 1444 break; 1445 _heapmin(); 1446 DosResetEventSem(CompactSem, &postcount); 1447 } 1448 } 1449 else 1450 { 1451 DosBeep(250, 100); 1452 DosBeep(1000, 100); 1453 DosBeep(500, 100); 1411 1454 // DosExit(EXIT_PROCESS,1); 1412 } 1413 } 1414 1415 1416 VOID FixSwitchList (HWND hwnd,CHAR *text) { 1417 1418 HSWITCH hswitch; 1419 SWCNTRL swctl; 1420 1421 hswitch = WinQuerySwitchHandle(hwnd,0); 1422 if(hswitch) { 1423 if(!WinQuerySwitchEntry(hswitch,&swctl)) { 1424 strcpy(swctl.szSwtitle,"FM/2"); 1425 WinChangeSwitchEntry(hswitch,&swctl); 1426 } 1427 } 1428 } 1429 1430 1431 VOID QuickPopup (HWND hwnd,DIRCNRDATA *dcd,HWND hwndMenu,USHORT id) { 1432 1433 dcd->hwndLastMenu = hwndMenu; 1434 if(dcd->hwndLastMenu && !dcd->cnremphasized) { 1435 WinSendMsg(hwnd,CM_SETRECORDEMPHASIS,MPVOID, 1436 MPFROM2SHORT(TRUE,CRA_SOURCE)); 1437 dcd->cnremphasized = TRUE; 1438 } 1439 if(dcd->flWindowAttr & CV_MINI) 1440 WinCheckMenuItem(dcd->hwndLastMenu,IDM_MINIICONS,TRUE); 1441 if(!WinPopupMenu(hwnd,hwnd,dcd->hwndLastMenu, 1442 8, 8, 0, 1443 PU_HCONSTRAIN | PU_VCONSTRAIN | 1444 PU_KEYBOARD | PU_MOUSEBUTTON1)) { 1445 if(dcd->cnremphasized) { 1446 WinSendMsg(hwnd,CM_SETRECORDEMPHASIS,MPVOID, 1447 MPFROM2SHORT(FALSE,CRA_SOURCE)); 1448 dcd->cnremphasized = FALSE; 1449 } 1450 } 1451 else 1452 WinSendMsg(dcd->hwndLastMenu,MM_SELECTITEM, 1453 MPFROM2SHORT(id,TRUE), 1454 MPFROM2SHORT(0,FALSE)); 1455 } 1456 1457 1458 PMINIRECORDCORE CurrentRecord (HWND hwndCnr) { 1459 1460 SHORT attrib = (fSelectedAlways) ? CRA_SELECTED : CRA_CURSORED; 1461 PMINIRECORDCORE pmi; 1462 1463 for(;;) { 1464 pmi = (PMINIRECORDCORE)WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS, 1465 MPFROMLONG(CMA_FIRST), 1466 MPFROMSHORT(attrib)); 1467 if((!pmi || (INT)pmi == -1) && attrib == CRA_SELECTED) /* punt */ 1468 attrib = CRA_CURSORED; 1455 } 1456 } 1457 1458 VOID FixSwitchList(HWND hwnd, CHAR * text) 1459 { 1460 HSWITCH hswitch; 1461 SWCNTRL swctl; 1462 1463 hswitch = WinQuerySwitchHandle(hwnd, 0); 1464 if (hswitch) 1465 { 1466 if (!WinQuerySwitchEntry(hswitch, &swctl)) 1467 { 1468 strcpy(swctl.szSwtitle, "FM/2"); 1469 WinChangeSwitchEntry(hswitch, &swctl); 1470 } 1471 } 1472 } 1473 1474 VOID QuickPopup(HWND hwnd, DIRCNRDATA * dcd, HWND hwndMenu, USHORT id) 1475 { 1476 dcd -> hwndLastMenu = hwndMenu; 1477 if (dcd -> hwndLastMenu && !dcd -> cnremphasized) 1478 { 1479 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPVOID, 1480 MPFROM2SHORT(TRUE, CRA_SOURCE)); 1481 dcd -> cnremphasized = TRUE; 1482 } 1483 if (dcd -> flWindowAttr & CV_MINI) 1484 WinCheckMenuItem(dcd -> hwndLastMenu, IDM_MINIICONS, TRUE); 1485 if (!WinPopupMenu(hwnd, hwnd, dcd -> hwndLastMenu, 1486 8, 8, 0, 1487 PU_HCONSTRAIN | PU_VCONSTRAIN | 1488 PU_KEYBOARD | PU_MOUSEBUTTON1)) 1489 { 1490 if (dcd -> cnremphasized) 1491 { 1492 WinSendMsg(hwnd, CM_SETRECORDEMPHASIS, MPVOID, 1493 MPFROM2SHORT(FALSE, CRA_SOURCE)); 1494 dcd -> cnremphasized = FALSE; 1495 } 1496 } 1469 1497 else 1470 break; 1471 } 1472 return ((INT)pmi == -1) ? NULL : pmi; 1473 } 1474 1475 1476 BOOL PostMsg (HWND h, ULONG msg, MPARAM mp1, MPARAM mp2) { 1477 1478 BOOL rc = WinPostMsg(h,msg,mp1,mp2); 1479 1480 if(!rc) { 1481 1482 PIB *ppib; 1483 TIB *ptib; 1484 1485 if(!DosGetInfoBlocks(&ptib,&ppib)) { 1486 1487 PID pid; 1488 TID tid; 1489 QMSG qmsg; 1490 1491 if(WinQueryWindowProcess(h,&pid,&tid)) { 1492 if(pid != ppib->pib_ulpid || tid != ptib->tib_ptib2->tib2_ultid) { 1493 for(;;) { 1494 DosSleep(1L); 1495 rc = WinPostMsg(h,msg,mp1,mp2); 1496 if(!rc) { 1497 if(!WinIsWindow((HAB)0,h)) 1498 break; 1499 if(WinPeekMsg((HAB)0,&qmsg,(HWND)0,0,0,PM_NOREMOVE)) 1500 break; 1501 } 1502 else 1503 break; 1504 } 1505 } 1506 } 1507 } 1508 } 1509 return rc; 1510 } 1511 1512 1513 VOID OpenEdit (HWND hwnd) { 1514 1515 CNREDITDATA ced; 1516 PCNRITEM pci; 1517 PFIELDINFO pfi; 1518 1519 pci = (PCNRITEM)WinSendMsg(hwnd, 1520 CM_QUERYRECORDEMPHASIS, 1521 MPFROMLONG(CMA_FIRST), 1522 MPFROMSHORT(CRA_CURSORED)); 1523 if(pci && (INT)pci != -1) { 1524 memset(&ced,0,sizeof(ced)); 1525 ced.cb = sizeof(ced); 1526 ced.hwndCnr = hwnd; 1527 ced.id = WinQueryWindowUShort(hwnd,QWS_ID); 1528 ced.pRecord = (PRECORDCORE)pci; 1529 pfi = (PFIELDINFO)WinSendMsg(hwnd, 1530 CM_QUERYDETAILFIELDINFO, 1531 MPVOID, 1532 MPFROMSHORT(CMA_FIRST)); 1533 if(!pfi) 1534 WinSendMsg(hwnd, 1535 CM_OPENEDIT, 1536 MPFROMP(&ced), 1537 MPVOID); 1538 else { 1539 while(pfi && (INT)pfi != -1 && 1540 pfi->offStruct != FIELDOFFSET(CNRITEM,pszFileName)) 1541 pfi = (PFIELDINFO)WinSendMsg(hwnd, 1542 CM_QUERYDETAILFIELDINFO, 1543 MPFROMP(pfi), 1544 MPFROMSHORT(CMA_NEXT)); 1545 if(pfi && (INT)pfi != -1) { 1546 ced.pFieldInfo = pfi; 1547 { 1548 CNRINFO cnri; 1549 1550 memset(&cnri,0,sizeof(CNRINFO)); 1551 cnri.cb = sizeof(CNRINFO); 1552 WinSendMsg(hwnd, 1553 CM_QUERYCNRINFO, 1554 MPFROMP(&cnri), 1555 MPFROMLONG(sizeof(CNRINFO))); 1556 if(cnri.flWindowAttr & CV_DETAIL) 1557 ced.id = CID_LEFTDVWND; 1558 } 1559 WinSendMsg(hwnd, 1560 CM_OPENEDIT, 1561 MPFROMP(&ced), 1562 MPVOID); 1563 } 1564 } 1565 } 1566 } 1567 1498 WinSendMsg(dcd -> hwndLastMenu, MM_SELECTITEM, 1499 MPFROM2SHORT(id, TRUE), 1500 MPFROM2SHORT(0, FALSE)); 1501 } 1502 1503 PMINIRECORDCORE CurrentRecord(HWND hwndCnr) 1504 { 1505 SHORT attrib = (fSelectedAlways) ? CRA_SELECTED : CRA_CURSORED; 1506 PMINIRECORDCORE pmi; 1507 1508 for (;;) 1509 { 1510 pmi = (PMINIRECORDCORE) WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS, 1511 MPFROMLONG(CMA_FIRST), 1512 MPFROMSHORT(attrib)); 1513 if ((!pmi || (INT) pmi == -1) && attrib == CRA_SELECTED) /* punt */ 1514 attrib = CRA_CURSORED; 1515 else 1516 break; 1517 } 1518 return ((INT) pmi == -1) ? NULL : pmi; 1519 } 1520 1521 BOOL PostMsg(HWND h, ULONG msg, MPARAM mp1, MPARAM mp2) 1522 { 1523 BOOL rc = WinPostMsg(h, msg, mp1, mp2); 1524 1525 if (!rc) 1526 { 1527 1528 PIB *ppib; 1529 TIB *ptib; 1530 1531 if (!DosGetInfoBlocks(&ptib, &ppib)) 1532 { 1533 1534 PID pid; 1535 TID tid; 1536 QMSG qmsg; 1537 1538 if (WinQueryWindowProcess(h, &pid, &tid)) 1539 { 1540 if (pid != ppib -> pib_ulpid || tid != ptib -> tib_ptib2 -> tib2_ultid) 1541 { 1542 for (;;) 1543 { 1544 DosSleep(1L); 1545 rc = WinPostMsg(h, msg, mp1, mp2); 1546 if (!rc) 1547 { 1548 if (!WinIsWindow((HAB) 0, h)) 1549 break; 1550 if (WinPeekMsg((HAB) 0, &qmsg, (HWND) 0, 0, 0, PM_NOREMOVE)) 1551 break; 1552 } 1553 else 1554 break; 1555 } 1556 } 1557 } 1558 } 1559 } 1560 return rc; 1561 } 1562 1563 VOID OpenEdit(HWND hwnd) 1564 { 1565 CNREDITDATA ced; 1566 PCNRITEM pci; 1567 PFIELDINFO pfi; 1568 1569 pci = (PCNRITEM) WinSendMsg(hwnd, 1570 CM_QUERYRECORDEMPHASIS, 1571 MPFROMLONG(CMA_FIRST), 1572 MPFROMSHORT(CRA_CURSORED)); 1573 if (pci && (INT) pci != -1) 1574 { 1575 memset(&ced, 0, sizeof(ced)); 1576 ced.cb = sizeof(ced); 1577 ced.hwndCnr = hwnd; 1578 ced.id = WinQueryWindowUShort(hwnd, QWS_ID); 1579 ced.pRecord = (PRECORDCORE) pci; 1580 pfi = (PFIELDINFO) WinSendMsg(hwnd, 1581 CM_QUERYDETAILFIELDINFO, 1582 MPVOID, 1583 MPFROMSHORT(CMA_FIRST)); 1584 if (!pfi) 1585 WinSendMsg(hwnd, 1586 CM_OPENEDIT, 1587 MPFROMP(&ced), 1588 MPVOID); 1589 else 1590 { 1591 while (pfi && (INT) pfi != -1 && 1592 pfi -> offStruct != FIELDOFFSET(CNRITEM, pszFileName)) 1593 pfi = (PFIELDINFO) WinSendMsg(hwnd, 1594 CM_QUERYDETAILFIELDINFO, 1595 MPFROMP(pfi), 1596 MPFROMSHORT(CMA_NEXT)); 1597 if (pfi && (INT) pfi != -1) 1598 { 1599 ced.pFieldInfo = pfi; 1600 { 1601 CNRINFO cnri; 1602 1603 memset(&cnri, 0, sizeof(CNRINFO)); 1604 cnri.cb = sizeof(CNRINFO); 1605 WinSendMsg(hwnd, 1606 CM_QUERYCNRINFO, 1607 MPFROMP(&cnri), 1608 MPFROMLONG(sizeof(CNRINFO))); 1609 if (cnri.flWindowAttr & CV_DETAIL) 1610 ced.id = CID_LEFTDVWND; 1611 } 1612 WinSendMsg(hwnd, 1613 CM_OPENEDIT, 1614 MPFROMP(&ced), 1615 MPVOID); 1616 } 1617 } 1618 } 1619 } 1568 1620 1569 1621 #ifdef NEVER 1570 1571 VOID QuickView (HWND hwnd,CHAR *filename) { 1572 1573 if(filename && IsFile(filename) == 1) { 1574 if(TestBinary(filename) && *binview) { 1575 1576 CHAR *list[2]; 1577 1578 list[0] = filename; 1579 list[1] = NULL; 1580 ExecOnList(hwnd,binview,WINDOWED | SEPARATE,NULL,list,NULL); 1581 return; 1582 } 1583 else if(*viewer) { 1584 1585 CHAR *list[2]; 1586 1587 list[0] = filename; 1588 list[1] = NULL; 1589 ExecOnList(hwnd,viewer,WINDOWED | SEPARATE | 1590 ((fViewChild) ? CHILD : 0), 1591 NULL,list,NULL); 1592 return; 1593 } 1594 StartMLEEditor(HWND_DESKTOP,5,filename,(HWND)0); 1595 } 1596 } 1597 1598 1599 VOID QuickEdit (HWND hwnd,CHAR *filename) { 1600 1601 if(filename && IsFile(filename) == 1) { 1602 if(TestBinary(filename) && *bined) { 1603 1604 CHAR *list[2]; 1605 1606 list[0] = filename; 1607 list[1] = NULL; 1608 ExecOnList(hwnd,bined,WINDOWED | SEPARATE,NULL,list,NULL); 1609 return; 1610 } 1611 else if(*editor) { 1612 1613 CHAR *list[2]; 1614 1615 list[0] = filename; 1616 list[1] = NULL; 1617 ExecOnList(hwnd,editor,WINDOWED | SEPARATE,NULL,list,NULL); 1618 return; 1619 } 1620 StartMLEEditor(HWND_DESKTOP,4,filename,(HWND)0); 1621 } 1622 } 1623 1622 VOID QuickView(HWND hwnd, CHAR * filename) 1623 { 1624 if (filename && IsFile(filename) == 1) 1625 { 1626 if (TestBinary(filename) && *binview) 1627 { 1628 1629 CHAR *list[2]; 1630 1631 list[0] = filename; 1632 list[1] = NULL; 1633 ExecOnList(hwnd, binview, WINDOWED | SEPARATE, NULL, list, NULL); 1634 return; 1635 } 1636 else if (*viewer) 1637 { 1638 1639 CHAR *list[2]; 1640 1641 list[0] = filename; 1642 list[1] = NULL; 1643 ExecOnList(hwnd, viewer, WINDOWED | SEPARATE | 1644 ((fViewChild) ? CHILD : 0), 1645 NULL, list, NULL); 1646 return; 1647 } 1648 StartMLEEditor(HWND_DESKTOP, 5, filename, (HWND) 0); 1649 } 1650 } 1651 1652 VOID QuickEdit(HWND hwnd, CHAR * filename) 1653 { 1654 if (filename && IsFile(filename) == 1) 1655 { 1656 if (TestBinary(filename) && *bined) 1657 { 1658 1659 CHAR *list[2]; 1660 1661 list[0] = filename; 1662 list[1] = NULL; 1663 ExecOnList(hwnd, bined, WINDOWED | SEPARATE, NULL, list, NULL); 1664 return; 1665 } 1666 else if (*editor) 1667 { 1668 1669 CHAR *list[2]; 1670 1671 list[0] = filename; 1672 list[1] = NULL; 1673 ExecOnList(hwnd, editor, WINDOWED | SEPARATE, NULL, list, NULL); 1674 return; 1675 } 1676 StartMLEEditor(HWND_DESKTOP, 4, filename, (HWND) 0); 1677 } 1678 } 1624 1679 #endif 1625 1680 1626 1627 VOID PortholeInit (HWND hwndNew,MPARAM mp1,MPARAM mp2){1628 1629 static HWND DefMenu = (HWND)0;1630 HWND hwndMenu = (HWND)mp2; 1631 1632 { 1633 ULONG style; 1634 1635 style = WinQueryWindowULong(hwndMenu,QWL_STYLE); 1636 if(!(style & MS_ACTIONBAR)) 1637 return;1638 } 1639 1640 switch(SHORT1FROMMP(mp1)){1681 VOID PortholeInit(HWND hwndNew, MPARAM mp1, MPARAM mp2) 1682 { 1683 static HWND DefMenu = (HWND) 0; 1684 HWND hwndMenu = (HWND) mp2; 1685 1686 { 1687 ULONG style; 1688 1689 style = WinQueryWindowULong(hwndMenu, QWL_STYLE); 1690 if (!(style & MS_ACTIONBAR)) 1691 return; 1692 } 1693 1694 switch (SHORT1FROMMP(mp1)) 1695 { 1641 1696 case 0: 1642 1643 HWNDhwndNow;1644 1645 ULONGulStyle;1646 1647 memset(&mi,0,sizeof(mi));1648 1649 1650 WinSendMsg(hwndMenu,MM_QUERYITEM,1651 MPFROM2SHORT(IDM_FILESMENU,TRUE),MPFROMP(&mi));1652 if(!DefMenu)1653 DefMenu = WinLoadMenu(HWND_DESKTOP,FM3ModHandle,DEFMENU);1654 1655 1656 if(!mi.hwndSubMenu)1657 1658 WinSetParent(hwndNow,WinQueryObjectWindow(HWND_DESKTOP),FALSE);1659 WinSetOwner(hwndNow,WinQueryObjectWindow(HWND_DESKTOP));1660 WinSetOwner(mi.hwndSubMenu,hwndMenu);1661 WinSetParent(mi.hwndSubMenu,hwndMenu,FALSE);1662 WinSetWindowUShort(mi.hwndSubMenu,QWS_ID,IDM_FILESMENU);1663 1664 ulStyle = WinQueryWindowULong(mi.hwndSubMenu,QWL_STYLE);1665 1666 1667 WinSetWindowULong(mi.hwndSubMenu,QWL_STYLE,ulStyle);1668 WinSendMsg(hwndMenu,MM_SETITEM,MPFROM2SHORT(0,TRUE),MPFROMP(&mi));1669 1670 1697 { 1698 HWND hwndNow; 1699 MENUITEM mi; 1700 ULONG ulStyle; 1701 1702 memset(&mi, 0, sizeof(mi)); 1703 mi.iPosition = MIT_END; 1704 mi.afStyle = MIS_TEXT; 1705 WinSendMsg(hwndMenu, MM_QUERYITEM, 1706 MPFROM2SHORT(IDM_FILESMENU, TRUE), MPFROMP(&mi)); 1707 if (!DefMenu) 1708 DefMenu = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, DEFMENU); 1709 hwndNow = mi.hwndSubMenu; 1710 mi.hwndSubMenu = hwndNew; 1711 if (!mi.hwndSubMenu) 1712 mi.hwndSubMenu = DefMenu; 1713 WinSetParent(hwndNow, WinQueryObjectWindow(HWND_DESKTOP), FALSE); 1714 WinSetOwner(hwndNow, WinQueryObjectWindow(HWND_DESKTOP)); 1715 WinSetOwner(mi.hwndSubMenu, hwndMenu); 1716 WinSetParent(mi.hwndSubMenu, hwndMenu, FALSE); 1717 WinSetWindowUShort(mi.hwndSubMenu, QWS_ID, IDM_FILESMENU); 1718 mi.afStyle = MIS_SUBMENU; 1719 ulStyle = WinQueryWindowULong(mi.hwndSubMenu, QWL_STYLE); 1720 ulStyle &= -WS_SAVEBITS; 1721 ulStyle |= MS_POPUP | WS_CLIPSIBLINGS | WS_SAVEBITS; 1722 WinSetWindowULong(mi.hwndSubMenu, QWL_STYLE, ulStyle); 1723 WinSendMsg(hwndMenu, MM_SETITEM, MPFROM2SHORT(0, TRUE), MPFROMP(&mi)); 1724 } 1725 break; 1671 1726 1672 1727 case 1: 1673 { 1674 HWND hwndNow; 1675 MENUITEM mi; 1676 ULONG ulStyle; 1677 1678 memset(&mi,0,sizeof(mi)); 1679 mi.iPosition = MIT_END; 1680 mi.afStyle = MIS_TEXT; 1681 WinSendMsg(hwndMenu,MM_QUERYITEM, 1682 MPFROM2SHORT(IDM_VIEWSMENU,TRUE),MPFROMP(&mi)); 1683 if(!DefMenu) 1684 DefMenu = WinLoadMenu(HWND_DESKTOP,FM3ModHandle,DEFMENU); 1685 hwndNow = mi.hwndSubMenu; 1686 mi.hwndSubMenu = hwndNew; 1687 if(!mi.hwndSubMenu) 1688 mi.hwndSubMenu = DefMenu; 1689 WinSetParent(hwndNow,WinQueryObjectWindow(HWND_DESKTOP),FALSE); 1690 WinSetOwner(hwndNow,WinQueryObjectWindow(HWND_DESKTOP)); 1691 WinSetOwner(mi.hwndSubMenu,hwndMenu); 1692 WinSetParent(mi.hwndSubMenu,hwndMenu,FALSE); 1693 WinSetWindowUShort(mi.hwndSubMenu,QWS_ID,IDM_VIEWSMENU); 1694 mi.afStyle = MIS_SUBMENU; 1695 ulStyle = WinQueryWindowULong(mi.hwndSubMenu,QWL_STYLE); 1696 ulStyle &= -WS_SAVEBITS; 1697 ulStyle |= MS_POPUP | WS_CLIPSIBLINGS | WS_SAVEBITS; 1698 WinSetWindowULong(mi.hwndSubMenu,QWL_STYLE,ulStyle); 1699 WinSendMsg(hwndMenu,MM_SETITEM,MPFROM2SHORT(0,TRUE),MPFROMP(&mi)); 1700 } 1701 break; 1702 } 1703 } 1704 1705 1706 HWND CheckMenu (HWND *hwndMenu,USHORT id) { 1707 1708 /* load and adjust menus as required */ 1709 1710 if(!*hwndMenu || !WinIsWindow((HAB)0,*hwndMenu)) { 1711 *hwndMenu = WinLoadMenu(HWND_DESKTOP,FM3ModHandle,id); 1712 if(hwndMenu == &DirMenu) { 1713 WinSetWindowUShort(DirMenu,QWS_ID,IDM_FILESMENU); 1714 SetConditionalCascade(DirMenu,IDM_COMMANDSMENU,IDM_DOITYOURSELF); 1715 SetConditionalCascade(DirMenu,IDM_COPYMENU,IDM_COPY); 1716 SetConditionalCascade(DirMenu,IDM_MOVEMENU,IDM_MOVE); 1717 SetConditionalCascade(DirMenu,IDM_SAVESUBMENU,IDM_SAVETOCLIP); 1718 SetConditionalCascade(DirMenu,IDM_VIEWSUBMENU,IDM_INFO); 1719 SetConditionalCascade(DirMenu,IDM_EDITSUBMENU,IDM_ATTRS); 1720 SetConditionalCascade(DirMenu,IDM_DELETESUBMENU,(fDefaultDeletePerm) ? 1721 IDM_PERMDELETE : 1722 IDM_DELETE); 1723 SetConditionalCascade(DirMenu,IDM_MISCSUBMENU,IDM_SIZES); 1724 SetConditionalCascade(DirMenu,IDM_OPENSUBMENU,IDM_OPENWINDOW); 1725 if(fWorkPlace) { 1726 WinSendMsg(DirMenu,MM_DELETEITEM, 1727 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID); 1728 WinSendMsg(DirMenu,MM_DELETEITEM, 1729 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID); 1730 } 1731 } 1732 else if(hwndMenu == &TreeMenu) { 1733 WinSetWindowUShort(TreeMenu,QWS_ID,IDM_FILESMENU); 1734 SetConditionalCascade(TreeMenu,IDM_COMMANDSMENU,IDM_DOITYOURSELF); 1735 SetConditionalCascade(TreeMenu,IDM_SAVESUBMENU,IDM_SAVETOCLIP); 1736 SetConditionalCascade(TreeMenu,IDM_EDITSUBMENU,IDM_ATTRS); 1737 SetConditionalCascade(TreeMenu,IDM_EXPANDSUBMENU,IDM_EXPAND); 1738 SetConditionalCascade(TreeMenu,IDM_MISCSUBMENU,IDM_SIZES); 1739 SetConditionalCascade(TreeMenu,IDM_OPENSUBMENU,IDM_OPENWINDOW); 1740 if(fWorkPlace) { 1741 WinSendMsg(TreeMenu,MM_DELETEITEM, 1742 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID); 1743 WinSendMsg(TreeMenu,MM_DELETEITEM, 1744 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID); 1745 } 1746 } 1747 else if(hwndMenu == &ArcMenu) { 1748 WinSetWindowUShort(ArcMenu,QWS_ID,IDM_FILESMENU); 1749 SetConditionalCascade(ArcMenu,IDM_EXTRACTSUBMENU,IDM_EXTRACT); 1750 SetConditionalCascade(ArcMenu,IDM_EDITSUBMENU,IDM_EDIT); 1751 SetConditionalCascade(ArcMenu,IDM_VIEWSUBMENU,IDM_VIEW); 1752 if(fWorkPlace) 1753 WinSendMsg(ArcMenu,MM_DELETEITEM, 1754 MPFROM2SHORT(IDM_FOLDERAFTEREXTRACT,TRUE),MPVOID); 1755 } 1756 else if(hwndMenu == &FileMenu) { 1757 WinSetWindowUShort(FileMenu,QWS_ID,IDM_FILESMENU); 1758 SetConditionalCascade(FileMenu,IDM_COMMANDSMENU,IDM_DOITYOURSELF); 1759 SetConditionalCascade(FileMenu,IDM_COPYMENU,IDM_COPY); 1760 SetConditionalCascade(FileMenu,IDM_MOVEMENU,IDM_MOVE); 1761 SetConditionalCascade(FileMenu,IDM_SAVESUBMENU,IDM_SAVETOCLIP); 1762 SetConditionalCascade(FileMenu,IDM_VIEWSUBMENU,IDM_VIEW); 1763 SetConditionalCascade(FileMenu,IDM_EDITSUBMENU,IDM_EDIT); 1764 SetConditionalCascade(FileMenu,IDM_COLLECTMENU,IDM_COLLECT); 1765 SetConditionalCascade(FileMenu,IDM_DELETESUBMENU,(fDefaultDeletePerm) ? 1766 IDM_PERMDELETE : 1767 IDM_DELETE); 1768 SetConditionalCascade(FileMenu,IDM_OPENSUBMENU,IDM_OPENDEFAULT); 1769 SetConditionalCascade(FileMenu,IDM_OBJECTSUBMENU,IDM_SHADOW); 1770 if(fWorkPlace) { 1771 WinSendMsg(FileMenu,MM_DELETEITEM, 1772 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID); 1773 WinSendMsg(FileMenu,MM_DELETEITEM, 1774 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID); 1775 } 1776 } 1777 else if(hwndMenu == &DirCnrMenu) { 1778 WinSetWindowUShort(DirCnrMenu,QWS_ID,IDM_VIEWSMENU); 1779 SetConditionalCascade(DirCnrMenu,IDM_MISCSUBMENU,IDM_SIZES); 1780 SetConditionalCascade(DirCnrMenu,IDM_OPENSUBMENU,IDM_OPENSETTINGSME); 1781 if(fWorkPlace) 1782 WinSendMsg(DirCnrMenu,MM_DELETEITEM, 1783 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID); 1784 } 1785 else if(hwndMenu == &TreeCnrMenu) 1786 WinSetWindowUShort(TreeCnrMenu,QWS_ID,IDM_VIEWSMENU); 1787 else if(hwndMenu == &ArcCnrMenu) { 1788 WinSetWindowUShort(ArcCnrMenu,QWS_ID,IDM_VIEWSMENU); 1789 SetConditionalCascade(ArcCnrMenu,IDM_EXTRACTSUBMENU,IDM_ARCEXTRACT); 1790 if(fWorkPlace) 1791 WinSendMsg(ArcCnrMenu,MM_DELETEITEM, 1792 MPFROM2SHORT(IDM_FOLDERAFTEREXTRACT,TRUE),MPVOID); 1793 } 1794 else if(hwndMenu == &CollectorCnrMenu) { 1795 WinSetWindowUShort(CollectorCnrMenu,QWS_ID,IDM_VIEWSMENU); 1796 SetConditionalCascade(CollectorCnrMenu,IDM_COLLECTMENU, 1797 IDM_COLLECTFROMCLIP); 1798 } 1799 else if(hwndMenu == &CollectorFileMenu) { 1800 WinSetWindowUShort(CollectorFileMenu,QWS_ID,IDM_FILESMENU); 1801 SetConditionalCascade(CollectorFileMenu,IDM_COMMANDSMENU, 1802 IDM_DOITYOURSELF); 1803 SetConditionalCascade(CollectorFileMenu,IDM_COPYMENU,IDM_COPY); 1804 SetConditionalCascade(CollectorFileMenu,IDM_MOVEMENU,IDM_MOVE); 1805 SetConditionalCascade(CollectorFileMenu,IDM_SAVESUBMENU,IDM_SAVETOCLIP); 1806 SetConditionalCascade(CollectorFileMenu,IDM_VIEWSUBMENU,IDM_VIEW); 1807 SetConditionalCascade(CollectorFileMenu,IDM_EDITSUBMENU,IDM_EDIT); 1808 SetConditionalCascade(CollectorFileMenu,IDM_DELETESUBMENU,(fDefaultDeletePerm) ? 1809 IDM_PERMDELETE : 1810 IDM_DELETE); 1811 SetConditionalCascade(CollectorFileMenu,IDM_OPENSUBMENU,IDM_OPENDEFAULT); 1812 SetConditionalCascade(CollectorFileMenu,IDM_OBJECTSUBMENU,IDM_SHADOW); 1813 if(fWorkPlace) { 1814 WinSendMsg(CollectorFileMenu,MM_DELETEITEM, 1815 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID); 1816 WinSendMsg(CollectorFileMenu,MM_DELETEITEM, 1817 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID); 1818 } 1819 } 1820 else if(hwndMenu == &CollectorDirMenu) { 1821 WinSetWindowUShort(CollectorDirMenu,QWS_ID,IDM_FILESMENU); 1822 SetConditionalCascade(CollectorDirMenu,IDM_COMMANDSMENU, 1823 IDM_DOITYOURSELF); 1824 SetConditionalCascade(CollectorDirMenu,IDM_COPYMENU,IDM_COPY); 1825 SetConditionalCascade(CollectorDirMenu,IDM_MOVEMENU,IDM_MOVE); 1826 SetConditionalCascade(CollectorDirMenu,IDM_SAVESUBMENU,IDM_SAVETOCLIP); 1827 SetConditionalCascade(CollectorDirMenu,IDM_VIEWSUBMENU,IDM_INFO); 1828 SetConditionalCascade(CollectorDirMenu,IDM_EDITSUBMENU,IDM_ATTRS); 1829 SetConditionalCascade(CollectorDirMenu,IDM_DELETESUBMENU,(fDefaultDeletePerm) ? 1830 IDM_PERMDELETE : 1831 IDM_DELETE); 1832 SetConditionalCascade(CollectorDirMenu,IDM_MISCSUBMENU,IDM_SIZES); 1833 SetConditionalCascade(CollectorDirMenu,IDM_OPENSUBMENU,IDM_OPENWINDOW); 1834 if(fWorkPlace) { 1835 WinSendMsg(CollectorDirMenu,MM_DELETEITEM, 1836 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID); 1837 WinSendMsg(CollectorDirMenu,MM_DELETEITEM, 1838 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID); 1839 } 1840 } 1841 else if(hwndMenu == &MainPopupMenu) { 1842 WinSetWindowUShort(MainPopupMenu,QWS_ID,IDM_MAINPOPUP); 1843 SetConditionalCascade(MainPopupMenu,IDM_TOOLSUBMENU,IDM_TOOLBAR); 1844 SetConditionalCascade(MainPopupMenu,IDM_AUTOVIEWSUBMENU,IDM_AUTOVIEW); 1845 } 1846 } 1847 return *hwndMenu; 1848 } 1849 1850 1851 SHORT AddToListboxBottom (HWND hwnd,CHAR *str) { 1852 1853 SHORT ln; 1854 1855 ln = (SHORT)WinSendMsg(hwnd,LM_INSERTITEM,MPFROM2SHORT(LIT_END,0), 1856 MPFROMP(str)); 1857 if(ln) 1858 WinSendMsg(hwnd,LM_SELECTITEM,MPFROM2SHORT(ln,0),MPVOID); 1859 return ln; 1860 } 1861 1862 1863 VOID SetSysMenu (HWND hwndSysMenu) { 1864 1865 CHAR s[128],*p; 1866 1867 if(WinSendMsg(hwndSysMenu,MM_QUERYITEMTEXT, 1868 MPFROM2SHORT(SC_RESTORE,128), 1869 MPFROMP(s))) { 1870 p = strchr(s,'\t'); 1871 if(p) { 1872 p++; 1873 strcpy(p,"Ctrl+Alt+F5"); 1874 WinSetMenuItemText(hwndSysMenu,SC_RESTORE,s); 1875 } 1876 } 1877 if(WinSendMsg(hwndSysMenu,MM_QUERYITEMTEXT, 1878 MPFROM2SHORT(SC_CLOSE,128), 1879 MPFROMP(s))) { 1880 p = strchr(s,'\t'); 1881 if(p) { 1882 p++; 1883 strcpy(p,"Ctrl+Alt+F4"); 1884 WinSetMenuItemText(hwndSysMenu,SC_CLOSE,s); 1885 } 1886 } 1887 if(WinSendMsg(hwndSysMenu,MM_QUERYITEMTEXT, 1888 MPFROM2SHORT(SC_MOVE,128), 1889 MPFROMP(s))) { 1890 p = strchr(s,'\t'); 1891 if(p) { 1892 p++; 1893 strcpy(p,"Ctrl+Alt+F7"); 1894 WinSetMenuItemText(hwndSysMenu,SC_MOVE,s); 1895 } 1896 } 1897 if(WinSendMsg(hwndSysMenu,MM_QUERYITEMTEXT, 1898 MPFROM2SHORT(SC_SIZE,128), 1899 MPFROMP(s))) { 1900 p = strchr(s,'\t'); 1901 if(p) { 1902 p++; 1903 strcpy(p,"Ctrl+Alt+F8"); 1904 WinSetMenuItemText(hwndSysMenu,SC_SIZE,s); 1905 } 1906 } 1907 if(WinSendMsg(hwndSysMenu,MM_QUERYITEMTEXT, 1908 MPFROM2SHORT(SC_MINIMIZE,128), 1909 MPFROMP(s))) { 1910 p = strchr(s,'\t'); 1911 if(p) { 1912 p++; 1913 strcpy(p,"Ctrl+Alt+F9"); 1914 WinSetMenuItemText(hwndSysMenu,SC_MINIMIZE,s); 1915 } 1916 } 1917 if(WinSendMsg(hwndSysMenu, 1918 MM_QUERYITEMTEXT, 1919 MPFROM2SHORT(SC_MAXIMIZE,128), 1920 MPFROMP(s))) { 1921 p = strchr(s,'\t'); 1922 if(p) { 1923 p++; 1924 strcpy(p,"Ctrl+Alt+F10"); 1925 WinSetMenuItemText(hwndSysMenu, 1926 SC_MAXIMIZE, 1927 s); 1928 } 1929 } 1930 if(WinSendMsg(hwndSysMenu, 1931 MM_QUERYITEMTEXT, 1932 MPFROM2SHORT(SC_HIDE,128), 1933 MPFROMP(s))) { 1934 p = strchr(s,'\t'); 1935 if(p) { 1936 p++; 1937 strcpy(p,"Ctrl+Alt+F11"); 1938 WinSetMenuItemText(hwndSysMenu,SC_HIDE,s); 1939 } 1940 } 1941 } 1942 1943 1944 VOID LoadLibPath (CHAR *str,LONG len) { 1945 1946 ULONG ver[2]; 1947 CHAR configsys[] = "C:\\CONFIG.SYS"; 1948 static CHAR var[8192],beg[16384],end[16384]; 1949 BOOL warp; 1950 FILE *fp; 1951 PFN DQELIBPATH = NULL; 1952 HMODULE hmod; 1953 1954 if(str && len) { 1955 *str = 0; 1956 if(DosQuerySysInfo(QSV_BOOT_DRIVE, 1957 QSV_BOOT_DRIVE, 1958 (PVOID)ver, 1959 (ULONG)sizeof(ULONG))) 1960 ver[0] = 3L; 1961 *configsys = (CHAR)ver[0] + '@'; 1962 if(!DosQuerySysInfo(QSV_VERSION_MAJOR, 1963 QSV_VERSION_MINOR, 1964 (PVOID)ver,(ULONG)sizeof(ver)) && 1965 ver[1] >= 30) 1966 warp = TRUE; 1967 *var = *beg = *end = 0; 1968 if(warp) { 1969 if(!DosLoadModule(var, 1970 sizeof(var), 1971 "DOSCALL1.DLL",&hmod)) { 1972 if(!DosQueryProcAddr(hmod, 1973 ORD_DOS32QUERYEXTLIBPATH, 1974 NULL, 1975 (PFN *)&DQELIBPATH)) { 1976 DQELIBPATH(beg,BEGIN_LIBPATH); 1977 DQELIBPATH(end,END_LIBPATH); 1978 } 1979 DosFreeModule(hmod); 1980 } 1981 *var = 0; 1982 } 1983 fp = fopen(configsys,"r"); 1984 if(fp) { 1985 while(!feof(fp)) { 1986 if(!fgets(var,8192,fp)) 1987 break; 1988 var[8191] = 0; 1989 bstripcr(var); 1990 if(!strnicmp(var,"LIBPATH=",8)) { 1991 memmove(var,var + 8,strlen(var + 8) + 1); 1992 lstrip(var); 1993 break; 1994 } 1995 } 1996 fclose(fp); 1997 } 1998 strncpy(str,beg,len); 1999 strncat(str,var,len - strlen(str)); 2000 strncat(str,end,len - strlen(str)); 2001 str[len - 1] = 0; 2002 } 2003 } 2004 2005 2006 void SetViewMenu (HWND hwndMenu, ULONG flWindowAttr) { 2007 2008 WinCheckMenuItem(hwndMenu,IDM_MINIICONS,((flWindowAttr & CV_MINI))); 2009 WinCheckMenuItem(hwndMenu,IDM_TEXT,((flWindowAttr & CV_TEXT))); 2010 WinCheckMenuItem(hwndMenu,IDM_ICON,((flWindowAttr & CV_ICON) && 2011 !(flWindowAttr & CV_TREE))); 2012 WinCheckMenuItem(hwndMenu,IDM_TREEVIEW,((flWindowAttr & CV_TREE))); 2013 WinCheckMenuItem(hwndMenu,IDM_DETAILS,((flWindowAttr & CV_DETAIL))); 2014 WinCheckMenuItem(hwndMenu,IDM_NAME,((flWindowAttr & CV_NAME))); 2015 } 2016 2017 2018 void SaySort (HWND hwnd, INT sortflags, BOOL archive) { 2019 2020 char *s = NULL; 2021 2022 s = malloc(CCHMAXPATH); 2023 if(s) { 2024 sprintf(s,"S:%s%s", 2025 (sortflags & SORT_REVERSE) ? "^" : NullStr, 2026 (sortflags & SORT_FIRSTEXTENSION) ? GetPString(IDS_FIRSTX) : 2027 (sortflags & SORT_LASTEXTENSION) ? GetPString(IDS_LASTX) : 2028 (sortflags & SORT_SIZE) ? "Size" : 2029 (sortflags & SORT_EASIZE) ? (archive == 0) ? GetPString(IDS_EASIZE) : GetPString(IDS_CSIZE) : 2030 (sortflags & SORT_LWDATE) ? (archive == 0) ? GetPString(IDS_LWDATE) : GetPString(IDS_DATE) : 2031 (sortflags & SORT_LADATE) ? GetPString(IDS_LADATE) : 2032 (sortflags & SORT_CRDATE) ? GetPString(IDS_CRDATE) : 2033 (sortflags & SORT_PATHNAME) ? GetPString(IDS_PATH) : 2034 (sortflags & SORT_NOSORT) ? GetPString(IDS_NONE) : 2035 (sortflags & SORT_SUBJECT) ? GetPString(IDS_SUBJ) : 2036 GetPString(IDS_NAME)); 2037 WinSetWindowText(hwnd,s); 2038 free(s); 2039 } 2040 } 2041 2042 void SayView (HWND hwnd,ULONG flWindowAttr) { 2043 2044 char *s = NULL; 2045 2046 s = malloc(CCHMAXPATH); 2047 if(s) { 2048 sprintf(s,"V:%s%s", 2049 (flWindowAttr & CV_TREE) ? GetPString(IDS_TREE) : 2050 (flWindowAttr & CV_NAME) ? GetPString(IDS_NAME) : 2051 (flWindowAttr & CV_DETAIL) ? GetPString(IDS_DETAIL) : 2052 (flWindowAttr & CV_TEXT) ? GetPString(IDS_TEXT) : 2053 GetPString(IDS_ICON), 2054 ((flWindowAttr & CV_MINI) && 2055 !(flWindowAttr & CV_TEXT)) ? GetPString(IDS_MINI) : NullStr); 2056 WinSetWindowText(hwnd,s); 2057 free(s); 2058 } 2059 } 2060 2061 void SayFilter (HWND hwnd, MASK *mask, BOOL archive) { 2062 2063 char *s = NULL; 2064 2065 s = malloc(CCHMAXPATH * 2); 2066 if(s) { 2067 sprintf(s,"F:%s%s", 2068 mask->szMask, 2069 (!archive && (mask->attrFile != ALLATTRS || 2070 mask->antiattr != 0)) ? " " : NullStr, 2071 (!archive && (mask->attrFile != ALLATTRS || 2072 mask->antiattr != 0)) ? GetPString(IDS_ATTRTEXT) : NullStr); 2073 if(!s[2]) 2074 sprintf(s,"F:%s",GetPString(IDS_ALLTEXT)); 2075 WinSetWindowText(hwnd,s); 2076 free(s); 2077 } 2078 } 2079 2080 2081 char *GetCmdSpec (BOOL dos) { 2082 2083 char *cmspec; 2084 2085 if(!dos) { 2086 cmspec = getenv("OS2_SHELL"); 2087 if(!cmspec) 2088 cmspec = getenv("COMSPEC"); 2089 if(!cmspec) 2090 cmspec = "CMD.EXE"; 2091 } 2092 else { 2093 cmspec = getenv("DOS_SHELL"); 2094 if(!cmspec) 2095 cmspec = "COMMAND.COM"; 2096 } 2097 return cmspec; 2098 } 2099 2100 2101 void Broadcast (HAB hab,HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { 2102 2103 if(hwndMain) 2104 WinBroadcastMsg(hwndMain, 2105 msg, 2106 mp1, 2107 mp2, 2108 BMSG_SEND | BMSG_FRAMEONLY); 2109 if(hwnd && 2110 hwnd != HWND_DESKTOP && 2111 hwnd != hwndMain && 2112 hwnd != WinQueryDesktopWindow(hab,NULLHANDLE) && 2113 WinIsWindow(hab,hwnd) && 2114 (!hwndMain || 2115 !WinIsChild(hwnd,hwndMain))) 2116 WinSendMsg(hwnd, 2117 msg, 2118 mp1, 2119 mp2); 2120 } 2121 2122 2123 void SetupWinList (HWND hwndMenu,HWND hwndTop,HWND hwndFrame) { 2124 2125 /* 2126 * add switchlist entries to end of pulldown menu 2127 */ 2128 2129 SHORT sItemCount,x = 0,y = 0; 2130 MENUITEM mi; 2131 2132 sItemCount = (SHORT)WinSendMsg(hwndMenu, 2133 MM_QUERYITEMCOUNT, 2134 MPVOID, 2135 MPVOID); 2136 2137 /* clean out old additions */ 2138 while((SHORT)WinSendMsg(hwndMenu, 2139 MM_DELETEITEM, 2140 MPFROM2SHORT(IDM_SWITCHSTART + x++, 2141 TRUE), 2142 MPVOID) < sItemCount) 2143 sItemCount--; 2144 x = 0; 2145 while((SHORT)WinSendMsg(hwndMenu, 2146 MM_DELETEITEM, 2147 MPFROM2SHORT(IDM_WINDOWSTART + x++, 2148 TRUE), 2149 MPVOID) < sItemCount) 2150 sItemCount--; 2151 2152 x = 0; 2153 if(hwndTop) { 2154 2155 char wtext[CCHMAXPATH + 8]; 2156 HENUM henum; 2157 HWND hwndChild; 2158 2159 /* add children of the main FM/2 client */ 2160 henum = WinBeginEnumWindows(hwndTop); 2161 memset(&mi,0,sizeof(mi)); 2162 while((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE) { 2163 if(WinQueryWindowUShort(hwndChild,QWS_ID) && 2164 hwndChild != hwndFrame) { 2165 *wtext = 0; 2166 WinQueryWindowText(hwndChild, 2167 CCHMAXPATH + 8, 2168 wtext); 2169 if(*wtext) { 2170 wtext[CCHMAXPATH + 7] = 0; 2171 mi.afStyle = MIS_TEXT; 2172 if(!((x + sItemCount) % 28)) 2173 mi.afStyle |= MIS_BREAK; 2174 mi.id = IDM_WINDOWSTART + x; 2175 mi.iPosition = MIT_END; 2176 if((SHORT)WinSendMsg(hwndMenu, 2177 MM_INSERTITEM, 2178 MPFROMP(&mi), 2179 MPFROMP(wtext)) >= 0) 2180 x++; 2181 } 2182 } 2183 } 2184 WinEndEnumWindows(henum); 2185 } 2186 2187 /* add external FM/2 windows */ 2188 { 2189 PSWBLOCK pswb; 2190 ULONG ulSize,ulcEntries; 2191 HWND hwndTopFrame; 2192 register INT i; 2193 2194 hwndTopFrame = (hwndTop) ? WinQueryWindow(hwndTop,QW_PARENT) : (HWND)0; 2195 /* Get the switch list information */ 1728 { 1729 HWND hwndNow; 1730 MENUITEM mi; 1731 ULONG ulStyle; 1732 1733 memset(&mi, 0, sizeof(mi)); 1734 mi.iPosition = MIT_END; 1735 mi.afStyle = MIS_TEXT; 1736 WinSendMsg(hwndMenu, MM_QUERYITEM, 1737 MPFROM2SHORT(IDM_VIEWSMENU, TRUE), MPFROMP(&mi)); 1738 if (!DefMenu) 1739 DefMenu = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, DEFMENU); 1740 hwndNow = mi.hwndSubMenu; 1741 mi.hwndSubMenu = hwndNew; 1742 if (!mi.hwndSubMenu) 1743 mi.hwndSubMenu = DefMenu; 1744 WinSetParent(hwndNow, WinQueryObjectWindow(HWND_DESKTOP), FALSE); 1745 WinSetOwner(hwndNow, WinQueryObjectWindow(HWND_DESKTOP)); 1746 WinSetOwner(mi.hwndSubMenu, hwndMenu); 1747 WinSetParent(mi.hwndSubMenu, hwndMenu, FALSE); 1748 WinSetWindowUShort(mi.hwndSubMenu, QWS_ID, IDM_VIEWSMENU); 1749 mi.afStyle = MIS_SUBMENU; 1750 ulStyle = WinQueryWindowULong(mi.hwndSubMenu, QWL_STYLE); 1751 ulStyle &= -WS_SAVEBITS; 1752 ulStyle |= MS_POPUP | WS_CLIPSIBLINGS | WS_SAVEBITS; 1753 WinSetWindowULong(mi.hwndSubMenu, QWL_STYLE, ulStyle); 1754 WinSendMsg(hwndMenu, MM_SETITEM, MPFROM2SHORT(0, TRUE), MPFROMP(&mi)); 1755 } 1756 break; 1757 } 1758 } 1759 1760 HWND CheckMenu(HWND * hwndMenu, USHORT id) 1761 { 1762 /* load and adjust menus as required */ 1763 1764 if (!*hwndMenu || !WinIsWindow((HAB) 0, *hwndMenu)) 1765 { 1766 *hwndMenu = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, id); 1767 if (hwndMenu == &DirMenu) 1768 { 1769 WinSetWindowUShort(DirMenu, QWS_ID, IDM_FILESMENU); 1770 SetConditionalCascade(DirMenu, IDM_COMMANDSMENU, IDM_DOITYOURSELF); 1771 SetConditionalCascade(DirMenu, IDM_COPYMENU, IDM_COPY); 1772 SetConditionalCascade(DirMenu, IDM_MOVEMENU, IDM_MOVE); 1773 SetConditionalCascade(DirMenu, IDM_SAVESUBMENU, IDM_SAVETOCLIP); 1774 SetConditionalCascade(DirMenu, IDM_VIEWSUBMENU, IDM_INFO); 1775 SetConditionalCascade(DirMenu, IDM_EDITSUBMENU, IDM_ATTRS); 1776 SetConditionalCascade(DirMenu, IDM_DELETESUBMENU, (fDefaultDeletePerm) ? 1777 IDM_PERMDELETE : 1778 IDM_DELETE); 1779 SetConditionalCascade(DirMenu, IDM_MISCSUBMENU, IDM_SIZES); 1780 SetConditionalCascade(DirMenu, IDM_OPENSUBMENU, IDM_OPENWINDOW); 1781 if (fWorkPlace) 1782 { 1783 WinSendMsg(DirMenu, MM_DELETEITEM, 1784 MPFROM2SHORT(IDM_OPENSUBMENU, TRUE), MPVOID); 1785 WinSendMsg(DirMenu, MM_DELETEITEM, 1786 MPFROM2SHORT(IDM_OBJECTSUBMENU, TRUE), MPVOID); 1787 } 1788 } 1789 else if (hwndMenu == &TreeMenu) 1790 { 1791 WinSetWindowUShort(TreeMenu, QWS_ID, IDM_FILESMENU); 1792 SetConditionalCascade(TreeMenu, IDM_COMMANDSMENU, IDM_DOITYOURSELF); 1793 SetConditionalCascade(TreeMenu, IDM_SAVESUBMENU, IDM_SAVETOCLIP); 1794 SetConditionalCascade(TreeMenu, IDM_EDITSUBMENU, IDM_ATTRS); 1795 SetConditionalCascade(TreeMenu, IDM_EXPANDSUBMENU, IDM_EXPAND); 1796 SetConditionalCascade(TreeMenu, IDM_MISCSUBMENU, IDM_SIZES); 1797 SetConditionalCascade(TreeMenu, IDM_OPENSUBMENU, IDM_OPENWINDOW); 1798 if (fWorkPlace) 1799 { 1800 WinSendMsg(TreeMenu, MM_DELETEITEM, 1801 MPFROM2SHORT(IDM_OPENSUBMENU, TRUE), MPVOID); 1802 WinSendMsg(TreeMenu, MM_DELETEITEM, 1803 MPFROM2SHORT(IDM_OBJECTSUBMENU, TRUE), MPVOID); 1804 } 1805 } 1806 else if (hwndMenu == &ArcMenu) 1807 { 1808 WinSetWindowUShort(ArcMenu, QWS_ID, IDM_FILESMENU); 1809 SetConditionalCascade(ArcMenu, IDM_EXTRACTSUBMENU, IDM_EXTRACT); 1810 SetConditionalCascade(ArcMenu, IDM_EDITSUBMENU, IDM_EDIT); 1811 SetConditionalCascade(ArcMenu, IDM_VIEWSUBMENU, IDM_VIEW); 1812 if (fWorkPlace) 1813 WinSendMsg(ArcMenu, MM_DELETEITEM, 1814 MPFROM2SHORT(IDM_FOLDERAFTEREXTRACT, TRUE), MPVOID); 1815 } 1816 else if (hwndMenu == &FileMenu) 1817 { 1818 WinSetWindowUShort(FileMenu, QWS_ID, IDM_FILESMENU); 1819 SetConditionalCascade(FileMenu, IDM_COMMANDSMENU, IDM_DOITYOURSELF); 1820 SetConditionalCascade(FileMenu, IDM_COPYMENU, IDM_COPY); 1821 SetConditionalCascade(FileMenu, IDM_MOVEMENU, IDM_MOVE); 1822 SetConditionalCascade(FileMenu, IDM_SAVESUBMENU, IDM_SAVETOCLIP); 1823 SetConditionalCascade(FileMenu, IDM_VIEWSUBMENU, IDM_VIEW); 1824 SetConditionalCascade(FileMenu, IDM_EDITSUBMENU, IDM_EDIT); 1825 SetConditionalCascade(FileMenu, IDM_COLLECTMENU, IDM_COLLECT); 1826 SetConditionalCascade(FileMenu, IDM_DELETESUBMENU, (fDefaultDeletePerm) ? 1827 IDM_PERMDELETE : 1828 IDM_DELETE); 1829 SetConditionalCascade(FileMenu, IDM_OPENSUBMENU, IDM_OPENDEFAULT); 1830 SetConditionalCascade(FileMenu, IDM_OBJECTSUBMENU, IDM_SHADOW); 1831 if (fWorkPlace) 1832 { 1833 WinSendMsg(FileMenu, MM_DELETEITEM, 1834 MPFROM2SHORT(IDM_OPENSUBMENU, TRUE), MPVOID); 1835 WinSendMsg(FileMenu, MM_DELETEITEM, 1836 MPFROM2SHORT(IDM_OBJECTSUBMENU, TRUE), MPVOID); 1837 } 1838 } 1839 else if (hwndMenu == &DirCnrMenu) 1840 { 1841 WinSetWindowUShort(DirCnrMenu, QWS_ID, IDM_VIEWSMENU); 1842 SetConditionalCascade(DirCnrMenu, IDM_MISCSUBMENU, IDM_SIZES); 1843 SetConditionalCascade(DirCnrMenu, IDM_OPENSUBMENU, IDM_OPENSETTINGSME); 1844 if (fWorkPlace) 1845 WinSendMsg(DirCnrMenu, MM_DELETEITEM, 1846 MPFROM2SHORT(IDM_OPENSUBMENU, TRUE), MPVOID); 1847 } 1848 else if (hwndMenu == &TreeCnrMenu) 1849 WinSetWindowUShort(TreeCnrMenu, QWS_ID, IDM_VIEWSMENU); 1850 else if (hwndMenu == &ArcCnrMenu) 1851 { 1852 WinSetWindowUShort(ArcCnrMenu, QWS_ID, IDM_VIEWSMENU); 1853 SetConditionalCascade(ArcCnrMenu, IDM_EXTRACTSUBMENU, IDM_ARCEXTRACT); 1854 if (fWorkPlace) 1855 WinSendMsg(ArcCnrMenu, MM_DELETEITEM, 1856 MPFROM2SHORT(IDM_FOLDERAFTEREXTRACT, TRUE), MPVOID); 1857 } 1858 else if (hwndMenu == &CollectorCnrMenu) 1859 { 1860 WinSetWindowUShort(CollectorCnrMenu, QWS_ID, IDM_VIEWSMENU); 1861 SetConditionalCascade(CollectorCnrMenu, IDM_COLLECTMENU, 1862 IDM_COLLECTFROMCLIP); 1863 } 1864 else if (hwndMenu == &CollectorFileMenu) 1865 { 1866 WinSetWindowUShort(CollectorFileMenu, QWS_ID, IDM_FILESMENU); 1867 SetConditionalCascade(CollectorFileMenu, IDM_COMMANDSMENU, 1868 IDM_DOITYOURSELF); 1869 SetConditionalCascade(CollectorFileMenu, IDM_COPYMENU, IDM_COPY); 1870 SetConditionalCascade(CollectorFileMenu, IDM_MOVEMENU, IDM_MOVE); 1871 SetConditionalCascade(CollectorFileMenu, IDM_SAVESUBMENU, IDM_SAVETOCLIP); 1872 SetConditionalCascade(CollectorFileMenu, IDM_VIEWSUBMENU, IDM_VIEW); 1873 SetConditionalCascade(CollectorFileMenu, IDM_EDITSUBMENU, IDM_EDIT); 1874 SetConditionalCascade(CollectorFileMenu, IDM_DELETESUBMENU, (fDefaultDeletePerm) ? 1875 IDM_PERMDELETE : 1876 IDM_DELETE); 1877 SetConditionalCascade(CollectorFileMenu, IDM_OPENSUBMENU, IDM_OPENDEFAULT); 1878 SetConditionalCascade(CollectorFileMenu, IDM_OBJECTSUBMENU, IDM_SHADOW); 1879 if (fWorkPlace) 1880 { 1881 WinSendMsg(CollectorFileMenu, MM_DELETEITEM, 1882 MPFROM2SHORT(IDM_OPENSUBMENU, TRUE), MPVOID); 1883 WinSendMsg(CollectorFileMenu, MM_DELETEITEM, 1884 MPFROM2SHORT(IDM_OBJECTSUBMENU, TRUE), MPVOID); 1885 } 1886 } 1887 else if (hwndMenu == &CollectorDirMenu) 1888 { 1889 WinSetWindowUShort(CollectorDirMenu, QWS_ID, IDM_FILESMENU); 1890 SetConditionalCascade(CollectorDirMenu, IDM_COMMANDSMENU, 1891 IDM_DOITYOURSELF); 1892 SetConditionalCascade(CollectorDirMenu, IDM_COPYMENU, IDM_COPY); 1893 SetConditionalCascade(CollectorDirMenu, IDM_MOVEMENU, IDM_MOVE); 1894 SetConditionalCascade(CollectorDirMenu, IDM_SAVESUBMENU, IDM_SAVETOCLIP); 1895 SetConditionalCascade(CollectorDirMenu, IDM_VIEWSUBMENU, IDM_INFO); 1896 SetConditionalCascade(CollectorDirMenu, IDM_EDITSUBMENU, IDM_ATTRS); 1897 SetConditionalCascade(CollectorDirMenu, IDM_DELETESUBMENU, (fDefaultDeletePerm) ? 1898 IDM_PERMDELETE : 1899 IDM_DELETE); 1900 SetConditionalCascade(CollectorDirMenu, IDM_MISCSUBMENU, IDM_SIZES); 1901 SetConditionalCascade(CollectorDirMenu, IDM_OPENSUBMENU, IDM_OPENWINDOW); 1902 if (fWorkPlace) 1903 { 1904 WinSendMsg(CollectorDirMenu, MM_DELETEITEM, 1905 MPFROM2SHORT(IDM_OPENSUBMENU, TRUE), MPVOID); 1906 WinSendMsg(CollectorDirMenu, MM_DELETEITEM, 1907 MPFROM2SHORT(IDM_OBJECTSUBMENU, TRUE), MPVOID); 1908 } 1909 } 1910 else if (hwndMenu == &MainPopupMenu) 1911 { 1912 WinSetWindowUShort(MainPopupMenu, QWS_ID, IDM_MAINPOPUP); 1913 SetConditionalCascade(MainPopupMenu, IDM_TOOLSUBMENU, IDM_TOOLBAR); 1914 SetConditionalCascade(MainPopupMenu, IDM_AUTOVIEWSUBMENU, IDM_AUTOVIEW); 1915 } 1916 } 1917 return *hwndMenu; 1918 } 1919 1920 SHORT AddToListboxBottom(HWND hwnd, CHAR * str) 1921 { 1922 SHORT ln; 1923 1924 ln = (SHORT) WinSendMsg(hwnd, LM_INSERTITEM, MPFROM2SHORT(LIT_END, 0), 1925 MPFROMP(str)); 1926 if (ln) 1927 WinSendMsg(hwnd, LM_SELECTITEM, MPFROM2SHORT(ln, 0), MPVOID); 1928 return ln; 1929 } 1930 1931 VOID SetSysMenu(HWND hwndSysMenu) 1932 { 1933 CHAR s[128], *p; 1934 1935 if (WinSendMsg(hwndSysMenu, MM_QUERYITEMTEXT, 1936 MPFROM2SHORT(SC_RESTORE, 128), 1937 MPFROMP(s))) 1938 { 1939 p = strchr(s, '\t'); 1940 if (p) 1941 { 1942 p++; 1943 strcpy(p, "Ctrl+Alt+F5"); 1944 WinSetMenuItemText(hwndSysMenu, SC_RESTORE, s); 1945 } 1946 } 1947 if (WinSendMsg(hwndSysMenu, MM_QUERYITEMTEXT, 1948 MPFROM2SHORT(SC_CLOSE, 128), 1949 MPFROMP(s))) 1950 { 1951 p = strchr(s, '\t'); 1952 if (p) 1953 { 1954 p++; 1955 strcpy(p, "Ctrl+Alt+F4"); 1956 WinSetMenuItemText(hwndSysMenu, SC_CLOSE, s); 1957 } 1958 } 1959 if (WinSendMsg(hwndSysMenu, MM_QUERYITEMTEXT, 1960 MPFROM2SHORT(SC_MOVE, 128), 1961 MPFROMP(s))) 1962 { 1963 p = strchr(s, '\t'); 1964 if (p) 1965 { 1966 p++; 1967 strcpy(p, "Ctrl+Alt+F7"); 1968 WinSetMenuItemText(hwndSysMenu, SC_MOVE, s); 1969 } 1970 } 1971 if (WinSendMsg(hwndSysMenu, MM_QUERYITEMTEXT, 1972 MPFROM2SHORT(SC_SIZE, 128), 1973 MPFROMP(s))) 1974 { 1975 p = strchr(s, '\t'); 1976 if (p) 1977 { 1978 p++; 1979 strcpy(p, "Ctrl+Alt+F8"); 1980 WinSetMenuItemText(hwndSysMenu, SC_SIZE, s); 1981 } 1982 } 1983 if (WinSendMsg(hwndSysMenu, MM_QUERYITEMTEXT, 1984 MPFROM2SHORT(SC_MINIMIZE, 128), 1985 MPFROMP(s))) 1986 { 1987 p = strchr(s, '\t'); 1988 if (p) 1989 { 1990 p++; 1991 strcpy(p, "Ctrl+Alt+F9"); 1992 WinSetMenuItemText(hwndSysMenu, SC_MINIMIZE, s); 1993 } 1994 } 1995 if (WinSendMsg(hwndSysMenu, 1996 MM_QUERYITEMTEXT, 1997 MPFROM2SHORT(SC_MAXIMIZE, 128), 1998 MPFROMP(s))) 1999 { 2000 p = strchr(s, '\t'); 2001 if (p) 2002 { 2003 p++; 2004 strcpy(p, "Ctrl+Alt+F10"); 2005 WinSetMenuItemText(hwndSysMenu, 2006 SC_MAXIMIZE, 2007 s); 2008 } 2009 } 2010 if (WinSendMsg(hwndSysMenu, 2011 MM_QUERYITEMTEXT, 2012 MPFROM2SHORT(SC_HIDE, 128), 2013 MPFROMP(s))) 2014 { 2015 p = strchr(s, '\t'); 2016 if (p) 2017 { 2018 p++; 2019 strcpy(p, "Ctrl+Alt+F11"); 2020 WinSetMenuItemText(hwndSysMenu, SC_HIDE, s); 2021 } 2022 } 2023 } 2024 2025 VOID LoadLibPath(CHAR * str, LONG len) 2026 { 2027 ULONG ver[2]; 2028 CHAR configsys[] = "C:\\CONFIG.SYS"; 2029 static CHAR var[8192], beg[16384], end[16384]; 2030 BOOL warp; 2031 FILE *fp; 2032 PFN DQELIBPATH = NULL; 2033 HMODULE hmod; 2034 2035 if (str && len) 2036 { 2037 *str = 0; 2038 if (DosQuerySysInfo(QSV_BOOT_DRIVE, 2039 QSV_BOOT_DRIVE, 2040 (PVOID) ver, 2041 (ULONG) sizeof(ULONG))) 2042 ver[0] = 3L; 2043 *configsys = (CHAR) ver[0] + '@'; 2044 if (!DosQuerySysInfo(QSV_VERSION_MAJOR, 2045 QSV_VERSION_MINOR, 2046 (PVOID) ver, (ULONG) sizeof(ver)) && 2047 ver[1] >= 30) 2048 warp = TRUE; 2049 *var = *beg = *end = 0; 2050 if (warp) 2051 { 2052 if (!DosLoadModule(var, 2053 sizeof(var), 2054 "DOSCALL1.DLL", &hmod)) 2055 { 2056 if (!DosQueryProcAddr(hmod, 2057 ORD_DOS32QUERYEXTLIBPATH, 2058 NULL, 2059 (PFN *) & DQELIBPATH)) 2060 { 2061 DQELIBPATH(beg, BEGIN_LIBPATH); 2062 DQELIBPATH(end, END_LIBPATH); 2063 } 2064 DosFreeModule(hmod); 2065 } 2066 *var = 0; 2067 } 2068 fp = fopen(configsys, "r"); 2069 if (fp) 2070 { 2071 while (!feof(fp)) 2072 { 2073 if (!fgets(var, 8192, fp)) 2074 break; 2075 var[8191] = 0; 2076 bstripcr(var); 2077 if (!strnicmp(var, "LIBPATH=", 8)) 2078 { 2079 memmove(var, var + 8, strlen(var + 8) + 1); 2080 lstrip(var); 2081 break; 2082 } 2083 } 2084 fclose(fp); 2085 } 2086 strncpy(str, beg, len); 2087 strncat(str, var, len - strlen(str)); 2088 strncat(str, end, len - strlen(str)); 2089 str[len - 1] = 0; 2090 } 2091 } 2092 2093 void SetViewMenu(HWND hwndMenu, ULONG flWindowAttr) 2094 { 2095 WinCheckMenuItem(hwndMenu, IDM_MINIICONS, ((flWindowAttr & CV_MINI))); 2096 WinCheckMenuItem(hwndMenu, IDM_TEXT, ((flWindowAttr & CV_TEXT))); 2097 WinCheckMenuItem(hwndMenu, IDM_ICON, ((flWindowAttr & CV_ICON) && 2098 !(flWindowAttr & CV_TREE))); 2099 WinCheckMenuItem(hwndMenu, IDM_TREEVIEW, ((flWindowAttr & CV_TREE))); 2100 WinCheckMenuItem(hwndMenu, IDM_DETAILS, ((flWindowAttr & CV_DETAIL))); 2101 WinCheckMenuItem(hwndMenu, IDM_NAME, ((flWindowAttr & CV_NAME))); 2102 } 2103 2104 void SaySort(HWND hwnd, INT sortflags, BOOL archive) 2105 { 2106 char *s = NULL; 2107 2108 s = malloc(CCHMAXPATH); 2109 if (s) 2110 { 2111 sprintf(s, "S:%s%s", 2112 (sortflags & SORT_REVERSE) ? "^" : NullStr, 2113 (sortflags & SORT_FIRSTEXTENSION) ? GetPString(IDS_FIRSTX) : 2114 (sortflags & SORT_LASTEXTENSION) ? GetPString(IDS_LASTX) : 2115 (sortflags & SORT_SIZE) ? "Size" : 2116 (sortflags & SORT_EASIZE) ? (archive == 0) ? GetPString(IDS_EASIZE) : GetPString(IDS_CSIZE) : 2117 (sortflags & SORT_LWDATE) ? (archive == 0) ? GetPString(IDS_LWDATE) : GetPString(IDS_DATE) : 2118 (sortflags & SORT_LADATE) ? GetPString(IDS_LADATE) : 2119 (sortflags & SORT_CRDATE) ? GetPString(IDS_CRDATE) : 2120 (sortflags & SORT_PATHNAME) ? GetPString(IDS_PATH) : 2121 (sortflags & SORT_NOSORT) ? GetPString(IDS_NONE) : 2122 (sortflags & SORT_SUBJECT) ? GetPString(IDS_SUBJ) : 2123 GetPString(IDS_NAME)); 2124 WinSetWindowText(hwnd, s); 2125 free(s); 2126 } 2127 } 2128 2129 void SayView(HWND hwnd, ULONG flWindowAttr) 2130 { 2131 char *s = NULL; 2132 2133 s = malloc(CCHMAXPATH); 2134 if (s) 2135 { 2136 sprintf(s, "V:%s%s", 2137 (flWindowAttr & CV_TREE) ? GetPString(IDS_TREE) : 2138 (flWindowAttr & CV_NAME) ? GetPString(IDS_NAME) : 2139 (flWindowAttr & CV_DETAIL) ? GetPString(IDS_DETAIL) : 2140 (flWindowAttr & CV_TEXT) ? GetPString(IDS_TEXT) : 2141 GetPString(IDS_ICON), 2142 ((flWindowAttr & CV_MINI) && 2143 !(flWindowAttr & CV_TEXT)) ? GetPString(IDS_MINI) : NullStr); 2144 WinSetWindowText(hwnd, s); 2145 free(s); 2146 } 2147 } 2148 2149 void SayFilter(HWND hwnd, MASK * mask, BOOL archive) 2150 { 2151 char *s = NULL; 2152 2153 s = malloc(CCHMAXPATH * 2); 2154 if (s) 2155 { 2156 sprintf(s, "F:%s%s", 2157 mask -> szMask, 2158 (!archive && (mask -> attrFile != ALLATTRS || 2159 mask -> antiattr != 0)) ? " " : NullStr, 2160 (!archive && (mask -> attrFile != ALLATTRS || 2161 mask -> antiattr != 0)) ? GetPString(IDS_ATTRTEXT) : NullStr); 2162 if (!s[2]) 2163 sprintf(s, "F:%s", GetPString(IDS_ALLTEXT)); 2164 WinSetWindowText(hwnd, s); 2165 free(s); 2166 } 2167 } 2168 2169 char *GetCmdSpec(BOOL dos) 2170 { 2171 char *cmspec; 2172 2173 if (!dos) 2174 { 2175 cmspec = getenv("OS2_SHELL"); 2176 if (!cmspec) 2177 cmspec = getenv("COMSPEC"); 2178 if (!cmspec) 2179 cmspec = "CMD.EXE"; 2180 } 2181 else 2182 { 2183 cmspec = getenv("DOS_SHELL"); 2184 if (!cmspec) 2185 cmspec = "COMMAND.COM"; 2186 } 2187 return cmspec; 2188 } 2189 2190 void Broadcast(HAB hab, HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 2191 { 2192 if (hwndMain) 2193 WinBroadcastMsg(hwndMain, 2194 msg, 2195 mp1, 2196 mp2, 2197 BMSG_SEND | BMSG_FRAMEONLY); 2198 if (hwnd && 2199 hwnd != HWND_DESKTOP && 2200 hwnd != hwndMain && 2201 hwnd != WinQueryDesktopWindow(hab, NULLHANDLE) && 2202 WinIsWindow(hab, hwnd) && 2203 (!hwndMain || 2204 !WinIsChild(hwnd, hwndMain))) 2205 WinSendMsg(hwnd, 2206 msg, 2207 mp1, 2208 mp2); 2209 } 2210 2211 void SetupWinList(HWND hwndMenu, HWND hwndTop, HWND hwndFrame) 2212 { 2213 /* 2214 * add switchlist entries to end of pulldown menu 2215 */ 2216 2217 SHORT sItemCount, x = 0, y = 0; 2218 MENUITEM mi; 2219 2220 sItemCount = (SHORT) WinSendMsg(hwndMenu, 2221 MM_QUERYITEMCOUNT, 2222 MPVOID, 2223 MPVOID); 2224 2225 /* clean out old additions */ 2226 while ((SHORT) WinSendMsg(hwndMenu, 2227 MM_DELETEITEM, 2228 MPFROM2SHORT(IDM_SWITCHSTART + x++, 2229 TRUE), 2230 MPVOID) < sItemCount) 2231 sItemCount--; 2196 2232 x = 0; 2197 ulcEntries = WinQuerySwitchList(0,NULL,0); 2198 ulSize = sizeof(SWBLOCK) + sizeof(HSWITCH) + (ulcEntries + 4L) * 2199 (LONG)sizeof(SWENTRY); 2200 /* Allocate memory for list */ 2201 if((pswb = malloc((unsigned)ulSize)) != NULL) { 2202 /* Put the info in the list */ 2203 ulcEntries = WinQuerySwitchList(0,pswb, 2204 ulSize - sizeof(SWENTRY)); 2205 /* do the dirty deed */ 2206 memset(&mi,0,sizeof(mi)); 2207 for(i = 0;i < pswb->cswentry;i++) { 2208 if(pswb->aswentry[i].swctl.uchVisibility == SWL_VISIBLE && 2209 pswb->aswentry[i].swctl.fbJump == SWL_JUMPABLE && 2210 (pswb->aswentry[i].swctl.idProcess != mypid || 2211 !hwndFrame || 2212 pswb->aswentry[i].swctl.hwnd != hwndFrame) && 2213 (pswb->aswentry[i].swctl.idProcess != mypid || 2214 !hwndTopFrame || 2215 pswb->aswentry[i].swctl.hwnd != hwndTopFrame || 2216 !WinIsChild(hwndFrame,hwndTop))) { 2217 if(!strnicmp(pswb->aswentry[i].swctl.szSwtitle,"AV/2",4) || 2218 !stricmp(pswb->aswentry[i].swctl.szSwtitle,"File Manager/2") || 2219 !stricmp(pswb->aswentry[i].swctl.szSwtitle,"Collector") || 2220 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,"VTree",5) || 2221 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,"VDir",4) || 2222 !strnicmp(pswb->aswentry[i].swctl.szSwtitle,FM2Str,4)) { 2223 mi.afStyle = MIS_TEXT; 2224 if(x && !(x % 28)) 2225 mi.afStyle |= MIS_BREAK; 2226 mi.id = IDM_SWITCHSTART + y; 2227 mi.iPosition = MIT_END; 2228 switches[y] = pswb->aswentry[i].hswitch; 2229 if((SHORT)WinSendMsg(hwndMenu, 2230 MM_INSERTITEM, 2231 MPFROMP(&mi), 2232 MPFROMP(pswb->aswentry[i].swctl.szSwtitle)) >= 0) { 2233 y++; 2234 x++; 2235 } 2236 } 2237 } 2238 } 2239 numswitches = y; 2240 free(pswb); 2241 DosPostEventSem(CompactSem); 2242 } 2243 } 2244 } 2245 2246 2247 BOOL SwitchCommand (HWND hwndMenu,USHORT cmd) { 2248 2249 BOOL ret = FALSE; 2250 2251 if(hwndMain && hwndMenu && 2252 cmd >= IDM_WINDOWSTART && 2253 cmd < IDM_SWITCHSTART) { 2254 /* 2255 * select a child window (of client) 2256 */ 2257 2258 MENUITEM mi; 2259 HWND hwndSubMenu = (HWND)0,hwndChild; 2260 CHAR s[CCHMAXPATH + 8]; 2261 2262 if(WinQueryWindowUShort(hwndMenu,QWS_ID) != IDM_WINDOWSMENU) { 2263 memset(&mi,0,sizeof(mi)); 2264 mi.iPosition = MIT_END; 2265 mi.afStyle = MIS_TEXT; 2266 if(WinSendMsg(hwndMenu, 2267 MM_QUERYITEM, 2268 MPFROM2SHORT(IDM_WINDOWSMENU, 2269 TRUE), 2270 MPFROMP(&mi))) 2271 hwndSubMenu = mi.hwndSubMenu; 2272 } 2273 else 2274 hwndSubMenu = hwndMenu; 2275 if(hwndSubMenu) { 2276 *s = 0; 2277 if(WinSendMsg(hwndSubMenu, 2278 MM_QUERYITEMTEXT, 2279 MPFROM2SHORT(cmd, 2280 CCHMAXPATH + 8), 2281 MPFROMP(s)) && 2282 *s) { 2283 2284 HENUM henum; 2285 CHAR checkText[CCHMAXPATH + 8]; 2286 SWP swp; 2287 2288 s[CCHMAXPATH + 7] = 0; 2289 henum = WinBeginEnumWindows(hwndMain); 2290 while((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE) { 2291 if(WinQueryWindowUShort(hwndChild,QWS_ID)) { 2292 *checkText = 0; 2293 WinQueryWindowText(hwndChild, 2294 CCHMAXPATH + 8, 2295 checkText); 2296 checkText[CCHMAXPATH + 7] = 0; 2297 if(!stricmp(checkText,s)) { 2298 if(WinQueryWindowPos(hwndChild, 2299 &swp)) { 2300 if(swp.fl & (SWP_MINIMIZE | SWP_HIDE)) 2301 WinSetWindowPos(hwndChild, 2302 HWND_TOP, 2303 0, 2304 0, 2305 0, 2306 0, 2307 SWP_RESTORE | SWP_ZORDER); 2308 } 2309 WinSetActiveWindow(HWND_DESKTOP, 2310 hwndChild); 2311 ret = TRUE; 2312 break; 2313 } 2314 } 2315 } 2316 WinEndEnumWindows(henum); 2317 } 2318 } 2319 } 2320 else if(cmd >= IDM_SWITCHSTART && 2321 cmd < IDM_SWITCHSTART + 499) { 2322 if(cmd - IDM_SWITCHSTART < numswitches) { 2323 WinSwitchToProgram(switches[cmd - IDM_SWITCHSTART]); 2324 ret = TRUE; 2325 } 2326 } 2327 2328 return ret; 2329 } 2330 2233 while ((SHORT) WinSendMsg(hwndMenu, 2234 MM_DELETEITEM, 2235 MPFROM2SHORT(IDM_WINDOWSTART + x++, 2236 TRUE), 2237 MPVOID) < sItemCount) 2238 sItemCount--; 2239 2240 x = 0; 2241 if (hwndTop) 2242 { 2243 2244 char wtext[CCHMAXPATH + 8]; 2245 HENUM henum; 2246 HWND hwndChild; 2247 2248 /* add children of the main FM/2 client */ 2249 henum = WinBeginEnumWindows(hwndTop); 2250 memset(&mi, 0, sizeof(mi)); 2251 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE) 2252 { 2253 if (WinQueryWindowUShort(hwndChild, QWS_ID) && 2254 hwndChild != hwndFrame) 2255 { 2256 *wtext = 0; 2257 WinQueryWindowText(hwndChild, 2258 CCHMAXPATH + 8, 2259 wtext); 2260 if (*wtext) 2261 { 2262 wtext[CCHMAXPATH + 7] = 0; 2263 mi.afStyle = MIS_TEXT; 2264 if (!((x + sItemCount) % 28)) 2265 mi.afStyle |= MIS_BREAK; 2266 mi.id = IDM_WINDOWSTART + x; 2267 mi.iPosition = MIT_END; 2268 if ((SHORT) WinSendMsg(hwndMenu, 2269 MM_INSERTITEM, 2270 MPFROMP(&mi), 2271 MPFROMP(wtext)) >= 0) 2272 x++; 2273 } 2274 } 2275 } 2276 WinEndEnumWindows(henum); 2277 } 2278 2279 /* add external FM/2 windows */ 2280 { 2281 PSWBLOCK pswb; 2282 ULONG ulSize, ulcEntries; 2283 HWND hwndTopFrame; 2284 register INT i; 2285 2286 hwndTopFrame = (hwndTop) ? WinQueryWindow(hwndTop, QW_PARENT) : (HWND) 0; 2287 /* Get the switch list information */ 2288 x = 0; 2289 ulcEntries = WinQuerySwitchList(0, NULL, 0); 2290 ulSize = sizeof(SWBLOCK) + sizeof(HSWITCH) + (ulcEntries + 4L) * 2291 (LONG) sizeof(SWENTRY); 2292 /* Allocate memory for list */ 2293 if ((pswb = malloc((unsigned) ulSize)) != NULL) 2294 { 2295 /* Put the info in the list */ 2296 ulcEntries = WinQuerySwitchList(0, pswb, 2297 ulSize - sizeof(SWENTRY)); 2298 /* do the dirty deed */ 2299 memset(&mi, 0, sizeof(mi)); 2300 for (i = 0; i < pswb -> cswentry; i++) 2301 { 2302 if (pswb -> aswentry[i].swctl.uchVisibility == SWL_VISIBLE && 2303 pswb -> aswentry[i].swctl.fbJump == SWL_JUMPABLE && 2304 (pswb -> aswentry[i].swctl.idProcess != mypid || 2305 !hwndFrame || 2306 pswb -> aswentry[i].swctl.hwnd != hwndFrame) && 2307 (pswb -> aswentry[i].swctl.idProcess != mypid || 2308 !hwndTopFrame || 2309 pswb -> aswentry[i].swctl.hwnd != hwndTopFrame || 2310 !WinIsChild(hwndFrame, hwndTop))) 2311 { 2312 if (!strnicmp(pswb -> aswentry[i].swctl.szSwtitle, "AV/2", 4) || 2313 !stricmp(pswb -> aswentry[i].swctl.szSwtitle, "File Manager/2") || 2314 !stricmp(pswb -> aswentry[i].swctl.szSwtitle, "Collector") || 2315 !strnicmp(pswb -> aswentry[i].swctl.szSwtitle, "VTree", 5) || 2316 !strnicmp(pswb -> aswentry[i].swctl.szSwtitle, "VDir", 4) || 2317 !strnicmp(pswb -> aswentry[i].swctl.szSwtitle, FM2Str, 4)) 2318 { 2319 mi.afStyle = MIS_TEXT; 2320 if (x && !(x % 28)) 2321 mi.afStyle |= MIS_BREAK; 2322 mi.id = IDM_SWITCHSTART + y; 2323 mi.iPosition = MIT_END; 2324 switches[y] = pswb -> aswentry[i].hswitch; 2325 if ((SHORT) WinSendMsg(hwndMenu, 2326 MM_INSERTITEM, 2327 MPFROMP(&mi), 2328 MPFROMP(pswb -> aswentry[i].swctl.szSwtitle)) >= 0) 2329 { 2330 y++; 2331 x++; 2332 } 2333 } 2334 } 2335 } 2336 numswitches = y; 2337 free(pswb); 2338 DosPostEventSem(CompactSem); 2339 } 2340 } 2341 } 2342 2343 BOOL SwitchCommand(HWND hwndMenu, USHORT cmd) 2344 { 2345 BOOL ret = FALSE; 2346 2347 if (hwndMain && hwndMenu && 2348 cmd >= IDM_WINDOWSTART && 2349 cmd < IDM_SWITCHSTART) 2350 { 2351 /* 2352 * select a child window (of client) 2353 */ 2354 2355 MENUITEM mi; 2356 HWND hwndSubMenu = (HWND) 0, hwndChild; 2357 CHAR s[CCHMAXPATH + 8]; 2358 2359 if (WinQueryWindowUShort(hwndMenu, QWS_ID) != IDM_WINDOWSMENU) 2360 { 2361 memset(&mi, 0, sizeof(mi)); 2362 mi.iPosition = MIT_END; 2363 mi.afStyle = MIS_TEXT; 2364 if (WinSendMsg(hwndMenu, 2365 MM_QUERYITEM, 2366 MPFROM2SHORT(IDM_WINDOWSMENU, 2367 TRUE), 2368 MPFROMP(&mi))) 2369 hwndSubMenu = mi.hwndSubMenu; 2370 } 2371 else 2372 hwndSubMenu = hwndMenu; 2373 if (hwndSubMenu) 2374 { 2375 *s = 0; 2376 if (WinSendMsg(hwndSubMenu, 2377 MM_QUERYITEMTEXT, 2378 MPFROM2SHORT(cmd, 2379 CCHMAXPATH + 8), 2380 MPFROMP(s)) && 2381 *s) 2382 { 2383 2384 HENUM henum; 2385 CHAR checkText[CCHMAXPATH + 8]; 2386 SWP swp; 2387 2388 s[CCHMAXPATH + 7] = 0; 2389 henum = WinBeginEnumWindows(hwndMain); 2390 while ((hwndChild = WinGetNextWindow(henum)) != NULLHANDLE) 2391 { 2392 if (WinQueryWindowUShort(hwndChild, QWS_ID)) 2393 { 2394 *checkText = 0; 2395 WinQueryWindowText(hwndChild, 2396 CCHMAXPATH + 8, 2397 checkText); 2398 checkText[CCHMAXPATH + 7] = 0; 2399 if (!stricmp(checkText, s)) 2400 { 2401 if (WinQueryWindowPos(hwndChild, 2402 &swp)) 2403 { 2404 if (swp.fl & (SWP_MINIMIZE | SWP_HIDE)) 2405 WinSetWindowPos(hwndChild, 2406 HWND_TOP, 2407 0, 2408 0, 2409 0, 2410 0, 2411 SWP_RESTORE | SWP_ZORDER); 2412 } 2413 WinSetActiveWindow(HWND_DESKTOP, 2414 hwndChild); 2415 ret = TRUE; 2416 break; 2417 } 2418 } 2419 } 2420 WinEndEnumWindows(henum); 2421 } 2422 } 2423 } 2424 else if (cmd >= IDM_SWITCHSTART && 2425 cmd < IDM_SWITCHSTART + 499) 2426 { 2427 if (cmd - IDM_SWITCHSTART < numswitches) 2428 { 2429 WinSwitchToProgram(switches[cmd - IDM_SWITCHSTART]); 2430 ret = TRUE; 2431 } 2432 } 2433 2434 return ret; 2435 }
Note:
See TracChangeset
for help on using the changeset viewer.