| [2] | 1 | #define INCL_WIN
 | 
|---|
 | 2 | #define INCL_DOS
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | #include <os2.h>
 | 
|---|
 | 5 | #include <stdlib.h>
 | 
|---|
 | 6 | #include <stdio.h>
 | 
|---|
 | 7 | #include <string.h>
 | 
|---|
 | 8 | #include <time.h>
 | 
|---|
 | 9 | #include <ctype.h>
 | 
|---|
 | 10 | #include "fm3dll.h"
 | 
|---|
 | 11 | #include "fm3dlg.h"
 | 
|---|
 | 12 | #include "fm3str.h"
 | 
|---|
 | 13 | 
 | 
|---|
 | 14 | #pragma data_seg(DATA1)
 | 
|---|
 | 15 | #pragma alloc_text(FMEXTRACT,ExtractTextProc,ExtractDlgProc)
 | 
|---|
 | 16 | 
 | 
|---|
 | 17 | 
 | 
|---|
 | 18 | MRESULT EXPENTRY ExtractTextProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
 | 
|---|
 | 19 | 
 | 
|---|
 | 20 |   PFNWP        oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0);
 | 
|---|
 | 21 |   static BOOL  emphasized = FALSE;
 | 
|---|
 | 22 | 
 | 
|---|
 | 23 |   switch(msg) {
 | 
|---|
 | 24 |     case DM_DRAGOVER:
 | 
|---|
 | 25 |       if(!emphasized) {
 | 
|---|
 | 26 |         emphasized = TRUE;
 | 
|---|
 | 27 |         DrawTargetEmphasis(hwnd,emphasized);
 | 
|---|
 | 28 |       }
 | 
|---|
 | 29 |       if(AcceptOneDrop(mp1,mp2))
 | 
|---|
 | 30 |         return MRFROM2SHORT(DOR_DROP,
 | 
|---|
 | 31 |                             DO_MOVE);
 | 
|---|
 | 32 |       return MRFROM2SHORT(DOR_NEVERDROP,0);
 | 
|---|
 | 33 | 
 | 
|---|
 | 34 |     case DM_DRAGLEAVE:
 | 
|---|
 | 35 |       if(emphasized) {
 | 
|---|
 | 36 |         emphasized = FALSE;
 | 
|---|
 | 37 |         DrawTargetEmphasis(hwnd,emphasized);
 | 
|---|
 | 38 |       }
 | 
|---|
 | 39 |       break;
 | 
|---|
 | 40 | 
 | 
|---|
 | 41 |     case DM_DROPHELP:
 | 
|---|
 | 42 |       DropHelp(mp1,mp2,hwnd,
 | 
|---|
 | 43 |                GetPString(IDS_EXTDROPHELPTEXT));
 | 
|---|
 | 44 |       return 0;
 | 
|---|
 | 45 | 
 | 
|---|
 | 46 |     case DM_DROP:
 | 
|---|
 | 47 |       {
 | 
|---|
 | 48 |         char szFrom[CCHMAXPATH + 2];
 | 
|---|
 | 49 | 
 | 
|---|
 | 50 |         if(emphasized) {
 | 
|---|
 | 51 |           emphasized = FALSE;
 | 
|---|
 | 52 |           DrawTargetEmphasis(hwnd,emphasized);
 | 
|---|
 | 53 |         }
 | 
|---|
 | 54 |         if(GetOneDrop(mp1,mp2,szFrom,sizeof(szFrom)))
 | 
|---|
 | 55 |           WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),WM_COMMAND,
 | 
|---|
 | 56 |                      MPFROM2SHORT(IDM_SWITCH,0),MPFROMP(szFrom));
 | 
|---|
 | 57 |       }
 | 
|---|
 | 58 |       return 0;
 | 
|---|
 | 59 |   }
 | 
|---|
 | 60 |   return (oldproc) ? oldproc(hwnd,msg,mp1,mp2) :
 | 
|---|
 | 61 |                      WinDefWindowProc(hwnd,msg,mp1,mp2);
 | 
|---|
 | 62 | }
 | 
|---|
 | 63 | 
 | 
|---|
 | 64 | 
 | 
|---|
 | 65 | MRESULT EXPENTRY ExtractDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
 | 
|---|
 | 66 | 
 | 
|---|
 | 67 |   EXTRDATA    *arcdata = NULL;
 | 
|---|
 | 68 | 
 | 
