source: trunk/dll/cmdline.c@ 1498

Last change on this file since 1498 was 1498, checked in by Gregg Young, 16 years ago

Changes to get FM2 to compile with the latest watcom 1.9 beta (mostly type casts of CHAR CONSTANT * to CHAR *). Changes to get the environment settings working everywhere again (broken by the change that moved commands to the INI); Added an environment size variable (set to 2048 which was the largest I found hard coded). Still need to find everywhere the environment size is set and use this variable.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 25.5 KB
RevLine 
[123]1
2/***********************************************************************
3
4 $Id: cmdline.c 1498 2010-01-18 00:57:01Z gyoung $
5
[345]6 User defined commands support
7
[123]8 Copyright (c) 1993-98 M. Kimes
[1498]9 Copyright (c) 2004, 2010 Steven H.Levine
[123]10
[186]11 01 Aug 04 SHL Rework lstrip/rstrip usage
12 05 Jun 05 SHL Use QWL_USER
[345]13 22 Jul 06 SHL Check more run time errors
[406]14 29 Jul 06 SHL Use xfgets_bstripcr
[574]15 22 Mar 07 GKY Use QWL_USER
[697]16 16 Jun 07 SHL Update for OpenWatcom
[793]17 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[985]18 29 Feb 08 GKY Use xfree where appropriate
[1004]19 20 Apr 08 GKY New variable names; Save and Load command lines of user set length
[1082]20 19 Jul 08 GKY Replace save_dir2(dir) with pFM2SaveDirectory and use BldFullPathName
[1119]21 24 Aug 08 GKY Warn full drive on save of .DAT file; prevent loss of existing file
[1438]22 28 Jun 09 GKY Added AddBackslashToPath() to remove repeatative code.
[1482]23 13 Dec 09 GKY Fixed separate paramenters. Please note that appname should be used in
24 profile calls for user settings that work and are setable in more than one
25 miniapp; FM3Str should be used for setting only relavent to FM/2 or that
26 aren't user settable; realappname should be used for setting applicable to
27 one or more miniapp but not to FM/2
[1488]28 21 Dec 09 GKY Added CheckExecutibleFlags to streamline code in command.c assoc.c & cmdline.c
[1498]29 17 JAN 10 GKY Changes to get working with Watcom 1.9 Beta (1/16/10). Mostly cast CHAR CONSTANT * as CHAR *.
[123]30
31***********************************************************************/
32
[2]33#include <stdlib.h>
34#include <string.h>
35#include <share.h>
[689]36#include <io.h> // unlink
[345]37
[907]38#define INCL_DOS
39#define INCL_WIN
40#define INCL_LONGLONG // dircnrs.h
41
[1177]42#include "fm3dll.h"
[1221]43#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
[1204]44#include "arccnrs.h" // Data declaration(s)
45#include "fm2cmd.h" // Data declaration(s)
46#include "notebook.h" // Data declaration(s)
47#include "init.h" // Data declaration(s)
48#include "newview.h" // Data declarations
[2]49#include "fm3dlg.h"
50#include "fm3str.h"
51#include "mle.h"
[907]52#include "errutil.h" // Dos_Error...
53#include "strutil.h" // GetPString
[1156]54#include "mainwnd.h" // BubbleHelp
55#include "cmdline.h" // CmdLineDlgProc, CmdLine2DlgProc
[1177]56#include "chklist.h" // PosOverOkay
[1004]57#include "pathutil.h" // MaxCmdLineStr
[1177]58#include "strips.h" // bstrip
59#include "misc.h" // CheckDriveSpaceAvail
60#include "srchpath.h" // searchpath
61#include "wrappers.h" // xfgets_bstripcr
62#include "valid.h" // IsFile
63#include "dirs.h" // save_dir2
64#include "systemf.h"
[1039]65#include "fortify.h"
[2]66
[1004]67#define MAXNUMCMDLINES 250
[2]68
[1004]69typedef struct LINKCMDLINES
[551]70{
[1004]71 CHAR *cmdline;
72 struct LINKCMDLINES *next;
[551]73}
[1004]74LINKCMDLINES;
[2]75
[1004]76static LINKCMDLINES *DoItYourselfCmdLine = NULL, *MiniCmdLine = NULL;
77static BOOL DoItYourselfLoaded = FALSE, MiniLoaded = FALSE;
[2]78
[1204]79// Data definitions
80static PSZ pszSrcFile = __FILE__;
81
82#pragma data_seg(GLOBAL1)
83BOOL fSaveBigCmds;
84
85
[1004]86VOID load_cmdlines(BOOL DoItYourself)
[345]87{
[1004]88 /** load linked list of cmdlines from CMDLINES.DAT file
89 * if DoItYourself = TRUE (main command line dialog)
90 * else load from CMDMINI.DAT (mini command line at
91 * bottom of main window).
92 */
[2]93
[551]94 FILE *fp;
[1004]95 LINKCMDLINES *info, *last = NULL, *CmdLineHead;
96 PSZ pszCmdLine;
97 //CHAR s[1024];
[551]98 INT x = 0;
[2]99
[1004]100 pszCmdLine = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
101 if (pszCmdLine) {
102 CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
103 if (DoItYourself)
104 DoItYourselfLoaded = TRUE;
105 else
106 MiniLoaded = TRUE;
[1398]107 BldFullPathName(pszCmdLine, pFM2SaveDirectory, (DoItYourself) ? PCSZ_CMDLINESDAT : PCSZ_CMDMINIDAT);
[1004]108 fp = _fsopen(pszCmdLine, "r", SH_DENYWR);
109 if (fp) {
110 while (x < MAXNUMCMDLINES && !feof(fp)) {
111 if (!xfgets_bstripcr(pszCmdLine, MaxComLineStrg, fp, pszSrcFile, __LINE__))
112 break;
113 if (pszCmdLine && *pszCmdLine != ';') {
114 info = xmalloc(sizeof(LINKCMDLINES), pszSrcFile, __LINE__);
115 if (info) {
116 x++;
117 info->cmdline = xstrdup(pszCmdLine, pszSrcFile, __LINE__);
118 if (!info->cmdline)
[1039]119 free(info);
[1004]120 else {
121 info->next = NULL;
122 if (!CmdLineHead)
123 CmdLineHead = info;
124 else
125 last->next = info;
126 last = info;
127 }
128 }
129 }
[2]130 }
[1004]131 fclose(fp);
[2]132 }
[1039]133 free(pszCmdLine);
[2]134 }
[1004]135 if (DoItYourself)
136 DoItYourselfCmdLine = CmdLineHead;
[2]137 else
[1004]138 MiniCmdLine = CmdLineHead;
[2]139}
140
[1004]141VOID save_cmdlines(BOOL DoItYourself)
[345]142{
[1004]143 /** save linked list of cmdlines from CMDLINES.DAT file
144 * if DoItYourself = TRUE (main command line dialog)
145 * else load from CMDMINI.DAT (mini command line at
146 * bottom of main window).
147 */
[2]148
[1004]149 LINKCMDLINES *info, *CmdLineHead;
[551]150 FILE *fp;
[1004]151 PSZ pszCmdLine;
152 //CHAR s[CCHMAXPATH + 14];
[2]153
[1004]154 CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
155 if ((DoItYourself && !DoItYourselfLoaded) || (!DoItYourself && !MiniLoaded))
[2]156 return;
[1004]157 pszCmdLine = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
158 if (!pszCmdLine)
159 return;
[1398]160 BldFullPathName(pszCmdLine, pFM2SaveDirectory, (DoItYourself) ? PCSZ_CMDLINESDAT : PCSZ_CMDMINIDAT);
[1118]161 if (CheckDriveSpaceAvail(pszCmdLine, ullDATFileSpaceNeeded, 1) == 2)
[1117]162 return; //already gave error msg
[1004]163 if (CmdLineHead) {
164 fp = xfopen(pszCmdLine, "w", pszSrcFile, __LINE__);
[345]165 if (fp) {
[551]166 fputs(GetPString(IDS_COMMANDFILE2TEXT), fp);
[1004]167 info = CmdLineHead;
[551]168 while (info) {
[1004]169 fprintf(fp, "%0.*s\n", 1000, info->cmdline);
[551]170 info = info->next;
[2]171 }
172 fclose(fp);
173 }
174 }
175 else
[1004]176 unlink(pszCmdLine);
177 if (DoItYourself)
178 DoItYourselfCmdLine = CmdLineHead;
[2]179 else
[1004]180 MiniCmdLine = CmdLineHead;
[2]181}
182
[1004]183BOOL add_cmdline(CHAR *cmdline, BOOL DoItYourself)
[345]184{
[1004]185 LINKCMDLINES *info, *last = NULL, *CmdLineHead;
[551]186 INT x = 0;
[2]187
[1004]188 if (!cmdline || !*cmdline)
[2]189 return FALSE;
[1004]190 CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
191 if ((DoItYourself && !DoItYourselfLoaded) || (!DoItYourself && !MiniLoaded))
192 load_cmdlines(DoItYourself);
193 info = CmdLineHead;
[345]194 while (info) {
[1004]195 if (!stricmp(info->cmdline, cmdline))
[2]196 return FALSE;
197 last = info;
198 info = info->next;
199 x++;
200 }
[1004]201 info = xmalloc(sizeof(LINKCMDLINES), pszSrcFile, __LINE__);
[345]202 if (info) {
[1004]203 info->cmdline = xstrdup(cmdline, pszSrcFile, __LINE__);
204 if (!info->cmdline)
[1009]205 xfree(info, pszSrcFile, __LINE__);
[345]206 else {
[2]207 info->next = NULL;
[1004]208 if (!CmdLineHead)
209 CmdLineHead = info;
[2]210 else
[551]211 last->next = info;
[1004]212 if (x > MAXNUMCMDLINES) {
213 info = CmdLineHead;
214 CmdLineHead = CmdLineHead->next;
[1039]215 free(info);
[2]216 }
[1004]217 if (DoItYourself)
218 DoItYourselfCmdLine = CmdLineHead;
[2]219 else
[1004]220 MiniCmdLine = CmdLineHead;
[2]221 return TRUE;
222 }
223 }
224 return FALSE;
225}
226
[1004]227BOOL remove_cmdline(CHAR *cmdline, BOOL DoItYourself)
[345]228{
[1004]229 LINKCMDLINES *info, *last = NULL, *CmdLineHead;
[2]230
[1004]231 if (!cmdline || !*cmdline)
[2]232 return FALSE;
[1004]233 if ((DoItYourself && !DoItYourselfLoaded) || (!DoItYourself && !MiniLoaded))
234 load_cmdlines(DoItYourself);
235 CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
236 info = CmdLineHead;
[551]237 while (info) {
[1004]238 if (!stricmp(info->cmdline, cmdline)) {
[551]239 if (last)
240 last->next = info->next;
[2]241 else
[1004]242 CmdLineHead = info->next;
[1009]243 xfree(info->cmdline, pszSrcFile, __LINE__);
[1039]244 free(info);
[1004]245 if (DoItYourself)
246 DoItYourselfCmdLine = CmdLineHead;
[2]247 else
[1004]248 MiniCmdLine = CmdLineHead;
[2]249 return TRUE;
250 }
251 last = info;
252 info = info->next;
253 }
254 return FALSE;
255}
256
[1004]257VOID free_cmdlines(BOOL DoItYourself)
[345]258{
[1004]259 LINKCMDLINES *info, *next, *CmdLineHead;
[2]260
[1004]261 CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
262 info = CmdLineHead;
[551]263 while (info) {
[2]264 next = info->next;
[1009]265 xfree(info->cmdline, pszSrcFile, __LINE__);
[1039]266 free(info);
[2]267 info = next;
268 }
[1004]269 CmdLineHead = NULL;
270 if (DoItYourself)
271 DoItYourselfCmdLine = CmdLineHead;
[2]272 else
[1004]273 MiniCmdLine = CmdLineHead;
[2]274 DosPostEventSem(CompactSem);
275}
276
[551]277MRESULT EXPENTRY CmdBtnSubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[345]278{
[551]279 switch (msg) {
280 case WM_MOUSEMOVE:
281 {
282 ULONG strid = 0;
[2]283
[551]284 switch (WinQueryWindowUShort(hwnd, QWS_ID)) {
285 case EXEC2_CLR:
286 strid = IDS_CMDWIPEALLHELPTEXT;
287 break;
288 case EXEC2_DEL:
289 strid = IDS_CMDDELHILITEHELPTEXT;
290 break;
291 case IDM_HELP:
292 strid = IDS_CMDHELPHELPTEXT;
293 break;
294 case DID_CANCEL:
295 strid = IDS_CMDCLOSEBOXHELPTEXT;
296 break;
297 case EXEC2_OPEN:
298 strid = IDS_CMDOPENHELPTEXT;
299 break;
300 case EXEC2_CLOSE:
301 strid = IDS_CMDCLOSEHELPTEXT;
302 break;
303 case EXEC2_FILTER:
304 strid = IDS_CMDFILTERHELPTEXT;
305 break;
306 case EXEC2_KEEP:
307 strid = IDS_CMDKEEPHELPTEXT;
308 break;
309 case EXEC2_SAVE:
310 strid = IDS_CMDSAVEHELPTEXT;
311 break;
[2]312 }
[551]313 if (strid)
314 BubbleHelp(hwnd, TRUE, FALSE, FALSE, GetPString(strid));
315 }
316 break;
[2]317 }
[551]318 return PFNWPButton(hwnd, msg, mp1, mp2);
[2]319}
320
[551]321MRESULT EXPENTRY CmdListSubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[345]322{
[574]323 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
[2]324
[551]325 switch (msg) {
326 case WM_MOUSEMOVE:
327 if (hwndBubble)
328 WinDestroyWindow(hwndBubble);
329 break;
[2]330
[551]331 case WM_CHAR:
332 if (SHORT1FROMMP(mp1) & KC_KEYUP) {
333 if ((SHORT1FROMMP(mp1) & KC_VIRTUALKEY) &&
334 (SHORT2FROMMP(mp2)) == VK_DELETE) {
335 if ((SHORT1FROMMP(mp1) & KC_CTRL) != KC_CTRL)
336 PostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
337 MPFROM2SHORT(EXEC2_DEL, 0), MPVOID);
338 else
339 PostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
340 MPFROM2SHORT(EXEC2_CLR, 0), MPVOID);
[2]341 }
[551]342 }
343 break;
[2]344 }
[551]345 return oldproc(hwnd, msg, mp1, mp2);
[2]346}
347
[551]348MRESULT EXPENTRY CmdLineDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[345]349{
[2]350 EXECARGS *ex;
351
[551]352 switch (msg) {
353 case WM_INITDLG:
354 ex = (EXECARGS *) mp2;
[574]355 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) ex);
[551]356 if (!ex || !ex->commandline) {
357 WinDismissDlg(hwnd, 0);
358 break;
359 }
360 if (*ex->title)
361 WinSetWindowText(hwnd, ex->title);
362 WinShowWindow(WinWindowFromID(hwnd, EXEC2_DEL), FALSE);
363 WinCheckButton(hwnd, EXEC_SAVECMD, fSaveBigCmds);
364 WinSendDlgItemMsg(hwnd, EXEC_CL, EM_SETTEXTLIMIT,
365 MPFROM2SHORT(1000, 0), MPVOID);
366 WinSetDlgItemText(hwnd, EXEC_CL, ex->commandline);
367 WinSetWindowPtr(WinWindowFromID(hwnd, EXEC_LISTBOX),
368 QWL_USER,
369 (PVOID) WinSubclassWindow(WinWindowFromID(hwnd,
370 EXEC_LISTBOX),
371 (PFNWP) CmdListSubProc));
372 if (*ex->commandline == ' ')
373 WinSendDlgItemMsg(hwnd, EXEC_CL, EM_SETSEL, MPFROM2SHORT(0, 0), MPVOID);
374 WinSendDlgItemMsg(hwnd, EXEC_CL, EM_SETINSERTMODE,
375 MPFROMSHORT(TRUE), MPVOID);
376 if (ex->flags & MINIMIZED)
377 WinCheckButton(hwnd, EXEC_MINIMIZED, TRUE);
378 else if (ex->flags & MAXIMIZED)
379 WinCheckButton(hwnd, EXEC_MAXIMIZED, TRUE);
380 else if (ex->flags & FULLSCREEN)
381 WinCheckButton(hwnd, EXEC_FULLSCREEN, TRUE);
382 else if (ex->flags & INVISIBLE)
383 WinCheckButton(hwnd, EXEC_INVISIBLE, TRUE);
384 else
385 WinCheckButton(hwnd, EXEC_DEFAULT, TRUE);
386 if ((ex->flags & SEPARATEKEEP) == SEPARATEKEEP)
387 WinCheckButton(hwnd, EXEC_KEEP, TRUE);
388 else
389 WinCheckButton(hwnd, EXEC_KEEP, FALSE);
390 MLEsetformat(WinWindowFromID(hwnd, EXEC_ENVIRON), MLFIE_NOTRANS);
391 MLEsetlimit(WinWindowFromID(hwnd, EXEC_ENVIRON), 1000);
392 WinSetDlgItemText(hwnd, EXEC_ENVIRON, ex->environment);
393// WinEnableWindow(WinWindowFromID(hwnd,EXEC_ENVIRON),FALSE);
394 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
395 PosOverOkay(hwnd);
396 break;
397
398 case UM_SETUP:
399 {
400 ULONG apptype = 0L;
401 CHAR executable[CCHMAXPATH], commandline[1001], *p;
402
403 ex = INSTDATA(hwnd);
404 if (!ex)
405 return 0;
406 WinSetDlgItemText(hwnd, EXEC_WARNING, NullStr);
407 WinSetDlgItemText(hwnd, EXEC_WARNING2, NullStr);
408 *commandline = 0;
409 WinQueryDlgItemText(hwnd, EXEC_CL, 1000, commandline);
410 if (!*commandline)
411 return 0;
412 if (*ex->path) {
[1438]413 strcpy(executable, ex->path);
414 AddBackslashToPath(executable);
415 //if (executable[strlen(executable) - 1] != '\\')
416 // strcat(executable, "\\");
[2]417 }
418 else
[551]419 *executable = 0;
420 strncat(executable, commandline, CCHMAXPATH - strlen(executable));
421 executable[CCHMAXPATH - 1] = 0;
422 p = strchr(executable, ' ');
423 if (p)
424 *p = 0;
425 if (IsFile(executable) == -1) {
426 strncpy(executable, commandline, CCHMAXPATH);
427 executable[CCHMAXPATH - 1] = 0;
428 p = strchr(executable, ' ');
429 if (p)
430 *p = 0;
431 if (IsFile(executable) == -1) {
432 p = searchpath(executable);
433 if (*p)
434 strcpy(executable, p);
435 else {
436 WinSetDlgItemText(hwnd,
437 EXEC_WARNING2,
[1498]438 (CHAR *) GetPString(IDS_CANTFINDFILETEXT));
[551]439 break;
440 }
441 }
442 }
[1480]443 if (DosQueryAppType(executable, &apptype) ||
[551]444 (apptype && !(apptype &
445 (FAPPTYP_NOTWINDOWCOMPAT |
446 FAPPTYP_WINDOWCOMPAT |
447 FAPPTYP_WINDOWAPI |
448 FAPPTYP_BOUND |
449 FAPPTYP_DOS |
450 FAPPTYP_WINDOWSREAL |
451 FAPPTYP_WINDOWSPROT | FAPPTYP_32BIT | 0x1000)))) {
452 p = strchr(executable, '.');
453 if (p) {
[1398]454 if (!stricmp(p, PCSZ_DOTBAT) || !stricmp(p, PCSZ_DOTCMD) ||
455 !stricmp(p, PCSZ_DOTBTM)) {
[551]456 WinSetDlgItemText(hwnd,
457 EXEC_WARNING2,
[1498]458 (CHAR *) GetPString(IDS_RUNTHRUCMDEXETEXT));
[551]459 break;
460 }
461 }
[1498]462 WinSetDlgItemText(hwnd, EXEC_WARNING2, (CHAR *) GetPString(IDS_NOTDIRECTEXETEXT));
[551]463 }
464 else if (apptype) { /* acceptable */
465
466 CHAR s[257];
467
468 *s = 0;
[1498]469 WinSetDlgItemText(hwnd, EXEC_WARNING, (CHAR *) GetPString(IDS_ACCEPTABLEAPPTEXT));
[551]470 if (apptype & FAPPTYP_DOS)
471 strcat(s, GetPString(IDS_DOSTEXT));
472 if (apptype & FAPPTYP_WINDOWSREAL) {
473 if (*s)
474 strcat(s, " ");
475 strcat(s, GetPString(IDS_WINDOWSREALTEXT));
476 }
477 if (apptype & FAPPTYP_WINDOWSPROT) {
478 if (*s)
479 strcat(s, " ");
480 strcat(s, GetPString(IDS_WINDOWSPROTTEXT));
481 }
482 if (apptype & 0x1000) {
483 if (*s)
484 strcat(s, " ");
485 strcat(s, GetPString(IDS_WINDOWSENHTEXT));
486 }
487 if ((apptype & FAPPTYP_WINDOWAPI) == FAPPTYP_WINDOWAPI) {
488 if (*s)
489 strcat(s, " ");
490 strcat(s, GetPString(IDS_PMTEXT));
491 WinCheckButton(hwnd, EXEC_FULLSCREEN, FALSE);
492 WinEnableWindow(WinWindowFromID(hwnd, EXEC_FULLSCREEN), FALSE);
493 }
494 if (apptype & FAPPTYP_BOUND) {
495 if (*s)
496 strcat(s, " ");
497 strcat(s, GetPString(IDS_BOUNDTEXT));
498 }
499 if ((apptype & FAPPTYP_WINDOWCOMPAT) &&
500 !(apptype & FAPPTYP_NOTWINDOWCOMPAT)) {
501 if (*s)
502 strcat(s, " ");
503 strcat(s, GetPString(IDS_VIOTEXT));
504 }
505 if ((apptype & FAPPTYP_NOTWINDOWCOMPAT) &&
506 !(apptype & FAPPTYP_WINDOWCOMPAT)) {
507 if (*s)
508 strcat(s, " ");
509 strcat(s, GetPString(IDS_FULLSCREENTEXT));
510 }
511 if (apptype & FAPPTYP_32BIT) {
512 if (*s)
513 strcat(s, " ");
514 strcat(s, GetPString(IDS_32BITTEXT));
515 }
516 WinSetDlgItemText(hwnd, EXEC_WARNING2, s);
517 if ((apptype & (FAPPTYP_DOS | FAPPTYP_WINDOWSREAL |
518 FAPPTYP_WINDOWSPROT | 0x1000)) ||
519 ((apptype & FAPPTYP_WINDOWAPI) == FAPPTYP_WINDOWAPI)) {
520 WinCheckButton(hwnd, EXEC_KEEP, FALSE);
521 WinEnableWindow(WinWindowFromID(hwnd, EXEC_KEEP), FALSE);
522 }
523 if (apptype & (FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT | 0x1000))
524 WinCheckButton(hwnd, EXEC_FULLSCREEN, TRUE);
525 }
[2]526 else
[1498]527 WinSetDlgItemText(hwnd, EXEC_WARNING2, (CHAR *) GetPString(IDS_UNKNOWNDEFAULTTEXT));
[551]528 }
529 return 0;
[2]530
[551]531 case WM_ADJUSTWINDOWPOS:
532 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
533 break;
[2]534
[551]535 case UM_SETDIR:
536 PaintRecessedWindow(WinWindowFromID(hwnd,
537 EXEC_WARNING2),
538 (HPS) 0, FALSE, FALSE);
539 return 0;
[2]540
[551]541 case UM_RESCAN:
542 WinSendDlgItemMsg(hwnd, EXEC_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
[1004]543 if (!DoItYourselfLoaded)
[551]544 load_cmdlines(TRUE);
545 {
[1004]546 LINKCMDLINES *info;
[2]547
[1004]548 info = DoItYourselfCmdLine;
[551]549 while (info) {
550 WinSendDlgItemMsg(hwnd,
551 EXEC_LISTBOX,
552 LM_INSERTITEM,
[1004]553 MPFROM2SHORT(LIT_END, 0), MPFROMP(info->cmdline));
[551]554 info = info->next;
[2]555 }
[551]556 }
557 return 0;
[2]558
[551]559 case WM_CONTROL:
560 switch (SHORT1FROMMP(mp1)) {
561 case EXEC_SAVECMD:
562 {
563 fSaveBigCmds = (fSaveBigCmds) ? FALSE : TRUE;
564 WinCheckButton(hwnd, EXEC_SAVECMD, fSaveBigCmds);
[1482]565 PrfWriteProfileData(fmprof, appname, "SaveBigCmds", &fSaveBigCmds, sizeof(BOOL));
[551]566 }
[2]567 break;
[551]568 case EXEC_CL:
569 switch (SHORT2FROMMP(mp1)) {
570 case EN_KILLFOCUS:
571 ex = INSTDATA(hwnd);
572 if (!ex || !ex->dropped)
573 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
574 break;
575 }
576 break;
577 case EXEC_LISTBOX:
578 switch (SHORT2FROMMP(mp1)) {
579 case LN_KILLFOCUS:
580 ex = INSTDATA(hwnd);
581 if (ex) {
582 if (ex->dropped)
583 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(EXEC_DROP, 0), MPVOID);
584 }
585 break;
586 case LN_ENTER:
587 {
588 SHORT x;
589 CHAR cmdline[1001];
[2]590
[551]591 x = (SHORT) WinSendDlgItemMsg(hwnd,
592 EXEC_LISTBOX,
593 LM_QUERYSELECTION,
594 MPFROMSHORT(LIT_FIRST), MPVOID);
595 if (x >= 0) {
596 *cmdline = 0;
597 WinSendDlgItemMsg(hwnd,
598 EXEC_LISTBOX,
599 LM_QUERYITEMTEXT,
600 MPFROM2SHORT(x,
601 sizeof(cmdline)),
602 MPFROMP(cmdline));
603 bstrip(cmdline);
604 if (*cmdline) {
605 WinSetDlgItemText(hwnd, EXEC_CL, cmdline);
606 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(EXEC_DROP, 0), MPVOID);
607 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
608 }
609 }
610 }
611 break;
612 }
613 break;
614 }
615 return 0;
[2]616
[551]617 case WM_COMMAND:
618 switch (SHORT1FROMMP(mp1)) {
619 case EXEC2_CLR:
620 free_cmdlines(TRUE);
621 save_cmdlines(TRUE);
622 WinSendDlgItemMsg(hwnd, EXEC_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
623 break;
624 case EXEC2_DEL:
[2]625 {
[551]626 SHORT x;
627 CHAR cmdline[1001];
[2]628
[551]629 x = (SHORT) WinSendDlgItemMsg(hwnd,
630 EXEC_LISTBOX,
631 LM_QUERYSELECTION,
632 MPFROMSHORT(LIT_FIRST), MPVOID);
633 if (x >= 0) {
634 *cmdline = 0;
635 WinSendDlgItemMsg(hwnd,
636 EXEC_LISTBOX,
637 LM_QUERYITEMTEXT,
638 MPFROM2SHORT(x, sizeof(cmdline)),
639 MPFROMP(cmdline));
640 bstrip(cmdline);
641 if (*cmdline) {
642 if (remove_cmdline(cmdline, TRUE) && fSaveBigCmds) {
643 save_cmdlines(TRUE);
644 WinSendDlgItemMsg(hwnd,
645 EXEC_LISTBOX,
646 LM_DELETEITEM, MPFROMSHORT(x), MPVOID);
647 if (x)
648 x--;
649 WinSendDlgItemMsg(hwnd,
650 EXEC_LISTBOX,
651 LM_SELECTITEM,
652 MPFROMSHORT(x), MPFROMSHORT(TRUE));
653 }
654 }
655 }
[2]656 }
[551]657 break;
658 case EXEC_DROP:
659 ex = INSTDATA(hwnd);
660 if (ex) {
661 if (!ex->dropped) {
662 *ex->tempprompt = 0;
663 WinQueryDlgItemText(hwnd,
664 EXEC_WARNING2,
665 sizeof(ex->tempprompt), ex->tempprompt);
[1498]666 WinSetDlgItemText(hwnd, EXEC_WARNING2, (CHAR *) GetPString(IDS_CMDSELCMDHELPTEXT));
[551]667 ex->dropped = TRUE;
668 if ((SHORT) WinSendDlgItemMsg(hwnd,
669 EXEC_LISTBOX,
670 LM_QUERYITEMCOUNT,
671 MPVOID, MPVOID) == 0)
672 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
673 WinShowWindow(WinWindowFromID(hwnd, EXEC_CL), FALSE);
674 WinShowWindow(WinWindowFromID(hwnd, EXEC_WARNING), FALSE);
675 WinShowWindow(WinWindowFromID(hwnd, EXEC_DEFAULT), FALSE);
676 WinShowWindow(WinWindowFromID(hwnd, EXEC_MINIMIZED), FALSE);
677 WinShowWindow(WinWindowFromID(hwnd, EXEC_MAXIMIZED), FALSE);
678 WinShowWindow(WinWindowFromID(hwnd, EXEC_FULLSCREEN), FALSE);
679 WinShowWindow(WinWindowFromID(hwnd, EXEC_INVISIBLE), FALSE);
680 WinShowWindow(WinWindowFromID(hwnd, EXEC_KEEP), FALSE);
681 WinShowWindow(WinWindowFromID(hwnd, EXEC_ENVIRON), FALSE);
682 WinShowWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
683 WinShowWindow(WinWindowFromID(hwnd, IDM_HELP), FALSE);
684 WinShowWindow(WinWindowFromID(hwnd, EXEC_ABORT), FALSE);
685 WinShowWindow(WinWindowFromID(hwnd, DID_CANCEL), FALSE);
686 WinShowWindow(WinWindowFromID(hwnd, EXEC_LISTBOX), TRUE);
687 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, EXEC_LISTBOX));
688 WinSetDlgItemText(hwnd, EXEC_DROP, "^");
689 WinShowWindow(WinWindowFromID(hwnd, EXEC2_DEL), TRUE);
690 }
691 else {
692 ex->dropped = FALSE;
693 WinSetDlgItemText(hwnd, EXEC_WARNING2, ex->tempprompt);
694 WinShowWindow(WinWindowFromID(hwnd, EXEC_LISTBOX), FALSE);
695 WinShowWindow(WinWindowFromID(hwnd, EXEC_CL), TRUE);
696 WinShowWindow(WinWindowFromID(hwnd, EXEC_WARNING), TRUE);
697 WinShowWindow(WinWindowFromID(hwnd, EXEC_DEFAULT), TRUE);
698 WinShowWindow(WinWindowFromID(hwnd, EXEC_MINIMIZED), TRUE);
699 WinShowWindow(WinWindowFromID(hwnd, EXEC_MAXIMIZED), TRUE);
700 WinShowWindow(WinWindowFromID(hwnd, EXEC_FULLSCREEN), TRUE);
701 WinShowWindow(WinWindowFromID(hwnd, EXEC_INVISIBLE), TRUE);
702 WinShowWindow(WinWindowFromID(hwnd, EXEC_KEEP), TRUE);
703 WinShowWindow(WinWindowFromID(hwnd, EXEC_ENVIRON), TRUE);
704 WinShowWindow(WinWindowFromID(hwnd, DID_OK), TRUE);
705 WinShowWindow(WinWindowFromID(hwnd, IDM_HELP), TRUE);
706 WinShowWindow(WinWindowFromID(hwnd, EXEC_ABORT), TRUE);
707 WinShowWindow(WinWindowFromID(hwnd, DID_CANCEL), TRUE);
708 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, EXEC_CL));
709 WinSetDlgItemText(hwnd, EXEC_DROP, "v");
710 WinShowWindow(WinWindowFromID(hwnd, EXEC2_DEL), FALSE);
711 }
[2]712 }
[551]713 break;
[2]714
[551]715 case DID_OK:
716 ex = INSTDATA(hwnd);
717 WinQueryDlgItemText(hwnd, EXEC_CL, 1000, ex->commandline);
[1488]718 ex->flags = CheckExecutibleFlags(hwnd, 2);
719 /*ex->flags = 0;
[551]720 if (WinQueryButtonCheckstate(hwnd, EXEC_MINIMIZED))
721 ex->flags |= MINIMIZED;
722 if (WinQueryButtonCheckstate(hwnd, EXEC_MAXIMIZED))
723 ex->flags |= MAXIMIZED;
724 if (WinQueryButtonCheckstate(hwnd, EXEC_FULLSCREEN))
725 ex->flags |= FULLSCREEN;
726 else
727 ex->flags |= WINDOWED;
728 if (WinQueryButtonCheckstate(hwnd, EXEC_INVISIBLE))
729 ex->flags |= INVISIBLE;
730 if (WinQueryButtonCheckstate(hwnd, EXEC_KEEP))
731 ex->flags |= SEPARATEKEEP;
732 else
[1488]733 ex->flags |= SEPARATE;*/
[551]734 strset(ex->environment, 0);
735 WinQueryDlgItemText(hwnd, EXEC_ENVIRON, 1000, ex->environment);
736 if (add_cmdline(ex->commandline, TRUE) && fSaveBigCmds)
737 save_cmdlines(TRUE);
738 WinDismissDlg(hwnd, 1);
739 break;
[2]740
[551]741 case DID_CANCEL:
742 WinDismissDlg(hwnd, 0);
743 break;
[2]744
[551]745 case EXEC_ABORT:
746 WinDismissDlg(hwnd, 2);
747 break;
[2]748
[551]749 case IDM_HELP:
750 if (hwndHelp)
751 WinSendMsg(hwndHelp,
752 HM_DISPLAY_HELP,
753 MPFROM2SHORT(HELP_CMDLINE, 0), MPFROMSHORT(HM_RESOURCEID));
754 break;
755 }
756 return 0;
[2]757
[551]758 case WM_DESTROY:
759 break;
[2]760 }
[551]761 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]762}
763
[551]764MRESULT EXPENTRY CmdLine2DlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[345]765{
[551]766 switch (msg) {
767 case WM_INITDLG:
768 if (!mp2) {
769 WinDismissDlg(hwnd, 0);
[2]770 break;
[551]771 }
[574]772 WinSetWindowPtr(hwnd, QWL_USER, mp2);
[551]773 {
774 int x;
775 USHORT ids[] = { IDM_HELP, EXEC2_CLR, EXEC2_DEL, EXEC2_KEEP, EXEC2_SAVE,
776 EXEC2_OPEN, EXEC2_CLOSE, EXEC2_FILTER, DID_CANCEL, 0
777 };
[2]778
[551]779 WinSetWindowPtr(WinWindowFromID(hwnd, EXEC2_LISTBOX),
780 QWL_USER,
781 (PVOID) WinSubclassWindow(WinWindowFromID(hwnd,
782 EXEC2_LISTBOX),
783 (PFNWP) CmdListSubProc));
784 for (x = 0; ids[x]; x++)
785 WinSetWindowPtr(WinWindowFromID(hwnd, ids[x]),
786 QWL_USER,
787 (PVOID) WinSubclassWindow(WinWindowFromID(hwnd,
788 ids[x]),
789 (PFNWP) CmdBtnSubProc));
790 }
791 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
792 break;
[2]793
[551]794 case UM_RESCAN:
795 WinSendDlgItemMsg(hwnd, EXEC2_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
[1004]796 if (!MiniLoaded)
[551]797 load_cmdlines(FALSE);
798 {
[1004]799 LINKCMDLINES *info;
[551]800
[1004]801 info = MiniCmdLine;
[551]802 while (info) {
803 WinSendDlgItemMsg(hwnd, EXEC2_LISTBOX, LM_INSERTITEM,
[1004]804 MPFROM2SHORT(LIT_END, 0), MPFROMP(info->cmdline));
[551]805 info = info->next;
[2]806 }
[551]807 }
808 return 0;
[2]809
[551]810 case WM_CONTROL:
811 switch (SHORT1FROMMP(mp1)) {
812 case EXEC2_LISTBOX:
813 switch (SHORT2FROMMP(mp1)) {
814 case LN_ENTER:
815 {
816 SHORT x;
[574]817 CHAR *cmdline = WinQueryWindowPtr(hwnd, QWL_USER);
[2]818
[551]819 x = (SHORT) WinSendDlgItemMsg(hwnd, EXEC2_LISTBOX,
820 LM_QUERYSELECTION,
821 MPFROMSHORT(LIT_FIRST), MPVOID);
822 if (x >= 0) {
823 *cmdline = 0;
824 WinSendDlgItemMsg(hwnd, EXEC2_LISTBOX, LM_QUERYITEMTEXT,
825 MPFROM2SHORT(x, 1000), MPFROMP(cmdline));
826 bstrip(cmdline);
827 if (*cmdline)
828 WinDismissDlg(hwnd, 1);
829 }
830 }
831 break;
[2]832 }
[551]833 break;
834 }
835 return 0;
[2]836
[551]837 case WM_COMMAND:
838 switch (SHORT1FROMMP(mp1)) {
839 case EXEC2_KEEP:
840 case EXEC2_SAVE:
841 case EXEC2_FILTER:
842 case EXEC2_CLOSE:
843 case EXEC2_OPEN:
844 case IDM_HELP:
845 {
[574]846 char *cmdline = WinQueryWindowPtr(hwnd, QWL_USER);
[551]847 ULONG strid = 0;
[2]848
[551]849 if (cmdline) {
850 switch (SHORT1FROMMP(mp1)) {
851 case EXEC2_OPEN:
852 strid = IDS_OPENCMDTEXT;
853 break;
854 case EXEC2_CLOSE:
855 strid = IDS_CLOSECMDTEXT;
856 break;
857 case EXEC2_FILTER:
858 strid = IDS_FILTERCMDTEXT;
859 break;
860 case EXEC2_SAVE:
861 strid = (fSaveMiniCmds) ? IDS_NOSAVECMDTEXT : IDS_SAVECMDTEXT;
862 break;
863 case EXEC2_KEEP:
864 strid = (fKeepCmdLine) ? IDS_NOKEEPCMDTEXT : IDS_KEEPCMDTEXT;
865 break;
866 case IDM_HELP:
867 strid = IDS_HELPCMDTEXT;
868 break;
869 }
870 if (strid) {
871 strcpy(cmdline, GetPString(strid));
872 WinDismissDlg(hwnd, 1);
873 }
874 }
875 break;
876 }
877 case EXEC2_CLR:
878 free_cmdlines(FALSE);
879 save_cmdlines(FALSE);
880 WinSendDlgItemMsg(hwnd, EXEC2_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
881 break;
882 case EXEC2_DEL:
883 {
884 SHORT x;
885 CHAR cmdline[1001];
[2]886
[551]887 x = (SHORT) WinSendDlgItemMsg(hwnd,
888 EXEC2_LISTBOX,
889 LM_QUERYSELECTION,
890 MPFROMSHORT(LIT_FIRST), MPVOID);
891 if (x >= 0) {
892 *cmdline = 0;
893 WinSendDlgItemMsg(hwnd,
894 EXEC2_LISTBOX,
895 LM_QUERYITEMTEXT,
896 MPFROM2SHORT(x, sizeof(cmdline)),
897 MPFROMP(cmdline));
898 bstrip(cmdline);
899 if (*cmdline) {
900 if (remove_cmdline(cmdline, FALSE) && fSaveMiniCmds) {
901 save_cmdlines(FALSE);
902 WinSendDlgItemMsg(hwnd,
903 EXEC2_LISTBOX,
904 LM_DELETEITEM, MPFROMSHORT(x), MPVOID);
905 if (x)
906 x--;
907 WinSendDlgItemMsg(hwnd,
908 EXEC2_LISTBOX,
909 LM_SELECTITEM,
910 MPFROMSHORT(x), MPFROMSHORT(TRUE));
911 }
912 }
913 }
[2]914 }
[551]915 break;
916 case DID_CANCEL:
917 WinDismissDlg(hwnd, 0);
918 break;
919 }
920 return 0;
[2]921
[551]922 case WM_DESTROY:
923 break;
[2]924 }
[551]925 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]926}
[793]927
928#pragma alloc_text(CMDLINE1,CmdLineDlgProc,CmdListSubProc,CmdLine2DlgProc,CmdBtnSubProc)
929#pragma alloc_text(CMDLINE2,save_cmdlines,load_cmdlines,add_cmdline,remove_cmdline,free_cmdlines)
Note: See TracBrowser for help on using the repository browser.