source: trunk/dll/command.c@ 551

Last change on this file since 551 was 551, checked in by Gregg Young, 18 years ago

Indentation cleanup

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