|---|
 | 69 |   switch(msg) {
 | 
|---|
 | 70 |     case WM_INITDLG:
 | 
|---|
 | 71 |       WinSetWindowPtr(hwnd,0,mp2);
 | 
|---|
 | 72 |       arcdata = (EXTRDATA *)mp2;
 | 
|---|
 | 73 |       {
 | 
|---|
 | 74 |         ULONG size = sizeof(BOOL);
 | 
|---|
 | 75 |         BOOL  fRemember = FALSE;
 | 
|---|
 | 76 |         PFNWP oldproc;
 | 
|---|
 | 77 | 
 | 
|---|
 | 78 |         oldproc = WinSubclassWindow(WinWindowFromID(hwnd,EXT_DIRECTORY),
 | 
|---|
 | 79 |                                     (PFNWP)ExtractTextProc);
 | 
|---|
 | 80 |         if(oldproc)
 | 
|---|
 | 81 |           WinSetWindowPtr(WinWindowFromID(hwnd,EXT_DIRECTORY),0,
 | 
|---|
 | 82 |                           (PVOID)oldproc);
 | 
|---|
 | 83 |         PrfQueryProfileData(fmprof,FM3Str,"RememberExt",
 | 
|---|
 | 84 |                             (PVOID)&fRemember,&size);
 | 
|---|
 | 85 |         WinCheckButton(hwnd,EXT_REMEMBER,fRemember);
 | 
|---|
 | 86 |         WinSendDlgItemMsg(hwnd,EXT_DIRECTORY,EM_SETTEXTLIMIT,
 | 
|---|
 | 87 |                           MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
 | 
|---|
 | 88 |         WinSendDlgItemMsg(hwnd,EXT_COMMAND,EM_SETTEXTLIMIT,
 | 
|---|
 | 89 |                           MPFROM2SHORT(256,0),MPVOID);
 | 
|---|
 | 90 |         WinSendDlgItemMsg(hwnd,EXT_MASK,EM_SETTEXTLIMIT,
 | 
|---|
 | 91 |                           MPFROM2SHORT(256,0),MPVOID);
 | 
|---|
 | 92 |         WinSendDlgItemMsg(hwnd,EXT_FILENAME,EM_SETTEXTLIMIT,
 | 
|---|
 | 93 |                           MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
 | 
|---|
 | 94 |         if(arcdata->arcname && *arcdata->arcname)
 | 
|---|
 | 95 |           WinSetDlgItemText(hwnd,EXT_FILENAME,arcdata->arcname);
 | 
|---|
 | 96 |         else
 | 
|---|
 | 97 |           WinSetDlgItemText(hwnd,EXT_FILENAME,
 | 
|---|
 | 98 |                             GetPString(IDS_EXTVARIOUSTEXT));
 | 
|---|
 | 99 |         WinSendDlgItemMsg(hwnd,EXT_NORMAL,BM_SETCHECK,
 | 
|---|
 | 100 |                           MPFROM2SHORT(TRUE,0),MPVOID);
 | 
|---|
 | 101 |         WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->extract);
 | 
|---|
 | 102 |         if(fRemember) {
 | 
|---|
 | 103 | 
 | 
|---|
 | 104 |           CHAR textdir[CCHMAXPATH];
 | 
|---|
 | 105 | 
 | 
|---|
 | 106 |           size = sizeof(textdir);
 | 
|---|
 | 107 |           *textdir = 0;
 | 
|---|
 | 108 |           PrfQueryProfileData(fmprof,FM3Str,"Ext_ExtractDir",
 | 
|---|
 | 109 |                               (PVOID)textdir,&size);
 | 
|---|
 | 110 |           if(*textdir && !IsFile(textdir))
 | 
|---|
 | 111 |             strcpy(arcdata->extractdir,textdir);
 | 
|---|
 | 112 |           size = sizeof(textdir);
 | 
|---|
 | 113 |           *textdir = 0;
 | 
|---|
 | 114 |           PrfQueryProfileData(fmprof,FM3Str,"Ext_Mask",(PVOID)textdir,&size);
 | 
|---|
 | 115 |           WinSetDlgItemText(hwnd,EXT_MASK,textdir);
 | 
|---|
 | 116 |         }
 | 
|---|
 | 117 |         if(*extractpath && (!fRemember || !*arcdata->extractdir)) {
 | 
|---|
 | 118 |           if(arcdata->arcname && *arcdata->arcname &&
 | 
|---|
 | 119 |              !strcmp(extractpath,"*")) {
 | 
|---|
 | 120 | 
 | 
|---|
 | 121 |             CHAR *p;
 | 
|---|
 | 122 | 
 | 
|---|
 | 123 |             strcpy(arcdata->extractdir,arcdata->arcname);
 | 
|---|
 | 124 |             p = strrchr(arcdata->extractdir,'\\');
 | 
|---|
 | 125 |             if(p) {
 | 
|---|
 | 126 |               if(p < arcdata->extractdir + 3)
 | 
|---|
 | 127 |                 p++;
 | 
|---|
 | 128 |               *p = 0;
 | 
|---|
 | 129 |             }
 | 
|---|
 | 130 |           }
 | 
|---|
 | 131 |           else
 | 
|---|
 | 132 |             strcpy(arcdata->extractdir,extractpath);
 | 
|---|
 | 133 |         }
 | 
|---|
 | 134 |         if(!*arcdata->extractdir) {
 | 
|---|
 | 135 |           if(*lastextractpath)
 | 
|---|
 | 136 |             strcpy(arcdata->extractdir,lastextractpath);
 | 
|---|
 | 137 |           else if(arcdata->arcname && *arcdata->arcname) {
 | 
|---|
 | 138 | 
 | 
|---|
 | 139 |             CHAR *p;
 | 
|---|
 | 140 | 
 | 
|---|
 | 141 |             strcpy(arcdata->extractdir,arcdata->arcname);
 | 
|---|
 | 142 |             p = strrchr(arcdata->extractdir,'\\');
 | 
|---|
 | 143 |             if(p) {
 | 
|---|
 | 144 |               if(p < arcdata->extractdir + 3)
 | 
|---|
 | 145 |                 p++;
 | 
|---|
 | 146 |               *p = 0;
 | 
|---|
 | 147 |             }
 | 
|---|
 | 148 |           }
 | 
|---|
 | 149 |           if(!*arcdata->extractdir)
 | 
|---|
 | 150 |             save_dir2(arcdata->extractdir);
 | 
|---|
 | 151 |         }
 | 
|---|
 | 152 |         WinSetDlgItemText(hwnd,EXT_DIRECTORY,arcdata->extractdir);
 | 
|---|
 | 153 |         if(!arcdata->info->exwdirs)
 | 
|---|
 | 154 |           WinEnableWindow(WinWindowFromID(hwnd,EXT_WDIRS),FALSE);
 | 
|---|
 | 155 |         else if(fRemember) {
 | 
|---|
 | 156 |           size = sizeof(BOOL);
 | 
|---|
 | 157 |           fRemember = FALSE;
 | 
|---|
 | 158 |           PrfQueryProfileData(fmprof,FM3Str,"Ext_WDirs",
 | 
|---|
 | 159 |                               (PVOID)&fRemember,&size);
 | 
|---|
 | 160 |           if(fRemember)
 | 
|---|
 | 161 |             PostMsg(WinWindowFromID(hwnd,EXT_WDIRS),BM_CLICK,MPVOID,MPVOID);
 | 
|---|
 | 162 |         }
 | 
|---|
 | 163 |       }
 | 
|---|
 | 164 |       *arcdata->command = 0;
 | 
|---|
 | 165 |       PosOverOkay(hwnd);
 | 
|---|
 | 166 |       break;
 | 
|---|
 | 167 | 
 | 
|---|
 | 168 |     case WM_ADJUSTWINDOWPOS:
 | 
|---|
 | 169 |       PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
 | 
|---|
 | 170 |       break;
 | 
|---|
 | 171 | 
 | 
|---|
 | 172 |     case UM_SETDIR:
 | 
|---|
 | 173 |       PaintRecessedWindow(WinWindowFromID(hwnd,EXT_HELP),(HPS)0,FALSE,TRUE);
 | 
|---|
 | 174 |       return 0;
 | 
|---|
 | 175 | 
 | 
|---|
 | 176 |     case WM_CONTROL:
 | 
|---|
 | 177 |       arcdata = (EXTRDATA *)WinQueryWindowPtr(hwnd,0);
 | 
|---|
 | 178 |       switch(SHORT1FROMMP(mp1)) {
 | 
|---|
 | 179 |         case EXT_REMEMBER:
 | 
|---|
 | 180 |           {
 | 
|---|
 | 181 |             BOOL fRemember = WinQueryButtonCheckstate(hwnd,EXT_REMEMBER);
 | 
|---|
 | 182 | 
 | 
|---|
 | 183 |             PrfWriteProfileData(fmprof,FM3Str,"RememberExt",
 | 
|---|
 | 184 |                                 (PVOID)&fRemember,sizeof(BOOL));
 | 
|---|
 | 185 |           }
 | 
|---|
 | 186 |           break;
 | 
|---|
 | 187 | 
 | 
|---|
 | 188 |         case EXT_FILENAME:
 | 
|---|
 | 189 |           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
 | 
|---|
 | 190 |             WinSetDlgItemText(hwnd,EXT_HELP,
 | 
|---|
 | 191 |                               GetPString(IDS_ARCDEFAULTHELPTEXT));
 | 
|---|
 | 192 |           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
 | 
|---|
 | 193 |             WinSetDlgItemText(hwnd,EXT_HELP,
 | 
|---|
 | 194 |                               GetPString(IDS_ARCARCNAMEHELPTEXT));
 | 
|---|
 | 195 |           break;
 | 
|---|
 | 196 | 
 | 
|---|
 | 197 |         case EXT_DIRECTORY:
 | 
|---|
 | 198 |           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
 | 
|---|
 | 199 |             WinSetDlgItemText(hwnd,EXT_HELP,GetPString(IDS_ARCDEFAULTHELPTEXT));
 | 
|---|
 | 200 |           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
 | 
|---|
 | 201 |             WinSetDlgItemText(hwnd,EXT_HELP,
 | 
|---|
 | 202 |                               GetPString(IDS_EXTEXTRACTDIRHELPTEXT));
 | 
|---|
 | 203 |           break;
 | 
|---|
 | 204 | 
 | 
|---|
 | 205 |         case EXT_COMMAND:
 | 
|---|
 | 206 |           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
 | 
|---|
 | 207 |             WinSetDlgItemText(hwnd,EXT_HELP,
 | 
|---|
 | 208 |                               GetPString(IDS_ARCDEFAULTHELPTEXT));
 | 
|---|
 | 209 |           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
 | 
|---|
 | 210 |             WinSetDlgItemText(hwnd,EXT_HELP,
 | 
|---|
 | 211 |                               GetPString(IDS_ARCCMDHELPTEXT));
 | 
|---|
 | 212 |           break;
 | 
|---|
 | 213 | 
 | 
|---|
 | 214 |         case EXT_MASK:
 | 
|---|
 | 215 |           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
 | 
|---|
 | 216 |             WinSetDlgItemText(hwnd,EXT_HELP,
 | 
|---|
 | 217 |                               GetPString(IDS_ARCDEFAULTHELPTEXT));
 | 
|---|
 | 218 |           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
 | 
|---|
 | 219 |             WinSetDlgItemText(hwnd,EXT_HELP,
 | 
|---|
 | 220 |                               GetPString(IDS_ARCMASKHELPTEXT));
 | 
|---|
 | 221 |           break;
 | 
|---|
 | 222 | 
 | 
|---|
 | 223 |         case EXT_NORMAL:
 | 
|---|
 | 224 |           if((BOOL)WinSendDlgItemMsg(hwnd,EXT_NORMAL,BM_QUERYCHECK,
 | 
|---|
 | 225 |                                      MPVOID,MPVOID))
 | 
|---|
 | 226 |             WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->extract);
 | 
|---|
 | 227 |           break;
 | 
|---|
 | 228 | 
 | 
|---|
 | 229 |         case EXT_WDIRS:
 | 
|---|
 | 230 |           if(arcdata->info->exwdirs) {
 | 
|---|
 | 231 |             if((BOOL)WinSendDlgItemMsg(hwnd,EXT_WDIRS,BM_QUERYCHECK,
 | 
|---|
 | 232 |                                        MPVOID,MPVOID))
 | 
|---|
 | 233 |               WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->exwdirs);
 | 
|---|
 | 234 |           }
 | 
|---|
 | 235 |           break;
 | 
|---|
 | 236 |       }
 | 
