source: trunk/dll/cmdline.c@ 186

Last change on this file since 186 was 186, checked in by root, 20 years ago

Use QWL_USER

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