| 1 | #define INCL_DOS
 | 
|---|
| 2 | #define INCL_WIN
 | 
|---|
| 3 | 
 | 
|---|
| 4 | #include <os2.h>
 | 
|---|
| 5 | #include <stdlib.h>
 | 
|---|
| 6 | #include <stdio.h>
 | 
|---|
| 7 | #include <string.h>
 | 
|---|
| 8 | #include <share.h>
 | 
|---|
| 9 | #include "fm3dll.h"
 | 
|---|
| 10 | #include "fm3dlg.h"
 | 
|---|
| 11 | #include "fm3str.h"
 | 
|---|
| 12 | 
 | 
|---|
| 13 | /* prototypes */
 | 
|---|
| 14 | static BOOL decode (FILE *in, FILE *out);
 | 
|---|
| 15 | static void outdec (char *p, FILE *f, int n);
 | 
|---|
| 16 | 
 | 
|---|
| 17 | /* single character decode */
 | 
|---|
| 18 | #define DEC(c)  (((c) - ' ') & 077)
 | 
|---|
| 19 | 
 | 
|---|
| 20 | #pragma alloc_text(UUD,UUD,decode,outdec)
 | 
|---|
| 21 | #pragma alloc_text(MERGE,MergeDlgProc)
 | 
|---|
| 22 | 
 | 
|---|
| 23 | 
 | 
|---|
| 24 | int UUD (char *filename,CHAR *dest) {
 | 
|---|
| 25 | 
 | 
|---|
| 26 |         FILE *in, *out;
 | 
|---|
| 27 |   int   mode,ret = 0;
 | 
|---|
| 28 |   char  buf[80];
 | 
|---|
| 29 |   char  fakedest[CCHMAXPATH];
 | 
|---|
| 30 | 
 | 
|---|
| 31 |   if(!dest)
 | 
|---|
| 32 |     dest = fakedest;
 | 
|---|
| 33 |   in = _fsopen(filename,"r",SH_DENYWR);
 | 
|---|
| 34 |   if(!in) {
 | 
|---|
| 35 |     saymsg(MB_CANCEL,
 | 
|---|
| 36 |            HWND_DESKTOP,
 | 
|---|
| 37 |            GetPString(IDS_ERRORTEXT),
 | 
|---|
| 38 |            GetPString(IDS_COMPCANTOPENTEXT),
 | 
|---|
| 39 |            filename);
 | 
|---|
| 40 |     return ret;
 | 
|---|
| 41 |   }
 | 
|---|
| 42 | 
 | 
|---|
| 43 |         /* search for header line */
 | 
|---|
| 44 |   for(;;) {
 | 
|---|
| 45 |     if(!fgets(buf,sizeof(buf),in)) {
 | 
|---|
| 46 |       fclose(in);
 | 
|---|
| 47 |       saymsg(MB_CANCEL,
 | 
|---|
| 48 |              HWND_DESKTOP,
 | 
|---|
| 49 |              GetPString(IDS_ERRORTEXT),
 | 
|---|
| 50 |              GetPString(IDS_UUDNOBEGINTEXT),
 | 
|---|
| 51 |              filename);
 | 
|---|
| 52 |       return ret;
 | 
|---|
| 53 |                 }
 | 
|---|
| 54 |     buf[sizeof(buf) - 1] = 0;
 | 
|---|
| 55 |     if(!strncmp(buf,"begin ",6))
 | 
|---|
| 56 |                         break;
 | 
|---|
| 57 |         }
 | 
|---|
| 58 |   *dest = 0;
 | 
|---|
| 59 |   sscanf(buf,"begin %o %259s",&mode,dest);
 | 
|---|
| 60 |   dest[CCHMAXPATH - 1] = 0;
 | 
|---|
| 61 |   { /* place dest in same directory as filename by default... */
 | 
|---|
| 62 |     char build[CCHMAXPATH],*p;
 | 
|---|
| 63 | 
 | 
|---|
| 64 |     strcpy(build,filename);
 | 
|---|
| 65 |     p = strrchr(build,'\\');
 | 
|---|
| 66 |     if(p) {
 | 
|---|
| 67 |       p++;
 | 
|---|
| 68 |       *p = 0;
 | 
|---|
| 69 |     }
 | 
|---|
| 70 |     else
 | 
|---|
| 71 |       strcat(build,"\\");
 | 
|---|
| 72 |     strncat(build,dest,CCHMAXPATH - strlen(dest));
 | 
|---|
| 73 |     strcpy(dest,build);
 | 
|---|
| 74 |   }
 | 
|---|
| 75 | 
 | 
|---|
| 76 |   if(!export_filename(HWND_DESKTOP,dest,FALSE)) {
 | 
|---|
| 77 |     fclose(in);
 | 
|---|
| 78 |     return ret;
 | 
|---|
| 79 |   }
 | 
|---|
| 80 | 
 | 
|---|
| 81 |         /* create output file */
 | 
|---|
| 82 |   out = _fsopen(dest,"ab+",SH_DENYWR);
 | 
|---|
| 83 |   if(!out) {
 | 
|---|
| 84 |     fclose(in);
 | 
|---|
| 85 |     saymsg(MB_CANCEL,
 | 
|---|
| 86 |            HWND_DESKTOP,
 | 
|---|
| 87 |            GetPString(IDS_ERRORTEXT),
 | 
|---|
| 88 |            GetPString(IDS_UUDCANTOPENFORTEXT),
 | 
|---|
| 89 |            dest,
 | 
|---|
| 90 |            filename);
 | 
|---|
| 91 |     return ret;
 | 
|---|
| 92 |         }
 | 
|---|
| 93 | 
 | 
|---|
| 94 | //  chmod(dest,mode);
 | 
|---|
| 95 | 
 | 
|---|
| 96 |   ret = 1;
 | 
|---|
| 97 |   if(decode(in,out)) {
 | 
|---|
| 98 | //    saymsg(MB_ENTER,HWND_DESKTOP,"UUD error","File \"%s\" is short.",filename);
 | 
|---|
| 99 | //    ret = -1;
 | 
|---|
| 100 |   }
 | 
|---|
| 101 |   if(!fgets(buf,sizeof(buf),in) || strcmp(buf,"end\n")) {
 | 
|---|
| 102 | //    saymsg(MB_ENTER,HWND_DESKTOP,"UUD error","No end line or garbage at end of \"%s\"",
 | 
|---|
| 103 | //           filename);
 | 
|---|
| 104 | //    ret = -1;
 | 
|---|
| 105 |         }
 | 
|---|
| 106 |   fclose(in);
 | 
|---|
| 107 |   fclose(out);
 | 
|---|
| 108 |   return ret;
 | 
|---|
| 109 | }
 | 