|---|
 | 237 |       return 0;
 | 
|---|
 | 238 | 
 | 
|---|
 | 239 |     case WM_COMMAND:
 | 
|---|
 | 240 |       arcdata = (EXTRDATA *)WinQueryWindowPtr(hwnd,0);
 | 
|---|
 | 241 |       switch(SHORT1FROMMP(mp1)) {
 | 
|---|
 | 242 |         case IDM_SWITCH:
 | 
|---|
 | 243 |           if(mp2) {
 | 
|---|
 | 244 | 
 | 
|---|
 | 245 |             CHAR tdir[CCHMAXPATH];
 | 
|---|
 | 246 | 
 | 
|---|
 | 247 |             strcpy(tdir,(CHAR *)mp2);
 | 
|---|
 | 248 |             MakeValidDir(tdir);
 | 
|---|
 | 249 |             WinSetDlgItemText(hwnd,EXT_DIRECTORY,tdir);
 | 
|---|
 | 250 |           }
 | 
|---|
 | 251 |           break;
 | 
|---|
 | 252 | 
 | 
|---|
 | 253 |         case DID_CANCEL:
 | 
|---|
 | 254 |           arcdata->ret = 0;
 | 
|---|
 | 255 |           WinDismissDlg(hwnd,0);
 | 
|---|
 | 256 |           break;
 | 
|---|
 | 257 |         case DID_OK:
 | 
|---|
 | 258 |           {
 | 
|---|
 | 259 |             CHAR s[CCHMAXPATH + 1];
 | 
|---|
 | 260 |             BOOL fRemember;
 | 
|---|
 | 261 | 
 | 
|---|
 | 262 |             fRemember = WinQueryButtonCheckstate(hwnd,EXT_REMEMBER);
 | 
|---|
 | 263 |             *s = 0;
 | 
|---|
 | 264 |             WinQueryDlgItemText(hwnd,EXT_DIRECTORY,CCHMAXPATH,s);
 | 
|---|
 | 265 |             lstrip(rstrip(s));
 | 
|---|
 | 266 |             if(*s) {
 | 
|---|
 | 267 |               if(!SetDir(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT),
 | 
|---|
 | 268 |                          QW_OWNER),hwnd,s,0)) {
 | 
|---|
 | 269 |                 strcpy(arcdata->extractdir,s);
 | 
|---|
 | 270 |                 WinSetDlgItemText(hwnd,EXT_DIRECTORY,s);
 | 
|---|
 | 271 |                 if((!isalpha(*s) || s[1] != ':') && *s != '.')
 | 
|---|
 | 272 |                   saymsg(MB_ENTER,hwnd,
 | 
|---|
 | 273 |                          GetPString(IDS_WARNINGTEXT),
 | 
|---|
 | 274 |                          GetPString(IDS_SPECIFYDRIVETEXT));
 | 
|---|
 | 275 |               }
 | 
|---|
 | 276 |               else
 | 
|---|
 | 277 |                 break;
 | 
|---|
 | 278 |               strcpy(lastextractpath,s);
 | 
|---|
 | 279 |               if(fRemember) {
 | 
|---|
 | 280 |                 PrfWriteProfileString(fmprof,FM3Str,"Ext_ExtractDir",s);
 | 
|---|
 | 281 |                 fRemember = WinQueryButtonCheckstate(hwnd,EXT_WDIRS);
 | 
|---|
 | 282 |                 PrfWriteProfileData(fmprof,FM3Str,"Ext_WDirs",
 | 
|---|
 | 283 |                                     (PVOID)&fRemember,sizeof(BOOL));
 | 
|---|
 | 284 |                 fRemember = TRUE;
 | 
|---|
 | 285 |               }
 | 
|---|
 | 286 |               *s = 0;
 | 
|---|
 | 287 |               WinQueryDlgItemText(hwnd,EXT_COMMAND,256,s);
 | 
|---|
 | 288 |               if(*s) {
 | 
|---|
 | 289 |                 strcpy(arcdata->command,s);
 | 
|---|
 | 290 |                 *s = 0;
 | 
|---|
 | 291 |                 WinQueryDlgItemText(hwnd,EXT_MASK,256,s);
 | 
|---|
 | 292 |                 *arcdata->masks = 0;
 | 
|---|
 | 293 |                 strcpy(arcdata->masks,s);
 | 
|---|
 | 294 |                 if(fRemember)
 | 
|---|
 | 295 |                   PrfWriteProfileString(fmprof,FM3Str,"Ext_Mask",s);
 | 
|---|
 | 296 |                 arcdata->ret = 1;
 | 
|---|
 | 297 |                 WinDismissDlg(hwnd,1);
 | 
|---|
 | 298 |                 break;
 | 
|---|
 | 299 |               }
 | 
|---|
 | 300 |             }
 | 
