source: trunk/dll/command.c@ 507

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

Add replace command and update okay to add if changed

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