source: trunk/dll/command.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: 24.5 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 "tools.h"
14
15typedef struct {
16 CHAR cl[1001];
17 INT flags;
18 CHAR title[34];
19} COMMAND;
20
21#pragma data_seg(DATA1)
22#pragma alloc_text(COMMAND,command_title,free_commands,add_command,kill_command)
23#pragma alloc_text(COMMAND,CommandDlgProc,EditCommands,ReOrderProc,CommandTextProc)
24
25
26MRESULT EXPENTRY CommandTextProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
27
28 PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0);
29 static BOOL emphasized = FALSE;
30
31 switch(msg) {
32 case DM_DRAGOVER:
33 if(!emphasized) {
34 emphasized = TRUE;
35 DrawTargetEmphasis(hwnd,emphasized);
36 }
37 if(AcceptOneDrop(mp1,mp2))
38 return MRFROM2SHORT(DOR_DROP,
39 DO_MOVE);
40 return MRFROM2SHORT(DOR_NEVERDROP,0);
41
42 case DM_DRAGLEAVE:
43 if(emphasized) {
44 emphasized = FALSE;
45 DrawTargetEmphasis(hwnd,emphasized);
46 }
47 break;
48
49 case DM_DROPHELP:
50 DropHelp(mp1,
51 mp2,
52 hwnd,
53 GetPString(IDS_DROPCMDHELPTEXT));
54 return 0;
55
56 case DM_DROP:
57 {
58 char szFrom[CCHMAXPATH + 5];
59
60 if(emphasized) {
61 emphasized = FALSE;
62 DrawTargetEmphasis(hwnd,emphasized);
63 }
64 if(GetOneDrop(mp1,mp2,szFrom,CCHMAXPATH)) {
65 strcat(szFrom," %a");
66 WinSetWindowText(hwnd,szFrom);
67 }
68 }
69 return 0;
70 }
71 return (oldproc) ? oldproc(hwnd,msg,mp1,mp2) :
72 WinDefWindowProc(hwnd,msg,mp1,mp2);
73}
74
75
76MRESULT EXPENTRY ReOrderProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
77
78 switch(msg) {
79 case WM_INITDLG:
80 if(!cmdhead) {
81 WinDismissDlg(hwnd,0);
82 break;
83 }
84 {
85 LINKCMDS *info;
86 SHORT x;
87
88 info = cmdhead;
89 while(info) {
90 x = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,LM_INSERTITEM,
91 MPFROMSHORT(LIT_END),
92 MPFROMP(info->title));
93 if(x >= 0)
94 WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,LM_SETITEMHANDLE,
95 MPFROMSHORT(x),MPFROMP(info));
96 else {
97 DosBeep(50,100);
98 WinDismissDlg(hwnd,0);
99 }
100 info = info->next;
101 }
102 }
103 break;
104
105 case WM_CONTROL:
106 return 0;
107
108 case WM_COMMAND:
109 switch(SHORT1FROMMP(mp1)) {
110 case DID_CANCEL:
111 WinDismissDlg(hwnd,0);
112 break;
113
114 case DID_OK:
115 {
116 LINKCMDS *temphead = NULL,*info,*last = NULL,*temptail = NULL;
117 SHORT sSelect,numitems;
118
119 sSelect = 0;
120 numitems = (SHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
121 LM_QUERYITEMCOUNT,
122 MPVOID,MPVOID);
123 while(numitems) {
124 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
125 LM_QUERYITEMHANDLE,
126 MPFROMSHORT(sSelect++),
127 MPVOID);
128 if(info) {
129 if(!temphead) {
130 temphead = info;
131 info->prev = NULL;
132 }
133 else {
134 last->next = info;
135 info->prev = last;
136 }
137 temptail = info;
138 last = info;
139 info->next = NULL;
140 }
141 numitems--;
142 }
143 sSelect = 0;
144 numitems = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
145 LM_QUERYITEMCOUNT,
146 MPVOID,MPVOID);
147 while(numitems) {
148 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
149 LM_QUERYITEMHANDLE,
150 MPFROMSHORT(sSelect++),
151 MPVOID);
152 if(info) {
153 if(!temphead) {
154 temphead = info;
155 info->prev = NULL;
156 }
157 else {
158 last->next = info;
159 info->prev = last;
160 }
161 temptail = info;
162 last = info;
163 info->next = NULL;
164 }
165 numitems--;
166 }
167 cmdhead = temphead;
168 cmdtail = temptail;
169 }
170 WinDismissDlg(hwnd,1);
171 break;
172
173 case IDM_HELP:
174 if(hwndHelp)
175 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
176 MPFROM2SHORT(HELP_REORDERCOMMANDS,0),
177 MPFROMSHORT(HM_RESOURCEID));
178 break;
179
180 case RE_ADD:
181 {
182 SHORT sSelect,x;
183 LINKCMDS *info;
184
185 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
186 LM_QUERYSELECTION,
187 MPFROMSHORT(LIT_FIRST),
188 MPVOID);
189 while(sSelect >= 0) {
190 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
191 LM_QUERYITEMHANDLE,
192 MPFROMSHORT(sSelect),
193 MPVOID);
194 if(info) {
195 x = (SHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
196 LM_INSERTITEM,
197 MPFROM2SHORT(LIT_END,0),
198 MPFROMP(info->title));
199 if(x >= 0) {
200 WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
201 LM_SETITEMHANDLE,
202 MPFROMSHORT(x),
203 MPFROMP(info));
204 WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,LM_DELETEITEM,
205 MPFROMSHORT(sSelect),MPVOID);
206 }
207 }
208 else
209 WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,LM_SELECTITEM,
210 MPFROMSHORT(sSelect),MPFROMSHORT(FALSE));
211 sSelect = (USHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
212 LM_QUERYSELECTION,
213 MPFROMSHORT(LIT_FIRST),
214 MPVOID);
215 }
216 }
217 break;
218
219 case RE_REMOVE:
220 {
221 SHORT sSelect,x;
222 LINKCMDS *info;
223
224 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
225 LM_QUERYSELECTION,
226 MPFROMSHORT(LIT_FIRST),
227 MPVOID);
228 while(sSelect >= 0) {
229 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
230 LM_QUERYITEMHANDLE,
231 MPFROMSHORT(sSelect),
232 MPVOID);
233 if(info) {
234 x = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
235 LM_INSERTITEM,
236 MPFROM2SHORT(LIT_END,0),
237 MPFROMP(info->title));
238 if(x >= 0) {
239 WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
240 LM_SETITEMHANDLE,
241 MPFROMSHORT(x),
242 MPFROMP(info));
243 WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,LM_DELETEITEM,
244 MPFROMSHORT(sSelect),MPVOID);
245 }
246 }
247 else
248 WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,LM_SELECTITEM,
249 MPFROMSHORT(sSelect),MPFROMSHORT(FALSE));
250 sSelect = (USHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
251 LM_QUERYSELECTION,
252 MPFROMSHORT(LIT_FIRST),
253 MPVOID);
254 }
255 }
256 break;
257 }
258 return 0;
259 }
260 return WinDefDlgProc(hwnd,msg,mp1,mp2);
261}
262
263
264CHAR *command_title (INT cx) {
265
266 static CHAR duh[] = "???";
267 LINKCMDS *info;
268 INT x = 0;
269
270 if(!cmdloaded)
271 load_commands();
272 info = cmdhead;
273 while(info) {
274 if(x == cx)
275 return info->title;
276 info = info->next;
277 }
278 return duh;
279}
280
281
282VOID free_commands (VOID) {
283
284 LINKCMDS *info,*next;
285
286 info = cmdhead;
287 while(info) {
288 next = info->next;
289 free(info->title);
290 free(info->cl);
291 free(info);
292 info = next;
293 }
294 cmdhead = cmdtail = NULL;
295}
296
297
298VOID load_commands (VOID) {
299
300 FILE *fp;
301 LINKCMDS *info;
302 CHAR cl[1024];
303 CHAR title[100];
304 CHAR flags[72];
305
306 if(cmdhead)
307 free_commands();
308 cmdloaded = TRUE;
309 save_dir2(cl);
310 if(cl[strlen(cl) - 1] != '\\')
311 strcat(cl,"\\");
312 strcat(cl,"COMMANDS.DAT");
313 fp = _fsopen(cl,"r",SH_DENYWR);
314 if(fp) {
315 while(!feof(fp)) {
316 if(!fgets(title,100,fp))
317 break;
318 title[34] = 0;
319 stripcr(title);
320 lstrip(rstrip(title));
321 if(!*title || *title == ';')
322 continue;
323 if(!fgets(cl,1024,fp) ||
324 !fgets(flags,72,fp))
325 break; /* error! */
326 cl[1000] = 0;
327 flags[34] = 0;
328 stripcr(cl);
329 stripcr(flags);
330 lstrip(rstrip(cl));
331 lstrip(rstrip(flags));
332 if(!*cl)
333 continue;
334 info = malloc(sizeof(LINKCMDS));
335 if(info) {
336 memset(info,0,sizeof(LINKCMDS));
337 info->cl = strdup(cl);
338 info->title = strdup(title);
339 info->flags = atol(flags);
340 if(!info->cl || !info->title) {
341 if(info->cl)
342 free(info->cl);
343 if(info->title)
344 free(info->title);
345 free(info);
346 break;
347 }
348 if(!cmdhead)
349 cmdhead = info;
350 else {
351 cmdtail->next = info;
352 info->prev = cmdtail;
353 }
354 cmdtail = info;
355 }
356 }
357 fclose(fp);
358 }
359}
360
361
362VOID save_commands (VOID) {
363
364 LINKCMDS *info;
365 FILE *fp;
366 CHAR s[CCHMAXPATH + 14];
367
368 if(!cmdloaded || !cmdhead)
369 return;
370 info = cmdhead;
371 save_dir2(s);
372 if(s[strlen(s) - 1] != '\\')
373 strcat(s,"\\");
374 strcat(s,"COMMANDS.DAT");
375 fp = fopen(s,"w");
376 if(fp) {
377 fputs(GetPString(IDS_COMMANDFILETEXT),fp);
378 info = cmdhead;
379 while(info) {
380 fprintf(fp,
381 ";\n%0.34s\n%0.1000s\n%lu\n",
382 info->title,
383 info->cl,
384 info->flags);
385 info = info->next;
386 }
387 fclose(fp);
388 }
389}
390
391
392LINKCMDS * add_command (COMMAND *addme) {
393
394 LINKCMDS *info;
395
396 if(addme && *addme->cl && *addme->title) {
397 info = cmdhead;
398 while(info) {
399 if(!stricmp(info->title,addme->title))
400 return NULL;
401 info = info->next;
402 }
403 if(!info) {
404 info = malloc(sizeof(LINKCMDS));
405 if(info) {
406 memset(info,0,sizeof(LINKCMDS));
407 info->cl = strdup(addme->cl);
408 info->title = strdup(addme->title);
409 if(addme->flags)
410 info->flags = addme->flags;
411 if(!info->cl || !info->title) {
412 if(info->cl)
413 free(info->cl);
414 if(info->title)
415 free(info->title);
416 free(info);
417 }
418 else {
419 if(!cmdhead) /* only item in list */
420 cmdhead = cmdtail = info;
421 else { /* place at tail */
422 cmdtail->next = info;
423 info->prev = cmdtail;
424 cmdtail = info;
425 }
426 return info;
427 }
428 }
429 }
430 }
431 return NULL;
432}
433
434
435BOOL kill_command (CHAR *killme) {
436
437 LINKCMDS *info;
438
439 if(killme && *killme) {
440 info = cmdhead;
441 while(info) {
442 if(!stricmp(info->title,killme)) {
443 if(info == cmdhead) {
444 cmdhead = info->next;
445 if(info == cmdtail)
446 cmdtail = info->prev;
447 }
448 else {
449 if(info->next)
450 (info->next)->prev = info->prev;
451 if(info->prev)
452 (info->prev)->next = info->next;
453 if(info == cmdtail)
454 cmdtail = info->prev;
455 }
456 free(info->cl);
457 free(info->title);
458 free(info);
459 return TRUE;
460 }
461 info = info->next;
462 }
463 }
464 return FALSE;
465}
466
467
468MRESULT EXPENTRY CommandDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) {
469
470 SHORT x;
471 LINKCMDS *info;
472
473 switch(msg) {
474 case WM_INITDLG:
475 WinSendDlgItemMsg(hwnd,CMD_LISTBOX,LM_DELETEALL,MPVOID,MPVOID);
476 WinSendDlgItemMsg(hwnd,CMD_CL,EM_SETTEXTLIMIT,
477 MPFROM2SHORT(1000,0),MPVOID);
478 WinSendDlgItemMsg(hwnd,CMD_TITLE,EM_SETTEXTLIMIT,
479 MPFROM2SHORT(33,0),MPVOID);
480 WinSetDlgItemText(hwnd,CMD_CL,NullStr);
481 WinSetDlgItemText(hwnd,CMD_TITLE,NullStr);
482 WinCheckButton(hwnd,CMD_DEFAULT,TRUE);
483 WinCheckButton(hwnd,CMD_PROMPT,FALSE);
484 WinCheckButton(hwnd,CMD_ONCE,FALSE);
485 info = cmdhead;
486 while(info) {
487 x = (SHORT)WinSendDlgItemMsg(hwnd,CMD_LISTBOX,LM_INSERTITEM,
488 MPFROM2SHORT(LIT_END,0),
489 MPFROMP(info->title));
490 if(x >= 0)
491 WinSendDlgItemMsg(hwnd,CMD_LISTBOX,LM_SETITEMHANDLE,
492 MPFROMSHORT(x),MPFROMP(info));
493 info = info->next;
494 }
495 WinSendDlgItemMsg(hwnd,CMD_LISTBOX,LM_SELECTITEM,
496 MPFROMSHORT(0),MPFROMSHORT(TRUE));
497 {
498 PFNWP oldproc;
499
500 oldproc = WinSubclassWindow(WinWindowFromID(hwnd,CMD_CL),
501 (PFNWP)CommandTextProc);
502 if(oldproc)
503 WinSetWindowPtr(WinWindowFromID(hwnd,CMD_CL),0,(PVOID)oldproc);
504 }
505 break;
506
507 case WM_CONTROL:
508 if(SHORT1FROMMP(mp1) == CMD_LISTBOX) {
509 switch(SHORT2FROMMP(mp1)) {
510 case LN_ENTER:
511 case LN_SELECT:
512 x = (SHORT)WinSendDlgItemMsg(hwnd,CMD_LISTBOX,
513 LM_QUERYSELECTION,
514 MPFROMSHORT(LIT_FIRST),
515 MPVOID);
516 if(x >= 0) {
517 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,CMD_LISTBOX,
518 LM_QUERYITEMHANDLE,
519 MPFROMSHORT(x),
520 MPVOID);
521 if(!info) {
522 DosBeep(50,100);
523 break;
524 }
525 WinSetDlgItemText(hwnd,CMD_CL,info->cl);
526 if(!(info->flags & 1023))
527 WinCheckButton(hwnd,CMD_DEFAULT,TRUE);
528 else {
529 if(info->flags & FULLSCREEN)
530 WinCheckButton(hwnd,CMD_FULLSCREEN,TRUE);
531 else if(info->flags & MINIMIZED)
532 WinCheckButton(hwnd,CMD_MINIMIZED,TRUE);
533 else if(info->flags & MAXIMIZED)
534 WinCheckButton(hwnd,CMD_MAXIMIZED,TRUE);
535 else if(info->flags & INVISIBLE)
536 WinCheckButton(hwnd,CMD_INVISIBLE,TRUE);
537 }
538 WinCheckButton(hwnd,CMD_PROMPT,((info->flags & PROMPT) != 0));
539 WinCheckButton(hwnd,CMD_KEEP,((info->flags & KEEP) != 0));
540 WinCheckButton(hwnd,CMD_ONCE,((info->flags & ONCE) != 0));
541 WinSetDlgItemText(hwnd,CMD_TITLE,info->title);
542 {
543 CHAR env[1002];
544 ULONG size;
545
546 *env = 0;
547 size = sizeof(env) - 1;
548 if(PrfQueryProfileData(fmprof,FM3Str,info->cl,env,&size) &&
549 *env)
550 WinSetDlgItemText(hwnd,CMD_ENVIRON,env);
551 else
552 WinSetDlgItemText(hwnd,CMD_ENVIRON,NullStr);
553 }
554 }
555 break;
556 }
557 }
558 return 0;
559
560 case WM_COMMAND:
561 switch(SHORT1FROMMP(mp1)) {
562 case CMD_FIND:
563 {
564 CHAR filename[CCHMAXPATH + 9];
565
566 *filename = 0;
567 if(insert_filename(hwnd,filename,2,FALSE) && *filename) {
568 strcat(filename," %a");
569 WinSetDlgItemText(hwnd,CMD_CL,filename);
570 }
571 }
572 break;
573
574 case CMD_REORDER:
575 if(!cmdhead || !cmdhead->next) {
576 DosBeep(250,100);
577 break;
578 }
579 if(WinDlgBox(HWND_DESKTOP,hwnd,ReOrderProc,FM3ModHandle,
580 RE_FRAME,MPVOID)) {
581 WinSendDlgItemMsg(hwnd,
582 CMD_LISTBOX,
583 LM_DELETEALL,
584 MPVOID,
585 MPVOID);
586 WinSetDlgItemText(hwnd,
587 CMD_CL,
588 NullStr);
589 WinSetDlgItemText(hwnd,
590 CMD_TITLE,
591 NullStr);
592 info = cmdhead;
593 while(info) {
594 x = (SHORT)WinSendDlgItemMsg(hwnd,
595 CMD_LISTBOX,
596 LM_INSERTITEM,
597 MPFROM2SHORT(LIT_END,0),
598 MPFROMP(info->title));
599 if(x >= 0)
600 WinSendDlgItemMsg(hwnd,
601 CMD_LISTBOX,
602 LM_SETITEMHANDLE,
603 MPFROMSHORT(x),
604 MPFROMP(info));
605 info = info->next;
606 }
607 WinSendDlgItemMsg(hwnd,
608 CMD_LISTBOX,
609 LM_SELECTITEM,
610 MPFROMSHORT(0),
611 MPFROMSHORT(TRUE));
612 WinCheckButton(hwnd,
613 CMD_DEFAULT,
614 TRUE);
615 WinCheckButton(hwnd,
616 CMD_PROMPT,
617 FALSE);
618 WinCheckButton(hwnd,
619 CMD_ONCE,
620 FALSE);
621 save_commands();
622 }
623 break;
624
625 case DID_OK:
626 x = (SHORT)WinSendDlgItemMsg(hwnd,
627 CMD_LISTBOX,
628 LM_QUERYSELECTION,
629 MPFROMSHORT(LIT_FIRST),
630 MPVOID);
631 WinDismissDlg(hwnd,0);
632 break;
633
634 case DID_CANCEL:
635 WinDismissDlg(hwnd,0);
636 break;
637
638 case IDM_HELP:
639 if(hwndHelp)
640 WinSendMsg(hwndHelp,
641 HM_DISPLAY_HELP,
642 MPFROM2SHORT(HELP_COMMAND,0),
643 MPFROMSHORT(HM_RESOURCEID));
644 break;
645
646 case CMD_ADD:
647 {
648 COMMAND temp;
649
650 memset(&temp,0,sizeof(COMMAND));
651 WinQueryDlgItemText(hwnd,
652 CMD_CL,
653 sizeof(temp.cl),
654 temp.cl);
655 lstrip(rstrip(temp.cl));
656 WinQueryDlgItemText(hwnd,CMD_TITLE,sizeof(temp.title),temp.title);
657 if(WinQueryButtonCheckstate(hwnd,CMD_DEFAULT))
658 temp.flags = 0;
659 else if(WinQueryButtonCheckstate(hwnd,CMD_FULLSCREEN))
660 temp.flags = FULLSCREEN;
661 else if(WinQueryButtonCheckstate(hwnd,CMD_MINIMIZED))
662 temp.flags = MINIMIZED;
663 else if(WinQueryButtonCheckstate(hwnd,CMD_MAXIMIZED))
664 temp.flags = MAXIMIZED;
665 else if(WinQueryButtonCheckstate(hwnd,CMD_INVISIBLE))
666 temp.flags = INVISIBLE;
667 if(WinQueryButtonCheckstate(hwnd,CMD_KEEP))
668 temp.flags |= KEEP;
669 if(WinQueryButtonCheckstate(hwnd,CMD_PROMPT))
670 temp.flags |= PROMPT;
671 if(WinQueryButtonCheckstate(hwnd,CMD_ONCE))
672 temp.flags |= ONCE;
673 info = add_command(&temp);
674 if(info) {
675 {
676 CHAR env[1002];
677
678 *env = 0;
679 WinQueryDlgItemText(hwnd,
680 CMD_ENVIRON,
681 1000,
682 env);
683 stripcr(env);
684 lstrip(rstrip(env));
685 if(*env)
686 PrfWriteProfileString(fmprof,
687 FM3Str,
688 temp.cl,
689 env);
690 }
691 x = (SHORT)WinSendDlgItemMsg(hwnd,
692 CMD_LISTBOX,
693 LM_INSERTITEM,
694 MPFROM2SHORT(LIT_END,0),
695 MPFROMP(temp.title));
696 if(x >= 0) {
697 WinSendDlgItemMsg(hwnd,
698 CMD_LISTBOX,
699 LM_SETITEMHANDLE,
700 MPFROMSHORT(x),
701 MPFROMP(info));
702 WinSendDlgItemMsg(hwnd,
703 CMD_LISTBOX,
704 LM_SELECTITEM,
705 MPFROMSHORT(x),
706 MPFROMSHORT(TRUE));
707 save_commands();
708 }
709 }
710 else
711 DosBeep(50,200);
712 }
713 break;
714
715 case CMD_DELETE:
716 {
717 CHAR temp[34];
718
719 WinQueryDlgItemText(hwnd,CMD_TITLE,34,temp);
720 lstrip(rstrip(temp));
721 if(kill_command(temp)) {
722 x = (SHORT)WinSendDlgItemMsg(hwnd,
723 CMD_LISTBOX,
724 LM_QUERYSELECTION,
725 MPFROMSHORT(LIT_FIRST),
726 MPVOID);
727 if(x >= 0) {
728 WinSendDlgItemMsg(hwnd,
729 CMD_LISTBOX,
730 LM_DELETEITEM,
731 MPFROMSHORT(x),
732 MPVOID);
733 WinSendDlgItemMsg(hwnd,
734 CMD_LISTBOX,
735 LM_SELECTITEM,
736 MPFROMSHORT(LIT_NONE),
737 MPFROMSHORT(FALSE));
738 }
739 save_commands();
740 }
741 else
742 DosBeep(50,200);
743 }
744 break;
745 }
746 return 0;
747 }
748 return WinDefDlgProc(hwnd,msg,mp1,mp2);
749}
750
751
752VOID RunCommand (HWND hwnd,INT cx) {
753
754 static CHAR stop = 0;
755 INT x;
756 CHAR **list;
757 LINKCMDS *info;
758
759 list = BuildList(hwnd);
760 if(!list || !list[0])
761 return;
762 x = 0;
763 info = cmdhead;
764 while(info) {
765 x++;
766 if(x == cx)
767 break;
768 info = info->next;
769 }
770 if(info) {
771
772 INT flags;
773 BOOL dieafter = FALSE;
774
775 x--;
776 flags = info->flags;
777 if(!(flags & FULLSCREEN))
778 flags |= WINDOWED;
779 if(flags & KEEP)
780 flags |= SEPARATEKEEP;
781 else
782 flags |= SEPARATE;
783 flags &= (~KEEP);
784 if(flags & DIEAFTER)
785 dieafter = TRUE;
786 flags &= (~DIEAFTER);
787 if((flags & ONCE) && list && list[0]) {
788
789 CHAR *fakelist[2];
790 INT cntr;
791
792 flags &= (~ONCE);
793 for(cntr = 0;list[cntr];cntr++) {
794 *fakelist = list[cntr];
795 fakelist[1] = NULL;
796 ExecOnList(hwnd,
797 info->cl,
798 flags,
799 NULL,
800 fakelist,
801 GetPString(IDS_EXECCMDTITLETEXT));
802 }
803 }
804 else
805 ExecOnList(hwnd,
806 info->cl,
807 flags,
808 NULL,
809 list,
810 GetPString(IDS_EXECCMDTITLETEXT));
811 }
812 FreeList(list);
813 DosPostEventSem(CompactSem);
814}
815
816
817VOID EditCommands (HWND hwnd) {
818
819 static CHAR stop = 0;
820
821 if(stop)
822 return;
823 stop++;
824 if(!cmdloaded)
825 load_commands();
826 WinDlgBox(HWND_DESKTOP,
827 hwnd,
828 CommandDlgProc,
829 FM3ModHandle,
830 CMD_FRAME,
831 MPFROMP(&hwnd));
832 stop = 0;
833}
834
Note: See TracBrowser for help on using the repository browser.