|---|
 | 301 |           }
 | 
|---|
 | 302 |           DosBeep(50,100);
 | 
|---|
 | 303 |           break;
 | 
|---|
 | 304 | 
 | 
|---|
 | 305 |         case IDM_HELP:
 | 
|---|
 | 306 |           if(hwndHelp)
 | 
|---|
 | 307 |             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
 | 
|---|
 | 308 |                        MPFROM2SHORT(HELP_EXTRACT,0),
 | 
|---|
 | 309 |                        MPFROMSHORT(HM_RESOURCEID));
 | 
|---|
 | 310 |           break;
 | 
|---|
 | 311 | 
 | 
|---|
 | 312 |         case EXT_WALK:
 | 
|---|
 | 313 |           {
 | 
|---|
 | 314 |             CHAR temp[CCHMAXPATH + 1];
 | 
|---|
 | 315 | 
 | 
|---|
 | 316 |             strcpy(temp,arcdata->extractdir);
 | 
|---|
 | 317 |             if(WinDlgBox(HWND_DESKTOP,WinQueryWindow(WinQueryWindow(hwnd,
 | 
|---|
 | 318 |                          QW_PARENT),QW_OWNER),WalkExtractDlgProc,FM3ModHandle,
 | 
|---|
 | 319 |                          WALK_FRAME,(PVOID)temp)) {
 | 
|---|
 | 320 |               if(*temp && stricmp(temp,arcdata->extractdir)) {
 | 
|---|
 | 321 |                 strcpy(arcdata->extractdir,temp);
 | 
|---|
 | 322 |               }
 | 
|---|
 | 323 |             }
 | 
|---|
 | 324 |             WinSetDlgItemText(hwnd,EXT_DIRECTORY,arcdata->extractdir);
 | 
|---|
 | 325 |           }
 | 
