source: trunk/dll/command.c@ 204

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

Drop unused code

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