source: trunk/dll/command.c@ 445

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

Better can't add message

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 18.4 KB
Line 
1
2/***********************************************************************
3
4 $Id: command.c 445 2006-08-24 04:51:20Z 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 29 Jul 06 SHL Use xfgets_bstripcr
15 15 Aug 06 SHL Better can't add message
16
17***********************************************************************/
18
19#define INCL_DOS
20#define INCL_WIN
21#include <os2.h>
22
23#include <stdio.h>
24#include <stdlib.h>
25#include <string.h>
26#include <ctype.h>
27#include <share.h>
28
29#include "fm3dll.h"
30#include "fm3dlg.h"
31#include "fm3str.h"
32#include "tools.h"
33
34typedef struct {
35 CHAR cl[1001];
36 INT flags;
37 CHAR title[34];
38} COMMAND;
39
40#pragma data_seg(DATA1)
41
42static PSZ pszSrcFile = __FILE__;
43
44#pragma alloc_text(COMMAND,command_title,free_commands,add_command,kill_command)
45#pragma alloc_text(COMMAND,CommandDlgProc,EditCommands,ReOrderProc,CommandTextProc)
46
47
48MRESULT EXPENTRY CommandTextProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
49{
50 PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0);
51 static BOOL emphasized = FALSE;
52
53 switch(msg) {
54 case DM_DRAGOVER:
55 if(!emphasized) {
56 emphasized = TRUE;
57 DrawTargetEmphasis(hwnd,emphasized);
58 }
59 if(AcceptOneDrop(mp1,mp2))
60 return MRFROM2SHORT(DOR_DROP,
61 DO_MOVE);
62 return MRFROM2SHORT(DOR_NEVERDROP,0);
63
64 case DM_DRAGLEAVE:
65 if(emphasized) {
66 emphasized = FALSE;
67 DrawTargetEmphasis(hwnd,emphasized);
68 }
69 break;
70
71 case DM_DROPHELP:
72 DropHelp(mp1,
73 mp2,
74 hwnd,
75 GetPString(IDS_DROPCMDHELPTEXT));
76 return 0;
77
78 case DM_DROP:
79 {
80 char szFrom[CCHMAXPATH + 5];
81
82 if(emphasized) {
83 emphasized = FALSE;
84 DrawTargetEmphasis(hwnd,emphasized);
85 }
86 if(GetOneDrop(mp1,mp2,szFrom,CCHMAXPATH)) {
87 strcat(szFrom," %a");
88 WinSetWindowText(hwnd,szFrom);
89 }
90 }
91 return 0;
92 }
93 return (oldproc) ? oldproc(hwnd,msg,mp1,mp2) :
94 WinDefWindowProc(hwnd,msg,mp1,mp2);
95}
96
97
98MRESULT EXPENTRY ReOrderProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
99{
100 switch(msg) {
101 case WM_INITDLG:
102 if(!cmdhead) {
103 WinDismissDlg(hwnd,0);
104 break;
105 }
106 {
107 LINKCMDS *info;
108 SHORT x;
109
110 info = cmdhead;
111 while(info) {
112 x = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,LM_INSERTITEM,
113 MPFROMSHORT(LIT_END),
114 MPFROMP(info->title));
115 if(x < 0) {
116 Runtime_Error(pszSrcFile, __LINE__, "no cmd");
117 WinDismissDlg(hwnd,0);
118 }
119 else {
120 WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,LM_SETITEMHANDLE,
121 MPFROMSHORT(x),MPFROMP(info));
122 }
123 info = info->next;
124 }
125 }
126 break;
127
128 case WM_CONTROL:
129 return 0;
130
131 case WM_COMMAND:
132 switch(SHORT1FROMMP(mp1)) {
133 case DID_CANCEL:
134 WinDismissDlg(hwnd,0);
135 break;
136
137 case DID_OK:
138 {
139 LINKCMDS *temphead = NULL,*info,*last = NULL,*temptail = NULL;
140 SHORT sSelect,numitems;
141
142 sSelect = 0;
143 numitems = (SHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
144 LM_QUERYITEMCOUNT,
145 MPVOID,MPVOID);
146 while(numitems) {
147 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
148 LM_QUERYITEMHANDLE,
149 MPFROMSHORT(sSelect++),
150 MPVOID);
151 if(info) {
152 if(!temphead) {
153 temphead = info;
154 info->prev = NULL;
155 }
156 else {
157 last->next = info;
158 info->prev = last;
159 }
160 temptail = info;
161 last = info;
162 info->next = NULL;
163 }
164 numitems--;
165 }
166 sSelect = 0;
167 numitems = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
168 LM_QUERYITEMCOUNT,
169 MPVOID,MPVOID);
170 while(numitems) {
171 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
172 LM_QUERYITEMHANDLE,
173 MPFROMSHORT(sSelect++),
174 MPVOID);
175 if(info) {
176 if(!temphead) {
177 temphead = info;
178 info->prev = NULL;
179 }
180 else {
181 last->next = info;
182 info->prev = last;
183 }
184 temptail = info;
185 last = info;
186 info->next = NULL;
187 }
188 numitems--;
189 }
190 cmdhead = temphead;
191 cmdtail = temptail;
192 }
193 WinDismissDlg(hwnd,1);
194 break;
195
196 case IDM_HELP:
197 if(hwndHelp)
198 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
199 MPFROM2SHORT(HELP_REORDERCOMMANDS,0),
200 MPFROMSHORT(HM_RESOURCEID));
201 break;
202
203 case RE_ADD:
204 {
205 SHORT sSelect,x;
206 LINKCMDS *info;
207
208 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
209 LM_QUERYSELECTION,
210 MPFROMSHORT(LIT_FIRST),
211 MPVOID);
212 while(sSelect >= 0) {
213 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
214 LM_QUERYITEMHANDLE,
215 MPFROMSHORT(sSelect),
216 MPVOID);
217 if(info) {
218 x = (SHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
219 LM_INSERTITEM,
220 MPFROM2SHORT(LIT_END,0),
221 MPFROMP(info->title));
222 if(x >= 0) {
223 WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
224 LM_SETITEMHANDLE,
225 MPFROMSHORT(x),
226 MPFROMP(info));
227 WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,LM_DELETEITEM,
228 MPFROMSHORT(sSelect),MPVOID);
229 }
230 }
231 else
232 WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,LM_SELECTITEM,
233 MPFROMSHORT(sSelect),MPFROMSHORT(FALSE));
234 sSelect = (USHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
235 LM_QUERYSELECTION,
236 MPFROMSHORT(LIT_FIRST),
237 MPVOID);
238 }
239 }
240 break;
241
242 case RE_REMOVE:
243 {
244 SHORT sSelect,x;
245 LINKCMDS *info;
246
247 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
248 LM_QUERYSELECTION,
249 MPFROMSHORT(LIT_FIRST),
250 MPVOID);
251 while(sSelect >= 0) {
252 info = (LINKCMDS *)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
253 LM_QUERYITEMHANDLE,
254 MPFROMSHORT(sSelect),
255 MPVOID);
256 if(info) {
257 x = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
258 LM_INSERTITEM,
259 MPFROM2SHORT(LIT_END,0),
260 MPFROMP(info->title));
261 if(x >= 0) {
262 WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
263 LM_SETITEMHANDLE,
264 MPFROMSHORT(x),
265 MPFROMP(info));
266 WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,LM_DELETEITEM,
267 MPFROMSHORT(sSelect),MPVOID);
268 }
269 }
270 else
271 WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,LM_SELECTITEM,
272 MPFROMSHORT(sSelect),MPFROMSHORT(FALSE));
273 sSelect = (USHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
274 LM_QUERYSELECTION,
275 MPFROMSHORT(LIT_FIRST),
276 MPVOID);
277 }
278 }
279 break;
280 }
281 return 0;
282 }
283 return WinDefDlgProc(hwnd,msg,mp1,mp2);
284}
285
286
287CHAR *command_title (INT cx)
288{
289 static CHAR duh[] = "???";
290 LINKCMDS *info;
291 INT x = 0;
292
293 if(!cmdloaded)
294 load_commands();
295 info = cmdhead;
296 while(info) {
297 if(x == cx)
298 return info->title;
299 info = info->next;
300 }
301 return duh;
302}
303
304
305VOID free_commands (VOID)
306{
307 LINKCMDS *info,*next;
308
309 info = cmdhead;
310 while(info) {
311 next = info->next;
312 free(info->title);
313 free(info->cl);
314 free(info);
315 info = next;
316 }
317 cmdhead = cmdtail = NULL;
318}
319
320
321VOID load_commands (VOID)
322{
323 FILE *fp;
324 LINKCMDS *info;
325 CHAR cl[1024];
326 CHAR title[100];
327 CHAR flags[72];
328
329 if(cmdhead)
330 free_commands();
331 cmdloaded = TRUE;
332 save_dir2(cl);
333 if(cl[strlen(cl) - 1] != '\\')
334 strcat(cl,"\\");
335 strcat(cl,"COMMANDS.DAT");
336 fp = _fsopen(cl,"r",SH_DENYWR);
337 if(fp) {
338 while (!feof(fp)) {
339 if (!xfgets_bstripcr(title,sizeof(title),fp,pszSrcFile,__LINE__))
340 break;
341 title[34] = 0; // fixme to know why chopped this way?
342 bstripcr(title);
343 if (!*title || *title == ';')
344 continue;
345 if (!xfgets(cl,sizeof(cl),fp,pszSrcFile,__LINE__))
346 break; /* error! */
347 if (!xfgets(flags,72,fp,pszSrcFile,__LINE__))
348 break; /* error! */
349 cl[1000] = 0; // fixme to know why chopped this way?
350 bstripcr(cl);
351 flags[34] = 0;
352 bstripcr(flags);
353 if(!*cl)
354 continue;
355 info = xmallocz(sizeof(LINKCMDS),pszSrcFile,__LINE__);
356 if (info) {
357 info->cl = xstrdup(cl,pszSrcFile,__LINE__);
358 info->title = xstrdup(title,pszSrcFile,__LINE__);
359 info->flags = atol(flags);
360 if(!info->cl || !info->title) {
361 if(info->cl)
362 free(info->cl);
363 if(info->title)
364 free(info->title);
365 free(info);
366 break;
367 }
368 if(!cmdhead)
369 cmdhead = info;
370 else {
371 cmdtail->next = info;
372 info->prev = cmdtail;
373 }
374 cmdtail = info;
375 }
376 }
377 fclose(fp);
378 }
379}
380
381
382VOID save_commands (VOID)
383{
384 LINKCMDS *info;
385 FILE *fp;
386 CHAR s[CCHMAXPATH + 14];
387
388 if(!cmdloaded || !cmdhead)
389 return;
390 info = cmdhead;
391 save_dir2(s);
392 if(s[strlen(s) - 1] != '\\')
393 strcat(s,"\\");
394 strcat(s,"COMMANDS.DAT");
395 fp = xfopen(s,"w",pszSrcFile,__LINE__);
396 if (fp) {
397 fputs(GetPString(IDS_COMMANDFILETEXT),fp);
398 info = cmdhead;
399 while(info) {
400 fprintf(fp,
401 ";\n%0.34s\n%0.1000s\n%lu\n",
402 info->title,
403 info->cl,
404 info->flags);
405 info = info->next;
406 }
407 fclose(fp);
408 }
409}
410
411
412//== add_command() Add command to list ==
413
414LINKCMDS *add_command (COMMAND *addme)
415{
416 LINKCMDS *info;
417
418 if (!addme || !*addme->cl || !*addme->title)
419 return NULL; // No data
420 info = cmdhead;
421 while (info) {
422 if (!stricmp(info->title,addme->title))
423 return NULL; // Got a dup
424 info = info->next;
425 }
426 info = xmallocz(sizeof(LINKCMDS),pszSrcFile,__LINE__);
427 if (!info)
428 return NULL;
429 info->cl = xstrdup(addme->cl,pszSrcFile,__LINE__);
430 info->title = xstrdup(addme->title,pszSrcFile,__LINE__);
431 if (addme->flags)
432 info->flags = addme->flags;
433 if (!info->cl || !info->title) {
434 xfree(info->cl);
435 xfree(info->title);
436 free(info);
437 return NULL;
438 }
439 if (!cmdhead) /* only item in list */
440 cmdhead = cmdtail = info;
441 else {
442 /* place at tail */
443 cmdtail->next = info;
444 info->prev = cmdtail;
445 cmdtail = info;
446 }
447 return info;
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,CMD_CL,sizeof(temp.cl),temp.cl);
668 bstrip(temp.cl);
669 WinQueryDlgItemText(hwnd,CMD_TITLE,sizeof(temp.title),temp.title);
670 if(WinQueryButtonCheckstate(hwnd,CMD_DEFAULT))
671 temp.flags = 0;
672 else if(WinQueryButtonCheckstate(hwnd,CMD_FULLSCREEN))
673 temp.flags = FULLSCREEN;
674 else if(WinQueryButtonCheckstate(hwnd,CMD_MINIMIZED))
675 temp.flags = MINIMIZED;
676 else if(WinQueryButtonCheckstate(hwnd,CMD_MAXIMIZED))
677 temp.flags = MAXIMIZED;
678 else if(WinQueryButtonCheckstate(hwnd,CMD_INVISIBLE))
679 temp.flags = INVISIBLE;
680 if(WinQueryButtonCheckstate(hwnd,CMD_KEEP))
681 temp.flags |= KEEP;
682 if(WinQueryButtonCheckstate(hwnd,CMD_PROMPT))
683 temp.flags |= PROMPT;
684 if(WinQueryButtonCheckstate(hwnd,CMD_ONCE))
685 temp.flags |= ONCE;
686 info = add_command(&temp);
687 if (!info) {
688 saymsg(MB_ENTER,
689 hwnd,
690 GetPString(IDS_ERRORTEXT),
691 // GetPString(IDS_CANTADDCOMMANDTEXT),
692 "Can't add %s to command list", temp.title); // fixme to be in fm3dll.str
693 }
694 else {
695 CHAR env[1002];
696
697 *env = 0;
698 WinQueryDlgItemText(hwnd,CMD_ENVIRON,1000,env);
699 bstripcr(env);
700 if (*env) {
701 PrfWriteProfileString(fmprof,
702 FM3Str,
703 temp.cl,
704 env);
705 }
706 x = (SHORT)WinSendDlgItemMsg(hwnd,
707 CMD_LISTBOX,
708 LM_INSERTITEM,
709 MPFROM2SHORT(LIT_END,0),
710 MPFROMP(temp.title));
711 if(x >= 0) {
712 WinSendDlgItemMsg(hwnd,
713 CMD_LISTBOX,
714 LM_SETITEMHANDLE,
715 MPFROMSHORT(x),
716 MPFROMP(info));
717 WinSendDlgItemMsg(hwnd,
718 CMD_LISTBOX,
719 LM_SELECTITEM,
720 MPFROMSHORT(x),
721 MPFROMSHORT(TRUE));
722 save_commands();
723 }
724 }
725 }
726 break;
727
728 case CMD_DELETE:
729 {
730 CHAR temp[34];
731
732 WinQueryDlgItemText(hwnd,CMD_TITLE,34,temp);
733 bstrip(temp);
734 if (!kill_command(temp))
735 Runtime_Error(pszSrcFile, __LINE__, "kill_command");
736 else {
737 x = (SHORT)WinSendDlgItemMsg(hwnd,
738 CMD_LISTBOX,
739 LM_QUERYSELECTION,
740 MPFROMSHORT(LIT_FIRST),
741 MPVOID);
742 if(x >= 0) {
743 WinSendDlgItemMsg(hwnd,
744 CMD_LISTBOX,
745 LM_DELETEITEM,
746 MPFROMSHORT(x),
747 MPVOID);
748 WinSendDlgItemMsg(hwnd,
749 CMD_LISTBOX,
750 LM_SELECTITEM,
751 MPFROMSHORT(LIT_NONE),
752 MPFROMSHORT(FALSE));
753 }
754 save_commands();
755 }
756 }
757 break;
758 }
759 return 0;
760 }
761 return WinDefDlgProc(hwnd,msg,mp1,mp2);
762}
763
764
765VOID RunCommand (HWND hwnd,INT cx)
766{
767 INT x;
768 CHAR **list;
769 LINKCMDS *info;
770
771 list = BuildList(hwnd);
772 if(!list || !list[0])
773 return;
774 x = 0;
775 info = cmdhead;
776 while(info) {
777 x++;
778 if(x == cx)
779 break;
780 info = info->next;
781 }
782 if(info) {
783
784 INT flags;
785
786 x--;
787 flags = info->flags;
788 if(!(flags & FULLSCREEN))
789 flags |= WINDOWED;
790 if(flags & KEEP)
791 flags |= SEPARATEKEEP;
792 else
793 flags |= SEPARATE;
794 flags &= ~(KEEP | 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}
Note: See TracBrowser for help on using the repository browser.