|---|
| 110 | 
 | 
|---|
| 111 | 
 | 
|---|
| 112 | /*
 | 
|---|
| 113 |  * copy from in to out, decoding as you go along.
 | 
|---|
| 114 |  */
 | 
|---|
| 115 | static BOOL decode (FILE *in, FILE *out) {
 | 
|---|
| 116 | 
 | 
|---|
| 117 |   char  buf[80];
 | 
|---|
| 118 |         char *bp;
 | 
|---|
| 119 |   int   n;
 | 
|---|
| 120 | 
 | 
|---|
| 121 |   for(;;) {
 | 
|---|
| 122 |                 /* for each input line */
 | 
|---|
| 123 |     if(!fgets(buf,sizeof(buf),in))
 | 
|---|
| 124 |       return FALSE;
 | 
|---|
| 125 |     buf[sizeof(buf) - 1] = 0;
 | 
|---|
| 126 |     n = DEC(buf[0]);
 | 
|---|
| 127 |     if(n <= 0)
 | 
|---|
| 128 |                         break;
 | 
|---|
| 129 |                 bp = &buf[1];
 | 
|---|
| 130 |                 while (n > 0) {
 | 
|---|
| 131 |                         outdec(bp, out, n);
 | 
|---|
| 132 |                         bp += 4;
 | 
|---|
| 133 |                         n -= 3;
 | 
|---|
| 134 |                 }
 | 
|---|
| 135 |         }
 | 
|---|
| 136 |   return TRUE;
 | 
|---|
| 137 | }
 | 
|---|
| 138 | 
 | 
|---|
| 139 | /*
 | 
|---|
| 140 |  * output a group of 3 bytes (4 input characters).
 | 
|---|
| 141 |  * the input chars are pointed to by p, they are to
 | 
|---|
| 142 |  * be output to file f.  n is used to tell us not to
 | 
|---|
| 143 |  * output all of them at the end of the file.
 | 
|---|
| 144 |  */
 | 
