Changeset 239 for trunk/dll/dirsize.c
- Timestamp:
- Aug 9, 2005, 7:12:27 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/dirsize.c
r224 r239 19 19 06 Jun 05 SHL Drop obsoletes 20 20 19 Jun 05 SHL More 64-bit math fixes 21 08 Aug 05 SHL Avoid Expand/Collapse hangs while working 21 22 22 23 ***********************************************************************/ … … 48 49 49 50 typedef struct { 50 CHAR dirname[CCHMAXPATH];51 CHAR pchStopFlag;51 CHAR szDirName[CCHMAXPATH]; 52 CHAR chStopFlag; 52 53 BOOL dying; 53 54 BOOL working; 54 55 HPOINTER hptr; 55 } TEMP;56 } tState; 56 57 57 58 … … 433 434 MRESULT EXPENTRY DirSizeProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 434 435 { 435 TEMP *pTemp; 436 tState *pState; 437 PCNRITEM pci; 438 CHAR szBytes[44]; 439 CHAR sz[66]; 436 440 437 441 switch(msg) { … … 441 445 break; 442 446 } 443 p Temp = malloc(sizeof(TEMP));444 if(!p Temp) {447 pState = malloc(sizeof(tState)); 448 if(!pState) { 445 449 WinDismissDlg(hwnd,0); 446 450 break; 447 451 } 448 memset(p Temp,0,sizeof(TEMP));449 strcpy(p Temp->dirname,(CHAR *)mp2);450 WinSetWindowPtr(hwnd,0,(PVOID)p Temp);451 p Temp->hptr = WinLoadPointer(HWND_DESKTOP,FM3ModHandle,DIRSIZE_ICON);452 WinDefDlgProc(hwnd,WM_SETICON,MPFROMLONG(p Temp->hptr),MPVOID);452 memset(pState,0,sizeof(tState)); 453 strcpy(pState->szDirName,(CHAR *)mp2); 454 WinSetWindowPtr(hwnd,0,(PVOID)pState); 455 pState->hptr = WinLoadPointer(HWND_DESKTOP,FM3ModHandle,DIRSIZE_ICON); 456 WinDefDlgProc(hwnd,WM_SETICON,MPFROMLONG(pState->hptr),MPVOID); 453 457 { 454 458 CHAR s[CCHMAXPATH + 81]; … … 456 460 sprintf(s, 457 461 GetPString(IDS_DIRSIZETITLETEXT), 458 p Temp->dirname);462 pState->szDirName); 459 463 WinSetWindowText(hwnd,s); 460 464 } … … 467 471 break; 468 472 } 469 dirsize->pchStopFlag = (CHAR *)&p Temp->pchStopFlag;470 dirsize->pszFileName = p Temp->dirname;473 dirsize->pchStopFlag = (CHAR *)&pState->chStopFlag; 474 dirsize->pszFileName = pState->szDirName; 471 475 dirsize->hwndCnr = WinWindowFromID(hwnd,DSZ_CNR); 472 476 if(_beginthread(FillCnrThread,NULL,122880L * 5L,(PVOID)dirsize) == -1) { … … 475 479 break; 476 480 } 477 pTemp->working = TRUE; 481 pState->working = TRUE; 482 WinEnableWindow(WinWindowFromID(hwnd,DSZ_COLLAPSE),FALSE); 483 WinEnableWindow(WinWindowFromID(hwnd,DSZ_EXPAND),FALSE); 484 WinEnableWindow(WinWindowFromID(hwnd,DSZ_PRINT),FALSE); 478 485 } 479 486 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID); … … 496 503 MPFROMLONG(CMA_FLWINDOWATTR | CMA_TREEICON | 497 504 CMA_LINESPACING | CMA_CXTREEINDENT)); 498 p Temp= INSTDATA(hwnd);499 if(p Temp && isalpha(*pTemp->dirname)) {505 pState = INSTDATA(hwnd); 506 if(pState && isalpha(*pState->szDirName)) { 500 507 memset(&fsa,0,sizeof(fsa)); 501 rc = DosQueryFSInfo(toupper(*p Temp->dirname) - '@',FSIL_ALLOC,&fsa,508 rc = DosQueryFSInfo(toupper(*pState->szDirName) - '@',FSIL_ALLOC,&fsa, 502 509 sizeof(FSALLOCATE)); 503 510 if (!rc) … … 533 540 534 541 case UM_CONTAINER_FILLED: 535 p Temp= INSTDATA(hwnd);536 if (!pTemp || pTemp->dying) {537 if (p Temp)538 p Temp->working = FALSE;542 pState = INSTDATA(hwnd); 543 if (!pState || pState->dying) { 544 if (pState) 545 pState->working = FALSE; 539 546 WinDismissDlg(hwnd,0); 540 547 return 0; 541 548 } 542 pTemp->working = FALSE; 549 pState->working = FALSE; 550 WinEnableWindow(WinWindowFromID(hwnd,DSZ_COLLAPSE),TRUE); 551 WinEnableWindow(WinWindowFromID(hwnd,DSZ_EXPAND),TRUE); 552 WinEnableWindow(WinWindowFromID(hwnd,DSZ_PRINT),TRUE); 553 554 pci = WinSendDlgItemMsg(hwnd,DSZ_CNR,CM_QUERYRECORD,MPVOID, 555 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER)); 556 if(pci && (INT)pci != -1) 557 WinSendDlgItemMsg(hwnd,DSZ_CNR,CM_EXPANDTREE,MPFROMP(pci),MPVOID); 558 *sz = 0; 559 pci = WinSendDlgItemMsg(hwnd,DSZ_CNR,CM_QUERYRECORDEMPHASIS, 560 MPFROMLONG(CMA_FIRST), 561 MPFROMSHORT(CRA_CURSORED)); 562 if (pci && (INT)pci != -1) 543 563 { 544 CHAR tb[44],s[66]; 545 PCNRITEM pci; 546 547 pci = WinSendDlgItemMsg(hwnd,DSZ_CNR,CM_QUERYRECORD,MPVOID, 548 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER)); 549 if(pci && (INT)pci != -1) 550 WinSendDlgItemMsg(hwnd,DSZ_CNR,CM_EXPANDTREE,MPFROMP(pci),MPVOID); 551 *s = 0; 552 pci = WinSendDlgItemMsg(hwnd,DSZ_CNR,CM_QUERYRECORDEMPHASIS, 553 MPFROMLONG(CMA_FIRST), 554 MPFROMSHORT(CRA_CURSORED)); 555 if (pci && (INT)pci != -1) 556 { 557 commafmt(tb,sizeof(tb),pci->attrFile); 558 sprintf(s, 559 "%s %s%s", 560 tb, 561 GetPString(IDS_FILETEXT), 562 &"s"[pci->attrFile == 1]); 563 } 564 WinSetDlgItemText(hwnd,DSZ_NUMFILES,s); 565 } 564 commafmt(szBytes,sizeof(szBytes),pci->attrFile); 565 sprintf(sz, 566 "%s %s%s", 567 szBytes, 568 GetPString(IDS_FILETEXT), 569 &"s"[pci->attrFile == 1]); 570 } 571 WinSetDlgItemText(hwnd,DSZ_NUMFILES,sz); 572 566 573 WinSendDlgItemMsg(hwnd,DSZ_CNR,CM_SORTRECORD,MPFROMP(SortSizeCnr), 567 574 MPVOID); … … 811 818 break; 812 819 case CN_EMPHASIS: 813 p Temp= INSTDATA(hwnd);814 if(p Temp && !pTemp->working && mp2) {820 pState = INSTDATA(hwnd); 821 if(pState && !pState->working && mp2) { 815 822 816 823 PNOTIFYRECORDEMPHASIS pre = mp2; 817 PCNRITEM pci;818 CHAR tb[44],s[66];819 824 820 825 pci = (PCNRITEM)((pre) ? pre->pRecord : NULL); 821 826 if(pci && (pre->fEmphasisMask & CRA_SELECTED) && 822 827 (pci->rc.flRecordAttr & CRA_SELECTED)) { 823 commafmt( tb,sizeof(tb),pci->attrFile);824 sprintf(s ,828 commafmt(szBytes,sizeof(szBytes),pci->attrFile); 829 sprintf(sz, 825 830 "%s %s%s", 826 tb,831 szBytes, 827 832 GetPString(IDS_FILETEXT), 828 833 &"s"[pci->attrFile == 1]); 829 834 WinSetDlgItemText(hwnd, 830 835 DSZ_NUMFILES, 831 s );836 sz); 832 837 } 833 838 } … … 846 851 847 852 case DSZ_PRINT: 848 pTemp = INSTDATA(hwnd); 849 if(pTemp && !pTemp->working) { 853 // Save button 854 pState = INSTDATA(hwnd); 855 if (pState) { 850 856 851 857 CHAR pszFileName[CCHMAXPATH]; … … 854 860 save_dir2(pszFileName); 855 861 sprintf(&pszFileName[strlen(pszFileName)],"\\%csizes.Rpt", 856 (p Temp) ? toupper(*pTemp->dirname) : '+');857 if (export_filename(hwnd,pszFileName,FALSE) && *pszFileName) {858 if (stricmp(pszFileName,"PRN") &&862 (pState) ? toupper(*pState->szDirName) : '+'); 863 if (export_filename(hwnd,pszFileName,FALSE) && *pszFileName) { 864 if (stricmp(pszFileName,"PRN") && 859 865 strnicmp(pszFileName,"\\DEV\\LPT",8) && 860 866 !strchr(pszFileName,'.')) 861 867 strcat(pszFileName,".RPT"); 862 868 fp = fopen(pszFileName,"a+"); 863 if (fp) {869 if (fp) { 864 870 WinSetPointer(HWND_DESKTOP,hptrBusy); 865 871 PrintToFile(WinWindowFromID(hwnd,DSZ_CNR),0,NULL,fp); … … 881 887 case DSZ_EXPAND: 882 888 case DSZ_COLLAPSE: 883 { 884 PCNRITEM pci; 885 889 pState = INSTDATA(hwnd); 890 if (pState) { 886 891 pci = (PCNRITEM)WinSendDlgItemMsg(hwnd,DSZ_CNR, 887 892 CM_QUERYRECORDEMPHASIS, … … 889 894 MPFROMSHORT(CRA_CURSORED)); 890 895 if(pci) 896 { 897 WinEnableWindow(WinWindowFromID(hwnd,DID_OK),FALSE); 898 WinEnableWindow(WinWindowFromID(hwnd,IDM_HELP),FALSE); 899 WinEnableWindow(WinWindowFromID(hwnd,DSZ_COLLAPSE),FALSE); 900 WinEnableWindow(WinWindowFromID(hwnd,DSZ_EXPAND),FALSE); 901 WinEnableWindow(WinWindowFromID(hwnd,DSZ_PRINT),FALSE); 902 WinEnableWindow(WinWindowFromID(hwnd,DID_CANCEL),FALSE); 903 // fixme to use thread - too slow on large trees 891 904 ExpandAll(WinWindowFromID(hwnd,DSZ_CNR), 892 905 (SHORT1FROMMP(mp1) == DSZ_EXPAND),pci); 906 WinEnableWindow(WinWindowFromID(hwnd,DID_OK),TRUE); 907 WinEnableWindow(WinWindowFromID(hwnd,IDM_HELP),TRUE); 908 WinEnableWindow(WinWindowFromID(hwnd,DSZ_COLLAPSE),TRUE); 909 WinEnableWindow(WinWindowFromID(hwnd,DSZ_EXPAND),TRUE); 910 WinEnableWindow(WinWindowFromID(hwnd,DSZ_PRINT),TRUE); 911 WinEnableWindow(WinWindowFromID(hwnd,DID_CANCEL),TRUE); 912 } 893 913 } 894 914 break; … … 896 916 case DID_OK: 897 917 case DID_CANCEL: 898 p Temp= INSTDATA(hwnd);899 if (pTemp) {900 if (pTemp->working) {901 p Temp->dying = TRUE;902 p Temp->pchStopFlag = 0xff;918 pState = INSTDATA(hwnd); 919 if (pState) { 920 if (pState->working) { 921 pState->dying = TRUE; 922 pState->chStopFlag = 0xff; 903 923 DosBeep(1000,100); 904 924 } … … 907 927 } 908 928 break; 909 } 929 } // switch mp1 910 930 return 0; 911 931 912 932 case WM_CLOSE: 913 p Temp= INSTDATA(hwnd);914 if(p Temp)915 p Temp->pchStopFlag = 0xff;933 pState = INSTDATA(hwnd); 934 if(pState) 935 pState->chStopFlag = 0xff; 916 936 DosSleep(1L); 917 937 break; 918 938 919 939 case WM_DESTROY: 920 p Temp= INSTDATA(hwnd);921 if (pTemp) {922 p Temp->pchStopFlag = 0xff;923 if (pTemp->hptr)924 WinDestroyPointer(p Temp->hptr);940 pState = INSTDATA(hwnd); 941 if (pState) { 942 pState->chStopFlag = 0xff; 943 if (pState->hptr) 944 WinDestroyPointer(pState->hptr); 925 945 DosSleep(33L); 926 free (pTemp);946 free (pState); // Let's hope no one is still looking 927 947 } 928 948 DosPostEventSem(CompactSem);
Note:
See TracChangeset
for help on using the changeset viewer.