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