|---|
| 145 | static void outdec (char *p, FILE *f, int n) {
 | 
|---|
| 146 | 
 | 
|---|
| 147 |         int c1, c2, c3;
 | 
|---|
| 148 | 
 | 
|---|
| 149 |   c1 = DEC(*p)   << 2 | DEC(p[1]) >> 4;
 | 
|---|
| 150 |         c2 = DEC(p[1]) << 4 | DEC(p[2]) >> 2;
 | 
|---|
| 151 |         c3 = DEC(p[2]) << 6 | DEC(p[3]);
 | 
|---|
| 152 |   if(n >= 1)
 | 
|---|
| 153 |                 putc(c1, f);
 | 
|---|
| 154 |   if(n >= 2)
 | 
|---|
| 155 |                 putc(c2, f);
 | 
|---|
| 156 |   if(n >= 3)
 | 
|---|
| 157 |                 putc(c3, f);
 | 
|---|
| 158 | }
 | 
|---|
| 159 | 
 | 
|---|
| 160 | 
 | 
|---|
| 161 | MRESULT EXPENTRY MergeDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
 | 
|---|
| 162 | 
 | 
|---|
| 163 |   WORKER *wk;
 | 
|---|
| 164 | 
 | 
|---|
| 165 |   switch(msg) {
 | 
|---|
| 166 |     case WM_INITDLG:
 | 
|---|
| 167 |       if(mp2) {
 | 
|---|
| 168 |         WinSetWindowPtr(hwnd,0,mp2);
 | 
|---|
| 169 |         wk = (WORKER *)mp2;
 | 
|---|
| 170 |         if(wk->li && wk->li->list && wk->li->list[0]) {
 | 
|---|
| 171 |           WinSendDlgItemMsg(hwnd,MRG_TARGETNAME,EM_SETTEXTLIMIT,
 | 
|---|
| 172 |                             MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
 | 
|---|
| 173 |           PostMsg(hwnd,UM_UNDO,MPVOID,MPVOID);
 | 
|---|
| 174 |         }
 | 
|---|
| 175 |         else
 | 
|---|
| 176 |           WinDismissDlg(hwnd,0);
 | 
|---|
| 177 |       }
 | 
|---|
| 178 |       else
 | 
|---|
| 179 |         WinDismissDlg(hwnd,0);
 | 
|---|
| 180 |       break;
 | 
|---|
| 181 | 
 | 
|---|
| 182 |     case UM_UNDO:
 | 
|---|
| 183 |       WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_DELETEALL,MPVOID,MPVOID);
 | 
|---|
| 184 |       wk = WinQueryWindowPtr(hwnd,0);
 | 
|---|
| 185 |       if(wk) {
 | 
|---|
| 186 | 
 | 
|---|
| 187 |         INT   x,numfiles = 0;
 | 
|---|
| 188 |         SHORT start;
 | 
|---|
| 189 |         CHAR *p;
 | 
|---|
| 190 | 
 | 
|---|
| 191 |         WinSetDlgItemText(hwnd,MRG_TARGETNAME,wk->li->targetpath);
 | 
|---|
| 192 |         start = 0;
 | 
|---|
| 193 |         p = strrchr(wk->li->targetpath,'\\');
 | 
|---|
| 194 |         if(p)
 | 
|---|
| 195 |           start = (p + 1) - wk->li->targetpath;
 | 
|---|
| 196 |         WinSendDlgItemMsg(hwnd,MRG_TARGETNAME,EM_SETSEL,
 | 
|---|
| 197 |                           MPFROM2SHORT(start,CCHMAXPATH),MPVOID);
 | 
|---|
| 198 |         for(x = 0;wk->li->list[x];x++) {
 | 
|---|
| 199 |           if(IsFile(wk->li->list[x]) == 1) {
 | 
|---|
| 200 |             numfiles++;
 | 
|---|
| 201 |             WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_INSERTITEM,
 | 
|---|
| 202 |                               MPFROM2SHORT(LIT_END,0),
 | 
|---|
| 203 |                               MPFROMP(wk->li->list[x]));
 | 
|---|
| 204 |           }
 | 
|---|
| 205 |         }
 | 
|---|
| 206 |         WinCheckButton(hwnd,MRG_BINARY,(wk->li->type == IDM_MERGEBINARY));
 | 
|---|
| 207 |         if(!numfiles) {
 | 
|---|
| 208 |           saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
 | 
|---|
| 209 |                  hwnd,
 | 
|---|
| 210 |                  GetPString(IDS_SILLYERRORTEXT),
 | 
|---|
| 211 |                  GetPString(IDS_MERGEWASTETEXT));
 | 
|---|
| 212 |           WinDismissDlg(hwnd,0);
 | 
|---|
| 213 |         }
 | 
