Changeset 84 for trunk/dll


Ignore:
Timestamp:
May 21, 2004, 5:11:37 PM (21 years ago)
Author:
root
Message:

StartSeeAll: avoid forgetting startpath, correct malloc arg oops

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/seeall.c

    r50 r84  
    1010
    1111  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
    1214
    1315***********************************************************************/
     
    7880
    7981static 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};
    8284
    8385typedef int(FNSORT)(const void *,const void *);
     
    8991  ALLFILES *afhead,**afindex;
    9092  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;
    9395  CHAR      stopflag,drvsflags[26],lasttarget[CCHMAXPATH],
    94             comnam[CCHMAXPATH],findpath[CCHMAXPATH];
     96            comnam[CCHMAXPATH],findpath[CCHMAXPATH];
    9597  LONG      lMaxAscender,lMaxDescender,lMaxHeight,maxx,horzscroll;
    9698  BOOL      fullnames,invertsort,mousecaptured;
    9799  HMTX      ScanSem;
    98100  HWND      hvscroll,hhscroll,hwndMenu,hwndObj,hwndClient,hwndPopup,
    99             hwndStatus,hwndFrame;
     101            hwndStatus,hwndFrame;
    100102  HPS       hps;
    101103  PFNSORT   compare;
     
    120122    case WM_INITDLG:
    121123      {
    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);
    130132      }
    131133      break;
     
    133135    case WM_CONTROL:
    134136      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;
    151153      }
    152154      return 0;
     
    154156    case WM_COMMAND:
    155157      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             else
    179               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;
    193195      }
    194196      return 0;
     
    216218    case UM_MASSACTION:
    217219      {
    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               else
    257                 *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               else
    288                 *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               else
    370                 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             else
    388               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             else
    405               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                 else
    466                   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               else
    530                 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);
    541543RetryPath:
    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++) {
    584586Retry:
    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                     else
    619                       p = list[x];
    620                   }
    621                   strcat(newname,p);
    622                 }
    623                 else
    624                   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                     else
    686                       *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))) {
    758760                      // 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) {
    762764                        // 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) &&
    769771                             // fixme to use CBLIST_TO_EASIZE?
    770                              fs4.cbFile + fs4.cbList <= clFreeBytes) {
     772                             fs4.cbFile + fs4.cbList <= clFreeBytes) {
    771773                            // 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             else
    844               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               else
    895                 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                   else
    1075                     DosDeleteDir(list[x]);
    1076                 }
    1077                 else {
    1078                   DosError(FERR_DISABLEHARDERR);
    1079                   if(SHORT1FROMMP(mp1) == IDM_DELETE)
    1080                     error = DosDelete(list[x]);
    1081                   else
    1082                     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                     else
    1089                       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                 else
    1109                   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        }
    11921194Abort:
    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);
    12041206      }
    12051207      return 0;
     
    12111213    case WM_DESTROY:
    12121214      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);
    12201222      break;
    12211223  }
     
    12371239      hmq2 = WinCreateMsgQueue(hab2,256);
    12381240      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);
    12711273      }
    12721274      else
    1273         WinTerminate(hab2);
     1275        WinTerminate(hab2);
    12741276    }
    12751277  }
     
    12771279
    12781280
    1279 static VOID SelectMask (HWND hwnd,BOOL deselect) {
    1280 
     1281static VOID SelectMask (HWND hwnd,BOOL deselect)
     1282{
    12811283  MASK           mask;
    12821284  register ULONG x,y,z;
     1285  ULONG          ul;
    12831286  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));
    12871290  mask.fNoAttribs = FALSE;
    12881291  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;
    12911294  mask.fIsSeeAll = TRUE;
    12921295  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)) &&
    13021305     (*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;
    13071310      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;
    13361339      }
    13371340      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
    13681375  }
    13691376}
     
    13791386
    13801387      if(!fAutoTile)
    1381         GetNextWindowPos(hwndMain,&swp,NULL,NULL);
     1388        GetNextWindowPos(hwndMain,&swp,NULL,NULL);
    13821389      hwndC = StartCollector(hwndMain,4);
    13831390      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         else
    1389           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);
    13921399      }
    13931400    }
     
    13981405  }
    13991406  if(!PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(IDM_COLLECTOR,0),
    1400                 MPFROMP(list)))
     1407                MPFROMP(list)))
    14011408    FreeList(list);
    14021409}
     
    14111418    for(x = 0L;x < ad->affiles;x++) {
    14121419      if(ad->afhead[x].fullname)
    1413         free(ad->afhead[x].fullname);
     1420        free(ad->afhead[x].fullname);
    14141421    }
    14151422    free(ad->afhead);
     
    14361443      y = (ad->invertsort) ? (ad->afifiles - 1) - x : x;
    14371444      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;
    14451452      }
    14461453    }
     
    14501457
    14511458
    1452 static BOOL Mark (HWND hwnd,INT command,CHAR **list) {
    1453 
     1459static BOOL Mark (HWND hwnd,INT command,CHAR **list)
     1460{
    14541461  /* Marks only unfiltered files */
    14551462
    1456   ALLDATA       *ad = WinQueryWindowPtr(hwnd,0);
     1463  ALLDATA       *pAD = WinQueryWindowPtr(hwnd,0);
    14571464  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;
    14621471    if(list) {
    14631472      ret = FALSE;
    14641473      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        }
    14691478      }
    14701479    }
    14711480    if(ret) {
    14721481      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;
    15021519      }
    15031520      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;
    15061523      }
    15071524    }
    1508   }
     1525  } // for x
    15091526  return didone;
    15101527}
    15111528
    15121529
    1513 static BOOL MarkList (HWND hwnd,INT command,CHAR **list) {
    1514 
     1530static BOOL MarkList (HWND hwnd,INT command,CHAR **list)
     1531{
    15151532  /* Marks files whether filtered or not */
    15161533
    1517   ALLDATA       *ad = WinQueryWindowPtr(hwnd,0);
     1534  ALLDATA       *pAD = WinQueryWindowPtr(hwnd,0);
    15181535  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++) {
    15221541    if(list) {
    15231542      ret = FALSE;
    15241543      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        }
    15291548      }
    15301549    }
    15311550    if(ret) {
    15321551      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;
    15661593      }
    15671594    }
    1568   }
     1595  } // for x
    15691596  return didone;
    15701597}
     
    15871614      ret = FALSE;
    15881615      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        }
    15931620      }
    15941621      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           else
    1609             ad->afhead[x].flags |= AF_DELETED;
    1610         }
    1611         else
    1612           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;
    16131640      }
    16141641      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 {
    16361663// 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 {
    16431670// 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               else
    1654                 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 {
    16691696// 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        }
    16751702      }
    16761703    }
     
    17481775
    17491776  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;
    17611788
    17621789  if(!ret)
     
    17681795static VOID ReSort (HWND hwnd) {
    17691796
    1770   ALLDATA       *ad = WinQueryWindowPtr(hwnd,0);
     1797  ALLDATA       *pAD = WinQueryWindowPtr(hwnd,0);
    17711798  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]);
    17811813    }
    1782   }
    1783   ad->afifiles = y;
     1814  } // for x
     1815  pAD->afifiles = y;
    17841816  PostMsg(hwnd,UM_SETUP3,MPVOID,MPVOID);
    1785   if(!ad->stopflag && ad->compare && ad->afifiles) {
     1817  if(!pAD->stopflag && pAD->compare && pAD->afifiles) {
    17861818    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);
    17881820  }
    17891821}
     
    18071839      hmq2 = WinCreateMsgQueue(hab2,0);
    18081840      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;
    18861918SkipNonDupe:
    18871919;
    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        }
    19001932      }
    19011933    }
     
    19301962  ad->mask.fIsSeeAll = TRUE;
    19311963  if(WinDlgBox(HWND_DESKTOP,hwnd,PickMaskDlgProc,
    1932                FM3ModHandle,MSK_FRAME,MPFROMP(&ad->mask))) {
     1964               FM3ModHandle,MSK_FRAME,MPFROMP(&ad->mask))) {
    19331965    for(x = 0;x < ad->affiles;x++) {
    19341966      ret = FALSE;
    19351967      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        }
    19561988      }
    19571989      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;
    19631995      }
    19641996      else
    1965         ret = TRUE;
     1997        ret = TRUE;
    19661998
    19671999      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;
    19782010      }
    19792011
    19802012      if(!ret)
    1981         ad->afhead[x].flags |= AF_FILTERED;
     2013        ad->afhead[x].flags |= AF_FILTERED;
    19822014      else
    1983         ad->afhead[x].flags &= (~AF_FILTERED);
     2015        ad->afhead[x].flags &= (~AF_FILTERED);
    19842016    }
    19852017    ReSort(hwnd);
     
    19922024static ULONG RemoveDeleted (HWND hwnd) {
    19932025
    1994   ALLDATA       *ad = WinQueryWindowPtr(hwnd,0);
    1995   ULONG          oldaffiles = ad->affiles;
     2026  ALLDATA       *pAD = WinQueryWindowPtr(hwnd,0);
     2027  ULONG         oldaffiles = pAD->affiles;
    19962028  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);
    20132048    }
    2014   }
    2015   if(ad->affiles != oldaffiles) {
     2049  } // for x
     2050  if(pAD->affiles != oldaffiles) {
    20162051
    20172052    ALLFILES *tempa,**templ;
    20182053
    2019     if(!ad->affiles)
     2054    if(!pAD->affiles)
    20202055      FreeAllFilesList(hwnd);
    20212056    else {
    2022       tempa = realloc(ad->afhead,ad->affiles * sizeof(ALLFILES));
     2057      tempa = realloc(pAD->afhead,pAD->affiles * sizeof(ALLFILES));
    20232058      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 *));
    20282063      if(templ)
    2029         ad->afindex = templ;
     2064        pAD->afindex = templ;
    20302065      DosPostEventSem(CompactSem);
    20312066      ReSort(hwnd);
    20322067    }
    20332068  }
    2034   return ad->affiles;
     2069  return pAD->affiles;
    20352070}
    20362071
     
    20732108  DosError(FERR_DISABLEHARDERR);
    20742109  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)) {
    20772112    do {
    20782113      priority_normal();
    20792114      fb = (PBYTE)pffb;
    20802115      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 {
    21062141// 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 {
    21272162// 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;
    21332168      }
    21342169      nm = uL;
    21352170    } while(!ad->stopflag &&
    2136             !DosFindNext(hdir,pffb,sizeof(FILEFINDBUF3) * nm,&nm));
     2171            !DosFindNext(hdir,pffb,sizeof(FILEFINDBUF3) * nm,&nm));
    21372172    DosFindClose(hdir);
    21382173  }
     
    21572192      hmq2 = WinCreateMsgQueue(hab2,0);
    21582193      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         else
    2175           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);
    21772212      }
    21782213    }
     
    21832218      tempa = realloc(ad->afhead,sizeof(ALLFILES) * ad->affiles);
    21842219      if(tempa) {
    2185         ad->afhead = tempa;
    2186         ad->afalloc = ad->affiles;
     2220        ad->afhead = tempa;
     2221        ad->afalloc = ad->affiles;
    21872222      }
    21882223      templ = realloc(ad->afindex,sizeof(ALLFILES *) * ad->affiles);
    21892224      if(templ)
    2190         ad->afindex = templ;
     2225        ad->afindex = templ;
    21912226      DosPostEventSem(CompactSem);
    21922227    }
     
    22122247      if(mp2) {
    22132248
    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        }
    22392274      }
    22402275      else
    2241         WinDismissDlg(hwnd,0);
     2276        WinDismissDlg(hwnd,0);
    22422277      break;
    22432278
    22442279    case WM_CONTROL:
    22452280      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;
    22532288      }
    22542289      return 0;
     
    22562291    case WM_COMMAND:
    22572292      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;
    23012336      }
    23022337      return 0;
     
    23162351    sizel.cx = sizel.cy = 0;
    23172352    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);
    23202355    if(hps) {
    23212356      GpiSetCp(hps,(ULONG)ad->fattrs.usCodePage);
    23222357      GpiCreateLogFont(hps,NULL,FIXED_FONT_LCID,&ad->fattrs);
    23232358      GpiSetCharSet(hps,FIXED_FONT_LCID);
    2324       GpiQueryFontMetrics(hps,(long)sizeof(FONTMETRICS),&FontMetrics);
     2359      GpiQueryFontMetrics(hps,sizeof(FontMetrics),&FontMetrics);
    23252360      ad->fattrs.lAveCharWidth  = FontMetrics.lAveCharWidth;
    23262361      ad->fattrs.lMaxBaselineExt = FontMetrics.lMaxBaselineExt;
     
    23292364      ad->lMaxHeight = ad->lMaxDescender + ad->lMaxAscender;
    23302365      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));
    23382373      }
    23392374      else if(ad->fattrs.usCodePage) {
    23402375
    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);
    23542389      }
    23552390      GpiSetBackMix(hps,BM_OVERPAINT);
     
    23612396
    23622397static VOID PaintLine (HWND hwnd,HPS hps,ULONG whichfile,ULONG topfile,
    2363                        RECTL *Rectl) {
     2398                       RECTL *Rectl) {
    23642399
    23652400  ALLDATA *ad = WinQueryWindowPtr(hwnd,0);
     
    23702405  y = (ad->invertsort) ? (ad->afifiles - 1) - whichfile : whichfile;
    23712406  ptl.y = (Rectl->yTop -
    2372            (ad->lMaxHeight * (((whichfile + 1) - topfile) + 1)));
     2407           (ad->lMaxHeight * (((whichfile + 1) - topfile) + 1)));
    23732408  ptl.x = ad->horzscroll;
    23742409  if(ptl.y < Rectl->yBottom || ptl.y > Rectl->yTop || y > ad->afifiles)
     
    23782413    GpiSetColor(hps,standardcolors[Colors[COLORS_SELECTEDNORMALFORE]]);
    23792414    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]]);
    23822417  }
    23832418  else {
    23842419    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]]);
    23892424    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]]);
    23922427  }
    23932428  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);
    24122447  GpiCharStringAt(hps,&ptl,len,szBuff);
    24132448  GpiQueryCurrentPosition(hps,&ptl);
     
    24152450    ad->maxx = ptl.x + abs(ad->horzscroll);
    24162451    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);
    24192454  }
    24202455}
     
    24292464    case WM_SETFOCUS:
    24302465      if(mp2)
    2431         PostMsg(hwnd,UM_FOCUSME,MPVOID,MPVOID);
     2466        PostMsg(hwnd,UM_FOCUSME,MPVOID,MPVOID);
    24322467      break;
    24332468
    24342469    case WM_PAINT:
    24352470      {
    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        }
    24522487      }
    24532488      break;
     
    24552490    case UM_FOCUSME:
    24562491      WinSetFocus(HWND_DESKTOP,WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),
    2457                   FID_CLIENT));
     2492                  FID_CLIENT));
    24582493      return 0;
    24592494  }
     
    24812516    case WM_CALCFRAMERECT:
    24822517      {
    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 the
    2491         * 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;
    25002535      }
    25012536
    25022537    case WM_FORMATFRAME:
    25032538      {
    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 client
    2511         * and make room for status window sibling beneath
    2512         */
    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);
    25372572      }
    25382573
    25392574    case WM_QUERYFRAMECTLCOUNT:
    25402575      {
    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);
    25462581      }
    25472582  }
     
    25522587MRESULT EXPENTRY SeeAllWndProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) {
    25532588
    2554   ALLDATA *ad = WinQueryWindowPtr(hwnd,0);
     2589  ALLDATA *pAD = WinQueryWindowPtr(hwnd,0);
     2590  ULONG   ul;
    25552591
    25562592  switch (msg) {
    25572593    case WM_CREATE:
    2558 // fprintf(stderr,"Seeall: WM_CREATE\n");
     2594      // fprintf(stderr,"Seeall: WM_CREATE\n");
    25592595      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        }
    26972733      }
    26982734      PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID);
     
    27002736
    27012737    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        }
    27202756      }
    27212757      else
    2722         PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID);
     2758        PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID);
    27232759      return 0;
    27242760
     
    27262762      if(mp1) {
    27272763
    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        }
    27422778      }
    27432779      return 0;
     
    27452781    case UM_SETUP2:
    27462782// 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);
    27772813      }
    27782814      return 0;
     
    27802816    case UM_SETUP3:
    27812817// 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        }
    28162852      }
    28172853      return 0;
     
    28192855    case UM_SETUP4:
    28202856// fprintf(stderr,"Seeall: UM_SETUP4\n");
    2821       if(ad)
    2822         ad->killme = TRUE;
     2857      if(pAD)
     2858        pAD->killme = TRUE;
    28232859      else
    2824         PostMsg((HWND)0,WM_QUIT,MPVOID,MPVOID);
     2860        PostMsg((HWND)0,WM_QUIT,MPVOID,MPVOID);
    28252861      return 0;
    28262862
    28272863    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        }
    29122961      }
    29132962      return 0;
     
    29152964    case UM_SETUP:
    29162965// 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));
    29232972      }
    29242973      return 0;
     
    29262975    case WM_CHAR:
    29272976      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                 else
    2949                   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;
    30803129KbdRetry:
    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                       else
    3139                         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 match
    3148                     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        }
    31543203      }
    31553204      break;
     
    31633212    case WM_BEGINDRAG:
    31643213      {
    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         else
    3182           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);
    31833232      }
    31843233      break;
    31853234
    31863235    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));
    31953244      }
    31963245      break;
     
    31983247    case WM_MOUSEMOVE:
    31993248      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        }
    32693322      }
    32703323      break;
    32713324
    32723325    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        }
    32873340      }
    32883341      return 0;
     
    32903343    case WM_BUTTON1UP:
    32913344    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);
    32973350      }
    32983351      break;
     
    33013354    case WM_BUTTON1DBLCLK:
    33023355      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);
    33623419      }
    33633420      break;
    33643421
    33653422    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;
    33693426      }
    33703427      break;
    33713428
    33723429    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        }
    34643521      }
    34653522      break;
    34663523
    34673524    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);
    34843541      }
    34853542      return 0;
     
    34873544    case WM_ERASEBACKGROUND:
    34883545      WinFillRect((HPS)mp1,(PRECTL)mp2,
    3489                   standardcolors[Colors[COLORS_NORMALBACK]]);
     3546                  standardcolors[Colors[COLORS_NORMALBACK]]);
    34903547      return 0;
    34913548
    34923549    case WM_PAINT:
    34933550// 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           else
    3525             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                 else
    3570                   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);
    36243681      }
    36253682      break;
     
    36273684    case WM_HSCROLL:
    36283685      {
    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);
    36753732      }
    36763733      break;
     
    36783735    case WM_VSCROLL:
    36793736// 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                 else
    3816                   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);
    38223879      }
    38233880      break;
    38243881
    38253882    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        }
    39504007      }
    39514008      break;
    39524009
    39534010    case WM_COMMAND:
    3954       if(!ad)
    3955         return 0;
     4011      if(!pAD)
     4012        return 0;
    39564013      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;
    43544413      }
    43554414      return 0;
     
    43584417// fprintf(stderr,"Seeall: WM_SIZE\n");
    43594418      PostMsg(hwnd,
    4360               UM_SETUP3,
    4361               MPVOID,
    4362               MPVOID);
     4419              UM_SETUP3,
     4420              MPVOID,
     4421              MPVOID);
    43634422      break;
    43644423
    43654424    case WM_CLOSE:
    43664425// fprintf(stderr,"Seeall: WM_CLOSE\n");
    4367       if(ad)
    4368         ad->stopflag = 1;
     4426      if(pAD)
     4427        pAD->stopflag = 1;
    43694428      WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT));
    43704429      return 0;
     
    43724431    case WM_DESTROY:
    43734432// 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);
    44104469      }
    44114470      break;
     
    44164475
    44174476
    4418 HWND StartSeeAll (HWND hwndParent,BOOL standalone,CHAR *startpath) {
     4477HWND StartSeeAll (HWND hwndParent,
     4478                  BOOL standalone,      // called by applet
     4479                  CHAR *pszStartPath)   // pathname or NULL
     4480{
    44194481
    44204482  HWND          hwndFrame = (HWND)0,hwndClient;
    44214483  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;
    44264488
    44274489  if(ParentIsDesktop(hwndParent,hwndParent))
    44284490    FrameFlags |= (FCF_TASKLIST | FCF_SHELLPOSITION);
    44294491  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);
    44384500  if(hwndFrame) {
     4501    static CHAR      *pszDir;
    44394502    if(standalone) {
    44404503      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;
    44494521      }
    44504522    }
    44514523    PostMsg(WinWindowFromID(hwndFrame,FID_CLIENT),
    4452             UM_SETUP5,
    4453             MPFROMP(startpath),
    4454             MPVOID);
     4524            UM_SETUP5,
     4525            MPFROMP(pszStartPath),
     4526            MPVOID);
    44554527  }
    44564528  else if(standalone)
    44574529    PostMsg((HWND)0,
    4458             WM_QUIT,
    4459             MPVOID,
    4460             MPVOID);
     4530            WM_QUIT,
     4531            MPVOID,
     4532            MPVOID);
    44614533  return hwndFrame;
    44624534}
Note: See TracChangeset for help on using the changeset viewer.