|---|
 | 326 |           break;
 | 
|---|
 | 327 | 
 | 
|---|
 | 328 |         case EXT_SEE:
 | 
|---|
 | 329 |           {
 | 
|---|
 | 330 |             CHAR     s[1001],*p;
 | 
|---|
 | 331 |             EXECARGS ex;
 | 
|---|
 | 332 | 
 | 
|---|
 | 333 |             WinQueryDlgItemText(hwnd,EXT_COMMAND,256,s);
 | 
|---|
 | 334 |             lstrip(s);
 | 
|---|
 | 335 |             if(*s) {
 | 
|---|
 | 336 |               p = strchr(s,' ');
 | 
|---|
 | 337 |               if(p)
 | 
|---|
 | 338 |                 *p = 0;
 | 
|---|
 | 339 |               memset(&ex,0,sizeof(EXECARGS));
 | 
|---|
 | 340 |               ex.commandline = s;
 | 
|---|
 | 341 |               ex.flags = WINDOWED | SEPARATEKEEP | MAXIMIZED;
 | 
|---|
 | 342 |               *ex.path = 0;
 | 
|---|
 | 343 |               *ex.environment = 0;
 | 
|---|
 | 344 |               if(WinDlgBox(HWND_DESKTOP,
 | 
|---|
 | 345 |                            hwnd,
 | 
|---|
 | 346 |                            CmdLineDlgProc,
 | 
|---|
 | 347 |                            FM3ModHandle,
 | 
|---|
 | 348 |                            EXEC_FRAME,
 | 
|---|
 | 349 |                            MPFROMP(&ex)) &&
 | 
|---|
 | 350 |                  *s)
 | 
|---|
 | 351 |                 runemf2(ex.flags,
 | 
|---|
 | 352 |                         hwnd,
 | 
|---|
 | 353 |                         NULL,
 | 
|---|
 | 354 |                         (*ex.environment) ? ex.environment : NULL ,
 | 
|---|
 | 355 |                         "%s",
 | 
|---|
 | 356 |                         s);
 | 
|---|
 | 357 |             }
 | 
|---|
 | 358 |             else
 | 
|---|
 | 359 |               DosBeep(50,100);
 | 
|---|
 | 360 |           }
 | 
|---|
 | 361 |           break;
 | 
|---|
 | 362 |       }
 | 
|---|
 | 363 |       return 0;
 | 
|---|
 | 364 | 
 | 
|---|
 | 365 |     case WM_CLOSE:
 | 
|---|
 | 366 |       break;
 | 
|---|
 | 367 |   }
 | 
|---|
 | 368 |   return WinDefDlgProc(hwnd,msg,mp1,mp2);
 | 
|---|
 | 369 | }
 | 
|---|