|---|
| 214 |       }
 | 
|---|
| 215 |       return 0;
 | 
|---|
| 216 | 
 | 
|---|
| 217 |     case WM_CONTROL:
 | 
|---|
| 218 |       switch(SHORT1FROMMP(mp1)) {
 | 
|---|
| 219 |         case MRG_LISTBOX:
 | 
|---|
| 220 |           switch(SHORT2FROMMP(mp1)) {
 | 
|---|
| 221 |             case LN_ENTER:
 | 
|---|
| 222 |               {
 | 
|---|
| 223 |                 SHORT x;
 | 
|---|
| 224 |                 CHAR  szBuffer[CCHMAXPATH];
 | 
|---|
| 225 | 
 | 
|---|
| 226 |                 x = (SHORT)WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_QUERYSELECTION,
 | 
|---|
| 227 |                                              MPFROMSHORT(LIT_FIRST),MPVOID);
 | 
|---|
| 228 |                 if(x >= 0) {
 | 
|---|
| 229 |                   *szBuffer = 0;
 | 
|---|
| 230 |                   WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_QUERYITEMTEXT,
 | 
|---|
| 231 |                                     MPFROM2SHORT(x,CCHMAXPATH),
 | 
|---|
| 232 |                                     MPFROMP(szBuffer));
 | 
|---|
| 233 |                   if(*szBuffer)
 | 
|---|
| 234 |                     QuickEdit(hwnd,szBuffer);
 | 
|---|
| 235 |                 }
 | 
|---|
| 236 |               }
 | 
|---|
| 237 |               break;
 | 
|---|
| 238 |           }
 | 
|---|
| 239 |           break;
 | 
|---|
| 240 |       }
 | 
|---|
| 241 |       break;
 | 
|---|
| 242 | 
 | 
|---|
| 243 |     case WM_ADJUSTWINDOWPOS:
 | 
|---|
| 244 |       PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
 | 
|---|
| 245 |       break;
 | 
|---|
| 246 | 
 | 
|---|
| 247 |     case UM_SETDIR:
 | 
|---|
| 248 |       PaintRecessedWindow(WinWindowFromID(hwnd,MRG_HELP),(HPS)0,FALSE,TRUE);
 | 
|---|
| 249 |       return 0;
 | 
|---|
| 250 | 
 | 
|---|
| 251 |     case WM_COMMAND:
 | 
|---|
| 252 |       switch(SHORT1FROMMP(mp1)) {
 | 
|---|
| 253 |         case IDM_UNDO:
 | 
|---|
| 254 |           PostMsg(hwnd,UM_UNDO,MPVOID,MPVOID);
 | 
|---|
| 255 |           break;
 | 
|---|
| 256 | 
 | 
|---|
| 257 |         case MRG_CHANGETARGET:
 | 
|---|
| 258 |           wk = WinQueryWindowPtr(hwnd,0);
 | 
|---|
| 259 |           if(wk) {
 | 
|---|
| 260 | 
 | 
|---|
| 261 |             CHAR filename[CCHMAXPATH];
 | 
|---|
| 262 | 
 | 
|---|
| 263 |             strcpy(filename,wk->li->targetpath);
 | 
|---|
| 264 |             if(export_filename(HWND_DESKTOP,filename,FALSE) && *filename) {
 | 
|---|
| 265 |               strcpy(wk->li->targetpath,filename);
 | 
|---|
| 266 |               WinSetDlgItemText(hwnd,MRG_TARGETNAME,wk->li->targetpath);
 | 
|---|
| 267 |             }
 | 
|---|
| 268 |           }
 | 
|---|
| 269 |           break;
 | 
|---|
| 270 | 
 | 
|---|
| 271 |         case MRG_REMOVE:
 | 
|---|
| 272 |           {
 | 
|---|
| 273 |             SHORT x;
 | 
|---|
| 274 | 
 | 
|---|
| 275 |             x = (SHORT)WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_QUERYSELECTION,
 | 
|---|
| 276 |                                          MPFROMSHORT(LIT_FIRST),MPVOID);
 | 
|---|
| 277 |             if(x >= 0)
 | 
|---|
| 278 |               WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_DELETEITEM,
 | 
|---|
| 279 |                                 MPFROMSHORT(x),MPVOID);
 | 
