source: trunk/dll/command.c@ 406

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

Use xfgets_bstripcr

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