source: trunk/dll/command.c@ 552

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

font cleanup; new image and archiver masks; messages moved to string file; new drive flags including David's icons mostly working

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