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