source: trunk/dll/cmdline.c@ 123

Last change on this file since 123 was 123, checked in by root, 21 years ago

Rework lstrip/rstrip usage

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