source: trunk/dll/tools.c@ 123

Last change on this file since 123 was 123, checked in by root, 21 years ago

Rework lstrip/rstrip usage

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