source: trunk/dll/tools.c@ 401

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

Use xfgets, xfgets_bstripcr

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