source: trunk/dll/cmdline.c@ 574

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

Use QWL_USER; Replace doesn't move the command and Okay on cmd dialog removed error on unchanged command

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