source: trunk/dll/cmdline.c@ 551

Last change on this file since 551 was 551, checked in by Gregg Young, 18 years ago

Indentation cleanup

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