|---|
| 280 |           }
 | 
|---|
| 281 |           break;
 | 
|---|
| 282 | 
 | 
|---|
| 283 |         case MRG_BOTTOM:
 | 
|---|
| 284 |         case MRG_TOP:
 | 
|---|
| 285 |           {
 | 
|---|
| 286 |             SHORT x;
 | 
|---|
| 287 |             CHAR  szBuffer[CCHMAXPATH];
 | 
|---|
| 288 | 
 | 
|---|
| 289 |             x = (SHORT)WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_QUERYSELECTION,
 | 
|---|
| 290 |                                          MPFROMSHORT(LIT_FIRST),MPVOID);
 | 
|---|
| 291 |             if(x >= 0) {
 | 
|---|
| 292 |               *szBuffer = 0;
 | 
|---|
| 293 |               WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_QUERYITEMTEXT,
 | 
|---|
| 294 |                                 MPFROM2SHORT(x,CCHMAXPATH),
 | 
|---|
| 295 |                                 MPFROMP(szBuffer));
 | 
|---|
| 296 |               if(*szBuffer) {
 | 
|---|
| 297 |                 WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_DELETEITEM,
 | 
|---|
| 298 |                                   MPFROMSHORT(x),MPVOID);
 | 
|---|
| 299 |                 if(SHORT1FROMMP(mp1) == MRG_TOP)
 | 
|---|
| 300 |                   WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_INSERTITEM,
 | 
|---|
| 301 |                                     MPFROM2SHORT(0,0),
 | 
|---|
| 302 |                                     MPFROMP(szBuffer));
 | 
|---|
| 303 |                 else
 | 
|---|
| 304 |                   WinSendDlgItemMsg(hwnd,MRG_LISTBOX,LM_INSERTITEM,
 | 
|---|
| 305 |                                     MPFROM2SHORT(LIT_END,0),
 | 
|---|
| 306 |                                     MPFROMP(szBuffer));
 | 
|---|
| 307 |               }
 | 
|---|
| 308 |             }
 | 
|---|
| 309 |           }
 | 
|---|
| 310 |           break;
 | 
|---|
| 311 | 
 | 
|---|
| 312 |         case DID_CANCEL:
 | 
|---|
| 313 |           WinDismissDlg(hwnd,0);
 | 
|---|
| 314 |           break;
 | 
|---|
| 315 | 
 | 
|---|
| 316 |         case IDM_HELP:
 | 
|---|
| 317 |           if(hwndHelp)
 | 
|---|
| 318 |             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
 | 
|---|
| 319 |                        MPFROM2SHORT(HELP_MERGE,0),
 | 
|---|
| 320 |                        MPFROMSHORT(HM_RESOURCEID));
 | 
|---|
| 321 |           break;
 | 
|---|
| 322 | 
 | 
|---|
| 323 |         case DID_OK:
 | 
|---|
| 324 |           wk = WinQueryWindowPtr(hwnd,0);
 | 
