source: trunk/dll/cmdline.c@ 1505

Last change on this file since 1505 was 1505, checked in by Gregg Young, 15 years ago

Remove unnecessary type casts; minor formating cleanup.

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