Changeset 551 for trunk/dll/extract.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (19 years ago)
- File:
-
- 1 edited
-
trunk/dll/extract.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/extract.c
r549 r551 34 34 static PSZ pszSrcFile = __FILE__; 35 35 36 MRESULT EXPENTRY ExtractTextProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)36 MRESULT EXPENTRY ExtractTextProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 37 37 { 38 PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0); 39 static BOOL emphasized = FALSE; 40 41 switch(msg) { 42 case DM_DRAGOVER: 43 if(!emphasized) { 44 emphasized = TRUE; 45 DrawTargetEmphasis(hwnd,emphasized); 46 } 47 if(AcceptOneDrop(mp1,mp2)) 48 return MRFROM2SHORT(DOR_DROP, 49 DO_MOVE); 50 return MRFROM2SHORT(DOR_NEVERDROP,0); 51 52 case DM_DRAGLEAVE: 53 if(emphasized) { 54 emphasized = FALSE; 55 DrawTargetEmphasis(hwnd,emphasized); 56 } 57 break; 58 59 case DM_DROPHELP: 60 DropHelp(mp1,mp2,hwnd, 61 GetPString(IDS_EXTDROPHELPTEXT)); 62 return 0; 63 64 case DM_DROP: 38 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, 0); 39 static BOOL emphasized = FALSE; 40 41 switch (msg) { 42 case DM_DRAGOVER: 43 if (!emphasized) { 44 emphasized = TRUE; 45 DrawTargetEmphasis(hwnd, emphasized); 46 } 47 if (AcceptOneDrop(mp1, mp2)) 48 return MRFROM2SHORT(DOR_DROP, DO_MOVE); 49 return MRFROM2SHORT(DOR_NEVERDROP, 0); 50 51 case DM_DRAGLEAVE: 52 if (emphasized) { 53 emphasized = FALSE; 54 DrawTargetEmphasis(hwnd, emphasized); 55 } 56 break; 57 58 case DM_DROPHELP: 59 DropHelp(mp1, mp2, hwnd, GetPString(IDS_EXTDROPHELPTEXT)); 60 return 0; 61 62 case DM_DROP: 63 { 64 char szFrom[CCHMAXPATH + 2]; 65 66 if (emphasized) { 67 emphasized = FALSE; 68 DrawTargetEmphasis(hwnd, emphasized); 69 } 70 if (GetOneDrop(mp1, mp2, szFrom, sizeof(szFrom))) 71 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND, 72 MPFROM2SHORT(IDM_SWITCH, 0), MPFROMP(szFrom)); 73 } 74 return 0; 75 } 76 return (oldproc) ? oldproc(hwnd, msg, mp1, mp2) : 77 WinDefWindowProc(hwnd, msg, mp1, mp2); 78 } 79 80 MRESULT EXPENTRY ExtractDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 81 { 82 EXTRDATA *arcdata = NULL; 83 84 switch (msg) { 85 case WM_INITDLG: 86 WinSetWindowPtr(hwnd, 0, mp2); 87 arcdata = (EXTRDATA *) mp2; 88 { 89 ULONG size = sizeof(BOOL); 90 BOOL fRemember = FALSE; 91 BOOL fDirectory = FALSE; 92 PFNWP oldproc; 93 94 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, EXT_DIRECTORY), 95 (PFNWP) ExtractTextProc); 96 if (oldproc) 97 WinSetWindowPtr(WinWindowFromID(hwnd, EXT_DIRECTORY), 98 QWL_USER, (PVOID) oldproc); 99 PrfQueryProfileData(fmprof, FM3Str, "RememberExt", 100 (PVOID) & fRemember, &size); 101 PrfQueryProfileData(fmprof, FM3Str, "DirectoryExt", 102 (PVOID) & fDirectory, &size); 103 WinCheckButton(hwnd, EXT_REMEMBER, fRemember); 104 WinCheckButton(hwnd, EXT_AWDIRS, fDirectory); 105 WinSendDlgItemMsg(hwnd, EXT_DIRECTORY, EM_SETTEXTLIMIT, 106 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID); 107 WinSendDlgItemMsg(hwnd, EXT_COMMAND, EM_SETTEXTLIMIT, 108 MPFROM2SHORT(256, 0), MPVOID); 109 WinSendDlgItemMsg(hwnd, EXT_MASK, EM_SETTEXTLIMIT, 110 MPFROM2SHORT(256, 0), MPVOID); 111 WinSendDlgItemMsg(hwnd, EXT_FILENAME, EM_SETTEXTLIMIT, 112 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID); 113 if (arcdata->arcname && *arcdata->arcname) 114 WinSetDlgItemText(hwnd, EXT_FILENAME, arcdata->arcname); 115 else 116 WinSetDlgItemText(hwnd, EXT_FILENAME, GetPString(IDS_EXTVARIOUSTEXT)); 117 if (fDirectory) { 118 WinSendDlgItemMsg(hwnd, EXT_WDIRS, BM_SETCHECK, 119 MPFROM2SHORT(TRUE, 0), MPVOID); 120 WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->exwdirs); 121 } 122 else { 123 WinSendDlgItemMsg(hwnd, EXT_NORMAL, BM_SETCHECK, 124 MPFROM2SHORT(TRUE, 0), MPVOID); 125 WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->extract); 126 127 } 128 if (fRemember) { 129 130 CHAR textdir[CCHMAXPATH]; 131 132 size = sizeof(textdir); 133 *textdir = 0; 134 PrfQueryProfileData(fmprof, FM3Str, "Ext_ExtractDir", 135 (PVOID) textdir, &size); 136 if (*textdir && !IsFile(textdir)) 137 strcpy(arcdata->extractdir, textdir); 138 size = sizeof(textdir); 139 *textdir = 0; 140 PrfQueryProfileData(fmprof, FM3Str, "Ext_Mask", (PVOID) textdir, 141 &size); 142 WinSetDlgItemText(hwnd, EXT_MASK, textdir); 143 } 144 if (*extractpath && (!fRemember || !*arcdata->extractdir)) { 145 if (arcdata->arcname && *arcdata->arcname && 146 !strcmp(extractpath, "*")) { 147 148 CHAR *p; 149 150 strcpy(arcdata->extractdir, arcdata->arcname); 151 p = strrchr(arcdata->extractdir, '\\'); 152 if (p) { 153 if (p < arcdata->extractdir + 3) 154 p++; 155 *p = 0; 156 } 157 } 158 else 159 strcpy(arcdata->extractdir, extractpath); 160 } 161 if (!*arcdata->extractdir) { 162 if (*lastextractpath) 163 strcpy(arcdata->extractdir, lastextractpath); 164 else if (arcdata->arcname && *arcdata->arcname) { 165 166 CHAR *p; 167 168 strcpy(arcdata->extractdir, arcdata->arcname); 169 p = strrchr(arcdata->extractdir, '\\'); 170 if (p) { 171 if (p < arcdata->extractdir + 3) 172 p++; 173 *p = 0; 174 } 175 } 176 if (!*arcdata->extractdir) 177 save_dir2(arcdata->extractdir); 178 } 179 WinSetDlgItemText(hwnd, EXT_DIRECTORY, arcdata->extractdir); 180 if (!arcdata->info->exwdirs) 181 WinEnableWindow(WinWindowFromID(hwnd, EXT_WDIRS), FALSE); 182 else if (fRemember) { 183 size = sizeof(BOOL); 184 fRemember = FALSE; 185 PrfQueryProfileData(fmprof, FM3Str, "Ext_WDirs", 186 (PVOID) & fRemember, &size); 187 if (fRemember) 188 PostMsg(WinWindowFromID(hwnd, EXT_WDIRS), BM_CLICK, MPVOID, MPVOID); 189 } 190 } 191 *arcdata->command = 0; 192 PosOverOkay(hwnd); 193 break; 194 195 case WM_ADJUSTWINDOWPOS: 196 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); 197 break; 198 199 case UM_SETDIR: 200 PaintRecessedWindow(WinWindowFromID(hwnd, EXT_HELP), (HPS) 0, FALSE, 201 TRUE); 202 return 0; 203 204 case WM_CONTROL: 205 arcdata = (EXTRDATA *) WinQueryWindowPtr(hwnd, 0); 206 switch (SHORT1FROMMP(mp1)) { 207 case EXT_REMEMBER: 65 208 { 66 char szFrom[CCHMAXPATH + 2]; 67 68 if(emphasized) { 69 emphasized = FALSE; 70 DrawTargetEmphasis(hwnd,emphasized); 71 } 72 if(GetOneDrop(mp1,mp2,szFrom,sizeof(szFrom))) 73 WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),WM_COMMAND, 74 MPFROM2SHORT(IDM_SWITCH,0),MPFROMP(szFrom)); 75 } 76 return 0; 209 BOOL fRemember = WinQueryButtonCheckstate(hwnd, EXT_REMEMBER); 210 211 PrfWriteProfileData(fmprof, FM3Str, "RememberExt", 212 (PVOID) & fRemember, sizeof(BOOL)); 213 } 214 break; 215 216 case EXT_AWDIRS: 217 { 218 BOOL fDirectory = WinQueryButtonCheckstate(hwnd, EXT_AWDIRS); 219 220 PrfWriteProfileData(fmprof, FM3Str, "DirectoryExt", 221 (PVOID) & fDirectory, sizeof(BOOL)); 222 223 if (fDirectory) { 224 WinSendDlgItemMsg(hwnd, EXT_WDIRS, BM_SETCHECK, 225 MPFROM2SHORT(TRUE, 0), MPVOID); 226 WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->exwdirs); 227 } 228 else { 229 WinSendDlgItemMsg(hwnd, EXT_NORMAL, BM_SETCHECK, 230 MPFROM2SHORT(TRUE, 0), MPVOID); 231 WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->extract); 232 } 233 } 234 break; 235 236 case EXT_FILENAME: 237 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS) 238 WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCDEFAULTHELPTEXT)); 239 if (SHORT2FROMMP(mp1) == EN_SETFOCUS) 240 WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCARCNAMEHELPTEXT)); 241 break; 242 243 case EXT_DIRECTORY: 244 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS) 245 WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCDEFAULTHELPTEXT)); 246 if (SHORT2FROMMP(mp1) == EN_SETFOCUS) 247 WinSetDlgItemText(hwnd, EXT_HELP, 248 GetPString(IDS_EXTEXTRACTDIRHELPTEXT)); 249 break; 250 251 case EXT_COMMAND: 252 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS) 253 WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCDEFAULTHELPTEXT)); 254 if (SHORT2FROMMP(mp1) == EN_SETFOCUS) 255 WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCCMDHELPTEXT)); 256 break; 257 258 case EXT_MASK: 259 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS) 260 WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCDEFAULTHELPTEXT)); 261 if (SHORT2FROMMP(mp1) == EN_SETFOCUS) 262 WinSetDlgItemText(hwnd, EXT_HELP, GetPString(IDS_ARCMASKHELPTEXT)); 263 break; 264 265 case EXT_NORMAL: 266 if ((BOOL) WinSendDlgItemMsg(hwnd, EXT_NORMAL, BM_QUERYCHECK, 267 MPVOID, MPVOID)) 268 WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->extract); 269 break; 270 271 case EXT_WDIRS: 272 if (arcdata->info->exwdirs) { 273 if ((BOOL) WinSendDlgItemMsg(hwnd, EXT_WDIRS, BM_QUERYCHECK, 274 MPVOID, MPVOID)) 275 WinSetDlgItemText(hwnd, EXT_COMMAND, arcdata->info->exwdirs); 276 } 277 break; 278 } 279 return 0; 280 281 case WM_COMMAND: 282 arcdata = (EXTRDATA *) WinQueryWindowPtr(hwnd, 0); 283 switch (SHORT1FROMMP(mp1)) { 284 case IDM_SWITCH: 285 if (mp2) { 286 287 CHAR tdir[CCHMAXPATH]; 288 289 strcpy(tdir, (CHAR *) mp2); 290 MakeValidDir(tdir); 291 WinSetDlgItemText(hwnd, EXT_DIRECTORY, tdir); 292 } 293 break; 294 295 case DID_CANCEL: 296 arcdata->ret = 0; 297 WinDismissDlg(hwnd, 0); 298 break; 299 case DID_OK: 300 { 301 CHAR s[CCHMAXPATH + 1]; 302 BOOL fRemember; 303 304 fRemember = WinQueryButtonCheckstate(hwnd, EXT_REMEMBER); 305 *s = 0; 306 WinQueryDlgItemText(hwnd, EXT_DIRECTORY, CCHMAXPATH, s); 307 bstrip(s); 308 if (*s) { 309 if (!SetDir(WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT), 310 QW_OWNER), hwnd, s, 0)) { 311 strcpy(arcdata->extractdir, s); 312 WinSetDlgItemText(hwnd, EXT_DIRECTORY, s); 313 if ((!isalpha(*s) || s[1] != ':') && *s != '.') 314 saymsg(MB_ENTER, hwnd, 315 GetPString(IDS_WARNINGTEXT), 316 GetPString(IDS_SPECIFYDRIVETEXT)); 317 } 318 else 319 break; 320 strcpy(lastextractpath, s); 321 if (fRemember) { 322 PrfWriteProfileString(fmprof, FM3Str, "Ext_ExtractDir", s); 323 fRemember = WinQueryButtonCheckstate(hwnd, EXT_WDIRS); 324 PrfWriteProfileData(fmprof, FM3Str, "Ext_WDirs", 325 (PVOID) & fRemember, sizeof(BOOL)); 326 fRemember = TRUE; 327 } 328 *s = 0; 329 WinQueryDlgItemText(hwnd, EXT_COMMAND, 256, s); 330 if (*s) { 331 strcpy(arcdata->command, s); 332 *s = 0; 333 WinQueryDlgItemText(hwnd, EXT_MASK, 256, s); 334 *arcdata->masks = 0; 335 strcpy(arcdata->masks, s); 336 if (fRemember) 337 PrfWriteProfileString(fmprof, FM3Str, "Ext_Mask", s); 338 arcdata->ret = 1; 339 WinDismissDlg(hwnd, 1); 340 break; 341 } 342 } 343 } 344 DosBeep(50, 100); // Complain a refuse to quit 345 break; 346 347 case IDM_HELP: 348 if (hwndHelp) 349 WinSendMsg(hwndHelp, HM_DISPLAY_HELP, 350 MPFROM2SHORT(HELP_EXTRACT, 0), MPFROMSHORT(HM_RESOURCEID)); 351 break; 352 353 case EXT_WALK: 354 { 355 CHAR temp[CCHMAXPATH + 1]; 356 357 strcpy(temp, arcdata->extractdir); 358 if (WinDlgBox(HWND_DESKTOP, WinQueryWindow(WinQueryWindow(hwnd, 359 QW_PARENT), 360 QW_OWNER), 361 WalkExtractDlgProc, FM3ModHandle, WALK_FRAME, 362 (PVOID) temp)) { 363 if (*temp && stricmp(temp, arcdata->extractdir)) { 364 strcpy(arcdata->extractdir, temp); 365 } 366 } 367 WinSetDlgItemText(hwnd, EXT_DIRECTORY, arcdata->extractdir); 368 } 369 break; 370 371 case EXT_SEE: 372 { 373 CHAR s[1001], *p; 374 EXECARGS ex; 375 376 WinQueryDlgItemText(hwnd, EXT_COMMAND, 256, s); 377 lstrip(s); 378 if (!*s) 379 Runtime_Error(pszSrcFile, __LINE__, "no command"); 380 else { 381 p = strchr(s, ' '); 382 if (p) 383 *p = 0; // Drop options 384 memset(&ex, 0, sizeof(EXECARGS)); 385 ex.commandline = s; 386 ex.flags = WINDOWED | SEPARATEKEEP | MAXIMIZED; 387 *ex.path = 0; 388 *ex.environment = 0; 389 if (WinDlgBox(HWND_DESKTOP, 390 hwnd, 391 CmdLineDlgProc, 392 FM3ModHandle, EXEC_FRAME, MPFROMP(&ex)) && *s) { 393 runemf2(ex.flags, 394 hwnd, 395 NULL, (*ex.environment) ? ex.environment : NULL, "%s", s); 396 } 397 } 398 } 399 break; 400 } 401 return 0; 402 403 case WM_CLOSE: 404 break; 77 405 } 78 return (oldproc) ? oldproc(hwnd,msg,mp1,mp2) : 79 WinDefWindowProc(hwnd,msg,mp1,mp2); 406 return WinDefDlgProc(hwnd, msg, mp1, mp2); 80 407 } 81 82 83 MRESULT EXPENTRY ExtractDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)84 {85 EXTRDATA *arcdata = NULL;86 87 switch(msg) {88 case WM_INITDLG:89 WinSetWindowPtr(hwnd,0,mp2);90 arcdata = (EXTRDATA *)mp2;91 {92 ULONG size = sizeof(BOOL);93 BOOL fRemember = FALSE;94 BOOL fDirectory = FALSE;95 PFNWP oldproc;96 97 oldproc = WinSubclassWindow(WinWindowFromID(hwnd,EXT_DIRECTORY),98 (PFNWP)ExtractTextProc);99 if(oldproc)100 WinSetWindowPtr(WinWindowFromID(hwnd,EXT_DIRECTORY),101 QWL_USER,102 (PVOID)oldproc);103 PrfQueryProfileData(fmprof,FM3Str,"RememberExt",104 (PVOID)&fRemember,&size);105 PrfQueryProfileData(fmprof,FM3Str,"DirectoryExt",106 (PVOID)&fDirectory,&size);107 WinCheckButton(hwnd,EXT_REMEMBER,fRemember);108 WinCheckButton(hwnd,EXT_AWDIRS,fDirectory);109 WinSendDlgItemMsg(hwnd,EXT_DIRECTORY,EM_SETTEXTLIMIT,110 MPFROM2SHORT(CCHMAXPATH,0),MPVOID);111 WinSendDlgItemMsg(hwnd,EXT_COMMAND,EM_SETTEXTLIMIT,112 MPFROM2SHORT(256,0),MPVOID);113 WinSendDlgItemMsg(hwnd,EXT_MASK,EM_SETTEXTLIMIT,114 MPFROM2SHORT(256,0),MPVOID);115 WinSendDlgItemMsg(hwnd,EXT_FILENAME,EM_SETTEXTLIMIT,116 MPFROM2SHORT(CCHMAXPATH,0),MPVOID);117 if(arcdata->arcname && *arcdata->arcname)118 WinSetDlgItemText(hwnd,EXT_FILENAME,arcdata->arcname);119 else120 WinSetDlgItemText(hwnd,EXT_FILENAME,121 GetPString(IDS_EXTVARIOUSTEXT));122 if(fDirectory){123 WinSendDlgItemMsg(hwnd,EXT_WDIRS,BM_SETCHECK,124 MPFROM2SHORT(TRUE,0),MPVOID);125 WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->exwdirs);126 }127 else {128 WinSendDlgItemMsg(hwnd,EXT_NORMAL,BM_SETCHECK,129 MPFROM2SHORT(TRUE,0),MPVOID);130 WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->extract);131 132 }133 if(fRemember) {134 135 CHAR textdir[CCHMAXPATH];136 137 size = sizeof(textdir);138 *textdir = 0;139 PrfQueryProfileData(fmprof,FM3Str,"Ext_ExtractDir",140 (PVOID)textdir,&size);141 if(*textdir && !IsFile(textdir))142 strcpy(arcdata->extractdir,textdir);143 size = sizeof(textdir);144 *textdir = 0;145 PrfQueryProfileData(fmprof,FM3Str,"Ext_Mask",(PVOID)textdir,&size);146 WinSetDlgItemText(hwnd,EXT_MASK,textdir);147 }148 if(*extractpath && (!fRemember || !*arcdata->extractdir)) {149 if(arcdata->arcname && *arcdata->arcname &&150 !strcmp(extractpath,"*")) {151 152 CHAR *p;153 154 strcpy(arcdata->extractdir,arcdata->arcname);155 p = strrchr(arcdata->extractdir,'\\');156 if(p) {157 if(p < arcdata->extractdir + 3)158 p++;159 *p = 0;160 }161 }162 else163 strcpy(arcdata->extractdir,extractpath);164 }165 if(!*arcdata->extractdir) {166 if(*lastextractpath)167 strcpy(arcdata->extractdir,lastextractpath);168 else if(arcdata->arcname && *arcdata->arcname) {169 170 CHAR *p;171 172 strcpy(arcdata->extractdir,arcdata->arcname);173 p = strrchr(arcdata->extractdir,'\\');174 if(p) {175 if(p < arcdata->extractdir + 3)176 p++;177 *p = 0;178 }179 }180 if(!*arcdata->extractdir)181 save_dir2(arcdata->extractdir);182 }183 WinSetDlgItemText(hwnd,EXT_DIRECTORY,arcdata->extractdir);184 if(!arcdata->info->exwdirs)185 WinEnableWindow(WinWindowFromID(hwnd,EXT_WDIRS),FALSE);186 else if(fRemember) {187 size = sizeof(BOOL);188 fRemember = FALSE;189 PrfQueryProfileData(fmprof,FM3Str,"Ext_WDirs",190 (PVOID)&fRemember,&size);191 if(fRemember)192 PostMsg(WinWindowFromID(hwnd,EXT_WDIRS),BM_CLICK,MPVOID,MPVOID);193 }194 }195 *arcdata->command = 0;196 PosOverOkay(hwnd);197 break;198 199 case WM_ADJUSTWINDOWPOS:200 PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);201 break;202 203 case UM_SETDIR:204 PaintRecessedWindow(WinWindowFromID(hwnd,EXT_HELP),(HPS)0,FALSE,TRUE);205 return 0;206 207 case WM_CONTROL:208 arcdata = (EXTRDATA *)WinQueryWindowPtr(hwnd,0);209 switch(SHORT1FROMMP(mp1)) {210 case EXT_REMEMBER:211 {212 BOOL fRemember = WinQueryButtonCheckstate(hwnd,EXT_REMEMBER);213 214 PrfWriteProfileData(fmprof,FM3Str,"RememberExt",215 (PVOID)&fRemember,sizeof(BOOL));216 }217 break;218 219 case EXT_AWDIRS:220 {221 BOOL fDirectory = WinQueryButtonCheckstate(hwnd,EXT_AWDIRS);222 223 PrfWriteProfileData(fmprof,FM3Str,"DirectoryExt",224 (PVOID)&fDirectory,sizeof(BOOL));225 226 if(fDirectory){227 WinSendDlgItemMsg(hwnd,EXT_WDIRS,BM_SETCHECK,228 MPFROM2SHORT(TRUE,0),MPVOID);229 WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->exwdirs);230 }231 else {232 WinSendDlgItemMsg(hwnd,EXT_NORMAL,BM_SETCHECK,233 MPFROM2SHORT(TRUE,0),MPVOID);234 WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->extract);235 }236 }237 break;238 239 case EXT_FILENAME:240 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)241 WinSetDlgItemText(hwnd,EXT_HELP,242 GetPString(IDS_ARCDEFAULTHELPTEXT));243 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)244 WinSetDlgItemText(hwnd,EXT_HELP,245 GetPString(IDS_ARCARCNAMEHELPTEXT));246 break;247 248 case EXT_DIRECTORY:249 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)250 WinSetDlgItemText(hwnd,EXT_HELP,GetPString(IDS_ARCDEFAULTHELPTEXT));251 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)252 WinSetDlgItemText(hwnd,EXT_HELP,253 GetPString(IDS_EXTEXTRACTDIRHELPTEXT));254 break;255 256 case EXT_COMMAND:257 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)258 WinSetDlgItemText(hwnd,EXT_HELP,259 GetPString(IDS_ARCDEFAULTHELPTEXT));260 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)261 WinSetDlgItemText(hwnd,EXT_HELP,262 GetPString(IDS_ARCCMDHELPTEXT));263 break;264 265 case EXT_MASK:266 if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)267 WinSetDlgItemText(hwnd,EXT_HELP,268 GetPString(IDS_ARCDEFAULTHELPTEXT));269 if(SHORT2FROMMP(mp1) == EN_SETFOCUS)270 WinSetDlgItemText(hwnd,EXT_HELP,271 GetPString(IDS_ARCMASKHELPTEXT));272 break;273 274 case EXT_NORMAL:275 if((BOOL)WinSendDlgItemMsg(hwnd,EXT_NORMAL,BM_QUERYCHECK,276 MPVOID,MPVOID))277 WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->extract);278 break;279 280 case EXT_WDIRS:281 if(arcdata->info->exwdirs) {282 if((BOOL)WinSendDlgItemMsg(hwnd,EXT_WDIRS,BM_QUERYCHECK,283 MPVOID,MPVOID))284 WinSetDlgItemText(hwnd,EXT_COMMAND,arcdata->info->exwdirs);285 }286 break;287 }288 return 0;289 290 case WM_COMMAND:291 arcdata = (EXTRDATA *)WinQueryWindowPtr(hwnd,0);292 switch(SHORT1FROMMP(mp1)) {293 case IDM_SWITCH:294 if(mp2) {295 296 CHAR tdir[CCHMAXPATH];297 298 strcpy(tdir,(CHAR *)mp2);299 MakeValidDir(tdir);300 WinSetDlgItemText(hwnd,EXT_DIRECTORY,tdir);301 }302 break;303 304 case DID_CANCEL:305 arcdata->ret = 0;306 WinDismissDlg(hwnd,0);307 break;308 case DID_OK:309 {310 CHAR s[CCHMAXPATH + 1];311 BOOL fRemember;312 313 fRemember = WinQueryButtonCheckstate(hwnd,EXT_REMEMBER);314 *s = 0;315 WinQueryDlgItemText(hwnd,EXT_DIRECTORY,CCHMAXPATH,s);316 bstrip(s);317 if(*s) {318 if(!SetDir(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT),319 QW_OWNER),hwnd,s,0)) {320 strcpy(arcdata->extractdir,s);321 WinSetDlgItemText(hwnd,EXT_DIRECTORY,s);322 if((!isalpha(*s) || s[1] != ':') && *s != '.')323 saymsg(MB_ENTER,hwnd,324 GetPString(IDS_WARNINGTEXT),325 GetPString(IDS_SPECIFYDRIVETEXT));326 }327 else328 break;329 strcpy(lastextractpath,s);330 if(fRemember) {331 PrfWriteProfileString(fmprof,FM3Str,"Ext_ExtractDir",s);332 fRemember = WinQueryButtonCheckstate(hwnd,EXT_WDIRS);333 PrfWriteProfileData(fmprof,FM3Str,"Ext_WDirs",334 (PVOID)&fRemember,sizeof(BOOL));335 fRemember = TRUE;336 }337 *s = 0;338 WinQueryDlgItemText(hwnd,EXT_COMMAND,256,s);339 if(*s) {340 strcpy(arcdata->command,s);341 *s = 0;342 WinQueryDlgItemText(hwnd,EXT_MASK,256,s);343 *arcdata->masks = 0;344 strcpy(arcdata->masks,s);345 if(fRemember)346 PrfWriteProfileString(fmprof,FM3Str,"Ext_Mask",s);347 arcdata->ret = 1;348 WinDismissDlg(hwnd,1);349 break;350 }351 }352 }353 DosBeep(50,100); // Complain a refuse to quit354 break;355 356 case IDM_HELP:357 if(hwndHelp)358 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,359 MPFROM2SHORT(HELP_EXTRACT,0),360 MPFROMSHORT(HM_RESOURCEID));361 break;362 363 case EXT_WALK:364 {365 CHAR temp[CCHMAXPATH + 1];366 367 strcpy(temp,arcdata->extractdir);368 if(WinDlgBox(HWND_DESKTOP,WinQueryWindow(WinQueryWindow(hwnd,369 QW_PARENT),QW_OWNER),WalkExtractDlgProc,FM3ModHandle,370 WALK_FRAME,(PVOID)temp)) {371 if(*temp && stricmp(temp,arcdata->extractdir)) {372 strcpy(arcdata->extractdir,temp);373 }374 }375 WinSetDlgItemText(hwnd,EXT_DIRECTORY,arcdata->extractdir);376 }377 break;378 379 case EXT_SEE:380 {381 CHAR s[1001],*p;382 EXECARGS ex;383 384 WinQueryDlgItemText(hwnd,EXT_COMMAND,256,s);385 lstrip(s);386 if (!*s)387 Runtime_Error(pszSrcFile, __LINE__, "no command");388 else {389 p = strchr(s,' ');390 if (p)391 *p = 0; // Drop options392 memset(&ex,0,sizeof(EXECARGS));393 ex.commandline = s;394 ex.flags = WINDOWED | SEPARATEKEEP | MAXIMIZED;395 *ex.path = 0;396 *ex.environment = 0;397 if(WinDlgBox(HWND_DESKTOP,398 hwnd,399 CmdLineDlgProc,400 FM3ModHandle,401 EXEC_FRAME,402 MPFROMP(&ex)) &&403 *s)404 {405 runemf2(ex.flags,406 hwnd,407 NULL,408 (*ex.environment) ? ex.environment : NULL ,409 "%s",410 s);411 }412 }413 }414 break;415 }416 return 0;417 418 case WM_CLOSE:419 break;420 }421 return WinDefDlgProc(hwnd,msg,mp1,mp2);422 }
Note:
See TracChangeset
for help on using the changeset viewer.
