Changeset 1335 for trunk/dll/objcnr.c
- Timestamp:
- Dec 13, 2008, 12:49:02 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/objcnr.c
r1225 r1335 7 7 8 8 Copyright (c) 1993-98 M. Kimes 9 Copyright (c) 2005, 200 7Steven H. Levine9 Copyright (c) 2005, 2008 Steven H. Levine 10 10 11 11 24 May 05 SHL Rework for CNRITEM.szSubject … … 22 22 14 Aug 07 SHL Revert ProcessDir DosSleep to 0 23 23 29 Feb 08 GKY Use xfree where appropriate 24 10 Dec 08 SHL Integrate exception handler support 24 25 25 26 ***********************************************************************/ … … 28 29 #include <string.h> 29 30 #include <ctype.h> 30 #include <process.h>// _beginthread31 // #include <process.h> // _beginthread 31 32 32 33 #define INCL_DOS … … 53 54 #include "misc.h" // PostMsg 54 55 #include "fortify.h" 56 #include "excputil.h" // xbeginthread 55 57 56 58 typedef struct … … 78 80 79 81 static VOID ProcessDir(HWND hwndCnr, 80 81 82 82 CHAR *filename, 83 PCNRITEM pciParent, 84 CHAR *stopflag) 83 85 { 84 86 CHAR maskstr[CCHMAXPATH], *endpath, *p; … … 104 106 ulFindCnt = 1; 105 107 rc = xDosFindFirst(filename, &hdir, 106 107 108 108 FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED | 109 FILE_SYSTEM | FILE_HIDDEN | MUST_HAVE_DIRECTORY, 110 pffbArray, ulBufBytes, &ulFindCnt, FIL_STANDARDL); 109 111 if (!rc) 110 112 DosFindClose(hdir); … … 115 117 if ((!rc && (pffbArray->attrFile & FILE_DIRECTORY))) { 116 118 pciP = WinSendMsg(hwndCnr, 117 118 119 119 CM_ALLOCRECORD, 120 MPFROMLONG(EXTRA_RECORD_BYTES), 121 MPFROMLONG(1)); 120 122 if (!pciP) { 121 123 Win_Error(hwndCnr, HWND_DESKTOP, pszSrcFile, __LINE__, "CM_ALLOCRECORD"); … … 132 134 p = strrchr(pciP->pszFileName, '\\'); 133 135 if (!p) 134 136 pciP->pszDisplayName = pciP->pszFileName; 135 137 else if (*(p + 1)) 136 138 p++; 137 139 pciP->pszDisplayName = p; 138 140 } … … 147 149 free(pffbArray); 148 150 Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 149 151 GetPString(IDS_CANTFINDDIRTEXT), filename); 150 152 return; 151 153 } … … 177 179 ulFindCnt = ulFindMax; 178 180 rc = xDosFindFirst(maskstr, &hdir, 179 180 181 181 FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED | 182 FILE_SYSTEM | FILE_HIDDEN | MUST_HAVE_DIRECTORY, 183 pffbArray, ulBufBytes, &ulFindCnt, FIL_STANDARDL); 182 184 if (!rc) { 183 185 PFILEFINDBUF3L pffbFile; … … 187 189 pffbFile = pffbArray; 188 190 for (x = 0; x < ulFindCnt; x++) { 189 190 191 192 193 194 195 196 197 198 199 200 201 191 if (*stopflag) 192 break; 193 if ((pffbFile->attrFile & FILE_DIRECTORY) && 194 // Skip . and .. 195 (pffbFile->achName[0] != '.' || 196 (pffbFile->achName[1] && 197 (pffbFile->achName[1] != '.' || pffbFile->achName[2])))) { 198 strcpy(endpath, pffbFile->achName); 199 ProcessDir(hwndCnr, maskstr, pciP, stopflag); 200 } 201 if (!pffbFile->oNextEntryOffset) 202 break; 203 pffbFile = (PFILEFINDBUF3L)((PBYTE)pffbFile + pffbFile->oNextEntryOffset); 202 204 } // for 203 205 DosSleep(0); // Let's others at same priority get some work done 204 206 if (*stopflag) 205 207 break; 206 208 ulFindCnt = ulFindMax; 207 209 rc = xDosFindNext(hdir, pffbArray, ulBufBytes, &ulFindCnt, FIL_STANDARDL); … … 212 214 if (rc && rc != ERROR_NO_MORE_FILES) { 213 215 Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 214 216 GetPString(IDS_CANTFINDDIRTEXT), filename); 215 217 } 216 218 217 219 free(pffbArray); 218 220 WinSendMsg(hwndCnr, CM_INVALIDATERECORD, MPFROMP(&pciP), 219 221 MPFROM2SHORT(1, 0)); 220 222 } 221 223 … … 242 244 WinCancelShutdown(hmq, TRUE); 243 245 ProcessDir(dirsize->hwndCnr, dirsize->filename, (PCNRITEM) NULL, 244 246 dirsize->stopflag); 245 247 DosPostEventSem(CompactSem); 246 248 WinDestroyMsgQueue(hmq); … … 249 251 } 250 252 PostMsg(WinQueryWindow(dirsize->hwndCnr, QW_PARENT), UM_CONTAINER_FILLED, 251 253 MPVOID, MPVOID); 252 254 free(dirsize); 253 255 # ifdef FORTIFY … … 265 267 Runtime_Error(pszSrcFile, __LINE__, "objcnrwnd set"); 266 268 WinSetWindowPos(objcnrwnd, HWND_TOP, 0, 0, 0, 0, 267 269 SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER); 268 270 WinDismissDlg(hwnd, 0); 269 271 break; … … 291 293 dirsize = xmalloc(sizeof(DIRSIZE), pszSrcFile, __LINE__); 292 294 if (!dirsize) { 293 294 295 WinDismissDlg(hwnd, 0); 296 break; 295 297 } 296 298 dirsize->stopflag = (CHAR *)&data->stopflag; 297 299 dirsize->filename = data->dirname; 298 300 dirsize->hwndCnr = WinWindowFromID(hwnd, OBJCNR_CNR); 299 if (_beginthread(FillCnrsThread, NULL, 65536 * 8, (PVOID) dirsize) == 300 -1) { 301 Runtime_Error(pszSrcFile, __LINE__, 302 GetPString(IDS_COULDNTSTARTTHREADTEXT)); 303 free(dirsize); 301 if (xbeginthread(FillCnrsThread, 302 65536 * 8, 303 dirsize, 304 pszSrcFile, 305 __LINE__) == -1) 306 { 307 free(dirsize); 304 308 # ifdef FORTIFY 305 309 Fortify_LeaveScope(); 306 310 # endif 307 308 311 WinDismissDlg(hwnd, 0); 312 break; 309 313 } 310 314 else 311 315 data->working = TRUE; 312 316 } 313 317 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID); … … 322 326 cnri.cb = sizeof(CNRINFO); 323 327 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_QUERYCNRINFO, 324 328 MPFROMP(&cnri), MPFROMLONG(sizeof(CNRINFO))); 325 329 cnri.cyLineSpacing = 0; 326 330 cnri.cxTreeIndent = 12L; 327 331 cnri.pszCnrTitle = GetPString(IDS_WORKINGTEXT); 328 332 cnri.flWindowAttr = CV_TREE | CV_FLOW | 329 333 CA_CONTAINERTITLE | CA_TITLESEPARATOR | CA_TREELINE; 330 334 if (WinQueryWindowUShort(hwnd, QWS_ID) == QTREE_FRAME) 331 335 cnri.flWindowAttr |= CV_MINI; 332 336 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_SETCNRINFO, MPFROMP(&cnri), 333 334 337 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING | 338 CMA_CXTREEINDENT)); 335 339 } 336 340 return 0; … … 340 344 // WinEnableWindowUpdate(WinWindowFromID(hwnd,OBJCNR_CNR),TRUE); 341 345 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_INVALIDATERECORD, MPVOID, 342 346 MPFROM2SHORT(0, CMA_ERASE | CMA_INVALIDATE)); 343 347 data = INSTDATA(hwnd); 344 348 if (data) { 345 349 data->working = FALSE; 346 350 if (data->dying) 347 351 WinDismissDlg(hwnd, 0); 348 352 { 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 353 PCNRITEM pci; 354 USHORT id; 355 356 id = WinQueryWindowUShort(hwnd, QWS_ID); 357 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 358 CM_QUERYRECORD, 359 MPVOID, 360 MPFROM2SHORT(CMA_FIRST, 361 CMA_ITEMORDER)); 362 if (pci && (INT) pci != -1) { 363 ExpandAll(WinWindowFromID(hwnd, OBJCNR_CNR), TRUE, pci); 364 if (id == QTREE_FRAME) 365 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 366 CM_QUERYRECORD, 367 MPFROMP(pci), 368 MPFROM2SHORT(CMA_FIRSTCHILD, 369 CMA_ITEMORDER)); 370 } 371 if ((!pci || (INT) pci == -1) && id == QTREE_FRAME) { 372 Notify(GetPString(IDS_NODIRSUNDERTEXT)); 373 WinDismissDlg(hwnd, 0); 374 break; 375 } 372 376 } 373 377 } … … 379 383 if (SHORT2FROMMP(mp1) == CN_ENTER) { 380 384 381 382 383 384 385 PCNRITEM pci = (PCNRITEM) ((PNOTIFYRECORDENTER) mp2)->pRecord; 386 387 if (pci && (INT) pci != -1) 388 WinSendDlgItemMsg(hwnd, DID_OK, BM_CLICK, MPVOID, MPVOID); 385 389 } 386 390 break; … … 393 397 if (hwndHelp) { 394 398 395 396 397 398 399 400 401 402 403 404 405 406 399 USHORT id; 400 401 id = WinQueryWindowUShort(hwnd, QWS_ID); 402 403 if (id == QTREE_FRAME) 404 WinSendMsg(hwndHelp, HM_DISPLAY_HELP, 405 MPFROM2SHORT(HELP_QUICKTREE, 0), 406 MPFROMSHORT(HM_RESOURCEID)); 407 else 408 WinSendMsg(hwndHelp, HM_DISPLAY_HELP, 409 MPFROM2SHORT(HELP_OBJECTPATH, 0), 410 MPFROMSHORT(HM_RESOURCEID)); 407 411 } 408 412 break; … … 413 417 if (data) { 414 418 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 419 PCNRITEM pci; 420 421 if (data->working) { 422 Runtime_Error(pszSrcFile, __LINE__, "working unexpected"); 423 break; 424 } 425 if (SHORT1FROMMP(mp1) == OBJCNR_DESKTOP) { 426 WinDismissDlg(hwnd, 2); 427 break; 428 } 429 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 430 CM_QUERYRECORDEMPHASIS, 431 MPFROMLONG(CMA_FIRST), 432 MPFROMSHORT(CRA_CURSORED)); 433 if (pci && (INT) pci != -1) 434 strcpy(data->dirname, pci->pszFileName); 435 WinDismissDlg(hwnd, 1); 432 436 } 433 437 break; … … 436 440 data = INSTDATA(hwnd); 437 441 if (data) { 438 439 440 441 442 443 442 if (data->working) { 443 data->dying = (CHAR)TRUE; 444 data->stopflag = (CHAR)0xff; 445 break; 446 } 447 WinDismissDlg(hwnd, 0); 444 448 } 445 449 break;
Note:
See TracChangeset
for help on using the changeset viewer.