Changeset 1163 for trunk/dll/objcnr.c
- Timestamp:
- Sep 5, 2008, 11:43:52 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/objcnr.c
r1063 r1163 28 28 #include <string.h> 29 29 #include <ctype.h> 30 #include <process.h> 30 #include <process.h> // _beginthread 31 31 32 32 #define INCL_DOS … … 37 37 #include "fm3dlg.h" 38 38 #include "fm3str.h" 39 #include "errutil.h" // Dos_Error... 40 #include "strutil.h" // GetPString 39 #include "errutil.h" // Dos_Error... 40 #include "strutil.h" // GetPString 41 #include "objcnr.h" 41 42 #include "fm3dll.h" 43 #include "select.h" // ExpandAll 42 44 43 45 #include "fortify.h" … … 67 69 68 70 static VOID ProcessDir(HWND hwndCnr, 69 70 71 71 CHAR *filename, 72 PCNRITEM pciParent, 73 CHAR *stopflag) 72 74 { 73 75 CHAR maskstr[CCHMAXPATH], *endpath, *p; … … 84 86 pffbArray = xmalloc(ulBufBytes, pszSrcFile, __LINE__); 85 87 if (!pffbArray) 86 return; 88 return; // Error already reported 87 89 strcpy(maskstr, filename); 88 90 if (maskstr[strlen(maskstr) - 1] != '\\') … … 93 95 ulFindCnt = 1; 94 96 rc = xDosFindFirst(filename, &hdir, 95 96 97 97 FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED | 98 FILE_SYSTEM | FILE_HIDDEN | MUST_HAVE_DIRECTORY, 99 pffbArray, ulBufBytes, &ulFindCnt, FIL_STANDARDL); 98 100 if (!rc) 99 101 DosFindClose(hdir); … … 104 106 if ((!rc && (pffbArray->attrFile & FILE_DIRECTORY))) { 105 107 pciP = WinSendMsg(hwndCnr, 106 107 108 108 CM_ALLOCRECORD, 109 MPFROMLONG(EXTRA_RECORD_BYTES), 110 MPFROMLONG(1)); 109 111 if (!pciP) { 110 112 Win_Error(hwndCnr, HWND_DESKTOP, pszSrcFile, __LINE__, "CM_ALLOCRECORD"); … … 121 123 p = strrchr(pciP->pszFileName, '\\'); 122 124 if (!p) 123 125 pciP->pszDisplayName = pciP->pszFileName; 124 126 else if (*(p + 1)) 125 127 p++; 126 128 pciP->pszDisplayName = p; 127 129 } … … 136 138 free(pffbArray); 137 139 Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 138 140 GetPString(IDS_CANTFINDDIRTEXT), filename); 139 141 return; 140 142 } … … 144 146 pciP->rc.hptrIcon = hptr; 145 147 146 if (!pciP->rc.hptrIcon || pciP->rc.hptrIcon == hptrFile) 148 if (!pciP->rc.hptrIcon || pciP->rc.hptrIcon == hptrFile) /* OS/2 bug bug bug bug */ 147 149 pciP->rc.hptrIcon = hptrDir; 148 150 … … 166 168 ulFindCnt = ulFindMax; 167 169 rc = xDosFindFirst(maskstr, &hdir, 168 169 170 170 FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED | 171 FILE_SYSTEM | FILE_HIDDEN | MUST_HAVE_DIRECTORY, 172 pffbArray, ulBufBytes, &ulFindCnt, FIL_STANDARDL); 171 173 if (!rc) { 172 174 PFILEFINDBUF3L pffbFile; … … 176 178 pffbFile = pffbArray; 177 179 for (x = 0; x < ulFindCnt; x++) { 178 179 180 181 182 183 184 185 186 187 188 189 190 180 if (*stopflag) 181 break; 182 if ((pffbFile->attrFile & FILE_DIRECTORY) && 183 // Skip . and .. 184 (pffbFile->achName[0] != '.' || 185 (pffbFile->achName[1] && 186 (pffbFile->achName[1] != '.' || pffbFile->achName[2])))) { 187 strcpy(endpath, pffbFile->achName); 188 ProcessDir(hwndCnr, maskstr, pciP, stopflag); 189 } 190 if (!pffbFile->oNextEntryOffset) 191 break; 192 pffbFile = (PFILEFINDBUF3L)((PBYTE)pffbFile + pffbFile->oNextEntryOffset); 191 193 } // for 192 DosSleep(0); 194 DosSleep(0); // Let's others at same priority get some work done 193 195 if (*stopflag) 194 196 break; 195 197 ulFindCnt = ulFindMax; 196 198 rc = xDosFindNext(hdir, pffbArray, ulBufBytes, &ulFindCnt, FIL_STANDARDL); … … 201 203 if (rc && rc != ERROR_NO_MORE_FILES) { 202 204 Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 203 205 GetPString(IDS_CANTFINDDIRTEXT), filename); 204 206 } 205 207 206 208 free(pffbArray); 207 209 WinSendMsg(hwndCnr, CM_INVALIDATERECORD, MPFROMP(&pciP), 208 210 MPFROM2SHORT(1, 0)); 209 211 } 210 212 … … 231 233 WinCancelShutdown(hmq, TRUE); 232 234 ProcessDir(dirsize->hwndCnr, dirsize->filename, (PCNRITEM) NULL, 233 235 dirsize->stopflag); 234 236 DosPostEventSem(CompactSem); 235 237 WinDestroyMsgQueue(hmq); … … 238 240 } 239 241 PostMsg(WinQueryWindow(dirsize->hwndCnr, QW_PARENT), UM_CONTAINER_FILLED, 240 242 MPVOID, MPVOID); 241 243 free(dirsize); 242 244 # ifdef FORTIFY … … 254 256 Runtime_Error(pszSrcFile, __LINE__, "objcnrwnd set"); 255 257 WinSetWindowPos(objcnrwnd, HWND_TOP, 0, 0, 0, 0, 256 258 SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER); 257 259 WinDismissDlg(hwnd, 0); 258 260 break; … … 280 282 dirsize = xmalloc(sizeof(DIRSIZE), pszSrcFile, __LINE__); 281 283 if (!dirsize) { 282 283 284 WinDismissDlg(hwnd, 0); 285 break; 284 286 } 285 287 dirsize->stopflag = (CHAR *)&data->stopflag; … … 287 289 dirsize->hwndCnr = WinWindowFromID(hwnd, OBJCNR_CNR); 288 290 if (_beginthread(FillCnrsThread, NULL, 65536 * 8, (PVOID) dirsize) == 289 290 291 291 -1) { 292 Runtime_Error(pszSrcFile, __LINE__, 293 GetPString(IDS_COULDNTSTARTTHREADTEXT)); 292 294 free(dirsize); 293 295 # ifdef FORTIFY 294 296 Fortify_LeaveScope(); 295 297 # endif 296 297 298 WinDismissDlg(hwnd, 0); 299 break; 298 300 } 299 301 else 300 302 data->working = TRUE; 301 303 } 302 304 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID); … … 311 313 cnri.cb = sizeof(CNRINFO); 312 314 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_QUERYCNRINFO, 313 315 MPFROMP(&cnri), MPFROMLONG(sizeof(CNRINFO))); 314 316 cnri.cyLineSpacing = 0; 315 317 cnri.cxTreeIndent = 12L; 316 318 cnri.pszCnrTitle = GetPString(IDS_WORKINGTEXT); 317 319 cnri.flWindowAttr = CV_TREE | CV_FLOW | 318 320 CA_CONTAINERTITLE | CA_TITLESEPARATOR | CA_TREELINE; 319 321 if (WinQueryWindowUShort(hwnd, QWS_ID) == QTREE_FRAME) 320 322 cnri.flWindowAttr |= CV_MINI; 321 323 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_SETCNRINFO, MPFROMP(&cnri), 322 323 324 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING | 325 CMA_CXTREEINDENT)); 324 326 } 325 327 return 0; … … 329 331 // WinEnableWindowUpdate(WinWindowFromID(hwnd,OBJCNR_CNR),TRUE); 330 332 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_INVALIDATERECORD, MPVOID, 331 333 MPFROM2SHORT(0, CMA_ERASE | CMA_INVALIDATE)); 332 334 data = INSTDATA(hwnd); 333 335 if (data) { 334 336 data->working = FALSE; 335 337 if (data->dying) 336 338 WinDismissDlg(hwnd, 0); 337 339 { 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 340 PCNRITEM pci; 341 USHORT id; 342 343 id = WinQueryWindowUShort(hwnd, QWS_ID); 344 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 345 CM_QUERYRECORD, 346 MPVOID, 347 MPFROM2SHORT(CMA_FIRST, 348 CMA_ITEMORDER)); 349 if (pci && (INT) pci != -1) { 350 ExpandAll(WinWindowFromID(hwnd, OBJCNR_CNR), TRUE, pci); 351 if (id == QTREE_FRAME) 352 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 353 CM_QUERYRECORD, 354 MPFROMP(pci), 355 MPFROM2SHORT(CMA_FIRSTCHILD, 356 CMA_ITEMORDER)); 357 } 358 if ((!pci || (INT) pci == -1) && id == QTREE_FRAME) { 359 Notify(GetPString(IDS_NODIRSUNDERTEXT)); 360 WinDismissDlg(hwnd, 0); 361 break; 362 } 361 363 } 362 364 } … … 368 370 if (SHORT2FROMMP(mp1) == CN_ENTER) { 369 371 370 371 372 373 372 PCNRITEM pci = (PCNRITEM) ((PNOTIFYRECORDENTER) mp2)->pRecord; 373 374 if (pci && (INT) pci != -1) 375 WinSendDlgItemMsg(hwnd, DID_OK, BM_CLICK, MPVOID, MPVOID); 374 376 } 375 377 break; … … 382 384 if (hwndHelp) { 383 385 384 385 386 387 388 389 390 391 392 393 394 395 386 USHORT id; 387 388 id = WinQueryWindowUShort(hwnd, QWS_ID); 389 390 if (id == QTREE_FRAME) 391 WinSendMsg(hwndHelp, HM_DISPLAY_HELP, 392 MPFROM2SHORT(HELP_QUICKTREE, 0), 393 MPFROMSHORT(HM_RESOURCEID)); 394 else 395 WinSendMsg(hwndHelp, HM_DISPLAY_HELP, 396 MPFROM2SHORT(HELP_OBJECTPATH, 0), 397 MPFROMSHORT(HM_RESOURCEID)); 396 398 } 397 399 break; … … 402 404 if (data) { 403 405 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 406 PCNRITEM pci; 407 408 if (data->working) { 409 Runtime_Error(pszSrcFile, __LINE__, "working unexpected"); 410 break; 411 } 412 if (SHORT1FROMMP(mp1) == OBJCNR_DESKTOP) { 413 WinDismissDlg(hwnd, 2); 414 break; 415 } 416 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 417 CM_QUERYRECORDEMPHASIS, 418 MPFROMLONG(CMA_FIRST), 419 MPFROMSHORT(CRA_CURSORED)); 420 if (pci && (INT) pci != -1) 421 strcpy(data->dirname, pci->pszFileName); 422 WinDismissDlg(hwnd, 1); 421 423 } 422 424 break; … … 425 427 data = INSTDATA(hwnd); 426 428 if (data) { 427 428 429 430 431 432 429 if (data->working) { 430 data->dying = (CHAR)TRUE; 431 data->stopflag = (CHAR)0xff; 432 break; 433 } 434 WinDismissDlg(hwnd, 0); 433 435 } 434 436 break;
Note:
See TracChangeset
for help on using the changeset viewer.