source: trunk/dll/tools.c@ 487

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

docopyf filename args must be variables
Sync with standard source formattting

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 31.9 KB
RevLine 
[2]1
[123]2/***********************************************************************
3
4 $Id: tools.c 487 2006-09-07 05:10:39Z root $
5
[329]6 Toolbar support routines
[123]7
8 Copyright (c) 1994-97 M. Kimes
[329]9 Copyright (c) 2004, 2006 Steven H.Levine
[123]10
[130]11 01 Aug 04 SHL Rework lstrip/rstrip usage
12 23 May 05 SHL Use QWL_USER
[329]13 22 Jul 06 SHL Check more run time errors
[401]14 29 Jul 06 SHL Use xfgets, xfgets_bstripcr
[440]15 18 Aug 06 SHL Report more runtime errors
[487]16 05 Sep 06 SHL docopyf filename args must be variables
17 05 Sep 06 SHL Sync with standard source formattting
[123]18
19***********************************************************************/
20
[2]21#define INCL_DOS
22#define INCL_WIN
[329]23#include <os2.h>
[2]24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28#include <share.h>
[329]29
[2]30#include "fm3dll.h"
31#include "fm3dlg.h"
32#include "tools.h"
33#include "fm3str.h"
34
35#pragma data_seg(DATA1)
[329]36
37static PSZ pszSrcFile = __FILE__;
38
[2]39#pragma alloc_text(TOOLS,load_tools,save_tools,add_tool,insert_tool,del_tool,free_tools,swap_tools,load_quicktools,save_quicktools)
40#pragma alloc_text(TOOLS1,ReOrderToolsProc,PickToolProc,AddToolProc,ToolIODlgProc)
41
42TOOL *toolhead = NULL;
43
44
[440]45//== load_quicktools() build *.tls array ==
[2]46
[440]47VOID load_quicktools(VOID)
48{
[2]49 FILE *fp;
50 CHAR s[CCHMAXPATH + 14];
[440]51 INT x;
[2]52
53 qtloaded = TRUE;
[440]54 for (x = 0; x < 50 && quicktool[x]; x++) {
[2]55 free(quicktool[x]);
56 quicktool[x] = NULL;
57 }
[440]58 if (!fToolbar) {
[2]59 qtloaded = FALSE;
60 return;
61 }
62 save_dir2(s);
[440]63 if (s[strlen(s) - 1] != '\\')
[2]64 strcat(s,"\\");
65 strcat(s,"QUICKTLS.DAT");
66 fp = _fsopen(s,"r",SH_DENYWR);
[329]67 if (fp) {
[440]68 x = 0;
69 while (!feof(fp)) {
70 if (!xfgets_bstripcr(s,CCHMAXPATH + 2,fp,pszSrcFile,__LINE__))
[2]71 break;
[440]72 if (!*s || *s == ';')
73 continue;
74 if (x >= 50) {
75 Runtime_Error(pszSrcFile, __LINE__, "add");
76 break;
[2]77 }
[440]78 quicktool[x] = xstrdup(s,pszSrcFile,__LINE__);
79 if (!quicktool[x])
80 break;
81 x++;
[2]82 }
83 fclose(fp);
84 }
85}
86
87
[440]88VOID save_quicktools(VOID)
89{
[2]90 FILE *fp;
91 INT x = 0;
92 CHAR s[CCHMAXPATH + 14];
93
[487]94 if (!quicktool[0])
[2]95 return;
96 save_dir2(s);
[487]97 if (s[strlen(s) - 1] != '\\')
[2]98 strcat(s,"\\");
99 strcat(s,"QUICKTLS.DAT");
[329]100 fp = xfopen(s,"w",pszSrcFile,__LINE__);
101 if (fp) {
[487]102 for (x = 0;quicktool[x] && x < 50;x++)
[2]103 fprintf(fp,"%s\n",quicktool[x]);
104 fclose(fp);
105 }
106}
107
108
[440]109//== load_tools() Build tools list given .tls filename ==
[2]110
[440]111TOOL *load_tools(CHAR *filename)
112{
[2]113 FILE *fp;
[401]114 CHAR help[80],text[80],flagstr[80],idstr[80],*fname;
[2]115 TOOL *info;
116
[487]117 if (!fToolbar) {
[2]118 toolhead = free_tools();
119 return toolhead;
120 }
[487]121 if (!filename ||
[2]122 !*filename)
123 filename = (*lasttoolbox) ? lasttoolbox : "CMDS.TLS";
[487]124 if (*filename)
[2]125 fname = searchpath(filename);
[487]126 if (!fname ||
[2]127 !*fname)
128 fname = "FM3TOOLS.DAT";
[487]129 if (fname &&
[2]130 *fname) {
131 filename = fname;
132 strcpy(lasttoolbox,filename);
133 fp = _fsopen(filename,"r",SH_DENYWR);
[329]134 if (fp) {
[2]135 toolhead = free_tools();
[487]136 while (!feof(fp)) {
[2]137 do {
[487]138 if (!xfgets(help,sizeof(help),fp,pszSrcFile,__LINE__))
[2]139 break;
[487]140 } while (*help == ';' && !feof(fp));
[2]141 stripcr(help);
[487]142 if (!xfgets(text,sizeof(text),fp,pszSrcFile,__LINE__))
[2]143 break;
144 stripcr(text);
[487]145 if (!xfgets(flagstr,sizeof(flagstr),fp,pszSrcFile,__LINE__))
[2]146 break;
[487]147 if (!xfgets(idstr,sizeof(idstr),fp,pszSrcFile,__LINE__))
[2]148 break;
[487]149 if (!(USHORT)atoi(idstr))
[2]150 continue;
[329]151 info = xmallocz(sizeof(TOOL),pszSrcFile,__LINE__);
152 if (info) {
[487]153 if (*help) {
[2]154 literal(help);
[487]155 if (*help)
[329]156 info->help = xstrdup(help,pszSrcFile,__LINE__);
[2]157 }
[487]158 if (*text)
[329]159 info->text = xstrdup(text,pszSrcFile,__LINE__);
[2]160 info->flags = (atoi(flagstr) & (~(T_TEXT | T_EMPHASIZED)));
161 info->id = (USHORT)atoi(idstr);
162 info->next = NULL;
163 add_tool(info);
164 }
165 }
166 fclose(fp);
167 fToolsChanged = FALSE;
168 }
169 }
170 return toolhead;
171}
172
173
[440]174VOID save_tools(CHAR *filename)
175{
[2]176 FILE *fp;
177 CHAR *fname;
178 TOOL *info;
179
[487]180 if (!filename)
[2]181 filename = lasttoolbox;
[487]182 if (*filename)
[2]183 fname = searchpath(filename);
[487]184 if (fname && *fname)
[2]185 filename = fname;
186 else {
[487]187 if (*lasttoolbox)
[2]188 filename = lasttoolbox;
189 else
190 filename = "FM3TOOLS.TLS";
191 fname = searchpath(filename);
[487]192 if (fname && *fname)
[2]193 filename = fname;
194 }
195
[487]196 if (stristr(filename,"FM3TOOLS.DAT"))
[2]197 filename = "FM3TOOLS.TLS";
[487]198 if (toolhead && filename && *filename) {
[2]199 strcpy(lasttoolbox,filename);
[487]200 PrfWriteProfileString(fmprof,FM3Str,"LastToolBox",filename);
[2]201 }
[487]202 if (!toolhead) {
[2]203 unlinkf("%s",filename);
204 return;
205 }
[329]206 fp = xfopen(filename,"w",pszSrcFile,__LINE__);
207 if (fp) {
[2]208 fprintf(fp,GetPString(IDS_TOOLFILETEXT),filename);
209 info = toolhead;
[487]210 while (info) {
[2]211 fprintf(fp,
212 "%s\n%s\n%u\n%u\n;\n",
213 (info->help) ? info->help : NullStr,
214 (info->text) ? info->text : NullStr,
215 (info->flags & (~(T_EMPHASIZED | T_TEXT))),
216 info->id);
217 info = info->next;
218 }
219 fclose(fp);
220 fToolsChanged = FALSE;
221 }
[487]222 if (hwndMain)
223 PostMsg(hwndMain,UM_FILLBUTTONLIST,MPVOID,MPVOID);
[2]224}
225
226
[440]227TOOL *add_tool(TOOL *tool)
228{
[2]229 TOOL *info;
230
[487]231 if (tool) {
[2]232 info = toolhead;
[487]233 if (info) {
234 while (info->next)
[2]235 info = info->next;
236 }
[487]237 if (info)
[2]238 info->next = tool;
239 else
240 toolhead = tool;
241 fToolsChanged = TRUE;
242 }
243 return toolhead;
244}
245
246
[440]247TOOL *insert_tool(TOOL *tool,TOOL *after)
248{
[487]249 if (tool) {
250 if (!toolhead)
[2]251 return add_tool(tool);
[487]252 if (!after) {
[2]253 tool->next = toolhead;
254 toolhead = tool;
255 fToolsChanged = TRUE;
256 }
257 else {
258 tool->next = after->next;
259 after->next = tool;
260 fToolsChanged = TRUE;
261 }
262 }
263 return toolhead;
264}
265
266
[440]267TOOL *del_tool(TOOL *tool)
268{
[2]269 TOOL *info,*prev = NULL;
270
[487]271 if (tool) {
[2]272 info = toolhead;
[487]273 while (info) {
274 if (info == tool) {
275 if (info == toolhead)
[2]276 toolhead = info->next;
[487]277 if (prev)
[2]278 prev->next = info->next;
[487]279 if (info->help)
[2]280 free(info->help);
[487]281 if (info->text)
[2]282 free(info->text);
283 free(info);
284 fToolsChanged = TRUE;
285 break;
286 }
287 prev = info;
288 info = info->next;
289 }
290 }
291 return toolhead;
292}
293
294
[440]295TOOL *find_tool(USHORT id)
296{
[2]297 TOOL *tool;
298
[487]299 if (id) {
[2]300 tool = toolhead;
[487]301 while (tool) {
302 if (id && tool->id == id)
[2]303 return tool;
304 tool = tool->next;
305 }
306 }
307 return NULL;
308}
309
310
[440]311TOOL *next_tool(TOOL *tool,BOOL skipinvisible)
312{
[487]313 while (tool) {
314 if (tool->next && (skipinvisible && (tool->next->flags & T_INVISIBLE)))
[2]315 tool = tool->next;
316 else
317 return (tool->next) ? tool->next : toolhead;
318 }
319 return NULL;
320}
321
322
[440]323TOOL *prev_tool(TOOL *tool,BOOL skipinvisible)
324{
[2]325 TOOL *info;
326
327Again:
[487]328 while (tool) {
[2]329 info = toolhead;
[487]330 while (info) {
331 if (info->next == tool) {
332 if (skipinvisible && (info->flags & T_INVISIBLE)) {
[2]333 tool = info;
334 goto Again;
335 }
336 return info;
337 }
[487]338 if (!info->next && tool == toolhead)
[2]339 return info;
340 info = info->next;
341 }
342 return toolhead;
343 }
344 return NULL;
345}
346
347
[440]348TOOL *swap_tools(TOOL *tool1,TOOL *tool2)
349{
[2]350 TOOL *prev1 = NULL,*prev2 = NULL,*info;
351
[487]352 if (tool1 && tool2 && tool1 != tool2) {
[2]353 info = toolhead;
[487]354 while (info && !prev1 && !prev2) {
355 if (info->next == tool1)
[2]356 prev1 = info;
[487]357 else if (info->next == tool2)
[2]358 prev2 = info;
359 info = info->next;
360 }
361 info = tool2;
362 tool2 = tool1;
363 tool1 = info;
364 info = tool2->next;
[487]365 if (prev1)
[2]366 prev1->next = tool2;
[487]367 if (prev2)
[2]368 prev2->next = tool1;
369 tool2->next = tool1->next;
370 tool1->next = info;
371 fToolsChanged = TRUE;
372 }
373 return toolhead;
374}
375
376
[440]377TOOL *free_tools(VOID)
378{
[2]379 TOOL *tool,*next;
380
381 tool = toolhead;
[487]382 while (tool) {
[2]383 next = tool->next;
[487]384 if (tool->help)
[2]385 free(tool->help);
[487]386 if (tool->text)
[2]387 free(tool->text);
388 free(tool);
389 tool = next;
390 }
391 toolhead = NULL;
392 return toolhead;
393}
394
395
[487]396MRESULT EXPENTRY ReOrderToolsProc(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
[440]397{
[487]398 switch (msg) {
[2]399 case WM_INITDLG:
[487]400 if (!toolhead || !toolhead->next)
[2]401 WinDismissDlg(hwnd,0);
[487]402 WinSetWindowText(hwnd,GetPString(IDS_RETOOLTEXT));
[2]403 {
404 TOOL *tool;
405 CHAR s[133];
406 SHORT sSelect;
407
408 tool = toolhead;
[487]409 while (tool) {
[2]410 sprintf(s,
411 "%-5u %s",
412 tool->id,
413 (tool->help) ? tool->help : "?");
414 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
415 RE_ADDLISTBOX,
416 LM_INSERTITEM,
417 MPFROMSHORT(LIT_END),
418 MPFROMP(s));
[487]419 if (sSelect >= 0)
[2]420 WinSendDlgItemMsg(hwnd,
421 RE_ADDLISTBOX,
422 LM_SETITEMHANDLE,
423 MPFROMSHORT(sSelect),
424 MPFROMLONG((ULONG)tool));
425 tool = tool->next;
426 }
427 }
428 break;
429
430 case WM_CONTROL:
431 return 0;
432
433 case WM_COMMAND:
[487]434 switch (SHORT1FROMMP(mp1)) {
[2]435 case DID_CANCEL:
436 WinDismissDlg(hwnd,0);
437 break;
438
439 case DID_OK:
440 {
441 TOOL *tool,*thead = NULL,*last = NULL;
442 SHORT sSelect = 0,numitems;
443
444 numitems = (SHORT)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
445 LM_QUERYITEMCOUNT,
446 MPVOID,MPVOID);
[487]447 while (numitems) {
[2]448 tool = (TOOL *)WinSendDlgItemMsg(hwnd,RE_REMOVELISTBOX,
449 LM_QUERYITEMHANDLE,
450 MPFROMSHORT(sSelect++),MPVOID);
[487]451 if (tool) {
452 if (!thead)
[2]453 thead = tool;
454 else
455 last->next = tool;
456 last = tool;
457 }
458 numitems--;
459 }
460 sSelect = 0;
461 numitems = (SHORT)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
462 LM_QUERYITEMCOUNT,
463 MPVOID,MPVOID);
[487]464 while (numitems) {
[2]465 tool = (TOOL *)WinSendDlgItemMsg(hwnd,RE_ADDLISTBOX,
466 LM_QUERYITEMHANDLE,
467 MPFROMSHORT(sSelect++),
468 MPVOID);
[487]469 if (tool) {
470 if (!thead)
[2]471 thead = tool;
472 else
473 last->next = tool;
474 last = tool;
475 }
476 numitems--;
477 }
[487]478 if (last)
[2]479 last->next = NULL;
480 toolhead = thead;
481 }
482 fToolsChanged = TRUE;
483 WinDismissDlg(hwnd,1);
484 break;
485
486 case IDM_HELP:
[487]487 if (hwndHelp)
[2]488 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
489 MPFROM2SHORT(HELP_REORDERBUTTONS,0),
490 MPFROMSHORT(HM_RESOURCEID));
491 break;
492
493 case RE_ADD:
494 {
495 SHORT sSelect,sSelect2;
496 CHAR s[133];
497 TOOL *tool;
498
499 sSelect = (USHORT)WinSendDlgItemMsg(hwnd,
500 RE_ADDLISTBOX,
501 LM_QUERYSELECTION,
502 MPFROMSHORT(LIT_FIRST),
503 MPVOID);
[487]504 while (sSelect >= 0) {
[2]505 tool = (TOOL *)WinSendDlgItemMsg(hwnd,
506 RE_ADDLISTBOX,
507 LM_QUERYITEMHANDLE,
508 MPFROMSHORT(sSelect),
509 MPVOID);
[487]510 if (tool) {
[2]511 sprintf(s,
512 "%-5u %s",
513 tool->id,
514 (tool->help) ? tool->help : "?");
515 sSelect2 = (SHORT)WinSendDlgItemMsg(hwnd,
516 RE_REMOVELISTBOX,
517 LM_INSERTITEM,
518 MPFROM2SHORT(LIT_END,0),
519 MPFROMP(s));
[487]520 if (sSelect2 >= 0)
[2]521 WinSendDlgItemMsg(hwnd,
522 RE_REMOVELISTBOX,
523 LM_SETITEMHANDLE,
524 MPFROMSHORT(sSelect2),
525 MPFROMLONG((ULONG)tool));
526 WinSendDlgItemMsg(hwnd,
527 RE_ADDLISTBOX,
528 LM_DELETEITEM,
529 MPFROMSHORT(sSelect),
530 MPVOID);
531 }
532 else
533 WinSendDlgItemMsg(hwnd,
534 RE_ADDLISTBOX,
535 LM_SELECTITEM,
536 MPFROMSHORT(sSelect),
537 MPFROMSHORT(FALSE));
538 sSelect = (USHORT)WinSendDlgItemMsg(hwnd,
539 RE_ADDLISTBOX,
540 LM_QUERYSELECTION,
541 MPFROMSHORT(LIT_FIRST),
542 MPVOID);
543 }
544 }
545 break;
546
547 case RE_REMOVE:
548 {
549 SHORT sSelect,sSelect2;
550 CHAR s[133];
551 TOOL *tool;
552
553 sSelect = (USHORT)WinSendDlgItemMsg(hwnd,
554 RE_REMOVELISTBOX,
555 LM_QUERYSELECTION,
556 MPFROMSHORT(LIT_FIRST),
557 MPVOID);
[487]558 while (sSelect >= 0) {
[2]559 tool = (TOOL *)WinSendDlgItemMsg(hwnd,
560 RE_REMOVELISTBOX,
561 LM_QUERYITEMHANDLE,
562 MPFROMSHORT(sSelect),
563 MPVOID);
[487]564 if (tool) {
[2]565 sprintf(s,
566 "%-5u %s",
567 tool->id,
568 (tool->help) ? tool->help : "?");
569 sSelect2 = (SHORT)WinSendDlgItemMsg(hwnd,
570 RE_ADDLISTBOX,
571 LM_INSERTITEM,
572 MPFROM2SHORT(LIT_END,0),
573 MPFROMP(s));
[487]574 if (sSelect2 >= 0)
[2]575 WinSendDlgItemMsg(hwnd,
576 RE_ADDLISTBOX,
577 LM_SETITEMHANDLE,
578 MPFROMSHORT(sSelect2),
579 MPFROMLONG((ULONG)tool));
580 WinSendDlgItemMsg(hwnd,
581 RE_REMOVELISTBOX,
582 LM_DELETEITEM,
583 MPFROMSHORT(sSelect),
584 MPVOID);
585 }
586 else
587 WinSendDlgItemMsg(hwnd,
588 RE_REMOVELISTBOX,
589 LM_SELECTITEM,
590 MPFROMSHORT(sSelect),
591 MPFROMSHORT(FALSE));
592 sSelect = (USHORT)WinSendDlgItemMsg(hwnd,
593 RE_REMOVELISTBOX,
594 LM_QUERYSELECTION,
595 MPFROMSHORT(LIT_FIRST),
596 MPVOID);
597 }
598 }
599 break;
600 }
601 return 0;
602 }
603 return WinDefDlgProc(hwnd,msg,mp1,mp2);
604}
605
606
[440]607MRESULT EXPENTRY AddToolProc(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
608{
[487]609 switch (msg) {
[2]610 case WM_INITDLG:
[130]611 WinSetWindowPtr(hwnd,QWL_USER,mp2);
[487]612 if (mp2) {
[2]613 WinSetWindowText(hwnd,GetPString(IDS_EDITTOOLTEXT));
614 WinSendDlgItemMsg(hwnd,ADDBTN_ID,EM_SETREADONLY,
615 MPFROM2SHORT(TRUE,0),MPVOID);
616 }
617 WinSendDlgItemMsg(hwnd,ADDBTN_HELP,EM_SETTEXTLIMIT,
618 MPFROM2SHORT(80,0),MPVOID);
619 WinSendDlgItemMsg(hwnd,ADDBTN_TEXT,EM_SETTEXTLIMIT,
620 MPFROM2SHORT(80,0),MPVOID);
621 WinSendDlgItemMsg(hwnd,ADDBTN_ID,EM_SETTEXTLIMIT,
622 MPFROM2SHORT(5,0),MPVOID);
[487]623 if (!mp2)
[2]624 WinCheckButton(hwnd,ADDBTN_VISIBLE,TRUE);
625 else {
626 TOOL *tool = (TOOL *)mp2;
627 CHAR s[33];
628
[487]629 if (tool->help)
[2]630 WinSetDlgItemText(hwnd,ADDBTN_HELP,tool->help);
[487]631 if (tool->text)
[2]632 WinSetDlgItemText(hwnd,ADDBTN_TEXT,tool->text);
[487]633 if (tool->flags & T_MYICON)
[2]634 WinCheckButton(hwnd,ADDBTN_MYICON,TRUE);
635 else
636 WinEnableWindow(WinWindowFromID(hwnd,ADDBTN_EDITBMP),FALSE);
[487]637 if (tool->flags & T_DROPABLE)
[2]638 WinCheckButton(hwnd,ADDBTN_DROPABLE,TRUE);
[487]639 if (!(tool->flags & T_INVISIBLE))
[2]640 WinCheckButton(hwnd,ADDBTN_VISIBLE,TRUE);
[487]641 if (tool->flags & T_SEPARATOR)
[2]642 WinCheckButton(hwnd,ADDBTN_SEPARATOR,TRUE);
[487]643 if (tool->flags & T_TEXT)
[2]644 WinCheckButton(hwnd,ADDBTN_SHOWTEXT,TRUE);
[487]645 sprintf(s,"%u",tool->id);
646 WinSetDlgItemText(hwnd,ADDBTN_ID,s);
647 WinEnableWindow(WinWindowFromID(hwnd,ADDBTN_SHOWTEXT),FALSE);
[2]648 }
[487]649 WinShowWindow(WinWindowFromID(hwnd,ADDBTN_SHOWTEXT),FALSE);
650 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID);
[2]651 break;
652
653 case WM_ADJUSTWINDOWPOS:
654 PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
655 break;
656
657 case UM_SETDIR:
658 PaintRecessedWindow(WinWindowFromID(hwnd,ADDBTN_HELPME),(HPS)0,FALSE,
659 TRUE);
660 PaintRecessedWindow(WinWindowFromID(hwnd,ADDBTN_BMP),(HPS)0,TRUE,
661 FALSE);
662 return 0;
663
664 case UM_SETUP:
665 {
666 HBITMAP hbm = (HBITMAP)0,hbmd,hbmdd;
667 HPS hps;
668 CHAR idstr[7];
669 USHORT id;
670
671 *idstr = 0;
672 WinQueryDlgItemText(hwnd,ADDBTN_ID,6,idstr);
673 id = atoi(idstr);
[487]674 if (id) {
[2]675 hps = WinGetPS(WinWindowFromID(hwnd,ADDBTN_BMP));
[487]676 if (!WinQueryButtonCheckstate(hwnd,ADDBTN_MYICON))
[2]677 hbm = GpiLoadBitmap(hps,0,id,28,28);
[487]678 if (!hbm)
[2]679 hbm = LoadBitmapFromFileNum(id);
[487]680 if (hbm) {
[2]681 hbmd = (HBITMAP)WinSendDlgItemMsg(hwnd,ADDBTN_BMP,SM_QUERYHANDLE,
682 MPVOID,MPVOID);
683 hbmdd = (HBITMAP)WinSendDlgItemMsg(hwnd,ADDBTN_BMP,SM_SETHANDLE,
684 MPFROMLONG(hbm),MPVOID);
[487]685 if (hbmdd && hbmd && hbmd != hbmdd)
[2]686 GpiDeleteBitmap(hbmd);
687 }
688 }
689 }
690 return 0;
691
692 case WM_CONTROL:
[487]693 switch (SHORT1FROMMP(mp1)) {
[2]694 case ADDBTN_HELP:
[487]695 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
696 WinSetDlgItemText(hwnd,ADDBTN_HELPME,NullStr);
697 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
[2]698 WinSetDlgItemText(hwnd,ADDBTN_HELPME,
699 GetPString(IDS_ADDTOOLQUICKHELPTEXT));
700 break;
701
702 case ADDBTN_TEXT:
[487]703 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
704 WinSetDlgItemText(hwnd,ADDBTN_HELPME,NullStr);
705 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
[2]706 WinSetDlgItemText(hwnd,ADDBTN_HELPME,
707 GetPString(IDS_ADDTOOLBUTTONTEXT));
708 break;
709
710 case ADDBTN_ID:
[487]711 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS) {
712 WinSetDlgItemText(hwnd,ADDBTN_HELPME,NullStr);
713 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID);
[2]714 }
[487]715 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
[2]716 WinSetDlgItemText(hwnd,
717 ADDBTN_HELPME,
718 GetPString(IDS_ADDTOOLBUTTONIDTEXT));
719 break;
720
721 case ADDBTN_MYICON:
722 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID);
723 WinEnableWindow(WinWindowFromID(hwnd,ADDBTN_EDITBMP),
724 WinQueryButtonCheckstate(hwnd,ADDBTN_MYICON));
725 break;
726 }
727 return 0;
728
729 case WM_COMMAND:
[487]730 switch (SHORT1FROMMP(mp1)) {
[2]731 case DID_OK:
732 {
733 CHAR help[81],text[81],idstr[7];
734 BOOL invisible,dropable,separator,istext,myicon;
735 TOOL *tool;
736
737 WinQueryDlgItemText(hwnd,ADDBTN_HELP,80,help);
738 WinQueryDlgItemText(hwnd,ADDBTN_TEXT,80,text);
[487]739 if (WinQueryButtonCheckstate(hwnd,ADDBTN_DROPABLE))
[2]740 dropable = TRUE;
741 else
742 dropable = FALSE;
743 myicon = WinQueryButtonCheckstate(hwnd,ADDBTN_MYICON);
[487]744 if (WinQueryButtonCheckstate(hwnd,ADDBTN_VISIBLE))
[2]745 invisible = FALSE;
746 else
747 invisible = TRUE;
[487]748 if (WinQueryButtonCheckstate(hwnd,ADDBTN_SEPARATOR))
[2]749 separator = TRUE;
750 else
751 separator = FALSE;
[487]752 if (WinQueryButtonCheckstate(hwnd,ADDBTN_SHOWTEXT))
[2]753 istext = TRUE;
754 else
755 istext = FALSE;
756 tool = INSTDATA(hwnd);
[487]757 if (tool) { /* just editing strings... */
[2]758 istext = ((tool->flags & T_TEXT) != 0);
[487]759 if (tool->help)
[2]760 free(tool->help);
761 tool->help = NULL;
[487]762 if (tool->text)
[2]763 free(tool->text);
764 tool->text = NULL;
[487]765 if (*help)
[329]766 tool->help = xstrdup(help,pszSrcFile,__LINE__);
[487]767 if (*text)
[329]768 tool->text = xstrdup(text,pszSrcFile,__LINE__);
[2]769 tool->flags = (((dropable) ? T_DROPABLE : 0) |
770 ((invisible) ? T_INVISIBLE : 0) |
771 ((separator) ? T_SEPARATOR : 0) |
772 ((myicon) ? T_MYICON : 0) |
773 ((istext) ? T_TEXT : 0));
774 fToolsChanged = TRUE;
775 WinDismissDlg(hwnd,1);
776 break;
777 }
778 *idstr = 0;
779 WinQueryDlgItemText(hwnd,ADDBTN_ID,6,idstr);
[487]780 if (!(USHORT)atoi(idstr)) {
[2]781 DosBeep(250,100);
782 break;
783 }
784 tool = toolhead;
[487]785 while (tool) {
786 if (tool->id == (USHORT)atoi(idstr) && tool != tool) {
[2]787 saymsg(MB_ENTER,
788 hwnd,
789 GetPString(IDS_DUPLICATETEXT),
790 GetPString(IDS_TOOLIDEXISTS));
[487]791 WinSetDlgItemText(hwnd,ADDBTN_ID,NullStr);
792 WinSetFocus(HWND_DESKTOP,WinWindowFromID(hwnd,ADDBTN_ID));
[2]793 break;
794 }
795 tool = tool->next;
796 }
[329]797 tool = xmallocz(sizeof(TOOL),pszSrcFile,__LINE__);
798 if (tool) {
[487]799 if (*help)
[329]800 tool->help = xstrdup(help,pszSrcFile,__LINE__);
[487]801 if (*text)
[329]802 tool->text = xstrdup(text,pszSrcFile,__LINE__);
[2]803 tool->id = (USHORT)atoi(idstr);
804 tool->flags = (((dropable) ? T_DROPABLE : 0) |
805 ((invisible) ? T_INVISIBLE : 0) |
806 ((separator) ? T_SEPARATOR : 0) |
807 ((myicon) ? T_MYICON : 0) |
808 ((istext) ? T_TEXT : 0));
809 add_tool(tool);
810 WinDismissDlg(hwnd,tool->id);
811 }
812 }
813 break;
814
815 case DID_CANCEL:
816 WinDismissDlg(hwnd,0);
817 break;
818
819 case ADDBTN_EDITBMP:
820 {
821 CHAR idstr[6],filename[34];
822
823 *idstr = 0;
824 WinQueryDlgItemText(hwnd,ADDBTN_ID,6,idstr);
[487]825 if (!(USHORT)atoi(idstr)) {
[2]826 DosBeep(250,100);
827 break;
828 }
[487]829 sprintf(filename,"%u.BMP",atoi(idstr));
830 if (IsFile(filename) != 1) {
831 CHAR s[CCHMAXPATH] = "EMPTY.BMP";
832 docopyf(COPY, s, filename);
833 }
[2]834 runemf2(SEPARATE | WINDOWED,
835 hwnd,
836 NULL,
837 NULL,
838 "ICONEDIT.EXE %s",
839 filename);
840 }
841 break;
842
843 case IDM_HELP:
[487]844 if (hwndHelp) {
845 if (INSTDATA(hwnd))
[2]846 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
847 MPFROM2SHORT(HELP_CHANGEBUTTON,0),
848 MPFROMSHORT(HM_RESOURCEID));
849 else
850 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
851 MPFROM2SHORT(HELP_ADDBUTTON,0),
852 MPFROMSHORT(HM_RESOURCEID));
853 }
854 break;
855 }
856 return 0;
857 }
858 return WinDefDlgProc(hwnd,msg,mp1,mp2);
859}
860
861
[440]862MRESULT EXPENTRY PickToolProc(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
863{
[487]864 switch (msg) {
[2]865 case WM_INITDLG:
[487]866 if (mp2) {
[2]867 CHAR s[133];
868
869 sprintf(s,
870 GetPString(IDS_PICKTOOLTITLETEXT),
871 (CHAR *)mp2);
872 WinSetWindowText(hwnd,s);
873 }
874 {
875 TOOL *tool;
876 CHAR s[133];
877
878 tool = toolhead;
[487]879 while (tool) {
[2]880 sprintf(s,
881 "%-5u %s",
882 tool->id,
883 (tool->help) ? tool->help : "?");
884 WinSendDlgItemMsg(hwnd,
885 PICKBTN_LISTBOX,
886 LM_INSERTITEM,
887 MPFROMSHORT(LIT_END),
888 MPFROMP(s));
889 tool = tool->next;
890 }
891 }
892 break;
893
894 case WM_CONTROL:
[487]895 if (SHORT1FROMMP(mp1) == PICKBTN_LISTBOX) {
896 switch (SHORT2FROMMP(mp1)) {
[2]897 case LN_ENTER:
898 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(DID_OK,0),MPVOID);
899 break;
900 }
901 }
902 return 0;
903
904 case WM_COMMAND:
[487]905 switch (SHORT1FROMMP(mp1)) {
[2]906 case DID_CANCEL:
907 WinDismissDlg(hwnd,0);
908 break;
909 case DID_OK:
910 {
911 SHORT sSelect;
912 CHAR s[33];
913
914 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,PICKBTN_LISTBOX,
915 LM_QUERYSELECTION,
916 MPFROMSHORT(LIT_FIRST),
917 MPVOID);
[487]918 if (sSelect >= 0) {
[2]919 *s = 0;
920 WinSendDlgItemMsg(hwnd,PICKBTN_LISTBOX,LM_QUERYITEMTEXT,
921 MPFROM2SHORT(sSelect,32),MPFROMP(s));
[487]922 if (*s)
[2]923 WinDismissDlg(hwnd,(USHORT)atoi(s));
924 }
925 }
926 break;
927 }
928 return 0;
929 }
930 return WinDefDlgProc(hwnd,msg,mp1,mp2);
931}
932
933
[440]934MRESULT EXPENTRY ToolIODlgProc(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
935{
[487]936 switch (msg) {
[2]937 case WM_INITDLG:
[487]938 if (mp2)
[130]939 WinSetWindowULong(hwnd,QWL_USER,TRUE);
[2]940 else {
[130]941 WinSetWindowULong(hwnd,QWL_USER,FALSE);
[2]942 WinSetWindowText(hwnd,
943 GetPString(IDS_LOADTOOLBOXTITLETEXT));
944 }
945 WinSendDlgItemMsg(hwnd,
946 SVBTN_ENTRY,
947 EM_SETTEXTLIMIT,
948 MPFROM2SHORT(CCHMAXPATH,0),
949 MPVOID);
950 {
951 FILEFINDBUF3 findbuf;
952 HDIR hDir;
953 ULONG ulSearchCount,x = 0;
954 CHAR *masks[] = {"*.TLS","FM3TOOLS.DAT",NULL};
955
[487]956 if (mp2)
[2]957 masks[1] = NULL;
[487]958 while (masks[x]) {
[2]959 hDir = HDIR_CREATE;
960 ulSearchCount = 1L;
961 DosError(FERR_DISABLEHARDERR);
[487]962 if (!DosFindFirst(masks[x],
[2]963 &hDir,
964 FILE_ARCHIVED,
965 &findbuf,
966 sizeof(FILEFINDBUF3),
967 &ulSearchCount,
968 FIL_STANDARD)) {
969 do {
970 priority_bumped();
971 WinSendMsg(WinWindowFromID(hwnd,
972 SVBTN_LISTBOX),
973 LM_INSERTITEM,
974 MPFROM2SHORT(LIT_SORTASCENDING,0),
975 MPFROMP(findbuf.achName));
976 ulSearchCount = 1L;
[487]977 } while (!DosFindNext(hDir,
[2]978 &findbuf,
979 sizeof(FILEFINDBUF3),
980 &ulSearchCount));
981 DosFindClose(hDir);
982 priority_bumped();
983 }
984 x++;
985 }
986 DosError(FERR_DISABLEHARDERR);
987 }
[487]988 if (!WinSendDlgItemMsg(hwnd,
[2]989 SVBTN_LISTBOX,
990 LM_QUERYITEMCOUNT,
991 MPVOID,
992 MPVOID)) {
[487]993 WinEnableWindow(WinWindowFromID(hwnd,SVBTN_LISTBOX),
[2]994 FALSE);
[487]995 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID);
[2]996 }
997 WinSetDlgItemText(hwnd,
998 SVBTN_CURRENT,
999 (*lasttoolbox) ?
1000 lasttoolbox :
1001 "FM3TOOLS.DAT");
1002 break;
1003
1004 case UM_SETUP:
1005 WinSetFocus(HWND_DESKTOP,WinWindowFromID(hwnd,SVBTN_ENTRY));
1006 return 0;
1007
1008 case WM_CONTROL:
[487]1009 if (SHORT1FROMMP(mp1) == SVBTN_LISTBOX) {
[2]1010 SHORT sSelect;
1011 CHAR szBuffer[CCHMAXPATH];
1012
[487]1013 switch (SHORT2FROMMP(mp1)) {
[2]1014 case LN_SELECT:
1015 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,SVBTN_LISTBOX,
1016 LM_QUERYSELECTION,
1017 MPFROMSHORT(LIT_FIRST),
1018 MPVOID);
[487]1019 if (sSelect >= 0) {
[2]1020 *szBuffer = 0;
1021 WinSendDlgItemMsg(hwnd,SVBTN_LISTBOX,LM_QUERYITEMTEXT,
1022 MPFROM2SHORT(sSelect,CCHMAXPATH),
1023 MPFROMP(szBuffer));
[487]1024 if (*szBuffer)
[2]1025 WinSetDlgItemText(hwnd,SVBTN_ENTRY,szBuffer);
1026 }
1027 break;
1028
1029 case LN_ENTER:
1030 PostMsg(hwnd,WM_COMMAND,MPFROM2SHORT(DID_OK,0),MPVOID);
1031 break;
1032 }
1033 }
1034 return 0;
1035
1036 case WM_COMMAND:
[487]1037 switch (SHORT1FROMMP(mp1)) {
[2]1038 case IDM_HELP:
[487]1039 if (hwndHelp) {
1040 if (INSTDATA(hwnd))
[2]1041 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
1042 MPFROM2SHORT(HELP_SAVETOOLS,0),
1043 MPFROMSHORT(HM_RESOURCEID));
1044 else
1045 WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
1046 MPFROM2SHORT(HELP_LOADTOOLS,0),
1047 MPFROMSHORT(HM_RESOURCEID));
1048 }
1049 break;
1050
1051 case DID_CANCEL:
1052 WinDismissDlg(hwnd,0);
1053 break;
1054
1055 case DID_OK:
1056 {
[130]1057 BOOL saving = WinQueryWindowULong(hwnd,QWL_USER);
[2]1058 CHAR temptools[CCHMAXPATH];
1059
1060 strcpy(temptools,lasttoolbox);
[487]1061 if (fToolsChanged)
[2]1062 save_tools(NULL);
1063 WinQueryDlgItemText(hwnd,
1064 SVBTN_ENTRY,
1065 sizeof(lasttoolbox),
1066 lasttoolbox);
[487]1067 if (*lasttoolbox) {
1068 if (!strchr(lasttoolbox,'.'))
[2]1069 strcat(lasttoolbox,".TLS");
1070 }
[487]1071 if (saving && *lasttoolbox)
[2]1072 save_tools(NULL);
1073 else {
[487]1074 if (!load_tools(NULL)) {
[2]1075 strcpy(lasttoolbox,temptools);
[487]1076 if (!load_tools(NULL)) {
[2]1077 *lasttoolbox = 0;
1078 load_tools(NULL);
1079 }
1080 }
1081 }
1082 PrfWriteProfileString(fmprof,
1083 FM3Str,
1084 "LastToolBox",
1085 lasttoolbox);
1086 }
1087 WinDismissDlg(hwnd,1);
1088 break;
1089 }
1090 return 0;
1091 }
1092 return WinDefDlgProc(hwnd,msg,mp1,mp2);
1093}
1094
Note: See TracBrowser for help on using the repository browser.