source: trunk/dll/cmdline.c@ 345

Last change on this file since 345 was 345, checked in by root, 19 years ago

Check more run time errors

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