source: trunk/dll/command.c@ 347

Last change on this file since 347 was 347, checked in by root, 19 years ago

Use Runtime_Error

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