|---|
| 325 |           if(wk) {
 | 
|---|
| 326 | 
 | 
|---|
| 327 |             BOOL   append,binary;
 | 
|---|
| 328 |             CHAR **list = NULL,**test,szBuffer[CCHMAXPATH];
 | 
|---|
| 329 |             INT    numfiles = 0,numalloc = 0,error;
 | 
|---|
| 330 |             SHORT  x,y;
 | 
|---|
| 331 | 
 | 
|---|
| 332 |             *szBuffer = 0;
 | 
|---|
| 333 |             WinQueryDlgItemText(hwnd,
 | 
|---|
| 334 |                                 MRG_TARGETNAME,
 | 
|---|
| 335 |                                 CCHMAXPATH,
 | 
|---|
| 336 |                                 szBuffer);
 | 
|---|
| 337 |             if(!*szBuffer) {
 | 
|---|
| 338 |               DosBeep(50,100);
 | 
|---|
| 339 |               WinSetFocus(HWND_DESKTOP,
 | 
|---|
| 340 |                           WinWindowFromID(hwnd,MRG_TARGETNAME));
 | 
|---|
| 341 |               break;
 | 
|---|
| 342 |             }
 | 
|---|
| 343 |             if(DosQueryPathInfo(szBuffer,
 | 
|---|
| 344 |                                 FIL_QUERYFULLNAME,
 | 
|---|
| 345 |                                 wk->li->targetpath,
 | 
|---|
| 346 |                                 CCHMAXPATH)) {
 | 
|---|
| 347 |               DosBeep(50,100);
 | 
|---|
| 348 |               WinSetFocus(HWND_DESKTOP,
 | 
|---|
| 349 |                           WinWindowFromID(hwnd,MRG_TARGETNAME));
 | 
|---|
| 350 |               break;
 | 
|---|
| 351 |             }
 | 
|---|
| 352 |             WinSetDlgItemText(hwnd,
 | 
|---|
| 353 |                               MRG_TARGETNAME,
 | 
|---|
| 354 |                               szBuffer);
 | 
|---|
| 355 |             append = WinQueryButtonCheckstate(hwnd,MRG_APPEND);
 | 
|---|
| 356 |             binary = WinQueryButtonCheckstate(hwnd,MRG_BINARY);
 | 
|---|
| 357 |             wk->li->type = (append && binary) ? IDM_MERGEBINARYAPPEND :
 | 
|---|
| 358 |                             (append) ? IDM_MERGETEXTAPPEND :
 | 
|---|
| 359 |                              (binary) ? IDM_MERGEBINARY :
 | 
|---|
| 360 |                                         IDM_MERGETEXT;
 | 
|---|
| 361 |             x = (SHORT)WinSendDlgItemMsg(hwnd,
 | 
|---|
| 362 |                                          MRG_LISTBOX,
 | 
|---|
| 363 |                                          LM_QUERYITEMCOUNT,
 | 
|---|
| 364 |                                          MPVOID,
 | 
|---|
| 365 |                                          MPVOID);
 | 
|---|
| 366 |             for(y = 0;y < x;y++) {
 | 
|---|
| 367 |               *szBuffer = 0;
 | 
|---|
| 368 |               WinSendDlgItemMsg(hwnd,
 | 
|---|
| 369 |                                 MRG_LISTBOX,
 | 
|---|
| 370 |                                 LM_QUERYITEMTEXT,
 | 
|---|
| 371 |                                 MPFROM2SHORT(y,CCHMAXPATH),
 | 
|---|
| 372 |                                 MPFROMP(szBuffer));
 | 
|---|
| 373 |               if(*szBuffer) {
 | 
|---|
| 374 |                 error = AddToList(szBuffer,
 | 
|---|
| 375 |                                   &list,
 | 
|---|
| 376 |                                   &numfiles,
 | 
|---|
| 377 |                                   &numalloc);
 | 
|---|
| 378 |                 if(error) {
 | 
|---|
| 379 |                   DosBeep(250,100);
 | 
|---|
| 380 |                   break;
 | 
|---|
| 381 |                 }
 | 
|---|
| 382 |               }
 | 
|---|
| 383 |             }
 | 
|---|
| 384 |             if(numfiles && list && numfiles + 1 < numalloc) {
 | 
|---|
| 385 |               test = realloc(list,sizeof(CHAR *) * (numfiles + 1));
 | 
|---|
| 386 |               if(test)
 | 
|---|
| 387 |                 list = test;
 | 
|---|
| 388 |             }
 | 
|---|
| 389 |             if(list && list[0]) {
 | 
|---|
| 390 |               FreeList(wk->li->list);
 | 
|---|
| 391 |               wk->li->list = list;
 | 
|---|
| 392 |             }
 | 
|---|
| 393 |             else {
 | 
|---|
| 394 |               DosBeep(50,100);
 | 
|---|
| 395 |               break;
 | 
|---|
| 396 |             }
 | 
|---|
| 397 |           }
 | 
|---|
| 398 |           WinDismissDlg(hwnd,1);
 | 
|---|
| 399 |           break;
 | 
|---|
| 400 |       }
 | 
|---|
| 401 |       return 0;
 | 
|---|
| 402 |   }
 | 
|---|
| 403 |   return WinDefDlgProc(hwnd,msg,mp1,mp2);
 | 
|---|
| 404 | }
 | 
|---|