Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/dirsize.c
r153 r176 16 16 24 May 05 SHL Rework for CNRITEM.szSubject 17 17 25 May 05 SHL Use ULONGLONG and CommaFmtULL 18 26 May 05 SHL More large file formatting updates 18 19 19 20 ***********************************************************************/ … … 255 256 256 257 pCI->cbFile = ullCurDirBytes; 257 pCI->easize = ullSubDirBytes; // hack fixme258 pCI->easize = ullSubDirBytes; // hack cough 258 259 WinSendMsg(hwndCnr,CM_INVALIDATERECORD,MPFROMP(&pCI), 259 260 MPFROM2SHORT(1,CMA_ERASE | CMA_TEXTCHANGED)); … … 318 319 319 320 pCI->flags = (ULONG)fltPct; 320 CommaFmtULL(szSubDir,sizeof(szSubDir),pCI->easize,' M');321 CommaFmtULL(szAllDir,sizeof(szAllDir),pCI->cbFile + pCI->easize,' M');321 CommaFmtULL(szSubDir,sizeof(szSubDir),pCI->easize,'K'); 322 CommaFmtULL(szAllDir,sizeof(szAllDir),pCI->cbFile + pCI->easize,'K'); 322 323 sprintf(&pCI->szFileName[strlen(pCI->szFileName)], 323 324 " %s + %s = %s (%.02lf%%%s)\r%s", -
trunk/dll/treecnr.c
r156 r176 13 13 25 May 05 SHL Rename comnam to szCommonName and fix typo 14 14 25 May 05 SHL Use ULONGLONG and CommaFmtULL 15 26 May 05 SHL More large file formatting updates 15 16 16 17 ***********************************************************************/ … … 57 58 case WM_CREATE: 58 59 { 59 MRESULT rc;60 61 rc = PFNWPButton(hwnd,msg,mp1,mp2);62 WinSetPresParam(hwnd,PP_FONTNAMESIZE,63 strlen(GetPString(IDS_8TIMESNEWROMANTEXT)) + 1,64 (PVOID)GetPString(IDS_8TIMESNEWROMANTEXT));65 return rc;60 MRESULT rc; 61 62 rc = PFNWPButton(hwnd,msg,mp1,mp2); 63 WinSetPresParam(hwnd,PP_FONTNAMESIZE, 64 strlen(GetPString(IDS_8TIMESNEWROMANTEXT)) + 1, 65 (PVOID)GetPString(IDS_8TIMESNEWROMANTEXT)); 66 return rc; 66 67 } 67 68 68 69 case WM_MOUSEMOVE: 69 70 BubbleHelp(hwnd, 70 TRUE,71 FALSE,72 TRUE,73 GetPString(IDS_OPENBUTTONHELP));71 TRUE, 72 FALSE, 73 TRUE, 74 GetPString(IDS_OPENBUTTONHELP)); 74 75 break; 75 76 76 77 case WM_CONTEXTMENU: 77 78 PostMsg(WinQueryWindow(hwnd,QW_PARENT), 78 WM_COMMAND,79 MPFROM2SHORT(IDM_OPENWALK,0),80 MPVOID);79 WM_COMMAND, 80 MPFROM2SHORT(IDM_OPENWALK,0), 81 MPVOID); 81 82 return 0; 82 83 83 84 case DM_DRAGOVER: 84 85 if(!emphasized) { 85 emphasized = TRUE;86 EmphasizeButton(hwnd,emphasized);86 emphasized = TRUE; 87 EmphasizeButton(hwnd,emphasized); 87 88 } 88 89 if(AcceptOneDrop(mp1,mp2)) 89 return MRFROM2SHORT(DOR_DROP,90 DO_MOVE);90 return MRFROM2SHORT(DOR_DROP, 91 DO_MOVE); 91 92 return MRFROM2SHORT(DOR_NEVERDROP,0); 92 93 93 94 case DM_DRAGLEAVE: 94 95 if(emphasized) { 95 emphasized = FALSE;96 EmphasizeButton(hwnd,emphasized);96 emphasized = FALSE; 97 EmphasizeButton(hwnd,emphasized); 97 98 } 98 99 break; … … 104 105 case DM_DROP: 105 106 { 106 char szFrom[CCHMAXPATH + 2];107 108 if(emphasized) {109 emphasized = FALSE;110 EmphasizeButton(hwnd,emphasized);111 }112 if(GetOneDrop(mp1,mp2,szFrom,sizeof(szFrom))) {113 MakeValidDir(szFrom);114 WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),115 UM_OPENWINDOWFORME,116 MPFROMP(szFrom),117 MPVOID);118 }107 char szFrom[CCHMAXPATH + 2]; 108 109 if(emphasized) { 110 emphasized = FALSE; 111 EmphasizeButton(hwnd,emphasized); 112 } 113 if(GetOneDrop(mp1,mp2,szFrom,sizeof(szFrom))) { 114 MakeValidDir(szFrom); 115 WinSendMsg(WinQueryWindow(hwnd,QW_PARENT), 116 UM_OPENWINDOWFORME, 117 MPFROMP(szFrom), 118 MPVOID); 119 } 119 120 } 120 121 return 0; … … 136 137 /* is it already the current record? */ 137 138 pci = WinSendMsg(hwndCnr, 138 CM_QUERYRECORDEMPHASIS,139 MPFROMLONG(CMA_FIRST),140 MPFROMSHORT(CRA_CURSORED));139 CM_QUERYRECORDEMPHASIS, 140 MPFROMLONG(CMA_FIRST), 141 MPFROMSHORT(CRA_CURSORED)); 141 142 if(pci && 142 143 (INT)pci != -1 && … … 147 148 WinEnableWindowUpdate(hwndCnr,FALSE); 148 149 pci = FindCnrRecord(hwndCnr, 149 dirname,150 NULL,151 TRUE,152 FALSE,153 TRUE);150 dirname, 151 NULL, 152 TRUE, 153 FALSE, 154 TRUE); 154 155 if(!pci || (INT)pci == -1) { 155 156 *szDir = *dirname; … … 160 161 for(;;) { 161 162 pciP = FindCnrRecord(hwndCnr, 162 szDir,163 NULL,164 TRUE,165 FALSE,166 TRUE);163 szDir, 164 NULL, 165 TRUE, 166 FALSE, 167 TRUE); 167 168 if(pciP && 168 (INT)pciP != -1) {169 if(!stricmp(dirname,pciP->szFileName))170 break;171 if(!(pciP->rc.flRecordAttr & CRA_EXPANDED))172 WinSendMsg(hwndCnr,173 CM_EXPANDTREE,174 MPFROMP(pciP),175 MPVOID);176 strcpy(szDir,dirname);177 if(p - szDir >= strlen(szDir))178 break;179 p = strchr(p,'\\');180 if(p) {181 *p = 0;182 p++;183 }184 else185 break;169 (INT)pciP != -1) { 170 if(!stricmp(dirname,pciP->szFileName)) 171 break; 172 if(!(pciP->rc.flRecordAttr & CRA_EXPANDED)) 173 WinSendMsg(hwndCnr, 174 CM_EXPANDTREE, 175 MPFROMP(pciP), 176 MPVOID); 177 strcpy(szDir,dirname); 178 if(p - szDir >= strlen(szDir)) 179 break; 180 p = strchr(p,'\\'); 181 if(p) { 182 *p = 0; 183 p++; 184 } 185 else 186 break; 186 187 } 187 188 else 188 break;189 break; 189 190 DosSleep(0L); 190 191 } 191 192 pci = FindCnrRecord(hwndCnr, 192 dirname,193 NULL,194 TRUE,195 FALSE,196 TRUE);193 dirname, 194 NULL, 195 TRUE, 196 FALSE, 197 TRUE); 197 198 } 198 199 if(pci && … … 200 201 if(!(pci->rc.flRecordAttr & CRA_CURSORED)) { 201 202 if(collapsefirst) { 202 /* collapse top level of all branches */203 pciP = WinSendMsg(hwndCnr,204 CM_QUERYRECORD,205 MPVOID,206 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER));207 while(pciP && (INT)pciP != -1) {208 if(toupper(*pciP->szFileName) == toupper(*dirname))209 /* collapse all levels if branch is our drive */210 ExpandAll(hwndCnr,211 FALSE,212 pciP);213 else if(pciP->rc.flRecordAttr & CRA_EXPANDED)214 WinSendMsg(hwndCnr,215 CM_COLLAPSETREE,216 MPFROMP(pciP),217 MPVOID);218 pciP = WinSendMsg(hwndCnr,219 CM_QUERYRECORD,220 MPFROMP(pciP),221 MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER));222 }203 /* collapse top level of all branches */ 204 pciP = WinSendMsg(hwndCnr, 205 CM_QUERYRECORD, 206 MPVOID, 207 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER)); 208 while(pciP && (INT)pciP != -1) { 209 if(toupper(*pciP->szFileName) == toupper(*dirname)) 210 /* collapse all levels if branch is our drive */ 211 ExpandAll(hwndCnr, 212 FALSE, 213 pciP); 214 else if(pciP->rc.flRecordAttr & CRA_EXPANDED) 215 WinSendMsg(hwndCnr, 216 CM_COLLAPSETREE, 217 MPFROMP(pciP), 218 MPVOID); 219 pciP = WinSendMsg(hwndCnr, 220 CM_QUERYRECORD, 221 MPFROMP(pciP), 222 MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER)); 223 } 223 224 } 224 225 /* expand all parent branches */ 225 226 pciToSelect = pci; 226 227 for(;;) { 227 pciP = WinSendMsg(hwndCnr,228 CM_QUERYRECORD,229 MPFROMP(pciToSelect),230 MPFROM2SHORT(CMA_PARENT,CMA_ITEMORDER));231 if(pciP && (INT)pciP != -1) {232 if(!(pciP->rc.flRecordAttr & CRA_EXPANDED))233 WinSendMsg(hwndCnr,234 CM_EXPANDTREE,235 MPFROMP(pciP),236 MPVOID);237 pciToSelect = pciP;238 }239 else240 break;241 DosSleep(0L);228 pciP = WinSendMsg(hwndCnr, 229 CM_QUERYRECORD, 230 MPFROMP(pciToSelect), 231 MPFROM2SHORT(CMA_PARENT,CMA_ITEMORDER)); 232 if(pciP && (INT)pciP != -1) { 233 if(!(pciP->rc.flRecordAttr & CRA_EXPANDED)) 234 WinSendMsg(hwndCnr, 235 CM_EXPANDTREE, 236 MPFROMP(pciP), 237 MPVOID); 238 pciToSelect = pciP; 239 } 240 else 241 break; 242 DosSleep(0L); 242 243 } 243 244 } … … 247 248 if(pciToSelect && (INT)pciToSelect != -1) { 248 249 if(fTopDir || maketop) 249 ShowCnrRecord(hwndCnr,250 (PMINIRECORDCORE)pciToSelect);250 ShowCnrRecord(hwndCnr, 251 (PMINIRECORDCORE)pciToSelect); 251 252 if(fSwitchTreeExpand && 252 !(pciToSelect->rc.flRecordAttr & CRA_EXPANDED))253 WinSendMsg(hwndCnr,254 CM_EXPANDTREE,255 MPFROMP(pciToSelect),256 MPVOID);253 !(pciToSelect->rc.flRecordAttr & CRA_EXPANDED)) 254 WinSendMsg(hwndCnr, 255 CM_EXPANDTREE, 256 MPFROMP(pciToSelect), 257 MPVOID); 257 258 if(quickbail) { 258 WinEnableWindowUpdate(hwndCnr,TRUE);259 return;259 WinEnableWindowUpdate(hwndCnr,TRUE); 260 return; 260 261 } 261 262 WinSendMsg(hwndCnr, 262 CM_SETRECORDEMPHASIS,263 MPFROMP(pciToSelect),264 MPFROM2SHORT(TRUE,CRA_SELECTED | CRA_CURSORED));263 CM_SETRECORDEMPHASIS, 264 MPFROMP(pciToSelect), 265 MPFROM2SHORT(TRUE,CRA_SELECTED | CRA_CURSORED)); 265 266 } 266 267 } … … 276 277 case WM_CONTEXTMENU: 277 278 return WinSendMsg(WinQueryWindow(hwnd,QW_PARENT), 278 UM_CONTEXTMENU,279 mp1,280 mp2);279 UM_CONTEXTMENU, 280 mp1, 281 mp2); 281 282 } 282 283 return oldproc(hwnd,msg,mp1,mp2); … … 296 297 case WM_PAINT: 297 298 { 298 MRESULT mr = PFNWPStatic(hwnd,msg,mp1,mp2);299 300 PaintRecessedWindow(hwnd,(HPS)0,FALSE,FALSE);301 return mr;299 MRESULT mr = PFNWPStatic(hwnd,msg,mp1,mp2); 300 301 PaintRecessedWindow(hwnd,(HPS)0,FALSE,FALSE); 302 return mr; 302 303 } 303 304 304 305 case WM_SETFOCUS: 305 306 if(mp2) 306 PostMsg(hwnd,UM_FOCUSME,MPVOID,MPVOID);307 PostMsg(hwnd,UM_FOCUSME,MPVOID,MPVOID); 307 308 break; 308 309 … … 324 325 case WM_ADJUSTWINDOWPOS: 325 326 { 326 SWP *pswp;327 328 pswp = (SWP *)mp1;329 if(ParentIsDesktop(hwnd,(HWND)0)) {330 if(pswp->fl & (SWP_HIDE | SWP_MINIMIZE))331 HideNote();332 }327 SWP *pswp; 328 329 pswp = (SWP *)mp1; 330 if(ParentIsDesktop(hwnd,(HWND)0)) { 331 if(pswp->fl & (SWP_HIDE | SWP_MINIMIZE)) 332 HideNote(); 333 } 333 334 } 334 335 break; … … 336 337 case WM_TRACKFRAME: 337 338 if(!fFreeTree && !ParentIsDesktop(hwnd,(HWND)0)) { 338 switch(SHORT1FROMMP(mp1) & TF_MOVE) {339 case TF_MOVE:340 case TF_LEFT:341 case TF_TOP:342 case (TF_LEFT | TF_BOTTOM):343 case (TF_LEFT | TF_TOP):344 {345 SWP swp;346 347 WinQueryWindowPos(hwnd,&swp);348 if(!(swp.fl & SWP_ACTIVATE))349 WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0,350 SWP_ZORDER | SWP_ACTIVATE);351 }352 return 0;353 }339 switch(SHORT1FROMMP(mp1) & TF_MOVE) { 340 case TF_MOVE: 341 case TF_LEFT: 342 case TF_TOP: 343 case (TF_LEFT | TF_BOTTOM): 344 case (TF_LEFT | TF_TOP): 345 { 346 SWP swp; 347 348 WinQueryWindowPos(hwnd,&swp); 349 if(!(swp.fl & SWP_ACTIVATE)) 350 WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0, 351 SWP_ZORDER | SWP_ACTIVATE); 352 } 353 return 0; 354 } 354 355 } 355 356 break; … … 358 359 if(*(ULONG *)realappname != FM3UL) { 359 360 360 MRESULT mr;361 PRECTL prectl;362 363 mr = CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2);364 365 /*366 * Calculate the position of the client rectangle.367 * Otherwise, we'll see a lot of redraw when we move the368 * client during WM_FORMATFRAME.369 */370 371 if(mr && mp2) {372 prectl = (PRECTL)mp1;373 prectl->yTop -= 22;374 }375 return mr;361 MRESULT mr; 362 PRECTL prectl; 363 364 mr = CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2); 365 366 /* 367 * Calculate the position of the client rectangle. 368 * Otherwise, we'll see a lot of redraw when we move the 369 * client during WM_FORMATFRAME. 370 */ 371 372 if(mr && mp2) { 373 prectl = (PRECTL)mp1; 374 prectl->yTop -= 22; 375 } 376 return mr; 376 377 } 377 378 break; … … 379 380 case WM_FORMATFRAME: 380 381 { 381 SHORT sCount;382 PSWP pswp,pswpClient,pswpNew;383 384 sCount = (SHORT)CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2);385 386 /*387 * Reformat the frame to "squeeze" the client388 */389 390 pswp = (PSWP)mp1;391 {392 SHORT x;393 394 for(x = 0;x < sCount;x++) {395 if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_CLIENT) {396 pswpClient = pswp;397 break;398 }399 pswp++;400 }401 }402 pswpNew = (PSWP)mp1 + sCount;403 *pswpNew = *pswpClient;404 pswpNew->hwnd = WinWindowFromID(hwnd,MAIN_STATUS);405 if(*(ULONG *)realappname == FM3UL) {406 407 PSWP pswpTitlebar = (PSWP)0,pswpMinbutton = (PSWP)0;408 SHORT x;409 410 pswpNew->hwnd = WinWindowFromID(hwnd,IDM_OPENWINDOW);411 pswp = (PSWP)mp1;412 for(x = 0;x < sCount;x++) {413 if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_TITLEBAR)414 pswpTitlebar = pswp;415 else if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_MINMAX)416 pswpMinbutton = pswp;417 if(pswpTitlebar && pswpMinbutton)418 break;419 pswp++;420 }421 pswpNew->cy = pswpMinbutton->cy + 3;422 pswpNew->cx = min(pswpNew->cy,(pswpMinbutton->cx / 2) + 3);423 pswpTitlebar->cx -= (pswpNew->cx + 1);424 pswpNew->x = pswpTitlebar->x + pswpTitlebar->cx;425 pswpNew->y = pswpMinbutton->y - 1;426 }427 else {428 pswpNew->x = pswpClient->x + 3;429 pswpNew->y = (pswpClient->y + pswpClient->cy) - 20;430 pswpNew->cx = pswpClient->cx - 6;431 pswpNew->cy = 18;432 pswpClient->cy -= 22;433 }434 sCount++;435 return MRFROMSHORT(sCount);382 SHORT sCount; 383 PSWP pswp,pswpClient,pswpNew; 384 385 sCount = (SHORT)CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2); 386 387 /* 388 * Reformat the frame to "squeeze" the client 389 */ 390 391 pswp = (PSWP)mp1; 392 { 393 SHORT x; 394 395 for(x = 0;x < sCount;x++) { 396 if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_CLIENT) { 397 pswpClient = pswp; 398 break; 399 } 400 pswp++; 401 } 402 } 403 pswpNew = (PSWP)mp1 + sCount; 404 *pswpNew = *pswpClient; 405 pswpNew->hwnd = WinWindowFromID(hwnd,MAIN_STATUS); 406 if(*(ULONG *)realappname == FM3UL) { 407 408 PSWP pswpTitlebar = (PSWP)0,pswpMinbutton = (PSWP)0; 409 SHORT x; 410 411 pswpNew->hwnd = WinWindowFromID(hwnd,IDM_OPENWINDOW); 412 pswp = (PSWP)mp1; 413 for(x = 0;x < sCount;x++) { 414 if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_TITLEBAR) 415 pswpTitlebar = pswp; 416 else if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_MINMAX) 417 pswpMinbutton = pswp; 418 if(pswpTitlebar && pswpMinbutton) 419 break; 420 pswp++; 421 } 422 pswpNew->cy = pswpMinbutton->cy + 3; 423 pswpNew->cx = min(pswpNew->cy,(pswpMinbutton->cx / 2) + 3); 424 pswpTitlebar->cx -= (pswpNew->cx + 1); 425 pswpNew->x = pswpTitlebar->x + pswpTitlebar->cx; 426 pswpNew->y = pswpMinbutton->y - 1; 427 } 428 else { 429 pswpNew->x = pswpClient->x + 3; 430 pswpNew->y = (pswpClient->y + pswpClient->cy) - 20; 431 pswpNew->cx = pswpClient->cx - 6; 432 pswpNew->cy = 18; 433 pswpClient->cy -= 22; 434 } 435 sCount++; 436 return MRFROMSHORT(sCount); 436 437 } 437 438 438 439 case WM_QUERYFRAMECTLCOUNT: 439 440 { 440 SHORT sCount;441 442 sCount = (SHORT)CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2);443 sCount++;444 return MRFROMSHORT(sCount);441 SHORT sCount; 442 443 sCount = (SHORT)CommonFrameWndProc(TREE_CNR,hwnd,msg,mp1,mp2); 444 sCount++; 445 return MRFROMSHORT(sCount); 445 446 } 446 447 } … … 450 451 451 452 MRESULT EXPENTRY TreeClientWndProc (HWND hwnd,ULONG msg,MPARAM mp1, 452 MPARAM mp2) {453 MPARAM mp2) { 453 454 454 455 switch(msg) { 455 456 case UM_CONTAINERHWND: 456 457 return MRFROMLONG(WinWindowFromID(hwnd, 457 TREE_CNR));458 TREE_CNR)); 458 459 459 460 case UM_VIEWSMENU: 460 461 return MRFROMLONG(CheckMenu(&TreeCnrMenu, 461 TREECNR_POPUP));462 TREECNR_POPUP)); 462 463 463 464 case UM_TIMER: … … 480 481 case WM_COMMAND: 481 482 return WinSendMsg(WinWindowFromID(hwnd,TREE_CNR), 482 msg,483 mp1,484 mp2);483 msg, 484 mp1, 485 mp2); 485 486 486 487 case WM_PSETFOCUS: 487 488 case WM_SETFOCUS: 488 489 if(mp2) 489 PostMsg(hwnd,490 UM_FOCUSME,491 MPVOID,492 MPVOID);490 PostMsg(hwnd, 491 UM_FOCUSME, 492 MPVOID, 493 MPVOID); 493 494 break; 494 495 495 496 case UM_FOCUSME: 496 497 WinSetFocus(HWND_DESKTOP, 497 WinWindowFromID(hwnd,TREE_CNR));498 WinWindowFromID(hwnd,TREE_CNR)); 498 499 break; 499 500 500 501 case WM_ERASEBACKGROUND: 501 502 WinFillRect((HPS)mp1, 502 (PRECTL)mp2,503 0x00d0d0d0);503 (PRECTL)mp2, 504 0x00d0d0d0); 504 505 return 0; 505 506 506 507 case WM_PAINT: 507 508 { 508 HPS hps;509 RECTL rcl;510 511 hps = WinBeginPaint(hwnd,512 (HPS)0,513 NULL);514 if(hps) {515 WinQueryWindowRect(hwnd,516 &rcl);517 WinFillRect(hps,518 &rcl,519 CLR_PALEGRAY);520 PaintRecessedWindow(WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),521 MAIN_STATUS),522 hps,523 FALSE,524 FALSE);525 WinEndPaint(hps);526 }509 HPS hps; 510 RECTL rcl; 511 512 hps = WinBeginPaint(hwnd, 513 (HPS)0, 514 NULL); 515 if(hps) { 516 WinQueryWindowRect(hwnd, 517 &rcl); 518 WinFillRect(hps, 519 &rcl, 520 CLR_PALEGRAY); 521 PaintRecessedWindow(WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT), 522 MAIN_STATUS), 523 hps, 524 FALSE, 525 FALSE); 526 WinEndPaint(hps); 527 } 527 528 } 528 529 break; … … 530 531 case WM_SIZE: 531 532 WinSetWindowPos(WinWindowFromID(hwnd,TREE_CNR), 532 HWND_TOP,533 0,534 0,535 SHORT1FROMMP(mp2),536 SHORT2FROMMP(mp2),537 SWP_SHOW | SWP_MOVE | SWP_SIZE);533 HWND_TOP, 534 0, 535 0, 536 SHORT1FROMMP(mp2), 537 SHORT2FROMMP(mp2), 538 SWP_SHOW | SWP_MOVE | SWP_SIZE); 538 539 if(hwndMain) 539 PostMsg(hwndMain,540 UM_SIZE,541 MPVOID,542 MPVOID);540 PostMsg(hwndMain, 541 UM_SIZE, 542 MPVOID, 543 MPVOID); 543 544 break; 544 545 … … 546 547 case UM_CONTEXTMENU: 547 548 PostMsg(WinWindowFromID(hwnd,TREE_CNR), 548 WM_CONTROL,549 MPFROM2SHORT(TREE_CNR,CN_CONTEXTMENU),550 MPVOID);549 WM_CONTROL, 550 MPFROM2SHORT(TREE_CNR,CN_CONTEXTMENU), 551 MPVOID); 551 552 return 0; 552 553 } … … 559 560 DIRCNRDATA *dcd; 560 561 561 switch(msg) { 562 switch(msg) 563 { 562 564 case WM_CREATE: 563 565 break; 564 566 565 567 case UM_SHOWME: 566 if(mp1) { 567 dcd = INSTDATA(hwnd); 568 if(dcd) { 569 570 BOOL tempsusp,tempfollow,temptop; 571 572 tempsusp = dcd->suspendview; 573 dcd->suspendview = TRUE; 574 tempfollow = fFollowTree; 575 fFollowTree = FALSE; 576 if(mp2) { 577 temptop = fTopDir; 578 fTopDir = TRUE; 579 } 580 ShowTreeRec(dcd->hwndCnr, 581 (CHAR *)mp1, 582 fCollapseFirst, 583 TRUE); 584 dcd->suspendview = tempsusp; 585 fFollowTree = tempfollow; 586 if(mp2) 587 fTopDir = temptop; 588 } 589 free((CHAR *)mp1); 568 if(mp1) 569 { 570 dcd = INSTDATA(hwnd); 571 if(dcd) 572 { 573 BOOL tempsusp,tempfollow,temptop; 574 575 tempsusp = dcd->suspendview; 576 dcd->suspendview = TRUE; 577 tempfollow = fFollowTree; 578 fFollowTree = FALSE; 579 if(mp2) { 580 temptop = fTopDir; 581 fTopDir = TRUE; 582 } 583 ShowTreeRec(dcd->hwndCnr, 584 (CHAR *)mp1, 585 fCollapseFirst, 586 TRUE); 587 dcd->suspendview = tempsusp; 588 fFollowTree = tempfollow; 589 if(mp2) 590 fTopDir = temptop; 591 } 592 free((CHAR *)mp1); 590 593 } 591 594 return 0; … … 598 601 if(fFM2Deletes && dcd) { 599 602 600 LISTINFO *li;601 CNRDRAGINFO cni;602 603 cni.pRecord = NULL;604 cni.pDragInfo = (PDRAGINFO)mp1;605 li = DoFileDrop(dcd->hwndCnr,606 dcd->directory,607 FALSE,608 MPVOID,609 MPFROMP(&cni));610 if(li) {611 li->type = ((fDefaultDeletePerm) ?612 IDM_PERMDELETE :613 IDM_DELETE);614 if(!PostMsg(hwnd,615 UM_MASSACTION,616 MPFROMP(li),617 MPVOID))618 FreeListInfo(li);619 else620 return MRFROMLONG(DRR_SOURCE);621 }603 LISTINFO *li; 604 CNRDRAGINFO cni; 605 606 cni.pRecord = NULL; 607 cni.pDragInfo = (PDRAGINFO)mp1; 608 li = DoFileDrop(dcd->hwndCnr, 609 dcd->directory, 610 FALSE, 611 MPVOID, 612 MPFROMP(&cni)); 613 if(li) { 614 li->type = ((fDefaultDeletePerm) ? 615 IDM_PERMDELETE : 616 IDM_DELETE); 617 if(!PostMsg(hwnd, 618 UM_MASSACTION, 619 MPFROMP(li), 620 MPVOID)) 621 FreeListInfo(li); 622 else 623 return MRFROMLONG(DRR_SOURCE); 624 } 622 625 } 623 626 return MRFROMLONG(DRR_TARGET); … … 627 630 if(dcd) { 628 631 629 BOOL tempsusp = dcd->suspendview;630 631 dcd->suspendview = TRUE;632 ExpandAll(dcd->hwndCnr,633 (SHORT1FROMMP(mp1) == IDM_EXPAND),634 (PCNRITEM)mp2);635 dcd->suspendview = tempsusp;636 PostMsg(dcd->hwndCnr,637 UM_FILTER,638 MPVOID,639 MPVOID);632 BOOL tempsusp = dcd->suspendview; 633 634 dcd->suspendview = TRUE; 635 ExpandAll(dcd->hwndCnr, 636 (SHORT1FROMMP(mp1) == IDM_EXPAND), 637 (PCNRITEM)mp2); 638 dcd->suspendview = tempsusp; 639 PostMsg(dcd->hwndCnr, 640 UM_FILTER, 641 MPVOID, 642 MPVOID); 640 643 } 641 644 return 0; … … 645 648 if(dcd && mp1) { 646 649 647 INT numentries = 0;648 CHAR **list = (CHAR **)mp1;649 650 while(list[numentries])651 numentries++;652 if(numentries)653 UpdateCnrList(dcd->hwndCnr,654 list,655 numentries,656 TRUE,657 dcd);650 INT numentries = 0; 651 CHAR **list = (CHAR **)mp1; 652 653 while(list[numentries]) 654 numentries++; 655 if(numentries) 656 UpdateCnrList(dcd->hwndCnr, 657 list, 658 numentries, 659 TRUE, 660 dcd); 658 661 } 659 662 return 0; … … 662 665 dcd = WinQueryWindowPtr(hwnd,0); 663 666 if(dcd) { 664 dcd->hwndObject = hwnd;665 if(ParentIsDesktop(hwnd,dcd->hwndParent))666 DosSleep(250L);667 dcd->hwndObject = hwnd; 668 if(ParentIsDesktop(hwnd,dcd->hwndParent)) 669 DosSleep(250L); 667 670 } 668 671 return 0; … … 671 674 dcd = WinQueryWindowPtr(hwnd,0); 672 675 if(dcd && 673 hwndStatus && 674 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 675 676 CHAR s[CCHMAXPATH * 2]; 677 PCNRITEM pci = (PCNRITEM)mp1; 678 FSALLOCATE fsa; 679 struct { 680 ULONG serial; 681 CHAR volumelength; 682 CHAR volumelabel[CCHMAXPATH]; 683 } volser; 684 CHAR szBuf[81]; 685 CNRINFO cnri; 686 687 strcpy(s,GetPString(IDS_TREETEXT)); 688 memset(&cnri,0,sizeof(CNRINFO)); 689 cnri.cb = sizeof(CNRINFO); 690 WinSendMsg(dcd->hwndCnr, 691 CM_QUERYCNRINFO, 692 MPFROMP(&cnri), 693 MPFROMLONG(sizeof(CNRINFO))); 694 if(cnri.cRecords) { 695 696 sprintf(s, 697 GetPString(IDS_NUMDRIVESTEXT), 698 cnri.cRecords); 699 if(pci) { 700 if(!(driveflags[toupper(*pci->szFileName) - 'A'] & 701 DRIVE_REMOVABLE) || 702 driveserial[toupper(*pci->szFileName) - 'A'] != -1) { 703 memset(&volser,0,sizeof(volser)); 704 DosError(FERR_DISABLEHARDERR); 705 if(!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 706 FSIL_VOLSER, 707 &volser, 708 (ULONG)sizeof(volser)) && 709 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 710 DosError(FERR_DISABLEHARDERR); 711 if(!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 712 FSIL_ALLOC, 713 &fsa, 714 sizeof(FSALLOCATE))) { 715 strcpy(szBuf," "); 716 CommaFmtULL(szBuf + 2,sizeof(szBuf) - 4, 717 (ULONGLONG)fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector), 718 'K'); 719 strcat(szBuf, 720 GetPString(IDS_KFREETEXT)); 721 } 722 else 723 *szBuf = 0; 724 driveserial[toupper(*pci->szFileName) - 'A'] = volser.serial; 725 sprintf(&s[strlen(s)], 726 GetPString(IDS_TREESTATUSSTARTTEXT), 727 toupper(*pci->szFileName), 728 volser.volumelabel, 729 volser.serial,szBuf); 730 if(!fMoreButtons) { 731 if(*dcd->mask.szMask || 732 (dcd->mask.attrFile != ALLATTRS || 733 ((fFilesInTree || 734 (driveflags[toupper(*pci->szFileName)] & 735 DRIVE_INCLUDEFILES)) ? 736 dcd->mask.antiattr : 737 (dcd->mask.antiattr && 738 dcd->mask.antiattr != FILE_DIRECTORY)))) 739 sprintf(&s[strlen(s)], 740 " (%s)", 741 (*dcd->mask.szMask) ? 742 dcd->mask.szMask : 743 GetPString(IDS_ATTRTEXT)); 744 } 745 } 746 } 747 else { /* find root record and strip it */ 748 pci = FindParentRecord(dcd->hwndCnr,pci); 749 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 750 UnFlesh(dcd->hwndCnr,pci); 751 } 752 } 753 } 754 if(dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) 755 WinSetWindowText(hwndStatus,s); 676 hwndStatus && 677 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 678 679 CHAR s[CCHMAXPATH * 2]; 680 PCNRITEM pci = (PCNRITEM)mp1; 681 FSALLOCATE fsa; 682 struct 683 { 684 ULONG serial; 685 CHAR volumelength; 686 CHAR volumelabel[CCHMAXPATH]; 687 } volser; 688 CHAR tb[64]; 689 CHAR szFree[64]; 690 CNRINFO cnri; 691 692 strcpy(s,GetPString(IDS_TREETEXT)); 693 memset(&cnri,0,sizeof(CNRINFO)); 694 cnri.cb = sizeof(CNRINFO); 695 WinSendMsg(dcd->hwndCnr, 696 CM_QUERYCNRINFO, 697 MPFROMP(&cnri), 698 MPFROMLONG(sizeof(CNRINFO))); 699 if (cnri.cRecords) 700 { 701 sprintf(s, 702 GetPString(IDS_NUMDRIVESTEXT), 703 cnri.cRecords); 704 if (pci) 705 { 706 if (!(driveflags[toupper(*pci->szFileName) - 'A'] & 707 DRIVE_REMOVABLE) || 708 driveserial[toupper(*pci->szFileName) - 'A'] != -1) 709 { 710 memset(&volser,0,sizeof(volser)); 711 DosError(FERR_DISABLEHARDERR); 712 if (!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 713 FSIL_VOLSER, 714 &volser, 715 (ULONG)sizeof(volser)) && 716 dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) 717 { 718 DosError(FERR_DISABLEHARDERR); 719 if (!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 720 FSIL_ALLOC, 721 &fsa, 722 sizeof(FSALLOCATE))) 723 { 724 CommaFmtULL(tb,sizeof(tb), 725 (ULONGLONG)fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector), 726 'M'); 727 sprintf(szFree, " %s %s", 728 tb,GetPString(IDS_FREETEXT)); 729 } 730 else 731 *szFree = 0; 732 driveserial[toupper(*pci->szFileName) - 'A'] = volser.serial; 733 sprintf(&s[strlen(s)], 734 GetPString(IDS_TREESTATUSSTARTTEXT), 735 toupper(*pci->szFileName), 736 volser.volumelabel, 737 volser.serial,szFree); 738 if (!fMoreButtons) 739 { 740 if (*dcd->mask.szMask || 741 (dcd->mask.attrFile != ALLATTRS || 742 ((fFilesInTree || 743 (driveflags[toupper(*pci->szFileName)] & 744 DRIVE_INCLUDEFILES)) ? 745 dcd->mask.antiattr : 746 (dcd->mask.antiattr && 747 dcd->mask.antiattr != FILE_DIRECTORY)))) 748 { 749 sprintf (&s[strlen(s)], 750 " (%s)", 751 (*dcd->mask.szMask) ? 752 dcd->mask.szMask : 753 GetPString(IDS_ATTRTEXT)); 754 } 755 } 756 } 757 } 758 else 759 { 760 /* find root record and strip it */ 761 pci = FindParentRecord(dcd->hwndCnr,pci); 762 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 763 UnFlesh(dcd->hwndCnr,pci); 764 } 765 } 766 } 767 if (dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) 768 WinSetWindowText(hwndStatus,s); 756 769 } 757 770 return 0; … … 763 776 dcd = WinQueryWindowPtr(hwnd,0); 764 777 if(dcd) { 765 WinSendMsg(dcd->hwndCnr,766 CM_REMOVERECORD,767 MPVOID,768 MPFROM2SHORT(0,CMA_FREE | CMA_INVALIDATE | CMA_ERASE));769 WinSendMsg(dcd->hwndCnr,770 CM_SCROLLWINDOW,771 MPFROMSHORT(CMA_VERTICAL),772 MPFROMLONG(-1));773 WinSendMsg(dcd->hwndCnr,774 CM_SCROLLWINDOW,775 MPFROMSHORT(CMA_HORIZONTAL),776 MPFROMLONG(-1));777 FillTreeCnr(dcd->hwndCnr,778 dcd->hwndParent);779 if(fOkayMinimize) {780 PostMsg(dcd->hwndCnr,781 UM_MINIMIZE,782 MPVOID,783 MPVOID);784 fOkayMinimize = FALSE;785 }786 WinSendMsg(dcd->hwndCnr,787 CM_INVALIDATERECORD,788 MPVOID,789 MPFROM2SHORT(0,CMA_ERASE | CMA_REPOSITION));790 PostMsg(dcd->hwndCnr,791 UM_RESCAN,792 MPVOID,793 MPVOID);778 WinSendMsg(dcd->hwndCnr, 779 CM_REMOVERECORD, 780 MPVOID, 781 MPFROM2SHORT(0,CMA_FREE | CMA_INVALIDATE | CMA_ERASE)); 782 WinSendMsg(dcd->hwndCnr, 783 CM_SCROLLWINDOW, 784 MPFROMSHORT(CMA_VERTICAL), 785 MPFROMLONG(-1)); 786 WinSendMsg(dcd->hwndCnr, 787 CM_SCROLLWINDOW, 788 MPFROMSHORT(CMA_HORIZONTAL), 789 MPFROMLONG(-1)); 790 FillTreeCnr(dcd->hwndCnr, 791 dcd->hwndParent); 792 if(fOkayMinimize) { 793 PostMsg(dcd->hwndCnr, 794 UM_MINIMIZE, 795 MPVOID, 796 MPVOID); 797 fOkayMinimize = FALSE; 798 } 799 WinSendMsg(dcd->hwndCnr, 800 CM_INVALIDATERECORD, 801 MPVOID, 802 MPFROM2SHORT(0,CMA_ERASE | CMA_REPOSITION)); 803 PostMsg(dcd->hwndCnr, 804 UM_RESCAN, 805 MPVOID, 806 MPVOID); 794 807 } 795 808 return 0; … … 798 811 if(mp1) { 799 812 800 LISTINFO *li = (LISTINFO *)mp1;801 802 switch(li->type) {803 case IDM_DOITYOURSELF:804 case IDM_APPENDTOCLIP:805 case IDM_SAVETOCLIP:806 case IDM_ARCHIVE:807 case IDM_VIEW:808 case IDM_EDIT:809 case IDM_OBJECT:810 case IDM_SHADOW:811 case IDM_SHADOW2:812 case IDM_PRINT:813 case IDM_ATTRS:814 case IDM_DELETE:815 case IDM_PERMDELETE:816 if(PostMsg(hwnd,817 UM_MASSACTION,818 mp1,819 mp2))820 return (MRESULT)TRUE;821 default:822 if(PostMsg(hwnd,823 UM_ACTION,824 mp1,825 mp2))826 return (MRESULT)TRUE;827 }813 LISTINFO *li = (LISTINFO *)mp1; 814 815 switch(li->type) { 816 case IDM_DOITYOURSELF: 817 case IDM_APPENDTOCLIP: 818 case IDM_SAVETOCLIP: 819 case IDM_ARCHIVE: 820 case IDM_VIEW: 821 case IDM_EDIT: 822 case IDM_OBJECT: 823 case IDM_SHADOW: 824 case IDM_SHADOW2: 825 case IDM_PRINT: 826 case IDM_ATTRS: 827 case IDM_DELETE: 828 case IDM_PERMDELETE: 829 if(PostMsg(hwnd, 830 UM_MASSACTION, 831 mp1, 832 mp2)) 833 return (MRESULT)TRUE; 834 default: 835 if(PostMsg(hwnd, 836 UM_ACTION, 837 mp1, 838 mp2)) 839 return (MRESULT)TRUE; 840 } 828 841 } 829 842 return 0; … … 832 845 if(mp1) { 833 846 834 dcd = WinQueryWindowPtr(hwnd,0);835 if(dcd) {836 837 WORKER *wk;838 839 wk = malloc(sizeof(WORKER));840 if(wk) {841 memset(wk,0,sizeof(WORKER));842 wk->size = sizeof(WORKER);843 wk->hwndCnr = dcd->hwndCnr;844 wk->hwndParent = dcd->hwndParent;845 wk->hwndFrame = dcd->hwndFrame;846 wk->hwndClient = dcd->hwndClient;847 wk->li = (LISTINFO *)mp1;848 strcpy(wk->directory,dcd->directory);849 if(_beginthread(MassAction,850 NULL,851 122880,852 (PVOID)wk) ==853 -1) {854 free(wk);855 FreeListInfo((LISTINFO *)mp1);856 }857 }858 else859 FreeListInfo((LISTINFO *)mp1);860 }847 dcd = WinQueryWindowPtr(hwnd,0); 848 if(dcd) { 849 850 WORKER *wk; 851 852 wk = malloc(sizeof(WORKER)); 853 if(wk) { 854 memset(wk,0,sizeof(WORKER)); 855 wk->size = sizeof(WORKER); 856 wk->hwndCnr = dcd->hwndCnr; 857 wk->hwndParent = dcd->hwndParent; 858 wk->hwndFrame = dcd->hwndFrame; 859 wk->hwndClient = dcd->hwndClient; 860 wk->li = (LISTINFO *)mp1; 861 strcpy(wk->directory,dcd->directory); 862 if(_beginthread(MassAction, 863 NULL, 864 122880, 865 (PVOID)wk) == 866 -1) { 867 free(wk); 868 FreeListInfo((LISTINFO *)mp1); 869 } 870 } 871 else 872 FreeListInfo((LISTINFO *)mp1); 873 } 861 874 } 862 875 return 0; … … 865 878 if(mp1) { 866 879 867 dcd = WinQueryWindowPtr(hwnd,0);868 if(dcd) {869 870 WORKER *wk;871 872 wk = malloc(sizeof(WORKER));873 if(wk) {874 memset(wk,0,sizeof(WORKER));875 wk->size = sizeof(WORKER);876 wk->hwndCnr = dcd->hwndCnr;877 wk->hwndParent = dcd->hwndParent;878 wk->hwndFrame = dcd->hwndFrame;879 wk->hwndClient = dcd->hwndClient;880 wk->li = (LISTINFO *)mp1;881 strcpy(wk->directory,dcd->directory);882 if(_beginthread(Action,883 NULL,884 122880,885 (PVOID)wk) ==886 -1) {887 free(wk);888 FreeListInfo((LISTINFO *)mp1);889 }890 }891 else892 FreeListInfo((LISTINFO *)mp1);893 }880 dcd = WinQueryWindowPtr(hwnd,0); 881 if(dcd) { 882 883 WORKER *wk; 884 885 wk = malloc(sizeof(WORKER)); 886 if(wk) { 887 memset(wk,0,sizeof(WORKER)); 888 wk->size = sizeof(WORKER); 889 wk->hwndCnr = dcd->hwndCnr; 890 wk->hwndParent = dcd->hwndParent; 891 wk->hwndFrame = dcd->hwndFrame; 892 wk->hwndClient = dcd->hwndClient; 893 wk->li = (LISTINFO *)mp1; 894 strcpy(wk->directory,dcd->directory); 895 if(_beginthread(Action, 896 NULL, 897 122880, 898 (PVOID)wk) == 899 -1) { 900 free(wk); 901 FreeListInfo((LISTINFO *)mp1); 902 } 903 } 904 else 905 FreeListInfo((LISTINFO *)mp1); 906 } 894 907 } 895 908 return 0; … … 903 916 dcd = WinQueryWindowPtr(hwnd,0); 904 917 if(dcd) { 905 WinSendMsg(dcd->hwndCnr,906 UM_CLOSE,907 MPFROMLONG(dcd->dontclose != FALSE),908 MPVOID);909 free(dcd);918 WinSendMsg(dcd->hwndCnr, 919 UM_CLOSE, 920 MPFROMLONG(dcd->dontclose != FALSE), 921 MPVOID); 922 free(dcd); 910 923 } 911 924 DosPostEventSem(CompactSem); 912 925 if(!PostMsg((HWND)0, 913 WM_QUIT,914 MPVOID,915 MPVOID))916 WinSendMsg((HWND)0,917 WM_QUIT,918 MPVOID,919 MPVOID);926 WM_QUIT, 927 MPVOID, 928 MPVOID)) 929 WinSendMsg((HWND)0, 930 WM_QUIT, 931 MPVOID, 932 MPVOID); 920 933 break; 921 934 } … … 935 948 case DM_DISCARDOBJECT: 936 949 if(dcd) 937 return WinSendMsg(dcd->hwndObject,938 msg,939 mp1,940 mp2);950 return WinSendMsg(dcd->hwndObject, 951 msg, 952 mp1, 953 mp2); 941 954 else 942 return MRFROMLONG(DRR_TARGET);955 return MRFROMLONG(DRR_TARGET); 943 956 944 957 case WM_CHAR: 945 958 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL)); 946 959 if(SHORT1FROMMP(mp1) & KC_KEYUP) 947 return (MRESULT)TRUE;960 return (MRESULT)TRUE; 948 961 if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) { 949 switch(SHORT2FROMMP(mp2)) {950 case VK_INSERT:951 if((shiftstate & KC_CTRL) == KC_CTRL)952 PostMsg(hwnd,953 WM_COMMAND,954 MPFROM2SHORT(IDM_MKDIR,0),955 MPVOID);956 break;957 case VK_DELETE:958 if((shiftstate & KC_CTRL) == KC_CTRL)959 PostMsg(hwnd,960 WM_COMMAND,961 MPFROM2SHORT(IDM_PERMDELETE,0),962 MPVOID);963 else if((shiftstate & KC_SHIFT) == KC_SHIFT)964 PostMsg(hwnd,965 WM_COMMAND,966 MPFROM2SHORT(IDM_SAVETOCLIP,0),967 MPVOID);968 else969 PostMsg(hwnd,970 WM_COMMAND,971 MPFROM2SHORT(IDM_DELETE,0),972 MPVOID);973 break;974 }962 switch(SHORT2FROMMP(mp2)) { 963 case VK_INSERT: 964 if((shiftstate & KC_CTRL) == KC_CTRL) 965 PostMsg(hwnd, 966 WM_COMMAND, 967 MPFROM2SHORT(IDM_MKDIR,0), 968 MPVOID); 969 break; 970 case VK_DELETE: 971 if((shiftstate & KC_CTRL) == KC_CTRL) 972 PostMsg(hwnd, 973 WM_COMMAND, 974 MPFROM2SHORT(IDM_PERMDELETE,0), 975 MPVOID); 976 else if((shiftstate & KC_SHIFT) == KC_SHIFT) 977 PostMsg(hwnd, 978 WM_COMMAND, 979 MPFROM2SHORT(IDM_SAVETOCLIP,0), 980 MPVOID); 981 else 982 PostMsg(hwnd, 983 WM_COMMAND, 984 MPFROM2SHORT(IDM_DELETE,0), 985 MPVOID); 986 break; 987 } 975 988 } 976 989 if(shiftstate || fNoSearch) 977 break;990 break; 978 991 if(SHORT1FROMMP(mp1) & KC_CHAR) { 979 992 980 ULONG thistime,len;981 SEARCHSTRING srch;982 PCNRITEM pci;983 984 if(!dcd)985 break;986 switch(SHORT1FROMMP(mp2)) {987 case '\x1b':988 case '\r':989 case '\n':990 dcd->lasttime = 0;991 *dcd->szCommonName = 0;992 break;993 default:994 thistime = WinQueryMsgTime(WinQueryAnchorBlock(hwnd));995 if(thistime > dcd->lasttime + 1250)996 *dcd->szCommonName = 0;997 dcd->lasttime = thistime;998 if(SHORT1FROMMP(mp2) == ' ' && !*dcd->szCommonName)999 break;993 ULONG thistime,len; 994 SEARCHSTRING srch; 995 PCNRITEM pci; 996 997 if(!dcd) 998 break; 999 switch(SHORT1FROMMP(mp2)) { 1000 case '\x1b': 1001 case '\r': 1002 case '\n': 1003 dcd->lasttime = 0; 1004 *dcd->szCommonName = 0; 1005 break; 1006 default: 1007 thistime = WinQueryMsgTime(WinQueryAnchorBlock(hwnd)); 1008 if(thistime > dcd->lasttime + 1250) 1009 *dcd->szCommonName = 0; 1010 dcd->lasttime = thistime; 1011 if(SHORT1FROMMP(mp2) == ' ' && !*dcd->szCommonName) 1012 break; 1000 1013 KbdRetry: 1001 len = strlen(dcd->szCommonName);1002 if(len >= CCHMAXPATH - 1) {1003 *dcd->szCommonName = 0;1004 len = 0;1005 }1006 dcd->szCommonName[len] = toupper(SHORT1FROMMP(mp2));1007 dcd->szCommonName[len + 1] = 0;1008 memset(&srch,0,sizeof(SEARCHSTRING));1009 srch.cb = (ULONG)sizeof(SEARCHSTRING);1010 srch.pszSearch = (PSZ)dcd->szCommonName;1011 srch.fsPrefix = TRUE;1012 srch.fsCaseSensitive = FALSE;1013 srch.usView = CV_ICON;1014 pci = WinSendMsg(hwnd,1015 CM_SEARCHSTRING,1016 MPFROMP(&srch),1017 MPFROMLONG(CMA_FIRST));1018 if(pci && (INT)pci != -1) {1019 /* make found item current item */1020 WinSendMsg(hwnd,1021 CM_SETRECORDEMPHASIS,1022 MPFROMP(pci),1023 MPFROM2SHORT(TRUE,CRA_CURSORED));1024 /* make sure that record shows in viewport */1025 ShowCnrRecord(hwnd,1026 (PMINIRECORDCORE)pci);1027 return (MRESULT)TRUE;1028 }1029 else {1030 if(SHORT1FROMMP(mp2) == ' ') {1031 dcd->szCommonName[len] = 0;1032 break;1033 }1034 *dcd->szCommonName = 0;1035 dcd->lasttime = 0;1036 if(len) // retry as first letter if no match1037 goto KbdRetry;1038 }1039 break;1040 }1014 len = strlen(dcd->szCommonName); 1015 if(len >= CCHMAXPATH - 1) { 1016 *dcd->szCommonName = 0; 1017 len = 0; 1018 } 1019 dcd->szCommonName[len] = toupper(SHORT1FROMMP(mp2)); 1020 dcd->szCommonName[len + 1] = 0; 1021 memset(&srch,0,sizeof(SEARCHSTRING)); 1022 srch.cb = (ULONG)sizeof(SEARCHSTRING); 1023 srch.pszSearch = (PSZ)dcd->szCommonName; 1024 srch.fsPrefix = TRUE; 1025 srch.fsCaseSensitive = FALSE; 1026 srch.usView = CV_ICON; 1027 pci = WinSendMsg(hwnd, 1028 CM_SEARCHSTRING, 1029 MPFROMP(&srch), 1030 MPFROMLONG(CMA_FIRST)); 1031 if(pci && (INT)pci != -1) { 1032 /* make found item current item */ 1033 WinSendMsg(hwnd, 1034 CM_SETRECORDEMPHASIS, 1035 MPFROMP(pci), 1036 MPFROM2SHORT(TRUE,CRA_CURSORED)); 1037 /* make sure that record shows in viewport */ 1038 ShowCnrRecord(hwnd, 1039 (PMINIRECORDCORE)pci); 1040 return (MRESULT)TRUE; 1041 } 1042 else { 1043 if(SHORT1FROMMP(mp2) == ' ') { 1044 dcd->szCommonName[len] = 0; 1045 break; 1046 } 1047 *dcd->szCommonName = 0; 1048 dcd->lasttime = 0; 1049 if(len) // retry as first letter if no match 1050 goto KbdRetry; 1051 } 1052 break; 1053 } 1041 1054 } 1042 1055 break; … … 1051 1064 case UM_TIMER: 1052 1065 if(dcd && dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent) && 1053 hwndStatus2) { 1054 1055 FILEFINDBUF3 ffb; 1056 ULONG nm = 1L; 1057 HDIR hdir = HDIR_CREATE; 1058 1059 if(*SwapperDat) { 1060 if(!DosFindFirst(SwapperDat, 1061 &hdir, 1062 FILE_NORMAL | FILE_HIDDEN | 1063 FILE_SYSTEM | FILE_ARCHIVED | FILE_READONLY, 1064 &ffb, 1065 sizeof(ffb), 1066 &nm, 1067 FIL_STANDARD)) { 1068 1069 CHAR tb[39],tm[39],tpm[39],s[163]; 1070 ULONG amem = 0; 1071 1072 priority_bumped(); 1073 DosFindClose(hdir); 1074 *tm = *tpm = 0; 1075 if(!DosQuerySysInfo(QSV_TOTAVAILMEM, 1076 QSV_TOTAVAILMEM, 1077 (PVOID)&amem, 1078 (ULONG)sizeof(amem))) { 1079 CommaFmtULL(tpm,sizeof(tpm),amem,'K'); 1080 } 1081 if(!Dos16MemAvail(&amem)) 1082 CommaFmtULL(tm,sizeof(tm),amem,'K'); 1083 CommaFmtULL(tb,sizeof(tb),ffb.cbFile,'K'); 1084 sprintf(s," %s %sk%s%s%s%s", 1085 GetPString(IDS_SWAPFILETEXT), 1086 tb, 1087 (*tm) ? GetPString(IDS_TREEMEMTEXT) : NullStr, 1088 tm, 1089 (*tpm) ? "/" : NullStr, 1090 tpm); 1091 WinSetWindowText(hwndStatus2,s); 1092 } 1093 else 1094 WinSetWindowText(hwndStatus2,NullStr); 1095 } 1096 else 1097 WinSetWindowText(hwndStatus2,NullStr); 1066 hwndStatus2) 1067 { 1068 FILEFINDBUF3 ffb; 1069 ULONG nm = 1L; 1070 HDIR hdir = HDIR_CREATE; 1071 1072 if(*SwapperDat) 1073 { 1074 if (!DosFindFirst(SwapperDat, 1075 &hdir, 1076 FILE_NORMAL | FILE_HIDDEN | 1077 FILE_SYSTEM | FILE_ARCHIVED | FILE_READONLY, 1078 &ffb, 1079 sizeof(ffb), 1080 &nm, 1081 FIL_STANDARD)) 1082 { 1083 CHAR tb[39],tm[39],tpm[39],s[163]; 1084 ULONG amem; 1085 1086 priority_bumped(); 1087 DosFindClose(hdir); 1088 if (!DosQuerySysInfo(QSV_TOTAVAILMEM, 1089 QSV_TOTAVAILMEM, 1090 (PVOID)&amem, 1091 sizeof(amem))) 1092 { 1093 CommaFmtULL(tpm,sizeof(tpm),amem,'M'); 1094 } 1095 else 1096 *tpm = 0; 1097 if (!Dos16MemAvail(&amem)) 1098 CommaFmtULL(tm,sizeof(tm),amem,'M'); 1099 else 1100 *tm = 0; 1101 CommaFmtULL(tb,sizeof(tb),ffb.cbFile,'M'); 1102 sprintf(s," %s %s%s%s%s%s", 1103 GetPString(IDS_SWAPFILETEXT), 1104 tb, 1105 *tm ? GetPString(IDS_TREEMEMTEXT) : NullStr, 1106 tm, 1107 *tpm ? "/" : NullStr, 1108 tpm); 1109 WinSetWindowText(hwndStatus2,s); 1110 } 1111 else 1112 WinSetWindowText(hwndStatus2,NullStr); 1113 } 1114 else 1115 WinSetWindowText(hwndStatus2,NullStr); 1098 1116 } 1099 1117 if(msg == UM_TIMER) 1100 return 0;1118 return 0; 1101 1119 break; 1102 1120 1103 1121 case WM_PRESPARAMCHANGED: 1104 1122 PresParamChanged(hwnd, 1105 "TreeCnr",1106 mp1,1107 mp2);1123 "TreeCnr", 1124 mp1, 1125 mp2); 1108 1126 break; 1109 1127 1110 1128 case UM_FILESMENU: 1111 1129 { 1112 PCNRITEM pci;1113 HWND menuHwnd = (HWND)0;1114 1115 pci = (PCNRITEM)CurrentRecord(hwnd);1116 if(pci && (INT)pci != -1) {1117 if(IsRoot(pci->szFileName))1118 menuHwnd = CheckMenu(&TreeMenu,1119 TREE_POPUP);1120 else {1121 menuHwnd = CheckMenu(&DirMenu,1122 DIR_POPUP);1130 PCNRITEM pci; 1131 HWND menuHwnd = (HWND)0; 1132 1133 pci = (PCNRITEM)CurrentRecord(hwnd); 1134 if(pci && (INT)pci != -1) { 1135 if(IsRoot(pci->szFileName)) 1136 menuHwnd = CheckMenu(&TreeMenu, 1137 TREE_POPUP); 1138 else { 1139 menuHwnd = CheckMenu(&DirMenu, 1140 DIR_POPUP); 1123 1141 // WinEnableMenuItem(DirMenu, 1124 1142 // IDM_TREE, 1125 1143 // FALSE); 1126 }1127 if(!(pci->attrFile & FILE_DIRECTORY))1128 menuHwnd = CheckMenu(&FileMenu,1129 FILE_POPUP);1130 }1131 return MRFROMLONG(menuHwnd);1144 } 1145 if(!(pci->attrFile & FILE_DIRECTORY)) 1146 menuHwnd = CheckMenu(&FileMenu, 1147 FILE_POPUP); 1148 } 1149 return MRFROMLONG(menuHwnd); 1132 1150 } 1133 1151 … … 1135 1153 if(dcd && mp1 && mp2) { 1136 1154 1137 COMPARE *cmp;1138 CHAR *leftdir = (CHAR *)mp1,*rightdir = (CHAR *)mp2;1139 1140 if(!IsFile(leftdir) &&1141 !IsFile(rightdir)) {1142 cmp = malloc(sizeof(COMPARE));1143 if(cmp) {1144 memset(cmp,0,sizeof(COMPARE));1145 cmp->size = sizeof(COMPARE);1146 strcpy(cmp->leftdir,leftdir);1147 strcpy(cmp->rightdir,rightdir);1148 cmp->hwndParent = dcd->hwndParent;1149 cmp->dcd.hwndParent = dcd->hwndParent;1150 WinDlgBox(HWND_DESKTOP,1151 HWND_DESKTOP,1152 CompareDlgProc,1153 FM3ModHandle,1154 COMP_FRAME,1155 MPFROMP(cmp));1156 }1157 }1155 COMPARE *cmp; 1156 CHAR *leftdir = (CHAR *)mp1,*rightdir = (CHAR *)mp2; 1157 1158 if(!IsFile(leftdir) && 1159 !IsFile(rightdir)) { 1160 cmp = malloc(sizeof(COMPARE)); 1161 if(cmp) { 1162 memset(cmp,0,sizeof(COMPARE)); 1163 cmp->size = sizeof(COMPARE); 1164 strcpy(cmp->leftdir,leftdir); 1165 strcpy(cmp->rightdir,rightdir); 1166 cmp->hwndParent = dcd->hwndParent; 1167 cmp->dcd.hwndParent = dcd->hwndParent; 1168 WinDlgBox(HWND_DESKTOP, 1169 HWND_DESKTOP, 1170 CompareDlgProc, 1171 FM3ModHandle, 1172 COMP_FRAME, 1173 MPFROMP(cmp)); 1174 } 1175 } 1158 1176 } 1159 1177 return 0; … … 1161 1179 case UM_UPDATERECORDLIST: 1162 1180 if(dcd && mp1) 1163 WinSendMsg(dcd->hwndObject,1164 msg,1165 mp1,1166 mp2);1181 WinSendMsg(dcd->hwndObject, 1182 msg, 1183 mp1, 1184 mp2); 1167 1185 return 0; 1168 1186 … … 1170 1188 if(dcd && mp1) { 1171 1189 1172 CHAR *filename;1173 1174 filename = mp1;1175 if(filename)1176 UpdateCnrRecord(hwnd,1177 filename,1178 TRUE,1179 dcd);1190 CHAR *filename; 1191 1192 filename = mp1; 1193 if(filename) 1194 UpdateCnrRecord(hwnd, 1195 filename, 1196 TRUE, 1197 dcd); 1180 1198 } 1181 1199 return 0; … … 1183 1201 case WM_SETFOCUS: 1184 1202 if(dcd && hwndStatus && mp2) { 1185 WinSendMsg(hwnd,1186 UM_RESCAN,1187 MPVOID,1188 MPVOID);1189 if(hwndMain)1190 PostMsg(hwndMain,1191 UM_ADVISEFOCUS,1192 MPFROMLONG(dcd->hwndFrame),1193 MPVOID);1203 WinSendMsg(hwnd, 1204 UM_RESCAN, 1205 MPVOID, 1206 MPVOID); 1207 if(hwndMain) 1208 PostMsg(hwndMain, 1209 UM_ADVISEFOCUS, 1210 MPFROMLONG(dcd->hwndFrame), 1211 MPVOID); 1194 1212 } 1195 1213 break; … … 1197 1215 case UM_RESCAN: 1198 1216 if(dcd && dcd->hwndFrame == WinQueryActiveWindow(dcd->hwndParent)) { 1199 /*1200 * put name of our window on status line1201 */1202 1203 PCNRITEM pci = NULL;1204 CHAR str[CCHMAXPATH + 6];1205 1206 if(fAutoView && hwndMain) {1207 pci = WinSendMsg(hwnd,1208 CM_QUERYRECORDEMPHASIS,1209 MPFROMLONG(CMA_FIRST),1210 MPFROMSHORT(CRA_CURSORED));1211 if(pci && (INT)pci != -1 && fComments &&1212 !(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_SLOW))1213 WinSendMsg(hwndMain,1214 UM_LOADFILE,1215 MPFROMP(pci->szFileName),1216 MPVOID);1217 else1218 WinSendMsg(hwndMain,1219 UM_LOADFILE,1220 MPVOID,1221 MPVOID);1222 }1223 if(!fAutoView ||1224 !hwndMain)1225 pci = (PCNRITEM)WinSendMsg(hwnd,1226 CM_QUERYRECORDEMPHASIS,1227 MPFROMLONG(CMA_FIRST),1228 MPFROMSHORT(CRA_CURSORED));1229 if((INT)pci == -1)1230 pci = NULL;1231 if(pci) {1232 if(*(ULONG *)realappname == FM3UL) {1233 sprintf(str,1234 "%s %s",1235 GetPString(IDS_DTTEXT),1236 pci->szFileName);1237 WinSetWindowText(dcd->hwndFrame,1238 str);1239 WinSetWindowText(WinWindowFromID(dcd->hwndFrame,FID_TITLEBAR),1240 str);1241 }1242 else1243 WinSetWindowText(WinWindowFromID(dcd->hwndFrame,1244 MAIN_STATUS),1245 pci->szFileName);1246 if(fMoreButtons && hwndName) {1247 WinSetWindowText(hwndName,1248 pci->szFileName);1249 sprintf(str,1250 "%04u/%02u/%02u %02u:%02u:%02u",1251 pci->date.year,1252 pci->date.month,1253 pci->date.day,1254 pci->time.hours,1255 pci->time.minutes,1256 pci->time.seconds);1257 WinSetWindowText(hwndDate,1258 str);1259 WinSetWindowText(hwndAttr,1260 pci->pszDispAttr);1261 }1262 }1263 PostMsg(dcd->hwndObject,1264 UM_RESCAN2,1265 MPFROMP(pci),1266 MPVOID);1267 if(hwndStatus2)1268 PostMsg(hwnd,1269 UM_TIMER,1270 MPVOID,1271 MPVOID);1217 /* 1218 * put name of our window on status line 1219 */ 1220 1221 PCNRITEM pci = NULL; 1222 CHAR str[CCHMAXPATH + 6]; 1223 1224 if(fAutoView && hwndMain) { 1225 pci = WinSendMsg(hwnd, 1226 CM_QUERYRECORDEMPHASIS, 1227 MPFROMLONG(CMA_FIRST), 1228 MPFROMSHORT(CRA_CURSORED)); 1229 if(pci && (INT)pci != -1 && fComments && 1230 !(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_SLOW)) 1231 WinSendMsg(hwndMain, 1232 UM_LOADFILE, 1233 MPFROMP(pci->szFileName), 1234 MPVOID); 1235 else 1236 WinSendMsg(hwndMain, 1237 UM_LOADFILE, 1238 MPVOID, 1239 MPVOID); 1240 } 1241 if(!fAutoView || 1242 !hwndMain) 1243 pci = (PCNRITEM)WinSendMsg(hwnd, 1244 CM_QUERYRECORDEMPHASIS, 1245 MPFROMLONG(CMA_FIRST), 1246 MPFROMSHORT(CRA_CURSORED)); 1247 if((INT)pci == -1) 1248 pci = NULL; 1249 if(pci) { 1250 if(*(ULONG *)realappname == FM3UL) { 1251 sprintf(str, 1252 "%s %s", 1253 GetPString(IDS_DTTEXT), 1254 pci->szFileName); 1255 WinSetWindowText(dcd->hwndFrame, 1256 str); 1257 WinSetWindowText(WinWindowFromID(dcd->hwndFrame,FID_TITLEBAR), 1258 str); 1259 } 1260 else 1261 WinSetWindowText(WinWindowFromID(dcd->hwndFrame, 1262 MAIN_STATUS), 1263 pci->szFileName); 1264 if(fMoreButtons && hwndName) { 1265 WinSetWindowText(hwndName, 1266 pci->szFileName); 1267 sprintf(str, 1268 "%04u/%02u/%02u %02u:%02u:%02u", 1269 pci->date.year, 1270 pci->date.month, 1271 pci->date.day, 1272 pci->time.hours, 1273 pci->time.minutes, 1274 pci->time.seconds); 1275 WinSetWindowText(hwndDate, 1276 str); 1277 WinSetWindowText(hwndAttr, 1278 pci->pszDispAttr); 1279 } 1280 } 1281 PostMsg(dcd->hwndObject, 1282 UM_RESCAN2, 1283 MPFROMP(pci), 1284 MPVOID); 1285 if(hwndStatus2) 1286 PostMsg(hwnd, 1287 UM_TIMER, 1288 MPVOID, 1289 MPVOID); 1272 1290 } 1273 1291 return 0; … … 1275 1293 case UM_SETUP2: 1276 1294 { 1277 PCNRITEM pci = (PCNRITEM)mp1;1278 1279 if(pci)1280 NotifyError(pci->szFileName,1281 (ULONG)mp2);1295 PCNRITEM pci = (PCNRITEM)mp1; 1296 1297 if(pci) 1298 NotifyError(pci->szFileName, 1299 (ULONG)mp2); 1282 1300 } 1283 1301 return 0; … … 1285 1303 case UM_SETUP: 1286 1304 if(dcd) { 1287 if(!dcd->hwndObject) {1288 /*1289 * first time through -- set things up1290 */1291 1292 CNRINFO cnri;1293 1294 RestorePresParams(hwnd,"TreeCnr");1295 memset(&cnri,0,sizeof(CNRINFO));1296 cnri.cb = sizeof(CNRINFO);1297 WinSendMsg(hwnd,1298 CM_QUERYCNRINFO,1299 MPFROMP(&cnri),1300 MPFROMLONG(sizeof(CNRINFO)));1301 cnri.cyLineSpacing = 0;1302 cnri.cxTreeIndent = 12L;1303 cnri.pSortRecord = (PVOID)SortTreeCnr;1304 cnri.flWindowAttr &= (~(CV_NAME | CV_DETAIL | CV_TEXT));1305 cnri.flWindowAttr |= (CV_TREE | CA_TREELINE | CV_ICON | CV_MINI);1306 {1307 ULONG size = sizeof(ULONG);1308 1309 PrfQueryProfileData(fmprof,1310 appname,1311 "TreeflWindowAttr",1312 (PVOID)&cnri.flWindowAttr,1313 &size);1314 size = sizeof(MASK);1315 *dcd->mask.prompt = 0;1316 if(!*dcd->mask.szMask && !dcd->mask.attrFile) {1317 if(PrfQueryProfileSize(fmprof,1318 appname,1319 "TreeFilter",1320 &size) &&1321 size) {1322 PrfQueryProfileData(fmprof,1323 appname,1324 "TreeFilter",1325 &dcd->mask,1326 &size);1327 SetMask(dcd->mask.szMask,1328 &dcd->mask);1329 }1330 else1331 dcd->mask.attrFile = (FILE_READONLY | FILE_NORMAL |1332 FILE_ARCHIVED | FILE_DIRECTORY |1333 FILE_HIDDEN | FILE_SYSTEM);1334 }1335 dcd->mask.attrFile |= FILE_DIRECTORY;1336 }1337 cnri.flWindowAttr &= (~(CA_MIXEDTARGETEMPH | CA_ORDEREDTARGETEMPH));1338 cnri.flWindowAttr |= CV_FLOW;1339 dcd->flWindowAttr = cnri.flWindowAttr;1340 WinSendMsg(hwnd,1341 CM_SETCNRINFO,1342 MPFROMP(&cnri),1343 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING |1344 CMA_CXTREEINDENT | CMA_PSORTRECORD));1305 if(!dcd->hwndObject) { 1306 /* 1307 * first time through -- set things up 1308 */ 1309 1310 CNRINFO cnri; 1311 1312 RestorePresParams(hwnd,"TreeCnr"); 1313 memset(&cnri,0,sizeof(CNRINFO)); 1314 cnri.cb = sizeof(CNRINFO); 1315 WinSendMsg(hwnd, 1316 CM_QUERYCNRINFO, 1317 MPFROMP(&cnri), 1318 MPFROMLONG(sizeof(CNRINFO))); 1319 cnri.cyLineSpacing = 0; 1320 cnri.cxTreeIndent = 12L; 1321 cnri.pSortRecord = (PVOID)SortTreeCnr; 1322 cnri.flWindowAttr &= (~(CV_NAME | CV_DETAIL | CV_TEXT)); 1323 cnri.flWindowAttr |= (CV_TREE | CA_TREELINE | CV_ICON | CV_MINI); 1324 { 1325 ULONG size = sizeof(ULONG); 1326 1327 PrfQueryProfileData(fmprof, 1328 appname, 1329 "TreeflWindowAttr", 1330 (PVOID)&cnri.flWindowAttr, 1331 &size); 1332 size = sizeof(MASK); 1333 *dcd->mask.prompt = 0; 1334 if(!*dcd->mask.szMask && !dcd->mask.attrFile) { 1335 if(PrfQueryProfileSize(fmprof, 1336 appname, 1337 "TreeFilter", 1338 &size) && 1339 size) { 1340 PrfQueryProfileData(fmprof, 1341 appname, 1342 "TreeFilter", 1343 &dcd->mask, 1344 &size); 1345 SetMask(dcd->mask.szMask, 1346 &dcd->mask); 1347 } 1348 else 1349 dcd->mask.attrFile = (FILE_READONLY | FILE_NORMAL | 1350 FILE_ARCHIVED | FILE_DIRECTORY | 1351 FILE_HIDDEN | FILE_SYSTEM); 1352 } 1353 dcd->mask.attrFile |= FILE_DIRECTORY; 1354 } 1355 cnri.flWindowAttr &= (~(CA_MIXEDTARGETEMPH | CA_ORDEREDTARGETEMPH)); 1356 cnri.flWindowAttr |= CV_FLOW; 1357 dcd->flWindowAttr = cnri.flWindowAttr; 1358 WinSendMsg(hwnd, 1359 CM_SETCNRINFO, 1360 MPFROMP(&cnri), 1361 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING | 1362 CMA_CXTREEINDENT | CMA_PSORTRECORD)); 1345 1363 // CMA_TREEICON)); 1346 if(_beginthread(MakeObjWin,1347 NULL,1348 327680,1349 (PVOID)dcd) ==1350 -1) {1351 PostMsg(hwnd,1352 WM_CLOSE,1353 MPVOID,1354 MPVOID);1355 return 0;1356 }1357 else1358 DosSleep(1L);1359 }1364 if(_beginthread(MakeObjWin, 1365 NULL, 1366 327680, 1367 (PVOID)dcd) == 1368 -1) { 1369 PostMsg(hwnd, 1370 WM_CLOSE, 1371 MPVOID, 1372 MPVOID); 1373 return 0; 1374 } 1375 else 1376 DosSleep(1L); 1377 } 1360 1378 } 1361 1379 else { 1362 PostMsg(hwnd,1363 WM_CLOSE,1364 MPVOID,1365 MPVOID);1366 return 0;1380 PostMsg(hwnd, 1381 WM_CLOSE, 1382 MPVOID, 1383 MPVOID); 1384 return 0; 1367 1385 } 1368 1386 return 0; … … 1371 1389 case WM_CHORD: 1372 1390 { 1373 PCNRITEM pci = NULL;1374 QUERYRECFROMRECT pqr;1375 NOTIFYRECORDENTER nr;1376 BOOL tbool = fDCOpens;1377 RECTL rectl;1378 POINTL ptl;1379 1380 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL));1381 if(msg == WM_CHORD) {1382 if(!WinQueryPointerPos(HWND_DESKTOP,1383 &ptl))1384 break;1385 WinMapWindowPoints(HWND_DESKTOP,1386 hwnd,1387 &ptl,1388 1L);1389 }1390 else {1391 ptl.x = SHORT1FROMMP(mp1);1392 ptl.y = SHORT2FROMMP(mp1);1393 }1394 memset(&rectl,0,sizeof(rectl));1395 memset(&pqr,0,sizeof(pqr));1396 pqr.cb = sizeof(pqr);1397 pqr.rect.xLeft = ptl.x - 1;1398 pqr.rect.xRight = ptl.x + 1;1399 pqr.rect.yTop = ptl.y + 1;1400 pqr.rect.yBottom = ptl.y - 1;1401 pqr.fsSearch = CMA_PARTIAL;1402 pci = (PCNRITEM)WinSendMsg(hwnd,1403 CM_QUERYRECORDFROMRECT,1404 MPFROMLONG(CMA_FIRST),1405 MPFROMP(&pqr));1406 if(pci && (INT)pci != -1) {1407 memset(&nr,0,sizeof(nr));1408 nr.hwndCnr = hwnd;1409 nr.pRecord = (PRECORDCORE)pci;1410 fDCOpens = TRUE;1411 WinSendMsg(hwnd,1412 WM_CONTROL,1413 MPFROM2SHORT(WinQueryWindowUShort(hwnd,1414 QWS_ID),1415 CN_ENTER),1416 MPFROMP(&nr));1417 PostMsg(hwnd,1418 UM_RESTOREDC,1419 MPFROMLONG(tbool),1420 MPVOID);1421 }1422 else1423 DosBeep(50,100);1391 PCNRITEM pci = NULL; 1392 QUERYRECFROMRECT pqr; 1393 NOTIFYRECORDENTER nr; 1394 BOOL tbool = fDCOpens; 1395 RECTL rectl; 1396 POINTL ptl; 1397 1398 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL)); 1399 if(msg == WM_CHORD) { 1400 if(!WinQueryPointerPos(HWND_DESKTOP, 1401 &ptl)) 1402 break; 1403 WinMapWindowPoints(HWND_DESKTOP, 1404 hwnd, 1405 &ptl, 1406 1L); 1407 } 1408 else { 1409 ptl.x = SHORT1FROMMP(mp1); 1410 ptl.y = SHORT2FROMMP(mp1); 1411 } 1412 memset(&rectl,0,sizeof(rectl)); 1413 memset(&pqr,0,sizeof(pqr)); 1414 pqr.cb = sizeof(pqr); 1415 pqr.rect.xLeft = ptl.x - 1; 1416 pqr.rect.xRight = ptl.x + 1; 1417 pqr.rect.yTop = ptl.y + 1; 1418 pqr.rect.yBottom = ptl.y - 1; 1419 pqr.fsSearch = CMA_PARTIAL; 1420 pci = (PCNRITEM)WinSendMsg(hwnd, 1421 CM_QUERYRECORDFROMRECT, 1422 MPFROMLONG(CMA_FIRST), 1423 MPFROMP(&pqr)); 1424 if(pci && (INT)pci != -1) { 1425 memset(&nr,0,sizeof(nr)); 1426 nr.hwndCnr = hwnd; 1427 nr.pRecord = (PRECORDCORE)pci; 1428 fDCOpens = TRUE; 1429 WinSendMsg(hwnd, 1430 WM_CONTROL, 1431 MPFROM2SHORT(WinQueryWindowUShort(hwnd, 1432 QWS_ID), 1433 CN_ENTER), 1434 MPFROMP(&nr)); 1435 PostMsg(hwnd, 1436 UM_RESTOREDC, 1437 MPFROMLONG(tbool), 1438 MPVOID); 1439 } 1440 else 1441 DosBeep(50,100); 1424 1442 } 1425 1443 break; … … 1432 1450 DosError(FERR_DISABLEHARDERR); 1433 1451 if(dcd) { 1434 switch(SHORT2FROMMP(mp1)) { 1435 case CN_BEGINEDIT: 1436 case CN_REALLOCPSZ: 1437 case CN_ENDEDIT: 1438 { 1439 MRESULT mre; 1440 1441 mre = CnrDirectEdit(hwnd, 1442 msg, 1443 mp1, 1444 mp2); 1445 if(mre != (MRESULT)-1) 1446 return mre; 1447 } 1448 break; 1449 1450 case CN_DRAGLEAVE: 1451 if(mp2) { 1452 1453 PDRAGINFO pDInfo; 1454 1455 pDInfo = ((PCNRDRAGINFO)mp2)->pDragInfo; 1456 DrgAccessDraginfo(pDInfo); 1457 DrgFreeDraginfo(pDInfo); 1458 } 1459 return 0; 1460 1461 case CN_DRAGAFTER: 1462 case CN_DRAGOVER: 1463 if(mp2) { 1464 1465 PDRAGITEM pDItem; 1466 PDRAGINFO pDInfo; 1467 PCNRITEM pci; 1468 USHORT uso; 1469 1470 pDInfo = ((PCNRDRAGINFO)mp2)->pDragInfo; 1471 DrgAccessDraginfo(pDInfo); 1472 pci = (PCNRITEM)((PCNRDRAGINFO)mp2)->pRecord; 1473 if((INT)pci == -1) 1474 pci = NULL; 1475 if(pci && 1476 (pci->flags & (RECFLAGS_ENV | RECFLAGS_NODROP))) { 1477 DrgFreeDraginfo(pDInfo); 1478 return MRFROM2SHORT(DOR_NODROP,0); 1479 } 1480 if(!pDInfo) { 1481 DrgFreeDraginfo(pDInfo); 1482 return MRFROM2SHORT(DOR_NODROP,0); 1483 } 1484 if(!WinIsWindowEnabled(dcd->hwndFrame)) { 1485 DrgFreeDraginfo(pDInfo); 1486 return MRFROM2SHORT(DOR_NODROP,0); 1487 } 1488 if(pci) { 1489 uso = pDInfo->usOperation; 1490 if(uso == DO_DEFAULT) 1491 uso = (fCopyDefault) ? DO_COPY : DO_MOVE; 1492 if(!(pci->attrFile & FILE_DIRECTORY)) { 1493 if(uso != DO_LINK && 1494 uso != DO_COPY && 1495 uso != DO_MOVE) { 1496 DrgFreeDraginfo(pDInfo); 1497 return(MRFROM2SHORT(DOR_NODROP,0)); 1498 } 1499 if(uso != DO_LINK && 1500 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1501 DRIVE_NOTWRITEABLE)) { 1502 1503 ARC_TYPE *info; 1504 1505 if(!fQuickArcFind && 1506 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1507 DRIVE_SLOW)) 1508 info = find_type(pci->szFileName,NULL); 1509 else 1510 info = quick_find_type(pci->szFileName,NULL); 1511 if(!info || ((uso == DO_MOVE && !info->move) || 1512 (uso == DO_COPY && !info->create))) { 1513 DrgFreeDraginfo(pDInfo); 1514 return(MRFROM2SHORT(DOR_NODROP,0)); 1515 } 1516 } 1517 } 1518 } 1519 pDItem = DrgQueryDragitemPtr(pDInfo, /* Access DRAGITEM */ 1520 0); /* Index to DRAGITEM */ 1521 if(DrgVerifyRMF(pDItem, /* Check valid rendering */ 1522 DRM_OS2FILE, /* mechanisms and data */ 1523 NULL) || 1524 DrgVerifyRMF(pDItem,DRM_FM2ARCMEMBER, 1525 DRF_FM2ARCHIVE)) { /* formats */ 1526 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ 1527 if(!pci || (INT)pci == -1) 1528 return MRFROM2SHORT(DOR_DROP,DO_MOVE); 1529 if(driveflags[toupper(*pci->szFileName) - 'A'] & 1530 DRIVE_NOTWRITEABLE) 1531 return MRFROM2SHORT(DOR_DROP,DO_LINK); 1532 if(toupper(*pci->szFileName) < 'C') 1533 return MRFROM2SHORT(DOR_DROP,DO_COPY); 1534 return MRFROM2SHORT(DOR_DROP, /* Return okay to drop */ 1535 ((fCopyDefault) ? 1536 DO_COPY : 1537 DO_MOVE)); 1538 } 1539 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ 1540 } 1541 return MRFROM2SHORT(DOR_NODROP,0); /* Drop not valid */ 1542 1543 case CN_INITDRAG: 1544 { 1545 PCNRDRAGINIT pcd = (PCNRDRAGINIT)mp2; 1546 PCNRITEM pci; 1547 1548 if(pcd) { 1549 pci = (PCNRITEM)pcd->pRecord; 1550 if(!pci || (INT)pci == -1 || 1551 (pci->flags & (RECFLAGS_ENV | RECFLAGS_NODRAG))) { 1552 DosBeep(50,100); 1553 break; 1554 } 1555 if(hwndStatus2) 1556 WinSetWindowText(hwndStatus2,(IsRoot(pci->szFileName)) ? 1557 GetPString(IDS_DRAGROOTTEXT) : 1558 (pci->attrFile & FILE_DIRECTORY) ? 1559 GetPString(IDS_DRAGDIRTEXT) : 1560 GetPString(IDS_DRAGFILETEXT)); 1561 DoFileDrag(hwnd, 1562 dcd->hwndObject, 1563 mp2, 1564 NULL, 1565 NULL, 1566 TRUE); 1567 if(hwndStatus2) 1568 PostMsg(hwnd, 1569 UM_RESCAN, 1570 MPVOID, 1571 MPVOID); 1572 } 1573 } 1574 return 0; 1575 1576 case CN_DROP: 1577 { 1578 LISTINFO *li; 1579 ULONG action = UM_ACTION; 1580 1581 li = DoFileDrop(hwnd, 1582 NULL, 1583 TRUE, 1584 mp1, 1585 mp2); 1586 if(li) { 1587 if(!*li->targetpath) { 1588 if(li->list[0]) 1589 PMMkDir(dcd->hwndParent, 1590 li->list[0], 1591 FALSE); 1592 FreeListInfo(li); 1593 return 0; 1594 } 1595 if(li->list && 1596 li->list[0] && 1597 IsRoot(li->list[0])) 1598 li->type = DO_LINK; 1599 else if(fDragndropDlg && 1600 (!*li->arcname || !li->info)) { 1601 1602 CHECKLIST cl; 1603 1604 memset(&cl,0,sizeof(cl)); 1605 cl.size = sizeof(cl); 1606 cl.flags = li->type; 1607 cl.list = li->list; 1608 cl.cmd = li->type; 1609 cl.prompt = li->targetpath; 1610 li->type = WinDlgBox(HWND_DESKTOP, 1611 dcd->hwndParent, 1612 DropListProc, 1613 FM3ModHandle, 1614 DND_FRAME, 1615 MPFROMP(&cl)); 1616 if(!li->type) { 1617 FreeListInfo(li); 1618 return 0; 1619 } 1620 li->list = cl.list; 1621 if(!li->list || !li->list[0]) { 1622 FreeListInfo(li); 1623 return 0; 1624 } 1625 } 1626 switch(li->type) { 1627 case DO_LINK: 1628 if(fLinkSetsIcon) { 1629 li->type = IDM_SETICON; 1630 action = UM_MASSACTION; 1631 } 1632 else 1633 li->type = IDM_COMPARE; 1634 break; 1635 case DND_EXTRACT: 1636 if(*li->targetpath && 1637 !IsFile(li->targetpath)) 1638 li->type = IDM_EXTRACT; 1639 break; 1640 case DND_MOVE: 1641 li->type = IDM_MOVE; 1642 if(*li->targetpath && 1643 IsFile(li->targetpath) == 1) { 1644 action = UM_MASSACTION; 1645 li->type = IDM_ARCHIVEM; 1646 } 1647 break; 1648 case DND_WILDMOVE: 1649 li->type = IDM_WILDMOVE; 1650 if(*li->targetpath && 1651 IsFile(li->targetpath) == 1) { 1652 action = UM_MASSACTION; 1653 li->type = IDM_ARCHIVEM; 1654 } 1655 break; 1656 case DND_OBJECT: 1657 li->type = IDM_OBJECT; 1658 action = UM_MASSACTION; 1659 break; 1660 case DND_SHADOW: 1661 li->type = IDM_SHADOW; 1662 action = UM_MASSACTION; 1663 break; 1664 case DND_COMPARE: 1665 li->type = IDM_COMPARE; 1666 break; 1667 case DND_SETICON: 1668 action = UM_MASSACTION; 1669 li->type = IDM_SETICON; 1670 break; 1671 case DND_COPY: 1672 li->type = IDM_COPY; 1673 if(*li->targetpath && 1674 IsFile(li->targetpath) == 1) { 1675 action = UM_MASSACTION; 1676 li->type = IDM_ARCHIVE; 1677 } 1678 break; 1679 case DND_WILDCOPY: 1680 li->type = IDM_WILDCOPY; 1681 if(*li->targetpath && 1682 IsFile(li->targetpath) == 1) { 1683 action = UM_MASSACTION; 1684 li->type = IDM_ARCHIVE; 1685 } 1686 break; 1687 default: 1688 if(*li->arcname && li->info) { 1689 action = UM_MASSACTION; 1690 li->type = (li->type == DO_MOVE) ? 1691 IDM_FAKEEXTRACTM : 1692 IDM_FAKEEXTRACT; 1693 } 1694 else if(*li->targetpath && 1695 IsFile(li->targetpath) == 1) { 1696 action = UM_MASSACTION; 1697 li->type = (li->type == DO_MOVE) ? 1698 IDM_ARCHIVEM : 1699 IDM_ARCHIVE; 1700 } 1701 else 1702 li->type = (li->type == DO_MOVE) ? 1703 IDM_MOVE : 1704 IDM_COPY; 1705 break; 1706 } 1707 if(!li->list || !li->list[0]) 1708 FreeListInfo(li); 1709 else if(!PostMsg(dcd->hwndObject, 1710 action, 1711 MPFROMP(li), 1712 MPVOID)) 1713 FreeListInfo(li); 1714 else { 1715 1716 USHORT usop = 0; 1717 1718 switch(li->type) { 1719 case IDM_COPY: 1720 case IDM_WILDCOPY: 1721 usop = DO_COPY; 1722 break; 1723 case IDM_MOVE: 1724 case IDM_WILDMOVE: 1725 case IDM_ARCHIVEM: 1726 usop = DO_MOVE; 1727 break; 1728 } 1729 if(usop) 1730 return MRFROM2SHORT(DOR_DROP,usop); 1731 } 1732 } 1733 } 1734 return 0; 1735 1736 case CN_EMPHASIS: 1737 if(!fDummy) { 1738 1739 PNOTIFYRECORDEMPHASIS pre = mp2; 1740 1741 if(pre->fEmphasisMask & CRA_SELECTED) { 1742 if(pre->pRecord->flRecordAttr & CRA_SELECTED) { 1743 if(((PCNRITEM)(pre->pRecord))->attrFile & FILE_DIRECTORY) { 1744 PostMsg(hwnd, 1745 UM_RESCAN, 1746 MPVOID, 1747 MPVOID); 1748 if(fFollowTree && 1749 !(driveflags[toupper(*((PCNRITEM)pre->pRecord)->szFileName) - 'A'] & 1750 DRIVE_INVALID)) { 1751 if(!LastDir && 1752 !ParentIsDesktop(hwnd,dcd->hwndParent)) 1753 LastDir = FindDirCnr(dcd->hwndParent); 1754 if(LastDir) { 1755 1756 NOTIFYRECORDENTER pri; 1757 BOOL tbool = fDCOpens; 1758 1759 fDCOpens = FALSE; 1760 memset(&pri,0,sizeof(pri)); 1761 pri.hwndCnr = hwnd; 1762 pri.fKey = FALSE; 1763 pri.pRecord = pre->pRecord; 1764 WinSendMsg(hwnd, 1765 WM_CONTROL, 1766 MPFROM2SHORT(SHORT1FROMMP(mp1), 1767 CN_ENTER), 1768 MPFROMP(&pri)); 1769 fDCOpens = tbool; 1770 } 1771 } 1772 if(*(ULONG *)realappname != FM3UL) 1773 WinSetWindowText(WinWindowFromID(dcd->hwndFrame, 1774 MAIN_STATUS), 1775 ((PCNRITEM)(pre->pRecord))->szFileName); 1776 } 1777 } 1778 } 1779 } 1780 break; 1781 1782 case CN_CONTEXTMENU: 1783 { 1784 PCNRITEM pci = (PCNRITEM)mp2; 1785 BOOL wasFollowing; 1786 1787 DosEnterCritSec(); 1788 wasFollowing = fFollowTree; 1789 fFollowTree = FALSE; 1790 DosExitCritSec(); 1791 if(pci && (INT)pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 1792 WinSendMsg(hwnd, 1793 CM_SETRECORDEMPHASIS, 1794 MPFROMP(pci), 1795 MPFROM2SHORT(TRUE,CRA_CURSORED)); 1796 MarkAll(hwnd, 1797 FALSE, 1798 FALSE, 1799 TRUE); 1800 if(!(pci->attrFile & FILE_DIRECTORY)) 1801 dcd->hwndLastMenu = CheckMenu(&FileMenu,FILE_POPUP); 1802 else if(!IsRoot(pci->szFileName)) 1803 dcd->hwndLastMenu = CheckMenu(&DirMenu,DIR_POPUP); 1804 else 1805 dcd->hwndLastMenu = CheckMenu(&TreeMenu,TREE_POPUP); 1806 } 1807 else { 1808 dcd->hwndLastMenu = CheckMenu(&TreeCnrMenu,TREECNR_POPUP); 1809 if(dcd->hwndLastMenu && !dcd->cnremphasized) { 1810 WinSendMsg(hwnd,CM_SETRECORDEMPHASIS,MPVOID, 1811 MPFROM2SHORT(TRUE,CRA_SOURCE)); 1812 dcd->cnremphasized = TRUE; 1813 } 1814 } 1815 if(dcd->hwndLastMenu) { 1816 if(dcd->hwndLastMenu == DirMenu) 1817 WinEnableMenuItem(DirMenu,IDM_TREE,FALSE); 1818 if(dcd->hwndLastMenu == TreeCnrMenu) { 1819 if(dcd->flWindowAttr & CV_MINI) 1820 WinCheckMenuItem(dcd->hwndLastMenu,IDM_MINIICONS,TRUE); 1821 } 1822 if(!PopupMenu(hwnd,hwnd,dcd->hwndLastMenu)) { 1823 if(dcd->cnremphasized) { 1824 WinSendMsg(hwnd,CM_SETRECORDEMPHASIS,MPVOID, 1825 MPFROM2SHORT(FALSE,CRA_SOURCE)); 1826 dcd->cnremphasized = FALSE; 1827 } 1828 if(dcd->hwndLastMenu != TreeCnrMenu) 1829 MarkAll(hwnd,TRUE,FALSE,TRUE); 1830 } 1831 } 1832 DosEnterCritSec(); 1833 fFollowTree = wasFollowing; 1834 DosExitCritSec(); 1835 } 1836 break; 1837 1838 case CN_ENTER: 1839 if(mp2) 1452 switch(SHORT2FROMMP(mp1)) { 1453 case CN_BEGINEDIT: 1454 case CN_REALLOCPSZ: 1455 case CN_ENDEDIT: 1840 1456 { 1841 PCNRITEM pci = (PCNRITEM)((PNOTIFYRECORDENTER)mp2)->pRecord; 1842 1843 PostMsg(hwnd,UM_ENTER,MPFROMP(pci),MPVOID); 1844 } 1845 break; 1846 1847 case CN_COLLAPSETREE: 1848 case CN_EXPANDTREE: 1849 { 1850 PCNRITEM pci = (PCNRITEM)mp2; 1851 1852 if(pci && (INT)pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 1853 if(driveflags[toupper(*pci->szFileName) - 'A'] & 1854 DRIVE_REMOVABLE) { 1855 1856 struct { 1857 ULONG serial; 1858 CHAR volumelength; 1859 CHAR volumelabel[CCHMAXPATH]; 1860 } volser; 1861 1862 memset(&volser,0,sizeof(volser)); 1863 DosError(FERR_DISABLEHARDERR); 1864 if(!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 1865 FSIL_VOLSER,&volser, 1866 (ULONG)sizeof(volser))) { 1867 if(SHORT2FROMMP(mp1) == CN_COLLAPSETREE && 1868 !volser.serial || 1869 driveserial[toupper(*pci->szFileName) - 'A'] != 1870 volser.serial) 1871 UnFlesh(hwnd,pci); 1872 if(SHORT2FROMMP(mp1) != CN_COLLAPSETREE || 1873 (!volser.serial || 1874 driveserial[toupper(*pci->szFileName) - 'A'] != 1875 volser.serial)) { 1876 if(Flesh(hwnd,pci) && 1877 SHORT2FROMMP(mp1) == CN_EXPANDTREE && 1878 !dcd->suspendview && fTopDir) 1879 PostMsg(hwnd,UM_TOPDIR,MPFROMP(pci),MPVOID); 1880 } 1881 driveserial[toupper(*pci->szFileName) - 'A'] = 1882 volser.serial; 1883 } 1884 else { 1885 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 1886 UnFlesh(hwnd,pci); 1887 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 1888 DosBeep(250,100); 1889 } 1890 } 1891 else if(SHORT2FROMMP(mp1) == CN_EXPANDTREE) { 1892 if(Flesh(hwnd,pci) && !dcd->suspendview && fTopDir) 1893 PostMsg(hwnd,UM_TOPDIR,MPFROMP(pci),MPVOID); 1894 } 1895 if(SHORT2FROMMP(mp1) == CN_EXPANDTREE && !dcd->suspendview) 1896 WinSendMsg(hwnd,UM_FILTER,MPVOID,MPVOID); 1897 } 1898 } 1899 break; 1900 } 1457 MRESULT mre; 1458 1459 mre = CnrDirectEdit(hwnd, 1460 msg, 1461 mp1, 1462 mp2); 1463 if(mre != (MRESULT)-1) 1464 return mre; 1465 } 1466 break; 1467 1468 case CN_DRAGLEAVE: 1469 if(mp2) { 1470 1471 PDRAGINFO pDInfo; 1472 1473 pDInfo = ((PCNRDRAGINFO)mp2)->pDragInfo; 1474 DrgAccessDraginfo(pDInfo); 1475 DrgFreeDraginfo(pDInfo); 1476 } 1477 return 0; 1478 1479 case CN_DRAGAFTER: 1480 case CN_DRAGOVER: 1481 if(mp2) { 1482 1483 PDRAGITEM pDItem; 1484 PDRAGINFO pDInfo; 1485 PCNRITEM pci; 1486 USHORT uso; 1487 1488 pDInfo = ((PCNRDRAGINFO)mp2)->pDragInfo; 1489 DrgAccessDraginfo(pDInfo); 1490 pci = (PCNRITEM)((PCNRDRAGINFO)mp2)->pRecord; 1491 if((INT)pci == -1) 1492 pci = NULL; 1493 if(pci && 1494 (pci->flags & (RECFLAGS_ENV | RECFLAGS_NODROP))) { 1495 DrgFreeDraginfo(pDInfo); 1496 return MRFROM2SHORT(DOR_NODROP,0); 1497 } 1498 if(!pDInfo) { 1499 DrgFreeDraginfo(pDInfo); 1500 return MRFROM2SHORT(DOR_NODROP,0); 1501 } 1502 if(!WinIsWindowEnabled(dcd->hwndFrame)) { 1503 DrgFreeDraginfo(pDInfo); 1504 return MRFROM2SHORT(DOR_NODROP,0); 1505 } 1506 if(pci) { 1507 uso = pDInfo->usOperation; 1508 if(uso == DO_DEFAULT) 1509 uso = (fCopyDefault) ? DO_COPY : DO_MOVE; 1510 if(!(pci->attrFile & FILE_DIRECTORY)) { 1511 if(uso != DO_LINK && 1512 uso != DO_COPY && 1513 uso != DO_MOVE) { 1514 DrgFreeDraginfo(pDInfo); 1515 return(MRFROM2SHORT(DOR_NODROP,0)); 1516 } 1517 if(uso != DO_LINK && 1518 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1519 DRIVE_NOTWRITEABLE)) { 1520 1521 ARC_TYPE *info; 1522 1523 if(!fQuickArcFind && 1524 !(driveflags[toupper(*pci->szFileName) - 'A'] & 1525 DRIVE_SLOW)) 1526 info = find_type(pci->szFileName,NULL); 1527 else 1528 info = quick_find_type(pci->szFileName,NULL); 1529 if(!info || ((uso == DO_MOVE && !info->move) || 1530 (uso == DO_COPY && !info->create))) { 1531 DrgFreeDraginfo(pDInfo); 1532 return(MRFROM2SHORT(DOR_NODROP,0)); 1533 } 1534 } 1535 } 1536 } 1537 pDItem = DrgQueryDragitemPtr(pDInfo, /* Access DRAGITEM */ 1538 0); /* Index to DRAGITEM */ 1539 if(DrgVerifyRMF(pDItem, /* Check valid rendering */ 1540 DRM_OS2FILE, /* mechanisms and data */ 1541 NULL) || 1542 DrgVerifyRMF(pDItem,DRM_FM2ARCMEMBER, 1543 DRF_FM2ARCHIVE)) { /* formats */ 1544 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ 1545 if(!pci || (INT)pci == -1) 1546 return MRFROM2SHORT(DOR_DROP,DO_MOVE); 1547 if(driveflags[toupper(*pci->szFileName) - 'A'] & 1548 DRIVE_NOTWRITEABLE) 1549 return MRFROM2SHORT(DOR_DROP,DO_LINK); 1550 if(toupper(*pci->szFileName) < 'C') 1551 return MRFROM2SHORT(DOR_DROP,DO_COPY); 1552 return MRFROM2SHORT(DOR_DROP, /* Return okay to drop */ 1553 ((fCopyDefault) ? 1554 DO_COPY : 1555 DO_MOVE)); 1556 } 1557 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ 1558 } 1559 return MRFROM2SHORT(DOR_NODROP,0); /* Drop not valid */ 1560 1561 case CN_INITDRAG: 1562 { 1563 PCNRDRAGINIT pcd = (PCNRDRAGINIT)mp2; 1564 PCNRITEM pci; 1565 1566 if(pcd) { 1567 pci = (PCNRITEM)pcd->pRecord; 1568 if(!pci || (INT)pci == -1 || 1569 (pci->flags & (RECFLAGS_ENV | RECFLAGS_NODRAG))) { 1570 DosBeep(50,100); 1571 break; 1572 } 1573 if(hwndStatus2) 1574 WinSetWindowText(hwndStatus2,(IsRoot(pci->szFileName)) ? 1575 GetPString(IDS_DRAGROOTTEXT) : 1576 (pci->attrFile & FILE_DIRECTORY) ? 1577 GetPString(IDS_DRAGDIRTEXT) : 1578 GetPString(IDS_DRAGFILETEXT)); 1579 DoFileDrag(hwnd, 1580 dcd->hwndObject, 1581 mp2, 1582 NULL, 1583 NULL, 1584 TRUE); 1585 if(hwndStatus2) 1586 PostMsg(hwnd, 1587 UM_RESCAN, 1588 MPVOID, 1589 MPVOID); 1590 } 1591 } 1592 return 0; 1593 1594 case CN_DROP: 1595 { 1596 LISTINFO *li; 1597 ULONG action = UM_ACTION; 1598 1599 li = DoFileDrop(hwnd, 1600 NULL, 1601 TRUE, 1602 mp1, 1603 mp2); 1604 if(li) { 1605 if(!*li->targetpath) { 1606 if(li->list[0]) 1607 PMMkDir(dcd->hwndParent, 1608 li->list[0], 1609 FALSE); 1610 FreeListInfo(li); 1611 return 0; 1612 } 1613 if(li->list && 1614 li->list[0] && 1615 IsRoot(li->list[0])) 1616 li->type = DO_LINK; 1617 else if(fDragndropDlg && 1618 (!*li->arcname || !li->info)) { 1619 1620 CHECKLIST cl; 1621 1622 memset(&cl,0,sizeof(cl)); 1623 cl.size = sizeof(cl); 1624 cl.flags = li->type; 1625 cl.list = li->list; 1626 cl.cmd = li->type; 1627 cl.prompt = li->targetpath; 1628 li->type = WinDlgBox(HWND_DESKTOP, 1629 dcd->hwndParent, 1630 DropListProc, 1631 FM3ModHandle, 1632 DND_FRAME, 1633 MPFROMP(&cl)); 1634 if(!li->type) { 1635 FreeListInfo(li); 1636 return 0; 1637 } 1638 li->list = cl.list; 1639 if(!li->list || !li->list[0]) { 1640 FreeListInfo(li); 1641 return 0; 1642 } 1643 } 1644 switch(li->type) { 1645 case DO_LINK: 1646 if(fLinkSetsIcon) { 1647 li->type = IDM_SETICON; 1648 action = UM_MASSACTION; 1649 } 1650 else 1651 li->type = IDM_COMPARE; 1652 break; 1653 case DND_EXTRACT: 1654 if(*li->targetpath && 1655 !IsFile(li->targetpath)) 1656 li->type = IDM_EXTRACT; 1657 break; 1658 case DND_MOVE: 1659 li->type = IDM_MOVE; 1660 if(*li->targetpath && 1661 IsFile(li->targetpath) == 1) { 1662 action = UM_MASSACTION; 1663 li->type = IDM_ARCHIVEM; 1664 } 1665 break; 1666 case DND_WILDMOVE: 1667 li->type = IDM_WILDMOVE; 1668 if(*li->targetpath && 1669 IsFile(li->targetpath) == 1) { 1670 action = UM_MASSACTION; 1671 li->type = IDM_ARCHIVEM; 1672 } 1673 break; 1674 case DND_OBJECT: 1675 li->type = IDM_OBJECT; 1676 action = UM_MASSACTION; 1677 break; 1678 case DND_SHADOW: 1679 li->type = IDM_SHADOW; 1680 action = UM_MASSACTION; 1681 break; 1682 case DND_COMPARE: 1683 li->type = IDM_COMPARE; 1684 break; 1685 case DND_SETICON: 1686 action = UM_MASSACTION; 1687 li->type = IDM_SETICON; 1688 break; 1689 case DND_COPY: 1690 li->type = IDM_COPY; 1691 if(*li->targetpath && 1692 IsFile(li->targetpath) == 1) { 1693 action = UM_MASSACTION; 1694 li->type = IDM_ARCHIVE; 1695 } 1696 break; 1697 case DND_WILDCOPY: 1698 li->type = IDM_WILDCOPY; 1699 if(*li->targetpath && 1700 IsFile(li->targetpath) == 1) { 1701 action = UM_MASSACTION; 1702 li->type = IDM_ARCHIVE; 1703 } 1704 break; 1705 default: 1706 if(*li->arcname && li->info) { 1707 action = UM_MASSACTION; 1708 li->type = (li->type == DO_MOVE) ? 1709 IDM_FAKEEXTRACTM : 1710 IDM_FAKEEXTRACT; 1711 } 1712 else if(*li->targetpath && 1713 IsFile(li->targetpath) == 1) { 1714 action = UM_MASSACTION; 1715 li->type = (li->type == DO_MOVE) ? 1716 IDM_ARCHIVEM : 1717 IDM_ARCHIVE; 1718 } 1719 else 1720 li->type = (li->type == DO_MOVE) ? 1721 IDM_MOVE : 1722 IDM_COPY; 1723 break; 1724 } 1725 if(!li->list || !li->list[0]) 1726 FreeListInfo(li); 1727 else if(!PostMsg(dcd->hwndObject, 1728 action, 1729 MPFROMP(li), 1730 MPVOID)) 1731 FreeListInfo(li); 1732 else { 1733 1734 USHORT usop = 0; 1735 1736 switch(li->type) { 1737 case IDM_COPY: 1738 case IDM_WILDCOPY: 1739 usop = DO_COPY; 1740 break; 1741 case IDM_MOVE: 1742 case IDM_WILDMOVE: 1743 case IDM_ARCHIVEM: 1744 usop = DO_MOVE; 1745 break; 1746 } 1747 if(usop) 1748 return MRFROM2SHORT(DOR_DROP,usop); 1749 } 1750 } 1751 } 1752 return 0; 1753 1754 case CN_EMPHASIS: 1755 if(!fDummy) { 1756 1757 PNOTIFYRECORDEMPHASIS pre = mp2; 1758 1759 if(pre->fEmphasisMask & CRA_SELECTED) { 1760 if(pre->pRecord->flRecordAttr & CRA_SELECTED) { 1761 if(((PCNRITEM)(pre->pRecord))->attrFile & FILE_DIRECTORY) { 1762 PostMsg(hwnd, 1763 UM_RESCAN, 1764 MPVOID, 1765 MPVOID); 1766 if(fFollowTree && 1767 !(driveflags[toupper(*((PCNRITEM)pre->pRecord)->szFileName) - 'A'] & 1768 DRIVE_INVALID)) { 1769 if(!LastDir && 1770 !ParentIsDesktop(hwnd,dcd->hwndParent)) 1771 LastDir = FindDirCnr(dcd->hwndParent); 1772 if(LastDir) { 1773 1774 NOTIFYRECORDENTER pri; 1775 BOOL tbool = fDCOpens; 1776 1777 fDCOpens = FALSE; 1778 memset(&pri,0,sizeof(pri)); 1779 pri.hwndCnr = hwnd; 1780 pri.fKey = FALSE; 1781 pri.pRecord = pre->pRecord; 1782 WinSendMsg(hwnd, 1783 WM_CONTROL, 1784 MPFROM2SHORT(SHORT1FROMMP(mp1), 1785 CN_ENTER), 1786 MPFROMP(&pri)); 1787 fDCOpens = tbool; 1788 } 1789 } 1790 if(*(ULONG *)realappname != FM3UL) 1791 WinSetWindowText(WinWindowFromID(dcd->hwndFrame, 1792 MAIN_STATUS), 1793 ((PCNRITEM)(pre->pRecord))->szFileName); 1794 } 1795 } 1796 } 1797 } 1798 break; 1799 1800 case CN_CONTEXTMENU: 1801 { 1802 PCNRITEM pci = (PCNRITEM)mp2; 1803 BOOL wasFollowing; 1804 1805 DosEnterCritSec(); 1806 wasFollowing = fFollowTree; 1807 fFollowTree = FALSE; 1808 DosExitCritSec(); 1809 if(pci && (INT)pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 1810 WinSendMsg(hwnd, 1811 CM_SETRECORDEMPHASIS, 1812 MPFROMP(pci), 1813 MPFROM2SHORT(TRUE,CRA_CURSORED)); 1814 MarkAll(hwnd, 1815 FALSE, 1816 FALSE, 1817 TRUE); 1818 if(!(pci->attrFile & FILE_DIRECTORY)) 1819 dcd->hwndLastMenu = CheckMenu(&FileMenu,FILE_POPUP); 1820 else if(!IsRoot(pci->szFileName)) 1821 dcd->hwndLastMenu = CheckMenu(&DirMenu,DIR_POPUP); 1822 else 1823 dcd->hwndLastMenu = CheckMenu(&TreeMenu,TREE_POPUP); 1824 } 1825 else { 1826 dcd->hwndLastMenu = CheckMenu(&TreeCnrMenu,TREECNR_POPUP); 1827 if(dcd->hwndLastMenu && !dcd->cnremphasized) { 1828 WinSendMsg(hwnd,CM_SETRECORDEMPHASIS,MPVOID, 1829 MPFROM2SHORT(TRUE,CRA_SOURCE)); 1830 dcd->cnremphasized = TRUE; 1831 } 1832 } 1833 if(dcd->hwndLastMenu) { 1834 if(dcd->hwndLastMenu == DirMenu) 1835 WinEnableMenuItem(DirMenu,IDM_TREE,FALSE); 1836 if(dcd->hwndLastMenu == TreeCnrMenu) { 1837 if(dcd->flWindowAttr & CV_MINI) 1838 WinCheckMenuItem(dcd->hwndLastMenu,IDM_MINIICONS,TRUE); 1839 } 1840 if(!PopupMenu(hwnd,hwnd,dcd->hwndLastMenu)) { 1841 if(dcd->cnremphasized) { 1842 WinSendMsg(hwnd,CM_SETRECORDEMPHASIS,MPVOID, 1843 MPFROM2SHORT(FALSE,CRA_SOURCE)); 1844 dcd->cnremphasized = FALSE; 1845 } 1846 if(dcd->hwndLastMenu != TreeCnrMenu) 1847 MarkAll(hwnd,TRUE,FALSE,TRUE); 1848 } 1849 } 1850 DosEnterCritSec(); 1851 fFollowTree = wasFollowing; 1852 DosExitCritSec(); 1853 } 1854 break; 1855 1856 case CN_ENTER: 1857 if(mp2) 1858 { 1859 PCNRITEM pci = (PCNRITEM)((PNOTIFYRECORDENTER)mp2)->pRecord; 1860 1861 PostMsg(hwnd,UM_ENTER,MPFROMP(pci),MPVOID); 1862 } 1863 break; 1864 1865 case CN_COLLAPSETREE: 1866 case CN_EXPANDTREE: 1867 { 1868 PCNRITEM pci = (PCNRITEM)mp2; 1869 1870 if(pci && (INT)pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 1871 if(driveflags[toupper(*pci->szFileName) - 'A'] & 1872 DRIVE_REMOVABLE) { 1873 1874 struct { 1875 ULONG serial; 1876 CHAR volumelength; 1877 CHAR volumelabel[CCHMAXPATH]; 1878 } volser; 1879 1880 memset(&volser,0,sizeof(volser)); 1881 DosError(FERR_DISABLEHARDERR); 1882 if(!DosQueryFSInfo(toupper(*pci->szFileName) - '@', 1883 FSIL_VOLSER,&volser, 1884 (ULONG)sizeof(volser))) { 1885 if(SHORT2FROMMP(mp1) == CN_COLLAPSETREE && 1886 !volser.serial || 1887 driveserial[toupper(*pci->szFileName) - 'A'] != 1888 volser.serial) 1889 UnFlesh(hwnd,pci); 1890 if(SHORT2FROMMP(mp1) != CN_COLLAPSETREE || 1891 (!volser.serial || 1892 driveserial[toupper(*pci->szFileName) - 'A'] != 1893 volser.serial)) { 1894 if(Flesh(hwnd,pci) && 1895 SHORT2FROMMP(mp1) == CN_EXPANDTREE && 1896 !dcd->suspendview && fTopDir) 1897 PostMsg(hwnd,UM_TOPDIR,MPFROMP(pci),MPVOID); 1898 } 1899 driveserial[toupper(*pci->szFileName) - 'A'] = 1900 volser.serial; 1901 } 1902 else { 1903 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 1904 UnFlesh(hwnd,pci); 1905 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 1906 DosBeep(250,100); 1907 } 1908 } 1909 else if(SHORT2FROMMP(mp1) == CN_EXPANDTREE) { 1910 if(Flesh(hwnd,pci) && !dcd->suspendview && fTopDir) 1911 PostMsg(hwnd,UM_TOPDIR,MPFROMP(pci),MPVOID); 1912 } 1913 if(SHORT2FROMMP(mp1) == CN_EXPANDTREE && !dcd->suspendview) 1914 WinSendMsg(hwnd,UM_FILTER,MPVOID,MPVOID); 1915 } 1916 } 1917 break; 1918 } 1901 1919 } 1902 1920 return 0; … … 1905 1923 if(mp1) { 1906 1924 1907 LISTINFO *li = mp1;1908 ULONG action = (ULONG)mp2;1909 1910 if(!li->list || !li->list[0] ||1911 !PostMsg(dcd->hwndObject,1912 action,1913 MPFROMP(li),1914 MPVOID))1915 FreeListInfo(li);1925 LISTINFO *li = mp1; 1926 ULONG action = (ULONG)mp2; 1927 1928 if(!li->list || !li->list[0] || 1929 !PostMsg(dcd->hwndObject, 1930 action, 1931 MPFROMP(li), 1932 MPVOID)) 1933 FreeListInfo(li); 1916 1934 } 1917 1935 return 0; … … 1920 1938 if(mp1 && dcd) { 1921 1939 1922 CHAR *dir;1923 1924 dir = strdup((CHAR *)mp1);1925 if(dir) {1926 if(!PostMsg(dcd->hwndObject,1927 UM_SHOWME,1928 MPFROMP(dir),1929 MPVOID))1930 free(dir);1931 }1940 CHAR *dir; 1941 1942 dir = strdup((CHAR *)mp1); 1943 if(dir) { 1944 if(!PostMsg(dcd->hwndObject, 1945 UM_SHOWME, 1946 MPFROMP(dir), 1947 MPVOID)) 1948 free(dir); 1949 } 1932 1950 } 1933 1951 return 0; … … 1936 1954 if(mp1) { 1937 1955 1938 PCNRITEM pci = (PCNRITEM)mp1;1939 1940 ShowCnrRecord(hwnd,1941 (PMINIRECORDCORE)pci);1956 PCNRITEM pci = (PCNRITEM)mp1; 1957 1958 ShowCnrRecord(hwnd, 1959 (PMINIRECORDCORE)pci); 1942 1960 } 1943 1961 return 0; … … 1945 1963 case UM_ENTER: 1946 1964 { 1947 FILEFINDBUF3 ffb;1948 HDIR hDir = HDIR_CREATE;1949 ULONG nm = 1L;1950 APIRET status;1951 BOOL IsOk = FALSE;1952 ULONG ulDriveNum,ulDriveMap;1953 PCNRITEM pciP,pciL,pci;1954 ULONG fl = SWP_ACTIVATE;1955 1956 if(fFollowTree)1957 fl = 0;1958 SetShiftState();1959 pci = (PCNRITEM)mp1;1960 if(pci &&1961 (INT)pci != -1 &&1962 !(pci->rc.flRecordAttr & CRA_INUSE) &&1963 !(pci->flags & RECFLAGS_ENV) &&1964 IsFullName(pci->szFileName)) {1965 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID) {1966 DosBeep(50,100);1967 if(hwndStatus)1968 WinSetWindowText(hwndStatus,1969 GetPString(IDS_RESCANSUGTEXT));1970 return 0;1971 }1972 DosError(FERR_DISABLEHARDERR);1973 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) {1974 if(!(ulDriveMap & 1L << (toupper(*pci->szFileName) - 'A'))) {1975 pciL = pciP = pci;1976 for(;;) {1977 pciP = WinSendMsg(hwnd,1978 CM_QUERYRECORD,1979 MPFROMP(pciL),1980 MPFROM2SHORT(CMA_PARENT,CMA_ITEMORDER));1981 if(pciP && (INT)pciP != -1)1982 pciL = pciP;1983 else {1984 pciP = pciL;1985 break;1986 }1987 }1988 WinSendMsg(hwnd,1989 CM_REMOVERECORD,1990 MPFROMP(&pciP),1991 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE));1992 return 0;1993 }1994 }1995 if(driveflags[toupper(*pci->szFileName) - 'A'] &1996 (DRIVE_REMOVABLE | DRIVE_NOPRESCAN)) {1997 1998 struct {1999 ULONG serial;2000 CHAR volumelength;2001 CHAR volumelabel[CCHMAXPATH];2002 } volser;2003 2004 pciL = pciP = pci;2005 for(;;) {2006 pciP = WinSendMsg(hwnd,2007 CM_QUERYRECORD,2008 MPFROMP(pciL),2009 MPFROM2SHORT(CMA_PARENT,CMA_ITEMORDER));2010 if(pciP && (INT)pciP != -1)2011 pciL = pciP;2012 else {2013 pciP = pciL;2014 break;2015 }2016 }2017 if((driveflags[toupper(*pci->szFileName) - 'A'] &2018 DRIVE_NOPRESCAN) ||2019 (toupper(*pci->szFileName) > 'B' &&2020 !(driveflags[toupper(*pci->szFileName) - 'A'] &2021 DRIVE_CDROM))) {2022 2023 INT removable,2024 x = (INT)(toupper(*pci->szFileName) - 'A');2025 ULONG drvtype;2026 CHAR FileSystem[CCHMAXPATH];2027 2028 DosError(FERR_DISABLEHARDERR);2029 removable = CheckDrive(toupper(*pciP->szFileName),2030 FileSystem,2031 &drvtype);2032 if(removable != -1) {2033 driveflags[x] &= (DRIVE_IGNORE | DRIVE_NOPRESCAN |2034 DRIVE_NOLOADICONS | DRIVE_NOLOADSUBJS |2035 DRIVE_NOLOADLONGS | DRIVE_INCLUDEFILES |2036 DRIVE_SLOW);2037 if(removable == 1)2038 driveflags[x] |= DRIVE_REMOVABLE;2039 if(drvtype & DRIVE_REMOTE)2040 driveflags[x] |= DRIVE_REMOTE;2041 if(!strcmp(FileSystem,CDFS))2042 driveflags[x] |= (DRIVE_REMOVABLE |2043 DRIVE_NOTWRITEABLE |2044 DRIVE_CDROM);2045 if (strcmp(FileSystem,HPFS) &&1965 FILEFINDBUF3 ffb; 1966 HDIR hDir = HDIR_CREATE; 1967 ULONG nm = 1L; 1968 APIRET status; 1969 BOOL IsOk = FALSE; 1970 ULONG ulDriveNum,ulDriveMap; 1971 PCNRITEM pciP,pciL,pci; 1972 ULONG fl = SWP_ACTIVATE; 1973 1974 if(fFollowTree) 1975 fl = 0; 1976 SetShiftState(); 1977 pci = (PCNRITEM)mp1; 1978 if(pci && 1979 (INT)pci != -1 && 1980 !(pci->rc.flRecordAttr & CRA_INUSE) && 1981 !(pci->flags & RECFLAGS_ENV) && 1982 IsFullName(pci->szFileName)) { 1983 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID) { 1984 DosBeep(50,100); 1985 if(hwndStatus) 1986 WinSetWindowText(hwndStatus, 1987 GetPString(IDS_RESCANSUGTEXT)); 1988 return 0; 1989 } 1990 DosError(FERR_DISABLEHARDERR); 1991 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) { 1992 if(!(ulDriveMap & 1L << (toupper(*pci->szFileName) - 'A'))) { 1993 pciL = pciP = pci; 1994 for(;;) { 1995 pciP = WinSendMsg(hwnd, 1996 CM_QUERYRECORD, 1997 MPFROMP(pciL), 1998 MPFROM2SHORT(CMA_PARENT,CMA_ITEMORDER)); 1999 if(pciP && (INT)pciP != -1) 2000 pciL = pciP; 2001 else { 2002 pciP = pciL; 2003 break; 2004 } 2005 } 2006 WinSendMsg(hwnd, 2007 CM_REMOVERECORD, 2008 MPFROMP(&pciP), 2009 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE)); 2010 return 0; 2011 } 2012 } 2013 if(driveflags[toupper(*pci->szFileName) - 'A'] & 2014 (DRIVE_REMOVABLE | DRIVE_NOPRESCAN)) { 2015 2016 struct { 2017 ULONG serial; 2018 CHAR volumelength; 2019 CHAR volumelabel[CCHMAXPATH]; 2020 } volser; 2021 2022 pciL = pciP = pci; 2023 for(;;) { 2024 pciP = WinSendMsg(hwnd, 2025 CM_QUERYRECORD, 2026 MPFROMP(pciL), 2027 MPFROM2SHORT(CMA_PARENT,CMA_ITEMORDER)); 2028 if(pciP && (INT)pciP != -1) 2029 pciL = pciP; 2030 else { 2031 pciP = pciL; 2032 break; 2033 } 2034 } 2035 if((driveflags[toupper(*pci->szFileName) - 'A'] & 2036 DRIVE_NOPRESCAN) || 2037 (toupper(*pci->szFileName) > 'B' && 2038 !(driveflags[toupper(*pci->szFileName) - 'A'] & 2039 DRIVE_CDROM))) { 2040 2041 INT removable, 2042 x = (INT)(toupper(*pci->szFileName) - 'A'); 2043 ULONG drvtype; 2044 CHAR FileSystem[CCHMAXPATH]; 2045 2046 DosError(FERR_DISABLEHARDERR); 2047 removable = CheckDrive(toupper(*pciP->szFileName), 2048 FileSystem, 2049 &drvtype); 2050 if(removable != -1) { 2051 driveflags[x] &= (DRIVE_IGNORE | DRIVE_NOPRESCAN | 2052 DRIVE_NOLOADICONS | DRIVE_NOLOADSUBJS | 2053 DRIVE_NOLOADLONGS | DRIVE_INCLUDEFILES | 2054 DRIVE_SLOW); 2055 if(removable == 1) 2056 driveflags[x] |= DRIVE_REMOVABLE; 2057 if(drvtype & DRIVE_REMOTE) 2058 driveflags[x] |= DRIVE_REMOTE; 2059 if(!strcmp(FileSystem,CDFS)) 2060 driveflags[x] |= (DRIVE_REMOVABLE | 2061 DRIVE_NOTWRITEABLE | 2062 DRIVE_CDROM); 2063 if (strcmp(FileSystem,HPFS) && 2046 2064 strcmp(FileSystem,JFS) && 2047 2065 strcmp(FileSystem,CDFS) && 2048 2066 strcmp(FileSystem,FAT32) && 2049 strcmp(FileSystem,HPFS386))2067 strcmp(FileSystem,HPFS386)) 2050 2068 { 2051 driveflags[x] |= DRIVE_NOLONGNAMES;2069 driveflags[x] |= DRIVE_NOLONGNAMES; 2052 2070 } 2053 if(!strcmp(FileSystem,CBSIFS)) {2054 driveflags[x] |= DRIVE_ZIPSTREAM;2055 driveflags[x] &= (~DRIVE_REMOTE);2056 }2057 if(driveflags[x] & DRIVE_CDROM)2058 pciP->rc.hptrIcon = hptrCDROM;2059 else2060 pciP->rc.hptrIcon = (driveflags[x] & DRIVE_REMOVABLE) ?2061 hptrRemovable :2062 (driveflags[x] & DRIVE_REMOTE) ?2063 hptrRemote : hptrDrive;2064 WinSendMsg(hwnd,2065 CM_INVALIDATERECORD,2066 MPFROMP(&pciP),2067 MPFROM2SHORT(1,CMA_ERASE | CMA_REPOSITION));2068 if(hwndMain)2069 PostMsg(hwndMain,2070 UM_BUILDDRIVES,2071 MPVOID,2072 MPVOID);2073 }2074 }2075 memset(&volser,0,sizeof(volser));2076 DosError(FERR_DISABLEHARDERR);2077 status = DosQueryFSInfo(toupper(*pci->szFileName) - '@',2078 FSIL_VOLSER,&volser,2079 (ULONG)sizeof(volser));2080 if(!status) {2081 if(!volser.serial ||2082 driveserial[toupper(*pci->szFileName) - 'A'] !=2083 volser.serial) {2084 UnFlesh(hwnd,pciP);2085 Flesh(hwnd,pciP);2086 driveserial[toupper(*pci->szFileName) - 'A'] =2087 volser.serial;2088 }2089 pciL = WinSendMsg(hwnd,2090 CM_QUERYRECORD,2091 MPFROMP(pciP),2092 MPFROM2SHORT(CMA_FIRSTCHILD,2093 CMA_ITEMORDER));2094 if(!pciL)2095 Flesh(hwnd,pciP);2096 }2097 else {2098 driveserial[toupper(*pci->szFileName) - 'A'] = -1;2099 UnFlesh(hwnd,2100 pci);2101 PostMsg(hwnd,2102 UM_RESCAN,2103 MPVOID,2104 MPVOID);2105 PostMsg(hwnd,2106 UM_SETUP2,2107 MPFROMP(pci),2108 MPFROMLONG(status));2109 return 0;2110 }2111 }2112 status = 0;2113 IsOk = (IsRoot(pci->szFileName) &&2114 IsValidDrive(toupper(*pci->szFileName)));2115 if(!IsOk) {2116 DosError(FERR_DISABLEHARDERR);2117 status = DosFindFirst(pci->szFileName,&hDir,2118 FILE_NORMAL | FILE_DIRECTORY |2119 FILE_ARCHIVED | FILE_READONLY |2120 FILE_HIDDEN | FILE_SYSTEM,2121 &ffb,sizeof(ffb),&nm,2122 FIL_STANDARD);2123 priority_bumped();2124 }2125 if(!status) {2126 if(!IsOk)2127 DosFindClose(hDir);2128 if(IsOk ||2129 (ffb.attrFile & FILE_DIRECTORY)) {2130 if((shiftstate & (KC_CTRL | KC_ALT)) ==2131 (KC_CTRL | KC_ALT)) {2132 PostMsg(hwnd,2133 WM_COMMAND,2134 MPFROM2SHORT(IDM_SHOWALLFILES,0),2135 MPVOID);2136 return 0;2137 }2138 if((shiftstate & (KC_CTRL | KC_SHIFT)) ==2139 (KC_CTRL | KC_SHIFT)) {2140 OpenObject(pci->szFileName,2141 Settings,2142 dcd->hwndFrame);2143 return 0;2144 }2145 if(!(shiftstate & (KC_CTRL | KC_SHIFT))) {2146 if(!ParentIsDesktop(hwnd,dcd->hwndParent)) {2147 if(FindDirCnrByName(pci->szFileName,2148 TRUE))2149 return 0;2150 }2151 }2152 if((shiftstate & KC_CTRL) ||2153 (!(shiftstate & KC_SHIFT) &&2154 ParentIsDesktop(hwnd,dcd->hwndParent) &&2155 fVTreeOpensWPS)) {2156 2157 ULONG size = sizeof(ULONG),flWindowAttr = CV_ICON;2158 CHAR s[33];2159 2160 strcpy(s,"ICON");2161 PrfQueryProfileData(fmprof,2162 appname,2163 "DirflWindowAttr",2164 (PVOID)&flWindowAttr,2165 &size);2166 if(flWindowAttr & CV_DETAIL) {2167 if(IsRoot(pci->szFileName))2168 strcpy(s,"TREE");2169 else2170 strcpy(s,"DETAILS");2171 }2172 OpenObject(pci->szFileName,2173 s,2174 dcd->hwndFrame);2175 return 0;2176 }2177 if(!ParentIsDesktop(hwnd,dcd->hwndParent) &&2178 !fDCOpens &&2179 !LastDir &&2180 !(shiftstate & KC_SHIFT))2181 LastDir = FindDirCnr(dcd->hwndParent);2182 if(LastDir &&2183 !fDCOpens &&2184 !(shiftstate & KC_SHIFT)) {2185 WinSendMsg(LastDir,2186 UM_SETDIR,2187 MPFROMP(pci->szFileName),2188 MPVOID);2189 WinSetWindowPos(WinQueryWindow(WinQueryWindow(LastDir,2190 QW_PARENT),2191 QW_PARENT),2192 HWND_TOP,2193 0,2194 0,2195 0,2196 0,2197 SWP_ZORDER | fl);2198 }2199 else2200 OpenDirCnr(hwnd,2201 dcd->hwndParent,2202 dcd->hwndFrame,2203 FALSE,2204 pci->szFileName);2205 }2206 else {2207 if(!(driveflags[toupper(*pci->szFileName) - 'A'] &2208 DRIVE_INCLUDEFILES))2209 WinSendMsg(hwnd,2210 CM_REMOVERECORD,2211 MPFROMP(&pci),2212 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE));2213 else {2214 2215 SWP swp;2216 2217 WinQueryWindowPos(dcd->hwndFrame,&swp);2218 DefaultViewKeys(hwnd,2219 dcd->hwndFrame,2220 dcd->hwndParent,2221 &swp,2222 pci->szFileName);2223 }2224 }2225 }2226 else {2227 if(!IsRoot(pci->szFileName)) {2228 NotifyError(pci->szFileName,status);2229 WinSendMsg(hwnd,2230 CM_REMOVERECORD,2231 MPFROMP(&pci),2232 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE));2233 }2234 }2235 }2236 else if(!pci)2237 PostMsg(hwnd,2238 WM_COMMAND,2239 MPFROM2SHORT(IDM_MKDIR,0),2240 MPVOID);2241 if(fFollowTree)2242 WinSetFocus(HWND_DESKTOP,hwnd);2071 if(!strcmp(FileSystem,CBSIFS)) { 2072 driveflags[x] |= DRIVE_ZIPSTREAM; 2073 driveflags[x] &= (~DRIVE_REMOTE); 2074 } 2075 if(driveflags[x] & DRIVE_CDROM) 2076 pciP->rc.hptrIcon = hptrCDROM; 2077 else 2078 pciP->rc.hptrIcon = (driveflags[x] & DRIVE_REMOVABLE) ? 2079 hptrRemovable : 2080 (driveflags[x] & DRIVE_REMOTE) ? 2081 hptrRemote : hptrDrive; 2082 WinSendMsg(hwnd, 2083 CM_INVALIDATERECORD, 2084 MPFROMP(&pciP), 2085 MPFROM2SHORT(1,CMA_ERASE | CMA_REPOSITION)); 2086 if(hwndMain) 2087 PostMsg(hwndMain, 2088 UM_BUILDDRIVES, 2089 MPVOID, 2090 MPVOID); 2091 } 2092 } 2093 memset(&volser,0,sizeof(volser)); 2094 DosError(FERR_DISABLEHARDERR); 2095 status = DosQueryFSInfo(toupper(*pci->szFileName) - '@', 2096 FSIL_VOLSER,&volser, 2097 (ULONG)sizeof(volser)); 2098 if(!status) { 2099 if(!volser.serial || 2100 driveserial[toupper(*pci->szFileName) - 'A'] != 2101 volser.serial) { 2102 UnFlesh(hwnd,pciP); 2103 Flesh(hwnd,pciP); 2104 driveserial[toupper(*pci->szFileName) - 'A'] = 2105 volser.serial; 2106 } 2107 pciL = WinSendMsg(hwnd, 2108 CM_QUERYRECORD, 2109 MPFROMP(pciP), 2110 MPFROM2SHORT(CMA_FIRSTCHILD, 2111 CMA_ITEMORDER)); 2112 if(!pciL) 2113 Flesh(hwnd,pciP); 2114 } 2115 else { 2116 driveserial[toupper(*pci->szFileName) - 'A'] = -1; 2117 UnFlesh(hwnd, 2118 pci); 2119 PostMsg(hwnd, 2120 UM_RESCAN, 2121 MPVOID, 2122 MPVOID); 2123 PostMsg(hwnd, 2124 UM_SETUP2, 2125 MPFROMP(pci), 2126 MPFROMLONG(status)); 2127 return 0; 2128 } 2129 } 2130 status = 0; 2131 IsOk = (IsRoot(pci->szFileName) && 2132 IsValidDrive(toupper(*pci->szFileName))); 2133 if(!IsOk) { 2134 DosError(FERR_DISABLEHARDERR); 2135 status = DosFindFirst(pci->szFileName,&hDir, 2136 FILE_NORMAL | FILE_DIRECTORY | 2137 FILE_ARCHIVED | FILE_READONLY | 2138 FILE_HIDDEN | FILE_SYSTEM, 2139 &ffb,sizeof(ffb),&nm, 2140 FIL_STANDARD); 2141 priority_bumped(); 2142 } 2143 if(!status) { 2144 if(!IsOk) 2145 DosFindClose(hDir); 2146 if(IsOk || 2147 (ffb.attrFile & FILE_DIRECTORY)) { 2148 if((shiftstate & (KC_CTRL | KC_ALT)) == 2149 (KC_CTRL | KC_ALT)) { 2150 PostMsg(hwnd, 2151 WM_COMMAND, 2152 MPFROM2SHORT(IDM_SHOWALLFILES,0), 2153 MPVOID); 2154 return 0; 2155 } 2156 if((shiftstate & (KC_CTRL | KC_SHIFT)) == 2157 (KC_CTRL | KC_SHIFT)) { 2158 OpenObject(pci->szFileName, 2159 Settings, 2160 dcd->hwndFrame); 2161 return 0; 2162 } 2163 if(!(shiftstate & (KC_CTRL | KC_SHIFT))) { 2164 if(!ParentIsDesktop(hwnd,dcd->hwndParent)) { 2165 if(FindDirCnrByName(pci->szFileName, 2166 TRUE)) 2167 return 0; 2168 } 2169 } 2170 if((shiftstate & KC_CTRL) || 2171 (!(shiftstate & KC_SHIFT) && 2172 ParentIsDesktop(hwnd,dcd->hwndParent) && 2173 fVTreeOpensWPS)) { 2174 2175 ULONG size = sizeof(ULONG),flWindowAttr = CV_ICON; 2176 CHAR s[33]; 2177 2178 strcpy(s,"ICON"); 2179 PrfQueryProfileData(fmprof, 2180 appname, 2181 "DirflWindowAttr", 2182 (PVOID)&flWindowAttr, 2183 &size); 2184 if(flWindowAttr & CV_DETAIL) { 2185 if(IsRoot(pci->szFileName)) 2186 strcpy(s,"TREE"); 2187 else 2188 strcpy(s,"DETAILS"); 2189 } 2190 OpenObject(pci->szFileName, 2191 s, 2192 dcd->hwndFrame); 2193 return 0; 2194 } 2195 if(!ParentIsDesktop(hwnd,dcd->hwndParent) && 2196 !fDCOpens && 2197 !LastDir && 2198 !(shiftstate & KC_SHIFT)) 2199 LastDir = FindDirCnr(dcd->hwndParent); 2200 if(LastDir && 2201 !fDCOpens && 2202 !(shiftstate & KC_SHIFT)) { 2203 WinSendMsg(LastDir, 2204 UM_SETDIR, 2205 MPFROMP(pci->szFileName), 2206 MPVOID); 2207 WinSetWindowPos(WinQueryWindow(WinQueryWindow(LastDir, 2208 QW_PARENT), 2209 QW_PARENT), 2210 HWND_TOP, 2211 0, 2212 0, 2213 0, 2214 0, 2215 SWP_ZORDER | fl); 2216 } 2217 else 2218 OpenDirCnr(hwnd, 2219 dcd->hwndParent, 2220 dcd->hwndFrame, 2221 FALSE, 2222 pci->szFileName); 2223 } 2224 else { 2225 if(!(driveflags[toupper(*pci->szFileName) - 'A'] & 2226 DRIVE_INCLUDEFILES)) 2227 WinSendMsg(hwnd, 2228 CM_REMOVERECORD, 2229 MPFROMP(&pci), 2230 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE)); 2231 else { 2232 2233 SWP swp; 2234 2235 WinQueryWindowPos(dcd->hwndFrame,&swp); 2236 DefaultViewKeys(hwnd, 2237 dcd->hwndFrame, 2238 dcd->hwndParent, 2239 &swp, 2240 pci->szFileName); 2241 } 2242 } 2243 } 2244 else { 2245 if(!IsRoot(pci->szFileName)) { 2246 NotifyError(pci->szFileName,status); 2247 WinSendMsg(hwnd, 2248 CM_REMOVERECORD, 2249 MPFROMP(&pci), 2250 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE)); 2251 } 2252 } 2253 } 2254 else if(!pci) 2255 PostMsg(hwnd, 2256 WM_COMMAND, 2257 MPFROM2SHORT(IDM_MKDIR,0), 2258 MPVOID); 2259 if(fFollowTree) 2260 WinSetFocus(HWND_DESKTOP,hwnd); 2243 2261 } 2244 2262 return 0; … … 2247 2265 if(dcd) { 2248 2266 2249 HWND hwndMenu = (HWND)mp2;2250 2251 if(hwndMenu == TreeCnrMenu || hwndMenu == TreeMenu ||2252 hwndMenu == DirMenu) {2253 MarkAll(hwnd,TRUE,FALSE,TRUE);2254 if(dcd->cnremphasized) {2255 WinSendMsg(hwnd,2256 CM_SETRECORDEMPHASIS,2257 MPVOID,2258 MPFROM2SHORT(FALSE,CRA_SOURCE));2259 dcd->cnremphasized = FALSE;2260 }2261 }2267 HWND hwndMenu = (HWND)mp2; 2268 2269 if(hwndMenu == TreeCnrMenu || hwndMenu == TreeMenu || 2270 hwndMenu == DirMenu) { 2271 MarkAll(hwnd,TRUE,FALSE,TRUE); 2272 if(dcd->cnremphasized) { 2273 WinSendMsg(hwnd, 2274 CM_SETRECORDEMPHASIS, 2275 MPVOID, 2276 MPFROM2SHORT(FALSE,CRA_SOURCE)); 2277 dcd->cnremphasized = FALSE; 2278 } 2279 } 2262 2280 } 2263 2281 break; … … 2265 2283 case UM_OPENWINDOWFORME: 2266 2284 if(dcd) { 2267 if(mp1 &&2268 !IsFile((CHAR *)mp1))2269 OpenDirCnr(hwnd,2270 dcd->hwndParent,2271 dcd->hwndFrame,2272 FALSE,2273 (char *)mp1);2285 if(mp1 && 2286 !IsFile((CHAR *)mp1)) 2287 OpenDirCnr(hwnd, 2288 dcd->hwndParent, 2289 dcd->hwndFrame, 2290 FALSE, 2291 (char *)mp1); 2274 2292 } 2275 2293 return 0; … … 2277 2295 case MM_PORTHOLEINIT: 2278 2296 if(dcd) { 2279 switch(SHORT1FROMMP(mp1)) {2280 case 0:2281 case 1:2282 {2283 ULONG wmsg;2284 2285 wmsg = ((SHORT1FROMMP(mp1) == 0) ?2286 UM_FILESMENU :2287 UM_VIEWSMENU);2288 PortholeInit((HWND)WinSendMsg(dcd->hwndClient,2289 wmsg,2290 MPVOID,2291 MPVOID),2292 mp1,2293 mp2);2294 }2295 break;2296 }2297 switch(SHORT1FROMMP(mp1)) { 2298 case 0: 2299 case 1: 2300 { 2301 ULONG wmsg; 2302 2303 wmsg = ((SHORT1FROMMP(mp1) == 0) ? 2304 UM_FILESMENU : 2305 UM_VIEWSMENU); 2306 PortholeInit((HWND)WinSendMsg(dcd->hwndClient, 2307 wmsg, 2308 MPVOID, 2309 MPVOID), 2310 mp1, 2311 mp2); 2312 } 2313 break; 2314 } 2297 2315 } 2298 2316 break; … … 2301 2319 case WM_INITMENU: 2302 2320 if(dcd) { 2303 switch(SHORT1FROMMP(mp1)) {2304 case IDM_FILESMENU:2305 {2306 PCNRITEM pci;2307 2308 pci = (PCNRITEM)CurrentRecord(hwnd);2309 if(pci && (INT)pci != -1) {2310 WinEnableMenuItem((HWND)mp2,2311 IDM_UPDATE,2312 (pci->flags & RECFLAGS_UNDERENV) == 0);2313 WinEnableMenuItem((HWND)mp2,2314 IDM_EXPANDSUBMENU,2315 (pci->flags & RECFLAGS_UNDERENV) == 0);2316 WinEnableMenuItem((HWND)mp2,2317 IDM_EXPAND,2318 (pci->flags & RECFLAGS_UNDERENV) == 0);2319 WinEnableMenuItem((HWND)mp2,2320 IDM_COLLAPSE,2321 (pci->flags & RECFLAGS_UNDERENV) == 0);2322 WinEnableMenuItem((HWND)mp2,2323 IDM_DELETE,2324 ((pci->flags & RECFLAGS_UNDERENV) == 0) &&2325 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2326 WinEnableMenuItem((HWND)mp2,2327 IDM_PERMDELETE,2328 ((pci->flags & RECFLAGS_UNDERENV) == 0) &&2329 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2330 WinEnableMenuItem((HWND)mp2,2331 IDM_DELETESUBMENU,2332 ((pci->flags & RECFLAGS_UNDERENV) == 0) &&2333 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2334 WinEnableMenuItem((HWND)mp2,2335 IDM_MOVEMENU,2336 ((pci->flags & RECFLAGS_UNDERENV) == 0) &&2337 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2338 WinEnableMenuItem((HWND)mp2,2339 IDM_RENAME,2340 ((pci->flags & RECFLAGS_UNDERENV) == 0) &&2341 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2342 WinEnableMenuItem((HWND)mp2,2343 IDM_DETACH,2344 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOTE) != 0);2345 WinEnableMenuItem((HWND)mp2,2346 IDM_EJECT,2347 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) != 0);2321 switch(SHORT1FROMMP(mp1)) { 2322 case IDM_FILESMENU: 2323 { 2324 PCNRITEM pci; 2325 2326 pci = (PCNRITEM)CurrentRecord(hwnd); 2327 if(pci && (INT)pci != -1) { 2328 WinEnableMenuItem((HWND)mp2, 2329 IDM_UPDATE, 2330 (pci->flags & RECFLAGS_UNDERENV) == 0); 2331 WinEnableMenuItem((HWND)mp2, 2332 IDM_EXPANDSUBMENU, 2333 (pci->flags & RECFLAGS_UNDERENV) == 0); 2334 WinEnableMenuItem((HWND)mp2, 2335 IDM_EXPAND, 2336 (pci->flags & RECFLAGS_UNDERENV) == 0); 2337 WinEnableMenuItem((HWND)mp2, 2338 IDM_COLLAPSE, 2339 (pci->flags & RECFLAGS_UNDERENV) == 0); 2340 WinEnableMenuItem((HWND)mp2, 2341 IDM_DELETE, 2342 ((pci->flags & RECFLAGS_UNDERENV) == 0) && 2343 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2344 WinEnableMenuItem((HWND)mp2, 2345 IDM_PERMDELETE, 2346 ((pci->flags & RECFLAGS_UNDERENV) == 0) && 2347 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2348 WinEnableMenuItem((HWND)mp2, 2349 IDM_DELETESUBMENU, 2350 ((pci->flags & RECFLAGS_UNDERENV) == 0) && 2351 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2352 WinEnableMenuItem((HWND)mp2, 2353 IDM_MOVEMENU, 2354 ((pci->flags & RECFLAGS_UNDERENV) == 0) && 2355 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2356 WinEnableMenuItem((HWND)mp2, 2357 IDM_RENAME, 2358 ((pci->flags & RECFLAGS_UNDERENV) == 0) && 2359 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2360 WinEnableMenuItem((HWND)mp2, 2361 IDM_DETACH, 2362 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOTE) != 0); 2363 WinEnableMenuItem((HWND)mp2, 2364 IDM_EJECT, 2365 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) != 0); 2348 2366 /* 2349 WinEnableMenuItem((HWND)mp2,2350 IDM_CLOSETRAY,2351 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_CDROM) != 0);2367 WinEnableMenuItem((HWND)mp2, 2368 IDM_CLOSETRAY, 2369 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_CDROM) != 0); 2352 2370 */ 2353 WinEnableMenuItem((HWND)mp2,2354 IDM_LOCK,2355 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) != 0);2356 WinEnableMenuItem((HWND)mp2,2357 IDM_UNLOCK,2358 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) != 0);2359 WinEnableMenuItem((HWND)mp2,2360 IDM_OPTIMIZE,2361 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2362 WinEnableMenuItem((HWND)mp2,2363 IDM_FORMAT,2364 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2365 WinEnableMenuItem((HWND)mp2,2366 IDM_CHKDSK,2367 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2368 WinEnableMenuItem((HWND)mp2,2369 IDM_MKDIR,2370 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2371 WinEnableMenuItem((HWND)mp2,2372 IDM_UNDELETE,2373 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2374 WinEnableMenuItem((HWND)mp2,2375 IDM_ATTRS,2376 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0);2377 }2378 }2379 break;2380 2381 case IDM_VIEWSMENU:2382 WinCheckMenuItem((HWND)mp2,2383 IDM_MINIICONS,2384 ((dcd->flWindowAttr & CV_MINI) != 0));2385 WinEnableMenuItem((HWND)mp2,2386 IDM_RESELECT,2387 FALSE);2388 break;2389 2390 case IDM_COMMANDSMENU:2391 SetupCommandMenu((HWND)mp2,hwnd);2392 break;2393 2394 case IDM_SORTSUBMENU:2395 SetSortChecks((HWND)mp2,TreesortFlags);2396 break;2397 2398 case IDM_WINDOWSMENU:2399 SetupWinList((HWND)mp2,2400 (hwndMain) ? hwndMain : (HWND)0,2401 dcd->hwndFrame);2402 break;2403 }2404 dcd->hwndLastMenu = (HWND)mp2;2371 WinEnableMenuItem((HWND)mp2, 2372 IDM_LOCK, 2373 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) != 0); 2374 WinEnableMenuItem((HWND)mp2, 2375 IDM_UNLOCK, 2376 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) != 0); 2377 WinEnableMenuItem((HWND)mp2, 2378 IDM_OPTIMIZE, 2379 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2380 WinEnableMenuItem((HWND)mp2, 2381 IDM_FORMAT, 2382 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2383 WinEnableMenuItem((HWND)mp2, 2384 IDM_CHKDSK, 2385 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2386 WinEnableMenuItem((HWND)mp2, 2387 IDM_MKDIR, 2388 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2389 WinEnableMenuItem((HWND)mp2, 2390 IDM_UNDELETE, 2391 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2392 WinEnableMenuItem((HWND)mp2, 2393 IDM_ATTRS, 2394 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE) == 0); 2395 } 2396 } 2397 break; 2398 2399 case IDM_VIEWSMENU: 2400 WinCheckMenuItem((HWND)mp2, 2401 IDM_MINIICONS, 2402 ((dcd->flWindowAttr & CV_MINI) != 0)); 2403 WinEnableMenuItem((HWND)mp2, 2404 IDM_RESELECT, 2405 FALSE); 2406 break; 2407 2408 case IDM_COMMANDSMENU: 2409 SetupCommandMenu((HWND)mp2,hwnd); 2410 break; 2411 2412 case IDM_SORTSUBMENU: 2413 SetSortChecks((HWND)mp2,TreesortFlags); 2414 break; 2415 2416 case IDM_WINDOWSMENU: 2417 SetupWinList((HWND)mp2, 2418 (hwndMain) ? hwndMain : (HWND)0, 2419 dcd->hwndFrame); 2420 break; 2421 } 2422 dcd->hwndLastMenu = (HWND)mp2; 2405 2423 } 2406 2424 if(msg == WM_INITMENU) 2407 break;2425 break; 2408 2426 return 0; 2409 2427 2410 2428 case UM_COMMAND: 2411 2429 if(mp1) { 2412 if(dcd) {2413 if(!PostMsg(dcd->hwndObject,UM_COMMAND,mp1,mp2)) {2414 FreeListInfo((LISTINFO *)mp1);2415 DosBeep(50,100);2416 }2417 else2418 return (MRESULT)TRUE;2419 }2420 else2421 FreeListInfo((LISTINFO *)mp1);2430 if(dcd) { 2431 if(!PostMsg(dcd->hwndObject,UM_COMMAND,mp1,mp2)) { 2432 FreeListInfo((LISTINFO *)mp1); 2433 DosBeep(50,100); 2434 } 2435 else 2436 return (MRESULT)TRUE; 2437 } 2438 else 2439 FreeListInfo((LISTINFO *)mp1); 2422 2440 } 2423 2441 return 0; … … 2426 2444 if(dcd && mp2) { 2427 2445 2428 HWND ret;2429 2430 ret = StartMLEEditor(dcd->hwndParent,(INT)mp1,(CHAR *)mp2,2431 dcd->hwndFrame);2432 if(mp2)2433 free((CHAR *)mp2);2434 return MRFROMLONG(ret);2446 HWND ret; 2447 2448 ret = StartMLEEditor(dcd->hwndParent,(INT)mp1,(CHAR *)mp2, 2449 dcd->hwndFrame); 2450 if(mp2) 2451 free((CHAR *)mp2); 2452 return MRFROMLONG(ret); 2435 2453 } 2436 2454 return 0; … … 2442 2460 case UM_NOTIFY: 2443 2461 if(mp2) 2444 Notify((CHAR *)mp2);2462 Notify((CHAR *)mp2); 2445 2463 return 0; 2446 2464 … … 2448 2466 if(dcd) { 2449 2467 2450 BOOL tempsusp = dcd->suspendview;2451 2452 if(mp1) {2453 DosEnterCritSec();2454 SetMask((CHAR *)mp1,&dcd->mask);2455 DosExitCritSec();2456 }2457 dcd->suspendview = TRUE;2458 dcd->mask.attrFile |= FILE_DIRECTORY;2459 WinSendMsg(hwnd,CM_FILTER,MPFROMP(Filter),MPFROMP(&dcd->mask));2460 dcd->suspendview = tempsusp;2461 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);2468 BOOL tempsusp = dcd->suspendview; 2469 2470 if(mp1) { 2471 DosEnterCritSec(); 2472 SetMask((CHAR *)mp1,&dcd->mask); 2473 DosExitCritSec(); 2474 } 2475 dcd->suspendview = TRUE; 2476 dcd->mask.attrFile |= FILE_DIRECTORY; 2477 WinSendMsg(hwnd,CM_FILTER,MPFROMP(Filter),MPFROMP(&dcd->mask)); 2478 dcd->suspendview = tempsusp; 2479 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 2462 2480 } 2463 2481 return 0; … … 2465 2483 case UM_DRIVECMD: 2466 2484 if(mp1) 2467 ShowTreeRec(hwnd,(CHAR *)mp1,FALSE,TRUE);2485 ShowTreeRec(hwnd,(CHAR *)mp1,FALSE,TRUE); 2468 2486 return 0; 2469 2487 2470 2488 case WM_APPTERMINATENOTIFY: 2471 2489 { 2472 APPNOTIFY *info;2473 PCNRITEM pci;2474 CHAR s[] = " :\\";2475 2476 if(!mp2) {2477 if(hwndMain)2478 PostMsg(hwndMain,2479 UM_BUILDDRIVES,2480 MPVOID,2481 MPVOID);2482 }2483 info = apphead;2484 while(info) {2485 if(info->happ == (HAPP)mp1) {2486 *s = info->device;2487 pci = FindCnrRecord(hwnd,2488 s,2489 NULL,2490 FALSE,2491 FALSE,2492 TRUE);2493 if(pci && (INT)pci != -1) {2494 driveserial[info->device - 'A'] = -1;2495 DriveFlagsOne(info->device - 'A');2496 if(driveflags[info->device - 'A'] &2497 (DRIVE_INVALID | DRIVE_IGNORE))2498 WinSendMsg(hwnd,2499 CM_REMOVERECORD,2500 MPFROMP(&pci),2501 MPFROM2SHORT(1,CMA_FREE));2502 else2503 Flesh(hwnd,pci);2504 }2505 if(info->prev)2506 info->prev->next = info->next;2507 if(info->next)2508 info->next->prev = info->prev;2509 if(apphead == info)2510 apphead = info->next;2511 if(apptail == info)2512 apptail = info->prev;2513 free(info);2514 break;2515 }2516 info = info->next;2517 }2490 APPNOTIFY *info; 2491 PCNRITEM pci; 2492 CHAR s[] = " :\\"; 2493 2494 if(!mp2) { 2495 if(hwndMain) 2496 PostMsg(hwndMain, 2497 UM_BUILDDRIVES, 2498 MPVOID, 2499 MPVOID); 2500 } 2501 info = apphead; 2502 while(info) { 2503 if(info->happ == (HAPP)mp1) { 2504 *s = info->device; 2505 pci = FindCnrRecord(hwnd, 2506 s, 2507 NULL, 2508 FALSE, 2509 FALSE, 2510 TRUE); 2511 if(pci && (INT)pci != -1) { 2512 driveserial[info->device - 'A'] = -1; 2513 DriveFlagsOne(info->device - 'A'); 2514 if(driveflags[info->device - 'A'] & 2515 (DRIVE_INVALID | DRIVE_IGNORE)) 2516 WinSendMsg(hwnd, 2517 CM_REMOVERECORD, 2518 MPFROMP(&pci), 2519 MPFROM2SHORT(1,CMA_FREE)); 2520 else 2521 Flesh(hwnd,pci); 2522 } 2523 if(info->prev) 2524 info->prev->next = info->next; 2525 if(info->next) 2526 info->next->prev = info->prev; 2527 if(apphead == info) 2528 apphead = info->next; 2529 if(apptail == info) 2530 apptail = info->prev; 2531 free(info); 2532 break; 2533 } 2534 info = info->next; 2535 } 2518 2536 } 2519 2537 break; … … 2522 2540 DosError(FERR_DISABLEHARDERR); 2523 2541 if(dcd) { 2524 if(SwitchCommand(dcd->hwndLastMenu,2525 SHORT1FROMMP(mp1)))2526 return 0;2527 switch(SHORT1FROMMP(mp1)) {2528 case IDM_SETTARGET:2529 SetTargetDir(hwnd,FALSE);2530 break;2531 2532 case IDM_DETACH:2533 {2534 CHAR d[3] = " :";2535 PCNRITEM pci;2536 PROGDETAILS pgd;2537 CHAR params[368],*p;2538 HAPP happ;2539 2540 2541 pci = (PCNRITEM)CurrentRecord(hwnd);2542 if(pci && (INT)pci != -1 && isalpha(*pci->szFileName)) {2543 *d = toupper(*pci->szFileName);2544 p = GetCmdSpec(FALSE);2545 memset(&pgd,0,sizeof(pgd));2546 pgd.Length = sizeof(pgd);2547 pgd.progt.progc = PROG_WINDOWABLEVIO;2548 pgd.progt.fbVisible = SHE_VISIBLE;2549 pgd.pszTitle = GetPString(IDS_DETACHREQUESTTEXT);2550 pgd.pszExecutable = p;2551 pgd.pszParameters = params;2552 pgd.pszStartupDir = NULL;2553 pgd.pszIcon = NULL;2554 pgd.pszEnvironment = NULL;2555 pgd.swpInitial.hwndInsertBehind = HWND_TOP;2556 pgd.swpInitial.hwnd = hwnd;2557 pgd.swpInitial.fl = SWP_SHOW | SWP_ACTIVATE;2558 sprintf(params,"/C NET USE %s /D",d);2559 happ = WinStartApp(hwnd,&pgd,pgd.pszParameters,2560 NULL,SAF_MAXIMIZED);2561 if(happ) {2562 2563 APPNOTIFY *info;2564 2565 info = malloc(sizeof(APPNOTIFY));2566 if(info) {2567 memset(info,0,sizeof(APPNOTIFY));2568 info->happ = happ;2569 info->device = *d;2570 if(!apphead)2571 apphead = info;2572 else {2573 apptail->next = info;2574 info->prev = apptail;2575 }2576 apptail = info;2577 }2578 }2579 else2580 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,hwnd,2581 GetPString(IDS_ERRORTEXT),2582 GetPString(IDS_CANTSTARTTEXT),2583 p,params);2584 }2585 }2586 break;2587 2588 case IDM_REMAP:2589 WinDlgBox(HWND_DESKTOP,hwnd,RemapDlgProc,2590 FM3ModHandle,MAP_FRAME,NULL);2591 break;2592 2593 case IDM_CONTEXTMENU:2594 {2595 PCNRITEM pci;2596 2597 pci = (PCNRITEM)CurrentRecord(hwnd);2598 PostMsg(hwnd,WM_CONTROL,MPFROM2SHORT(DIR_CNR,CN_CONTEXTMENU),2599 MPFROMP(pci));2600 }2601 break;2602 2603 case IDM_FINDINTREE:2604 {2605 CHAR dir[CCHMAXPATH];2606 PCNRITEM pci;2607 2608 pci = (PCNRITEM)CurrentRecord(hwnd);2609 if(pci && (INT)pci != -1) {2610 strcpy(dir,pci->szFileName);2611 MakeValidDir(dir);2612 }2613 else2614 save_dir2(dir);2615 if(WinDlgBox(HWND_DESKTOP,dcd->hwndParent,2616 WalkAllDlgProc,2617 FM3ModHandle,WALK_FRAME,2618 MPFROMP(dir)) && *dir)2619 WinSendMsg(hwnd,UM_SHOWME,MPFROMP(dir),MPFROMLONG(1L));2620 }2621 break;2622 2623 case IDM_BEGINEDIT:2624 OpenEdit(hwnd);2625 break;2626 2627 case IDM_ENDEDIT:2628 WinSendMsg(hwnd,2629 CM_CLOSEEDIT,2630 MPVOID,2631 MPVOID);2632 break;2633 2634 case IDM_FILTER:2635 {2636 BOOL empty = FALSE;2637 PCNRITEM pci;2638 2639 pci = (PCNRITEM)CurrentRecord(hwnd);2640 if(!*dcd->mask.szMask)2641 empty = TRUE;2642 dcd->mask.fIsTree = TRUE;2643 *dcd->mask.prompt = 0;2644 if(pci && (INT)pci != -1)2645 dcd->mask.fFilesIncluded = ((driveflags[toupper(*pci->szFileName) - 'A'] &2646 DRIVE_INCLUDEFILES) != 0);2647 else2648 dcd->mask.fFilesIncluded = FALSE;2649 if(WinDlgBox(HWND_DESKTOP,hwnd,PickMaskDlgProc,2650 FM3ModHandle,MSK_FRAME,MPFROMP(&dcd->mask)))2651 WinSendMsg(hwnd,UM_FILTER,MPVOID,MPVOID);2652 else if(empty)2653 *dcd->mask.szMask = 0;2654 PrfWriteProfileData(fmprof,appname,"TreeFilter",&dcd->mask,2655 sizeof(MASK));2656 }2657 break;2658 2659 case IDM_SHOWSORT:2660 QuickPopup(hwnd,dcd,CheckMenu(&TreeCnrMenu,TREECNR_POPUP),2661 IDM_SORTSUBMENU);2662 break;2663 2664 case IDM_SHOWSELECT:2665 QuickPopup(hwnd,dcd,CheckMenu(&TreeCnrMenu,TREECNR_POPUP),2666 IDM_SELECTSUBMENU);2667 break;2668 2669 case IDM_NOTEBOOK:2670 if(!ParentIsDesktop(dcd->hwndParent,dcd->hwndParent))2671 PostMsg(dcd->hwndParent,msg,mp1,mp2);2672 else2673 WinDlgBox(HWND_DESKTOP,hwnd,CfgDlgProc,FM3ModHandle,2674 CFG_FRAME,(PVOID)"Tree");2675 break;2676 2677 case IDM_WALKDIR:2678 case IDM_OPENWALK:2679 {2680 CHAR newpath[CCHMAXPATH];2681 PCNRITEM pci;2682 2683 pci = (PCNRITEM)CurrentRecord(hwnd);2684 if(pci && (INT)pci != -1) {2685 strcpy(newpath,pci->szFileName);2686 MakeValidDir(newpath);2687 }2688 else2689 save_dir2(newpath);2690 if(!WinDlgBox(HWND_DESKTOP,dcd->hwndParent,WalkAllDlgProc,2691 FM3ModHandle,WALK_FRAME,2692 MPFROMP(newpath)) || !*newpath)2693 break;2694 WinSendMsg(hwnd,UM_OPENWINDOWFORME,MPFROMP(newpath),MPVOID);2695 }2696 break;2697 2698 case IDM_HELP:2699 if(hwndHelp) {2700 if(!ParentIsDesktop(dcd->hwndFrame,dcd->hwndParent))2701 PostMsg(dcd->hwndParent,UM_COMMAND,mp1,mp2);2702 else2703 WinSendMsg(hwndHelp,HM_HELP_CONTENTS,MPVOID,MPVOID);2704 }2705 break;2706 2707 case IDM_PARTITION:2708 runemf2(SEPARATE | WINDOWED,HWND_DESKTOP,NULL,NULL,2709 "%s","FDISKPM.EXE");2710 break;2711 2712 case IDM_SORTNAME:2713 case IDM_SORTFILENAME:2714 case IDM_SORTSIZE:2715 case IDM_SORTEASIZE:2716 case IDM_SORTFIRST:2717 case IDM_SORTLAST:2718 case IDM_SORTLWDATE:2719 case IDM_SORTLADATE:2720 case IDM_SORTCRDATE:2721 TreesortFlags &= (SORT_REVERSE | SORT_DIRSFIRST | SORT_DIRSLAST);2722 case IDM_SORTDIRSFIRST:2723 case IDM_SORTDIRSLAST:2724 case IDM_SORTREVERSE:2725 switch(SHORT1FROMMP(mp1)) {2726 case IDM_SORTFILENAME:2727 TreesortFlags |= SORT_FILENAME;2728 break;2729 case IDM_SORTSIZE:2730 TreesortFlags |= SORT_SIZE;2731 break;2732 case IDM_SORTEASIZE:2733 TreesortFlags |= SORT_EASIZE;2734 break;2735 case IDM_SORTFIRST:2736 TreesortFlags |= SORT_FIRSTEXTENSION;2737 break;2738 case IDM_SORTLAST:2739 TreesortFlags |= SORT_LASTEXTENSION;2740 break;2741 case IDM_SORTLWDATE:2742 TreesortFlags |= SORT_LWDATE;2743 break;2744 case IDM_SORTLADATE:2745 TreesortFlags |= SORT_LADATE;2746 break;2747 case IDM_SORTCRDATE:2748 TreesortFlags |= SORT_CRDATE;2749 break;2750 case IDM_SORTDIRSFIRST:2751 if(TreesortFlags & SORT_DIRSFIRST)2752 TreesortFlags &= (~SORT_DIRSFIRST);2753 else {2754 TreesortFlags |= SORT_DIRSFIRST;2755 TreesortFlags &= (~SORT_DIRSLAST);2756 }2757 break;2758 case IDM_SORTDIRSLAST:2759 if(TreesortFlags & SORT_DIRSLAST)2760 TreesortFlags &= (~SORT_DIRSLAST);2761 else {2762 TreesortFlags |= SORT_DIRSLAST;2763 TreesortFlags &= (~SORT_DIRSFIRST);2764 }2765 break;2766 case IDM_SORTREVERSE:2767 if(TreesortFlags & SORT_REVERSE)2768 TreesortFlags &= (~SORT_REVERSE);2769 else2770 TreesortFlags |= SORT_REVERSE;2771 break;2772 }2773 PrfWriteProfileData(fmprof,appname,"TreeSort",&TreesortFlags,2774 sizeof(INT));2775 WinSendMsg(hwnd,CM_SORTRECORD,MPFROMP(SortTreeCnr),MPVOID);2776 break;2777 2778 case IDM_COLLECT:2779 if(!Collector) {2780 2781 HWND hwndC;2782 SWP swp;2783 2784 if(!ParentIsDesktop(hwnd,dcd->hwndParent) &&2785 !fAutoTile &&2786 (!fExternalCollector &&2787 *(ULONG *)realappname == FM3UL))2788 GetNextWindowPos(dcd->hwndParent,2789 &swp,2790 NULL,2791 NULL);2792 hwndC = StartCollector((fExternalCollector ||2793 *(ULONG *)realappname != FM3UL) ?2794 HWND_DESKTOP :2795 dcd->hwndParent,2796 4);2797 if(hwndC) {2798 if(!ParentIsDesktop(hwnd,2799 dcd->hwndParent) &&2800 !fAutoTile &&2801 (!fExternalCollector &&2802 *(ULONG *)realappname == FM3UL))2803 WinSetWindowPos(hwndC,2804 HWND_TOP,2805 swp.x,2806 swp.y,2807 swp.cx,2808 swp.cy,2809 SWP_MOVE | SWP_SIZE |2810 SWP_SHOW | SWP_ZORDER);2811 else if(!ParentIsDesktop(hwnd,2812 dcd->hwndParent) &&2813 fAutoTile &&2814 *(ULONG *)realappname == FM3UL)2815 TileChildren(dcd->hwndParent,2816 TRUE);2817 }2818 WinSetWindowPos(hwndC,2819 HWND_TOP,2820 0,2821 0,2822 0,2823 0,2824 SWP_ACTIVATE);2825 DosSleep(250L);2826 }2827 else2828 StartCollector(dcd->hwndParent,2829 4);2830 PostMsg(hwnd,2831 WM_COMMAND,2832 MPFROM2SHORT(IDM_COLLECTOR,0),2833 MPVOID);2834 break;2835 2836 case IDM_COLLECTOR:2837 DosSleep(64L);2838 {2839 CHAR **list;2840 2841 list = BuildList(hwnd);2842 if(list) {2843 if(Collector) {2844 if(!PostMsg(Collector,WM_COMMAND,2845 MPFROM2SHORT(IDM_COLLECTOR,0),2846 MPFROMP(list)))2847 FreeList(list);2848 }2849 else2850 FreeList(list);2851 }2852 }2853 break;2854 2855 case IDM_COLLAPSEALL:2856 WinSendMsg(hwnd,2857 CM_COLLAPSETREE,2858 MPVOID,2859 MPVOID);2860 break;2861 2862 case IDM_COLLAPSE:2863 case IDM_EXPAND:2864 {2865 PCNRITEM pci = NULL;2866 2867 pci = (PCNRITEM)CurrentRecord(hwnd);2868 if(pci && (INT)pci != -1) {2869 if(pci->flags & RECFLAGS_UNDERENV)2870 break;2871 PostMsg(dcd->hwndObject,2872 UM_EXPAND,2873 mp1,2874 MPFROMP(pci));2875 }2876 }2877 break;2878 2879 case IDM_UPDATE:2880 {2881 PCNRITEM pci = NULL;2882 2883 pci = (PCNRITEM)CurrentRecord(hwnd);2884 if(pci && (INT)pci != -1) {2885 if(pci->attrFile & FILE_DIRECTORY) {2886 if(pci->flags & RECFLAGS_UNDERENV)2887 break;2888 UnFlesh(hwnd,pci);2889 if(driveflags[toupper(*pci->szFileName) - 'A'] & (DRIVE_INVALID |2890 DRIVE_NOPRESCAN)) {2891 driveflags[toupper(*pci->szFileName) - 'A'] &= (DRIVE_IGNORE |2892 DRIVE_NOPRESCAN | DRIVE_NOLOADICONS |2893 DRIVE_NOLOADSUBJS | DRIVE_NOLOADLONGS);2894 DriveFlagsOne(toupper(*pci->szFileName) - 'A');2895 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID)2896 pci->rc.hptrIcon = hptrDunno;2897 else {2898 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_CDROM)2899 pci->rc.hptrIcon = hptrCDROM;2900 else2901 pci->rc.hptrIcon = (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) ?2902 hptrRemovable :2903 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOTE) ?2904 hptrRemote :2905 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_ZIPSTREAM) ?2906 hptrZipstrm : hptrDrive;2907 }2908 WinSendMsg(hwnd,2909 CM_INVALIDATERECORD,2910 MPFROMP(&pci),2911 MPFROM2SHORT(1,CMA_ERASE | CMA_REPOSITION));2912 if(hwndMain)2913 PostMsg(hwndMain,2914 UM_BUILDDRIVES,2915 MPVOID,2916 MPVOID);2917 }2918 if(!(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID))2919 Flesh(hwnd,pci);2920 }2921 else {2922 2923 }2924 }2925 }2926 break;2927 2928 case IDM_RESCAN:2929 PostMsg(dcd->hwndObject,2930 UM_RESCAN,2931 MPVOID,2932 MPVOID);2933 break;2934 2935 case IDM_RESORT:2936 WinSendMsg(hwnd,2937 CM_SORTRECORD,2938 MPFROMP(SortTreeCnr),2939 MPVOID);2940 break;2941 2942 case IDM_TEXT:2943 case IDM_MINIICONS:2944 {2945 CNRINFO cnri;2946 2947 memset(&cnri,0,sizeof(CNRINFO));2948 cnri.cb = sizeof(CNRINFO);2949 WinSendMsg(hwnd,2950 CM_QUERYCNRINFO,2951 MPFROMP(&cnri),2952 MPFROMLONG(sizeof(CNRINFO)));2953 if(SHORT1FROMMP(mp1) == IDM_MINIICONS) {2954 if(cnri.flWindowAttr & CV_MINI)2955 cnri.flWindowAttr &= (~CV_MINI);2956 else2957 cnri.flWindowAttr |= CV_MINI;2958 }2959 else {2960 if(cnri.flWindowAttr & CV_TEXT) {2961 cnri.flWindowAttr &= (~CV_TEXT);2962 cnri.flWindowAttr |= CV_ICON;2963 }2964 else {2965 cnri.flWindowAttr &= (~CV_ICON);2966 cnri.flWindowAttr |= CV_TEXT;2967 }2968 }2969 dcd->flWindowAttr = cnri.flWindowAttr;2970 PrfWriteProfileData(fmprof,2971 appname,2972 "TreeflWindowAttr",2973 &cnri.flWindowAttr,2974 sizeof(ULONG));2975 WinSendMsg(hwnd,2976 CM_SETCNRINFO,2977 MPFROMP(&cnri),2978 MPFROMLONG(CMA_FLWINDOWATTR | CMA_TREEICON |2979 CMA_SLTREEBITMAPORICON));2980 }2981 break;2982 2983 case IDM_SIZES:2984 case IDM_DRVFLAGS:2985 case IDM_SHOWALLFILES:2986 case IDM_UNDELETE:2987 case IDM_OPTIMIZE:2988 case IDM_CHKDSK:2989 case IDM_FORMAT:2990 case IDM_MKDIR:2991 case IDM_LOCK:2992 case IDM_UNLOCK:2993 case IDM_EJECT:2994 case IDM_CLOSETRAY:2995 {2996 PCNRITEM pci;2997 2998 pci = (PCNRITEM)CurrentRecord(hwnd);2999 if(pci && (INT)pci != -1)3000 CommonDriveCmd(hwnd,3001 pci->szFileName,3002 SHORT1FROMMP(mp1));3003 }3004 break;3005 3006 case IDM_SAVETOLIST:3007 WinDlgBox(HWND_DESKTOP,3008 hwnd,3009 SaveListDlgProc,3010 FM3ModHandle,3011 SAV_FRAME,3012 MPFROMP(&hwnd));3013 break;3014 3015 case IDM_DELETE:3016 case IDM_PERMDELETE:3017 case IDM_MOVE:3018 case IDM_WPSMOVE:3019 case IDM_WILDMOVE:3020 case IDM_RENAME:3021 {3022 PCNRITEM pci;3023 3024 pci = (PCNRITEM)CurrentRecord(hwnd);3025 if(pci && (INT)pci != -1) {3026 if(pci->flags & RECFLAGS_UNDERENV)3027 break;3028 }3029 }3030 /* else intentional fallthru */3031 case IDM_ATTRS:3032 case IDM_INFO:3033 case IDM_COPY:3034 case IDM_WPSCOPY:3035 case IDM_WILDCOPY:3036 case IDM_DOITYOURSELF:3037 case IDM_OPENWINDOW:3038 case IDM_OPENSETTINGS:3039 case IDM_OPENDEFAULT:3040 case IDM_OPENICON:3041 case IDM_OPENDETAILS:3042 case IDM_OPENTREE:3043 case IDM_SHADOW:3044 case IDM_SHADOW2:3045 case IDM_COMPARE:3046 case IDM_VIEW:3047 case IDM_VIEWTEXT:3048 case IDM_VIEWBINARY:3049 case IDM_EDIT:3050 case IDM_EDITTEXT:3051 case IDM_EDITBINARY:3052 case IDM_EAS:3053 case IDM_SUBJECT:3054 case IDM_APPENDTOCLIP:3055 case IDM_SAVETOCLIP:3056 case IDM_ARCHIVE:3057 case IDM_MCIPLAY:3058 case IDM_UUDECODE:3059 {3060 LISTINFO *li;3061 ULONG action = UM_ACTION;3062 3063 li = malloc(sizeof(LISTINFO));3064 if(li) {3065 memset(li,0,sizeof(LISTINFO));3066 li->type = SHORT1FROMMP(mp1);3067 li->hwnd = hwnd;3068 li->list = BuildList(hwnd);3069 if(!li->list || !li->list[0]) {3070 free(li);3071 break;3072 }3073 if(IsRoot(li->list[0])) {3074 switch(SHORT1FROMMP(mp1)) {3075 case IDM_MOVE:3076 case IDM_COPY:3077 case IDM_WILDCOPY:3078 case IDM_WILDMOVE:3079 case IDM_WPSMOVE:3080 case IDM_WPSCOPY:3081 case IDM_RENAME:3082 case IDM_DELETE:3083 case IDM_PERMDELETE:3084 mp1 = MPFROM2SHORT(IDM_INFO,SHORT2FROMMP(mp1));3085 li->type = IDM_INFO;3086 break;3087 }3088 }3089 switch(SHORT1FROMMP(mp1)) {3090 case IDM_APPENDTOCLIP:3091 case IDM_SAVETOCLIP:3092 case IDM_ARCHIVE:3093 case IDM_DELETE:3094 case IDM_PERMDELETE:3095 case IDM_ATTRS:3096 case IDM_SHADOW:3097 case IDM_SHADOW2:3098 case IDM_DOITYOURSELF:3099 case IDM_EAS:3100 case IDM_VIEW:3101 case IDM_VIEWTEXT:3102 case IDM_VIEWBINARY:3103 case IDM_EDIT:3104 case IDM_EDITTEXT:3105 case IDM_EDITBINARY:3106 case IDM_MCIPLAY:3107 action = UM_MASSACTION;3108 break;3109 }3110 if(SHORT1FROMMP(mp1) == IDM_SHADOW ||3111 SHORT1FROMMP(mp1) == IDM_SHADOW2)3112 *li->targetpath = 0;3113 if(!PostMsg(dcd->hwndObject,action,MPFROMP(li),MPVOID)) {3114 FreeListInfo(li);3115 DosBeep(50,100);3116 }3117 }3118 }3119 break;3120 3121 default:3122 if(SHORT1FROMMP(mp1) >= IDM_COMMANDSTART &&3123 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART) {3124 3125 INT x;3126 3127 if(!cmdloaded)3128 load_commands();3129 x = SHORT1FROMMP(mp1) - IDM_COMMANDSTART;3130 if(x >= 0) {3131 x++;3132 RunCommand(hwnd,x);3133 if(fUnHilite)3134 UnHilite(hwnd,TRUE,&dcd->lastselection);3135 }3136 }3137 break;3138 }2542 if(SwitchCommand(dcd->hwndLastMenu, 2543 SHORT1FROMMP(mp1))) 2544 return 0; 2545 switch(SHORT1FROMMP(mp1)) { 2546 case IDM_SETTARGET: 2547 SetTargetDir(hwnd,FALSE); 2548 break; 2549 2550 case IDM_DETACH: 2551 { 2552 CHAR d[3] = " :"; 2553 PCNRITEM pci; 2554 PROGDETAILS pgd; 2555 CHAR params[368],*p; 2556 HAPP happ; 2557 2558 2559 pci = (PCNRITEM)CurrentRecord(hwnd); 2560 if(pci && (INT)pci != -1 && isalpha(*pci->szFileName)) { 2561 *d = toupper(*pci->szFileName); 2562 p = GetCmdSpec(FALSE); 2563 memset(&pgd,0,sizeof(pgd)); 2564 pgd.Length = sizeof(pgd); 2565 pgd.progt.progc = PROG_WINDOWABLEVIO; 2566 pgd.progt.fbVisible = SHE_VISIBLE; 2567 pgd.pszTitle = GetPString(IDS_DETACHREQUESTTEXT); 2568 pgd.pszExecutable = p; 2569 pgd.pszParameters = params; 2570 pgd.pszStartupDir = NULL; 2571 pgd.pszIcon = NULL; 2572 pgd.pszEnvironment = NULL; 2573 pgd.swpInitial.hwndInsertBehind = HWND_TOP; 2574 pgd.swpInitial.hwnd = hwnd; 2575 pgd.swpInitial.fl = SWP_SHOW | SWP_ACTIVATE; 2576 sprintf(params,"/C NET USE %s /D",d); 2577 happ = WinStartApp(hwnd,&pgd,pgd.pszParameters, 2578 NULL,SAF_MAXIMIZED); 2579 if(happ) { 2580 2581 APPNOTIFY *info; 2582 2583 info = malloc(sizeof(APPNOTIFY)); 2584 if(info) { 2585 memset(info,0,sizeof(APPNOTIFY)); 2586 info->happ = happ; 2587 info->device = *d; 2588 if(!apphead) 2589 apphead = info; 2590 else { 2591 apptail->next = info; 2592 info->prev = apptail; 2593 } 2594 apptail = info; 2595 } 2596 } 2597 else 2598 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,hwnd, 2599 GetPString(IDS_ERRORTEXT), 2600 GetPString(IDS_CANTSTARTTEXT), 2601 p,params); 2602 } 2603 } 2604 break; 2605 2606 case IDM_REMAP: 2607 WinDlgBox(HWND_DESKTOP,hwnd,RemapDlgProc, 2608 FM3ModHandle,MAP_FRAME,NULL); 2609 break; 2610 2611 case IDM_CONTEXTMENU: 2612 { 2613 PCNRITEM pci; 2614 2615 pci = (PCNRITEM)CurrentRecord(hwnd); 2616 PostMsg(hwnd,WM_CONTROL,MPFROM2SHORT(DIR_CNR,CN_CONTEXTMENU), 2617 MPFROMP(pci)); 2618 } 2619 break; 2620 2621 case IDM_FINDINTREE: 2622 { 2623 CHAR dir[CCHMAXPATH]; 2624 PCNRITEM pci; 2625 2626 pci = (PCNRITEM)CurrentRecord(hwnd); 2627 if(pci && (INT)pci != -1) { 2628 strcpy(dir,pci->szFileName); 2629 MakeValidDir(dir); 2630 } 2631 else 2632 save_dir2(dir); 2633 if(WinDlgBox(HWND_DESKTOP,dcd->hwndParent, 2634 WalkAllDlgProc, 2635 FM3ModHandle,WALK_FRAME, 2636 MPFROMP(dir)) && *dir) 2637 WinSendMsg(hwnd,UM_SHOWME,MPFROMP(dir),MPFROMLONG(1L)); 2638 } 2639 break; 2640 2641 case IDM_BEGINEDIT: 2642 OpenEdit(hwnd); 2643 break; 2644 2645 case IDM_ENDEDIT: 2646 WinSendMsg(hwnd, 2647 CM_CLOSEEDIT, 2648 MPVOID, 2649 MPVOID); 2650 break; 2651 2652 case IDM_FILTER: 2653 { 2654 BOOL empty = FALSE; 2655 PCNRITEM pci; 2656 2657 pci = (PCNRITEM)CurrentRecord(hwnd); 2658 if(!*dcd->mask.szMask) 2659 empty = TRUE; 2660 dcd->mask.fIsTree = TRUE; 2661 *dcd->mask.prompt = 0; 2662 if(pci && (INT)pci != -1) 2663 dcd->mask.fFilesIncluded = ((driveflags[toupper(*pci->szFileName) - 'A'] & 2664 DRIVE_INCLUDEFILES) != 0); 2665 else 2666 dcd->mask.fFilesIncluded = FALSE; 2667 if(WinDlgBox(HWND_DESKTOP,hwnd,PickMaskDlgProc, 2668 FM3ModHandle,MSK_FRAME,MPFROMP(&dcd->mask))) 2669 WinSendMsg(hwnd,UM_FILTER,MPVOID,MPVOID); 2670 else if(empty) 2671 *dcd->mask.szMask = 0; 2672 PrfWriteProfileData(fmprof,appname,"TreeFilter",&dcd->mask, 2673 sizeof(MASK)); 2674 } 2675 break; 2676 2677 case IDM_SHOWSORT: 2678 QuickPopup(hwnd,dcd,CheckMenu(&TreeCnrMenu,TREECNR_POPUP), 2679 IDM_SORTSUBMENU); 2680 break; 2681 2682 case IDM_SHOWSELECT: 2683 QuickPopup(hwnd,dcd,CheckMenu(&TreeCnrMenu,TREECNR_POPUP), 2684 IDM_SELECTSUBMENU); 2685 break; 2686 2687 case IDM_NOTEBOOK: 2688 if(!ParentIsDesktop(dcd->hwndParent,dcd->hwndParent)) 2689 PostMsg(dcd->hwndParent,msg,mp1,mp2); 2690 else 2691 WinDlgBox(HWND_DESKTOP,hwnd,CfgDlgProc,FM3ModHandle, 2692 CFG_FRAME,(PVOID)"Tree"); 2693 break; 2694 2695 case IDM_WALKDIR: 2696 case IDM_OPENWALK: 2697 { 2698 CHAR newpath[CCHMAXPATH]; 2699 PCNRITEM pci; 2700 2701 pci = (PCNRITEM)CurrentRecord(hwnd); 2702 if(pci && (INT)pci != -1) { 2703 strcpy(newpath,pci->szFileName); 2704 MakeValidDir(newpath); 2705 } 2706 else 2707 save_dir2(newpath); 2708 if(!WinDlgBox(HWND_DESKTOP,dcd->hwndParent,WalkAllDlgProc, 2709 FM3ModHandle,WALK_FRAME, 2710 MPFROMP(newpath)) || !*newpath) 2711 break; 2712 WinSendMsg(hwnd,UM_OPENWINDOWFORME,MPFROMP(newpath),MPVOID); 2713 } 2714 break; 2715 2716 case IDM_HELP: 2717 if(hwndHelp) { 2718 if(!ParentIsDesktop(dcd->hwndFrame,dcd->hwndParent)) 2719 PostMsg(dcd->hwndParent,UM_COMMAND,mp1,mp2); 2720 else 2721 WinSendMsg(hwndHelp,HM_HELP_CONTENTS,MPVOID,MPVOID); 2722 } 2723 break; 2724 2725 case IDM_PARTITION: 2726 runemf2(SEPARATE | WINDOWED,HWND_DESKTOP,NULL,NULL, 2727 "%s","FDISKPM.EXE"); 2728 break; 2729 2730 case IDM_SORTNAME: 2731 case IDM_SORTFILENAME: 2732 case IDM_SORTSIZE: 2733 case IDM_SORTEASIZE: 2734 case IDM_SORTFIRST: 2735 case IDM_SORTLAST: 2736 case IDM_SORTLWDATE: 2737 case IDM_SORTLADATE: 2738 case IDM_SORTCRDATE: 2739 TreesortFlags &= (SORT_REVERSE | SORT_DIRSFIRST | SORT_DIRSLAST); 2740 case IDM_SORTDIRSFIRST: 2741 case IDM_SORTDIRSLAST: 2742 case IDM_SORTREVERSE: 2743 switch(SHORT1FROMMP(mp1)) { 2744 case IDM_SORTFILENAME: 2745 TreesortFlags |= SORT_FILENAME; 2746 break; 2747 case IDM_SORTSIZE: 2748 TreesortFlags |= SORT_SIZE; 2749 break; 2750 case IDM_SORTEASIZE: 2751 TreesortFlags |= SORT_EASIZE; 2752 break; 2753 case IDM_SORTFIRST: 2754 TreesortFlags |= SORT_FIRSTEXTENSION; 2755 break; 2756 case IDM_SORTLAST: 2757 TreesortFlags |= SORT_LASTEXTENSION; 2758 break; 2759 case IDM_SORTLWDATE: 2760 TreesortFlags |= SORT_LWDATE; 2761 break; 2762 case IDM_SORTLADATE: 2763 TreesortFlags |= SORT_LADATE; 2764 break; 2765 case IDM_SORTCRDATE: 2766 TreesortFlags |= SORT_CRDATE; 2767 break; 2768 case IDM_SORTDIRSFIRST: 2769 if(TreesortFlags & SORT_DIRSFIRST) 2770 TreesortFlags &= (~SORT_DIRSFIRST); 2771 else { 2772 TreesortFlags |= SORT_DIRSFIRST; 2773 TreesortFlags &= (~SORT_DIRSLAST); 2774 } 2775 break; 2776 case IDM_SORTDIRSLAST: 2777 if(TreesortFlags & SORT_DIRSLAST) 2778 TreesortFlags &= (~SORT_DIRSLAST); 2779 else { 2780 TreesortFlags |= SORT_DIRSLAST; 2781 TreesortFlags &= (~SORT_DIRSFIRST); 2782 } 2783 break; 2784 case IDM_SORTREVERSE: 2785 if(TreesortFlags & SORT_REVERSE) 2786 TreesortFlags &= (~SORT_REVERSE); 2787 else 2788 TreesortFlags |= SORT_REVERSE; 2789 break; 2790 } 2791 PrfWriteProfileData(fmprof,appname,"TreeSort",&TreesortFlags, 2792 sizeof(INT)); 2793 WinSendMsg(hwnd,CM_SORTRECORD,MPFROMP(SortTreeCnr),MPVOID); 2794 break; 2795 2796 case IDM_COLLECT: 2797 if(!Collector) { 2798 2799 HWND hwndC; 2800 SWP swp; 2801 2802 if(!ParentIsDesktop(hwnd,dcd->hwndParent) && 2803 !fAutoTile && 2804 (!fExternalCollector && 2805 *(ULONG *)realappname == FM3UL)) 2806 GetNextWindowPos(dcd->hwndParent, 2807 &swp, 2808 NULL, 2809 NULL); 2810 hwndC = StartCollector((fExternalCollector || 2811 *(ULONG *)realappname != FM3UL) ? 2812 HWND_DESKTOP : 2813 dcd->hwndParent, 2814 4); 2815 if(hwndC) { 2816 if(!ParentIsDesktop(hwnd, 2817 dcd->hwndParent) && 2818 !fAutoTile && 2819 (!fExternalCollector && 2820 *(ULONG *)realappname == FM3UL)) 2821 WinSetWindowPos(hwndC, 2822 HWND_TOP, 2823 swp.x, 2824 swp.y, 2825 swp.cx, 2826 swp.cy, 2827 SWP_MOVE | SWP_SIZE | 2828 SWP_SHOW | SWP_ZORDER); 2829 else if(!ParentIsDesktop(hwnd, 2830 dcd->hwndParent) && 2831 fAutoTile && 2832 *(ULONG *)realappname == FM3UL) 2833 TileChildren(dcd->hwndParent, 2834 TRUE); 2835 } 2836 WinSetWindowPos(hwndC, 2837 HWND_TOP, 2838 0, 2839 0, 2840 0, 2841 0, 2842 SWP_ACTIVATE); 2843 DosSleep(250L); 2844 } 2845 else 2846 StartCollector(dcd->hwndParent, 2847 4); 2848 PostMsg(hwnd, 2849 WM_COMMAND, 2850 MPFROM2SHORT(IDM_COLLECTOR,0), 2851 MPVOID); 2852 break; 2853 2854 case IDM_COLLECTOR: 2855 DosSleep(64L); 2856 { 2857 CHAR **list; 2858 2859 list = BuildList(hwnd); 2860 if(list) { 2861 if(Collector) { 2862 if(!PostMsg(Collector,WM_COMMAND, 2863 MPFROM2SHORT(IDM_COLLECTOR,0), 2864 MPFROMP(list))) 2865 FreeList(list); 2866 } 2867 else 2868 FreeList(list); 2869 } 2870 } 2871 break; 2872 2873 case IDM_COLLAPSEALL: 2874 WinSendMsg(hwnd, 2875 CM_COLLAPSETREE, 2876 MPVOID, 2877 MPVOID); 2878 break; 2879 2880 case IDM_COLLAPSE: 2881 case IDM_EXPAND: 2882 { 2883 PCNRITEM pci = NULL; 2884 2885 pci = (PCNRITEM)CurrentRecord(hwnd); 2886 if(pci && (INT)pci != -1) { 2887 if(pci->flags & RECFLAGS_UNDERENV) 2888 break; 2889 PostMsg(dcd->hwndObject, 2890 UM_EXPAND, 2891 mp1, 2892 MPFROMP(pci)); 2893 } 2894 } 2895 break; 2896 2897 case IDM_UPDATE: 2898 { 2899 PCNRITEM pci = NULL; 2900 2901 pci = (PCNRITEM)CurrentRecord(hwnd); 2902 if(pci && (INT)pci != -1) { 2903 if(pci->attrFile & FILE_DIRECTORY) { 2904 if(pci->flags & RECFLAGS_UNDERENV) 2905 break; 2906 UnFlesh(hwnd,pci); 2907 if(driveflags[toupper(*pci->szFileName) - 'A'] & (DRIVE_INVALID | 2908 DRIVE_NOPRESCAN)) { 2909 driveflags[toupper(*pci->szFileName) - 'A'] &= (DRIVE_IGNORE | 2910 DRIVE_NOPRESCAN | DRIVE_NOLOADICONS | 2911 DRIVE_NOLOADSUBJS | DRIVE_NOLOADLONGS); 2912 DriveFlagsOne(toupper(*pci->szFileName) - 'A'); 2913 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID) 2914 pci->rc.hptrIcon = hptrDunno; 2915 else { 2916 if(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_CDROM) 2917 pci->rc.hptrIcon = hptrCDROM; 2918 else 2919 pci->rc.hptrIcon = (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE) ? 2920 hptrRemovable : 2921 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOTE) ? 2922 hptrRemote : 2923 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_ZIPSTREAM) ? 2924 hptrZipstrm : hptrDrive; 2925 } 2926 WinSendMsg(hwnd, 2927 CM_INVALIDATERECORD, 2928 MPFROMP(&pci), 2929 MPFROM2SHORT(1,CMA_ERASE | CMA_REPOSITION)); 2930 if(hwndMain) 2931 PostMsg(hwndMain, 2932 UM_BUILDDRIVES, 2933 MPVOID, 2934 MPVOID); 2935 } 2936 if(!(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_INVALID)) 2937 Flesh(hwnd,pci); 2938 } 2939 else { 2940 2941 } 2942 } 2943 } 2944 break; 2945 2946 case IDM_RESCAN: 2947 PostMsg(dcd->hwndObject, 2948 UM_RESCAN, 2949 MPVOID, 2950 MPVOID); 2951 break; 2952 2953 case IDM_RESORT: 2954 WinSendMsg(hwnd, 2955 CM_SORTRECORD, 2956 MPFROMP(SortTreeCnr), 2957 MPVOID); 2958 break; 2959 2960 case IDM_TEXT: 2961 case IDM_MINIICONS: 2962 { 2963 CNRINFO cnri; 2964 2965 memset(&cnri,0,sizeof(CNRINFO)); 2966 cnri.cb = sizeof(CNRINFO); 2967 WinSendMsg(hwnd, 2968 CM_QUERYCNRINFO, 2969 MPFROMP(&cnri), 2970 MPFROMLONG(sizeof(CNRINFO))); 2971 if(SHORT1FROMMP(mp1) == IDM_MINIICONS) { 2972 if(cnri.flWindowAttr & CV_MINI) 2973 cnri.flWindowAttr &= (~CV_MINI); 2974 else 2975 cnri.flWindowAttr |= CV_MINI; 2976 } 2977 else { 2978 if(cnri.flWindowAttr & CV_TEXT) { 2979 cnri.flWindowAttr &= (~CV_TEXT); 2980 cnri.flWindowAttr |= CV_ICON; 2981 } 2982 else { 2983 cnri.flWindowAttr &= (~CV_ICON); 2984 cnri.flWindowAttr |= CV_TEXT; 2985 } 2986 } 2987 dcd->flWindowAttr = cnri.flWindowAttr; 2988 PrfWriteProfileData(fmprof, 2989 appname, 2990 "TreeflWindowAttr", 2991 &cnri.flWindowAttr, 2992 sizeof(ULONG)); 2993 WinSendMsg(hwnd, 2994 CM_SETCNRINFO, 2995 MPFROMP(&cnri), 2996 MPFROMLONG(CMA_FLWINDOWATTR | CMA_TREEICON | 2997 CMA_SLTREEBITMAPORICON)); 2998 } 2999 break; 3000 3001 case IDM_SIZES: 3002 case IDM_DRVFLAGS: 3003 case IDM_SHOWALLFILES: 3004 case IDM_UNDELETE: 3005 case IDM_OPTIMIZE: 3006 case IDM_CHKDSK: 3007 case IDM_FORMAT: 3008 case IDM_MKDIR: 3009 case IDM_LOCK: 3010 case IDM_UNLOCK: 3011 case IDM_EJECT: 3012 case IDM_CLOSETRAY: 3013 { 3014 PCNRITEM pci; 3015 3016 pci = (PCNRITEM)CurrentRecord(hwnd); 3017 if(pci && (INT)pci != -1) 3018 CommonDriveCmd(hwnd, 3019 pci->szFileName, 3020 SHORT1FROMMP(mp1)); 3021 } 3022 break; 3023 3024 case IDM_SAVETOLIST: 3025 WinDlgBox(HWND_DESKTOP, 3026 hwnd, 3027 SaveListDlgProc, 3028 FM3ModHandle, 3029 SAV_FRAME, 3030 MPFROMP(&hwnd)); 3031 break; 3032 3033 case IDM_DELETE: 3034 case IDM_PERMDELETE: 3035 case IDM_MOVE: 3036 case IDM_WPSMOVE: 3037 case IDM_WILDMOVE: 3038 case IDM_RENAME: 3039 { 3040 PCNRITEM pci; 3041 3042 pci = (PCNRITEM)CurrentRecord(hwnd); 3043 if(pci && (INT)pci != -1) { 3044 if(pci->flags & RECFLAGS_UNDERENV) 3045 break; 3046 } 3047 } 3048 /* else intentional fallthru */ 3049 case IDM_ATTRS: 3050 case IDM_INFO: 3051 case IDM_COPY: 3052 case IDM_WPSCOPY: 3053 case IDM_WILDCOPY: 3054 case IDM_DOITYOURSELF: 3055 case IDM_OPENWINDOW: 3056 case IDM_OPENSETTINGS: 3057 case IDM_OPENDEFAULT: 3058 case IDM_OPENICON: 3059 case IDM_OPENDETAILS: 3060 case IDM_OPENTREE: 3061 case IDM_SHADOW: 3062 case IDM_SHADOW2: 3063 case IDM_COMPARE: 3064 case IDM_VIEW: 3065 case IDM_VIEWTEXT: 3066 case IDM_VIEWBINARY: 3067 case IDM_EDIT: 3068 case IDM_EDITTEXT: 3069 case IDM_EDITBINARY: 3070 case IDM_EAS: 3071 case IDM_SUBJECT: 3072 case IDM_APPENDTOCLIP: 3073 case IDM_SAVETOCLIP: 3074 case IDM_ARCHIVE: 3075 case IDM_MCIPLAY: 3076 case IDM_UUDECODE: 3077 { 3078 LISTINFO *li; 3079 ULONG action = UM_ACTION; 3080 3081 li = malloc(sizeof(LISTINFO)); 3082 if(li) { 3083 memset(li,0,sizeof(LISTINFO)); 3084 li->type = SHORT1FROMMP(mp1); 3085 li->hwnd = hwnd; 3086 li->list = BuildList(hwnd); 3087 if(!li->list || !li->list[0]) { 3088 free(li); 3089 break; 3090 } 3091 if(IsRoot(li->list[0])) { 3092 switch(SHORT1FROMMP(mp1)) { 3093 case IDM_MOVE: 3094 case IDM_COPY: 3095 case IDM_WILDCOPY: 3096 case IDM_WILDMOVE: 3097 case IDM_WPSMOVE: 3098 case IDM_WPSCOPY: 3099 case IDM_RENAME: 3100 case IDM_DELETE: 3101 case IDM_PERMDELETE: 3102 mp1 = MPFROM2SHORT(IDM_INFO,SHORT2FROMMP(mp1)); 3103 li->type = IDM_INFO; 3104 break; 3105 } 3106 } 3107 switch(SHORT1FROMMP(mp1)) { 3108 case IDM_APPENDTOCLIP: 3109 case IDM_SAVETOCLIP: 3110 case IDM_ARCHIVE: 3111 case IDM_DELETE: 3112 case IDM_PERMDELETE: 3113 case IDM_ATTRS: 3114 case IDM_SHADOW: 3115 case IDM_SHADOW2: 3116 case IDM_DOITYOURSELF: 3117 case IDM_EAS: 3118 case IDM_VIEW: 3119 case IDM_VIEWTEXT: 3120 case IDM_VIEWBINARY: 3121 case IDM_EDIT: 3122 case IDM_EDITTEXT: 3123 case IDM_EDITBINARY: 3124 case IDM_MCIPLAY: 3125 action = UM_MASSACTION; 3126 break; 3127 } 3128 if(SHORT1FROMMP(mp1) == IDM_SHADOW || 3129 SHORT1FROMMP(mp1) == IDM_SHADOW2) 3130 *li->targetpath = 0; 3131 if(!PostMsg(dcd->hwndObject,action,MPFROMP(li),MPVOID)) { 3132 FreeListInfo(li); 3133 DosBeep(50,100); 3134 } 3135 } 3136 } 3137 break; 3138 3139 default: 3140 if(SHORT1FROMMP(mp1) >= IDM_COMMANDSTART && 3141 SHORT1FROMMP(mp1) < IDM_QUICKTOOLSTART) { 3142 3143 INT x; 3144 3145 if(!cmdloaded) 3146 load_commands(); 3147 x = SHORT1FROMMP(mp1) - IDM_COMMANDSTART; 3148 if(x >= 0) { 3149 x++; 3150 RunCommand(hwnd,x); 3151 if(fUnHilite) 3152 UnHilite(hwnd,TRUE,&dcd->lastselection); 3153 } 3154 } 3155 break; 3156 } 3139 3157 } 3140 3158 return 0; … … 3143 3161 if(dcd && !ParentIsDesktop(hwnd,dcd->hwndParent)) { 3144 3162 3145 SWP swp,swpP;3146 INT ratio;3147 3148 WinQueryWindowPos(dcd->hwndFrame,&swp);3149 if(!(swp.fl & (SWP_MINIMIZE | SWP_MAXIMIZE | SWP_HIDE))) {3150 WinQueryWindowPos(dcd->hwndParent,&swpP);3151 ratio = (swpP.cx * 100) / swp.cx;3152 if(ratio > 0)3153 PrfWriteProfileData(fmprof,appname,"TreeWindowRatio",3154 &ratio,sizeof(INT));3155 }3163 SWP swp,swpP; 3164 INT ratio; 3165 3166 WinQueryWindowPos(dcd->hwndFrame,&swp); 3167 if(!(swp.fl & (SWP_MINIMIZE | SWP_MAXIMIZE | SWP_HIDE))) { 3168 WinQueryWindowPos(dcd->hwndParent,&swpP); 3169 ratio = (swpP.cx * 100) / swp.cx; 3170 if(ratio > 0) 3171 PrfWriteProfileData(fmprof,appname,"TreeWindowRatio", 3172 &ratio,sizeof(INT)); 3173 } 3156 3174 } 3157 3175 else if(dcd && ParentIsDesktop(hwnd,dcd->hwndParent)) { 3158 3176 3159 SWP swp;3160 3161 WinQueryWindowPos(dcd->hwndFrame,&swp);3162 if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE | SWP_MAXIMIZE)))3163 WinStoreWindowPos(FM2Str,"VTreeWindowPos",dcd->hwndFrame);3177 SWP swp; 3178 3179 WinQueryWindowPos(dcd->hwndFrame,&swp); 3180 if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE | SWP_MAXIMIZE))) 3181 WinStoreWindowPos(FM2Str,"VTreeWindowPos",dcd->hwndFrame); 3164 3182 } 3165 3183 break; … … 3167 3185 case UM_MINIMIZE: 3168 3186 if(dcd && hwndMain) { 3169 fOkayMinimize = TRUE;3170 if(dcd->hwndObject && !fDummy) {3171 DosSleep(100L);3172 if(!fDummy) {3173 fOkayMinimize = FALSE;3174 WinSetWindowPos(((hwndMain) ? WinQueryWindow(hwndMain,QW_PARENT) :3175 dcd->hwndFrame),HWND_TOP,0,0,0,0,SWP_MINIMIZE |3176 SWP_DEACTIVATE);3177 }3178 }3187 fOkayMinimize = TRUE; 3188 if(dcd->hwndObject && !fDummy) { 3189 DosSleep(100L); 3190 if(!fDummy) { 3191 fOkayMinimize = FALSE; 3192 WinSetWindowPos(((hwndMain) ? WinQueryWindow(hwndMain,QW_PARENT) : 3193 dcd->hwndFrame),HWND_TOP,0,0,0,0,SWP_MINIMIZE | 3194 SWP_DEACTIVATE); 3195 } 3196 } 3179 3197 } 3180 3198 return 0; … … 3182 3200 case UM_MAXIMIZE: 3183 3201 if(dcd || hwndMain) 3184 WinSetWindowPos(((hwndMain) ? WinQueryWindow(hwndMain,QW_PARENT) :3185 dcd->hwndFrame),HWND_TOP,0,0,0,0,SWP_MAXIMIZE |3186 SWP_SHOW);3202 WinSetWindowPos(((hwndMain) ? WinQueryWindow(hwndMain,QW_PARENT) : 3203 dcd->hwndFrame),HWND_TOP,0,0,0,0,SWP_MAXIMIZE | 3204 SWP_SHOW); 3187 3205 return 0; 3188 3206 3189 3207 case UM_CLOSE: 3190 3208 { 3191 HWND hwndParent = WinQueryWindow(WinQueryWindow(WinQueryWindow(hwnd,3192 QW_PARENT),QW_PARENT),QW_PARENT);3193 3194 if(!mp1) {3195 if(!PostMsg((HWND)0,WM_QUIT,MPVOID,MPVOID))3196 WinSendMsg((HWND)0,WM_QUIT,MPVOID,MPVOID);3197 if(hwndParent && !ParentIsDesktop(hwnd,hwndParent))3198 WinDestroyWindow(hwndParent);3199 }3200 else3201 WinDestroyWindow(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT),3202 QW_PARENT));3209 HWND hwndParent = WinQueryWindow(WinQueryWindow(WinQueryWindow(hwnd, 3210 QW_PARENT),QW_PARENT),QW_PARENT); 3211 3212 if(!mp1) { 3213 if(!PostMsg((HWND)0,WM_QUIT,MPVOID,MPVOID)) 3214 WinSendMsg((HWND)0,WM_QUIT,MPVOID,MPVOID); 3215 if(hwndParent && !ParentIsDesktop(hwnd,hwndParent)) 3216 WinDestroyWindow(hwndParent); 3217 } 3218 else 3219 WinDestroyWindow(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT), 3220 QW_PARENT)); 3203 3221 } 3204 3222 return 0; … … 3207 3225 WinSendMsg(hwnd,WM_SAVEAPPLICATION,MPVOID,MPVOID); 3208 3226 if(dcd) 3209 dcd->stopflag++;3227 dcd->stopflag++; 3210 3228 if(dcd && dcd->hwndObject) { 3211 /* kill object window */3212 if(!PostMsg(dcd->hwndObject,WM_CLOSE,MPVOID,MPVOID))3213 WinSendMsg(dcd->hwndObject,WM_CLOSE,MPVOID,MPVOID);3229 /* kill object window */ 3230 if(!PostMsg(dcd->hwndObject,WM_CLOSE,MPVOID,MPVOID)) 3231 WinSendMsg(dcd->hwndObject,WM_CLOSE,MPVOID,MPVOID); 3214 3232 } 3215 3233 else 3216 WinSendMsg(hwnd,UM_CLOSE,MPFROMLONG(1L),MPVOID);3234 WinSendMsg(hwnd,UM_CLOSE,MPFROMLONG(1L),MPVOID); 3217 3235 return 0; 3218 3236 3219 3237 case WM_DESTROY: 3220 3238 if(TreeCnrMenu) 3221 WinDestroyWindow(TreeCnrMenu);3239 WinDestroyWindow(TreeCnrMenu); 3222 3240 if(DirMenu) 3223 WinDestroyWindow(DirMenu);3241 WinDestroyWindow(DirMenu); 3224 3242 if(FileMenu) 3225 WinDestroyWindow(FileMenu);3243 WinDestroyWindow(FileMenu); 3226 3244 TreeCnrMenu = FileMenu = DirMenu = (HWND)0; 3227 3245 EmptyCnr(hwnd); 3228 3246 if(apphead) { 3229 3247 3230 APPNOTIFY *info,*next;3231 3232 info = apphead;3233 while(info) {3234 next = info->next;3235 free(info);3236 info = next;3237 }3238 apphead = apptail = NULL;3248 APPNOTIFY *info,*next; 3249 3250 info = apphead; 3251 while(info) { 3252 next = info->next; 3253 free(info); 3254 info = next; 3255 } 3256 apphead = apptail = NULL; 3239 3257 } 3240 3258 break; 3241 3259 } 3242 3260 return (dcd && dcd->oldproc) ? dcd->oldproc(hwnd,msg,mp1,mp2) : 3243 PFNWPCnr(hwnd,msg,mp1,mp2);3261 PFNWPCnr(hwnd,msg,mp1,mp2); 3244 3262 } 3245 3263 … … 3254 3272 HWND hwndFrame = (HWND)0,hwndClient; 3255 3273 ULONG FrameFlags = FCF_TITLEBAR | FCF_SYSMENU | 3256 FCF_SIZEBORDER | FCF_MINMAX |3257 FCF_ICON | FCF_NOBYTEALIGN |3258 FCF_ACCELTABLE;3274 FCF_SIZEBORDER | FCF_MINMAX | 3275 FCF_ICON | FCF_NOBYTEALIGN | 3276 FCF_ACCELTABLE; 3259 3277 DIRCNRDATA *dcd; 3260 3278 … … 3265 3283 if(flags & 2) 3266 3284 FrameFlags &= (~(FCF_TITLEBAR | FCF_SYSMENU | FCF_SIZEBORDER | 3267 FCF_MINMAX | FCF_ICON));3285 FCF_MINMAX | FCF_ICON)); 3268 3286 hwndFrame = WinCreateStdWindow(hwndParent, 3269 WS_VISIBLE,3270 &FrameFlags,3271 GetPString(IDS_WCTREECONTAINER),3272 NULL,3273 WS_VISIBLE | fwsAnimate,3274 FM3ModHandle,3275 TREE_FRAME,3276 &hwndClient);3287 WS_VISIBLE, 3288 &FrameFlags, 3289 GetPString(IDS_WCTREECONTAINER), 3290 NULL, 3291 WS_VISIBLE | fwsAnimate, 3292 FM3ModHandle, 3293 TREE_FRAME, 3294 &hwndClient); 3277 3295 if(hwndFrame && hwndClient) { 3278 3296 dcd = malloc(sizeof(DIRCNRDATA)); … … 3283 3301 WinQueryWindowPos(hwndFrame,&swp); 3284 3302 if(*(ULONG *)realappname == FM3UL) 3285 WinCreateWindow(hwndFrame,3286 GetPString(IDS_WCTREEOPENBUTTON),3287 "O",3288 WS_VISIBLE | BS_PUSHBUTTON | BS_NOPOINTERFOCUS,3289 ((swp.cx - WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON)) -3290 WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON) / 2) -3291 WinQuerySysValue(HWND_DESKTOP,SV_CXSIZEBORDER),3292 (swp.cy - WinQuerySysValue(HWND_DESKTOP,SV_CYMINMAXBUTTON)) -3293 WinQuerySysValue(HWND_DESKTOP,SV_CYSIZEBORDER),3294 WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON) / 2,3295 WinQuerySysValue(HWND_DESKTOP,SV_CYMINMAXBUTTON),3296 hwndFrame,3297 HWND_TOP,3298 IDM_OPENWINDOW,3299 NULL,3300 NULL);3303 WinCreateWindow(hwndFrame, 3304 GetPString(IDS_WCTREEOPENBUTTON), 3305 "O", 3306 WS_VISIBLE | BS_PUSHBUTTON | BS_NOPOINTERFOCUS, 3307 ((swp.cx - WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON)) - 3308 WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON) / 2) - 3309 WinQuerySysValue(HWND_DESKTOP,SV_CXSIZEBORDER), 3310 (swp.cy - WinQuerySysValue(HWND_DESKTOP,SV_CYMINMAXBUTTON)) - 3311 WinQuerySysValue(HWND_DESKTOP,SV_CYSIZEBORDER), 3312 WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON) / 2, 3313 WinQuerySysValue(HWND_DESKTOP,SV_CYMINMAXBUTTON), 3314 hwndFrame, 3315 HWND_TOP, 3316 IDM_OPENWINDOW, 3317 NULL, 3318 NULL); 3301 3319 else 3302 WinCreateWindow(hwndFrame,3303 GetPString(IDS_WCTREESTATUS),3304 GetPString(IDS_YOUAREHERETEXT),3305 WS_VISIBLE | SS_TEXT | DT_LEFT | DT_VCENTER,3306 swp.x + 4 + WinQuerySysValue(HWND_DESKTOP,3307 SV_CXSIZEBORDER),3308 swp.cy - (22 + WinQuerySysValue(HWND_DESKTOP,3309 SV_CYSIZEBORDER)),3310 (swp.cx - 8) - (WinQuerySysValue(HWND_DESKTOP,3311 SV_CXSIZEBORDER) * 2),3312 22,3313 hwndFrame,3314 HWND_TOP,3315 MAIN_STATUS,3316 NULL,3317 NULL);3320 WinCreateWindow(hwndFrame, 3321 GetPString(IDS_WCTREESTATUS), 3322 GetPString(IDS_YOUAREHERETEXT), 3323 WS_VISIBLE | SS_TEXT | DT_LEFT | DT_VCENTER, 3324 swp.x + 4 + WinQuerySysValue(HWND_DESKTOP, 3325 SV_CXSIZEBORDER), 3326 swp.cy - (22 + WinQuerySysValue(HWND_DESKTOP, 3327 SV_CYSIZEBORDER)), 3328 (swp.cx - 8) - (WinQuerySysValue(HWND_DESKTOP, 3329 SV_CXSIZEBORDER) * 2), 3330 22, 3331 hwndFrame, 3332 HWND_TOP, 3333 MAIN_STATUS, 3334 NULL, 3335 NULL); 3318 3336 memset(dcd,0,sizeof(DIRCNRDATA)); 3319 3337 dcd->size = sizeof(DIRCNRDATA); … … 3324 3342 dcd->hwndFrame = hwndFrame; 3325 3343 { 3326 PFNWP oldproc;3327 3328 oldproc = WinSubclassWindow(hwndFrame,(PFNWP)TreeFrameWndProc);3329 WinSetWindowPtr(hwndFrame,0,(PVOID)oldproc);3330 oldproc = WinSubclassWindow(WinWindowFromID(hwndFrame,FID_TITLEBAR),3331 (PFNWP)TreeTitleWndProc);3332 WinSetWindowPtr(WinWindowFromID(hwndFrame,FID_TITLEBAR),0,3333 (PVOID)oldproc);3344 PFNWP oldproc; 3345 3346 oldproc = WinSubclassWindow(hwndFrame,(PFNWP)TreeFrameWndProc); 3347 WinSetWindowPtr(hwndFrame,0,(PVOID)oldproc); 3348 oldproc = WinSubclassWindow(WinWindowFromID(hwndFrame,FID_TITLEBAR), 3349 (PFNWP)TreeTitleWndProc); 3350 WinSetWindowPtr(WinWindowFromID(hwndFrame,FID_TITLEBAR),0, 3351 (PVOID)oldproc); 3334 3352 } 3335 3353 dcd->hwndCnr = WinCreateWindow(hwndClient, 3336 WC_CONTAINER,3337 NULL,3338 CCS_AUTOPOSITION | CCS_MINIICONS |3339 CCS_MINIRECORDCORE | WS_VISIBLE,3340 0,3341 0,3342 0,3343 0,3344 hwndClient,3345 HWND_TOP,3346 (ULONG)TREE_CNR,3347 NULL,3348 NULL);3354 WC_CONTAINER, 3355 NULL, 3356 CCS_AUTOPOSITION | CCS_MINIICONS | 3357 CCS_MINIRECORDCORE | WS_VISIBLE, 3358 0, 3359 0, 3360 0, 3361 0, 3362 hwndClient, 3363 HWND_TOP, 3364 (ULONG)TREE_CNR, 3365 NULL, 3366 NULL); 3349 3367 if(dcd->hwndCnr) { 3350 WinSetWindowPtr(dcd->hwndCnr,0,(PVOID)dcd);3351 if(ParentIsDesktop(hwndFrame,hwndParent)) {3352 WinSetWindowText(WinWindowFromID(hwndFrame,FID_TITLEBAR),"VTree");3353 FixSwitchList(hwndFrame,"VTree");3354 }3355 else {3356 WinSetWindowText(hwndFrame,GetPString(IDS_TREETEXT));3357 WinSetWindowText(WinWindowFromID(hwndFrame,FID_TITLEBAR),3358 GetPString(IDS_TREETEXT));3359 }3360 dcd->oldproc = WinSubclassWindow(dcd->hwndCnr,(PFNWP)TreeCnrWndProc);3361 if(!PostMsg(dcd->hwndCnr,UM_SETUP,MPVOID,MPVOID))3362 WinSendMsg(dcd->hwndCnr,UM_SETUP,MPVOID,MPVOID);3368 WinSetWindowPtr(dcd->hwndCnr,0,(PVOID)dcd); 3369 if(ParentIsDesktop(hwndFrame,hwndParent)) { 3370 WinSetWindowText(WinWindowFromID(hwndFrame,FID_TITLEBAR),"VTree"); 3371 FixSwitchList(hwndFrame,"VTree"); 3372 } 3373 else { 3374 WinSetWindowText(hwndFrame,GetPString(IDS_TREETEXT)); 3375 WinSetWindowText(WinWindowFromID(hwndFrame,FID_TITLEBAR), 3376 GetPString(IDS_TREETEXT)); 3377 } 3378 dcd->oldproc = WinSubclassWindow(dcd->hwndCnr,(PFNWP)TreeCnrWndProc); 3379 if(!PostMsg(dcd->hwndCnr,UM_SETUP,MPVOID,MPVOID)) 3380 WinSendMsg(dcd->hwndCnr,UM_SETUP,MPVOID,MPVOID); 3363 3381 } 3364 3382 else { 3365 PostMsg(hwndClient,WM_CLOSE,MPVOID,MPVOID);3366 free(dcd);3367 hwndFrame = (HWND)0;3383 PostMsg(hwndClient,WM_CLOSE,MPVOID,MPVOID); 3384 free(dcd); 3385 hwndFrame = (HWND)0; 3368 3386 } 3369 3387 } 3370 3388 else { 3371 3389 saymsg(MB_ENTER,hwndParent,DEBUG_STRING, 3372 GetPString(IDS_OUTOFMEMORY));3390 GetPString(IDS_OUTOFMEMORY)); 3373 3391 PostMsg(hwndClient,WM_CLOSE,MPVOID,MPVOID); 3374 3392 hwndFrame = (HWND)0;
Note:
See TracChangeset
for help on using the changeset viewer.
