source: trunk/dll/command.c@ 574

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

Use QWL_USER; Replace doesn't move the command and Okay on cmd dialog removed error on unchanged command

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