- Timestamp:
- May 21, 2004, 5:11:37 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/dll/seeall.c (modified) (53 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/seeall.c
r50 r84 10 10 11 11 Revisions 16 Oct 02 SHL - Handle large partitions 12 25 Nov 03 SHL - StartSeeAll: avoid forgetting startpath 13 06 Dec 03 SHL - StartSeeAll: correct malloc arg oops 12 14 13 15 ***********************************************************************/ … … 78 80 79 81 static LONG Colors[COLORS_MAX] = {COLR_WHITE,COLR_DARKGRAY,COLR_PALEGRAY, 80 COLR_BLACK,COLR_WHITE,COLR_BLACK,81 COLR_DARKBLUE,COLR_DARKRED};82 COLR_BLACK,COLR_WHITE,COLR_BLACK, 83 COLR_DARKBLUE,COLR_DARKRED}; 82 84 83 85 typedef int(FNSORT)(const void *,const void *); … … 89 91 ALLFILES *afhead,**afindex; 90 92 ULONG affiles,afalloc,afFilesToGet,longest,longestw, 91 topfile,cursored,selected,selbytes,afifiles,92 lastselected,lastdirection,multiplier,lasttime;93 topfile,cursored,selected,ulSelectedKB, ulSelectedBytes,afifiles, 94 lastselected,lastdirection,multiplier,lasttime; 93 95 CHAR stopflag,drvsflags[26],lasttarget[CCHMAXPATH], 94 comnam[CCHMAXPATH],findpath[CCHMAXPATH];96 comnam[CCHMAXPATH],findpath[CCHMAXPATH]; 95 97 LONG lMaxAscender,lMaxDescender,lMaxHeight,maxx,horzscroll; 96 98 BOOL fullnames,invertsort,mousecaptured; 97 99 HMTX ScanSem; 98 100 HWND hvscroll,hhscroll,hwndMenu,hwndObj,hwndClient,hwndPopup, 99 hwndStatus,hwndFrame;101 hwndStatus,hwndFrame; 100 102 HPS hps; 101 103 PFNSORT compare; … … 120 122 case WM_INITDLG: 121 123 { 122 USHORT flags = SHORT1FROMMP(mp2);123 124 WinCheckButton(hwnd,DUPE_NAMES,((flags & DP_NAMES) != 0));125 WinCheckButton(hwnd,DUPE_DATES,((flags & DP_NAMES) != 0));126 WinCheckButton(hwnd,DUPE_SIZES,((flags & DP_NAMES) != 0));127 WinCheckButton(hwnd,DUPE_CRCS,((flags & DP_NAMES) != 0));128 if(!(flags & DP_NAMES))129 WinEnableWindow(WinWindowFromID(hwnd,DUPE_EXTS),FALSE);124 USHORT flags = SHORT1FROMMP(mp2); 125 126 WinCheckButton(hwnd,DUPE_NAMES,((flags & DP_NAMES) != 0)); 127 WinCheckButton(hwnd,DUPE_DATES,((flags & DP_NAMES) != 0)); 128 WinCheckButton(hwnd,DUPE_SIZES,((flags & DP_NAMES) != 0)); 129 WinCheckButton(hwnd,DUPE_CRCS,((flags & DP_NAMES) != 0)); 130 if(!(flags & DP_NAMES)) 131 WinEnableWindow(WinWindowFromID(hwnd,DUPE_EXTS),FALSE); 130 132 } 131 133 break; … … 133 135 case WM_CONTROL: 134 136 switch(SHORT1FROMMP(mp1)) { 135 case DUPE_NAMES:136 if(WinQueryButtonCheckstate(hwnd,DUPE_NAMES))137 WinEnableWindow(WinWindowFromID(hwnd,DUPE_EXTS),TRUE);138 else {139 WinCheckButton(hwnd,DUPE_EXTS,FALSE);140 WinEnableWindow(WinWindowFromID(hwnd,DUPE_EXTS),FALSE);141 }142 break;143 case DUPE_SIZES:144 if(!WinQueryButtonCheckstate(hwnd,DUPE_SIZES))145 WinCheckButton(hwnd,DUPE_CRCS,FALSE);146 break;147 case DUPE_CRCS:148 if(WinQueryButtonCheckstate(hwnd,DUPE_CRCS))149 WinCheckButton(hwnd,DUPE_SIZES,TRUE);150 break;137 case DUPE_NAMES: 138 if(WinQueryButtonCheckstate(hwnd,DUPE_NAMES)) 139 WinEnableWindow(WinWindowFromID(hwnd,DUPE_EXTS),TRUE); 140 else { 141 WinCheckButton(hwnd,DUPE_EXTS,FALSE); 142 WinEnableWindow(WinWindowFromID(hwnd,DUPE_EXTS),FALSE); 143 } 144 break; 145 case DUPE_SIZES: 146 if(!WinQueryButtonCheckstate(hwnd,DUPE_SIZES)) 147 WinCheckButton(hwnd,DUPE_CRCS,FALSE); 148 break; 149 case DUPE_CRCS: 150 if(WinQueryButtonCheckstate(hwnd,DUPE_CRCS)) 151 WinCheckButton(hwnd,DUPE_SIZES,TRUE); 152 break; 151 153 } 152 154 return 0; … … 154 156 case WM_COMMAND: 155 157 switch(SHORT1FROMMP(mp1)) { 156 case DID_OK:157 {158 USHORT flags = 0;159 160 if(WinQueryButtonCheckstate(hwnd,DUPE_NAMES)) {161 flags |= DP_NAMES;162 if(WinQueryButtonCheckstate(hwnd,DUPE_EXTS))163 flags |= DP_EXTS;164 }165 if(WinQueryButtonCheckstate(hwnd,DUPE_DATES))166 flags |= DP_DATES;167 if(WinQueryButtonCheckstate(hwnd,DUPE_SIZES)) {168 flags |= DP_SIZES;169 if(WinQueryButtonCheckstate(hwnd,DUPE_CRCS))170 flags |= (DP_CRCS | DP_SIZES);171 }172 if(!flags)173 saymsg(MB_ENTER,174 hwnd,175 GetPString(IDS_ERRORTEXT),176 "%s",177 GetPString(IDS_CHECKONETEXT));178 else179 WinDismissDlg(hwnd,flags);180 }181 break;182 183 case DID_CANCEL:184 WinDismissDlg(hwnd,0);185 break;186 187 case IDM_HELP:188 if(hwndHelp)189 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,190 MPFROM2SHORT(HELP_DUPES,0),191 MPFROMSHORT(HM_RESOURCEID));192 break;158 case DID_OK: 159 { 160 USHORT flags = 0; 161 162 if(WinQueryButtonCheckstate(hwnd,DUPE_NAMES)) { 163 flags |= DP_NAMES; 164 if(WinQueryButtonCheckstate(hwnd,DUPE_EXTS)) 165 flags |= DP_EXTS; 166 } 167 if(WinQueryButtonCheckstate(hwnd,DUPE_DATES)) 168 flags |= DP_DATES; 169 if(WinQueryButtonCheckstate(hwnd,DUPE_SIZES)) { 170 flags |= DP_SIZES; 171 if(WinQueryButtonCheckstate(hwnd,DUPE_CRCS)) 172 flags |= (DP_CRCS | DP_SIZES); 173 } 174 if(!flags) 175 saymsg(MB_ENTER, 176 hwnd, 177 GetPString(IDS_ERRORTEXT), 178 "%s", 179 GetPString(IDS_CHECKONETEXT)); 180 else 181 WinDismissDlg(hwnd,flags); 182 } 183 break; 184 185 case DID_CANCEL: 186 WinDismissDlg(hwnd,0); 187 break; 188 189 case IDM_HELP: 190 if(hwndHelp) 191 WinSendMsg(hwndHelp,HM_DISPLAY_HELP, 192 MPFROM2SHORT(HELP_DUPES,0), 193 MPFROMSHORT(HM_RESOURCEID)); 194 break; 193 195 } 194 196 return 0; … … 216 218 case UM_MASSACTION: 217 219 { 218 CHAR **files = NULL,**list = (CHAR **)mp2,path[CCHMAXPATH];219 INT numfiles = 0,numalloc = 0,plen = 0;220 HWND hwndFrame = WinQueryWindowULong(hwnd,0);221 CHAR message[CCHMAXPATH * 2],wildname[CCHMAXPATH];222 register INT x;223 register CHAR *p,*pp;224 BOOL dontask = FALSE,wildcarding = FALSE,225 overold = FALSE,overnew = FALSE;226 227 if(!list || !list[0])228 goto Abort;229 *path = *wildname = 0;230 231 switch(SHORT1FROMMP(mp1)) {232 case IDM_MOVEPRESERVE:233 {234 CHAR preserve[CCHMAXPATH],*end;235 236 mp1 = MPFROM2SHORT(IDM_MOVE,237 SHORT2FROMMP(mp1));238 strcpy(preserve,list[0] + 2);239 end = strrchr(preserve,'\\');240 if(end) {241 end++;242 for(x = 1;list[x];x++) {243 p = preserve;244 pp = list[x] + 2;245 while(p < end && toupper(*p) == toupper(*pp)) {246 p++;247 pp++;248 }249 if(*p == '\\')250 p++;251 if(p < end)252 end = p;253 }254 *end = 0;255 }256 else257 *preserve = 0;258 plen = strlen(preserve);259 if(plen)260 plen += 2;261 }262 break;263 case IDM_COPYPRESERVE:264 {265 CHAR preserve[CCHMAXPATH],*end;266 267 mp1 = MPFROM2SHORT(IDM_COPY,268 SHORT2FROMMP(mp1));269 strcpy(preserve,list[0] + 2);270 end = strrchr(preserve,'\\');271 if(end) {272 end++;273 for(x = 1;list[x];x++) {274 p = preserve;275 pp = list[x] + 2;276 while(p < end && toupper(*p) == toupper(*pp)) {277 p++;278 pp++;279 }280 if(*p == '\\')281 p++;282 if(p < end)283 end = p;284 }285 *end = 0;286 }287 else288 *preserve = 0;289 plen = strlen(preserve);290 if(plen)291 plen += 2;292 }293 break;294 case IDM_WILDMOVE:295 wildcarding = TRUE;296 mp1 = MPFROM2SHORT(IDM_MOVE,297 SHORT2FROMMP(mp1));298 break;299 case IDM_WILDRENAME:300 wildcarding = TRUE;301 mp1 = MPFROM2SHORT(IDM_RENAME,302 SHORT2FROMMP(mp1));303 break;304 case IDM_WILDCOPY:305 wildcarding = TRUE;306 mp1 = MPFROM2SHORT(IDM_COPY,307 SHORT2FROMMP(mp1));308 break;309 }310 311 switch(SHORT1FROMMP(mp1)) {312 case IDM_OBJECT:313 case IDM_SHADOW:314 {315 APIRET rc;316 317 GetDesktopName(path,sizeof(path));318 rc = WinDlgBox(HWND_DESKTOP,319 hwndFrame,320 ObjCnrDlgProc,321 FM3ModHandle,322 OBJCNR_FRAME,323 MPFROMP(path));324 if(rc) {325 if(rc > 1)326 strcpy(path,"<WP_DESKTOP>");327 }328 else {329 FreeList(list);330 break;331 }332 MakeShadows(hwndFrame,333 list,334 (SHORT1FROMMP(mp1) == IDM_SHADOW),335 path,336 NULL);337 }338 FreeList(list);339 break;340 341 case IDM_PRINT:342 {343 LISTINFO *li;344 345 li = malloc(sizeof(LISTINFO));346 if(li) {347 memset(li,0,sizeof(LISTINFO));348 li->hwndS = WinWindowFromID(hwndFrame,FID_CLIENT);349 li->type = IDM_PRINT;350 li->list = list;351 if(WinDlgBox(HWND_DESKTOP,352 li->hwndS,353 PrintDlgProc,354 FM3ModHandle,355 PRN_FRAME,356 MPFROMP(li))) {357 if(li && li->list && li->list[0]) {358 strcpy(li->targetpath,printer);359 if(_beginthread(PrintList,360 NULL,361 65536,362 (PVOID)li) == -1) {363 DosBeep(50,100);364 FreeListInfo(li);365 }366 }367 }368 }369 else370 FreeList(list);371 }372 break;373 374 case IDM_EAS:375 if(WinDlgBox(HWND_DESKTOP,376 hwndFrame,377 DisplayEAsProc,378 FM3ModHandle,379 EA_FRAME,380 (PVOID)list)) {381 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),382 UM_UPDATERECORDLIST,383 MPFROMP(list),384 MPVOID))385 FreeList(list);386 }387 else388 FreeList(list);389 break;390 391 case IDM_INFO:392 if(WinDlgBox(HWND_DESKTOP,393 hwndFrame,394 FileInfoProc,395 FM3ModHandle,396 FLE_FRAME,397 (PVOID)list) == 2) {398 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),399 UM_UPDATERECORDLIST,400 MPFROMP(list),401 MPVOID))402 FreeList(list);403 }404 else405 FreeList(list);406 break;407 408 case IDM_ARCHIVE:409 {410 DIRCNRDATA ad;411 CHAR szBuffer[1025];412 413 memset(&ad,0,sizeof(DIRCNRDATA));414 ad.namecanchange = 1;415 ad.info = arcsighead;416 if(!WinDlgBox(HWND_DESKTOP,417 hwndFrame,418 SBoxDlgProc,419 FM3ModHandle,420 ASEL_FRAME,421 (PVOID)&ad.info) ||422 !ad.info) { /* we blew it */423 FreeList(list);424 break;425 }426 if(!ad.info->create &&427 !ad.info->move &&428 !ad.info->createwdirs &&429 !ad.info->movewdirs &&430 !ad.info->createrecurse) {431 FreeList(list);432 break;433 }434 if(!WinDlgBox(HWND_DESKTOP,435 hwndFrame,436 ArchiveDlgProc,437 FM3ModHandle,438 ARCH_FRAME,439 (PVOID)&ad) ||440 !*ad.arcname ||441 !*ad.command) { /* we blew it */442 FreeList(list);443 break;444 }445 /* build the sucker */446 strcpy(szBuffer,ad.command);447 strcat(szBuffer," ");448 strcat(szBuffer,ad.arcname);449 p = &szBuffer[strlen(szBuffer)];450 if(ad.mask.szMask) {451 strcat(szBuffer," ");452 strcat(szBuffer,ad.mask.szMask);453 }454 strcat(szBuffer," ");455 x = 0;456 while(list[x]) {457 458 FILESTATUS3 fsa;459 BOOL spaces;460 461 if(needs_quoting(list[x])) {462 spaces = TRUE;463 strcat(szBuffer,"\"");464 }465 else466 spaces = FALSE;467 strcat(szBuffer,list[x]);468 memset(&fsa,0,sizeof(FILESTATUS3));469 DosError(FERR_DISABLEHARDERR);470 DosQueryPathInfo(list[x],FIL_STANDARD,471 &fsa,472 (ULONG)sizeof(FILESTATUS3));473 if(fsa.attrFile & FILE_DIRECTORY) {474 if(szBuffer[strlen(szBuffer) - 1] != '\\')475 strcat(szBuffer,"\\");476 strcat(szBuffer,"*");477 }478 if(spaces)479 strcat(szBuffer,"\"");480 x++;481 if(!list[x] || strlen(szBuffer) +482 strlen(list[x]) + 5 > 1024) {483 runemf2(SEPARATE | WINDOWED |484 ((fArcStuffVisible) ? 0 :485 (BACKGROUND | MINIMIZED)) |486 WAIT,487 HWND_DESKTOP,488 NULL,489 NULL,490 "%s",491 szBuffer);492 DosSleep(1L);493 *p = 0;494 }495 strcat(szBuffer," ");496 }497 AddToList(ad.arcname,498 &files,499 &numfiles,500 &numalloc);501 }502 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),503 UM_UPDATERECORDLIST,504 MPFROMP(list),505 MPVOID))506 FreeList(list);507 break;508 509 case IDM_ATTRS:510 {511 LISTINFO li;512 513 memset(&li,0,sizeof(li));514 li.list = list;515 if(WinDlgBox(HWND_DESKTOP,516 hwndFrame,517 AttrListDlgProc,518 FM3ModHandle,519 ATR_FRAME,520 MPFROMP(&li))) {521 if(li.list && li.list[0]) {522 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),523 UM_UPDATERECORDLIST,524 MPFROMP(li.list),525 MPVOID))526 FreeList(li.list);527 }528 }529 else530 FreeList(list);531 }532 break;533 534 case IDM_MOVE:535 case IDM_COPY:536 if(!*path)537 strcpy(path,targetdir);538 if(!*path)539 strcpy(path,list[0]);540 MakeValidDir(path);220 CHAR **files = NULL,**list = (CHAR **)mp2,path[CCHMAXPATH]; 221 INT numfiles = 0,numalloc = 0,plen = 0; 222 HWND hwndFrame = WinQueryWindowULong(hwnd,0); 223 CHAR message[CCHMAXPATH * 2],wildname[CCHMAXPATH]; 224 register INT x; 225 register CHAR *p,*pp; 226 BOOL dontask = FALSE,wildcarding = FALSE, 227 overold = FALSE,overnew = FALSE; 228 229 if(!list || !list[0]) 230 goto Abort; 231 *path = *wildname = 0; 232 233 switch(SHORT1FROMMP(mp1)) { 234 case IDM_MOVEPRESERVE: 235 { 236 CHAR preserve[CCHMAXPATH],*end; 237 238 mp1 = MPFROM2SHORT(IDM_MOVE, 239 SHORT2FROMMP(mp1)); 240 strcpy(preserve,list[0] + 2); 241 end = strrchr(preserve,'\\'); 242 if(end) { 243 end++; 244 for(x = 1;list[x];x++) { 245 p = preserve; 246 pp = list[x] + 2; 247 while(p < end && toupper(*p) == toupper(*pp)) { 248 p++; 249 pp++; 250 } 251 if(*p == '\\') 252 p++; 253 if(p < end) 254 end = p; 255 } 256 *end = 0; 257 } 258 else 259 *preserve = 0; 260 plen = strlen(preserve); 261 if(plen) 262 plen += 2; 263 } 264 break; 265 case IDM_COPYPRESERVE: 266 { 267 CHAR preserve[CCHMAXPATH],*end; 268 269 mp1 = MPFROM2SHORT(IDM_COPY, 270 SHORT2FROMMP(mp1)); 271 strcpy(preserve,list[0] + 2); 272 end = strrchr(preserve,'\\'); 273 if(end) { 274 end++; 275 for(x = 1;list[x];x++) { 276 p = preserve; 277 pp = list[x] + 2; 278 while(p < end && toupper(*p) == toupper(*pp)) { 279 p++; 280 pp++; 281 } 282 if(*p == '\\') 283 p++; 284 if(p < end) 285 end = p; 286 } 287 *end = 0; 288 } 289 else 290 *preserve = 0; 291 plen = strlen(preserve); 292 if(plen) 293 plen += 2; 294 } 295 break; 296 case IDM_WILDMOVE: 297 wildcarding = TRUE; 298 mp1 = MPFROM2SHORT(IDM_MOVE, 299 SHORT2FROMMP(mp1)); 300 break; 301 case IDM_WILDRENAME: 302 wildcarding = TRUE; 303 mp1 = MPFROM2SHORT(IDM_RENAME, 304 SHORT2FROMMP(mp1)); 305 break; 306 case IDM_WILDCOPY: 307 wildcarding = TRUE; 308 mp1 = MPFROM2SHORT(IDM_COPY, 309 SHORT2FROMMP(mp1)); 310 break; 311 } 312 313 switch(SHORT1FROMMP(mp1)) { 314 case IDM_OBJECT: 315 case IDM_SHADOW: 316 { 317 APIRET rc; 318 319 GetDesktopName(path,sizeof(path)); 320 rc = WinDlgBox(HWND_DESKTOP, 321 hwndFrame, 322 ObjCnrDlgProc, 323 FM3ModHandle, 324 OBJCNR_FRAME, 325 MPFROMP(path)); 326 if(rc) { 327 if(rc > 1) 328 strcpy(path,"<WP_DESKTOP>"); 329 } 330 else { 331 FreeList(list); 332 break; 333 } 334 MakeShadows(hwndFrame, 335 list, 336 (SHORT1FROMMP(mp1) == IDM_SHADOW), 337 path, 338 NULL); 339 } 340 FreeList(list); 341 break; 342 343 case IDM_PRINT: 344 { 345 LISTINFO *li; 346 347 li = malloc(sizeof(LISTINFO)); 348 if(li) { 349 memset(li,0,sizeof(LISTINFO)); 350 li->hwndS = WinWindowFromID(hwndFrame,FID_CLIENT); 351 li->type = IDM_PRINT; 352 li->list = list; 353 if(WinDlgBox(HWND_DESKTOP, 354 li->hwndS, 355 PrintDlgProc, 356 FM3ModHandle, 357 PRN_FRAME, 358 MPFROMP(li))) { 359 if(li && li->list && li->list[0]) { 360 strcpy(li->targetpath,printer); 361 if(_beginthread(PrintList, 362 NULL, 363 65536, 364 (PVOID)li) == -1) { 365 DosBeep(50,100); 366 FreeListInfo(li); 367 } 368 } 369 } 370 } 371 else 372 FreeList(list); 373 } 374 break; 375 376 case IDM_EAS: 377 if(WinDlgBox(HWND_DESKTOP, 378 hwndFrame, 379 DisplayEAsProc, 380 FM3ModHandle, 381 EA_FRAME, 382 (PVOID)list)) { 383 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 384 UM_UPDATERECORDLIST, 385 MPFROMP(list), 386 MPVOID)) 387 FreeList(list); 388 } 389 else 390 FreeList(list); 391 break; 392 393 case IDM_INFO: 394 if(WinDlgBox(HWND_DESKTOP, 395 hwndFrame, 396 FileInfoProc, 397 FM3ModHandle, 398 FLE_FRAME, 399 (PVOID)list) == 2) { 400 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 401 UM_UPDATERECORDLIST, 402 MPFROMP(list), 403 MPVOID)) 404 FreeList(list); 405 } 406 else 407 FreeList(list); 408 break; 409 410 case IDM_ARCHIVE: 411 { 412 DIRCNRDATA ad; 413 CHAR szBuffer[1025]; 414 415 memset(&ad,0,sizeof(ad)); 416 ad.namecanchange = 1; 417 ad.info = arcsighead; 418 if(!WinDlgBox(HWND_DESKTOP, 419 hwndFrame, 420 SBoxDlgProc, 421 FM3ModHandle, 422 ASEL_FRAME, 423 (PVOID)&ad.info) || 424 !ad.info) { /* we blew it */ 425 FreeList(list); 426 break; 427 } 428 if(!ad.info->create && 429 !ad.info->move && 430 !ad.info->createwdirs && 431 !ad.info->movewdirs && 432 !ad.info->createrecurse) { 433 FreeList(list); 434 break; 435 } 436 if(!WinDlgBox(HWND_DESKTOP, 437 hwndFrame, 438 ArchiveDlgProc, 439 FM3ModHandle, 440 ARCH_FRAME, 441 (PVOID)&ad) || 442 !*ad.arcname || 443 !*ad.command) { /* we blew it */ 444 FreeList(list); 445 break; 446 } 447 /* build the sucker */ 448 strcpy(szBuffer,ad.command); 449 strcat(szBuffer," "); 450 strcat(szBuffer,ad.arcname); 451 p = &szBuffer[strlen(szBuffer)]; 452 if(ad.mask.szMask) { 453 strcat(szBuffer," "); 454 strcat(szBuffer,ad.mask.szMask); 455 } 456 strcat(szBuffer," "); 457 x = 0; 458 while(list[x]) { 459 460 FILESTATUS3 fsa; 461 BOOL spaces; 462 463 if(needs_quoting(list[x])) { 464 spaces = TRUE; 465 strcat(szBuffer,"\""); 466 } 467 else 468 spaces = FALSE; 469 strcat(szBuffer,list[x]); 470 memset(&fsa,0,sizeof(fsa)); 471 DosError(FERR_DISABLEHARDERR); 472 DosQueryPathInfo(list[x],FIL_STANDARD, 473 &fsa, 474 (ULONG)sizeof(fsa)); 475 if(fsa.attrFile & FILE_DIRECTORY) { 476 if(szBuffer[strlen(szBuffer) - 1] != '\\') 477 strcat(szBuffer,"\\"); 478 strcat(szBuffer,"*"); 479 } 480 if(spaces) 481 strcat(szBuffer,"\""); 482 x++; 483 if(!list[x] || strlen(szBuffer) + 484 strlen(list[x]) + 5 > 1024) { 485 runemf2(SEPARATE | WINDOWED | 486 ((fArcStuffVisible) ? 0 : 487 (BACKGROUND | MINIMIZED)) | 488 WAIT, 489 HWND_DESKTOP, 490 NULL, 491 NULL, 492 "%s", 493 szBuffer); 494 DosSleep(1L); 495 *p = 0; 496 } 497 strcat(szBuffer," "); 498 } 499 AddToList(ad.arcname, 500 &files, 501 &numfiles, 502 &numalloc); 503 } 504 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 505 UM_UPDATERECORDLIST, 506 MPFROMP(list), 507 MPVOID)) 508 FreeList(list); 509 break; 510 511 case IDM_ATTRS: 512 { 513 LISTINFO li; 514 515 memset(&li,0,sizeof(li)); 516 li.list = list; 517 if(WinDlgBox(HWND_DESKTOP, 518 hwndFrame, 519 AttrListDlgProc, 520 FM3ModHandle, 521 ATR_FRAME, 522 MPFROMP(&li))) { 523 if(li.list && li.list[0]) { 524 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 525 UM_UPDATERECORDLIST, 526 MPFROMP(li.list), 527 MPVOID)) 528 FreeList(li.list); 529 } 530 } 531 else 532 FreeList(list); 533 } 534 break; 535 536 case IDM_MOVE: 537 case IDM_COPY: 538 if(!*path) 539 strcpy(path,targetdir); 540 if(!*path) 541 strcpy(path,list[0]); 542 MakeValidDir(path); 541 543 RetryPath: 542 if(SHORT1FROMMP(mp1) == IDM_MOVE) {543 if(!WinDlgBox(HWND_DESKTOP,544 hwndFrame,545 WalkMoveDlgProc,546 FM3ModHandle,547 WALK_FRAME,548 MPFROMP(path)) ||549 !*path) {550 FreeList(list);551 goto Abort;552 }553 }554 else {555 if(!WinDlgBox(HWND_DESKTOP,556 hwndFrame,557 WalkCopyDlgProc,558 FM3ModHandle,559 WALK_FRAME,560 MPFROMP(path)) ||561 !*path) {562 FreeList(list);563 goto Abort;564 }565 }566 if(driveflags[toupper(*path) - 'A'] & DRIVE_NOTWRITEABLE) {567 saymsg(MB_CANCEL,568 hwndFrame,569 GetPString(IDS_ERRORTEXT),570 "%s",571 GetPString(IDS_NOTWRITENOTARGETTEXT));572 goto RetryPath;573 }574 /* intentional fallthru */575 case IDM_RENAME:576 {577 CHAR newname[CCHMAXPATH],*moving,*move,*moved;578 APIRET rc;579 INT type;580 FILESTATUS4 fs4;581 BOOL isnewer,existed;582 583 for(x = 0;list[x];x++) {544 if(SHORT1FROMMP(mp1) == IDM_MOVE) { 545 if(!WinDlgBox(HWND_DESKTOP, 546 hwndFrame, 547 WalkMoveDlgProc, 548 FM3ModHandle, 549 WALK_FRAME, 550 MPFROMP(path)) || 551 !*path) { 552 FreeList(list); 553 goto Abort; 554 } 555 } 556 else { 557 if(!WinDlgBox(HWND_DESKTOP, 558 hwndFrame, 559 WalkCopyDlgProc, 560 FM3ModHandle, 561 WALK_FRAME, 562 MPFROMP(path)) || 563 !*path) { 564 FreeList(list); 565 goto Abort; 566 } 567 } 568 if(driveflags[toupper(*path) - 'A'] & DRIVE_NOTWRITEABLE) { 569 saymsg(MB_CANCEL, 570 hwndFrame, 571 GetPString(IDS_ERRORTEXT), 572 "%s", 573 GetPString(IDS_NOTWRITENOTARGETTEXT)); 574 goto RetryPath; 575 } 576 /* intentional fallthru */ 577 case IDM_RENAME: 578 { 579 CHAR newname[CCHMAXPATH],*moving,*move,*moved; 580 APIRET rc; 581 INT type; 582 FILESTATUS4 fs4; 583 BOOL isnewer,existed; 584 585 for(x = 0;list[x];x++) { 584 586 Retry: 585 type = (SHORT1FROMMP(mp1) == IDM_RENAME) ? MOVE :586 (SHORT1FROMMP(mp1) == IDM_MOVE) ? MOVE :587 (SHORT1FROMMP(mp1) == IDM_WPSMOVE) ? WPSMOVE :588 (SHORT1FROMMP(mp1) == IDM_WPSCOPY) ? WPSCOPY :589 COPY;590 moving = (SHORT1FROMMP(mp1) == IDM_RENAME) ?591 GetPString(IDS_RENAMINGTEXT) :592 (SHORT1FROMMP(mp1) == IDM_MOVE ||593 SHORT1FROMMP(mp1) == IDM_WPSMOVE) ?594 GetPString(IDS_MOVINGTEXT) :595 GetPString(IDS_COPYINGTEXT);596 move = (SHORT1FROMMP(mp1) == IDM_RENAME) ?597 GetPString(IDS_RENAMETEXT) :598 (SHORT1FROMMP(mp1) == IDM_MOVE ||599 SHORT1FROMMP(mp1) == IDM_WPSMOVE) ?600 GetPString(IDS_MOVETEXT) :601 GetPString(IDS_COPYTEXT);602 moved = (SHORT1FROMMP(mp1) == IDM_RENAME) ?603 GetPString(IDS_RENAMEDTEXT) :604 (SHORT1FROMMP(mp1) == IDM_MOVE ||605 SHORT1FROMMP(mp1) == IDM_WPSMOVE) ?606 GetPString(IDS_MOVEDTEXT) :607 GetPString(IDS_COPIEDTEXT);608 if(*path) {609 strcpy(newname,path);610 if(newname[strlen(newname) - 1] != '\\')611 strcat(newname,"\\");612 if(plen)613 p = list[x] + plen;614 else {615 p = strrchr(list[x],'\\');616 if(p)617 p++;618 else619 p = list[x];620 }621 strcat(newname,p);622 }623 else624 strcpy(newname,list[x]);625 if((wildcarding ||626 SHORT1FROMMP(mp1) == IDM_RENAME) &&627 *wildname) {628 629 CHAR testname[CCHMAXPATH];630 631 strcpy(testname,wildname);632 if(AdjustWildcardName(newname,testname))633 strcpy(newname,testname);634 }635 existed = (IsFile(newname) != -1);636 isnewer = IsNewer(list[x],newname);637 if(existed &&638 SHORT1FROMMP(mp1) != IDM_RENAME &&639 dontask) {640 if(!overold && !overnew)641 break;642 if(!overold && !isnewer)643 break;644 if(!overnew && isnewer)645 break;646 }647 if((SHORT1FROMMP(mp1) == IDM_RENAME &&648 (!dontask || !*wildname)) ||649 (!dontask && existed) ||650 (!dontask && wildcarding) ||651 (IsFile(newname) == 0 && IsFile(list[x]) == 1)) {652 653 MOVEIT mv;654 655 memset(&mv,0,sizeof(MOVEIT));656 mv.rename = (SHORT1FROMMP(mp1) == IDM_RENAME);657 mv.source = list[x];658 strcpy(mv.target,newname);659 rc = WinDlgBox(HWND_DESKTOP,660 hwndFrame,661 RenameProc,662 FM3ModHandle,663 REN_FRAME,664 (PVOID)&mv);665 if(!rc) {666 FreeList(list);667 goto Abort;668 }669 DosSleep(1L);670 if(mv.skip || !*mv.target)671 break;672 if(mv.dontask)673 dontask = TRUE;674 if(mv.overold)675 overold = TRUE;676 if(mv.overnew)677 overnew = TRUE;678 if(wildcarding ||679 SHORT1FROMMP(mp1) == IDM_RENAME) {680 p = strrchr(mv.target,'\\');681 if(p && (strchr(p,'*') || strchr(p,'?'))) {682 strcpy(wildname,mv.target);683 AdjustWildcardName(list[x],mv.target);684 }685 else686 *wildname = 0;687 }688 strcpy(newname,mv.target);689 existed = (IsFile(newname) != -1);690 isnewer = IsNewer(list[x],newname);691 if(!mv.overwrite) {692 if(existed && SHORT1FROMMP(mp1) != IDM_RENAME &&693 dontask) {694 if(!overold && !overnew)695 break;696 if(!overold && !isnewer)697 break;698 if(!overnew && isnewer)699 break;700 }701 }702 }703 if(!stricmp(list[x],newname))704 break;705 sprintf(message,706 " %s \"%s\" %s \"%s\"",707 moving,708 list[x],709 GetPString(IDS_TOTEXT),710 newname);711 WinSetWindowText(WinWindowFromID(hwndFrame,712 SEEALL_STATUS),713 message);714 if(fRealIdle)715 priority_idle();716 if(plen) {717 /* make directory/ies, if required */718 719 CHAR dirpart[CCHMAXPATH];720 721 strcpy(dirpart,newname);722 p = strrchr(dirpart,'\\');723 if(p) {724 *p = 0;725 if(p > dirpart + 3)726 MassMkdir((hwndMain) ? hwndMain : (HWND)0,727 dirpart);728 }729 }730 rc = docopyf(type,731 list[x],732 "%s",733 newname);734 priority_normal();735 if(rc) {736 if((rc == ERROR_DISK_FULL ||737 rc == ERROR_HANDLE_DISK_FULL) &&738 isalpha(*newname) &&739 (driveflags[toupper(*newname) - 'A'] & DRIVE_REMOVABLE) &&740 !(driveflags[toupper(*newname) - 'A'] & DRIVE_NOTWRITEABLE) &&741 toupper(*newname) != toupper(*list[x]) &&742 !DosQueryPathInfo(list[x],743 FIL_QUERYEASIZE,744 &fs4,745 sizeof(fs4)) &&746 !(fs4.attrFile & FILE_DIRECTORY)) {747 748 FSALLOCATE fsa;749 ULONG clFreeBytes;750 CHAR *ptr;751 INT cntr;752 753 WinSetWindowText(WinWindowFromID(hwndFrame,SEEALL_STATUS),754 GetPString(IDS_FITTINGTEXT));755 DosError(FERR_DISABLEHARDERR);756 if(!DosQueryFSInfo(toupper(*newname) - '@',757 FSIL_ALLOC,&fsa,sizeof(FSALLOCATE))) {587 type = (SHORT1FROMMP(mp1) == IDM_RENAME) ? MOVE : 588 (SHORT1FROMMP(mp1) == IDM_MOVE) ? MOVE : 589 (SHORT1FROMMP(mp1) == IDM_WPSMOVE) ? WPSMOVE : 590 (SHORT1FROMMP(mp1) == IDM_WPSCOPY) ? WPSCOPY : 591 COPY; 592 moving = (SHORT1FROMMP(mp1) == IDM_RENAME) ? 593 GetPString(IDS_RENAMINGTEXT) : 594 (SHORT1FROMMP(mp1) == IDM_MOVE || 595 SHORT1FROMMP(mp1) == IDM_WPSMOVE) ? 596 GetPString(IDS_MOVINGTEXT) : 597 GetPString(IDS_COPYINGTEXT); 598 move = (SHORT1FROMMP(mp1) == IDM_RENAME) ? 599 GetPString(IDS_RENAMETEXT) : 600 (SHORT1FROMMP(mp1) == IDM_MOVE || 601 SHORT1FROMMP(mp1) == IDM_WPSMOVE) ? 602 GetPString(IDS_MOVETEXT) : 603 GetPString(IDS_COPYTEXT); 604 moved = (SHORT1FROMMP(mp1) == IDM_RENAME) ? 605 GetPString(IDS_RENAMEDTEXT) : 606 (SHORT1FROMMP(mp1) == IDM_MOVE || 607 SHORT1FROMMP(mp1) == IDM_WPSMOVE) ? 608 GetPString(IDS_MOVEDTEXT) : 609 GetPString(IDS_COPIEDTEXT); 610 if(*path) { 611 strcpy(newname,path); 612 if(newname[strlen(newname) - 1] != '\\') 613 strcat(newname,"\\"); 614 if(plen) 615 p = list[x] + plen; 616 else { 617 p = strrchr(list[x],'\\'); 618 if(p) 619 p++; 620 else 621 p = list[x]; 622 } 623 strcat(newname,p); 624 } 625 else 626 strcpy(newname,list[x]); 627 if((wildcarding || 628 SHORT1FROMMP(mp1) == IDM_RENAME) && 629 *wildname) { 630 631 CHAR testname[CCHMAXPATH]; 632 633 strcpy(testname,wildname); 634 if(AdjustWildcardName(newname,testname)) 635 strcpy(newname,testname); 636 } 637 existed = (IsFile(newname) != -1); 638 isnewer = IsNewer(list[x],newname); 639 if(existed && 640 SHORT1FROMMP(mp1) != IDM_RENAME && 641 dontask) { 642 if(!overold && !overnew) 643 break; 644 if(!overold && !isnewer) 645 break; 646 if(!overnew && isnewer) 647 break; 648 } 649 if((SHORT1FROMMP(mp1) == IDM_RENAME && 650 (!dontask || !*wildname)) || 651 (!dontask && existed) || 652 (!dontask && wildcarding) || 653 (IsFile(newname) == 0 && IsFile(list[x]) == 1)) { 654 655 MOVEIT mv; 656 657 memset(&mv,0,sizeof(mv)); 658 mv.rename = (SHORT1FROMMP(mp1) == IDM_RENAME); 659 mv.source = list[x]; 660 strcpy(mv.target,newname); 661 rc = WinDlgBox(HWND_DESKTOP, 662 hwndFrame, 663 RenameProc, 664 FM3ModHandle, 665 REN_FRAME, 666 (PVOID)&mv); 667 if(!rc) { 668 FreeList(list); 669 goto Abort; 670 } 671 DosSleep(1L); 672 if(mv.skip || !*mv.target) 673 break; 674 if(mv.dontask) 675 dontask = TRUE; 676 if(mv.overold) 677 overold = TRUE; 678 if(mv.overnew) 679 overnew = TRUE; 680 if(wildcarding || 681 SHORT1FROMMP(mp1) == IDM_RENAME) { 682 p = strrchr(mv.target,'\\'); 683 if(p && (strchr(p,'*') || strchr(p,'?'))) { 684 strcpy(wildname,mv.target); 685 AdjustWildcardName(list[x],mv.target); 686 } 687 else 688 *wildname = 0; 689 } 690 strcpy(newname,mv.target); 691 existed = (IsFile(newname) != -1); 692 isnewer = IsNewer(list[x],newname); 693 if(!mv.overwrite) { 694 if(existed && SHORT1FROMMP(mp1) != IDM_RENAME && 695 dontask) { 696 if(!overold && !overnew) 697 break; 698 if(!overold && !isnewer) 699 break; 700 if(!overnew && isnewer) 701 break; 702 } 703 } 704 } 705 if(!stricmp(list[x],newname)) 706 break; 707 sprintf(message, 708 " %s \"%s\" %s \"%s\"", 709 moving, 710 list[x], 711 GetPString(IDS_TOTEXT), 712 newname); 713 WinSetWindowText(WinWindowFromID(hwndFrame, 714 SEEALL_STATUS), 715 message); 716 if(fRealIdle) 717 priority_idle(); 718 if(plen) { 719 /* make directory/ies, if required */ 720 721 CHAR dirpart[CCHMAXPATH]; 722 723 strcpy(dirpart,newname); 724 p = strrchr(dirpart,'\\'); 725 if(p) { 726 *p = 0; 727 if(p > dirpart + 3) 728 MassMkdir((hwndMain) ? hwndMain : (HWND)0, 729 dirpart); 730 } 731 } 732 rc = docopyf(type, 733 list[x], 734 "%s", 735 newname); 736 priority_normal(); 737 if(rc) { 738 if((rc == ERROR_DISK_FULL || 739 rc == ERROR_HANDLE_DISK_FULL) && 740 isalpha(*newname) && 741 (driveflags[toupper(*newname) - 'A'] & DRIVE_REMOVABLE) && 742 !(driveflags[toupper(*newname) - 'A'] & DRIVE_NOTWRITEABLE) && 743 toupper(*newname) != toupper(*list[x]) && 744 !DosQueryPathInfo(list[x], 745 FIL_QUERYEASIZE, 746 &fs4, 747 sizeof(fs4)) && 748 !(fs4.attrFile & FILE_DIRECTORY)) { 749 750 FSALLOCATE fsa; 751 ULONG clFreeBytes; 752 CHAR *ptr; 753 INT cntr; 754 755 WinSetWindowText(WinWindowFromID(hwndFrame,SEEALL_STATUS), 756 GetPString(IDS_FITTINGTEXT)); 757 DosError(FERR_DISABLEHARDERR); 758 if(!DosQueryFSInfo(toupper(*newname) - '@', 759 FSIL_ALLOC,&fsa,sizeof(fsa))) { 758 760 // Assume <2GB since file did not fit 759 clFreeBytes = fsa.cUnitAvail * fsa.cSectorUnit *760 fsa.cbSector;761 if(clFreeBytes) {761 clFreeBytes = fsa.cUnitAvail * fsa.cSectorUnit * 762 fsa.cbSector; 763 if(clFreeBytes) { 762 764 // Find item that will fit in available space 763 for(cntr = x + 1;list[cntr];cntr++) {764 DosError(FERR_DISABLEHARDERR);765 if(!DosQueryPathInfo(list[cntr],766 FIL_QUERYEASIZE,767 &fs4,sizeof(fs4)) &&768 !(fs4.attrFile & FILE_DIRECTORY) &&765 for(cntr = x + 1;list[cntr];cntr++) { 766 DosError(FERR_DISABLEHARDERR); 767 if(!DosQueryPathInfo(list[cntr], 768 FIL_QUERYEASIZE, 769 &fs4,sizeof(fs4)) && 770 !(fs4.attrFile & FILE_DIRECTORY) && 769 771 // fixme to use CBLIST_TO_EASIZE? 770 fs4.cbFile + fs4.cbList <= clFreeBytes) {772 fs4.cbFile + fs4.cbList <= clFreeBytes) { 771 773 // Swap with failing item 772 ptr = list[x];773 list[x] = list[cntr];774 list[cntr] = ptr;775 goto Retry;776 }777 }778 WinSetWindowText(WinWindowFromID(hwndFrame,779 SEEALL_STATUS),780 GetPString(IDS_COULDNTFITTEXT));781 }782 }783 rc = saymsg(MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION,784 hwndFrame,785 GetPString(IDS_DISKFULLTEXT),786 "%s",787 GetPString(IDS_ANOTHERDISKTEXT));788 if(rc == MBID_RETRY)789 goto Retry;790 if(rc == MBID_ABORT) {791 FreeList(list);792 goto Abort;793 }794 }795 else {796 if(LogFileHandle)797 fprintf(LogFileHandle,798 GetPString(IDS_LOGTOFAILEDTEXT),799 move,800 list[x],801 newname,802 rc);803 rc = Dos_Error(MB_ENTERCANCEL,804 rc,805 hwndFrame,806 __FILE__,807 __LINE__,808 "%s %s \"%s\" %s\"%s\" %s.",809 move,810 GetPString(IDS_OFTEXT),811 list[x],812 GetPString(IDS_TOTEXT),813 newname,814 GetPString(IDS_FAILEDTEXT));815 if(rc == MBID_CANCEL) {816 FreeList(list);817 goto Abort;818 }819 }820 }821 else {822 if(LogFileHandle)823 fprintf(LogFileHandle,824 "%s \"%s\" %s \"%s\"\n",825 moved,826 list[x],827 GetPString(IDS_TOTEXT),828 newname);829 AddToList(newname,830 &files,831 &numfiles,832 &numalloc);833 }834 }835 }836 if(SHORT1FROMMP(mp1) != IDM_COPY) {837 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),838 UM_UPDATERECORDLIST,839 MPFROMP(list),840 MPVOID))841 FreeList(list);842 }843 else844 FreeList(list);845 break;846 847 case IDM_UUDECODE:848 for(x = 0;list[x];x++)849 UUD(list[x],NULL);850 break;851 852 case IDM_EXTRACT:853 for(x = 0;list[x];x++) {854 855 EXTRDATA ex;856 BOOL maskspaces = FALSE;857 858 memset(&ex,0,sizeof(EXTRDATA));859 ex.info = find_type(list[x],NULL);860 if(!ex.info || (!ex.info->extract &&861 !ex.info->exwdirs))862 break;863 ex.size = sizeof(EXTRDATA);864 ex.arcname = list[x];865 strcpy(ex.masks,"*");866 if(!WinDlgBox(HWND_DESKTOP,867 hwndFrame,868 ExtractDlgProc,869 FM3ModHandle,870 EXT_FRAME,871 (PVOID)&ex) ||872 !ex.ret ||873 !*ex.command ||874 !*ex.arcname ||875 !*ex.extractdir)876 break;877 if(!IsFile(ex.extractdir)) {878 if(needs_quoting(ex.masks) &&879 !strchr(ex.masks,'\"') )880 maskspaces = TRUE;881 runemf2(SEPARATE | WINDOWED |882 ((fArcStuffVisible) ? 0 :883 (BACKGROUND | MINIMIZED)),884 HWND_DESKTOP,885 ex.extractdir,886 NULL,887 "%s %s %s%s%s",888 ex.command,889 ex.arcname,890 (maskspaces) ? "\"" : NullStr,891 (*ex.masks) ? ex.masks : "*",892 (maskspaces) ? "\"" : NullStr);893 }894 else895 DosBeep(50,100);896 }897 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),898 UM_UPDATERECORDLIST,899 MPFROMP(list),900 MPVOID))901 FreeList(list);902 break;903 904 case IDM_SUBJECT:905 for(x = 0;list[x];x++) {906 907 INT ret;908 909 if(IsFile(list[x]) == 1) {910 ret = Subject(hwndFrame,list[x]);911 if(!ret)912 break;913 }914 }915 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),916 UM_UPDATERECORDLIST,917 MPFROMP(list),918 MPVOID))919 FreeList(list);920 break;921 922 case IDM_OPENDEFAULT:923 case IDM_OPENSETTINGS:924 for(x = 0;list[x];x++) {925 if(IsFile(list[x]) != -1) {926 927 CHAR *s;928 929 switch(SHORT1FROMMP(mp1)) {930 case IDM_OPENSETTINGS:931 s = Settings;932 break;933 default:934 s = Default;935 break;936 }937 OpenObject(list[x],938 s,939 hwndFrame);940 }941 }942 FreeList(list);943 break;944 945 case IDM_DELETE:946 case IDM_PERMDELETE:947 {948 CHECKLIST cl;949 INT isdir = 0,sysdir = 0,ro = 0,hs = 0;950 FILESTATUS3 fsa;951 CHAR prompt[CCHMAXPATH * 3];952 APIRET error;953 954 for(x = 0;list[x];x++) {955 if(IsRoot(list[x])) {956 list = RemoveFromList(list,list[x]);957 if(!list)958 break;959 x--;960 continue;961 }962 DosError(FERR_DISABLEHARDERR);963 if(DosQueryPathInfo(list[x],964 FIL_STANDARD,965 &fsa,966 (ULONG)sizeof(FILESTATUS3))) {967 list = RemoveFromList(list,list[x]);968 if(!list)969 break;970 x--;971 continue;972 }973 if(fsa.attrFile & FILE_DIRECTORY) {974 isdir++;975 if(stristr(list[x],":\\OS2\\") ||976 !stricmp(list[x] + 1,":\\OS2"))977 sysdir++;978 }979 else {980 if(fsa.attrFile & (FILE_HIDDEN | FILE_SYSTEM))981 hs++;982 if(fsa.attrFile & FILE_READONLY)983 ro++;984 }985 }986 if(!list)987 break;988 if(fConfirmDelete || isdir) {989 memset(&cl,0,sizeof(cl));990 cl.size = sizeof(cl);991 cl.list = list;992 cl.prompt = prompt;993 cl.flags |= CHECK_FILES;994 cl.cmd = SHORT1FROMMP(mp1);995 sprintf(prompt,996 GetPString(IDS_DELPROMPT1TEXT),997 (SHORT1FROMMP(mp1) == IDM_DELETE) ?998 NullStr :999 GetPString(IDS_PERMANENTLYTEXT),1000 &"s"[list[1] == NULL]);1001 if(isdir) {1002 sprintf(&prompt[strlen(prompt)],1003 GetPString(IDS_DELPROMPT2TEXT),1004 isdir,1005 (isdir > 1) ?1006 GetPString(IDS_ARETEXT) :1007 GetPString(IDS_ISTEXT),1008 (isdir == 1) ?1009 GetPString(IDS_ATEXT) :1010 NullStr,1011 (isdir > 1) ?1012 GetPString(IDS_IESTEXT) :1013 GetPString(IDS_YTEXT));1014 if(sysdir)1015 sprintf(&prompt[strlen(prompt)],1016 GetPString(IDS_DELPROMPT3TEXT),1017 sysdir,1018 (sysdir == 1) ?1019 GetPString(IDS_YTEXT) :1020 GetPString(IDS_IESTEXT));1021 }1022 if(ro)1023 sprintf(&prompt[strlen(prompt)],1024 GetPString(IDS_DELPROMPT4TEXT),1025 ro,1026 &"s"[ro == 1],1027 (ro > 1) ?1028 GetPString(IDS_ARETEXT) :1029 GetPString(IDS_ISTEXT));1030 if(hs)1031 sprintf(&prompt[strlen(prompt)],1032 GetPString(IDS_DELPROMPT5TEXT),1033 hs,1034 &"s"[hs == 1],1035 (hs > 1) ?1036 GetPString(IDS_ARETEXT) :1037 GetPString(IDS_ISTEXT));1038 if(ro || hs || sysdir)1039 DosBeep(300,100);1040 strcat(prompt,1041 GetPString(IDS_DELPROMPT6TEXT));1042 if(!WinDlgBox(HWND_DESKTOP,1043 WinWindowFromID(hwndFrame,FID_CLIENT),1044 CheckListProc,1045 FM3ModHandle,1046 CHECK_FRAME,1047 MPFROMP(&cl)))1048 break;1049 list = cl.list;1050 if(!list || !list[0])1051 break;1052 }1053 for(x = 0;list[x];x++) {1054 fsa.attrFile = 0;1055 DosError(FERR_DISABLEHARDERR);1056 DosQueryPathInfo(list[x],1057 FIL_STANDARD,1058 &fsa,1059 (ULONG)sizeof(FILESTATUS3));1060 if(fsa.attrFile & FILE_DIRECTORY) {1061 sprintf(prompt,1062 GetPString(IDS_DELETINGTEXT),1063 list[x]);1064 WinSetWindowText(WinWindowFromID(hwndFrame,SEEALL_STATUS),1065 prompt);1066 error = (APIRET)wipeallf("%s%s*",1067 list[x],1068 (*list[x] &&1069 list[x][strlen(list[x]) - 1] != '\\') ?1070 "\\" : NullStr);1071 DosError(FERR_DISABLEHARDERR);1072 if(!error)1073 error = DosDeleteDir(list[x]);1074 else1075 DosDeleteDir(list[x]);1076 }1077 else {1078 DosError(FERR_DISABLEHARDERR);1079 if(SHORT1FROMMP(mp1) == IDM_DELETE)1080 error = DosDelete(list[x]);1081 else1082 error = DosForceDelete(list[x]);1083 if(error) {1084 DosError(FERR_DISABLEHARDERR);1085 make_deleteable(list[x]);1086 if(SHORT1FROMMP(mp1) == IDM_DELETE)1087 error = DosDelete(list[x]);1088 else1089 error = DosForceDelete(list[x]);1090 }1091 }1092 if(error) {1093 if(LogFileHandle)1094 fprintf(LogFileHandle,1095 GetPString(IDS_DELETEFAILED1TEXT),1096 list[x],1097 error);1098 if(Dos_Error(MB_ENTERCANCEL,1099 error,1100 hwndFrame,1101 __FILE__,1102 __LINE__,1103 GetPString(IDS_DELETEFAILED2TEXT),1104 list[x]) ==1105 MBID_CANCEL)1106 break;1107 }1108 else1109 if(LogFileHandle)1110 fprintf(LogFileHandle,1111 "%s\n",1112 GetPString(IDS_DELETEDTEXT),1113 list[x]);1114 AddToList(list[x],1115 &files,1116 &numfiles,1117 &numalloc);1118 }1119 }1120 FreeList(list);1121 break;1122 1123 case IDM_SAVETOLIST:1124 if(list) {1125 WinDlgBox(HWND_DESKTOP,1126 WinWindowFromID(hwndFrame,FID_CLIENT),1127 SaveAllListDlgProc,1128 FM3ModHandle,1129 SAV_FRAME,1130 MPFROMP(list));1131 FreeList(list);1132 }1133 break;1134 1135 case IDM_SAVETOCLIP:1136 case IDM_APPENDTOCLIP:1137 if(list) {1138 ListToClipboardHab(WinQueryAnchorBlock(hwnd),1139 list,1140 (SHORT1FROMMP(mp1) == IDM_APPENDTOCLIP));1141 FreeList(list);1142 }1143 break;1144 1145 default:1146 if(list)1147 FreeList(list);1148 break;1149 }1150 1151 switch(SHORT1FROMMP(mp1)) {1152 case IDM_MOVE:1153 case IDM_COPY:1154 case IDM_RENAME:1155 sprintf(message,1156 GetPString(IDS_OPSCOMPLETETEXT),1157 (SHORT1FROMMP(mp1) == IDM_MOVE) ?1158 GetPString(IDS_MOVETEXT) :1159 (SHORT1FROMMP(mp1) == IDM_COPY) ?1160 GetPString(IDS_COPYTEXT) :1161 (SHORT1FROMMP(mp1) == IDM_WPSMOVE) ?1162 GetPString(IDS_WPSMOVETEXT) :1163 (SHORT1FROMMP(mp1) == IDM_WPSCOPY) ?1164 GetPString(IDS_WPSCOPYTEXT) :1165 GetPString(IDS_RENAMETEXT),1166 &"s"[x == 1],1167 (SHORT1FROMMP(mp1) == IDM_MOVE ||1168 SHORT1FROMMP(mp1) == IDM_COPY ||1169 SHORT1FROMMP(mp1) == IDM_WPSMOVE ||1170 SHORT1FROMMP(mp1) == IDM_WPSCOPY) ?1171 GetPString(IDS_TOTEXT) :1172 NullStr,1173 (SHORT1FROMMP(mp1) == IDM_MOVE ||1174 SHORT1FROMMP(mp1) == IDM_COPY ||1175 SHORT1FROMMP(mp1) == IDM_WPSMOVE ||1176 SHORT1FROMMP(mp1) == IDM_WPSCOPY) ?1177 path :1178 NullStr,1179 (x != 1) ?1180 GetPString(IDS_ARETEXT) :1181 GetPString(IDS_ISTEXT));1182 WinSetWindowText(WinWindowFromID(hwndFrame,SEEALL_STATUS),1183 message);1184 if(toupper(*path) < 'C')1185 DosBeep(1000,25);1186 DosSleep(33L);1187 break;1188 1189 default:1190 break;1191 }774 ptr = list[x]; 775 list[x] = list[cntr]; 776 list[cntr] = ptr; 777 goto Retry; 778 } 779 } 780 WinSetWindowText(WinWindowFromID(hwndFrame, 781 SEEALL_STATUS), 782 GetPString(IDS_COULDNTFITTEXT)); 783 } 784 } 785 rc = saymsg(MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION, 786 hwndFrame, 787 GetPString(IDS_DISKFULLTEXT), 788 "%s", 789 GetPString(IDS_ANOTHERDISKTEXT)); 790 if(rc == MBID_RETRY) 791 goto Retry; 792 if(rc == MBID_ABORT) { 793 FreeList(list); 794 goto Abort; 795 } 796 } 797 else { 798 if(LogFileHandle) 799 fprintf(LogFileHandle, 800 GetPString(IDS_LOGTOFAILEDTEXT), 801 move, 802 list[x], 803 newname, 804 rc); 805 rc = Dos_Error(MB_ENTERCANCEL, 806 rc, 807 hwndFrame, 808 __FILE__, 809 __LINE__, 810 "%s %s \"%s\" %s\"%s\" %s.", 811 move, 812 GetPString(IDS_OFTEXT), 813 list[x], 814 GetPString(IDS_TOTEXT), 815 newname, 816 GetPString(IDS_FAILEDTEXT)); 817 if(rc == MBID_CANCEL) { 818 FreeList(list); 819 goto Abort; 820 } 821 } 822 } 823 else { 824 if(LogFileHandle) 825 fprintf(LogFileHandle, 826 "%s \"%s\" %s \"%s\"\n", 827 moved, 828 list[x], 829 GetPString(IDS_TOTEXT), 830 newname); 831 AddToList(newname, 832 &files, 833 &numfiles, 834 &numalloc); 835 } 836 } 837 } 838 if(SHORT1FROMMP(mp1) != IDM_COPY) { 839 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 840 UM_UPDATERECORDLIST, 841 MPFROMP(list), 842 MPVOID)) 843 FreeList(list); 844 } 845 else 846 FreeList(list); 847 break; 848 849 case IDM_UUDECODE: 850 for(x = 0;list[x];x++) 851 UUD(list[x],NULL); 852 break; 853 854 case IDM_EXTRACT: 855 for(x = 0;list[x];x++) { 856 857 EXTRDATA ex; 858 BOOL maskspaces = FALSE; 859 860 memset(&ex,0,sizeof(ex)); 861 ex.info = find_type(list[x],NULL); 862 if(!ex.info || (!ex.info->extract && 863 !ex.info->exwdirs)) 864 break; 865 ex.size = sizeof(ex); 866 ex.arcname = list[x]; 867 strcpy(ex.masks,"*"); 868 if(!WinDlgBox(HWND_DESKTOP, 869 hwndFrame, 870 ExtractDlgProc, 871 FM3ModHandle, 872 EXT_FRAME, 873 (PVOID)&ex) || 874 !ex.ret || 875 !*ex.command || 876 !*ex.arcname || 877 !*ex.extractdir) 878 break; 879 if(!IsFile(ex.extractdir)) { 880 if(needs_quoting(ex.masks) && 881 !strchr(ex.masks,'\"') ) 882 maskspaces = TRUE; 883 runemf2(SEPARATE | WINDOWED | 884 ((fArcStuffVisible) ? 0 : 885 (BACKGROUND | MINIMIZED)), 886 HWND_DESKTOP, 887 ex.extractdir, 888 NULL, 889 "%s %s %s%s%s", 890 ex.command, 891 ex.arcname, 892 (maskspaces) ? "\"" : NullStr, 893 (*ex.masks) ? ex.masks : "*", 894 (maskspaces) ? "\"" : NullStr); 895 } 896 else 897 DosBeep(50,100); 898 } 899 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 900 UM_UPDATERECORDLIST, 901 MPFROMP(list), 902 MPVOID)) 903 FreeList(list); 904 break; 905 906 case IDM_SUBJECT: 907 for(x = 0;list[x];x++) { 908 909 INT ret; 910 911 if(IsFile(list[x]) == 1) { 912 ret = Subject(hwndFrame,list[x]); 913 if(!ret) 914 break; 915 } 916 } 917 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 918 UM_UPDATERECORDLIST, 919 MPFROMP(list), 920 MPVOID)) 921 FreeList(list); 922 break; 923 924 case IDM_OPENDEFAULT: 925 case IDM_OPENSETTINGS: 926 for(x = 0;list[x];x++) { 927 if(IsFile(list[x]) != -1) { 928 929 CHAR *s; 930 931 switch(SHORT1FROMMP(mp1)) { 932 case IDM_OPENSETTINGS: 933 s = Settings; 934 break; 935 default: 936 s = Default; 937 break; 938 } 939 OpenObject(list[x], 940 s, 941 hwndFrame); 942 } 943 } 944 FreeList(list); 945 break; 946 947 case IDM_DELETE: 948 case IDM_PERMDELETE: 949 { 950 CHECKLIST cl; 951 INT isdir = 0,sysdir = 0,ro = 0,hs = 0; 952 FILESTATUS3 fsa; 953 CHAR prompt[CCHMAXPATH * 3]; 954 APIRET error; 955 956 for(x = 0;list[x];x++) { 957 if(IsRoot(list[x])) { 958 list = RemoveFromList(list,list[x]); 959 if(!list) 960 break; 961 x--; 962 continue; 963 } 964 DosError(FERR_DISABLEHARDERR); 965 if(DosQueryPathInfo(list[x], 966 FIL_STANDARD, 967 &fsa, 968 sizeof(fsa))) { 969 list = RemoveFromList(list,list[x]); 970 if(!list) 971 break; 972 x--; 973 continue; 974 } 975 if(fsa.attrFile & FILE_DIRECTORY) { 976 isdir++; 977 if(stristr(list[x],":\\OS2\\") || 978 !stricmp(list[x] + 1,":\\OS2")) 979 sysdir++; 980 } 981 else { 982 if(fsa.attrFile & (FILE_HIDDEN | FILE_SYSTEM)) 983 hs++; 984 if(fsa.attrFile & FILE_READONLY) 985 ro++; 986 } 987 } 988 if(!list) 989 break; 990 if(fConfirmDelete || isdir) { 991 memset(&cl,0,sizeof(cl)); 992 cl.size = sizeof(cl); 993 cl.list = list; 994 cl.prompt = prompt; 995 cl.flags |= CHECK_FILES; 996 cl.cmd = SHORT1FROMMP(mp1); 997 sprintf(prompt, 998 GetPString(IDS_DELPROMPT1TEXT), 999 (SHORT1FROMMP(mp1) == IDM_DELETE) ? 1000 NullStr : 1001 GetPString(IDS_PERMANENTLYTEXT), 1002 &"s"[list[1] == NULL]); 1003 if(isdir) { 1004 sprintf(&prompt[strlen(prompt)], 1005 GetPString(IDS_DELPROMPT2TEXT), 1006 isdir, 1007 (isdir > 1) ? 1008 GetPString(IDS_ARETEXT) : 1009 GetPString(IDS_ISTEXT), 1010 (isdir == 1) ? 1011 GetPString(IDS_ATEXT) : 1012 NullStr, 1013 (isdir > 1) ? 1014 GetPString(IDS_IESTEXT) : 1015 GetPString(IDS_YTEXT)); 1016 if(sysdir) 1017 sprintf(&prompt[strlen(prompt)], 1018 GetPString(IDS_DELPROMPT3TEXT), 1019 sysdir, 1020 (sysdir == 1) ? 1021 GetPString(IDS_YTEXT) : 1022 GetPString(IDS_IESTEXT)); 1023 } 1024 if(ro) 1025 sprintf(&prompt[strlen(prompt)], 1026 GetPString(IDS_DELPROMPT4TEXT), 1027 ro, 1028 &"s"[ro == 1], 1029 (ro > 1) ? 1030 GetPString(IDS_ARETEXT) : 1031 GetPString(IDS_ISTEXT)); 1032 if(hs) 1033 sprintf(&prompt[strlen(prompt)], 1034 GetPString(IDS_DELPROMPT5TEXT), 1035 hs, 1036 &"s"[hs == 1], 1037 (hs > 1) ? 1038 GetPString(IDS_ARETEXT) : 1039 GetPString(IDS_ISTEXT)); 1040 if(ro || hs || sysdir) 1041 DosBeep(300,100); 1042 strcat(prompt, 1043 GetPString(IDS_DELPROMPT6TEXT)); 1044 if(!WinDlgBox(HWND_DESKTOP, 1045 WinWindowFromID(hwndFrame,FID_CLIENT), 1046 CheckListProc, 1047 FM3ModHandle, 1048 CHECK_FRAME, 1049 MPFROMP(&cl))) 1050 break; 1051 list = cl.list; 1052 if(!list || !list[0]) 1053 break; 1054 } 1055 for(x = 0;list[x];x++) { 1056 fsa.attrFile = 0; 1057 DosError(FERR_DISABLEHARDERR); 1058 DosQueryPathInfo(list[x], 1059 FIL_STANDARD, 1060 &fsa, 1061 sizeof(fsa)); 1062 if(fsa.attrFile & FILE_DIRECTORY) { 1063 sprintf(prompt, 1064 GetPString(IDS_DELETINGTEXT), 1065 list[x]); 1066 WinSetWindowText(WinWindowFromID(hwndFrame,SEEALL_STATUS), 1067 prompt); 1068 error = (APIRET)wipeallf("%s%s*", 1069 list[x], 1070 (*list[x] && 1071 list[x][strlen(list[x]) - 1] != '\\') ? 1072 "\\" : NullStr); 1073 DosError(FERR_DISABLEHARDERR); 1074 if(!error) 1075 error = DosDeleteDir(list[x]); 1076 else 1077 DosDeleteDir(list[x]); 1078 } 1079 else { 1080 DosError(FERR_DISABLEHARDERR); 1081 if(SHORT1FROMMP(mp1) == IDM_DELETE) 1082 error = DosDelete(list[x]); 1083 else 1084 error = DosForceDelete(list[x]); 1085 if(error) { 1086 DosError(FERR_DISABLEHARDERR); 1087 make_deleteable(list[x]); 1088 if(SHORT1FROMMP(mp1) == IDM_DELETE) 1089 error = DosDelete(list[x]); 1090 else 1091 error = DosForceDelete(list[x]); 1092 } 1093 } 1094 if(error) { 1095 if(LogFileHandle) 1096 fprintf(LogFileHandle, 1097 GetPString(IDS_DELETEFAILED1TEXT), 1098 list[x], 1099 error); 1100 if(Dos_Error(MB_ENTERCANCEL, 1101 error, 1102 hwndFrame, 1103 __FILE__, 1104 __LINE__, 1105 GetPString(IDS_DELETEFAILED2TEXT), 1106 list[x]) == 1107 MBID_CANCEL) 1108 break; 1109 } 1110 else 1111 if(LogFileHandle) 1112 fprintf(LogFileHandle, 1113 "%s\n", 1114 GetPString(IDS_DELETEDTEXT), 1115 list[x]); 1116 AddToList(list[x], 1117 &files, 1118 &numfiles, 1119 &numalloc); 1120 } 1121 } 1122 FreeList(list); 1123 break; 1124 1125 case IDM_SAVETOLIST: 1126 if(list) { 1127 WinDlgBox(HWND_DESKTOP, 1128 WinWindowFromID(hwndFrame,FID_CLIENT), 1129 SaveAllListDlgProc, 1130 FM3ModHandle, 1131 SAV_FRAME, 1132 MPFROMP(list)); 1133 FreeList(list); 1134 } 1135 break; 1136 1137 case IDM_SAVETOCLIP: 1138 case IDM_APPENDTOCLIP: 1139 if(list) { 1140 ListToClipboardHab(WinQueryAnchorBlock(hwnd), 1141 list, 1142 (SHORT1FROMMP(mp1) == IDM_APPENDTOCLIP)); 1143 FreeList(list); 1144 } 1145 break; 1146 1147 default: 1148 if(list) 1149 FreeList(list); 1150 break; 1151 } 1152 1153 switch(SHORT1FROMMP(mp1)) { 1154 case IDM_MOVE: 1155 case IDM_COPY: 1156 case IDM_RENAME: 1157 sprintf(message, 1158 GetPString(IDS_OPSCOMPLETETEXT), 1159 (SHORT1FROMMP(mp1) == IDM_MOVE) ? 1160 GetPString(IDS_MOVETEXT) : 1161 (SHORT1FROMMP(mp1) == IDM_COPY) ? 1162 GetPString(IDS_COPYTEXT) : 1163 (SHORT1FROMMP(mp1) == IDM_WPSMOVE) ? 1164 GetPString(IDS_WPSMOVETEXT) : 1165 (SHORT1FROMMP(mp1) == IDM_WPSCOPY) ? 1166 GetPString(IDS_WPSCOPYTEXT) : 1167 GetPString(IDS_RENAMETEXT), 1168 &"s"[x == 1], 1169 (SHORT1FROMMP(mp1) == IDM_MOVE || 1170 SHORT1FROMMP(mp1) == IDM_COPY || 1171 SHORT1FROMMP(mp1) == IDM_WPSMOVE || 1172 SHORT1FROMMP(mp1) == IDM_WPSCOPY) ? 1173 GetPString(IDS_TOTEXT) : 1174 NullStr, 1175 (SHORT1FROMMP(mp1) == IDM_MOVE || 1176 SHORT1FROMMP(mp1) == IDM_COPY || 1177 SHORT1FROMMP(mp1) == IDM_WPSMOVE || 1178 SHORT1FROMMP(mp1) == IDM_WPSCOPY) ? 1179 path : 1180 NullStr, 1181 (x != 1) ? 1182 GetPString(IDS_ARETEXT) : 1183 GetPString(IDS_ISTEXT)); 1184 WinSetWindowText(WinWindowFromID(hwndFrame,SEEALL_STATUS), 1185 message); 1186 if(toupper(*path) < 'C') 1187 DosBeep(1000,25); 1188 DosSleep(33L); 1189 break; 1190 1191 default: 1192 break; 1193 } 1192 1194 Abort: 1193 if(files) {1194 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),1195 UM_UPDATERECORDLIST,1196 MPFROMP(files),1197 MPVOID))1198 FreeList(files);1199 }1200 PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),1201 UM_RESCAN,1202 MPVOID,1203 MPVOID);1195 if(files) { 1196 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 1197 UM_UPDATERECORDLIST, 1198 MPFROMP(files), 1199 MPVOID)) 1200 FreeList(files); 1201 } 1202 PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 1203 UM_RESCAN, 1204 MPVOID, 1205 MPVOID); 1204 1206 } 1205 1207 return 0; … … 1211 1213 case WM_DESTROY: 1212 1214 if(!PostMsg((HWND)0, 1213 WM_QUIT,1214 MPVOID,1215 MPVOID))1216 WinSendMsg((HWND)0,1217 WM_QUIT,1218 MPVOID,1219 MPVOID);1215 WM_QUIT, 1216 MPVOID, 1217 MPVOID)) 1218 WinSendMsg((HWND)0, 1219 WM_QUIT, 1220 MPVOID, 1221 MPVOID); 1220 1222 break; 1221 1223 } … … 1237 1239 hmq2 = WinCreateMsgQueue(hab2,256); 1238 1240 if(hmq2) { 1239 DosError(FERR_DISABLEHARDERR);1240 WinRegisterClass(hab2,1241 GetPString(IDS_WCOBJECTWINDOW),1242 SeeObjWndProc,1243 0,1244 sizeof(PVOID));1245 hwndObj = WinCreateWindow(HWND_OBJECT,1246 GetPString(IDS_WCOBJECTWINDOW),1247 (PSZ)NULL,1248 0,1249 0L,1250 0L,1251 0L,1252 0L,1253 0L,1254 HWND_TOP,1255 SEEALL_OBJ,1256 NULL,1257 NULL);1258 if(hwndObj) {1259 ad->hwndObj = hwndObj;1260 WinSetWindowULong(hwndObj,0,ad->hwndFrame);1261 priority_normal();1262 while(WinGetMsg(hab2,&qmsg2,(HWND)0,0,0))1263 WinDispatchMsg(hab2,&qmsg2);1264 WinDestroyWindow(hwndObj);1265 }1266 else {1267 if(!PostMsg(ad->hwndClient,WM_CLOSE,MPVOID,MPVOID))1268 WinSendMsg(ad->hwndClient,WM_CLOSE,MPVOID,MPVOID);1269 }1270 WinDestroyMsgQueue(hmq2);1241 DosError(FERR_DISABLEHARDERR); 1242 WinRegisterClass(hab2, 1243 GetPString(IDS_WCOBJECTWINDOW), 1244 SeeObjWndProc, 1245 0, 1246 sizeof(PVOID)); 1247 hwndObj = WinCreateWindow(HWND_OBJECT, 1248 GetPString(IDS_WCOBJECTWINDOW), 1249 (PSZ)NULL, 1250 0, 1251 0L, 1252 0L, 1253 0L, 1254 0L, 1255 0L, 1256 HWND_TOP, 1257 SEEALL_OBJ, 1258 NULL, 1259 NULL); 1260 if(hwndObj) { 1261 ad->hwndObj = hwndObj; 1262 WinSetWindowULong(hwndObj,0,ad->hwndFrame); 1263 priority_normal(); 1264 while(WinGetMsg(hab2,&qmsg2,(HWND)0,0,0)) 1265 WinDispatchMsg(hab2,&qmsg2); 1266 WinDestroyWindow(hwndObj); 1267 } 1268 else { 1269 if(!PostMsg(ad->hwndClient,WM_CLOSE,MPVOID,MPVOID)) 1270 WinSendMsg(ad->hwndClient,WM_CLOSE,MPVOID,MPVOID); 1271 } 1272 WinDestroyMsgQueue(hmq2); 1271 1273 } 1272 1274 else 1273 WinTerminate(hab2);1275 WinTerminate(hab2); 1274 1276 } 1275 1277 } … … 1277 1279 1278 1280 1279 static VOID SelectMask (HWND hwnd,BOOL deselect) {1280 1281 static VOID SelectMask (HWND hwnd,BOOL deselect) 1282 { 1281 1283 MASK mask; 1282 1284 register ULONG x,y,z; 1285 ULONG ul; 1283 1286 BOOL ret; 1284 ALLDATA * ad= WinQueryWindowPtr(hwnd,0);1285 1286 memset(&mask,0,sizeof( MASK));1287 ALLDATA *pAD = WinQueryWindowPtr(hwnd,0); 1288 1289 memset(&mask,0,sizeof(mask)); 1287 1290 mask.fNoAttribs = FALSE; 1288 1291 mask.fNoDirs = TRUE; 1289 mask.attrFile = ad->mask.attrFile;1290 mask.antiattr = ad->mask.antiattr;1292 mask.attrFile = pAD->mask.attrFile; 1293 mask.antiattr = pAD->mask.antiattr; 1291 1294 mask.fIsSeeAll = TRUE; 1292 1295 strcpy(mask.prompt, 1293 GetPString((!deselect) ?1294 IDS_SELECTFILTERTEXT :1295 IDS_DESELECTFILTERTEXT));1296 if (WinDlgBox(HWND_DESKTOP,1297 hwnd,1298 PickMaskDlgProc,1299 FM3ModHandle,1300 MSK_FRAME,1301 MPFROMP(&mask)) &&1296 GetPString((!deselect) ? 1297 IDS_SELECTFILTERTEXT : 1298 IDS_DESELECTFILTERTEXT)); 1299 if (WinDlgBox(HWND_DESKTOP, 1300 hwnd, 1301 PickMaskDlgProc, 1302 FM3ModHandle, 1303 MSK_FRAME, 1304 MPFROMP(&mask)) && 1302 1305 (*mask.szMask || 1303 mask.attrFile != ad->mask.attrFile ||1304 mask.antiattr != ad->mask.antiattr)) {1305 for (x = 0;x < ad->afifiles;x++) {1306 y = ( ad->invertsort) ? (ad->afifiles - 1) - x : x;1306 mask.attrFile != pAD->mask.attrFile || 1307 mask.antiattr != pAD->mask.antiattr)) { 1308 for (x = 0;x < pAD->afifiles;x++) { 1309 y = (pAD->invertsort) ? (pAD->afifiles - 1) - x : x; 1307 1310 ret = FALSE; 1308 if (mask.pszMasks[1]) {1309 for(z = 0;mask.pszMasks[z];z++) {1310 if(*mask.pszMasks[z]) {1311 if(*mask.pszMasks[z] != '/') {1312 if(wildcard((strchr(mask.pszMasks[z],'\\') ||1313 strchr(mask.pszMasks[z],':')) ?1314 ad->afindex[y]->fullname : ad->afindex[y]->filename,1315 mask.pszMasks[z],FALSE))1316 ret = TRUE;1317 }1318 else {1319 if(wildcard((strchr(mask.pszMasks[z],'\\') ||1320 strchr(mask.pszMasks[z],':')) ?1321 ad->afindex[y]->fullname : ad->afindex[y]->filename,1322 mask.pszMasks[y] + 1,FALSE)) {1323 ret = FALSE;1324 break;1325 }1326 }1327 }1328 }1329 } 1330 else if (*mask.szMask) {1331 if(wildcard((strchr(mask.szMask,'\\') ||1332 strchr(mask.szMask,':')) ?1333 ad->afindex[y]->fullname : ad->afindex[y]->filename,1334 mask.szMask,FALSE))1335 ret = TRUE;1311 if (mask.pszMasks[1]) { 1312 for(z = 0;mask.pszMasks[z];z++) { 1313 if (*mask.pszMasks[z]) { 1314 if (*mask.pszMasks[z] != '/') { 1315 if (wildcard((strchr(mask.pszMasks[z],'\\') || 1316 strchr(mask.pszMasks[z],':')) ? 1317 pAD->afindex[y]->fullname : pAD->afindex[y]->filename, 1318 mask.pszMasks[z],FALSE)) 1319 ret = TRUE; 1320 } 1321 else { 1322 if (wildcard((strchr(mask.pszMasks[z],'\\') || 1323 strchr(mask.pszMasks[z],':')) ? 1324 pAD->afindex[y]->fullname : pAD->afindex[y]->filename, 1325 mask.pszMasks[y] + 1,FALSE)) { 1326 ret = FALSE; 1327 break; 1328 } 1329 } 1330 } 1331 } 1332 } 1333 else if (*mask.szMask) { 1334 if (wildcard((strchr(mask.szMask,'\\') || 1335 strchr(mask.szMask,':')) ? 1336 pAD->afindex[y]->fullname : pAD->afindex[y]->filename, 1337 mask.szMask,FALSE)) 1338 ret = TRUE; 1336 1339 } 1337 1340 else 1338 ret = TRUE; 1339 if(ret) { 1340 if((!(mask.attrFile & FILE_HIDDEN) && (ad->afindex[y]->attrFile & FILE_HIDDEN)) || 1341 (!(mask.attrFile & FILE_SYSTEM) && (ad->afindex[y]->attrFile & FILE_SYSTEM)) || 1342 (!(mask.attrFile & FILE_READONLY) && (ad->afindex[y]->attrFile & FILE_READONLY)) || 1343 (!(mask.attrFile & FILE_ARCHIVED) && (ad->afindex[y]->attrFile & FILE_ARCHIVED))) 1344 ret = FALSE; 1345 else if(((mask.antiattr & FILE_HIDDEN) && !(ad->afindex[y]->attrFile & FILE_HIDDEN)) || 1346 ((mask.antiattr & FILE_SYSTEM) && !(ad->afindex[y]->attrFile & FILE_SYSTEM)) || 1347 ((mask.antiattr & FILE_READONLY) && !(ad->afindex[y]->attrFile & FILE_READONLY)) || 1348 ((mask.antiattr & FILE_ARCHIVED) && !(ad->afindex[y]->attrFile & FILE_ARCHIVED))) 1349 ret = FALSE; 1350 } 1351 if(ret) { 1352 if(deselect) { 1353 if(ad->afindex[y]->flags & AF_SELECTED) { 1354 ad->selected--; 1355 ad->selbytes -= ad->afindex[y]->cbFile; 1356 } 1357 ad->afindex[y]->flags &= (~AF_SELECTED); 1358 } 1359 else { 1360 if(!(ad->afindex[y]->flags & AF_SELECTED)) { 1361 ad->selected++; 1362 ad->selbytes += ad->afindex[y]->cbFile; 1363 } 1364 ad->afindex[y]->flags |= AF_SELECTED; 1365 } 1366 } 1367 } 1341 ret = TRUE; 1342 if (ret) { 1343 if ((!(mask.attrFile & FILE_HIDDEN) && (pAD->afindex[y]->attrFile & FILE_HIDDEN)) || 1344 (!(mask.attrFile & FILE_SYSTEM) && (pAD->afindex[y]->attrFile & FILE_SYSTEM)) || 1345 (!(mask.attrFile & FILE_READONLY) && (pAD->afindex[y]->attrFile & FILE_READONLY)) || 1346 (!(mask.attrFile & FILE_ARCHIVED) && (pAD->afindex[y]->attrFile & FILE_ARCHIVED))) 1347 ret = FALSE; 1348 else if (((mask.antiattr & FILE_HIDDEN) && !(pAD->afindex[y]->attrFile & FILE_HIDDEN)) || 1349 ((mask.antiattr & FILE_SYSTEM) && !(pAD->afindex[y]->attrFile & FILE_SYSTEM)) || 1350 ((mask.antiattr & FILE_READONLY) && !(pAD->afindex[y]->attrFile & FILE_READONLY)) || 1351 ((mask.antiattr & FILE_ARCHIVED) && !(pAD->afindex[y]->attrFile & FILE_ARCHIVED))) 1352 ret = FALSE; 1353 } 1354 if (ret) { 1355 if (deselect) { 1356 if (pAD->afindex[y]->flags & AF_SELECTED) { 1357 pAD->selected--; 1358 ul = pAD->afindex[y]->cbFile; 1359 pAD->ulSelectedKB -= ul >> 10; 1360 pAD->ulSelectedBytes -= ul & 0x3ff; 1361 pAD->afindex[y]->flags &= ~AF_SELECTED; 1362 } 1363 } 1364 else { 1365 if (~pAD->afindex[y]->flags & AF_SELECTED) { 1366 pAD->selected++; 1367 ul = pAD->afindex[y]->cbFile; 1368 pAD->ulSelectedKB += ul >> 10; 1369 pAD->ulSelectedBytes += ul & 0x3ff; 1370 pAD->afindex[y]->flags |= AF_SELECTED; 1371 } 1372 } 1373 } 1374 } // for 1368 1375 } 1369 1376 } … … 1379 1386 1380 1387 if(!fAutoTile) 1381 GetNextWindowPos(hwndMain,&swp,NULL,NULL);1388 GetNextWindowPos(hwndMain,&swp,NULL,NULL); 1382 1389 hwndC = StartCollector(hwndMain,4); 1383 1390 if(hwndC) { 1384 if(!fAutoTile)1385 WinSetWindowPos(hwndC,HWND_TOP,swp.x,swp.y,1386 swp.cx,swp.cy,SWP_MOVE | SWP_SIZE |1387 SWP_SHOW | SWP_ZORDER);1388 else1389 TileChildren(hwndMain,TRUE);1390 WinSetWindowPos(hwndC,HWND_TOP,0,0,0,0,SWP_ACTIVATE);1391 DosSleep(250L);1391 if(!fAutoTile) 1392 WinSetWindowPos(hwndC,HWND_TOP,swp.x,swp.y, 1393 swp.cx,swp.cy,SWP_MOVE | SWP_SIZE | 1394 SWP_SHOW | SWP_ZORDER); 1395 else 1396 TileChildren(hwndMain,TRUE); 1397 WinSetWindowPos(hwndC,HWND_TOP,0,0,0,0,SWP_ACTIVATE); 1398 DosSleep(250L); 1392 1399 } 1393 1400 } … … 1398 1405 } 1399 1406 if(!PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_COLLECTOR,0), 1400 MPFROMP(list)))1407 MPFROMP(list))) 1401 1408 FreeList(list); 1402 1409 } … … 1411 1418 for(x = 0L;x < ad->affiles;x++) { 1412 1419 if(ad->afhead[x].fullname) 1413 free(ad->afhead[x].fullname);1420 free(ad->afhead[x].fullname); 1414 1421 } 1415 1422 free(ad->afhead); … … 1436 1443 y = (ad->invertsort) ? (ad->afifiles - 1) - x : x; 1437 1444 if(ad->afindex[y]->flags & AF_SELECTED) { 1438 error = AddToList(ad->afindex[y]->fullname,&list,1439 &numfiles,&numalloc);1440 if(error)1441 break;1442 z++;1443 if(z >= ad->selected)1444 break;1445 error = AddToList(ad->afindex[y]->fullname,&list, 1446 &numfiles,&numalloc); 1447 if(error) 1448 break; 1449 z++; 1450 if(z >= ad->selected) 1451 break; 1445 1452 } 1446 1453 } … … 1450 1457 1451 1458 1452 static BOOL Mark (HWND hwnd,INT command,CHAR **list) {1453 1459 static BOOL Mark (HWND hwnd,INT command,CHAR **list) 1460 { 1454 1461 /* Marks only unfiltered files */ 1455 1462 1456 ALLDATA * ad= WinQueryWindowPtr(hwnd,0);1463 ALLDATA *pAD = WinQueryWindowPtr(hwnd,0); 1457 1464 register ULONG x,y,z; 1458 BOOL ret = TRUE,didone = FALSE; 1459 1460 for(x = 0;x < ad->afifiles;x++) { 1461 y = (ad->invertsort) ? (ad->afifiles - 1) - x : x; 1465 ULONG ul; 1466 BOOL ret = TRUE; 1467 BOOL didone = FALSE; 1468 1469 for(x = 0;x < pAD->afifiles;x++) { 1470 y = (pAD->invertsort) ? (pAD->afifiles - 1) - x : x; 1462 1471 if(list) { 1463 1472 ret = FALSE; 1464 1473 for(z = 0;list[z];z++) { 1465 if(!stricmp(list[z],ad->afindex[y]->fullname)) {1466 ret = TRUE;1467 break;1468 }1474 if(!stricmp(list[z],pAD->afindex[y]->fullname)) { 1475 ret = TRUE; 1476 break; 1477 } 1469 1478 } 1470 1479 } 1471 1480 if(ret) { 1472 1481 didone = TRUE; 1473 if(command == AFM_UNMARK) { 1474 if(ad->afindex[y]->flags & AF_SELECTED) { 1475 ad->selected--; 1476 ad->selbytes -= ad->afindex[y]->cbFile; 1477 } 1478 ad->afindex[y]->flags &= (~AF_SELECTED); 1479 } 1480 else if(command == AFM_MARK) { 1481 if(!(ad->afindex[y]->flags & AF_SELECTED)) { 1482 ad->selected++; 1483 ad->selbytes += ad->afindex[y]->cbFile; 1484 } 1485 ad->afindex[y]->flags |= AF_SELECTED; 1486 } 1487 else if(command == AFM_INVERT) { 1488 if(ad->afindex[y]->flags & AF_SELECTED) { 1489 ad->selected--; 1490 ad->selbytes -= ad->afindex[y]->cbFile; 1491 ad->afindex[y]->flags &= (~AF_SELECTED); 1492 } 1493 else { 1494 ad->selected++; 1495 ad->selbytes += ad->afindex[y]->cbFile; 1496 ad->afindex[y]->flags |= AF_SELECTED; 1497 } 1498 } 1499 else if(command == AFM_MARKDELETED) { 1500 if(ad->afindex[y]->flags & AF_SELECTED) 1501 ad->afindex[y]->flags |= AF_DELETED; 1482 if (command == AFM_UNMARK) { 1483 if (pAD->afindex[y]->flags & AF_SELECTED) { 1484 pAD->selected--; 1485 ul = pAD->afindex[y]->cbFile; 1486 pAD->ulSelectedKB -= ul >> 10; 1487 pAD->ulSelectedBytes -= ul & 0x3ff; 1488 pAD->afindex[y]->flags &= ~AF_SELECTED; 1489 } 1490 } 1491 else if (command == AFM_MARK) { 1492 if (~pAD->afindex[y]->flags & AF_SELECTED) { 1493 pAD->selected++; 1494 ul = pAD->afindex[y]->cbFile; 1495 pAD->ulSelectedKB += ul >> 10;; 1496 pAD->ulSelectedBytes += ul & 0x3ff; 1497 pAD->afindex[y]->flags |= AF_SELECTED; 1498 } 1499 } 1500 else if (command == AFM_INVERT) { 1501 if (pAD->afindex[y]->flags & AF_SELECTED) { 1502 pAD->selected--; 1503 ul = pAD->afindex[y]->cbFile; 1504 pAD->ulSelectedKB -= ul >> 10; 1505 pAD->ulSelectedBytes -= ul & 0x3ff; 1506 pAD->afindex[y]->flags &= ~AF_SELECTED; 1507 } 1508 else { 1509 pAD->selected++; 1510 ul = pAD->afindex[y]->cbFile; 1511 pAD->ulSelectedKB += ul >> 10; 1512 pAD->ulSelectedBytes += ul & 0x3ff; 1513 pAD->afindex[y]->flags |= AF_SELECTED; 1514 } 1515 } 1516 else if (command == AFM_MARKDELETED) { 1517 if(pAD->afindex[y]->flags & AF_SELECTED) 1518 pAD->afindex[y]->flags |= AF_DELETED; 1502 1519 } 1503 1520 else if(command == AFM_FILTER) { 1504 if(ad->afindex[y]->flags & AF_SELECTED)1505 ad->afindex[y]->flags |= AF_FILTERED;1521 if (pAD->afindex[y]->flags & AF_SELECTED) 1522 pAD->afindex[y]->flags |= AF_FILTERED; 1506 1523 } 1507 1524 } 1508 } 1525 } // for x 1509 1526 return didone; 1510 1527 } 1511 1528 1512 1529 1513 static BOOL MarkList (HWND hwnd,INT command,CHAR **list) {1514 1530 static BOOL MarkList (HWND hwnd,INT command,CHAR **list) 1531 { 1515 1532 /* Marks files whether filtered or not */ 1516 1533 1517 ALLDATA * ad= WinQueryWindowPtr(hwnd,0);1534 ALLDATA *pAD = WinQueryWindowPtr(hwnd,0); 1518 1535 register ULONG x,z; 1519 BOOL ret = TRUE,didone = FALSE; 1520 1521 for(x = 0;x < ad->affiles;x++) { 1536 ULONG ul; 1537 BOOL ret = TRUE; 1538 BOOL didone = FALSE; 1539 1540 for(x = 0;x < pAD->affiles;x++) { 1522 1541 if(list) { 1523 1542 ret = FALSE; 1524 1543 for(z = 0;list[z];z++) { 1525 if(!stricmp(list[z],ad->afhead[x].fullname)) {1526 ret = TRUE;1527 break;1528 }1544 if(!stricmp(list[z],pAD->afhead[x].fullname)) { 1545 ret = TRUE; 1546 break; 1547 } 1529 1548 } 1530 1549 } 1531 1550 if(ret) { 1532 1551 didone = TRUE; 1533 if(command == AFM_UNMARK) { 1534 if(ad->afhead[x].flags & AF_SELECTED) { 1535 ad->selected--; 1536 ad->selbytes -= ad->afhead[x].cbFile; 1537 } 1538 ad->afhead[x].flags &= (~AF_SELECTED); 1539 } 1540 else if(command == AFM_MARK) { 1541 if(!(ad->afhead[x].flags & AF_SELECTED)) { 1542 ad->selected++; 1543 ad->selbytes += ad->afhead[x].cbFile; 1544 } 1545 ad->afhead[x].flags |= AF_SELECTED; 1546 } 1547 else if(command == AFM_INVERT) { 1548 if(ad->afhead[x].flags & AF_SELECTED) { 1549 ad->selected--; 1550 ad->selbytes -= ad->afhead[x].cbFile; 1551 ad->afhead[x].flags &= (~AF_SELECTED); 1552 } 1553 else { 1554 ad->selected++; 1555 ad->selbytes += ad->afhead[x].cbFile; 1556 ad->afhead[x].flags |= AF_SELECTED; 1557 } 1558 } 1559 else if(command == AFM_MARKDELETED) { 1560 if(ad->afhead[x].flags & AF_SELECTED) 1561 ad->afhead[x].flags |= AF_DELETED; 1562 } 1563 else if(command == AFM_FILTER) { 1564 if(ad->afhead[x].flags & AF_SELECTED) 1565 ad->afhead[x].flags |= AF_FILTERED; 1552 if (command == AFM_UNMARK) { 1553 if (pAD->afhead[x].flags & AF_SELECTED) { 1554 pAD->selected--; 1555 ul = pAD->afhead[x].cbFile; 1556 pAD->ulSelectedKB -= ul >> 10; 1557 pAD->ulSelectedBytes -= ul & 0x3ff; 1558 pAD->afhead[x].flags &= ~AF_SELECTED; 1559 } 1560 } 1561 else if (command == AFM_MARK) { 1562 if (~pAD->afhead[x].flags & AF_SELECTED) { 1563 pAD->selected++; 1564 ul = pAD->afhead[x].cbFile; 1565 pAD->ulSelectedKB += ul >> 10; 1566 pAD->ulSelectedBytes += ul & 0x3ff; 1567 pAD->afhead[x].flags |= AF_SELECTED; 1568 } 1569 } 1570 else if (command == AFM_INVERT) { 1571 if (pAD->afhead[x].flags & AF_SELECTED) { 1572 pAD->selected--; 1573 ul = pAD->afhead[x].cbFile; 1574 pAD->ulSelectedKB -= ul >> 10; 1575 pAD->ulSelectedBytes -= ul & 0x3ff; 1576 pAD->afhead[x].flags &= ~AF_SELECTED; 1577 } 1578 else { 1579 pAD->selected++; 1580 ul = pAD->afhead[x].cbFile; 1581 pAD->ulSelectedKB += ul >> 10; 1582 pAD->ulSelectedBytes += ul & 0x3ff; 1583 pAD->afhead[x].flags |= AF_SELECTED; 1584 } 1585 } 1586 else if (command == AFM_MARKDELETED) { 1587 if (pAD->afhead[x].flags & AF_SELECTED) 1588 pAD->afhead[x].flags |= AF_DELETED; 1589 } 1590 else if (command == AFM_FILTER) { 1591 if (pAD->afhead[x].flags & AF_SELECTED) 1592 pAD->afhead[x].flags |= AF_FILTERED; 1566 1593 } 1567 1594 } 1568 } 1595 } // for x 1569 1596 return didone; 1570 1597 } … … 1587 1614 ret = FALSE; 1588 1615 for(x = 0;x < ad->affiles;x++) { 1589 if(!stricmp(list[z],ad->afhead[x].fullname)) {1590 ret = TRUE;1591 break;1592 }1616 if(!stricmp(list[z],ad->afhead[x].fullname)) { 1617 ret = TRUE; 1618 break; 1619 } 1593 1620 } 1594 1621 if(ret) { 1595 didone = TRUE;1596 hdir = HDIR_CREATE;1597 nm = 1L;1598 if(!DosFindFirst(list[z],&hdir,FILE_NORMAL | FILE_ARCHIVED |1599 FILE_DIRECTORY | FILE_READONLY | FILE_SYSTEM |1600 FILE_HIDDEN,&ffb,sizeof(ffb),&nm,FIL_STANDARD)) {1601 DosFindClose(hdir);1602 if(!(ffb.attrFile & FILE_DIRECTORY)) {1603 ad->afhead[x].attrFile = (USHORT)ffb.attrFile;1604 ad->afhead[x].cbFile = ffb.cbFile;1605 ad->afhead[x].date = ffb.fdateLastWrite;1606 ad->afhead[x].time = ffb.ftimeLastWrite;1607 }1608 else1609 ad->afhead[x].flags |= AF_DELETED;1610 }1611 else1612 ad->afhead[x].flags |= AF_DELETED;1622 didone = TRUE; 1623 hdir = HDIR_CREATE; 1624 nm = 1L; 1625 if(!DosFindFirst(list[z],&hdir,FILE_NORMAL | FILE_ARCHIVED | 1626 FILE_DIRECTORY | FILE_READONLY | FILE_SYSTEM | 1627 FILE_HIDDEN,&ffb,sizeof(ffb),&nm,FIL_STANDARD)) { 1628 DosFindClose(hdir); 1629 if(!(ffb.attrFile & FILE_DIRECTORY)) { 1630 ad->afhead[x].attrFile = (USHORT)ffb.attrFile; 1631 ad->afhead[x].cbFile = ffb.cbFile; 1632 ad->afhead[x].date = ffb.fdateLastWrite; 1633 ad->afhead[x].time = ffb.ftimeLastWrite; 1634 } 1635 else 1636 ad->afhead[x].flags |= AF_DELETED; 1637 } 1638 else 1639 ad->afhead[x].flags |= AF_DELETED; 1613 1640 } 1614 1641 else if(isalpha(*list[z]) && ad->drvsflags[toupper(*list[z]) - 'A']) { 1615 didone = TRUE;1616 hdir = HDIR_CREATE;1617 nm = 1L;1618 if(!DosFindFirst(list[z],&hdir,FILE_NORMAL | FILE_ARCHIVED |1619 FILE_DIRECTORY | FILE_READONLY | FILE_SYSTEM |1620 FILE_HIDDEN,&ffb,sizeof(ffb),&nm,FIL_STANDARD)) {1621 DosFindClose(hdir);1622 if(!(ffb.attrFile & FILE_DIRECTORY)) {1623 if(!ad->afalloc || ad->affiles > ad->afalloc - 1) {1624 1625 ALLFILES *temp,**templ;1626 1627 temp = realloc(ad->afhead,(ad->afalloc + 1) *1628 sizeof(ALLFILES));1629 if(temp) {1630 ad->afhead = temp;1631 templ = realloc(ad->afindex,(ad->afalloc + 1) *1632 sizeof(ALLFILES *));1633 if(templ)1634 ad->afindex = templ;1635 else {1642 didone = TRUE; 1643 hdir = HDIR_CREATE; 1644 nm = 1L; 1645 if(!DosFindFirst(list[z],&hdir,FILE_NORMAL | FILE_ARCHIVED | 1646 FILE_DIRECTORY | FILE_READONLY | FILE_SYSTEM | 1647 FILE_HIDDEN,&ffb,sizeof(ffb),&nm,FIL_STANDARD)) { 1648 DosFindClose(hdir); 1649 if(!(ffb.attrFile & FILE_DIRECTORY)) { 1650 if(!ad->afalloc || ad->affiles > ad->afalloc - 1) { 1651 1652 ALLFILES *temp,**templ; 1653 1654 temp = realloc(ad->afhead,(ad->afalloc + 1) * 1655 sizeof(ALLFILES)); 1656 if(temp) { 1657 ad->afhead = temp; 1658 templ = realloc(ad->afindex,(ad->afalloc + 1) * 1659 sizeof(ALLFILES *)); 1660 if(templ) 1661 ad->afindex = templ; 1662 else { 1636 1663 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Realloc failed."); 1637 ad->stopflag = 1;1638 break;1639 }1640 ad->afalloc++;1641 }1642 else {1664 ad->stopflag = 1; 1665 break; 1666 } 1667 ad->afalloc++; 1668 } 1669 else { 1643 1670 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Realloc failed."); 1644 ad->stopflag = 1;1645 break;1646 }1647 }1648 ad->afhead[ad->affiles].fullname = strdup(list[z]);1649 if(ad->afhead[ad->affiles].fullname) {1650 p = strrchr(ad->afhead[ad->affiles].fullname,'\\');1651 if(!p)1652 p = ad->afhead[ad->affiles].fullname;1653 else1654 p++;1655 ad->afhead[ad->affiles].filename = p;1656 ad->afhead[ad->affiles].cbFile = ffb.cbFile;1657 ad->afhead[ad->affiles].date = ffb.fdateLastWrite;1658 ad->afhead[ad->affiles].time = ffb.ftimeLastWrite;1659 ad->afhead[ad->affiles].attrFile = (USHORT)ffb.attrFile;1660 ad->afhead[ad->affiles].flags = 0;1661 if(ad->longest < strlen(ad->afhead[ad->affiles].filename))1662 ad->longest = strlen(ad->afhead[ad->affiles].filename);1663 if(ad->longestw < strlen(ad->afhead[ad->affiles].fullname))1664 ad->longestw = strlen(ad->afhead[ad->affiles].fullname);1665 1666 ad->affiles++;1667 }1668 else {1671 ad->stopflag = 1; 1672 break; 1673 } 1674 } 1675 ad->afhead[ad->affiles].fullname = strdup(list[z]); 1676 if(ad->afhead[ad->affiles].fullname) { 1677 p = strrchr(ad->afhead[ad->affiles].fullname,'\\'); 1678 if(!p) 1679 p = ad->afhead[ad->affiles].fullname; 1680 else 1681 p++; 1682 ad->afhead[ad->affiles].filename = p; 1683 ad->afhead[ad->affiles].cbFile = ffb.cbFile; 1684 ad->afhead[ad->affiles].date = ffb.fdateLastWrite; 1685 ad->afhead[ad->affiles].time = ffb.ftimeLastWrite; 1686 ad->afhead[ad->affiles].attrFile = (USHORT)ffb.attrFile; 1687 ad->afhead[ad->affiles].flags = 0; 1688 if(ad->longest < strlen(ad->afhead[ad->affiles].filename)) 1689 ad->longest = strlen(ad->afhead[ad->affiles].filename); 1690 if(ad->longestw < strlen(ad->afhead[ad->affiles].fullname)) 1691 ad->longestw = strlen(ad->afhead[ad->affiles].fullname); 1692 1693 ad->affiles++; 1694 } 1695 else { 1669 1696 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Strdup failed."); 1670 ad->stopflag = 1;1671 break;1672 }1673 }1674 }1697 ad->stopflag = 1; 1698 break; 1699 } 1700 } 1701 } 1675 1702 } 1676 1703 } … … 1748 1775 1749 1776 ret = (d1->date.year > d2->date.year) ? 1 : 1750 (d1->date.year < d2->date.year) ? -1 :1751 (d1->date.month > d2->date.month) ? 1 :1752 (d1->date.month < d2->date.month) ? -1 :1753 (d1->date.day > d2->date.day) ? 1 :1754 (d1->date.day < d2->date.day) ? -1 :1755 (d1->time.hours > d2->time.hours) ? 1 :1756 (d1->time.hours < d2->time.hours) ? -1 :1757 (d1->time.minutes > d2->time.minutes) ? 1 :1758 (d1->time.minutes < d2->time.minutes) ? -1 :1759 (d1->time.twosecs > d2->time.twosecs) ? 1 :1760 (d1->time.twosecs < d2->time.twosecs) ? -1 : 0;1777 (d1->date.year < d2->date.year) ? -1 : 1778 (d1->date.month > d2->date.month) ? 1 : 1779 (d1->date.month < d2->date.month) ? -1 : 1780 (d1->date.day > d2->date.day) ? 1 : 1781 (d1->date.day < d2->date.day) ? -1 : 1782 (d1->time.hours > d2->time.hours) ? 1 : 1783 (d1->time.hours < d2->time.hours) ? -1 : 1784 (d1->time.minutes > d2->time.minutes) ? 1 : 1785 (d1->time.minutes < d2->time.minutes) ? -1 : 1786 (d1->time.twosecs > d2->time.twosecs) ? 1 : 1787 (d1->time.twosecs < d2->time.twosecs) ? -1 : 0; 1761 1788 1762 1789 if(!ret) … … 1768 1795 static VOID ReSort (HWND hwnd) { 1769 1796 1770 ALLDATA * ad= WinQueryWindowPtr(hwnd,0);1797 ALLDATA *pAD = WinQueryWindowPtr(hwnd,0); 1771 1798 register ULONG x,y; 1772 1773 ad->selected = ad->selbytes = 0; 1774 for(x = 0,y = 0;x < ad->affiles;x++) { 1775 if(!(ad->afhead[x].flags & (AF_DELETED | AF_FILTERED))) { 1776 if(ad->afhead[x].flags & AF_SELECTED) { 1777 ad->selected++; 1778 ad->selbytes += ad->afhead[x].cbFile; 1779 } 1780 ad->afindex[y++] = &(ad->afhead[x]); 1799 ULONG ul; 1800 1801 pAD->selected = 0; 1802 pAD->ulSelectedKB = 0; 1803 pAD->ulSelectedBytes = 0; 1804 for (x = 0,y = 0;x < pAD->affiles;x++) { 1805 if(!(pAD->afhead[x].flags & (AF_DELETED | AF_FILTERED))) { 1806 if (pAD->afhead[x].flags & AF_SELECTED) { 1807 pAD->selected++; 1808 ul = pAD->afhead[x].cbFile; 1809 pAD->ulSelectedKB += ul >> 10; 1810 pAD->ulSelectedBytes += ul & 0x3ff; 1811 } 1812 pAD->afindex[y++] = &(pAD->afhead[x]); 1781 1813 } 1782 } 1783 ad->afifiles = y;1814 } // for x 1815 pAD->afifiles = y; 1784 1816 PostMsg(hwnd,UM_SETUP3,MPVOID,MPVOID); 1785 if(! ad->stopflag && ad->compare && ad->afifiles) {1817 if(!pAD->stopflag && pAD->compare && pAD->afifiles) { 1786 1818 WinSendMsg(hwnd,UM_RESCAN,MPFROMLONG(1L),MPVOID); 1787 qsort( ad->afindex,ad->afifiles,sizeof(ALLFILES *),ad->compare);1819 qsort(pAD->afindex,pAD->afifiles,sizeof(ALLFILES *),pAD->compare); 1788 1820 } 1789 1821 } … … 1807 1839 hmq2 = WinCreateMsgQueue(hab2,0); 1808 1840 if(hmq2) { 1809 WinCancelShutdown(hmq2,TRUE);1810 if(ad->cursored <= ad->afifiles) {1811 for(x = 0;x < ad->affiles;x++)1812 ad->afhead[x].flags &= (~(AF_DUPE | AF_SELECTED));1813 DosSleep(1L);1814 for(x = 0;x < ad->affiles && !ad->stopflag;x++) {1815 if(!(ad->afhead[x].flags & (AF_DUPE | AF_FILTERED))) {1816 if(!(x % 50)) {1817 sprintf(s,1818 GetPString(IDS_DUPECHECKINGOFTEXT),1819 x,1820 ad->affiles);1821 WinSetWindowText(ad->hwndStatus,s);1822 }1823 for(z = 0;z < ad->affiles && !ad->stopflag;z++) {1824 if(x != z && !(ad->afhead[z].flags & (AF_DUPE | AF_FILTERED))) {1825 if(ad->dupeflags & DP_SIZES) {1826 if(ad->afhead[x].cbFile != ad->afhead[z].cbFile)1827 goto SkipNonDupe;1828 }1829 if(ad->dupeflags & DP_DATES) {1830 if(*(INT *)&ad->afhead[x].date !=1831 *(INT *)&ad->afhead[z].date ||1832 *(INT *)&ad->afhead[x].time !=1833 *(INT *)&ad->afhead[z].time)1834 goto SkipNonDupe;1835 }1836 if(ad->dupeflags & DP_NAMES) {1837 if(ad->dupeflags & DP_EXTS) {1838 px = strrchr(ad->afhead[x].filename,'.');1839 pz = strrchr(ad->afhead[z].filename,'.');1840 if((px || pz) && (!px || !pz))1841 goto SkipNonDupe;1842 if(px) {1843 *px = 0;1844 *pz = 0;1845 }1846 }1847 if(stricmp(ad->afhead[x].filename,1848 ad->afhead[z].filename)) {1849 if(ad->dupeflags & DP_EXTS) {1850 if(px) {1851 *px = '.';1852 *pz = '.';1853 }1854 }1855 goto SkipNonDupe;1856 }1857 if(ad->dupeflags & DP_EXTS) {1858 if(px) {1859 *px = '.';1860 *pz = '.';1861 }1862 }1863 }1864 if(ad->dupeflags & DP_CRCS) {1865 if(!(ad->afhead[x].flags & AF_CRCED)) {1866 ad->afhead[x].CRC = CRCFile(ad->afhead[x].fullname,1867 &error);1868 if(!error)1869 ad->afhead[x].flags |= AF_CRCED;1870 }1871 if(!(ad->afhead[z].flags & AF_CRCED)) {1872 ad->afhead[z].CRC = CRCFile(ad->afhead[z].fullname,1873 &error);1874 if(!error)1875 ad->afhead[z].flags |= AF_CRCED;1876 }1877 if((ad->afhead[x].flags & AF_CRCED) &&1878 (ad->afhead[z].flags & AF_CRCED)) {1879 if(ad->afhead[x].CRC != ad->afhead[z].CRC)1880 goto SkipNonDupe;1881 }1882 DosSleep(0);1883 }1884 ad->afhead[x].flags |= AF_DUPE;1885 ad->afhead[z].flags |= AF_DUPE;1841 WinCancelShutdown(hmq2,TRUE); 1842 if(ad->cursored <= ad->afifiles) { 1843 for(x = 0;x < ad->affiles;x++) 1844 ad->afhead[x].flags &= (~(AF_DUPE | AF_SELECTED)); 1845 DosSleep(1L); 1846 for(x = 0;x < ad->affiles && !ad->stopflag;x++) { 1847 if(!(ad->afhead[x].flags & (AF_DUPE | AF_FILTERED))) { 1848 if(!(x % 50)) { 1849 sprintf(s, 1850 GetPString(IDS_DUPECHECKINGOFTEXT), 1851 x, 1852 ad->affiles); 1853 WinSetWindowText(ad->hwndStatus,s); 1854 } 1855 for(z = 0;z < ad->affiles && !ad->stopflag;z++) { 1856 if(x != z && !(ad->afhead[z].flags & (AF_DUPE | AF_FILTERED))) { 1857 if(ad->dupeflags & DP_SIZES) { 1858 if(ad->afhead[x].cbFile != ad->afhead[z].cbFile) 1859 goto SkipNonDupe; 1860 } 1861 if(ad->dupeflags & DP_DATES) { 1862 if(*(INT *)&ad->afhead[x].date != 1863 *(INT *)&ad->afhead[z].date || 1864 *(INT *)&ad->afhead[x].time != 1865 *(INT *)&ad->afhead[z].time) 1866 goto SkipNonDupe; 1867 } 1868 if(ad->dupeflags & DP_NAMES) { 1869 if(ad->dupeflags & DP_EXTS) { 1870 px = strrchr(ad->afhead[x].filename,'.'); 1871 pz = strrchr(ad->afhead[z].filename,'.'); 1872 if((px || pz) && (!px || !pz)) 1873 goto SkipNonDupe; 1874 if(px) { 1875 *px = 0; 1876 *pz = 0; 1877 } 1878 } 1879 if(stricmp(ad->afhead[x].filename, 1880 ad->afhead[z].filename)) { 1881 if(ad->dupeflags & DP_EXTS) { 1882 if(px) { 1883 *px = '.'; 1884 *pz = '.'; 1885 } 1886 } 1887 goto SkipNonDupe; 1888 } 1889 if(ad->dupeflags & DP_EXTS) { 1890 if(px) { 1891 *px = '.'; 1892 *pz = '.'; 1893 } 1894 } 1895 } 1896 if(ad->dupeflags & DP_CRCS) { 1897 if(!(ad->afhead[x].flags & AF_CRCED)) { 1898 ad->afhead[x].CRC = CRCFile(ad->afhead[x].fullname, 1899 &error); 1900 if(!error) 1901 ad->afhead[x].flags |= AF_CRCED; 1902 } 1903 if(!(ad->afhead[z].flags & AF_CRCED)) { 1904 ad->afhead[z].CRC = CRCFile(ad->afhead[z].fullname, 1905 &error); 1906 if(!error) 1907 ad->afhead[z].flags |= AF_CRCED; 1908 } 1909 if((ad->afhead[x].flags & AF_CRCED) && 1910 (ad->afhead[z].flags & AF_CRCED)) { 1911 if(ad->afhead[x].CRC != ad->afhead[z].CRC) 1912 goto SkipNonDupe; 1913 } 1914 DosSleep(0); 1915 } 1916 ad->afhead[x].flags |= AF_DUPE; 1917 ad->afhead[z].flags |= AF_DUPE; 1886 1918 SkipNonDupe: 1887 1919 ; 1888 }1889 }1890 DosSleep(1L);1891 }1892 }1893 for(x = 0;x < ad->affiles && !ad->stopflag;x++) {1894 if(!(ad->afhead[x].flags & AF_DUPE))1895 ad->afhead[x].flags |= AF_FILTERED;1896 }1897 ReSort(hwnd);1898 WinInvalidateRect(hwnd,NULL,FALSE);1899 }1920 } 1921 } 1922 DosSleep(1L); 1923 } 1924 } 1925 for(x = 0;x < ad->affiles && !ad->stopflag;x++) { 1926 if(!(ad->afhead[x].flags & AF_DUPE)) 1927 ad->afhead[x].flags |= AF_FILTERED; 1928 } 1929 ReSort(hwnd); 1930 WinInvalidateRect(hwnd,NULL,FALSE); 1931 } 1900 1932 } 1901 1933 } … … 1930 1962 ad->mask.fIsSeeAll = TRUE; 1931 1963 if(WinDlgBox(HWND_DESKTOP,hwnd,PickMaskDlgProc, 1932 FM3ModHandle,MSK_FRAME,MPFROMP(&ad->mask))) {1964 FM3ModHandle,MSK_FRAME,MPFROMP(&ad->mask))) { 1933 1965 for(x = 0;x < ad->affiles;x++) { 1934 1966 ret = FALSE; 1935 1967 if(ad->mask.pszMasks[1]) { 1936 for(z = 0;ad->mask.pszMasks[z];z++) {1937 if(*ad->mask.pszMasks[z]) {1938 if(*ad->mask.pszMasks[z] != '/') {1939 if(wildcard((strchr(ad->mask.pszMasks[z],'\\') ||1940 strchr(ad->mask.pszMasks[z],':')) ?1941 ad->afhead[x].fullname : ad->afhead[x].filename,1942 ad->mask.pszMasks[z],FALSE))1943 ret = TRUE;1944 }1945 else {1946 if(wildcard((strchr(ad->mask.pszMasks[z],'\\') ||1947 strchr(ad->mask.pszMasks[z],':')) ?1948 ad->afhead[x].fullname : ad->afhead[x].filename,1949 ad->mask.pszMasks[z] + 1,FALSE)) {1950 ret = FALSE;1951 break;1952 }1953 }1954 }1955 }1968 for(z = 0;ad->mask.pszMasks[z];z++) { 1969 if(*ad->mask.pszMasks[z]) { 1970 if(*ad->mask.pszMasks[z] != '/') { 1971 if(wildcard((strchr(ad->mask.pszMasks[z],'\\') || 1972 strchr(ad->mask.pszMasks[z],':')) ? 1973 ad->afhead[x].fullname : ad->afhead[x].filename, 1974 ad->mask.pszMasks[z],FALSE)) 1975 ret = TRUE; 1976 } 1977 else { 1978 if(wildcard((strchr(ad->mask.pszMasks[z],'\\') || 1979 strchr(ad->mask.pszMasks[z],':')) ? 1980 ad->afhead[x].fullname : ad->afhead[x].filename, 1981 ad->mask.pszMasks[z] + 1,FALSE)) { 1982 ret = FALSE; 1983 break; 1984 } 1985 } 1986 } 1987 } 1956 1988 } 1957 1989 else if(*ad->mask.szMask) { 1958 if(wildcard((strchr(ad->mask.szMask,'\\') ||1959 strchr(ad->mask.szMask,':')) ?1960 ad->afhead[x].fullname : ad->afhead[x].filename,1961 ad->mask.szMask,FALSE))1962 ret = TRUE;1990 if(wildcard((strchr(ad->mask.szMask,'\\') || 1991 strchr(ad->mask.szMask,':')) ? 1992 ad->afhead[x].fullname : ad->afhead[x].filename, 1993 ad->mask.szMask,FALSE)) 1994 ret = TRUE; 1963 1995 } 1964 1996 else 1965 ret = TRUE;1997 ret = TRUE; 1966 1998 1967 1999 if(ret) { 1968 if((!(ad->mask.attrFile & FILE_HIDDEN) && (ad->afhead[x].attrFile & FILE_HIDDEN)) ||1969 (!(ad->mask.attrFile & FILE_SYSTEM) && (ad->afhead[x].attrFile & FILE_SYSTEM)) ||1970 (!(ad->mask.attrFile & FILE_READONLY) && (ad->afhead[x].attrFile & FILE_READONLY)) ||1971 (!(ad->mask.attrFile & FILE_ARCHIVED) && (ad->afhead[x].attrFile & FILE_ARCHIVED)))1972 ret = FALSE;1973 else if(((ad->mask.antiattr & FILE_HIDDEN) && !(ad->afhead[x].attrFile & FILE_HIDDEN)) ||1974 ((ad->mask.antiattr & FILE_SYSTEM) && !(ad->afhead[x].attrFile & FILE_SYSTEM)) ||1975 ((ad->mask.antiattr & FILE_READONLY) && !(ad->afhead[x].attrFile & FILE_READONLY)) ||1976 ((ad->mask.antiattr & FILE_ARCHIVED) && !(ad->afhead[x].attrFile & FILE_ARCHIVED)))1977 ret = FALSE;2000 if((!(ad->mask.attrFile & FILE_HIDDEN) && (ad->afhead[x].attrFile & FILE_HIDDEN)) || 2001 (!(ad->mask.attrFile & FILE_SYSTEM) && (ad->afhead[x].attrFile & FILE_SYSTEM)) || 2002 (!(ad->mask.attrFile & FILE_READONLY) && (ad->afhead[x].attrFile & FILE_READONLY)) || 2003 (!(ad->mask.attrFile & FILE_ARCHIVED) && (ad->afhead[x].attrFile & FILE_ARCHIVED))) 2004 ret = FALSE; 2005 else if(((ad->mask.antiattr & FILE_HIDDEN) && !(ad->afhead[x].attrFile & FILE_HIDDEN)) || 2006 ((ad->mask.antiattr & FILE_SYSTEM) && !(ad->afhead[x].attrFile & FILE_SYSTEM)) || 2007 ((ad->mask.antiattr & FILE_READONLY) && !(ad->afhead[x].attrFile & FILE_READONLY)) || 2008 ((ad->mask.antiattr & FILE_ARCHIVED) && !(ad->afhead[x].attrFile & FILE_ARCHIVED))) 2009 ret = FALSE; 1978 2010 } 1979 2011 1980 2012 if(!ret) 1981 ad->afhead[x].flags |= AF_FILTERED;2013 ad->afhead[x].flags |= AF_FILTERED; 1982 2014 else 1983 ad->afhead[x].flags &= (~AF_FILTERED);2015 ad->afhead[x].flags &= (~AF_FILTERED); 1984 2016 } 1985 2017 ReSort(hwnd); … … 1992 2024 static ULONG RemoveDeleted (HWND hwnd) { 1993 2025 1994 ALLDATA * ad= WinQueryWindowPtr(hwnd,0);1995 ULONG oldaffiles = ad->affiles;2026 ALLDATA *pAD = WinQueryWindowPtr(hwnd,0); 2027 ULONG oldaffiles = pAD->affiles; 1996 2028 register ULONG x,y; 1997 1998 for(x = 0;x < ad->affiles;x++) { 1999 if(ad->afhead[x].flags & AF_DELETED) { 2000 for(y = x;y < ad->affiles;y++) { 2001 if(!(ad->afhead[y].flags & AF_DELETED)) 2002 break; 2003 if((ad->afhead[y].flags & AF_SELECTED) && 2004 !(ad->afhead[y].flags & AF_FILTERED)) { 2005 ad->selected--; 2006 ad->selbytes -= ad->afhead[y].cbFile; 2007 } 2008 free(ad->afhead[y].fullname); 2009 } 2010 memmove(&(ad->afhead[x]),&(ad->afhead[y]), 2011 (ad->affiles - y) * sizeof(ALLFILES)); 2012 ad->affiles -= (y - x); 2029 ULONG ul; 2030 2031 for (x = 0;x < pAD->affiles;x++) { 2032 if (pAD->afhead[x].flags & AF_DELETED) { 2033 for (y = x;y < pAD->affiles;y++) { 2034 if (~pAD->afhead[y].flags & AF_DELETED) 2035 break; 2036 if (pAD->afhead[y].flags & AF_SELECTED && 2037 ~pAD->afhead[y].flags & AF_FILTERED) { 2038 pAD->selected--; 2039 ul = pAD->afhead[y].cbFile; 2040 pAD->ulSelectedKB -= ul >> 10; 2041 pAD->ulSelectedBytes -= ul & 0x3ff; 2042 } 2043 free(pAD->afhead[y].fullname); 2044 } 2045 memmove(&(pAD->afhead[x]),&(pAD->afhead[y]), 2046 (pAD->affiles - y) * sizeof(ALLFILES)); 2047 pAD->affiles -= (y - x); 2013 2048 } 2014 } 2015 if( ad->affiles != oldaffiles) {2049 } // for x 2050 if(pAD->affiles != oldaffiles) { 2016 2051 2017 2052 ALLFILES *tempa,**templ; 2018 2053 2019 if(! ad->affiles)2054 if(!pAD->affiles) 2020 2055 FreeAllFilesList(hwnd); 2021 2056 else { 2022 tempa = realloc( ad->afhead,ad->affiles * sizeof(ALLFILES));2057 tempa = realloc(pAD->afhead,pAD->affiles * sizeof(ALLFILES)); 2023 2058 if(tempa) { 2024 ad->afhead = tempa;2025 ad->afalloc = ad->affiles;2026 } 2027 templ = realloc( ad->afindex,ad->affiles * sizeof(ALLFILES *));2059 pAD->afhead = tempa; 2060 pAD->afalloc = pAD->affiles; 2061 } 2062 templ = realloc(pAD->afindex,pAD->affiles * sizeof(ALLFILES *)); 2028 2063 if(templ) 2029 ad->afindex = templ;2064 pAD->afindex = templ; 2030 2065 DosPostEventSem(CompactSem); 2031 2066 ReSort(hwnd); 2032 2067 } 2033 2068 } 2034 return ad->affiles;2069 return pAD->affiles; 2035 2070 } 2036 2071 … … 2073 2108 DosError(FERR_DISABLEHARDERR); 2074 2109 if(!DosFindFirst(filename,&hdir,FILE_NORMAL | FILE_ARCHIVED | 2075 FILE_READONLY | FILE_DIRECTORY | FILE_SYSTEM | FILE_HIDDEN,2076 pffb,sizeof(FILEFINDBUF3) * nm,&nm,FIL_STANDARD)) {2110 FILE_READONLY | FILE_DIRECTORY | FILE_SYSTEM | FILE_HIDDEN, 2111 pffb,sizeof(FILEFINDBUF3) * nm,&nm,FIL_STANDARD)) { 2077 2112 do { 2078 2113 priority_normal(); 2079 2114 fb = (PBYTE)pffb; 2080 2115 for(x = 0;x < nm;x++) { 2081 ffb = (FILEFINDBUF3 *)fb;2082 if(ffb->attrFile & FILE_DIRECTORY) {2083 if(*ffb->achName != '.' ||2084 (ffb->achName[1] &&2085 ffb->achName[1] != '.')) {2086 strcpy(enddir,ffb->achName);2087 DoADir(hwnd,filename);2088 }2089 }2090 else {2091 *enddir = 0;2092 strcpy(enddir,ffb->achName);2093 if(!ad->afalloc || ad->affiles > ad->afalloc - 1) {2094 2095 ALLFILES *temp;2096 2097 temp = realloc(ad->afhead,(ad->afalloc + 1000) *2098 sizeof(ALLFILES));2099 if(temp) {2100 ad->afhead = temp;2101 if(ad->stopflag)2102 break;2103 ad->afalloc += 1000;2104 }2105 else {2116 ffb = (FILEFINDBUF3 *)fb; 2117 if(ffb->attrFile & FILE_DIRECTORY) { 2118 if(*ffb->achName != '.' || 2119 (ffb->achName[1] && 2120 ffb->achName[1] != '.')) { 2121 strcpy(enddir,ffb->achName); 2122 DoADir(hwnd,filename); 2123 } 2124 } 2125 else { 2126 *enddir = 0; 2127 strcpy(enddir,ffb->achName); 2128 if(!ad->afalloc || ad->affiles > ad->afalloc - 1) { 2129 2130 ALLFILES *temp; 2131 2132 temp = realloc(ad->afhead,(ad->afalloc + 1000) * 2133 sizeof(ALLFILES)); 2134 if(temp) { 2135 ad->afhead = temp; 2136 if(ad->stopflag) 2137 break; 2138 ad->afalloc += 1000; 2139 } 2140 else { 2106 2141 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Realloc failed."); 2107 ad->stopflag = 1;2108 break;2109 }2110 }2111 ad->afhead[ad->affiles].fullname = strdup(filename);2112 if(ad->afhead[ad->affiles].fullname) {2113 ad->afhead[ad->affiles].filename =2114 ad->afhead[ad->affiles].fullname + (enddir - filename);2115 ad->afhead[ad->affiles].cbFile = ffb->cbFile;2116 ad->afhead[ad->affiles].date = ffb->fdateLastWrite;2117 ad->afhead[ad->affiles].time = ffb->ftimeLastWrite;2118 ad->afhead[ad->affiles].attrFile = (USHORT)ffb->attrFile;2119 ad->afhead[ad->affiles].flags = 0;2120 ad->affiles++;2121 if(ad->longest < ffb->cchName)2122 ad->longest = ffb->cchName;2123 if(ad->longestw < ffb->cchName + (enddir - filename))2124 ad->longestw = ffb->cchName + (enddir - filename);2125 }2126 else {2142 ad->stopflag = 1; 2143 break; 2144 } 2145 } 2146 ad->afhead[ad->affiles].fullname = strdup(filename); 2147 if(ad->afhead[ad->affiles].fullname) { 2148 ad->afhead[ad->affiles].filename = 2149 ad->afhead[ad->affiles].fullname + (enddir - filename); 2150 ad->afhead[ad->affiles].cbFile = ffb->cbFile; 2151 ad->afhead[ad->affiles].date = ffb->fdateLastWrite; 2152 ad->afhead[ad->affiles].time = ffb->ftimeLastWrite; 2153 ad->afhead[ad->affiles].attrFile = (USHORT)ffb->attrFile; 2154 ad->afhead[ad->affiles].flags = 0; 2155 ad->affiles++; 2156 if(ad->longest < ffb->cchName) 2157 ad->longest = ffb->cchName; 2158 if(ad->longestw < ffb->cchName + (enddir - filename)) 2159 ad->longestw = ffb->cchName + (enddir - filename); 2160 } 2161 else { 2127 2162 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Strdup failed."); 2128 ad->stopflag = 1;2129 break;2130 }2131 }2132 fb += ffb->oNextEntryOffset;2163 ad->stopflag = 1; 2164 break; 2165 } 2166 } 2167 fb += ffb->oNextEntryOffset; 2133 2168 } 2134 2169 nm = uL; 2135 2170 } while(!ad->stopflag && 2136 !DosFindNext(hdir,pffb,sizeof(FILEFINDBUF3) * nm,&nm));2171 !DosFindNext(hdir,pffb,sizeof(FILEFINDBUF3) * nm,&nm)); 2137 2172 DosFindClose(hdir); 2138 2173 } … … 2157 2192 hmq2 = WinCreateMsgQueue(hab2,0); 2158 2193 if(hmq2) { 2159 WinCancelShutdown(hmq2,TRUE);2160 ad->afFilesToGet = min(FilesToGet,128);2161 if(!*ad->findpath) {2162 DosError(FERR_DISABLEHARDERR);2163 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) {2164 for(x = 2L;x < 26L && !ad->stopflag;x++) {2165 if((ulDriveMap & (1L << x)) && ad->drvsflags[x]) {2166 *startname = (CHAR)(x + 'A');2167 DoADir(hwnd,startname);2168 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);2169 DosSleep(1L);2170 }2171 }2172 }2173 }2174 else2175 DoADir(hwnd,ad->findpath);2176 DosPostEventSem(CompactSem);2194 WinCancelShutdown(hmq2,TRUE); 2195 ad->afFilesToGet = min(FilesToGet,128); 2196 if(!*ad->findpath) { 2197 DosError(FERR_DISABLEHARDERR); 2198 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) { 2199 for(x = 2L;x < 26L && !ad->stopflag;x++) { 2200 if((ulDriveMap & (1L << x)) && ad->drvsflags[x]) { 2201 *startname = (CHAR)(x + 'A'); 2202 DoADir(hwnd,startname); 2203 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 2204 DosSleep(1L); 2205 } 2206 } 2207 } 2208 } 2209 else 2210 DoADir(hwnd,ad->findpath); 2211 DosPostEventSem(CompactSem); 2177 2212 } 2178 2213 } … … 2183 2218 tempa = realloc(ad->afhead,sizeof(ALLFILES) * ad->affiles); 2184 2219 if(tempa) { 2185 ad->afhead = tempa;2186 ad->afalloc = ad->affiles;2220 ad->afhead = tempa; 2221 ad->afalloc = ad->affiles; 2187 2222 } 2188 2223 templ = realloc(ad->afindex,sizeof(ALLFILES *) * ad->affiles); 2189 2224 if(templ) 2190 ad->afindex = templ;2225 ad->afindex = templ; 2191 2226 DosPostEventSem(CompactSem); 2192 2227 } … … 2212 2247 if(mp2) { 2213 2248 2214 ULONG ulDriveNum,ulDriveMap,x;2215 CHAR startname[] = " :";2216 SHORT sSelect;2217 ALLDATA *ad;2218 2219 ad = (ALLDATA *)mp2;2220 WinSetWindowPtr(hwnd,0,mp2);2221 DosError(FERR_DISABLEHARDERR);2222 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) {2223 for(x = 2L;x < 26L && !ad->stopflag;x++) {2224 if(!(driveflags[x] & (DRIVE_IGNORE | DRIVE_INVALID))) {2225 if(ulDriveMap & (1L << x)) {2226 *startname = (CHAR)(x + 'A');2227 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,DRVS_LISTBOX,2228 LM_INSERTITEM,2229 MPFROM2SHORT(LIT_END,0),2230 MPFROMP(startname));2231 if(sSelect >= 0 && ad->drvsflags[x])2232 WinSendDlgItemMsg(hwnd,DRVS_LISTBOX,LM_SELECTITEM,2233 MPFROM2SHORT(sSelect,0),2234 MPFROMLONG(TRUE));2235 }2236 }2237 }2238 }2249 ULONG ulDriveNum,ulDriveMap,x; 2250 CHAR startname[] = " :"; 2251 SHORT sSelect; 2252 ALLDATA *ad; 2253 2254 ad = (ALLDATA *)mp2; 2255 WinSetWindowPtr(hwnd,0,mp2); 2256 DosError(FERR_DISABLEHARDERR); 2257 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) { 2258 for(x = 2L;x < 26L && !ad->stopflag;x++) { 2259 if(!(driveflags[x] & (DRIVE_IGNORE | DRIVE_INVALID))) { 2260 if(ulDriveMap & (1L << x)) { 2261 *startname = (CHAR)(x + 'A'); 2262 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,DRVS_LISTBOX, 2263 LM_INSERTITEM, 2264 MPFROM2SHORT(LIT_END,0), 2265 MPFROMP(startname)); 2266 if(sSelect >= 0 && ad->drvsflags[x]) 2267 WinSendDlgItemMsg(hwnd,DRVS_LISTBOX,LM_SELECTITEM, 2268 MPFROM2SHORT(sSelect,0), 2269 MPFROMLONG(TRUE)); 2270 } 2271 } 2272 } 2273 } 2239 2274 } 2240 2275 else 2241 WinDismissDlg(hwnd,0);2276 WinDismissDlg(hwnd,0); 2242 2277 break; 2243 2278 2244 2279 case WM_CONTROL: 2245 2280 switch(SHORT1FROMMP(mp1)) { 2246 case DRVS_LISTBOX:2247 switch(SHORT2FROMMP(mp1)) {2248 case LN_ENTER:2249 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(DID_OK,0),MPVOID);2250 break;2251 }2252 break;2281 case DRVS_LISTBOX: 2282 switch(SHORT2FROMMP(mp1)) { 2283 case LN_ENTER: 2284 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(DID_OK,0),MPVOID); 2285 break; 2286 } 2287 break; 2253 2288 } 2254 2289 return 0; … … 2256 2291 case WM_COMMAND: 2257 2292 switch(SHORT1FROMMP(mp1)) { 2258 case DID_OK:2259 {2260 INT x;2261 SHORT sSelect;2262 CHAR filename[3];2263 ALLDATA *ad = WinQueryWindowPtr(hwnd,0);2264 2265 memset(ad->drvsflags,0,sizeof(ad->drvsflags));2266 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,DRVS_LISTBOX,2267 LM_QUERYSELECTION,2268 MPFROM2SHORT(LIT_FIRST,0),2269 MPVOID);2270 while(sSelect >= 0) {2271 *filename = 0;2272 if(WinSendDlgItemMsg(hwnd,DRVS_LISTBOX,LM_QUERYITEMTEXT,2273 MPFROM2SHORT(sSelect,2),2274 MPFROMP(filename)) && *filename)2275 ad->drvsflags[*filename - 'A'] = 1;2276 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,DRVS_LISTBOX,2277 LM_QUERYSELECTION,2278 MPFROM2SHORT(sSelect,0),2279 MPVOID);2280 }2281 for(x = 2L;x < 26L;x++) {2282 if(ad->drvsflags[x]) {2283 WinDismissDlg(hwnd,1);2284 return 0;2285 }2286 }2287 }2288 WinDismissDlg(hwnd,0);2289 break;2290 2291 case IDM_HELP:2292 if(hwndHelp)2293 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,2294 MPFROM2SHORT(HELP_DRVSWND,0),2295 MPFROMSHORT(HM_RESOURCEID));2296 break;2297 2298 case DID_CANCEL:2299 WinDismissDlg(hwnd,0);2300 break;2293 case DID_OK: 2294 { 2295 INT x; 2296 SHORT sSelect; 2297 CHAR filename[3]; 2298 ALLDATA *ad = WinQueryWindowPtr(hwnd,0); 2299 2300 memset(ad->drvsflags,0,sizeof(ad->drvsflags)); 2301 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,DRVS_LISTBOX, 2302 LM_QUERYSELECTION, 2303 MPFROM2SHORT(LIT_FIRST,0), 2304 MPVOID); 2305 while(sSelect >= 0) { 2306 *filename = 0; 2307 if(WinSendDlgItemMsg(hwnd,DRVS_LISTBOX,LM_QUERYITEMTEXT, 2308 MPFROM2SHORT(sSelect,2), 2309 MPFROMP(filename)) && *filename) 2310 ad->drvsflags[*filename - 'A'] = 1; 2311 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,DRVS_LISTBOX, 2312 LM_QUERYSELECTION, 2313 MPFROM2SHORT(sSelect,0), 2314 MPVOID); 2315 } 2316 for(x = 2L;x < 26L;x++) { 2317 if(ad->drvsflags[x]) { 2318 WinDismissDlg(hwnd,1); 2319 return 0; 2320 } 2321 } 2322 } 2323 WinDismissDlg(hwnd,0); 2324 break; 2325 2326 case IDM_HELP: 2327 if(hwndHelp) 2328 WinSendMsg(hwndHelp,HM_DISPLAY_HELP, 2329 MPFROM2SHORT(HELP_DRVSWND,0), 2330 MPFROMSHORT(HM_RESOURCEID)); 2331 break; 2332 2333 case DID_CANCEL: 2334 WinDismissDlg(hwnd,0); 2335 break; 2301 2336 } 2302 2337 return 0; … … 2316 2351 sizel.cx = sizel.cy = 0; 2317 2352 hps = GpiCreatePS(WinQueryAnchorBlock(hwnd),WinOpenWindowDC(hwnd), 2318 (PSIZEL)&sizel,PU_PELS | GPIF_DEFAULT | GPIT_MICRO |2319 GPIA_ASSOC);2353 (PSIZEL)&sizel,PU_PELS | GPIF_DEFAULT | GPIT_MICRO | 2354 GPIA_ASSOC); 2320 2355 if(hps) { 2321 2356 GpiSetCp(hps,(ULONG)ad->fattrs.usCodePage); 2322 2357 GpiCreateLogFont(hps,NULL,FIXED_FONT_LCID,&ad->fattrs); 2323 2358 GpiSetCharSet(hps,FIXED_FONT_LCID); 2324 GpiQueryFontMetrics(hps, (long)sizeof(FONTMETRICS),&FontMetrics);2359 GpiQueryFontMetrics(hps,sizeof(FontMetrics),&FontMetrics); 2325 2360 ad->fattrs.lAveCharWidth = FontMetrics.lAveCharWidth; 2326 2361 ad->fattrs.lMaxBaselineExt = FontMetrics.lMaxBaselineExt; … … 2329 2364 ad->lMaxHeight = ad->lMaxDescender + ad->lMaxAscender; 2330 2365 if(ad->fattrs.usCodePage != FontMetrics.usCodePage) { 2331 ad->fattrs.usCodePage = FontMetrics.usCodePage;2332 Codepage = ad->fattrs.usCodePage;2333 PrfWriteProfileData(fmprof,2334 appname,2335 "Seeall.Codepage",2336 &ad->fattrs.usCodePage,2337 sizeof(USHORT));2366 ad->fattrs.usCodePage = FontMetrics.usCodePage; 2367 Codepage = ad->fattrs.usCodePage; 2368 PrfWriteProfileData(fmprof, 2369 appname, 2370 "Seeall.Codepage", 2371 &ad->fattrs.usCodePage, 2372 sizeof(USHORT)); 2338 2373 } 2339 2374 else if(ad->fattrs.usCodePage) { 2340 2375 2341 HMQ hmq;2342 ULONG cps[50],len,x;2343 2344 if(!DosQueryCp(sizeof(cps),cps,&len)) {2345 for(x = 0;x < len / sizeof(ULONG);x++) {2346 if(cps[x] == (ULONG)ad->fattrs.usCodePage) {2347 hmq = WinQueryWindowULong(hwnd,QWL_HMQ);2348 WinSetCp(hmq,ad->fattrs.usCodePage);2349 break;2350 }2351 }2352 }2353 DosSetProcessCp((ULONG)ad->fattrs.usCodePage);2376 HMQ hmq; 2377 ULONG cps[50],len,x; 2378 2379 if(!DosQueryCp(sizeof(cps),cps,&len)) { 2380 for(x = 0;x < len / sizeof(ULONG);x++) { 2381 if(cps[x] == (ULONG)ad->fattrs.usCodePage) { 2382 hmq = WinQueryWindowULong(hwnd,QWL_HMQ); 2383 WinSetCp(hmq,ad->fattrs.usCodePage); 2384 break; 2385 } 2386 } 2387 } 2388 DosSetProcessCp((ULONG)ad->fattrs.usCodePage); 2354 2389 } 2355 2390 GpiSetBackMix(hps,BM_OVERPAINT); … … 2361 2396 2362 2397 static VOID PaintLine (HWND hwnd,HPS hps,ULONG whichfile,ULONG topfile, 2363 RECTL *Rectl) {2398 RECTL *Rectl) { 2364 2399 2365 2400 ALLDATA *ad = WinQueryWindowPtr(hwnd,0); … … 2370 2405 y = (ad->invertsort) ? (ad->afifiles - 1) - whichfile : whichfile; 2371 2406 ptl.y = (Rectl->yTop - 2372 (ad->lMaxHeight * (((whichfile + 1) - topfile) + 1)));2407 (ad->lMaxHeight * (((whichfile + 1) - topfile) + 1))); 2373 2408 ptl.x = ad->horzscroll; 2374 2409 if(ptl.y < Rectl->yBottom || ptl.y > Rectl->yTop || y > ad->afifiles) … … 2378 2413 GpiSetColor(hps,standardcolors[Colors[COLORS_SELECTEDNORMALFORE]]); 2379 2414 GpiSetBackColor(hps,(whichfile == ad->cursored - 1) ? 2380 standardcolors[Colors[COLORS_CURSOREDSELECTEDBACK]] :2381 standardcolors[Colors[COLORS_SELECTEDBACK]]);2415 standardcolors[Colors[COLORS_CURSOREDSELECTEDBACK]] : 2416 standardcolors[Colors[COLORS_SELECTEDBACK]]); 2382 2417 } 2383 2418 else { 2384 2419 GpiSetColor(hps, 2385 ((ad->afindex[y]->attrFile & (FILE_SYSTEM | FILE_HIDDEN)) != 0) ?2386 standardcolors[Colors[COLORS_SYSTEMFORE]] :2387 ((ad->afindex[y]->attrFile & FILE_READONLY) != 0) ?2388 standardcolors[Colors[COLORS_READONLYFORE]] : standardcolors[Colors[COLORS_NORMALFORE]]);2420 ((ad->afindex[y]->attrFile & (FILE_SYSTEM | FILE_HIDDEN)) != 0) ? 2421 standardcolors[Colors[COLORS_SYSTEMFORE]] : 2422 ((ad->afindex[y]->attrFile & FILE_READONLY) != 0) ? 2423 standardcolors[Colors[COLORS_READONLYFORE]] : standardcolors[Colors[COLORS_NORMALFORE]]); 2389 2424 GpiSetBackColor(hps,(whichfile == ad->cursored - 1) ? 2390 standardcolors[Colors[COLORS_CURSOREDNORMALBACK]] :2391 standardcolors[Colors[COLORS_NORMALBACK]]);2425 standardcolors[Colors[COLORS_CURSOREDNORMALBACK]] : 2426 standardcolors[Colors[COLORS_NORMALBACK]]); 2392 2427 } 2393 2428 len = sprintf(szBuff, 2394 "%c%-*.*s %-12lu %c%c%c%c%c %04u/%02u/%02u %02u:%02u:%02u ",2395 (whichfile == ad->cursored - 1) ? '>' : ' ',2396 (ad->fullnames) ? ad->longestw : ad->longest,2397 (ad->fullnames) ? ad->longestw : ad->longest,2398 (ad->fullnames) ? ad->afindex[y]->fullname :2399 ad->afindex[y]->filename,2400 ad->afindex[y]->cbFile,2401 "-A"[((ad->afindex[y]->attrFile & FILE_ARCHIVED) != 0)],2402 "-R"[((ad->afindex[y]->attrFile & FILE_READONLY) != 0)],2403 "-H"[((ad->afindex[y]->attrFile & FILE_HIDDEN) != 0)],2404 "-S"[((ad->afindex[y]->attrFile & FILE_SYSTEM) != 0)],2405 "-D"[((ad->afindex[y]->attrFile & FILE_DIRECTORY) != 0)],2406 ad->afindex[y]->date.year + 1980,2407 ad->afindex[y]->date.month,2408 ad->afindex[y]->date.day,2409 ad->afindex[y]->time.hours,2410 ad->afindex[y]->time.minutes,2411 ad->afindex[y]->time.twosecs * 2);2429 "%c%-*.*s %-12lu %c%c%c%c%c %04u/%02u/%02u %02u:%02u:%02u ", 2430 (whichfile == ad->cursored - 1) ? '>' : ' ', 2431 (ad->fullnames) ? ad->longestw : ad->longest, 2432 (ad->fullnames) ? ad->longestw : ad->longest, 2433 (ad->fullnames) ? ad->afindex[y]->fullname : 2434 ad->afindex[y]->filename, 2435 ad->afindex[y]->cbFile, 2436 "-A"[((ad->afindex[y]->attrFile & FILE_ARCHIVED) != 0)], 2437 "-R"[((ad->afindex[y]->attrFile & FILE_READONLY) != 0)], 2438 "-H"[((ad->afindex[y]->attrFile & FILE_HIDDEN) != 0)], 2439 "-S"[((ad->afindex[y]->attrFile & FILE_SYSTEM) != 0)], 2440 "-D"[((ad->afindex[y]->attrFile & FILE_DIRECTORY) != 0)], 2441 ad->afindex[y]->date.year + 1980, 2442 ad->afindex[y]->date.month, 2443 ad->afindex[y]->date.day, 2444 ad->afindex[y]->time.hours, 2445 ad->afindex[y]->time.minutes, 2446 ad->afindex[y]->time.twosecs * 2); 2412 2447 GpiCharStringAt(hps,&ptl,len,szBuff); 2413 2448 GpiQueryCurrentPosition(hps,&ptl); … … 2415 2450 ad->maxx = ptl.x + abs(ad->horzscroll); 2416 2451 WinSendMsg(ad->hhscroll,SBM_SETTHUMBSIZE, 2417 MPFROM2SHORT((SHORT)Rectl->xRight,(SHORT)ad->maxx),2418 MPVOID);2452 MPFROM2SHORT((SHORT)Rectl->xRight,(SHORT)ad->maxx), 2453 MPVOID); 2419 2454 } 2420 2455 } … … 2429 2464 case WM_SETFOCUS: 2430 2465 if(mp2) 2431 PostMsg(hwnd,UM_FOCUSME,MPVOID,MPVOID);2466 PostMsg(hwnd,UM_FOCUSME,MPVOID,MPVOID); 2432 2467 break; 2433 2468 2434 2469 case WM_PAINT: 2435 2470 { 2436 SWP swp;2437 POINTL ptl;2438 HPS hps;2439 2440 PaintRecessedWindow(hwnd,(HPS)0,FALSE,FALSE);2441 hps = WinGetPS(WinQueryWindow(hwnd,QW_PARENT));2442 if(hps) {2443 WinQueryWindowPos(hwnd,&swp);2444 ptl.x = swp.x - 1;2445 ptl.y = swp.y + swp.cy + 2;2446 GpiMove(hps,&ptl);2447 GpiSetColor(hps,CLR_WHITE);2448 ptl.x = swp.x + swp.cx;2449 GpiLine(hps,&ptl);2450 WinReleasePS(hps);2451 }2471 SWP swp; 2472 POINTL ptl; 2473 HPS hps; 2474 2475 PaintRecessedWindow(hwnd,(HPS)0,FALSE,FALSE); 2476 hps = WinGetPS(WinQueryWindow(hwnd,QW_PARENT)); 2477 if(hps) { 2478 WinQueryWindowPos(hwnd,&swp); 2479 ptl.x = swp.x - 1; 2480 ptl.y = swp.y + swp.cy + 2; 2481 GpiMove(hps,&ptl); 2482 GpiSetColor(hps,CLR_WHITE); 2483 ptl.x = swp.x + swp.cx; 2484 GpiLine(hps,&ptl); 2485 WinReleasePS(hps); 2486 } 2452 2487 } 2453 2488 break; … … 2455 2490 case UM_FOCUSME: 2456 2491 WinSetFocus(HWND_DESKTOP,WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT), 2457 FID_CLIENT));2492 FID_CLIENT)); 2458 2493 return 0; 2459 2494 } … … 2481 2516 case WM_CALCFRAMERECT: 2482 2517 { 2483 MRESULT mr;2484 PRECTL prectl;2485 2486 mr = oldproc(hwnd,msg,mp1,mp2);2487 2488 /*2489 * Calculate the position of the client rectangle.2490 * Otherwise, we'll see a lot of redraw when we move the2491 * client during WM_FORMATFRAME.2492 */2493 2494 if(mr && mp2) {2495 prectl = (PRECTL)mp1;2496 prectl->yBottom += 22;2497 prectl->yTop -= 24;2498 }2499 return mr;2518 MRESULT mr; 2519 PRECTL prectl; 2520 2521 mr = oldproc(hwnd,msg,mp1,mp2); 2522 2523 /* 2524 * Calculate the position of the client rectangle. 2525 * Otherwise, we'll see a lot of redraw when we move the 2526 * client during WM_FORMATFRAME. 2527 */ 2528 2529 if(mr && mp2) { 2530 prectl = (PRECTL)mp1; 2531 prectl->yBottom += 22; 2532 prectl->yTop -= 24; 2533 } 2534 return mr; 2500 2535 } 2501 2536 2502 2537 case WM_FORMATFRAME: 2503 2538 { 2504 SHORT sCount;2505 PSWP pswp,pswpClient,pswpNew;2506 2507 sCount = (SHORT)oldproc(hwnd,msg,mp1,mp2);2508 2509 /*2510 * Reformat the frame to "squeeze" the client2511 * and make room for status window sibling beneath2512 */2513 2514 pswp = (PSWP)mp1;2515 {2516 SHORT x;2517 2518 for(x = 0;x < sCount;x++) {2519 if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_CLIENT) {2520 pswpClient = pswp;2521 break;2522 }2523 pswp++;2524 }2525 }2526 pswpNew = (PSWP)mp1 + sCount;2527 *pswpNew = *pswpClient;2528 pswpNew->hwnd = WinWindowFromID(hwnd,SEEALL_STATUS);2529 pswpNew->x = pswpClient->x + 2;2530 pswpNew->y = pswpClient->y + 2;2531 pswpNew->cx = pswpClient->cx - 3;2532 pswpNew->cy = 20;2533 pswpClient->y = pswpNew->y + pswpNew->cy + 3;2534 pswpClient->cy = (pswpClient->cy - pswpNew->cy) - 5;2535 sCount++;2536 return MRFROMSHORT(sCount);2539 SHORT sCount; 2540 PSWP pswp,pswpClient,pswpNew; 2541 2542 sCount = (SHORT)oldproc(hwnd,msg,mp1,mp2); 2543 2544 /* 2545 * Reformat the frame to "squeeze" the client 2546 * and make room for status window sibling beneath 2547 */ 2548 2549 pswp = (PSWP)mp1; 2550 { 2551 SHORT x; 2552 2553 for(x = 0;x < sCount;x++) { 2554 if(WinQueryWindowUShort(pswp->hwnd,QWS_ID) == FID_CLIENT) { 2555 pswpClient = pswp; 2556 break; 2557 } 2558 pswp++; 2559 } 2560 } 2561 pswpNew = (PSWP)mp1 + sCount; 2562 *pswpNew = *pswpClient; 2563 pswpNew->hwnd = WinWindowFromID(hwnd,SEEALL_STATUS); 2564 pswpNew->x = pswpClient->x + 2; 2565 pswpNew->y = pswpClient->y + 2; 2566 pswpNew->cx = pswpClient->cx - 3; 2567 pswpNew->cy = 20; 2568 pswpClient->y = pswpNew->y + pswpNew->cy + 3; 2569 pswpClient->cy = (pswpClient->cy - pswpNew->cy) - 5; 2570 sCount++; 2571 return MRFROMSHORT(sCount); 2537 2572 } 2538 2573 2539 2574 case WM_QUERYFRAMECTLCOUNT: 2540 2575 { 2541 SHORT sCount;2542 2543 sCount = (SHORT)oldproc(hwnd,msg,mp1,mp2);2544 sCount++;2545 return MRFROMSHORT(sCount);2576 SHORT sCount; 2577 2578 sCount = (SHORT)oldproc(hwnd,msg,mp1,mp2); 2579 sCount++; 2580 return MRFROMSHORT(sCount); 2546 2581 } 2547 2582 } … … 2552 2587 MRESULT EXPENTRY SeeAllWndProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { 2553 2588 2554 ALLDATA *ad = WinQueryWindowPtr(hwnd,0); 2589 ALLDATA *pAD = WinQueryWindowPtr(hwnd,0); 2590 ULONG ul; 2555 2591 2556 2592 switch (msg) { 2557 2593 case WM_CREATE: 2558 // fprintf(stderr,"Seeall: WM_CREATE\n");2594 // fprintf(stderr,"Seeall: WM_CREATE\n"); 2559 2595 WinSetWindowPtr(hwnd,0,NULL); 2560 ad= malloc(sizeof(ALLDATA));2561 if( ad) {2562 memset(ad,0,sizeof(ALLDATA));2563 ad->size = sizeof(ALLDATA);2564 ad->hwndFrame = WinQueryWindow(hwnd,QW_PARENT);2565 ad->mask.attrFile = FILE_READONLY | FILE_HIDDEN |2566 FILE_SYSTEM | FILE_ARCHIVED;2567 ad->mask.fNoDirs = TRUE;2568 *(ad->mask.prompt) = 0;2569 WinSetWindowPtr(hwnd,0,(PVOID)ad);2570 ad->compare = comparenames;2571 if(Firsttime) {2572 2573 ULONG size;2574 2575 size = sizeof(USHORT);2576 PrfQueryProfileData(fmprof,2577 appname,2578 "Seeall.Codepage",2579 (PVOID)&Codepage,2580 &size);2581 size = sizeof(BOOL);2582 PrfQueryProfileData(fmprof,2583 appname,2584 "Seeall.Fullnames",2585 (PVOID)&Fullnames,2586 &size);2587 size = sizeof(USHORT);2588 PrfQueryProfileData(fmprof,2589 appname,2590 "Seeall.Sort",2591 (PVOID)&SortType,2592 &size);2593 size = sizeof(BOOL);2594 PrfQueryProfileData(fmprof,2595 appname,2596 "Seeall.SortReverse",2597 (PVOID)&SortReverse,2598 &size);2599 memset(&Fattrs,0,sizeof(FATTRS));2600 size = sizeof(FATTRS);2601 Fattrs.usRecordLength = sizeof(FATTRS);2602 Fattrs.lMaxBaselineExt = 16;2603 Fattrs.lAveCharWidth = 8;2604 Fattrs.usCodePage = Codepage;2605 strcpy(Fattrs.szFacename,2606 GetPString(IDS_SYSMONOTEXT));2607 PrfQueryProfileData(fmprof,2608 appname,2609 "Seeall.Fattrs",2610 (PVOID)&Fattrs,2611 &size);2612 size = sizeof(LONG) * COLORS_MAX;2613 PrfQueryProfileData(fmprof,2614 appname,2615 "Seeall.Colors",2616 (PVOID)Colors,2617 &size);2618 Firsttime = FALSE;2619 }2620 switch(SortType) {2621 case IDM_SORTEASIZE:2622 ad->compare = (PFNSORT)NULL;2623 break;2624 case IDM_SORTNAME:2625 ad->compare = comparefullnames;2626 break;2627 case IDM_SORTFILENAME:2628 ad->compare = comparenames;2629 break;2630 case IDM_SORTSIZE:2631 ad->compare = comparesizes;2632 break;2633 case IDM_SORTLWDATE:2634 ad->compare = comparedates;2635 break;2636 case IDM_SORTFIRST:2637 ad->compare = compareexts;2638 break;2639 }2640 ad->invertsort = SortReverse;2641 ad->fattrs = Fattrs;2642 ad->fullnames = Fullnames;2643 ad->stopflag = 0;2644 ad->cursored = ad->topfile = 1;2645 ad->fattrs.usCodePage = Codepage;2646 memcpy(ad->colors,Colors,sizeof(LONG) * COLORS_MAX);2647 ad->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),2648 FID_MENU);2649 SetConditionalCascade(ad->hwndMenu,IDM_DELETESUBMENU,2650 (fDefaultDeletePerm) ?2651 IDM_PERMDELETE : IDM_DELETE);2652 SetConditionalCascade(ad->hwndMenu,IDM_MOVEMENU,IDM_MOVE);2653 SetConditionalCascade(ad->hwndMenu,IDM_COPYMENU,IDM_COPY);2654 SetConditionalCascade(ad->hwndMenu,IDM_OPENSUBMENU,IDM_OPENDEFAULT);2655 SetConditionalCascade(ad->hwndMenu,IDM_OBJECTSUBMENU,IDM_SHADOW);2656 if(fWorkPlace) {2657 WinSendMsg(ad->hwndMenu,MM_DELETEITEM,2658 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID);2659 WinSendMsg(ad->hwndMenu,MM_DELETEITEM,2660 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID);2661 }2662 ad->hwndClient = hwnd;2663 ad->hps = InitWindow(hwnd);2664 ad->hvscroll = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),2665 FID_VERTSCROLL);2666 ad->hhscroll = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),2667 FID_HORZSCROLL);2668 ad->multiplier = 1;2669 if(_beginthread(MakeSeeObj,NULL,122880,(PVOID)ad) != -1) {2670 if(!DosCreateMutexSem(NULL,&ad->ScanSem,0L,FALSE)) {2671 ad->hwndStatus = WinCreateWindow(WinQueryWindow(hwnd,QW_PARENT),2672 GetPString(IDS_WCSEESTATUS),2673 NullStr,2674 WS_VISIBLE | SS_TEXT |2675 DT_LEFT | DT_VCENTER,2676 0,2677 0,2678 0,2679 0,2680 WinQueryWindow(hwnd,QW_PARENT),2681 HWND_TOP,2682 SEEALL_STATUS,2683 NULL,2684 NULL);2685 {2686 PFNWP oldproc;2687 2688 oldproc = WinSubclassWindow(WinQueryWindow(hwnd,QW_PARENT),2689 (PFNWP)SeeFrameWndProc);2690 if(oldproc)2691 WinSetWindowPtr(WinQueryWindow(hwnd,QW_PARENT),0,2692 (PVOID)oldproc);2693 }2694 break;2695 }2696 }2596 pAD = malloc(sizeof(ALLDATA)); 2597 if(pAD) { 2598 memset(pAD,0,sizeof(ALLDATA)); 2599 pAD->size = sizeof(ALLDATA); 2600 pAD->hwndFrame = WinQueryWindow(hwnd,QW_PARENT); 2601 pAD->mask.attrFile = FILE_READONLY | FILE_HIDDEN | 2602 FILE_SYSTEM | FILE_ARCHIVED; 2603 pAD->mask.fNoDirs = TRUE; 2604 *(pAD->mask.prompt) = 0; 2605 WinSetWindowPtr(hwnd,0,(PVOID)pAD); 2606 pAD->compare = comparenames; 2607 if(Firsttime) { 2608 2609 ULONG size; 2610 2611 size = sizeof(USHORT); 2612 PrfQueryProfileData(fmprof, 2613 appname, 2614 "Seeall.Codepage", 2615 (PVOID)&Codepage, 2616 &size); 2617 size = sizeof(BOOL); 2618 PrfQueryProfileData(fmprof, 2619 appname, 2620 "Seeall.Fullnames", 2621 (PVOID)&Fullnames, 2622 &size); 2623 size = sizeof(USHORT); 2624 PrfQueryProfileData(fmprof, 2625 appname, 2626 "Seeall.Sort", 2627 (PVOID)&SortType, 2628 &size); 2629 size = sizeof(BOOL); 2630 PrfQueryProfileData(fmprof, 2631 appname, 2632 "Seeall.SortReverse", 2633 (PVOID)&SortReverse, 2634 &size); 2635 memset(&Fattrs,0,sizeof(Fattrs)); 2636 size = sizeof(Fattrs); 2637 Fattrs.usRecordLength = sizeof(Fattrs); 2638 Fattrs.lMaxBaselineExt = 16; 2639 Fattrs.lAveCharWidth = 8; 2640 Fattrs.usCodePage = Codepage; 2641 strcpy(Fattrs.szFacename, 2642 GetPString(IDS_SYSMONOTEXT)); 2643 PrfQueryProfileData(fmprof, 2644 appname, 2645 "Seeall.Fattrs", 2646 (PVOID)&Fattrs, 2647 &size); 2648 size = sizeof(LONG) * COLORS_MAX; 2649 PrfQueryProfileData(fmprof, 2650 appname, 2651 "Seeall.Colors", 2652 (PVOID)Colors, 2653 &size); 2654 Firsttime = FALSE; 2655 } 2656 switch(SortType) { 2657 case IDM_SORTEASIZE: 2658 pAD->compare = (PFNSORT)NULL; 2659 break; 2660 case IDM_SORTNAME: 2661 pAD->compare = comparefullnames; 2662 break; 2663 case IDM_SORTFILENAME: 2664 pAD->compare = comparenames; 2665 break; 2666 case IDM_SORTSIZE: 2667 pAD->compare = comparesizes; 2668 break; 2669 case IDM_SORTLWDATE: 2670 pAD->compare = comparedates; 2671 break; 2672 case IDM_SORTFIRST: 2673 pAD->compare = compareexts; 2674 break; 2675 } 2676 pAD->invertsort = SortReverse; 2677 pAD->fattrs = Fattrs; 2678 pAD->fullnames = Fullnames; 2679 pAD->stopflag = 0; 2680 pAD->cursored = pAD->topfile = 1; 2681 pAD->fattrs.usCodePage = Codepage; 2682 memcpy(pAD->colors,Colors,sizeof(LONG) * COLORS_MAX); 2683 pAD->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT), 2684 FID_MENU); 2685 SetConditionalCascade(pAD->hwndMenu,IDM_DELETESUBMENU, 2686 (fDefaultDeletePerm) ? 2687 IDM_PERMDELETE : IDM_DELETE); 2688 SetConditionalCascade(pAD->hwndMenu,IDM_MOVEMENU,IDM_MOVE); 2689 SetConditionalCascade(pAD->hwndMenu,IDM_COPYMENU,IDM_COPY); 2690 SetConditionalCascade(pAD->hwndMenu,IDM_OPENSUBMENU,IDM_OPENDEFAULT); 2691 SetConditionalCascade(pAD->hwndMenu,IDM_OBJECTSUBMENU,IDM_SHADOW); 2692 if(fWorkPlace) { 2693 WinSendMsg(pAD->hwndMenu,MM_DELETEITEM, 2694 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID); 2695 WinSendMsg(pAD->hwndMenu,MM_DELETEITEM, 2696 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID); 2697 } 2698 pAD->hwndClient = hwnd; 2699 pAD->hps = InitWindow(hwnd); 2700 pAD->hvscroll = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT), 2701 FID_VERTSCROLL); 2702 pAD->hhscroll = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT), 2703 FID_HORZSCROLL); 2704 pAD->multiplier = 1; 2705 if(_beginthread(MakeSeeObj,NULL,122880,(PVOID)pAD) != -1) { 2706 if(!DosCreateMutexSem(NULL,&pAD->ScanSem,0L,FALSE)) { 2707 pAD->hwndStatus = WinCreateWindow(WinQueryWindow(hwnd,QW_PARENT), 2708 GetPString(IDS_WCSEESTATUS), 2709 NullStr, 2710 WS_VISIBLE | SS_TEXT | 2711 DT_LEFT | DT_VCENTER, 2712 0, 2713 0, 2714 0, 2715 0, 2716 WinQueryWindow(hwnd,QW_PARENT), 2717 HWND_TOP, 2718 SEEALL_STATUS, 2719 NULL, 2720 NULL); 2721 { 2722 PFNWP oldproc; 2723 2724 oldproc = WinSubclassWindow(WinQueryWindow(hwnd,QW_PARENT), 2725 (PFNWP)SeeFrameWndProc); 2726 if(oldproc) 2727 WinSetWindowPtr(WinQueryWindow(hwnd,QW_PARENT),0, 2728 (PVOID)oldproc); 2729 } 2730 break; 2731 } 2732 } 2697 2733 } 2698 2734 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID); … … 2700 2736 2701 2737 case UM_SETUP5: 2702 // fprintf(stderr,"Seeall: UM_SETUP5\n");2703 if( ad) {2704 if(mp1 && *((CHAR *)mp1))2705 strcpy(ad->findpath,(CHAR *)mp1);2706 else {2707 if(!WinDlgBox(HWND_DESKTOP,hwnd,AFDrvsWndProc,2708 FM3ModHandle,DRVS_FRAME,(PVOID)ad)) {2709 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID);2710 return 0;2711 }2712 }2713 if(_beginthread(FindAll,NULL,524288,(PVOID)hwnd) == -1)2714 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID);2715 else {2716 DosSleep(100L);2717 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID);2718 PostMsg(hwnd,UM_SETUP2,MPVOID,MPVOID);2719 }2738 // fprintf(stderr,"Seeall: UM_SETUP5\n"); 2739 if(pAD) { 2740 if(mp1 && *((CHAR *)mp1)) 2741 strcpy(pAD->findpath,(CHAR *)mp1); 2742 else { 2743 if(!WinDlgBox(HWND_DESKTOP,hwnd,AFDrvsWndProc, 2744 FM3ModHandle,DRVS_FRAME,(PVOID)pAD)) { 2745 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID); 2746 return 0; 2747 } 2748 } 2749 if(_beginthread(FindAll,NULL,524288,(PVOID)hwnd) == -1) 2750 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID); 2751 else { 2752 DosSleep(100L); 2753 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID); 2754 PostMsg(hwnd,UM_SETUP2,MPVOID,MPVOID); 2755 } 2720 2756 } 2721 2757 else 2722 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID);2758 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID); 2723 2759 return 0; 2724 2760 … … 2726 2762 if(mp1) { 2727 2763 2728 APIRET rc;2729 2730 rc = DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN);2731 if(!rc) {2732 WinSetPointer(HWND_DESKTOP,hptrBusy);2733 if(UpdateList(hwnd,mp1)) {2734 FreeList(mp1);2735 RemoveDeleted(hwnd);2736 ReSort(hwnd);2737 WinInvalidateRect(hwnd,NULL,FALSE);2738 }2739 DosReleaseMutexSem(ad->ScanSem);2740 WinSetPointer(HWND_DESKTOP,hptrArrow);2741 }2764 APIRET rc; 2765 2766 rc = DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN); 2767 if(!rc) { 2768 WinSetPointer(HWND_DESKTOP,hptrBusy); 2769 if(UpdateList(hwnd,mp1)) { 2770 FreeList(mp1); 2771 RemoveDeleted(hwnd); 2772 ReSort(hwnd); 2773 WinInvalidateRect(hwnd,NULL,FALSE); 2774 } 2775 DosReleaseMutexSem(pAD->ScanSem); 2776 WinSetPointer(HWND_DESKTOP,hptrArrow); 2777 } 2742 2778 } 2743 2779 return 0; … … 2745 2781 case UM_SETUP2: 2746 2782 // fprintf(stderr,"Seeall: UM_SETUP2\n"); 2747 if( ad) {2748 2749 CHAR s[256];2750 BOOL once = FALSE;2751 ULONG x,ulDriveNum,ulDriveMap;2752 2753 strcpy(s,2754 GetPString(IDS_SEEALLTITLETEXT));2755 if(!*ad->findpath) {2756 DosError(FERR_DISABLEHARDERR);2757 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) {2758 for(x = 2L;x < 26L && !ad->stopflag;x++) {2759 if((ulDriveMap & (1L << x)) && ad->drvsflags[x]) {2760 sprintf(&s[strlen(s)],2761 "%s%c:",2762 (once) ? ", " : " (",2763 x + 'A');2764 once = TRUE;2765 }2766 }2767 if(once)2768 strcat(s,")");2769 }2770 }2771 else {2772 strcat(s," (");2773 strcat(s,ad->findpath);2774 strcat(s,")");2775 }2776 WinSetWindowText(WinQueryWindow(hwnd,QW_PARENT),s);2783 if(pAD) { 2784 2785 CHAR s[256]; 2786 BOOL once = FALSE; 2787 ULONG x,ulDriveNum,ulDriveMap; 2788 2789 strcpy(s, 2790 GetPString(IDS_SEEALLTITLETEXT)); 2791 if(!*pAD->findpath) { 2792 DosError(FERR_DISABLEHARDERR); 2793 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) { 2794 for(x = 2L;x < 26L && !pAD->stopflag;x++) { 2795 if((ulDriveMap & (1L << x)) && pAD->drvsflags[x]) { 2796 sprintf(&s[strlen(s)], 2797 "%s%c:", 2798 (once) ? ", " : " (", 2799 x + 'A'); 2800 once = TRUE; 2801 } 2802 } 2803 if(once) 2804 strcat(s,")"); 2805 } 2806 } 2807 else { 2808 strcat(s," ("); 2809 strcat(s,pAD->findpath); 2810 strcat(s,")"); 2811 } 2812 WinSetWindowText(WinQueryWindow(hwnd,QW_PARENT),s); 2777 2813 } 2778 2814 return 0; … … 2780 2816 case UM_SETUP3: 2781 2817 // fprintf(stderr,"Seeall: UM_SETUP3\n"); 2782 if( ad) {2783 ad->multiplier = ad->afifiles / 32767;2784 if(ad->multiplier * 32767 != ad->afifiles)2785 ad->multiplier++;2786 if(!ad->multiplier)2787 ad->multiplier++;2788 {2789 RECTL Rectl;2790 ULONG numlines;2791 2792 WinQueryWindowRect(hwnd,&Rectl);2793 numlines = NumLines(&Rectl,ad);2794 if(numlines) {2795 WinSendMsg(ad->hhscroll,SBM_SETTHUMBSIZE,2796 MPFROM2SHORT((SHORT)Rectl.xRight,(SHORT)ad->maxx),2797 MPVOID);2798 WinSendMsg(ad->hvscroll,SBM_SETTHUMBSIZE,2799 MPFROM2SHORT((SHORT)numlines,2800 (SHORT)min(ad->afifiles,32767)),2801 MPFROM2SHORT(1,ad->afifiles + 1));2802 WinSendMsg(ad->hhscroll,SBM_SETSCROLLBAR,2803 MPFROMSHORT((SHORT)abs(ad->horzscroll)),2804 MPFROM2SHORT(0,(SHORT)(ad->maxx - Rectl.xRight)));2805 WinSendMsg(ad->hvscroll,SBM_SETSCROLLBAR,2806 MPFROMSHORT((SHORT)(ad->topfile / ad->multiplier)),2807 MPFROM2SHORT(1,2808 (SHORT)(ad->afifiles / ad->multiplier) -2809 (numlines - 1)));2810 if(ad->afifiles - ad->topfile < numlines) {2811 ad->topfile = ((ad->afifiles - ad->topfile) - numlines);2812 WinInvalidateRect(hwnd,NULL,FALSE);2813 }2814 }2815 }2818 if(pAD) { 2819 pAD->multiplier = pAD->afifiles / 32767; 2820 if(pAD->multiplier * 32767 != pAD->afifiles) 2821 pAD->multiplier++; 2822 if(!pAD->multiplier) 2823 pAD->multiplier++; 2824 { 2825 RECTL Rectl; 2826 ULONG numlines; 2827 2828 WinQueryWindowRect(hwnd,&Rectl); 2829 numlines = NumLines(&Rectl,pAD); 2830 if(numlines) { 2831 WinSendMsg(pAD->hhscroll,SBM_SETTHUMBSIZE, 2832 MPFROM2SHORT((SHORT)Rectl.xRight,(SHORT)pAD->maxx), 2833 MPVOID); 2834 WinSendMsg(pAD->hvscroll,SBM_SETTHUMBSIZE, 2835 MPFROM2SHORT((SHORT)numlines, 2836 (SHORT)min(pAD->afifiles,32767)), 2837 MPFROM2SHORT(1,pAD->afifiles + 1)); 2838 WinSendMsg(pAD->hhscroll,SBM_SETSCROLLBAR, 2839 MPFROMSHORT((SHORT)abs(pAD->horzscroll)), 2840 MPFROM2SHORT(0,(SHORT)(pAD->maxx - Rectl.xRight))); 2841 WinSendMsg(pAD->hvscroll,SBM_SETSCROLLBAR, 2842 MPFROMSHORT((SHORT)(pAD->topfile / pAD->multiplier)), 2843 MPFROM2SHORT(1, 2844 (SHORT)(pAD->afifiles / pAD->multiplier) - 2845 (numlines - 1))); 2846 if(pAD->afifiles - pAD->topfile < numlines) { 2847 pAD->topfile = ((pAD->afifiles - pAD->topfile) - numlines); 2848 WinInvalidateRect(hwnd,NULL,FALSE); 2849 } 2850 } 2851 } 2816 2852 } 2817 2853 return 0; … … 2819 2855 case UM_SETUP4: 2820 2856 // fprintf(stderr,"Seeall: UM_SETUP4\n"); 2821 if( ad)2822 ad->killme = TRUE;2857 if(pAD) 2858 pAD->killme = TRUE; 2823 2859 else 2824 PostMsg((HWND)0,WM_QUIT,MPVOID,MPVOID);2860 PostMsg((HWND)0,WM_QUIT,MPVOID,MPVOID); 2825 2861 return 0; 2826 2862 2827 2863 case UM_RESCAN: 2828 // fprintf(stderr,"Seeall: UM_RESCAN\n"); 2829 if(ad && !ad->stopflag) { 2830 if(DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) { 2831 2832 CHAR s[CCHMAXPATH + 80],tm[34]; 2833 2834 if(mp1) { 2835 strcpy(s, 2836 GetPString(IDS_SORTINGTEXT)); 2837 if(ad->afifiles) { 2838 *tm = 0; 2839 commafmt(tm,sizeof(tm),ad->afifiles); 2840 strcat(s,tm); 2841 } 2842 } 2843 else { 2844 strcpy(s, 2845 GetPString(IDS_WORKINGTEXT)); 2846 if(ad->affiles) { 2847 *tm = 0; 2848 commafmt(tm,sizeof(tm),ad->affiles); 2849 strcat(s,tm); 2850 } 2851 } 2852 if(mp2) { 2853 strcat(s," "); 2854 strcat(s,(CHAR *)mp2); 2855 } 2856 WinSetWindowText(ad->hwndStatus,s); 2857 } 2858 else { 2859 2860 CHAR s[(CCHMAXPATH * 2) + 80],tm[34],ts[34],tb[34]; 2861 ULONG y; 2862 2863 if(mp1) { 2864 strcpy(s, 2865 GetPString(IDS_SORTINGTEXT)); 2866 if(ad->afifiles) { 2867 *tm = 0; 2868 commafmt(tm,sizeof(tm),ad->afifiles); 2869 strcat(s,tm); 2870 } 2871 if(mp2) { 2872 strcat(s," "); 2873 strcat(s,(CHAR *)mp2); 2874 } 2875 } 2876 else if(ad->afifiles) { 2877 y = (ad->invertsort) ? (ad->afifiles - 1) - (ad->cursored - 1) : 2878 ad->cursored - 1; 2879 *tm = *ts = *tb = 0; 2880 commafmt(tm,sizeof(tm),ad->afifiles); 2881 commafmt(ts,sizeof(ts),ad->selected); 2882 commafmt(tb,sizeof(tb),ad->selbytes / 1024); 2883 sprintf(s, 2884 " %s %s%s%s %s %s (%sk) %s %s", 2885 tm, 2886 GetPString(IDS_FILETEXT), 2887 &"s"[ad->afifiles == 1], 2888 (*ad->mask.szMask || 2889 (ad->mask.attrFile & (~FILE_DIRECTORY)) != 2890 (ALLATTRS & (~FILE_DIRECTORY)) || 2891 ad->mask.antiattr) ? 2892 GetPString(IDS_FILTEREDTEXT) : 2893 NullStr, 2894 ts, 2895 GetPString(IDS_SELECTEDTEXT), 2896 tb, 2897 GetPString(IDS_CURRTEXT), 2898 ad->afindex[y]->fullname); 2899 } 2900 else 2901 sprintf(s, 2902 GetPString(IDS_NOFILESPSTEXT), 2903 (*ad->mask.szMask || 2904 (ad->mask.attrFile & (~FILE_DIRECTORY)) != 2905 (ALLATTRS & (~FILE_DIRECTORY)) || 2906 ad->mask.antiattr) ? 2907 GetPString(IDS_FILTEREDTEXT) : 2908 NullStr); 2909 WinSetWindowText(ad->hwndStatus,s); 2910 DosReleaseMutexSem(ad->ScanSem); 2911 } 2864 // fprintf(stderr,"Seeall: UM_RESCAN\n"); 2865 if(pAD && !pAD->stopflag) { 2866 if(DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 2867 2868 CHAR s[CCHMAXPATH + 80],tm[34]; 2869 2870 if(mp1) { 2871 strcpy(s, 2872 GetPString(IDS_SORTINGTEXT)); 2873 if(pAD->afifiles) { 2874 *tm = 0; 2875 commafmt(tm,sizeof(tm),pAD->afifiles); 2876 strcat(s,tm); 2877 } 2878 } 2879 else { 2880 strcpy(s, 2881 GetPString(IDS_WORKINGTEXT)); 2882 if(pAD->affiles) { 2883 *tm = 0; 2884 commafmt(tm,sizeof(tm),pAD->affiles); 2885 strcat(s,tm); 2886 } 2887 } 2888 if(mp2) { 2889 strcat(s," "); 2890 strcat(s,(CHAR *)mp2); 2891 } 2892 WinSetWindowText(pAD->hwndStatus,s); 2893 } 2894 else { 2895 2896 CHAR s[(CCHMAXPATH * 2) + 80],tm[34],ts[34],tb[34]; 2897 ULONG y; 2898 2899 if(mp1) { 2900 strcpy(s, 2901 GetPString(IDS_SORTINGTEXT)); 2902 if(pAD->afifiles) { 2903 *tm = 0; 2904 commafmt(tm,sizeof(tm),pAD->afifiles); 2905 strcat(s,tm); 2906 } 2907 if(mp2) { 2908 strcat(s," "); 2909 strcat(s,(CHAR *)mp2); 2910 } 2911 } 2912 else if(pAD->afifiles) { 2913 y = (pAD->invertsort) ? (pAD->afifiles - 1) - (pAD->cursored - 1) : 2914 pAD->cursored - 1; 2915 *tm = *ts = *tb = 0; 2916 commafmt(tm,sizeof(tm),pAD->afifiles); 2917 commafmt(ts,sizeof(ts),pAD->selected); 2918 2919 // Normalize 2920 ul = pAD->ulSelectedBytes; 2921 if ((long)ul > 0) { 2922 pAD->ulSelectedKB += ul >> 10; 2923 pAD->ulSelectedBytes = ul & 0x3ff; 2924 } 2925 else if ((long)ul < 0) { 2926 ul = -ul; 2927 pAD->ulSelectedKB -= (ul >> 10) + 1; 2928 pAD->ulSelectedBytes = 1024 - (ul & 0x3ff); 2929 } 2930 2931 commafmt(tb,sizeof(tb),pAD->ulSelectedKB); 2932 sprintf(s, 2933 " %s %s%s%s %s %s (%sk) %s %s", 2934 tm, 2935 GetPString(IDS_FILETEXT), 2936 &"s"[pAD->afifiles == 1], 2937 (*pAD->mask.szMask || 2938 (pAD->mask.attrFile & (~FILE_DIRECTORY)) != 2939 (ALLATTRS & (~FILE_DIRECTORY)) || 2940 pAD->mask.antiattr) ? 2941 GetPString(IDS_FILTEREDTEXT) : 2942 NullStr, 2943 ts, 2944 GetPString(IDS_SELECTEDTEXT), 2945 tb, 2946 GetPString(IDS_CURRTEXT), 2947 pAD->afindex[y]->fullname); 2948 } 2949 else 2950 sprintf(s, 2951 GetPString(IDS_NOFILESPSTEXT), 2952 (*pAD->mask.szMask || 2953 (pAD->mask.attrFile & (~FILE_DIRECTORY)) != 2954 (ALLATTRS & (~FILE_DIRECTORY)) || 2955 pAD->mask.antiattr) ? 2956 GetPString(IDS_FILTEREDTEXT) : 2957 NullStr); 2958 WinSetWindowText(pAD->hwndStatus,s); 2959 DosReleaseMutexSem(pAD->ScanSem); 2960 } 2912 2961 } 2913 2962 return 0; … … 2915 2964 case UM_SETUP: 2916 2965 // fprintf(stderr,"Seeall: UM_SETUP\n"); 2917 if( ad) {2918 WinSendMsg(ad->hvscroll,SBM_SETTHUMBSIZE,MPFROM2SHORT(1,1),2919 MPVOID);2920 WinSendMsg(ad->hhscroll,SBM_SETTHUMBSIZE,MPFROM2SHORT(1,1),2921 MPVOID);2922 WinSetActiveWindow(HWND_DESKTOP,WinQueryWindow(hwnd,QW_PARENT));2966 if(pAD) { 2967 WinSendMsg(pAD->hvscroll,SBM_SETTHUMBSIZE,MPFROM2SHORT(1,1), 2968 MPVOID); 2969 WinSendMsg(pAD->hhscroll,SBM_SETTHUMBSIZE,MPFROM2SHORT(1,1), 2970 MPVOID); 2971 WinSetActiveWindow(HWND_DESKTOP,WinQueryWindow(hwnd,QW_PARENT)); 2923 2972 } 2924 2973 return 0; … … 2926 2975 case WM_CHAR: 2927 2976 shiftstate = (SHORT1FROMMP(mp1) & (KC_SHIFT | KC_ALT | KC_CTRL)); 2928 if( ad&& !(SHORT1FROMMP(mp1) & KC_KEYUP)) {2929 2930 register ULONG x;2931 ULONG numlines,y,wascursored = ad->cursored,2932 thistime,len;2933 BOOL found = FALSE;2934 RECTL rcl;2935 2936 WinQueryWindowRect(hwnd,&rcl);2937 numlines = NumLines(&rcl,ad);2938 if(numlines) {2939 if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {2940 ad->lasttime = 0;2941 *ad->comnam = 0;2942 switch(SHORT2FROMMP(mp2)) {2943 case VK_DELETE:2944 if((shiftstate & KC_CTRL) == KC_CTRL)2945 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_PERMDELETE,0),MPVOID);2946 else if((shiftstate & KC_SHIFT) == KC_SHIFT)2947 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_SAVETOCLIP,0),MPVOID);2948 else2949 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_DELETE,0),MPVOID);2950 break;2951 case VK_LEFT:2952 WinSendMsg(hwnd,WM_HSCROLL,MPFROM2SHORT(FID_HORZSCROLL,0),2953 MPFROM2SHORT(0,SB_LINELEFT));2954 break;2955 case VK_RIGHT:2956 WinSendMsg(hwnd,WM_HSCROLL,MPFROM2SHORT(FID_HORZSCROLL,0),2957 MPFROM2SHORT(0,SB_LINERIGHT));2958 break;2959 case VK_PAGEUP:2960 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0),2961 MPFROM2SHORT(0,SB_PAGEUP));2962 break;2963 case VK_PAGEDOWN:2964 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0),2965 MPFROM2SHORT(0,SB_PAGEDOWN));2966 break;2967 case VK_UP:2968 if(ad->cursored > 1) {2969 if(shiftstate & KC_SHIFT)2970 WinSendMsg(hwnd,WM_BUTTON1CLICK,2971 MPFROM2SHORT(ad->fattrs.lAveCharWidth + 2,2972 ((rcl.yTop - (ad->lMaxHeight *2973 ((ad->cursored) - ad->topfile))) -2974 ad->lMaxDescender) - 1),2975 MPFROM2SHORT(TRUE,0));2976 ad->cursored--;2977 if(ad->cursored < ad->topfile) {2978 PaintLine(hwnd,ad->hps,ad->cursored,ad->topfile,&rcl);2979 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0),2980 MPFROM2SHORT(0,SB_LINEUP));2981 }2982 else {2983 PaintLine(hwnd,ad->hps,ad->cursored - 1,ad->topfile,&rcl);2984 PaintLine(hwnd,ad->hps,ad->cursored,ad->topfile,&rcl);2985 }2986 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);2987 }2988 break;2989 case VK_DOWN:2990 if(ad->cursored < ad->afifiles && ad->cursored < ad->topfile + numlines) {2991 if(shiftstate & KC_SHIFT)2992 WinSendMsg(hwnd,WM_BUTTON1CLICK,2993 MPFROM2SHORT(ad->fattrs.lAveCharWidth + 2,2994 ((rcl.yTop - (ad->lMaxHeight *2995 ((ad->cursored) - ad->topfile))) -2996 ad->lMaxDescender) - 1),2997 MPFROM2SHORT(TRUE,0));2998 ad->cursored++;2999 if(ad->cursored >= ad->topfile + numlines) {3000 PaintLine(hwnd,ad->hps,ad->cursored - 2,ad->topfile,&rcl);3001 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0),3002 MPFROM2SHORT(0,SB_LINEDOWN));3003 }3004 else {3005 PaintLine(hwnd,ad->hps,ad->cursored - 1,ad->topfile,&rcl);3006 PaintLine(hwnd,ad->hps,ad->cursored - 2,ad->topfile,&rcl);3007 }3008 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);3009 }3010 break;3011 case VK_END:3012 if((shiftstate & KC_CTRL) ||3013 ad->cursored == (ad->topfile - 1) + numlines) {3014 ad->cursored = ad->afifiles;3015 ad->topfile = (ad->afifiles + 1) - numlines;3016 if(ad->topfile > ad->afifiles)3017 ad->topfile = 1;3018 WinInvalidateRect(hwnd,NULL,FALSE);3019 }3020 else {3021 ad->cursored = (ad->topfile - 1) + numlines;3022 if(ad->cursored > ad->afifiles)3023 ad->cursored = ad->afifiles;3024 PaintLine(hwnd,ad->hps,ad->cursored - 1,ad->topfile,&rcl);3025 PaintLine(hwnd,ad->hps,wascursored - 1,ad->topfile,&rcl);3026 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);3027 }3028 break;3029 case VK_HOME:3030 if((shiftstate & KC_CTRL) ||3031 ad->cursored == ad->topfile) {3032 ad->topfile = 1;3033 ad->cursored = 1;3034 WinInvalidateRect(hwnd,NULL,FALSE);3035 }3036 else {3037 ad->cursored = ad->topfile;3038 PaintLine(hwnd,ad->hps,ad->cursored - 1,ad->topfile,&rcl);3039 PaintLine(hwnd,ad->hps,wascursored - 1,ad->topfile,&rcl);3040 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);3041 }3042 break;3043 case VK_SPACE:3044 WinSendMsg(hwnd,WM_BUTTON1CLICK,3045 MPFROM2SHORT(ad->fattrs.lAveCharWidth + 2,3046 ((rcl.yTop - (ad->lMaxHeight *3047 ((ad->cursored) - ad->topfile))) -3048 ad->lMaxDescender) - 1),3049 MPFROM2SHORT(TRUE,0));3050 break;3051 case VK_NEWLINE:3052 case VK_ENTER:3053 WinSendMsg(hwnd,WM_BUTTON1DBLCLK,3054 MPFROM2SHORT(ad->fattrs.lAveCharWidth + 2,3055 ((rcl.yTop - (ad->lMaxHeight *3056 ((ad->cursored) - ad->topfile))) -3057 ad->lMaxDescender) - 1),3058 MPFROM2SHORT(0,0));3059 break;3060 }3061 }3062 else if(SHORT1FROMMP(mp1) & KC_CHAR) {3063 switch(SHORT1FROMMP(mp2)) {3064 case '\x1b':3065 case '\r':3066 case '\n':3067 WinSendMsg(hwnd,WM_BUTTON1DBLCLK,3068 MPFROM2SHORT(ad->fattrs.lAveCharWidth + 2,3069 (rcl.yTop - (ad->lMaxHeight *3070 ((ad->cursored) - ad->topfile))) - 1),3071 MPFROM2SHORT(0,0));3072 ad->lasttime = 0;3073 *ad->comnam = 0;3074 break;3075 default:3076 thistime = WinQueryMsgTime(WinQueryAnchorBlock(hwnd));3077 if(thistime > ad->lasttime + 1000)3078 *ad->comnam = 0;3079 ad->lasttime = thistime;2977 if(pAD && !(SHORT1FROMMP(mp1) & KC_KEYUP)) { 2978 2979 register ULONG x; 2980 ULONG numlines,y,wascursored = pAD->cursored, 2981 thistime,len; 2982 BOOL found = FALSE; 2983 RECTL rcl; 2984 2985 WinQueryWindowRect(hwnd,&rcl); 2986 numlines = NumLines(&rcl,pAD); 2987 if(numlines) { 2988 if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) { 2989 pAD->lasttime = 0; 2990 *pAD->comnam = 0; 2991 switch(SHORT2FROMMP(mp2)) { 2992 case VK_DELETE: 2993 if((shiftstate & KC_CTRL) == KC_CTRL) 2994 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_PERMDELETE,0),MPVOID); 2995 else if((shiftstate & KC_SHIFT) == KC_SHIFT) 2996 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_SAVETOCLIP,0),MPVOID); 2997 else 2998 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_DELETE,0),MPVOID); 2999 break; 3000 case VK_LEFT: 3001 WinSendMsg(hwnd,WM_HSCROLL,MPFROM2SHORT(FID_HORZSCROLL,0), 3002 MPFROM2SHORT(0,SB_LINELEFT)); 3003 break; 3004 case VK_RIGHT: 3005 WinSendMsg(hwnd,WM_HSCROLL,MPFROM2SHORT(FID_HORZSCROLL,0), 3006 MPFROM2SHORT(0,SB_LINERIGHT)); 3007 break; 3008 case VK_PAGEUP: 3009 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0), 3010 MPFROM2SHORT(0,SB_PAGEUP)); 3011 break; 3012 case VK_PAGEDOWN: 3013 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0), 3014 MPFROM2SHORT(0,SB_PAGEDOWN)); 3015 break; 3016 case VK_UP: 3017 if(pAD->cursored > 1) { 3018 if(shiftstate & KC_SHIFT) 3019 WinSendMsg(hwnd,WM_BUTTON1CLICK, 3020 MPFROM2SHORT(pAD->fattrs.lAveCharWidth + 2, 3021 ((rcl.yTop - (pAD->lMaxHeight * 3022 ((pAD->cursored) - pAD->topfile))) - 3023 pAD->lMaxDescender) - 1), 3024 MPFROM2SHORT(TRUE,0)); 3025 pAD->cursored--; 3026 if(pAD->cursored < pAD->topfile) { 3027 PaintLine(hwnd,pAD->hps,pAD->cursored,pAD->topfile,&rcl); 3028 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0), 3029 MPFROM2SHORT(0,SB_LINEUP)); 3030 } 3031 else { 3032 PaintLine(hwnd,pAD->hps,pAD->cursored - 1,pAD->topfile,&rcl); 3033 PaintLine(hwnd,pAD->hps,pAD->cursored,pAD->topfile,&rcl); 3034 } 3035 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3036 } 3037 break; 3038 case VK_DOWN: 3039 if(pAD->cursored < pAD->afifiles && pAD->cursored < pAD->topfile + numlines) { 3040 if(shiftstate & KC_SHIFT) 3041 WinSendMsg(hwnd,WM_BUTTON1CLICK, 3042 MPFROM2SHORT(pAD->fattrs.lAveCharWidth + 2, 3043 ((rcl.yTop - (pAD->lMaxHeight * 3044 ((pAD->cursored) - pAD->topfile))) - 3045 pAD->lMaxDescender) - 1), 3046 MPFROM2SHORT(TRUE,0)); 3047 pAD->cursored++; 3048 if(pAD->cursored >= pAD->topfile + numlines) { 3049 PaintLine(hwnd,pAD->hps,pAD->cursored - 2,pAD->topfile,&rcl); 3050 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0), 3051 MPFROM2SHORT(0,SB_LINEDOWN)); 3052 } 3053 else { 3054 PaintLine(hwnd,pAD->hps,pAD->cursored - 1,pAD->topfile,&rcl); 3055 PaintLine(hwnd,pAD->hps,pAD->cursored - 2,pAD->topfile,&rcl); 3056 } 3057 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3058 } 3059 break; 3060 case VK_END: 3061 if((shiftstate & KC_CTRL) || 3062 pAD->cursored == (pAD->topfile - 1) + numlines) { 3063 pAD->cursored = pAD->afifiles; 3064 pAD->topfile = (pAD->afifiles + 1) - numlines; 3065 if(pAD->topfile > pAD->afifiles) 3066 pAD->topfile = 1; 3067 WinInvalidateRect(hwnd,NULL,FALSE); 3068 } 3069 else { 3070 pAD->cursored = (pAD->topfile - 1) + numlines; 3071 if(pAD->cursored > pAD->afifiles) 3072 pAD->cursored = pAD->afifiles; 3073 PaintLine(hwnd,pAD->hps,pAD->cursored - 1,pAD->topfile,&rcl); 3074 PaintLine(hwnd,pAD->hps,wascursored - 1,pAD->topfile,&rcl); 3075 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3076 } 3077 break; 3078 case VK_HOME: 3079 if((shiftstate & KC_CTRL) || 3080 pAD->cursored == pAD->topfile) { 3081 pAD->topfile = 1; 3082 pAD->cursored = 1; 3083 WinInvalidateRect(hwnd,NULL,FALSE); 3084 } 3085 else { 3086 pAD->cursored = pAD->topfile; 3087 PaintLine(hwnd,pAD->hps,pAD->cursored - 1,pAD->topfile,&rcl); 3088 PaintLine(hwnd,pAD->hps,wascursored - 1,pAD->topfile,&rcl); 3089 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3090 } 3091 break; 3092 case VK_SPACE: 3093 WinSendMsg(hwnd,WM_BUTTON1CLICK, 3094 MPFROM2SHORT(pAD->fattrs.lAveCharWidth + 2, 3095 ((rcl.yTop - (pAD->lMaxHeight * 3096 ((pAD->cursored) - pAD->topfile))) - 3097 pAD->lMaxDescender) - 1), 3098 MPFROM2SHORT(TRUE,0)); 3099 break; 3100 case VK_NEWLINE: 3101 case VK_ENTER: 3102 WinSendMsg(hwnd,WM_BUTTON1DBLCLK, 3103 MPFROM2SHORT(pAD->fattrs.lAveCharWidth + 2, 3104 ((rcl.yTop - (pAD->lMaxHeight * 3105 ((pAD->cursored) - pAD->topfile))) - 3106 pAD->lMaxDescender) - 1), 3107 MPFROM2SHORT(0,0)); 3108 break; 3109 } 3110 } 3111 else if(SHORT1FROMMP(mp1) & KC_CHAR) { 3112 switch(SHORT1FROMMP(mp2)) { 3113 case '\x1b': 3114 case '\r': 3115 case '\n': 3116 WinSendMsg(hwnd,WM_BUTTON1DBLCLK, 3117 MPFROM2SHORT(pAD->fattrs.lAveCharWidth + 2, 3118 (rcl.yTop - (pAD->lMaxHeight * 3119 ((pAD->cursored) - pAD->topfile))) - 1), 3120 MPFROM2SHORT(0,0)); 3121 pAD->lasttime = 0; 3122 *pAD->comnam = 0; 3123 break; 3124 default: 3125 thistime = WinQueryMsgTime(WinQueryAnchorBlock(hwnd)); 3126 if(thistime > pAD->lasttime + 1000) 3127 *pAD->comnam = 0; 3128 pAD->lasttime = thistime; 3080 3129 KbdRetry: 3081 len = strlen(ad->comnam);3082 if(len >= CCHMAXPATH - 1) {3083 *ad->comnam = 0;3084 len = 0;3085 }3086 ad->comnam[len] = toupper(SHORT1FROMMP(mp2));3087 ad->comnam[len + 1] = 0;3088 for(x = ad->cursored - (len > 0);x < ad->afifiles;x++) {3089 y = (ad->invertsort) ? (ad->afifiles - 1) - x : x;3090 if(ad->fullnames) {3091 if(!strnicmp(ad->afindex[y]->fullname,ad->comnam,3092 len + 1)) {3093 found = TRUE;3094 break;3095 }3096 }3097 else {3098 if(!strnicmp(ad->afindex[y]->filename,ad->comnam,3099 len + 1)) {3100 found = TRUE;3101 break;3102 }3103 }3104 }3105 if(!found) {3106 for(x = 0;x < ad->cursored - (len > 0);x++) {3107 y = (ad->invertsort) ? (ad->afifiles - 1) - x : x;3108 if(ad->fullnames) {3109 if(!strnicmp(ad->afindex[y]->fullname,ad->comnam,3110 len + 1)) {3111 found = TRUE;3112 break;3113 }3114 }3115 else {3116 if(!strnicmp(ad->afindex[y]->filename,ad->comnam,3117 len + 1)) {3118 found = TRUE;3119 break;3120 }3121 }3122 }3123 }3124 if(found) {3125 if(x + 1 != ad->cursored) {3126 ad->cursored = x + 1;3127 if(ad->cursored >= ad->topfile &&3128 ad->cursored < ad->topfile + numlines &&3129 wascursored != ad->cursored) {3130 PaintLine(hwnd,ad->hps,ad->cursored - 1,ad->topfile,&rcl);3131 PaintLine(hwnd,ad->hps,wascursored - 1,ad->topfile,&rcl);3132 }3133 else {3134 if(ad->cursored < numlines)3135 ad->topfile = 1;3136 else if(ad->cursored > (ad->afifiles + 1) - (numlines / 2))3137 ad->topfile = (ad->afifiles + 1) - numlines;3138 else3139 ad->topfile = ad->cursored - (numlines / 2);3140 WinInvalidateRect(hwnd,NULL,FALSE);3141 }3142 }3143 }3144 else {3145 *ad->comnam = 0;3146 ad->lasttime = 0;3147 if(len) // retry as first letter if no match3148 goto KbdRetry;3149 }3150 break;3151 }3152 }3153 }3130 len = strlen(pAD->comnam); 3131 if(len >= CCHMAXPATH - 1) { 3132 *pAD->comnam = 0; 3133 len = 0; 3134 } 3135 pAD->comnam[len] = toupper(SHORT1FROMMP(mp2)); 3136 pAD->comnam[len + 1] = 0; 3137 for(x = pAD->cursored - (len > 0);x < pAD->afifiles;x++) { 3138 y = (pAD->invertsort) ? (pAD->afifiles - 1) - x : x; 3139 if(pAD->fullnames) { 3140 if(!strnicmp(pAD->afindex[y]->fullname,pAD->comnam, 3141 len + 1)) { 3142 found = TRUE; 3143 break; 3144 } 3145 } 3146 else { 3147 if(!strnicmp(pAD->afindex[y]->filename,pAD->comnam, 3148 len + 1)) { 3149 found = TRUE; 3150 break; 3151 } 3152 } 3153 } 3154 if(!found) { 3155 for(x = 0;x < pAD->cursored - (len > 0);x++) { 3156 y = (pAD->invertsort) ? (pAD->afifiles - 1) - x : x; 3157 if(pAD->fullnames) { 3158 if(!strnicmp(pAD->afindex[y]->fullname,pAD->comnam, 3159 len + 1)) { 3160 found = TRUE; 3161 break; 3162 } 3163 } 3164 else { 3165 if(!strnicmp(pAD->afindex[y]->filename,pAD->comnam, 3166 len + 1)) { 3167 found = TRUE; 3168 break; 3169 } 3170 } 3171 } 3172 } 3173 if(found) { 3174 if(x + 1 != pAD->cursored) { 3175 pAD->cursored = x + 1; 3176 if(pAD->cursored >= pAD->topfile && 3177 pAD->cursored < pAD->topfile + numlines && 3178 wascursored != pAD->cursored) { 3179 PaintLine(hwnd,pAD->hps,pAD->cursored - 1,pAD->topfile,&rcl); 3180 PaintLine(hwnd,pAD->hps,wascursored - 1,pAD->topfile,&rcl); 3181 } 3182 else { 3183 if(pAD->cursored < numlines) 3184 pAD->topfile = 1; 3185 else if(pAD->cursored > (pAD->afifiles + 1) - (numlines / 2)) 3186 pAD->topfile = (pAD->afifiles + 1) - numlines; 3187 else 3188 pAD->topfile = pAD->cursored - (numlines / 2); 3189 WinInvalidateRect(hwnd,NULL,FALSE); 3190 } 3191 } 3192 } 3193 else { 3194 *pAD->comnam = 0; 3195 pAD->lasttime = 0; 3196 if(len) // retry as first letter if no match 3197 goto KbdRetry; 3198 } 3199 break; 3200 } 3201 } 3202 } 3154 3203 } 3155 3204 break; … … 3163 3212 case WM_BEGINDRAG: 3164 3213 { 3165 CHAR **list;3166 3167 list = BuildAList(hwnd);3168 if(list) {3169 WinSetWindowText(ad->hwndStatus,3170 GetPString(IDS_DRAGGINGFILESTEXT));3171 DragList(hwnd,3172 (HWND)0,3173 list,3174 TRUE);3175 FreeList(list);3176 PostMsg(hwnd,3177 UM_RESCAN,3178 MPVOID,3179 MPVOID);3180 }3181 else3182 DosBeep(50,100);3214 CHAR **list; 3215 3216 list = BuildAList(hwnd); 3217 if(list) { 3218 WinSetWindowText(pAD->hwndStatus, 3219 GetPString(IDS_DRAGGINGFILESTEXT)); 3220 DragList(hwnd, 3221 (HWND)0, 3222 list, 3223 TRUE); 3224 FreeList(list); 3225 PostMsg(hwnd, 3226 UM_RESCAN, 3227 MPVOID, 3228 MPVOID); 3229 } 3230 else 3231 DosBeep(50,100); 3183 3232 } 3184 3233 break; 3185 3234 3186 3235 case WM_BUTTON1MOTIONSTART: 3187 if( ad && !ad->stopflag &&3188 !DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) {3189 ad->mousecaptured = TRUE;3190 ad->lastselected = (ULONG)-1;3191 ad->lastdirection = 0;3192 WinSetCapture(HWND_DESKTOP,hwnd);3193 DosReleaseMutexSem(ad->ScanSem);3194 WinSendMsg(hwnd,WM_BUTTON1CLICK,mp1,MPFROM2SHORT(TRUE,0));3236 if(pAD && !pAD->stopflag && 3237 !DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 3238 pAD->mousecaptured = TRUE; 3239 pAD->lastselected = (ULONG)-1; 3240 pAD->lastdirection = 0; 3241 WinSetCapture(HWND_DESKTOP,hwnd); 3242 DosReleaseMutexSem(pAD->ScanSem); 3243 WinSendMsg(hwnd,WM_BUTTON1CLICK,mp1,MPFROM2SHORT(TRUE,0)); 3195 3244 } 3196 3245 break; … … 3198 3247 case WM_MOUSEMOVE: 3199 3248 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL)); 3200 if(ad && ad->mousecaptured) { 3201 3202 ULONG numlines,whichfile,y,x; 3203 LONG inc; 3204 RECTL Rectl; 3205 POINTS pts; 3206 BOOL outofwindow = FALSE; 3207 3208 WinQueryWindowRect(hwnd,&Rectl); 3209 numlines = NumLines(&Rectl,ad); 3210 if(numlines) { 3211 pts.x = SHORT1FROMMP(mp1); 3212 pts.y = SHORT2FROMMP(mp1); 3213 if(pts.y < 0) { 3214 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0), 3215 MPFROM2SHORT(0,SB_LINEDOWN)); 3216 pts.y = 1; 3217 outofwindow = TRUE; 3218 } 3219 else if(pts.y > Rectl.yTop - Rectl.yBottom) { 3220 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0), 3221 MPFROM2SHORT(0,SB_LINEUP)); 3222 pts.y = (Rectl.yTop - Rectl.yBottom) - 1; 3223 outofwindow = TRUE; 3224 } 3225 whichfile = ((Rectl.yTop - Rectl.yBottom) - 3226 ((LONG)pts.y + ad->lMaxDescender)) / 3227 ad->lMaxHeight; 3228 if(whichfile > numlines - 1) 3229 whichfile = numlines - 1; 3230 whichfile += (ad->topfile - 1); 3231 y = (ad->invertsort) ? (ad->afifiles - 1) - whichfile : whichfile; 3232 if(y < ad->afifiles && ad->lastselected != whichfile) { 3233 if(ad->lastselected != (ULONG)-1) { 3234 inc = (ad->lastselected < whichfile) ? 1 : -1; 3235 for(x = ad->lastselected + inc; 3236 x != whichfile && x < ad->afifiles; 3237 (ad->lastselected < whichfile) ? x++ : x--) { 3238 y = (ad->invertsort) ? (ad->afifiles - 1) - x : x; 3239 if(ad->afindex[y]->flags & AF_SELECTED) { 3240 ad->afindex[y]->flags &= (~AF_SELECTED); 3241 ad->selected--; 3242 ad->selbytes -= ad->afindex[y]->cbFile; 3243 } 3244 else { 3245 ad->afindex[y]->flags |= AF_SELECTED; 3246 ad->selected++; 3247 ad->selbytes += ad->afindex[y]->cbFile; 3248 } 3249 PaintLine(hwnd,ad->hps,x,ad->topfile,&Rectl); 3250 } 3251 } 3252 WinSendMsg(hwnd,WM_BUTTON1CLICK,MPFROM2SHORT(pts.x,pts.y), 3253 MPFROM2SHORT(TRUE,0)); 3254 } 3255 } 3256 if(outofwindow) { 3257 3258 POINTL ptl; 3259 3260 WinQueryPointerPos(HWND_DESKTOP,&ptl); 3261 WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1L); 3262 if((SHORT)ptl.y == (SHORT)SHORT2FROMMP(mp1) && 3263 (SHORT)ptl.x == (SHORT)SHORT1FROMMP(mp1) && 3264 ((SHORT)ptl.y < 0 || ptl.y > (Rectl.yTop - Rectl.yBottom))) { 3265 PostMsg(hwnd,UM_MOUSEMOVE,mp1,MPVOID); 3266 DosSleep(1L); 3267 } 3268 } 3249 if(pAD && pAD->mousecaptured) { 3250 3251 ULONG numlines,whichfile,y,x; 3252 LONG inc; 3253 RECTL Rectl; 3254 POINTS pts; 3255 BOOL outofwindow = FALSE; 3256 3257 WinQueryWindowRect(hwnd,&Rectl); 3258 numlines = NumLines(&Rectl,pAD); 3259 if(numlines) { 3260 pts.x = SHORT1FROMMP(mp1); 3261 pts.y = SHORT2FROMMP(mp1); 3262 if(pts.y < 0) { 3263 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0), 3264 MPFROM2SHORT(0,SB_LINEDOWN)); 3265 pts.y = 1; 3266 outofwindow = TRUE; 3267 } 3268 else if(pts.y > Rectl.yTop - Rectl.yBottom) { 3269 WinSendMsg(hwnd,WM_VSCROLL,MPFROM2SHORT(FID_VERTSCROLL,0), 3270 MPFROM2SHORT(0,SB_LINEUP)); 3271 pts.y = (Rectl.yTop - Rectl.yBottom) - 1; 3272 outofwindow = TRUE; 3273 } 3274 whichfile = ((Rectl.yTop - Rectl.yBottom) - 3275 ((LONG)pts.y + pAD->lMaxDescender)) / 3276 pAD->lMaxHeight; 3277 if(whichfile > numlines - 1) 3278 whichfile = numlines - 1; 3279 whichfile += (pAD->topfile - 1); 3280 y = (pAD->invertsort) ? (pAD->afifiles - 1) - whichfile : whichfile; 3281 if (y < pAD->afifiles && pAD->lastselected != whichfile) { 3282 if (pAD->lastselected != (ULONG)-1) { 3283 inc = (pAD->lastselected < whichfile) ? 1 : -1; 3284 for (x = pAD->lastselected + inc; 3285 x != whichfile && x < pAD->afifiles; 3286 (pAD->lastselected < whichfile) ? x++ : x--) { 3287 y = (pAD->invertsort) ? (pAD->afifiles - 1) - x : x; 3288 if (pAD->afindex[y]->flags & AF_SELECTED) { 3289 pAD->afindex[y]->flags &= ~AF_SELECTED; 3290 pAD->selected--; 3291 ul = pAD->afindex[y]->cbFile; 3292 pAD->ulSelectedKB -= ul >> 10; 3293 pAD->ulSelectedBytes -= ul & 0x3ff; 3294 } 3295 else { 3296 pAD->afindex[y]->flags |= AF_SELECTED; 3297 pAD->selected++; 3298 ul = pAD->afindex[y]->cbFile; 3299 pAD->ulSelectedKB += ul >> 10; 3300 pAD->ulSelectedBytes += ul & 0x3ff; 3301 } 3302 PaintLine(hwnd,pAD->hps,x,pAD->topfile,&Rectl); 3303 } 3304 } 3305 WinSendMsg(hwnd,WM_BUTTON1CLICK,MPFROM2SHORT(pts.x,pts.y), 3306 MPFROM2SHORT(TRUE,0)); 3307 } 3308 } 3309 if (outofwindow) { 3310 3311 POINTL ptl; 3312 3313 WinQueryPointerPos(HWND_DESKTOP,&ptl); 3314 WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1L); 3315 if((SHORT)ptl.y == (SHORT)SHORT2FROMMP(mp1) && 3316 (SHORT)ptl.x == (SHORT)SHORT1FROMMP(mp1) && 3317 ((SHORT)ptl.y < 0 || ptl.y > (Rectl.yTop - Rectl.yBottom))) { 3318 PostMsg(hwnd,UM_MOUSEMOVE,mp1,MPVOID); 3319 DosSleep(1L); 3320 } 3321 } 3269 3322 } 3270 3323 break; 3271 3324 3272 3325 case UM_MOUSEMOVE: 3273 if( ad && ad->mousecaptured) {3274 3275 POINTL ptl;3276 RECTL Rectl;3277 3278 WinQueryWindowRect(hwnd,&Rectl);3279 WinQueryPointerPos(HWND_DESKTOP,&ptl);3280 WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1L);3281 if((SHORT)ptl.y == (SHORT)SHORT2FROMMP(mp1) &&3282 (SHORT)ptl.x == (SHORT)SHORT1FROMMP(mp1) &&3283 ((SHORT)ptl.y < 0 || ptl.y > (Rectl.yTop - Rectl.yBottom))) {3284 DosSleep(1L);3285 PostMsg(hwnd,WM_MOUSEMOVE,mp1,MPFROM2SHORT(TRUE,0));3286 }3326 if(pAD && pAD->mousecaptured) { 3327 3328 POINTL ptl; 3329 RECTL Rectl; 3330 3331 WinQueryWindowRect(hwnd,&Rectl); 3332 WinQueryPointerPos(HWND_DESKTOP,&ptl); 3333 WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1L); 3334 if((SHORT)ptl.y == (SHORT)SHORT2FROMMP(mp1) && 3335 (SHORT)ptl.x == (SHORT)SHORT1FROMMP(mp1) && 3336 ((SHORT)ptl.y < 0 || ptl.y > (Rectl.yTop - Rectl.yBottom))) { 3337 DosSleep(1L); 3338 PostMsg(hwnd,WM_MOUSEMOVE,mp1,MPFROM2SHORT(TRUE,0)); 3339 } 3287 3340 } 3288 3341 return 0; … … 3290 3343 case WM_BUTTON1UP: 3291 3344 case WM_BUTTON1MOTIONEND: 3292 if( ad) {3293 ad->mousecaptured = FALSE;3294 ad->lastselected = (ULONG)-1;3295 ad->lastdirection = 0;3296 WinSetCapture(HWND_DESKTOP,NULLHANDLE);3345 if(pAD) { 3346 pAD->mousecaptured = FALSE; 3347 pAD->lastselected = (ULONG)-1; 3348 pAD->lastdirection = 0; 3349 WinSetCapture(HWND_DESKTOP,NULLHANDLE); 3297 3350 } 3298 3351 break; … … 3301 3354 case WM_BUTTON1DBLCLK: 3302 3355 shiftstate = (SHORT2FROMMP(mp2) & (KC_SHIFT | KC_ALT | KC_CTRL)); 3303 if(ad && !ad->stopflag && 3304 !DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) { 3305 3306 ULONG numlines,whichfile,y,wascursored; 3307 RECTL Rectl; 3308 POINTS pts; 3309 3310 if(ad->afifiles) { 3311 WinQueryWindowRect(hwnd,&Rectl); 3312 numlines = NumLines(&Rectl,ad); 3313 if(numlines) { 3314 pts.x = SHORT1FROMMP(mp1); 3315 pts.y = SHORT2FROMMP(mp1); 3316 whichfile = ((Rectl.yTop - Rectl.yBottom) - 3317 ((LONG)pts.y + ad->lMaxDescender)) / 3318 ad->lMaxHeight; 3319 if(whichfile > numlines - 1) 3320 whichfile = numlines - 1; 3321 whichfile += (ad->topfile - 1); 3322 if(whichfile + 1 > ad->afifiles) 3323 break; 3324 y = (ad->invertsort) ? (ad->afifiles - 1) - whichfile : whichfile; 3325 wascursored = ad->cursored; 3326 ad->cursored = whichfile + 1; 3327 if(ad->cursored != wascursored) 3328 PaintLine(hwnd,ad->hps,wascursored - 1,ad->topfile,&Rectl); 3329 if(y < ad->afifiles) { 3330 if(msg == WM_BUTTON1CLICK || fUnHilite) { 3331 if(ad->afindex[y]->flags & AF_SELECTED) { 3332 ad->afindex[y]->flags &= (~AF_SELECTED); 3333 ad->selected--; 3334 ad->selbytes -= ad->afindex[y]->cbFile; 3335 } 3336 else { 3337 ad->afindex[y]->flags |= AF_SELECTED; 3338 ad->selected++; 3339 ad->selbytes += ad->afindex[y]->cbFile; 3340 } 3341 PaintLine(hwnd,ad->hps,whichfile,ad->topfile,&Rectl); 3342 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3343 } 3344 } 3345 if(msg == WM_BUTTON1CLICK) { 3346 if(ad->lastselected != (ULONG)-1) { 3347 if(whichfile > ad->lastselected) 3348 ad->lastdirection = 1; 3349 else 3350 ad->lastdirection = 2; 3351 } 3352 else 3353 ad->lastdirection = 0; 3354 ad->lastselected = whichfile; 3355 } 3356 else 3357 DefaultViewKeys(hwnd,ad->hwndFrame,HWND_DESKTOP,NULL, 3358 ad->afindex[y]->fullname); 3359 } 3360 } 3361 DosReleaseMutexSem(ad->ScanSem); 3356 if(pAD && !pAD->stopflag && 3357 !DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 3358 3359 ULONG numlines,whichfile,y,wascursored; 3360 RECTL Rectl; 3361 POINTS pts; 3362 3363 if(pAD->afifiles) { 3364 WinQueryWindowRect(hwnd,&Rectl); 3365 numlines = NumLines(&Rectl,pAD); 3366 if(numlines) { 3367 pts.x = SHORT1FROMMP(mp1); 3368 pts.y = SHORT2FROMMP(mp1); 3369 whichfile = ((Rectl.yTop - Rectl.yBottom) - 3370 ((LONG)pts.y + pAD->lMaxDescender)) / 3371 pAD->lMaxHeight; 3372 if(whichfile > numlines - 1) 3373 whichfile = numlines - 1; 3374 whichfile += (pAD->topfile - 1); 3375 if(whichfile + 1 > pAD->afifiles) 3376 break; 3377 y = (pAD->invertsort) ? (pAD->afifiles - 1) - whichfile : whichfile; 3378 wascursored = pAD->cursored; 3379 pAD->cursored = whichfile + 1; 3380 if(pAD->cursored != wascursored) 3381 PaintLine(hwnd,pAD->hps,wascursored - 1,pAD->topfile,&Rectl); 3382 if(y < pAD->afifiles) { 3383 if(msg == WM_BUTTON1CLICK || fUnHilite) { 3384 if(pAD->afindex[y]->flags & AF_SELECTED) { 3385 pAD->afindex[y]->flags &= ~AF_SELECTED; 3386 pAD->selected--; 3387 ul = pAD->afindex[y]->cbFile; 3388 pAD->ulSelectedKB -= ul >> 10; 3389 pAD->ulSelectedBytes -= ul & 0x3ff; 3390 } 3391 else { 3392 pAD->afindex[y]->flags |= AF_SELECTED; 3393 pAD->selected++; 3394 ul = pAD->afindex[y]->cbFile; 3395 pAD->ulSelectedKB += ul >> 10; 3396 pAD->ulSelectedBytes += ul & 0x3ff; 3397 } 3398 PaintLine(hwnd,pAD->hps,whichfile,pAD->topfile,&Rectl); 3399 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3400 } 3401 } 3402 if(msg == WM_BUTTON1CLICK) { 3403 if(pAD->lastselected != (ULONG)-1) { 3404 if(whichfile > pAD->lastselected) 3405 pAD->lastdirection = 1; 3406 else 3407 pAD->lastdirection = 2; 3408 } 3409 else 3410 pAD->lastdirection = 0; 3411 pAD->lastselected = whichfile; 3412 } 3413 else 3414 DefaultViewKeys(hwnd,pAD->hwndFrame,HWND_DESKTOP,NULL, 3415 pAD->afindex[y]->fullname); 3416 } 3417 } 3418 DosReleaseMutexSem(pAD->ScanSem); 3362 3419 } 3363 3420 break; 3364 3421 3365 3422 case WM_MENUEND: 3366 if( ad && (HWND)mp2 == ad->hwndPopup) {3367 WinDestroyWindow(ad->hwndPopup);3368 ad->hwndPopup = (HWND)0;3423 if(pAD && (HWND)mp2 == pAD->hwndPopup) { 3424 WinDestroyWindow(pAD->hwndPopup); 3425 pAD->hwndPopup = (HWND)0; 3369 3426 } 3370 3427 break; 3371 3428 3372 3429 case WM_CONTEXTMENU: 3373 if( ad) {3374 if(!ad->hwndPopup) {3375 ad->hwndPopup = WinLoadMenu(HWND_DESKTOP,FM3ModHandle,SEEALL_POPUP);3376 if(ad->hwndPopup) {3377 WinSetPresParam(ad->hwndPopup,PP_FONTNAMESIZE,3378 (ULONG)strlen(GetPString(IDS_8HELVTEXT)) + 1,3379 (PVOID)GetPString(IDS_8HELVTEXT));3380 SetConditionalCascade(ad->hwndPopup,3381 IDM_DELETESUBMENU,3382 (fDefaultDeletePerm) ?3383 IDM_PERMDELETE :3384 IDM_DELETE);3385 SetConditionalCascade(ad->hwndPopup,IDM_MOVEMENU,IDM_MOVE);3386 SetConditionalCascade(ad->hwndPopup,IDM_COPYMENU,IDM_COPY);3387 SetConditionalCascade(ad->hwndPopup,IDM_OPENSUBMENU,3388 IDM_OPENDEFAULT);3389 SetConditionalCascade(ad->hwndMenu,IDM_OBJECTSUBMENU,3390 IDM_SHADOW);3391 if(fWorkPlace) {3392 WinSendMsg(ad->hwndPopup,MM_DELETEITEM,3393 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID);3394 WinSendMsg(ad->hwndPopup,MM_DELETEITEM,3395 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID);3396 }3397 }3398 }3399 if(ad->hwndPopup) {3400 3401 APIRET rc;3402 3403 rc = DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN);3404 WinEnableMenuItem(ad->hwndPopup,IDM_EAS,(rc == 0 &&3405 ad->selected != 0));3406 WinEnableMenuItem(ad->hwndPopup,IDM_UUDECODE,(rc == 0 &&3407 ad->selected != 0));3408 WinEnableMenuItem(ad->hwndPopup,IDM_EXTRACT,(rc == 0 &&3409 ad->selected != 0));3410 WinEnableMenuItem(ad->hwndPopup,IDM_ARCHIVE,(rc == 0 &&3411 ad->selected != 0));3412 WinEnableMenuItem(ad->hwndPopup,IDM_MOVEMENU,(rc == 0 &&3413 ad->selected != 0));3414 WinEnableMenuItem(ad->hwndPopup,IDM_COPYMENU,(rc == 0 &&3415 ad->selected != 0));3416 WinEnableMenuItem(ad->hwndPopup,IDM_RENAME,(rc == 0 &&3417 ad->selected != 0));3418 WinEnableMenuItem(ad->hwndPopup,IDM_PRINT,(rc == 0 &&3419 ad->selected != 0));3420 WinEnableMenuItem(ad->hwndPopup,IDM_SUBJECT,(rc == 0 &&3421 ad->selected != 0));3422 WinEnableMenuItem(ad->hwndPopup,IDM_OPENSUBMENU,(rc == 0 &&3423 ad->selected != 0));3424 WinEnableMenuItem(ad->hwndPopup,IDM_OBJECTSUBMENU,(rc == 0 &&3425 ad->selected != 0));3426 WinEnableMenuItem(ad->hwndPopup,IDM_DELETESUBMENU,(rc == 0 &&3427 ad->selected != 0));3428 WinEnableMenuItem(ad->hwndPopup,IDM_INFO,(rc == 0 &&3429 ad->selected != 0));3430 WinEnableMenuItem(ad->hwndPopup,IDM_ATTRS,(rc == 0 &&3431 ad->selected != 0));3432 WinEnableMenuItem(ad->hwndPopup,IDM_COLLECT,(rc == 0 &&3433 ad->selected != 0));3434 WinEnableMenuItem(ad->hwndPopup,IDM_SAVETOCLIP,(rc == 0 &&3435 ad->selected != 0));3436 WinEnableMenuItem(ad->hwndPopup,IDM_APPENDTOCLIP,(rc == 0 &&3437 ad->selected != 0));3438 WinEnableMenuItem(ad->hwndPopup,IDM_SAVETOLIST,(rc == 0 &&3439 ad->selected != 0));3440 WinEnableMenuItem(ad->hwndPopup,IDM_REMOVE,(rc == 0 &&3441 ad->selected != 0));3442 WinEnableMenuItem(ad->hwndPopup,IDM_HIDEALL,(rc == 0 &&3443 ad->selected != 0));3444 WinEnableMenuItem(ad->hwndPopup,IDM_SELECTALL,(rc == 0 &&3445 ad->afifiles != 0));3446 WinEnableMenuItem(ad->hwndPopup,IDM_SELECTMASK,(rc == 0 &&3447 ad->afifiles != 0));3448 WinEnableMenuItem(ad->hwndPopup,IDM_DESELECTALL,(rc == 0 &&3449 ad->afifiles != 0));3450 WinEnableMenuItem(ad->hwndPopup,IDM_DESELECTMASK,(rc == 0 &&3451 ad->afifiles != 0));3452 WinEnableMenuItem(ad->hwndPopup,IDM_INVERT,(rc == 0 &&3453 ad->afifiles != 0));3454 WinEnableMenuItem(ad->hwndPopup,IDM_FILTER,(rc == 0 &&3455 ad->affiles != 0));3456 if(!rc)3457 DosReleaseMutexSem(ad->ScanSem);3458 if(WinPopupMenu(hwnd,hwnd,ad->hwndPopup,SHORT1FROMMP(mp1),3459 SHORT2FROMMP(mp1),0,3460 PU_HCONSTRAIN | PU_VCONSTRAIN |3461 PU_KEYBOARD | PU_MOUSEBUTTON1))3462 CenterOverWindow(ad->hwndPopup);3463 }3430 if(pAD) { 3431 if(!pAD->hwndPopup) { 3432 pAD->hwndPopup = WinLoadMenu(HWND_DESKTOP,FM3ModHandle,SEEALL_POPUP); 3433 if(pAD->hwndPopup) { 3434 WinSetPresParam(pAD->hwndPopup,PP_FONTNAMESIZE, 3435 (ULONG)strlen(GetPString(IDS_8HELVTEXT)) + 1, 3436 (PVOID)GetPString(IDS_8HELVTEXT)); 3437 SetConditionalCascade(pAD->hwndPopup, 3438 IDM_DELETESUBMENU, 3439 (fDefaultDeletePerm) ? 3440 IDM_PERMDELETE : 3441 IDM_DELETE); 3442 SetConditionalCascade(pAD->hwndPopup,IDM_MOVEMENU,IDM_MOVE); 3443 SetConditionalCascade(pAD->hwndPopup,IDM_COPYMENU,IDM_COPY); 3444 SetConditionalCascade(pAD->hwndPopup,IDM_OPENSUBMENU, 3445 IDM_OPENDEFAULT); 3446 SetConditionalCascade(pAD->hwndMenu,IDM_OBJECTSUBMENU, 3447 IDM_SHADOW); 3448 if(fWorkPlace) { 3449 WinSendMsg(pAD->hwndPopup,MM_DELETEITEM, 3450 MPFROM2SHORT(IDM_OPENSUBMENU,TRUE),MPVOID); 3451 WinSendMsg(pAD->hwndPopup,MM_DELETEITEM, 3452 MPFROM2SHORT(IDM_OBJECTSUBMENU,TRUE),MPVOID); 3453 } 3454 } 3455 } 3456 if(pAD->hwndPopup) { 3457 3458 APIRET rc; 3459 3460 rc = DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN); 3461 WinEnableMenuItem(pAD->hwndPopup,IDM_EAS,(rc == 0 && 3462 pAD->selected != 0)); 3463 WinEnableMenuItem(pAD->hwndPopup,IDM_UUDECODE,(rc == 0 && 3464 pAD->selected != 0)); 3465 WinEnableMenuItem(pAD->hwndPopup,IDM_EXTRACT,(rc == 0 && 3466 pAD->selected != 0)); 3467 WinEnableMenuItem(pAD->hwndPopup,IDM_ARCHIVE,(rc == 0 && 3468 pAD->selected != 0)); 3469 WinEnableMenuItem(pAD->hwndPopup,IDM_MOVEMENU,(rc == 0 && 3470 pAD->selected != 0)); 3471 WinEnableMenuItem(pAD->hwndPopup,IDM_COPYMENU,(rc == 0 && 3472 pAD->selected != 0)); 3473 WinEnableMenuItem(pAD->hwndPopup,IDM_RENAME,(rc == 0 && 3474 pAD->selected != 0)); 3475 WinEnableMenuItem(pAD->hwndPopup,IDM_PRINT,(rc == 0 && 3476 pAD->selected != 0)); 3477 WinEnableMenuItem(pAD->hwndPopup,IDM_SUBJECT,(rc == 0 && 3478 pAD->selected != 0)); 3479 WinEnableMenuItem(pAD->hwndPopup,IDM_OPENSUBMENU,(rc == 0 && 3480 pAD->selected != 0)); 3481 WinEnableMenuItem(pAD->hwndPopup,IDM_OBJECTSUBMENU,(rc == 0 && 3482 pAD->selected != 0)); 3483 WinEnableMenuItem(pAD->hwndPopup,IDM_DELETESUBMENU,(rc == 0 && 3484 pAD->selected != 0)); 3485 WinEnableMenuItem(pAD->hwndPopup,IDM_INFO,(rc == 0 && 3486 pAD->selected != 0)); 3487 WinEnableMenuItem(pAD->hwndPopup,IDM_ATTRS,(rc == 0 && 3488 pAD->selected != 0)); 3489 WinEnableMenuItem(pAD->hwndPopup,IDM_COLLECT,(rc == 0 && 3490 pAD->selected != 0)); 3491 WinEnableMenuItem(pAD->hwndPopup,IDM_SAVETOCLIP,(rc == 0 && 3492 pAD->selected != 0)); 3493 WinEnableMenuItem(pAD->hwndPopup,IDM_APPENDTOCLIP,(rc == 0 && 3494 pAD->selected != 0)); 3495 WinEnableMenuItem(pAD->hwndPopup,IDM_SAVETOLIST,(rc == 0 && 3496 pAD->selected != 0)); 3497 WinEnableMenuItem(pAD->hwndPopup,IDM_REMOVE,(rc == 0 && 3498 pAD->selected != 0)); 3499 WinEnableMenuItem(pAD->hwndPopup,IDM_HIDEALL,(rc == 0 && 3500 pAD->selected != 0)); 3501 WinEnableMenuItem(pAD->hwndPopup,IDM_SELECTALL,(rc == 0 && 3502 pAD->afifiles != 0)); 3503 WinEnableMenuItem(pAD->hwndPopup,IDM_SELECTMASK,(rc == 0 && 3504 pAD->afifiles != 0)); 3505 WinEnableMenuItem(pAD->hwndPopup,IDM_DESELECTALL,(rc == 0 && 3506 pAD->afifiles != 0)); 3507 WinEnableMenuItem(pAD->hwndPopup,IDM_DESELECTMASK,(rc == 0 && 3508 pAD->afifiles != 0)); 3509 WinEnableMenuItem(pAD->hwndPopup,IDM_INVERT,(rc == 0 && 3510 pAD->afifiles != 0)); 3511 WinEnableMenuItem(pAD->hwndPopup,IDM_FILTER,(rc == 0 && 3512 pAD->affiles != 0)); 3513 if(!rc) 3514 DosReleaseMutexSem(pAD->ScanSem); 3515 if(WinPopupMenu(hwnd,hwnd,pAD->hwndPopup,SHORT1FROMMP(mp1), 3516 SHORT2FROMMP(mp1),0, 3517 PU_HCONSTRAIN | PU_VCONSTRAIN | 3518 PU_KEYBOARD | PU_MOUSEBUTTON1)) 3519 CenterOverWindow(pAD->hwndPopup); 3520 } 3464 3521 } 3465 3522 break; 3466 3523 3467 3524 case UM_CONTAINER_FILLED: 3468 if( ad) {3469 ad->stopflag = 0;3470 ad->topfile = 1;3471 ad->cursored = 1;3472 ad->multiplier = 1;3473 if(!ad->afifiles) {3474 DosBeep(250,50);3475 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);3476 }3477 else {3478 DosBeep(1000,25);3479 WinInvalidateRect(hwnd,NULL,FALSE);3480 PostMsg(hwnd,UM_SETUP3,MPVOID,MPVOID);3481 }3482 WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),HWND_TOP,0,0,0,0,3483 SWP_SHOW | SWP_RESTORE | SWP_ACTIVATE | SWP_ZORDER);3525 if(pAD) { 3526 pAD->stopflag = 0; 3527 pAD->topfile = 1; 3528 pAD->cursored = 1; 3529 pAD->multiplier = 1; 3530 if(!pAD->afifiles) { 3531 DosBeep(250,50); 3532 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3533 } 3534 else { 3535 DosBeep(1000,25); 3536 WinInvalidateRect(hwnd,NULL,FALSE); 3537 PostMsg(hwnd,UM_SETUP3,MPVOID,MPVOID); 3538 } 3539 WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),HWND_TOP,0,0,0,0, 3540 SWP_SHOW | SWP_RESTORE | SWP_ACTIVATE | SWP_ZORDER); 3484 3541 } 3485 3542 return 0; … … 3487 3544 case WM_ERASEBACKGROUND: 3488 3545 WinFillRect((HPS)mp1,(PRECTL)mp2, 3489 standardcolors[Colors[COLORS_NORMALBACK]]);3546 standardcolors[Colors[COLORS_NORMALBACK]]); 3490 3547 return 0; 3491 3548 3492 3549 case WM_PAINT: 3493 3550 // fprintf(stderr,"Seeall: WM_PAINT\n"); 3494 if( ad) {3495 3496 HPS hpsp;3497 RECTL Rectl;3498 POINTL ptl;3499 register ULONG x;3500 ULONG y,len,numlines;3501 CHAR szBuff[CCHMAXPATH + 80];3502 BOOL inverted,hidsys,reado,wascursored;3503 3504 hpsp = WinBeginPaint(hwnd,ad->hps,&Rectl);3505 WinFillRect(hpsp,&Rectl,standardcolors[Colors[COLORS_NORMALBACK]]);3506 if(!ad->stopflag &&3507 !DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) {3508 WinQueryWindowRect(hwnd,&Rectl);3509 numlines = NumLines(&Rectl,ad);3510 if(ad->afifiles && numlines) {3511 if(ad->topfile > (ad->afifiles + 1) - numlines)3512 ad->topfile = (ad->afifiles + 1) - numlines;3513 if(ad->topfile > ad->afifiles)3514 ad->topfile = 1;3515 if(!ad->topfile)3516 ad->topfile = 1;3517 if(ad->cursored < ad->topfile)3518 ad->cursored = ad->topfile;3519 else if(ad->cursored > (ad->topfile + numlines) - 1)3520 ad->cursored = (ad->topfile + numlines) - 1;3521 if(ad->cursored > ad->afifiles)3522 ad->cursored = ad->afifiles;3523 }3524 else3525 ad->topfile = ad->cursored = 1;3526 if(numlines && ad->afifiles) {3527 GpiSetBackMix(hpsp,BM_OVERPAINT);3528 wascursored = TRUE;3529 for(x = ad->topfile - 1;x < ad->afifiles;x++) {3530 ptl.x = ad->horzscroll;3531 if(wascursored) { /* reestablish normal colors */3532 GpiSetColor(ad->hps,3533 standardcolors[Colors[COLORS_NORMALFORE]]);3534 GpiSetBackColor(ad->hps,3535 standardcolors[Colors[COLORS_NORMALBACK]]);3536 wascursored = inverted = hidsys = reado = FALSE;3537 }3538 if(x == ad->cursored - 1)3539 wascursored = TRUE;3540 y = (ad->invertsort) ? (ad->afifiles - 1) - x : x;3541 ptl.y = (Rectl.yTop -3542 (ad->lMaxHeight * (((x + 1) - ad->topfile) + 1)));3543 if(ptl.y - ad->lMaxDescender <= 0)3544 break;3545 if(ad->afindex[y]->flags & AF_SELECTED) {3546 if(!inverted) {3547 GpiSetColor(ad->hps,standardcolors[Colors[COLORS_SELECTEDNORMALFORE]]);3548 GpiSetBackColor(ad->hps,(wascursored) ?3549 standardcolors[Colors[COLORS_CURSOREDSELECTEDBACK]] :3550 standardcolors[Colors[COLORS_SELECTEDBACK]]);3551 inverted = TRUE;3552 }3553 }3554 else if(inverted ||3555 ((ad->afindex[y]->attrFile &3556 (FILE_SYSTEM | FILE_HIDDEN)) != 0) != hidsys ||3557 ((ad->afindex[y]->attrFile & FILE_READONLY) != 0) !=3558 reado) {3559 if(ad->afindex[y]->attrFile & (FILE_SYSTEM | FILE_HIDDEN)) {3560 GpiSetColor(ad->hps,3561 standardcolors[Colors[COLORS_SYSTEMFORE]]);3562 hidsys = TRUE;3563 }3564 else if((ad->afindex[y]->attrFile & FILE_READONLY) != 0) {3565 GpiSetColor(ad->hps,3566 standardcolors[Colors[COLORS_READONLYFORE]]);3567 reado = TRUE;3568 }3569 else3570 GpiSetColor(ad->hps,standardcolors[Colors[COLORS_NORMALFORE]]);3571 GpiSetBackColor(ad->hps,(wascursored) ?3572 standardcolors[Colors[COLORS_CURSOREDNORMALBACK]] :3573 standardcolors[Colors[COLORS_NORMALBACK]]);3574 inverted = FALSE;3575 }3576 else if(wascursored)3577 GpiSetBackColor(ad->hps,3578 standardcolors[Colors[COLORS_CURSOREDNORMALBACK]]);3579 len = sprintf(szBuff,3580 "%c%-*.*s %-12lu %c%c%c%c%c %04u/%02u/%02u %02u:%02u:%02u ",3581 (wascursored) ? '>': ' ',3582 (ad->fullnames) ? ad->longestw : ad->longest,3583 (ad->fullnames) ? ad->longestw : ad->longest,3584 (ad->fullnames) ? ad->afindex[y]->fullname :3585 ad->afindex[y]->filename,3586 ad->afindex[y]->cbFile,3587 "-A"[((ad->afindex[y]->attrFile & FILE_ARCHIVED) != 0)],3588 "-R"[((ad->afindex[y]->attrFile & FILE_READONLY) != 0)],3589 "-H"[((ad->afindex[y]->attrFile & FILE_HIDDEN) != 0)],3590 "-S"[((ad->afindex[y]->attrFile & FILE_SYSTEM) != 0)],3591 "-D"[((ad->afindex[y]->attrFile & FILE_DIRECTORY) != 0)],3592 ad->afindex[y]->date.year + 1980,3593 ad->afindex[y]->date.month,3594 ad->afindex[y]->date.day,3595 ad->afindex[y]->time.hours,3596 ad->afindex[y]->time.minutes,3597 ad->afindex[y]->time.twosecs * 2);3598 GpiCharStringAt(hpsp,&ptl,len,szBuff);3599 GpiQueryCurrentPosition(hpsp,&ptl);3600 if(ptl.x + abs(ad->horzscroll) > ad->maxx) {3601 ad->maxx = ptl.x + abs(ad->horzscroll);3602 WinSendMsg(ad->hhscroll,SBM_SETTHUMBSIZE,3603 MPFROM2SHORT((SHORT)Rectl.xRight,(SHORT)ad->maxx),3604 MPVOID);3605 }3606 }3607 }3608 DosReleaseMutexSem(ad->ScanSem);3609 }3610 WinEndPaint(hpsp);3611 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);3612 if(!ad->stopflag)3613 WinSendMsg(ad->hvscroll,SBM_SETSCROLLBAR,3614 MPFROMSHORT((SHORT)(ad->topfile / ad->multiplier)),3615 MPFROM2SHORT(1,3616 (SHORT)(ad->afifiles / ad->multiplier) -3617 (numlines - 1)));3618 WinSendMsg(ad->hhscroll,SBM_SETSCROLLBAR,3619 MPFROMSHORT((SHORT)abs(ad->horzscroll)),3620 MPFROM2SHORT(0,(SHORT)(ad->maxx - Rectl.xRight)));3621 WinSendMsg(ad->hhscroll,SBM_SETTHUMBSIZE,3622 MPFROM2SHORT((SHORT)Rectl.xRight,(SHORT)ad->maxx),3623 MPVOID);3551 if(pAD) { 3552 3553 HPS hpsp; 3554 RECTL Rectl; 3555 POINTL ptl; 3556 register ULONG x; 3557 ULONG y,len,numlines; 3558 CHAR szBuff[CCHMAXPATH + 80]; 3559 BOOL inverted,hidsys,reado,wascursored; 3560 3561 hpsp = WinBeginPaint(hwnd,pAD->hps,&Rectl); 3562 WinFillRect(hpsp,&Rectl,standardcolors[Colors[COLORS_NORMALBACK]]); 3563 if(!pAD->stopflag && 3564 !DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 3565 WinQueryWindowRect(hwnd,&Rectl); 3566 numlines = NumLines(&Rectl,pAD); 3567 if(pAD->afifiles && numlines) { 3568 if(pAD->topfile > (pAD->afifiles + 1) - numlines) 3569 pAD->topfile = (pAD->afifiles + 1) - numlines; 3570 if(pAD->topfile > pAD->afifiles) 3571 pAD->topfile = 1; 3572 if(!pAD->topfile) 3573 pAD->topfile = 1; 3574 if(pAD->cursored < pAD->topfile) 3575 pAD->cursored = pAD->topfile; 3576 else if(pAD->cursored > (pAD->topfile + numlines) - 1) 3577 pAD->cursored = (pAD->topfile + numlines) - 1; 3578 if(pAD->cursored > pAD->afifiles) 3579 pAD->cursored = pAD->afifiles; 3580 } 3581 else 3582 pAD->topfile = pAD->cursored = 1; 3583 if(numlines && pAD->afifiles) { 3584 GpiSetBackMix(hpsp,BM_OVERPAINT); 3585 wascursored = TRUE; 3586 for(x = pAD->topfile - 1;x < pAD->afifiles;x++) { 3587 ptl.x = pAD->horzscroll; 3588 if(wascursored) { /* reestablish normal colors */ 3589 GpiSetColor(pAD->hps, 3590 standardcolors[Colors[COLORS_NORMALFORE]]); 3591 GpiSetBackColor(pAD->hps, 3592 standardcolors[Colors[COLORS_NORMALBACK]]); 3593 wascursored = inverted = hidsys = reado = FALSE; 3594 } 3595 if(x == pAD->cursored - 1) 3596 wascursored = TRUE; 3597 y = (pAD->invertsort) ? (pAD->afifiles - 1) - x : x; 3598 ptl.y = (Rectl.yTop - 3599 (pAD->lMaxHeight * (((x + 1) - pAD->topfile) + 1))); 3600 if(ptl.y - pAD->lMaxDescender <= 0) 3601 break; 3602 if(pAD->afindex[y]->flags & AF_SELECTED) { 3603 if(!inverted) { 3604 GpiSetColor(pAD->hps,standardcolors[Colors[COLORS_SELECTEDNORMALFORE]]); 3605 GpiSetBackColor(pAD->hps,(wascursored) ? 3606 standardcolors[Colors[COLORS_CURSOREDSELECTEDBACK]] : 3607 standardcolors[Colors[COLORS_SELECTEDBACK]]); 3608 inverted = TRUE; 3609 } 3610 } 3611 else if(inverted || 3612 ((pAD->afindex[y]->attrFile & 3613 (FILE_SYSTEM | FILE_HIDDEN)) != 0) != hidsys || 3614 ((pAD->afindex[y]->attrFile & FILE_READONLY) != 0) != 3615 reado) { 3616 if(pAD->afindex[y]->attrFile & (FILE_SYSTEM | FILE_HIDDEN)) { 3617 GpiSetColor(pAD->hps, 3618 standardcolors[Colors[COLORS_SYSTEMFORE]]); 3619 hidsys = TRUE; 3620 } 3621 else if((pAD->afindex[y]->attrFile & FILE_READONLY) != 0) { 3622 GpiSetColor(pAD->hps, 3623 standardcolors[Colors[COLORS_READONLYFORE]]); 3624 reado = TRUE; 3625 } 3626 else 3627 GpiSetColor(pAD->hps,standardcolors[Colors[COLORS_NORMALFORE]]); 3628 GpiSetBackColor(pAD->hps,(wascursored) ? 3629 standardcolors[Colors[COLORS_CURSOREDNORMALBACK]] : 3630 standardcolors[Colors[COLORS_NORMALBACK]]); 3631 inverted = FALSE; 3632 } 3633 else if(wascursored) 3634 GpiSetBackColor(pAD->hps, 3635 standardcolors[Colors[COLORS_CURSOREDNORMALBACK]]); 3636 len = sprintf(szBuff, 3637 "%c%-*.*s %-12lu %c%c%c%c%c %04u/%02u/%02u %02u:%02u:%02u ", 3638 (wascursored) ? '>': ' ', 3639 (pAD->fullnames) ? pAD->longestw : pAD->longest, 3640 (pAD->fullnames) ? pAD->longestw : pAD->longest, 3641 (pAD->fullnames) ? pAD->afindex[y]->fullname : 3642 pAD->afindex[y]->filename, 3643 pAD->afindex[y]->cbFile, 3644 "-A"[((pAD->afindex[y]->attrFile & FILE_ARCHIVED) != 0)], 3645 "-R"[((pAD->afindex[y]->attrFile & FILE_READONLY) != 0)], 3646 "-H"[((pAD->afindex[y]->attrFile & FILE_HIDDEN) != 0)], 3647 "-S"[((pAD->afindex[y]->attrFile & FILE_SYSTEM) != 0)], 3648 "-D"[((pAD->afindex[y]->attrFile & FILE_DIRECTORY) != 0)], 3649 pAD->afindex[y]->date.year + 1980, 3650 pAD->afindex[y]->date.month, 3651 pAD->afindex[y]->date.day, 3652 pAD->afindex[y]->time.hours, 3653 pAD->afindex[y]->time.minutes, 3654 pAD->afindex[y]->time.twosecs * 2); 3655 GpiCharStringAt(hpsp,&ptl,len,szBuff); 3656 GpiQueryCurrentPosition(hpsp,&ptl); 3657 if(ptl.x + abs(pAD->horzscroll) > pAD->maxx) { 3658 pAD->maxx = ptl.x + abs(pAD->horzscroll); 3659 WinSendMsg(pAD->hhscroll,SBM_SETTHUMBSIZE, 3660 MPFROM2SHORT((SHORT)Rectl.xRight,(SHORT)pAD->maxx), 3661 MPVOID); 3662 } 3663 } 3664 } 3665 DosReleaseMutexSem(pAD->ScanSem); 3666 } 3667 WinEndPaint(hpsp); 3668 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3669 if(!pAD->stopflag) 3670 WinSendMsg(pAD->hvscroll,SBM_SETSCROLLBAR, 3671 MPFROMSHORT((SHORT)(pAD->topfile / pAD->multiplier)), 3672 MPFROM2SHORT(1, 3673 (SHORT)(pAD->afifiles / pAD->multiplier) - 3674 (numlines - 1))); 3675 WinSendMsg(pAD->hhscroll,SBM_SETSCROLLBAR, 3676 MPFROMSHORT((SHORT)abs(pAD->horzscroll)), 3677 MPFROM2SHORT(0,(SHORT)(pAD->maxx - Rectl.xRight))); 3678 WinSendMsg(pAD->hhscroll,SBM_SETTHUMBSIZE, 3679 MPFROM2SHORT((SHORT)Rectl.xRight,(SHORT)pAD->maxx), 3680 MPVOID); 3624 3681 } 3625 3682 break; … … 3627 3684 case WM_HSCROLL: 3628 3685 { 3629 RECTL rectl;3630 BOOL invalidate = TRUE;3631 3632 WinQueryWindowRect(hwnd,&rectl);3633 switch(SHORT2FROMMP(mp2)) {3634 case SB_PAGERIGHT:3635 if(abs(ad->horzscroll) < ad->maxx - rectl.xRight) {3636 ad->horzscroll -= rectl.xRight;3637 if(abs(ad->horzscroll) > ad->maxx - rectl.xRight)3638 ad->horzscroll = -(ad->maxx - rectl.xRight);3639 }3640 break;3641 3642 case SB_PAGELEFT:3643 if(ad->horzscroll < 0) {3644 ad->horzscroll += rectl.xRight;3645 if(ad->horzscroll > 0)3646 ad->horzscroll = 0;3647 }3648 break;3649 3650 case SB_LINERIGHT:3651 if(abs(ad->horzscroll) < ad->maxx - rectl.xRight)3652 ad->horzscroll -= ad->fattrs.lAveCharWidth;3653 break;3654 3655 case SB_LINELEFT:3656 if(ad->horzscroll < 0)3657 ad->horzscroll += ad->fattrs.lAveCharWidth;3658 break;3659 3660 case SB_SLIDERTRACK:3661 ad->horzscroll = SHORT1FROMMP(mp2);3662 ad->horzscroll = -(ad->horzscroll);3663 if(ad->horzscroll > 0)3664 ad->horzscroll = 0;3665 if(abs(ad->horzscroll) > ad->maxx - rectl.xRight)3666 ad->horzscroll = -(ad->maxx - rectl.xRight);3667 break;3668 3669 default:3670 invalidate = FALSE;3671 break;3672 }3673 if(invalidate)3674 WinInvalidateRect(hwnd,NULL,FALSE);3686 RECTL rectl; 3687 BOOL invalidate = TRUE; 3688 3689 WinQueryWindowRect(hwnd,&rectl); 3690 switch(SHORT2FROMMP(mp2)) { 3691 case SB_PAGERIGHT: 3692 if(abs(pAD->horzscroll) < pAD->maxx - rectl.xRight) { 3693 pAD->horzscroll -= rectl.xRight; 3694 if(abs(pAD->horzscroll) > pAD->maxx - rectl.xRight) 3695 pAD->horzscroll = -(pAD->maxx - rectl.xRight); 3696 } 3697 break; 3698 3699 case SB_PAGELEFT: 3700 if(pAD->horzscroll < 0) { 3701 pAD->horzscroll += rectl.xRight; 3702 if(pAD->horzscroll > 0) 3703 pAD->horzscroll = 0; 3704 } 3705 break; 3706 3707 case SB_LINERIGHT: 3708 if(abs(pAD->horzscroll) < pAD->maxx - rectl.xRight) 3709 pAD->horzscroll -= pAD->fattrs.lAveCharWidth; 3710 break; 3711 3712 case SB_LINELEFT: 3713 if(pAD->horzscroll < 0) 3714 pAD->horzscroll += pAD->fattrs.lAveCharWidth; 3715 break; 3716 3717 case SB_SLIDERTRACK: 3718 pAD->horzscroll = SHORT1FROMMP(mp2); 3719 pAD->horzscroll = -(pAD->horzscroll); 3720 if(pAD->horzscroll > 0) 3721 pAD->horzscroll = 0; 3722 if(abs(pAD->horzscroll) > pAD->maxx - rectl.xRight) 3723 pAD->horzscroll = -(pAD->maxx - rectl.xRight); 3724 break; 3725 3726 default: 3727 invalidate = FALSE; 3728 break; 3729 } 3730 if(invalidate) 3731 WinInvalidateRect(hwnd,NULL,FALSE); 3675 3732 } 3676 3733 break; … … 3678 3735 case WM_VSCROLL: 3679 3736 // fprintf(stderr,"Seeall: WM_VSCROLL\n"); 3680 if( ad && !ad->stopflag &&3681 !DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) {3682 3683 ULONG numlines,wascursored;3684 RECTL rcl;3685 3686 if(ad->afifiles) {3687 WinQueryWindowRect(hwnd,&rcl);3688 numlines = NumLines(&rcl,ad);3689 if(numlines) {3690 wascursored = ad->cursored;3691 switch(SHORT2FROMMP(mp2)) {3692 case SB_PAGEUP:3693 if(ad->topfile > 1) {3694 ad->topfile -= numlines;3695 if(ad->topfile > ad->afifiles ||3696 ad->topfile > (ad->afifiles + 1) - numlines)3697 ad->topfile = 1;3698 if(ad->cursored > ad->topfile + numlines)3699 ad->cursored = ad->topfile + numlines;3700 if(ad->cursored > ad->afifiles)3701 ad->cursored = ad->afifiles;3702 WinInvalidateRect(hwnd,NULL,FALSE);3703 }3704 break;3705 case SB_PAGEDOWN:3706 if(ad->topfile <= ad->afifiles - numlines) {3707 ad->topfile += numlines;3708 if(ad->topfile > (ad->afifiles + 1) - numlines)3709 ad->topfile = (ad->afifiles + 1) - numlines;3710 if(ad->cursored < ad->topfile)3711 ad->cursored = ad->topfile;3712 if(ad->cursored > (ad->topfile + numlines) - 1)3713 ad->cursored = (ad->topfile + numlines) - 1;3714 if(ad->cursored > ad->afifiles)3715 ad->cursored = ad->afifiles;3716 WinInvalidateRect(hwnd,NULL,FALSE);3717 }3718 break;3719 case SB_LINEDOWN:3720 if(ad->topfile <= ad->afifiles - numlines) {3721 3722 RECTL Rectl,iRectl;3723 3724 ad->topfile++;3725 if(ad->cursored < ad->topfile)3726 ad->cursored = ad->topfile;3727 else if(ad->cursored > (ad->topfile + numlines) - 1)3728 ad->cursored = (ad->topfile + numlines) - 1;3729 if(ad->cursored > ad->afifiles)3730 ad->cursored = ad->afifiles;3731 WinQueryWindowRect(hwnd,&Rectl);3732 WinScrollWindow(hwnd,0,ad->lMaxHeight,3733 NULL,NULL,NULLHANDLE,&iRectl,0);3734 WinFillRect(ad->hps,&iRectl,3735 standardcolors[Colors[COLORS_NORMALBACK]]);3736 PaintLine(hwnd,ad->hps,(ad->topfile + numlines) - 2,3737 ad->topfile,&Rectl);3738 if(ad->cursored != ad->topfile + numlines)3739 PaintLine(hwnd,ad->hps,ad->cursored - 1,ad->topfile,&Rectl);3740 if(wascursored != ad->cursored &&3741 wascursored < ad->topfile + numlines &&3742 wascursored >= ad->topfile)3743 PaintLine(hwnd,ad->hps,wascursored - 1,ad->topfile,&Rectl);3744 if(wascursored != ad->cursored)3745 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);3746 WinSendMsg(ad->hhscroll,SBM_SETSCROLLBAR,3747 MPFROMSHORT((SHORT)abs(ad->horzscroll)),3748 MPFROM2SHORT(0,(SHORT)(ad->maxx - Rectl.xRight)));3749 WinSendMsg(ad->hvscroll,SBM_SETSCROLLBAR,3750 MPFROMSHORT((SHORT)(ad->topfile /3751 ad->multiplier)),3752 MPFROM2SHORT(1,(SHORT)(ad->afifiles /3753 ad->multiplier) -3754 (numlines - 1)));3755 }3756 break;3757 case SB_LINEUP:3758 if(ad->topfile > 1) {3759 3760 RECTL Rectl,iRectl;3761 3762 ad->topfile--;3763 if(ad->cursored < ad->topfile)3764 ad->cursored = ad->topfile;3765 else if(ad->cursored > (ad->topfile + numlines) - 1)3766 ad->cursored = (ad->topfile + numlines) - 1;3767 if(ad->cursored > ad->afifiles)3768 ad->cursored = ad->afifiles;3769 WinQueryWindowRect(hwnd,&Rectl);3770 WinScrollWindow(hwnd,0,-ad->lMaxHeight,3771 NULL,NULL,NULLHANDLE,&iRectl,0);3772 WinFillRect(ad->hps,&iRectl,3773 standardcolors[Colors[COLORS_NORMALBACK]]);3774 iRectl = Rectl;3775 iRectl.yTop -= ((numlines * ad->lMaxHeight) +3776 ad->lMaxDescender);3777 WinFillRect(ad->hps,&iRectl,3778 standardcolors[ad->colors[COLORS_NORMALBACK]]);3779 PaintLine(hwnd,ad->hps,ad->topfile - 1,ad->topfile,&Rectl);3780 if(ad->cursored != ad->topfile)3781 PaintLine(hwnd,ad->hps,ad->cursored - 1,ad->topfile,&Rectl);3782 if(ad->cursored != wascursored &&3783 wascursored >= ad->topfile &&3784 wascursored < ad->topfile + numlines)3785 PaintLine(hwnd,ad->hps,wascursored - 1,ad->topfile,&Rectl);3786 if(ad->cursored != wascursored)3787 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID);3788 WinSendMsg(ad->hhscroll,SBM_SETSCROLLBAR,3789 MPFROMSHORT((SHORT)abs(ad->horzscroll)),3790 MPFROM2SHORT(0,(SHORT)(ad->maxx - Rectl.xRight)));3791 WinSendMsg(ad->hvscroll,SBM_SETSCROLLBAR,3792 MPFROMSHORT((SHORT)(ad->topfile /3793 ad->multiplier)),3794 MPFROM2SHORT(1,(SHORT)(ad->afifiles /3795 ad->multiplier) -3796 (numlines - 1)));3797 }3798 break;3799 case SB_SLIDERTRACK:3800 if((SHORT1FROMMP(mp2) >= 1) ||3801 (SHORT1FROMMP(mp2)) <= ad->afifiles) {3802 ad->topfile = (ULONG)SHORT1FROMMP(mp2) * ad->multiplier;3803 if(ad->topfile > (ad->afifiles + 1) - numlines)3804 ad->topfile = (ad->afifiles + 1) - numlines;3805 if(!ad->topfile)3806 ad->topfile = 1;3807 if(ad->cursored < ad->topfile)3808 ad->cursored = ad->topfile;3809 else if(ad->cursored > ad->topfile + numlines)3810 ad->cursored = ad->topfile + numlines;3811 if(ad->cursored > ad->afifiles)3812 ad->cursored = ad->afifiles;3813 WinInvalidateRect(hwnd,NULL,FALSE);3814 }3815 else3816 WinAlarm(HWND_DESKTOP,WA_NOTE);3817 break;3818 }3819 }3820 }3821 DosReleaseMutexSem(ad->ScanSem);3737 if(pAD && !pAD->stopflag && 3738 !DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 3739 3740 ULONG numlines,wascursored; 3741 RECTL rcl; 3742 3743 if(pAD->afifiles) { 3744 WinQueryWindowRect(hwnd,&rcl); 3745 numlines = NumLines(&rcl,pAD); 3746 if(numlines) { 3747 wascursored = pAD->cursored; 3748 switch(SHORT2FROMMP(mp2)) { 3749 case SB_PAGEUP: 3750 if(pAD->topfile > 1) { 3751 pAD->topfile -= numlines; 3752 if(pAD->topfile > pAD->afifiles || 3753 pAD->topfile > (pAD->afifiles + 1) - numlines) 3754 pAD->topfile = 1; 3755 if(pAD->cursored > pAD->topfile + numlines) 3756 pAD->cursored = pAD->topfile + numlines; 3757 if(pAD->cursored > pAD->afifiles) 3758 pAD->cursored = pAD->afifiles; 3759 WinInvalidateRect(hwnd,NULL,FALSE); 3760 } 3761 break; 3762 case SB_PAGEDOWN: 3763 if(pAD->topfile <= pAD->afifiles - numlines) { 3764 pAD->topfile += numlines; 3765 if(pAD->topfile > (pAD->afifiles + 1) - numlines) 3766 pAD->topfile = (pAD->afifiles + 1) - numlines; 3767 if(pAD->cursored < pAD->topfile) 3768 pAD->cursored = pAD->topfile; 3769 if(pAD->cursored > (pAD->topfile + numlines) - 1) 3770 pAD->cursored = (pAD->topfile + numlines) - 1; 3771 if(pAD->cursored > pAD->afifiles) 3772 pAD->cursored = pAD->afifiles; 3773 WinInvalidateRect(hwnd,NULL,FALSE); 3774 } 3775 break; 3776 case SB_LINEDOWN: 3777 if(pAD->topfile <= pAD->afifiles - numlines) { 3778 3779 RECTL Rectl,iRectl; 3780 3781 pAD->topfile++; 3782 if(pAD->cursored < pAD->topfile) 3783 pAD->cursored = pAD->topfile; 3784 else if(pAD->cursored > (pAD->topfile + numlines) - 1) 3785 pAD->cursored = (pAD->topfile + numlines) - 1; 3786 if(pAD->cursored > pAD->afifiles) 3787 pAD->cursored = pAD->afifiles; 3788 WinQueryWindowRect(hwnd,&Rectl); 3789 WinScrollWindow(hwnd,0,pAD->lMaxHeight, 3790 NULL,NULL,NULLHANDLE,&iRectl,0); 3791 WinFillRect(pAD->hps,&iRectl, 3792 standardcolors[Colors[COLORS_NORMALBACK]]); 3793 PaintLine(hwnd,pAD->hps,(pAD->topfile + numlines) - 2, 3794 pAD->topfile,&Rectl); 3795 if(pAD->cursored != pAD->topfile + numlines) 3796 PaintLine(hwnd,pAD->hps,pAD->cursored - 1,pAD->topfile,&Rectl); 3797 if(wascursored != pAD->cursored && 3798 wascursored < pAD->topfile + numlines && 3799 wascursored >= pAD->topfile) 3800 PaintLine(hwnd,pAD->hps,wascursored - 1,pAD->topfile,&Rectl); 3801 if(wascursored != pAD->cursored) 3802 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3803 WinSendMsg(pAD->hhscroll,SBM_SETSCROLLBAR, 3804 MPFROMSHORT((SHORT)abs(pAD->horzscroll)), 3805 MPFROM2SHORT(0,(SHORT)(pAD->maxx - Rectl.xRight))); 3806 WinSendMsg(pAD->hvscroll,SBM_SETSCROLLBAR, 3807 MPFROMSHORT((SHORT)(pAD->topfile / 3808 pAD->multiplier)), 3809 MPFROM2SHORT(1,(SHORT)(pAD->afifiles / 3810 pAD->multiplier) - 3811 (numlines - 1))); 3812 } 3813 break; 3814 case SB_LINEUP: 3815 if(pAD->topfile > 1) { 3816 3817 RECTL Rectl,iRectl; 3818 3819 pAD->topfile--; 3820 if(pAD->cursored < pAD->topfile) 3821 pAD->cursored = pAD->topfile; 3822 else if(pAD->cursored > (pAD->topfile + numlines) - 1) 3823 pAD->cursored = (pAD->topfile + numlines) - 1; 3824 if(pAD->cursored > pAD->afifiles) 3825 pAD->cursored = pAD->afifiles; 3826 WinQueryWindowRect(hwnd,&Rectl); 3827 WinScrollWindow(hwnd,0,-pAD->lMaxHeight, 3828 NULL,NULL,NULLHANDLE,&iRectl,0); 3829 WinFillRect(pAD->hps,&iRectl, 3830 standardcolors[Colors[COLORS_NORMALBACK]]); 3831 iRectl = Rectl; 3832 iRectl.yTop -= ((numlines * pAD->lMaxHeight) + 3833 pAD->lMaxDescender); 3834 WinFillRect(pAD->hps,&iRectl, 3835 standardcolors[pAD->colors[COLORS_NORMALBACK]]); 3836 PaintLine(hwnd,pAD->hps,pAD->topfile - 1,pAD->topfile,&Rectl); 3837 if(pAD->cursored != pAD->topfile) 3838 PaintLine(hwnd,pAD->hps,pAD->cursored - 1,pAD->topfile,&Rectl); 3839 if(pAD->cursored != wascursored && 3840 wascursored >= pAD->topfile && 3841 wascursored < pAD->topfile + numlines) 3842 PaintLine(hwnd,pAD->hps,wascursored - 1,pAD->topfile,&Rectl); 3843 if(pAD->cursored != wascursored) 3844 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 3845 WinSendMsg(pAD->hhscroll,SBM_SETSCROLLBAR, 3846 MPFROMSHORT((SHORT)abs(pAD->horzscroll)), 3847 MPFROM2SHORT(0,(SHORT)(pAD->maxx - Rectl.xRight))); 3848 WinSendMsg(pAD->hvscroll,SBM_SETSCROLLBAR, 3849 MPFROMSHORT((SHORT)(pAD->topfile / 3850 pAD->multiplier)), 3851 MPFROM2SHORT(1,(SHORT)(pAD->afifiles / 3852 pAD->multiplier) - 3853 (numlines - 1))); 3854 } 3855 break; 3856 case SB_SLIDERTRACK: 3857 if((SHORT1FROMMP(mp2) >= 1) || 3858 (SHORT1FROMMP(mp2)) <= pAD->afifiles) { 3859 pAD->topfile = (ULONG)SHORT1FROMMP(mp2) * pAD->multiplier; 3860 if(pAD->topfile > (pAD->afifiles + 1) - numlines) 3861 pAD->topfile = (pAD->afifiles + 1) - numlines; 3862 if(!pAD->topfile) 3863 pAD->topfile = 1; 3864 if(pAD->cursored < pAD->topfile) 3865 pAD->cursored = pAD->topfile; 3866 else if(pAD->cursored > pAD->topfile + numlines) 3867 pAD->cursored = pAD->topfile + numlines; 3868 if(pAD->cursored > pAD->afifiles) 3869 pAD->cursored = pAD->afifiles; 3870 WinInvalidateRect(hwnd,NULL,FALSE); 3871 } 3872 else 3873 WinAlarm(HWND_DESKTOP,WA_NOTE); 3874 break; 3875 } 3876 } 3877 } 3878 DosReleaseMutexSem(pAD->ScanSem); 3822 3879 } 3823 3880 break; 3824 3881 3825 3882 case WM_INITMENU: 3826 if( ad) {3827 switch(SHORT1FROMMP(mp1)) {3828 case IDM_FILESMENU:3829 {3830 APIRET rc;3831 3832 rc = DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN);3833 WinEnableMenuItem((HWND)mp2,IDM_DUPES,(rc == 0));3834 WinEnableMenuItem((HWND)mp2,IDM_COLLECT,(rc == 0 &&3835 ad->selected != 0));3836 WinEnableMenuItem((HWND)mp2,IDM_SAVETOCLIP,(rc == 0 &&3837 ad->selected != 0));3838 WinEnableMenuItem((HWND)mp2,IDM_APPENDTOCLIP,(rc == 0 &&3839 ad->selected != 0));3840 WinEnableMenuItem((HWND)mp2,IDM_SAVETOLIST,(rc == 0 &&3841 ad->selected != 0));3842 WinEnableMenuItem((HWND)mp2,IDM_REMOVE,(rc == 0 &&3843 ad->selected != 0));3844 WinEnableMenuItem((HWND)mp2,IDM_HIDEALL,(rc == 0 &&3845 ad->selected != 0));3846 WinEnableMenuItem((HWND)mp2,IDM_DELETESUBMENU,(rc == 0 &&3847 ad->selected != 0));3848 WinEnableMenuItem((HWND)mp2,IDM_INFO,(rc == 0 &&3849 ad->selected != 0));3850 WinEnableMenuItem((HWND)mp2,IDM_ATTRS,(rc == 0 &&3851 ad->selected != 0));3852 WinEnableMenuItem((HWND)mp2,IDM_EAS,(rc == 0 &&3853 ad->selected != 0));3854 WinEnableMenuItem((HWND)mp2,IDM_UUDECODE,(rc == 0 &&3855 ad->selected != 0));3856 WinEnableMenuItem((HWND)mp2,IDM_EXTRACT,(rc == 0 &&3857 ad->selected != 0));3858 WinEnableMenuItem((HWND)mp2,IDM_ARCHIVE,(rc == 0 &&3859 ad->selected != 0));3860 WinEnableMenuItem((HWND)mp2,IDM_MOVEMENU,(rc == 0 &&3861 ad->selected != 0));3862 WinEnableMenuItem((HWND)mp2,IDM_COPYMENU,(rc == 0 &&3863 ad->selected != 0));3864 WinEnableMenuItem((HWND)mp2,IDM_RENAME,(rc == 0 &&3865 ad->selected != 0));3866 WinEnableMenuItem((HWND)mp2,IDM_PRINT,(rc == 0 &&3867 ad->selected != 0));3868 WinEnableMenuItem((HWND)mp2,IDM_SUBJECT,(rc == 0 &&3869 ad->selected != 0));3870 WinEnableMenuItem((HWND)mp2,IDM_OPENSUBMENU,(rc == 0 &&3871 ad->selected != 0));3872 WinEnableMenuItem((HWND)mp2,IDM_OBJECTSUBMENU,(rc == 0 &&3873 ad->selected != 0));3874 if(!rc)3875 DosReleaseMutexSem(ad->ScanSem);3876 }3877 break;3878 3879 case IDM_SELECTSUBMENU:3880 {3881 APIRET rc;3882 3883 rc = DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN);3884 WinEnableMenuItem((HWND)mp2,IDM_SELECTALL,(rc == 0 &&3885 ad->afifiles != 0 &&3886 (ad->afifiles !=3887 ad->selected ||3888 !ad->selected)));3889 WinEnableMenuItem((HWND)mp2,IDM_SELECTMASK,(rc == 0 &&3890 ad->afifiles != 0 &&3891 (ad->afifiles !=3892 ad->selected ||3893 !ad->selected)));3894 WinEnableMenuItem((HWND)mp2,IDM_DESELECTALL,(rc == 0 &&3895 ad->afifiles != 0 &&3896 ad->selected));3897 WinEnableMenuItem((HWND)mp2,IDM_DESELECTMASK,(rc == 0 &&3898 ad->afifiles != 0) &&3899 ad->selected);3900 WinEnableMenuItem((HWND)mp2,IDM_INVERT,(rc == 0 &&3901 ad->afifiles != 0));3902 if(!rc)3903 DosReleaseMutexSem(ad->ScanSem);3904 }3905 break;3906 3907 case IDM_SORTSUBMENU:3908 {3909 APIRET rc;3910 3911 rc = DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN);3912 WinEnableMenuItem((HWND)mp2,IDM_SORTNAME,(rc == 0));3913 WinEnableMenuItem((HWND)mp2,IDM_SORTEASIZE,(rc == 0));3914 WinEnableMenuItem((HWND)mp2,IDM_SORTSIZE,(rc == 0));3915 WinEnableMenuItem((HWND)mp2,IDM_SORTLWDATE,(rc == 0));3916 WinEnableMenuItem((HWND)mp2,IDM_SORTFILENAME,(rc == 0));3917 WinEnableMenuItem((HWND)mp2,IDM_SORTFIRST,(rc == 0));3918 if(!rc)3919 DosReleaseMutexSem(ad->ScanSem);3920 }3921 WinCheckMenuItem((HWND)mp2,IDM_SORTNAME,3922 (ad->compare == comparefullnames));3923 WinCheckMenuItem((HWND)mp2,IDM_SORTEASIZE,3924 (ad->compare == (PFNSORT)NULL));3925 WinCheckMenuItem((HWND)mp2,IDM_SORTSIZE,3926 (ad->compare == comparesizes));3927 WinCheckMenuItem((HWND)mp2,IDM_SORTLWDATE,3928 (ad->compare == comparedates));3929 WinCheckMenuItem((HWND)mp2,IDM_SORTFILENAME,3930 (ad->compare == comparenames));3931 WinCheckMenuItem((HWND)mp2,IDM_SORTREVERSE,ad->invertsort);3932 WinCheckMenuItem((HWND)mp2,IDM_SORTFIRST,3933 (ad->compare == compareexts));3934 break;3935 3936 case IDM_VIEWSMENU:3937 {3938 APIRET rc;3939 3940 rc = DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN);3941 WinEnableMenuItem((HWND)mp2,IDM_RESCAN,(rc == 0));3942 WinEnableMenuItem((HWND)mp2,IDM_FILTER,(rc == 0 &&3943 ad->affiles != 0));3944 if(!rc)3945 DosReleaseMutexSem(ad->ScanSem);3946 }3947 WinCheckMenuItem((HWND)mp2,IDM_SHOWLNAMES,ad->fullnames);3948 break;3949 }3883 if(pAD) { 3884 switch(SHORT1FROMMP(mp1)) { 3885 case IDM_FILESMENU: 3886 { 3887 APIRET rc; 3888 3889 rc = DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN); 3890 WinEnableMenuItem((HWND)mp2,IDM_DUPES,(rc == 0)); 3891 WinEnableMenuItem((HWND)mp2,IDM_COLLECT,(rc == 0 && 3892 pAD->selected != 0)); 3893 WinEnableMenuItem((HWND)mp2,IDM_SAVETOCLIP,(rc == 0 && 3894 pAD->selected != 0)); 3895 WinEnableMenuItem((HWND)mp2,IDM_APPENDTOCLIP,(rc == 0 && 3896 pAD->selected != 0)); 3897 WinEnableMenuItem((HWND)mp2,IDM_SAVETOLIST,(rc == 0 && 3898 pAD->selected != 0)); 3899 WinEnableMenuItem((HWND)mp2,IDM_REMOVE,(rc == 0 && 3900 pAD->selected != 0)); 3901 WinEnableMenuItem((HWND)mp2,IDM_HIDEALL,(rc == 0 && 3902 pAD->selected != 0)); 3903 WinEnableMenuItem((HWND)mp2,IDM_DELETESUBMENU,(rc == 0 && 3904 pAD->selected != 0)); 3905 WinEnableMenuItem((HWND)mp2,IDM_INFO,(rc == 0 && 3906 pAD->selected != 0)); 3907 WinEnableMenuItem((HWND)mp2,IDM_ATTRS,(rc == 0 && 3908 pAD->selected != 0)); 3909 WinEnableMenuItem((HWND)mp2,IDM_EAS,(rc == 0 && 3910 pAD->selected != 0)); 3911 WinEnableMenuItem((HWND)mp2,IDM_UUDECODE,(rc == 0 && 3912 pAD->selected != 0)); 3913 WinEnableMenuItem((HWND)mp2,IDM_EXTRACT,(rc == 0 && 3914 pAD->selected != 0)); 3915 WinEnableMenuItem((HWND)mp2,IDM_ARCHIVE,(rc == 0 && 3916 pAD->selected != 0)); 3917 WinEnableMenuItem((HWND)mp2,IDM_MOVEMENU,(rc == 0 && 3918 pAD->selected != 0)); 3919 WinEnableMenuItem((HWND)mp2,IDM_COPYMENU,(rc == 0 && 3920 pAD->selected != 0)); 3921 WinEnableMenuItem((HWND)mp2,IDM_RENAME,(rc == 0 && 3922 pAD->selected != 0)); 3923 WinEnableMenuItem((HWND)mp2,IDM_PRINT,(rc == 0 && 3924 pAD->selected != 0)); 3925 WinEnableMenuItem((HWND)mp2,IDM_SUBJECT,(rc == 0 && 3926 pAD->selected != 0)); 3927 WinEnableMenuItem((HWND)mp2,IDM_OPENSUBMENU,(rc == 0 && 3928 pAD->selected != 0)); 3929 WinEnableMenuItem((HWND)mp2,IDM_OBJECTSUBMENU,(rc == 0 && 3930 pAD->selected != 0)); 3931 if(!rc) 3932 DosReleaseMutexSem(pAD->ScanSem); 3933 } 3934 break; 3935 3936 case IDM_SELECTSUBMENU: 3937 { 3938 APIRET rc; 3939 3940 rc = DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN); 3941 WinEnableMenuItem((HWND)mp2,IDM_SELECTALL,(rc == 0 && 3942 pAD->afifiles != 0 && 3943 (pAD->afifiles != 3944 pAD->selected || 3945 !pAD->selected))); 3946 WinEnableMenuItem((HWND)mp2,IDM_SELECTMASK,(rc == 0 && 3947 pAD->afifiles != 0 && 3948 (pAD->afifiles != 3949 pAD->selected || 3950 !pAD->selected))); 3951 WinEnableMenuItem((HWND)mp2,IDM_DESELECTALL,(rc == 0 && 3952 pAD->afifiles != 0 && 3953 pAD->selected)); 3954 WinEnableMenuItem((HWND)mp2,IDM_DESELECTMASK,(rc == 0 && 3955 pAD->afifiles != 0) && 3956 pAD->selected); 3957 WinEnableMenuItem((HWND)mp2,IDM_INVERT,(rc == 0 && 3958 pAD->afifiles != 0)); 3959 if(!rc) 3960 DosReleaseMutexSem(pAD->ScanSem); 3961 } 3962 break; 3963 3964 case IDM_SORTSUBMENU: 3965 { 3966 APIRET rc; 3967 3968 rc = DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN); 3969 WinEnableMenuItem((HWND)mp2,IDM_SORTNAME,(rc == 0)); 3970 WinEnableMenuItem((HWND)mp2,IDM_SORTEASIZE,(rc == 0)); 3971 WinEnableMenuItem((HWND)mp2,IDM_SORTSIZE,(rc == 0)); 3972 WinEnableMenuItem((HWND)mp2,IDM_SORTLWDATE,(rc == 0)); 3973 WinEnableMenuItem((HWND)mp2,IDM_SORTFILENAME,(rc == 0)); 3974 WinEnableMenuItem((HWND)mp2,IDM_SORTFIRST,(rc == 0)); 3975 if(!rc) 3976 DosReleaseMutexSem(pAD->ScanSem); 3977 } 3978 WinCheckMenuItem((HWND)mp2,IDM_SORTNAME, 3979 (pAD->compare == comparefullnames)); 3980 WinCheckMenuItem((HWND)mp2,IDM_SORTEASIZE, 3981 (pAD->compare == (PFNSORT)NULL)); 3982 WinCheckMenuItem((HWND)mp2,IDM_SORTSIZE, 3983 (pAD->compare == comparesizes)); 3984 WinCheckMenuItem((HWND)mp2,IDM_SORTLWDATE, 3985 (pAD->compare == comparedates)); 3986 WinCheckMenuItem((HWND)mp2,IDM_SORTFILENAME, 3987 (pAD->compare == comparenames)); 3988 WinCheckMenuItem((HWND)mp2,IDM_SORTREVERSE,pAD->invertsort); 3989 WinCheckMenuItem((HWND)mp2,IDM_SORTFIRST, 3990 (pAD->compare == compareexts)); 3991 break; 3992 3993 case IDM_VIEWSMENU: 3994 { 3995 APIRET rc; 3996 3997 rc = DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN); 3998 WinEnableMenuItem((HWND)mp2,IDM_RESCAN,(rc == 0)); 3999 WinEnableMenuItem((HWND)mp2,IDM_FILTER,(rc == 0 && 4000 pAD->affiles != 0)); 4001 if(!rc) 4002 DosReleaseMutexSem(pAD->ScanSem); 4003 } 4004 WinCheckMenuItem((HWND)mp2,IDM_SHOWLNAMES,pAD->fullnames); 4005 break; 4006 } 3950 4007 } 3951 4008 break; 3952 4009 3953 4010 case WM_COMMAND: 3954 if(! ad)3955 return 0;4011 if(!pAD) 4012 return 0; 3956 4013 switch(SHORT1FROMMP(mp1)) { 3957 case IDM_SETTARGET: 3958 SetTargetDir(hwnd,FALSE); 3959 break; 3960 3961 case IDM_DUPES: 3962 if(!ad->stopflag && 3963 !DosRequestMutexSem(ad->ScanSem, 3964 SEM_IMMEDIATE_RETURN)) { 3965 ad->dupeflags = (USHORT)WinDlgBox(HWND_DESKTOP, 3966 hwnd, 3967 DupeDlgProc, 3968 FM3ModHandle, 3969 DUPE_FRAME, 3970 MPFROM2SHORT(ad->dupeflags,0)); 3971 if(ad->dupeflags) { 3972 if(_beginthread(FindDupes, 3973 NULL, 3974 65536, 3975 (PVOID)hwnd) == -1) 3976 DosBeep(50,100); 3977 } 3978 DosReleaseMutexSem(ad->ScanSem); 3979 } 3980 break; 3981 3982 case IDM_COLORPALETTE: 3983 { 3984 COLORS co; 3985 LONG temp[COLORS_MAX]; 3986 3987 memset(&co,0,sizeof(co)); 3988 co.size = sizeof(co); 3989 co.numcolors = COLORS_MAX; 3990 co.colors = ad->colors; 3991 co.descriptions = IDS_SACOLORS1TEXT; 3992 co.origs = temp; 3993 co.prompt = IDS_SACOLORSPROMPTTEXT; 3994 memcpy(temp, 3995 ad->colors, 3996 sizeof(LONG) * COLORS_MAX); 3997 if(WinDlgBox(HWND_DESKTOP, 3998 hwnd, 3999 ColorDlgProc, 4000 FM3ModHandle, 4001 COLOR_FRAME, 4002 (PVOID)&co)) { 4003 memcpy(Colors, 4004 ad->colors, 4005 sizeof(LONG) * COLORS_MAX); 4006 PrfWriteProfileData(fmprof, 4007 appname, 4008 "Seeall.Colors", 4009 &ad->colors, 4010 sizeof(LONG) * COLORS_MAX); 4011 WinInvalidateRect(hwnd, 4012 NULL, 4013 FALSE); 4014 } 4015 } 4016 break; 4017 4018 case IDM_CODEPAGE: 4019 { 4020 INT cp; 4021 4022 cp = PickCodepage(hwnd); 4023 if(cp != -1) { 4024 ad->fattrs.usCodePage = (USHORT)cp; 4025 Codepage = ad->fattrs.usCodePage; 4026 PrfWriteProfileData(fmprof, 4027 appname, 4028 "Seeall.Codepage", 4029 &ad->fattrs.usCodePage, 4030 sizeof(USHORT)); 4031 GpiDeleteSetId(ad->hps,FIXED_FONT_LCID); 4032 GpiAssociate(ad->hps,0); 4033 GpiDestroyPS(ad->hps); 4034 ad->hps = InitWindow(hwnd); 4035 ad->maxx = ad->horzscroll = 0; 4036 WinInvalidateRect(hwnd,NULL,FALSE); 4037 } 4038 } 4039 break; 4040 4041 case IDM_FONTPALETTE: 4042 SetMLEFont(hwnd,&ad->fattrs,11); 4043 PrfWriteProfileData(fmprof, 4044 appname, 4045 "Seeall.Fattrs", 4046 &ad->fattrs, 4047 sizeof(FATTRS)); 4048 Fattrs = ad->fattrs; 4049 GpiDeleteSetId(ad->hps,FIXED_FONT_LCID); 4050 GpiAssociate(ad->hps,0); 4051 GpiDestroyPS(ad->hps); 4052 ad->hps = InitWindow(hwnd); 4053 ad->maxx = ad->horzscroll = 0; 4054 WinInvalidateRect(hwnd,NULL,FALSE); 4055 break; 4056 4057 case IDM_SHOWLNAMES: 4058 ad->fullnames = (ad->fullnames) ? FALSE : TRUE; 4059 PrfWriteProfileData(fmprof, 4060 appname, 4061 "Seeall.Fullnames", 4062 &ad->fullnames, 4063 sizeof(BOOL)); 4064 Fullnames = ad->fullnames; 4065 ad->maxx = ad->horzscroll = 0; 4066 WinInvalidateRect(hwnd,NULL,FALSE); 4067 break; 4068 4069 case IDM_SORTREVERSE: 4070 ad->invertsort = (ad->invertsort) ? FALSE : TRUE; 4071 SortReverse = ad->invertsort; 4072 PrfWriteProfileData(fmprof, 4073 appname, 4074 "Seeall.SortReverse", 4075 (PVOID)&ad->invertsort, 4076 sizeof(BOOL)); 4077 WinInvalidateRect(hwnd,NULL,FALSE); 4078 break; 4079 4080 case IDM_SORTEASIZE: 4081 case IDM_SORTNAME: 4082 case IDM_SORTFILENAME: 4083 case IDM_SORTSIZE: 4084 case IDM_SORTLWDATE: 4085 case IDM_SORTFIRST: 4086 if(!ad->stopflag && 4087 !DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) { 4088 { 4089 USHORT dummy = SHORT1FROMMP(mp1); 4090 4091 PrfWriteProfileData(fmprof, 4092 appname, 4093 "Seeall.Sort", 4094 (PVOID)&dummy, 4095 sizeof(USHORT)); 4096 SortType = SHORT1FROMMP(mp1); 4097 } 4098 WinSetPointer(HWND_DESKTOP,hptrBusy); 4099 WinSendMsg(hwnd,UM_RESCAN,MPFROMLONG(1L),MPVOID); 4100 switch(SHORT1FROMMP(mp1)) { 4101 case IDM_SORTEASIZE: 4102 ad->compare = (PFNSORT)NULL; 4103 ReSort(hwnd); 4104 break; 4105 4106 case IDM_SORTNAME: 4107 ad->compare = comparefullnames; 4108 ReSort(hwnd); 4109 break; 4110 4111 case IDM_SORTFILENAME: 4112 ad->compare = comparenames; 4113 ReSort(hwnd); 4114 break; 4115 4116 case IDM_SORTSIZE: 4117 ad->compare = comparesizes; 4118 ReSort(hwnd); 4119 break; 4120 4121 case IDM_SORTLWDATE: 4122 ad->compare = comparedates; 4123 ReSort(hwnd); 4124 break; 4125 4126 case IDM_SORTFIRST: 4127 ad->compare = compareexts; 4128 ReSort(hwnd); 4129 break; 4130 } 4131 WinSetPointer(HWND_DESKTOP,hptrArrow); 4132 DosReleaseMutexSem(ad->ScanSem); 4133 WinInvalidateRect(hwnd,NULL,FALSE); 4134 } 4135 break; 4136 4137 case IDM_FILTER: 4138 if(!ad->stopflag && 4139 !DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) { 4140 FilterList(hwnd); 4141 DosReleaseMutexSem(ad->ScanSem); 4142 } 4143 break; 4144 4145 case IDM_RESCAN: 4146 if(!ad->stopflag && 4147 !DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) { 4148 4149 CHAR tempflags[26]; 4150 4151 memcpy(tempflags,ad->drvsflags,sizeof(tempflags)); 4152 if(!WinDlgBox(HWND_DESKTOP,hwnd,AFDrvsWndProc,FM3ModHandle, 4153 DRVS_FRAME,(PVOID)ad)) { 4154 memcpy(ad->drvsflags,tempflags,sizeof(tempflags)); 4155 *ad->findpath = 0; 4156 DosReleaseMutexSem(ad->ScanSem); 4157 break; 4158 } 4159 WinSendMsg(ad->hhscroll,SBM_SETTHUMBSIZE,MPFROM2SHORT(1,1), 4160 MPVOID); 4161 WinSendMsg(ad->hvscroll,SBM_SETTHUMBSIZE,MPFROM2SHORT(1,1), 4162 MPVOID); 4163 ad->topfile = 1; 4164 ad->cursored = 1; 4165 ad->selected = ad->selbytes = 0; 4166 ad->maxx = ad->horzscroll = 0; 4167 FreeAllFilesList(hwnd); 4168 ad->stopflag = 0; 4169 if(_beginthread(FindAll,NULL,524288,(PVOID)hwnd) != -1) { 4170 DosReleaseMutexSem(ad->ScanSem); 4171 DosSleep(100); 4172 WinInvalidateRect(hwnd,NULL,FALSE); 4173 PostMsg(hwnd,UM_SETUP2,MPVOID,MPVOID); 4174 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 4175 } 4176 else { 4177 DosBeep(250,100); 4178 WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT)); 4179 DosReleaseMutexSem(ad->ScanSem); 4180 } 4181 } 4182 break; 4183 4184 case IDM_DELETE: 4185 case IDM_PERMDELETE: 4186 case IDM_SELECTALL: 4187 case IDM_DESELECTALL: 4188 case IDM_INVERT: 4189 case IDM_SELECTMASK: 4190 case IDM_DESELECTMASK: 4191 case IDM_REMOVE: 4192 case IDM_HIDEALL: 4193 case IDM_COLLECT: 4194 case IDM_COLLECTOR: 4195 case IDM_SAVETOCLIP: 4196 case IDM_APPENDTOCLIP: 4197 case IDM_SAVETOLIST: 4198 case IDM_INFO: 4199 case IDM_ATTRS: 4200 case IDM_MOVE: 4201 case IDM_COPY: 4202 case IDM_RENAME: 4203 case IDM_MOVEPRESERVE: 4204 case IDM_COPYPRESERVE: 4205 case IDM_WILDMOVE: 4206 case IDM_WILDCOPY: 4207 case IDM_SUBJECT: 4208 case IDM_EAS: 4209 case IDM_PRINT: 4210 case IDM_ARCHIVE: 4211 case IDM_EXTRACT: 4212 case IDM_UUDECODE: 4213 case IDM_SHADOW: 4214 case IDM_OBJECT: 4215 case IDM_OPENSETTINGS: 4216 case IDM_OPENDEFAULT: 4217 if(!ad->stopflag && 4218 !DosRequestMutexSem(ad->ScanSem,SEM_IMMEDIATE_RETURN)) { 4219 switch(SHORT1FROMMP(mp1)) { 4220 case IDM_SELECTALL: 4221 case IDM_DESELECTALL: 4222 case IDM_INVERT: 4223 case IDM_HIDEALL: 4224 case IDM_REMOVE: 4225 Mark(hwnd,(SHORT1FROMMP(mp1) == IDM_DESELECTALL) ? 4226 AFM_UNMARK : (SHORT1FROMMP(mp1) == IDM_INVERT) ? 4227 AFM_INVERT : (SHORT1FROMMP(mp1) == IDM_HIDEALL) ? 4228 AFM_FILTER : (SHORT1FROMMP(mp1) == IDM_REMOVE) ? 4229 AFM_MARKDELETED : 0,NULL); 4230 if(SHORT1FROMMP(mp1) == IDM_REMOVE || 4231 SHORT1FROMMP(mp1) == IDM_HIDEALL) { 4232 if(SHORT1FROMMP(mp1) == IDM_REMOVE) 4233 RemoveDeleted(hwnd); 4234 else 4235 ReSort(hwnd); 4236 } 4237 WinInvalidateRect(hwnd,NULL,FALSE); 4238 break; 4239 4240 case IDM_SELECTMASK: 4241 case IDM_DESELECTMASK: 4242 SelectMask(hwnd,(SHORT1FROMMP(mp1) == IDM_DESELECTMASK)); 4243 WinInvalidateRect(hwnd,NULL,FALSE); 4244 break; 4245 4246 case IDM_DELETE: 4247 case IDM_PERMDELETE: 4248 case IDM_APPENDTOCLIP: 4249 case IDM_SAVETOCLIP: 4250 case IDM_SAVETOLIST: 4251 case IDM_COLLECT: 4252 case IDM_INFO: 4253 case IDM_ATTRS: 4254 case IDM_MOVE: 4255 case IDM_COPY: 4256 case IDM_RENAME: 4257 case IDM_MOVEPRESERVE: 4258 case IDM_COPYPRESERVE: 4259 case IDM_WILDMOVE: 4260 case IDM_WILDCOPY: 4261 case IDM_SUBJECT: 4262 case IDM_PRINT: 4263 case IDM_EAS: 4264 case IDM_ARCHIVE: 4265 case IDM_EXTRACT: 4266 case IDM_SHADOW: 4267 case IDM_OBJECT: 4268 case IDM_OPENSETTINGS: 4269 case IDM_OPENDEFAULT: 4270 case IDM_UUDECODE: 4271 { 4272 CHAR **list = BuildAList(hwnd); 4273 4274 if(list) { 4275 switch(SHORT1FROMMP(mp1)) { 4276 case IDM_COLLECT: 4277 CollectList(hwnd,list); 4278 break; 4279 case IDM_DELETE: 4280 case IDM_PERMDELETE: 4281 case IDM_APPENDTOCLIP: 4282 case IDM_SAVETOCLIP: 4283 case IDM_SAVETOLIST: 4284 case IDM_INFO: 4285 case IDM_ATTRS: 4286 case IDM_MOVE: 4287 case IDM_COPY: 4288 case IDM_RENAME: 4289 case IDM_MOVEPRESERVE: 4290 case IDM_COPYPRESERVE: 4291 case IDM_WILDMOVE: 4292 case IDM_WILDCOPY: 4293 case IDM_SUBJECT: 4294 case IDM_PRINT: 4295 case IDM_EAS: 4296 case IDM_ARCHIVE: 4297 case IDM_EXTRACT: 4298 case IDM_UUDECODE: 4299 case IDM_OBJECT: 4300 case IDM_SHADOW: 4301 case IDM_OPENSETTINGS: 4302 case IDM_OPENDEFAULT: 4303 if(!PostMsg(ad->hwndObj,UM_MASSACTION,mp1, 4304 MPFROMP(list))) 4305 FreeList(list); 4306 break; 4307 } 4308 if(fUnHilite) { 4309 Mark(hwnd,AFM_UNMARK,NULL); 4310 WinInvalidateRect(hwnd,NULL,FALSE); 4311 } 4312 } 4313 else 4314 DosBeep(50,100); 4315 } 4316 break; 4317 4318 case IDM_COLLECTOR: 4319 if(mp2) { 4320 4321 CHAR **list = mp2; 4322 4323 if(Collector) { 4324 if(!PostMsg(Collector,WM_COMMAND, 4325 MPFROM2SHORT(IDM_COLLECTOR,0), 4326 MPFROMP(list))) 4327 FreeList(list); 4328 else if(fUnHilite) { 4329 Mark(hwnd,AFM_UNMARK,NULL); 4330 WinInvalidateRect(hwnd,NULL,FALSE); 4331 } 4332 } 4333 else 4334 FreeList(list); 4335 } 4336 break; 4337 } 4338 DosReleaseMutexSem(ad->ScanSem); 4339 } 4340 else if(SHORT1FROMMP(mp1) == IDM_COLLECTOR) { 4341 DosSleep(100L); 4342 if(!PostMsg(hwnd,msg,mp1,mp2)) 4343 WinSendMsg(hwnd,msg,mp1,mp2); 4344 } 4345 break; 4346 4347 case IDM_HELP: 4348 if(hwndHelp) 4349 WinSendMsg(hwndHelp, 4350 HM_DISPLAY_HELP, 4351 MPFROM2SHORT(HELP_SEEALL,0), 4352 MPFROMSHORT(HM_RESOURCEID)); 4353 break; 4014 case IDM_SETTARGET: 4015 SetTargetDir(hwnd,FALSE); 4016 break; 4017 4018 case IDM_DUPES: 4019 if(!pAD->stopflag && 4020 !DosRequestMutexSem(pAD->ScanSem, 4021 SEM_IMMEDIATE_RETURN)) { 4022 pAD->dupeflags = (USHORT)WinDlgBox(HWND_DESKTOP, 4023 hwnd, 4024 DupeDlgProc, 4025 FM3ModHandle, 4026 DUPE_FRAME, 4027 MPFROM2SHORT(pAD->dupeflags,0)); 4028 if(pAD->dupeflags) { 4029 if(_beginthread(FindDupes, 4030 NULL, 4031 65536, 4032 (PVOID)hwnd) == -1) 4033 DosBeep(50,100); 4034 } 4035 DosReleaseMutexSem(pAD->ScanSem); 4036 } 4037 break; 4038 4039 case IDM_COLORPALETTE: 4040 { 4041 COLORS co; 4042 LONG temp[COLORS_MAX]; 4043 4044 memset(&co,0,sizeof(co)); 4045 co.size = sizeof(co); 4046 co.numcolors = COLORS_MAX; 4047 co.colors = pAD->colors; 4048 co.descriptions = IDS_SACOLORS1TEXT; 4049 co.origs = temp; 4050 co.prompt = IDS_SACOLORSPROMPTTEXT; 4051 memcpy(temp, 4052 pAD->colors, 4053 sizeof(LONG) * COLORS_MAX); 4054 if(WinDlgBox(HWND_DESKTOP, 4055 hwnd, 4056 ColorDlgProc, 4057 FM3ModHandle, 4058 COLOR_FRAME, 4059 (PVOID)&co)) { 4060 memcpy(Colors, 4061 pAD->colors, 4062 sizeof(LONG) * COLORS_MAX); 4063 PrfWriteProfileData(fmprof, 4064 appname, 4065 "Seeall.Colors", 4066 &pAD->colors, 4067 sizeof(LONG) * COLORS_MAX); 4068 WinInvalidateRect(hwnd, 4069 NULL, 4070 FALSE); 4071 } 4072 } 4073 break; 4074 4075 case IDM_CODEPAGE: 4076 { 4077 INT cp; 4078 4079 cp = PickCodepage(hwnd); 4080 if(cp != -1) { 4081 pAD->fattrs.usCodePage = (USHORT)cp; 4082 Codepage = pAD->fattrs.usCodePage; 4083 PrfWriteProfileData(fmprof, 4084 appname, 4085 "Seeall.Codepage", 4086 &pAD->fattrs.usCodePage, 4087 sizeof(USHORT)); 4088 GpiDeleteSetId(pAD->hps,FIXED_FONT_LCID); 4089 GpiAssociate(pAD->hps,0); 4090 GpiDestroyPS(pAD->hps); 4091 pAD->hps = InitWindow(hwnd); 4092 pAD->maxx = pAD->horzscroll = 0; 4093 WinInvalidateRect(hwnd,NULL,FALSE); 4094 } 4095 } 4096 break; 4097 4098 case IDM_FONTPALETTE: 4099 SetMLEFont(hwnd,&pAD->fattrs,11); 4100 PrfWriteProfileData(fmprof, 4101 appname, 4102 "Seeall.Fattrs", 4103 &pAD->fattrs, 4104 sizeof(pAD->fattrs)); 4105 Fattrs = pAD->fattrs; 4106 GpiDeleteSetId(pAD->hps,FIXED_FONT_LCID); 4107 GpiAssociate(pAD->hps,0); 4108 GpiDestroyPS(pAD->hps); 4109 pAD->hps = InitWindow(hwnd); 4110 pAD->maxx = pAD->horzscroll = 0; 4111 WinInvalidateRect(hwnd,NULL,FALSE); 4112 break; 4113 4114 case IDM_SHOWLNAMES: 4115 pAD->fullnames = (pAD->fullnames) ? FALSE : TRUE; 4116 PrfWriteProfileData(fmprof, 4117 appname, 4118 "Seeall.Fullnames", 4119 &pAD->fullnames, 4120 sizeof(BOOL)); 4121 Fullnames = pAD->fullnames; 4122 pAD->maxx = pAD->horzscroll = 0; 4123 WinInvalidateRect(hwnd,NULL,FALSE); 4124 break; 4125 4126 case IDM_SORTREVERSE: 4127 pAD->invertsort = (pAD->invertsort) ? FALSE : TRUE; 4128 SortReverse = pAD->invertsort; 4129 PrfWriteProfileData(fmprof, 4130 appname, 4131 "Seeall.SortReverse", 4132 (PVOID)&pAD->invertsort, 4133 sizeof(BOOL)); 4134 WinInvalidateRect(hwnd,NULL,FALSE); 4135 break; 4136 4137 case IDM_SORTEASIZE: 4138 case IDM_SORTNAME: 4139 case IDM_SORTFILENAME: 4140 case IDM_SORTSIZE: 4141 case IDM_SORTLWDATE: 4142 case IDM_SORTFIRST: 4143 if(!pAD->stopflag && 4144 !DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 4145 { 4146 USHORT dummy = SHORT1FROMMP(mp1); 4147 4148 PrfWriteProfileData(fmprof, 4149 appname, 4150 "Seeall.Sort", 4151 (PVOID)&dummy, 4152 sizeof(USHORT)); 4153 SortType = SHORT1FROMMP(mp1); 4154 } 4155 WinSetPointer(HWND_DESKTOP,hptrBusy); 4156 WinSendMsg(hwnd,UM_RESCAN,MPFROMLONG(1L),MPVOID); 4157 switch(SHORT1FROMMP(mp1)) { 4158 case IDM_SORTEASIZE: 4159 pAD->compare = (PFNSORT)NULL; 4160 ReSort(hwnd); 4161 break; 4162 4163 case IDM_SORTNAME: 4164 pAD->compare = comparefullnames; 4165 ReSort(hwnd); 4166 break; 4167 4168 case IDM_SORTFILENAME: 4169 pAD->compare = comparenames; 4170 ReSort(hwnd); 4171 break; 4172 4173 case IDM_SORTSIZE: 4174 pAD->compare = comparesizes; 4175 ReSort(hwnd); 4176 break; 4177 4178 case IDM_SORTLWDATE: 4179 pAD->compare = comparedates; 4180 ReSort(hwnd); 4181 break; 4182 4183 case IDM_SORTFIRST: 4184 pAD->compare = compareexts; 4185 ReSort(hwnd); 4186 break; 4187 } 4188 WinSetPointer(HWND_DESKTOP,hptrArrow); 4189 DosReleaseMutexSem(pAD->ScanSem); 4190 WinInvalidateRect(hwnd,NULL,FALSE); 4191 } 4192 break; 4193 4194 case IDM_FILTER: 4195 if(!pAD->stopflag && 4196 !DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 4197 FilterList(hwnd); 4198 DosReleaseMutexSem(pAD->ScanSem); 4199 } 4200 break; 4201 4202 case IDM_RESCAN: 4203 if(!pAD->stopflag && 4204 !DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 4205 4206 CHAR tempflags[26]; 4207 4208 memcpy(tempflags,pAD->drvsflags,sizeof(tempflags)); 4209 if(!WinDlgBox(HWND_DESKTOP,hwnd,AFDrvsWndProc,FM3ModHandle, 4210 DRVS_FRAME,(PVOID)pAD)) { 4211 memcpy(pAD->drvsflags,tempflags,sizeof(tempflags)); 4212 *pAD->findpath = 0; 4213 DosReleaseMutexSem(pAD->ScanSem); 4214 break; 4215 } 4216 WinSendMsg(pAD->hhscroll,SBM_SETTHUMBSIZE,MPFROM2SHORT(1,1), 4217 MPVOID); 4218 WinSendMsg(pAD->hvscroll,SBM_SETTHUMBSIZE,MPFROM2SHORT(1,1), 4219 MPVOID); 4220 pAD->topfile = 1; 4221 pAD->cursored = 1; 4222 pAD->selected = 0; 4223 pAD->ulSelectedKB = 0; 4224 pAD->ulSelectedBytes = 0; 4225 pAD->maxx = pAD->horzscroll = 0; 4226 FreeAllFilesList(hwnd); 4227 pAD->stopflag = 0; 4228 if(_beginthread(FindAll,NULL,524288,(PVOID)hwnd) != -1) { 4229 DosReleaseMutexSem(pAD->ScanSem); 4230 DosSleep(100); 4231 WinInvalidateRect(hwnd,NULL,FALSE); 4232 PostMsg(hwnd,UM_SETUP2,MPVOID,MPVOID); 4233 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 4234 } 4235 else { 4236 DosBeep(250,100); 4237 WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT)); 4238 DosReleaseMutexSem(pAD->ScanSem); 4239 } 4240 } 4241 break; 4242 4243 case IDM_DELETE: 4244 case IDM_PERMDELETE: 4245 case IDM_SELECTALL: 4246 case IDM_DESELECTALL: 4247 case IDM_INVERT: 4248 case IDM_SELECTMASK: 4249 case IDM_DESELECTMASK: 4250 case IDM_REMOVE: 4251 case IDM_HIDEALL: 4252 case IDM_COLLECT: 4253 case IDM_COLLECTOR: 4254 case IDM_SAVETOCLIP: 4255 case IDM_APPENDTOCLIP: 4256 case IDM_SAVETOLIST: 4257 case IDM_INFO: 4258 case IDM_ATTRS: 4259 case IDM_MOVE: 4260 case IDM_COPY: 4261 case IDM_RENAME: 4262 case IDM_MOVEPRESERVE: 4263 case IDM_COPYPRESERVE: 4264 case IDM_WILDMOVE: 4265 case IDM_WILDCOPY: 4266 case IDM_SUBJECT: 4267 case IDM_EAS: 4268 case IDM_PRINT: 4269 case IDM_ARCHIVE: 4270 case IDM_EXTRACT: 4271 case IDM_UUDECODE: 4272 case IDM_SHADOW: 4273 case IDM_OBJECT: 4274 case IDM_OPENSETTINGS: 4275 case IDM_OPENDEFAULT: 4276 if(!pAD->stopflag && 4277 !DosRequestMutexSem(pAD->ScanSem,SEM_IMMEDIATE_RETURN)) { 4278 switch(SHORT1FROMMP(mp1)) { 4279 case IDM_SELECTALL: 4280 case IDM_DESELECTALL: 4281 case IDM_INVERT: 4282 case IDM_HIDEALL: 4283 case IDM_REMOVE: 4284 Mark(hwnd,(SHORT1FROMMP(mp1) == IDM_DESELECTALL) ? 4285 AFM_UNMARK : (SHORT1FROMMP(mp1) == IDM_INVERT) ? 4286 AFM_INVERT : (SHORT1FROMMP(mp1) == IDM_HIDEALL) ? 4287 AFM_FILTER : (SHORT1FROMMP(mp1) == IDM_REMOVE) ? 4288 AFM_MARKDELETED : 0,NULL); 4289 if(SHORT1FROMMP(mp1) == IDM_REMOVE || 4290 SHORT1FROMMP(mp1) == IDM_HIDEALL) { 4291 if(SHORT1FROMMP(mp1) == IDM_REMOVE) 4292 RemoveDeleted(hwnd); 4293 else 4294 ReSort(hwnd); 4295 } 4296 WinInvalidateRect(hwnd,NULL,FALSE); 4297 break; 4298 4299 case IDM_SELECTMASK: 4300 case IDM_DESELECTMASK: 4301 SelectMask(hwnd,(SHORT1FROMMP(mp1) == IDM_DESELECTMASK)); 4302 WinInvalidateRect(hwnd,NULL,FALSE); 4303 break; 4304 4305 case IDM_DELETE: 4306 case IDM_PERMDELETE: 4307 case IDM_APPENDTOCLIP: 4308 case IDM_SAVETOCLIP: 4309 case IDM_SAVETOLIST: 4310 case IDM_COLLECT: 4311 case IDM_INFO: 4312 case IDM_ATTRS: 4313 case IDM_MOVE: 4314 case IDM_COPY: 4315 case IDM_RENAME: 4316 case IDM_MOVEPRESERVE: 4317 case IDM_COPYPRESERVE: 4318 case IDM_WILDMOVE: 4319 case IDM_WILDCOPY: 4320 case IDM_SUBJECT: 4321 case IDM_PRINT: 4322 case IDM_EAS: 4323 case IDM_ARCHIVE: 4324 case IDM_EXTRACT: 4325 case IDM_SHADOW: 4326 case IDM_OBJECT: 4327 case IDM_OPENSETTINGS: 4328 case IDM_OPENDEFAULT: 4329 case IDM_UUDECODE: 4330 { 4331 CHAR **list = BuildAList(hwnd); 4332 4333 if(list) { 4334 switch(SHORT1FROMMP(mp1)) { 4335 case IDM_COLLECT: 4336 CollectList(hwnd,list); 4337 break; 4338 case IDM_DELETE: 4339 case IDM_PERMDELETE: 4340 case IDM_APPENDTOCLIP: 4341 case IDM_SAVETOCLIP: 4342 case IDM_SAVETOLIST: 4343 case IDM_INFO: 4344 case IDM_ATTRS: 4345 case IDM_MOVE: 4346 case IDM_COPY: 4347 case IDM_RENAME: 4348 case IDM_MOVEPRESERVE: 4349 case IDM_COPYPRESERVE: 4350 case IDM_WILDMOVE: 4351 case IDM_WILDCOPY: 4352 case IDM_SUBJECT: 4353 case IDM_PRINT: 4354 case IDM_EAS: 4355 case IDM_ARCHIVE: 4356 case IDM_EXTRACT: 4357 case IDM_UUDECODE: 4358 case IDM_OBJECT: 4359 case IDM_SHADOW: 4360 case IDM_OPENSETTINGS: 4361 case IDM_OPENDEFAULT: 4362 if(!PostMsg(pAD->hwndObj,UM_MASSACTION,mp1, 4363 MPFROMP(list))) 4364 FreeList(list); 4365 break; 4366 } 4367 if(fUnHilite) { 4368 Mark(hwnd,AFM_UNMARK,NULL); 4369 WinInvalidateRect(hwnd,NULL,FALSE); 4370 } 4371 } 4372 else 4373 DosBeep(50,100); 4374 } 4375 break; 4376 4377 case IDM_COLLECTOR: 4378 if(mp2) { 4379 4380 CHAR **list = mp2; 4381 4382 if(Collector) { 4383 if(!PostMsg(Collector,WM_COMMAND, 4384 MPFROM2SHORT(IDM_COLLECTOR,0), 4385 MPFROMP(list))) 4386 FreeList(list); 4387 else if(fUnHilite) { 4388 Mark(hwnd,AFM_UNMARK,NULL); 4389 WinInvalidateRect(hwnd,NULL,FALSE); 4390 } 4391 } 4392 else 4393 FreeList(list); 4394 } 4395 break; 4396 } 4397 DosReleaseMutexSem(pAD->ScanSem); 4398 } 4399 else if(SHORT1FROMMP(mp1) == IDM_COLLECTOR) { 4400 DosSleep(100L); 4401 if(!PostMsg(hwnd,msg,mp1,mp2)) 4402 WinSendMsg(hwnd,msg,mp1,mp2); 4403 } 4404 break; 4405 4406 case IDM_HELP: 4407 if(hwndHelp) 4408 WinSendMsg(hwndHelp, 4409 HM_DISPLAY_HELP, 4410 MPFROM2SHORT(HELP_SEEALL,0), 4411 MPFROMSHORT(HM_RESOURCEID)); 4412 break; 4354 4413 } 4355 4414 return 0; … … 4358 4417 // fprintf(stderr,"Seeall: WM_SIZE\n"); 4359 4418 PostMsg(hwnd, 4360 UM_SETUP3,4361 MPVOID,4362 MPVOID);4419 UM_SETUP3, 4420 MPVOID, 4421 MPVOID); 4363 4422 break; 4364 4423 4365 4424 case WM_CLOSE: 4366 4425 // fprintf(stderr,"Seeall: WM_CLOSE\n"); 4367 if( ad)4368 ad->stopflag = 1;4426 if(pAD) 4427 pAD->stopflag = 1; 4369 4428 WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT)); 4370 4429 return 0; … … 4372 4431 case WM_DESTROY: 4373 4432 // fprintf(stderr,"Seeall: WM_DESTROY\n"); 4374 if( ad) {4375 ad->stopflag = 1;4376 if(ad->ScanSem) {4377 DosRequestMutexSem(ad->ScanSem,15000L);4378 DosCloseMutexSem(ad->ScanSem);4379 }4380 if(ad->hwndPopup)4381 WinDestroyWindow(ad->hwndPopup);4382 if(ad->hwndObj) {4383 if(!PostMsg(ad->hwndObj,4384 WM_CLOSE,4385 MPVOID,4386 MPVOID))4387 WinSendMsg(ad->hwndObj,4388 WM_CLOSE,4389 MPVOID,4390 MPVOID);4391 }4392 if(ad->hps) {4393 GpiDeleteSetId(ad->hps,4394 FIXED_FONT_LCID);4395 GpiAssociate(ad->hps,0);4396 GpiDestroyPS(ad->hps);4397 }4398 if(ad->killme) {4399 if(!PostMsg((HWND)0,4400 WM_QUIT,4401 MPVOID,4402 MPVOID))4403 WinSendMsg((HWND)0,4404 WM_QUIT,4405 MPVOID,4406 MPVOID);4407 }4408 FreeAllFilesList(hwnd);4409 free(ad);4433 if(pAD) { 4434 pAD->stopflag = 1; 4435 if(pAD->ScanSem) { 4436 DosRequestMutexSem(pAD->ScanSem,15000L); 4437 DosCloseMutexSem(pAD->ScanSem); 4438 } 4439 if(pAD->hwndPopup) 4440 WinDestroyWindow(pAD->hwndPopup); 4441 if(pAD->hwndObj) { 4442 if(!PostMsg(pAD->hwndObj, 4443 WM_CLOSE, 4444 MPVOID, 4445 MPVOID)) 4446 WinSendMsg(pAD->hwndObj, 4447 WM_CLOSE, 4448 MPVOID, 4449 MPVOID); 4450 } 4451 if(pAD->hps) { 4452 GpiDeleteSetId(pAD->hps, 4453 FIXED_FONT_LCID); 4454 GpiAssociate(pAD->hps,0); 4455 GpiDestroyPS(pAD->hps); 4456 } 4457 if(pAD->killme) { 4458 if(!PostMsg((HWND)0, 4459 WM_QUIT, 4460 MPVOID, 4461 MPVOID)) 4462 WinSendMsg((HWND)0, 4463 WM_QUIT, 4464 MPVOID, 4465 MPVOID); 4466 } 4467 FreeAllFilesList(hwnd); 4468 free(pAD); 4410 4469 } 4411 4470 break; … … 4416 4475 4417 4476 4418 HWND StartSeeAll (HWND hwndParent,BOOL standalone,CHAR *startpath) { 4477 HWND StartSeeAll (HWND hwndParent, 4478 BOOL standalone, // called by applet 4479 CHAR *pszStartPath) // pathname or NULL 4480 { 4419 4481 4420 4482 HWND hwndFrame = (HWND)0,hwndClient; 4421 4483 ULONG FrameFlags = FCF_TITLEBAR | FCF_SYSMENU | 4422 FCF_SIZEBORDER | FCF_MINMAX |4423 FCF_NOBYTEALIGN | FCF_VERTSCROLL |4424 FCF_MENU | FCF_ICON |4425 FCF_ACCELTABLE | FCF_HORZSCROLL;4484 FCF_SIZEBORDER | FCF_MINMAX | 4485 FCF_NOBYTEALIGN | FCF_VERTSCROLL | 4486 FCF_MENU | FCF_ICON | 4487 FCF_ACCELTABLE | FCF_HORZSCROLL; 4426 4488 4427 4489 if(ParentIsDesktop(hwndParent,hwndParent)) 4428 4490 FrameFlags |= (FCF_TASKLIST | FCF_SHELLPOSITION); 4429 4491 hwndFrame = WinCreateStdWindow(hwndParent, 4430 WS_VISIBLE,4431 &FrameFlags,4432 GetPString(IDS_WCSEEALL),4433 GetPString(IDS_SEEALLTITLETEXT),4434 WS_VISIBLE | fwsAnimate,4435 FM3ModHandle,4436 SEEALL_FRAME,4437 &hwndClient);4492 WS_VISIBLE, 4493 &FrameFlags, 4494 GetPString(IDS_WCSEEALL), 4495 GetPString(IDS_SEEALLTITLETEXT), 4496 WS_VISIBLE | fwsAnimate, 4497 FM3ModHandle, 4498 SEEALL_FRAME, 4499 &hwndClient); 4438 4500 if(hwndFrame) { 4501 static CHAR *pszDir; 4439 4502 if(standalone) { 4440 4503 if(!PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 4441 UM_SETUP4, 4442 MPVOID, 4443 MPVOID)) { 4444 PostMsg((HWND)0, 4445 WM_QUIT, 4446 MPVOID, 4447 MPVOID); 4448 return (HWND)0; 4504 UM_SETUP4, 4505 MPVOID, 4506 MPVOID)) { 4507 PostMsg((HWND)0, 4508 WM_QUIT, 4509 MPVOID, 4510 MPVOID); 4511 return (HWND)0; 4512 } 4513 } 4514 if (pszStartPath) { 4515 // Needs to be static for other thread 4516 if (!pszDir) 4517 pszDir = malloc(CCHMAXPATH); 4518 if (pszDir) { 4519 strcpy(pszDir, pszStartPath); 4520 pszStartPath = pszDir; 4449 4521 } 4450 4522 } 4451 4523 PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT), 4452 UM_SETUP5,4453 MPFROMP(startpath),4454 MPVOID);4524 UM_SETUP5, 4525 MPFROMP(pszStartPath), 4526 MPVOID); 4455 4527 } 4456 4528 else if(standalone) 4457 4529 PostMsg((HWND)0, 4458 WM_QUIT,4459 MPVOID,4460 MPVOID);4530 WM_QUIT, 4531 MPVOID, 4532 MPVOID); 4461 4533 return hwndFrame; 4462 4534 }
Note:
See TracChangeset
for help on using the changeset viewer.
