source: trunk/dll/cmdline.c@ 2

Last change on this file since 2 was 2, checked in by root, 23 years ago

Initial revision

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