Changeset 176 for trunk/dll/treecnr.c
- Timestamp:
- May 28, 2005, 7:41:08 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 60 61 62 63 64 65 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 71 72 73 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 79 80 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 86 86 emphasized = TRUE; 87 EmphasizeButton(hwnd,emphasized); 87 88 } 88 89 if(AcceptOneDrop(mp1,mp2)) 89 90 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 96 96 emphasized = FALSE; 97 EmphasizeButton(hwnd,emphasized); 97 98 } 98 99 break; … … 104 105 case DM_DROP: 105 106 { 106 107 108 109 110 111 112 113 114 115 116 117 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 139 140 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 150 151 152 153 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 163 164 165 166 163 szDir, 164 NULL, 165 TRUE, 166 FALSE, 167 TRUE); 167 168 if(pciP && 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 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 189 break; 189 190 DosSleep(0L); 190 191 } 191 192 pci = FindCnrRecord(hwndCnr, 192 193 194 195 196 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 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 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 228 229 230 231 232 233 234 235 236 237 238 239 240 241 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 250 250 ShowCnrRecord(hwndCnr, 251 (PMINIRECORDCORE)pciToSelect); 251 252 if(fSwitchTreeExpand && 252 253 254 255 256 253 !(pciToSelect->rc.flRecordAttr & CRA_EXPANDED)) 254 WinSendMsg(hwndCnr, 255 CM_EXPANDTREE, 256 MPFROMP(pciToSelect), 257 MPVOID); 257 258 if(quickbail) { 258 259 259 WinEnableWindowUpdate(hwndCnr,TRUE); 260 return; 260 261 } 261 262 WinSendMsg(hwndCnr, 262 263 264 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 279 280 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 299 300 301 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 307 PostMsg(hwnd,UM_FOCUSME,MPVOID,MPVOID); 307 308 break; 308 309 … … 324 325 case WM_ADJUSTWINDOWPOS: 325 326 { 326 327 328 329 330 331 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 339 340 341 342 343 344 345 346 347 348 349 350 351 352 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 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 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 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 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 441 442 443 444 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 453 MPARAM mp2) { 453 454 454 455 switch(msg) { 455 456 case UM_CONTAINERHWND: 456 457 return MRFROMLONG(WinWindowFromID(hwnd, 457 458 TREE_CNR)); 458 459 459 460 case UM_VIEWSMENU: 460 461 return MRFROMLONG(CheckMenu(&TreeCnrMenu, 461 462 TREECNR_POPUP)); 462 463 463 464 case UM_TIMER: … … 480 481 case WM_COMMAND: 481 482 return WinSendMsg(WinWindowFromID(hwnd,TREE_CNR), 482 483 484 483 msg, 484 mp1, 485 mp2); 485 486 486 487 case WM_PSETFOCUS: 487 488 case WM_SETFOCUS: 488 489 if(mp2) 489 490 491 492 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 498 WinWindowFromID(hwnd,TREE_CNR)); 498 499 break; 499 500 500 501 case WM_ERASEBACKGROUND: 501 502 WinFillRect((HPS)mp1, 502 503 503 (PRECTL)mp2, 504 0x00d0d0d0); 504 505 return 0; 505 506 506 507 case WM_PAINT: 507 508 { 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 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 533 534 535 536 537 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 540 541 542 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 549 550 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 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 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 630 631 632 633 634 635 636 637 638 639 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 648 649 650 651 652 653 654 655 656 657 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 665 666 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 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 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 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 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 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 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 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 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 906 907 908 909 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 914 915 916 917 918 919 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 938 939 940 950 return WinSendMsg(dcd->hwndObject, 951 msg, 952 mp1, 953 mp2); 941 954 else 942 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 960 return (MRESULT)TRUE; 948 961 if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) { 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 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 990 break; 978 991 if(SHORT1FROMMP(mp1) & KC_CHAR) { 979 992 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 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 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 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 1118 return 0; 1101 1119 break; 1102 1120 1103 1121 case WM_PRESPARAMCHANGED: 1104 1122 PresParamChanged(hwnd, 1105 1106 1107 1123 "TreeCnr", 1124 mp1, 1125 mp2); 1108 1126 break; 1109 1127 1110 1128 case UM_FILESMENU: 1111 1129 { 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 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 1128 1129 1130 1131 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 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 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 1164 1165 1166 1181 WinSendMsg(dcd->hwndObject, 1182 msg, 1183 mp1, 1184 mp2); 1167 1185 return 0; 1168 1186 … … 1170 1188 if(dcd && mp1) { 1171 1189 1172 1173 1174 1175 1176 1177 1178 1179 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 1186 1187 1188 1189 1190 1191 1192 1193 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 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 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 1278 1279 1280 1281 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 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 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 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 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 1363 1364 1365 1366 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 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 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 1908 1909 1910 1911 1912 1913 1914 1915 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 1923 1924 1925 1926 1927 1928 1929 1930 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 1939 1940 1941 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 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 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 2067 strcmp(FileSystem,HPFS386)) 2050 2068 { 2051 2069 driveflags[x] |= DRIVE_NOLONGNAMES; 2052 2070 } 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 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 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 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 2268 2269 2270 2271 2272 2273 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 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 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 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 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 2350 2351 2367 WinEnableMenuItem((HWND)mp2, 2368 IDM_CLOSETRAY, 2369 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_CDROM) != 0); 2352 2370 */ 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 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 2425 break; 2408 2426 return 0; 2409 2427 2410 2428 case UM_COMMAND: 2411 2429 if(mp1) { 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 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 2429 2430 2431 2432 2433 2434 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 2462 Notify((CHAR *)mp2); 2445 2463 return 0; 2446 2464 … … 2448 2466 if(dcd) { 2449 2467 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 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 2485 ShowTreeRec(hwnd,(CHAR *)mp1,FALSE,TRUE); 2468 2486 return 0; 2469 2487 2470 2488 case WM_APPTERMINATENOTIFY: 2471 2489 { 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 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 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 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 3146 3147 3148 3149 3150 3151 3152 3153 3154 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 3160 3161 3162 3163 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 3170 3171 3172 3173 3174 3175 3176 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 3185 3186 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 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 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 3227 dcd->stopflag++; 3210 3228 if(dcd && dcd->hwndObject) { 3211 3212 3213 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 3234 WinSendMsg(hwnd,UM_CLOSE,MPFROMLONG(1L),MPVOID); 3217 3235 return 0; 3218 3236 3219 3237 case WM_DESTROY: 3220 3238 if(TreeCnrMenu) 3221 3239 WinDestroyWindow(TreeCnrMenu); 3222 3240 if(DirMenu) 3223 3241 WinDestroyWindow(DirMenu); 3224 3242 if(FileMenu) 3225 3243 WinDestroyWindow(FileMenu); 3226 3244 TreeCnrMenu = FileMenu = DirMenu = (HWND)0; 3227 3245 EmptyCnr(hwnd); 3228 3246 if(apphead) { 3229 3247 3230 3231 3232 3233 3234 3235 3236 3237 3238 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 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 3257 3258 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 3285 FCF_MINMAX | FCF_ICON)); 3268 3286 hwndFrame = WinCreateStdWindow(hwndParent, 3269 3270 3271 3272 3273 3274 3275 3276 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 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 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 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 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 3327 3328 3329 3330 3331 3332 3333 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 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 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 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 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 3366 3367 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 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.