source: trunk/dll/remap.c@ 469

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

Use _fsopen to avoid noise complaints

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 26.4 KB
Line 
1
2/***********************************************************************
3
4 $Id: remap.c 469 2006-09-01 01:03:18Z root $
5
6 Copyright (c) 1993, 1998 M. Kimes
7 Copyright (c) 2004, 2006 Steven H.Levine
8
9 01 Aug 04 SHL Rework lstrip/rstrip usage
10 06 Aug 05 SHL Renames
11 22 Jul 06 SHL Check more run time errors
12 29 Jul 06 SHL Use xfgets
13 31 Aug 06 SHL Use _fsopen to avoid noise complaints
14
15***********************************************************************/
16
17#define INCL_WIN
18#define INCL_DOS
19#include <os2.h>
20
21#include <stdlib.h>
22#include <stdio.h>
23#include <string.h>
24#include <ctype.h>
25#include <time.h>
26#include <share.h>
27
28#include "fm3dll.h"
29#include "fm3dlg.h"
30#include "fm3str.h"
31
32#pragma data_seg(DATA1)
33
34static PSZ pszSrcFile = __FILE__;
35
36#pragma alloc_text(FMREMAP,RemapDlgProc,load_resources,save_resources)
37#pragma alloc_text(FMREMAP,add_resource,remove_resource,free_resources)
38
39typedef struct APPNOTIFY {
40 HAPP happ;
41 BOOL attach;
42 BOOL failedonce;
43 CHAR uncname[CCHMAXPATH];
44 CHAR device;
45 struct APPNOTIFY *next;
46 struct APPNOTIFY *prev;
47} APPNOTIFY;
48
49typedef struct LINKRES {
50 CHAR *res;
51 struct LINKRES *next;
52} LINKRES;
53
54static LINKRES *reshead = NULL;
55static BOOL loadedres = FALSE;
56
57#define MAXNUMRES 200
58
59
60VOID load_resources (VOID)
61{
62 /* load linked list of resources from RESOURCE.DAT file */
63
64 FILE *fp;
65 LINKRES *info,*last = NULL;
66 CHAR s[CCHMAXPATH + 14];
67 INT x = 0;
68
69 loadedres = TRUE;
70 save_dir2(s);
71 if(s[strlen(s) - 1] != '\\')
72 strcat(s,"\\");
73 strcat(s,"RESOURCE.DAT");
74 fp = _fsopen(s,"r",SH_DENYWR);
75 if (fp) {
76 while (x < MAXNUMRES && !feof(fp)) {
77 if (!xfgets_bstripcr(s,sizeof(s),fp,pszSrcFile,__LINE__))
78 break;
79 if (*s && *s != ';') {
80 info = xmalloc(sizeof(LINKRES),pszSrcFile,__LINE__);
81 if (info) {
82 info->res = xstrdup(s,pszSrcFile,__LINE__);
83 if (!info->res)
84 free(info);
85 else {
86 x++;
87 info->next = NULL;
88 if(!reshead)
89 reshead = info;
90 else
91 last->next = info;
92 last = info;
93 }
94 }
95 }
96 }
97 fclose(fp);
98 }
99}
100
101
102VOID save_resources (VOID)
103{
104 /* save linked list of resources to RESOURCE.DAT file */
105
106 LINKRES *info;
107 FILE *fp;
108 CHAR s[CCHMAXPATH + 14];
109
110 if(!loadedres)
111 return;
112 save_dir2(s);
113 if(s[strlen(s) - 1] != '\\')
114 strcat(s,"\\");
115 strcat(s,"RESOURCE.DAT");
116 if(reshead) {
117 fp = xfopen(s,"w",pszSrcFile,__LINE__);
118 if (fp) {
119 fputs(GetPString(IDS_REMOTEFILETEXT),fp);
120 info = reshead;
121 while (info) {
122 fprintf(fp,
123 "%0.*s\n",
124 CCHMAXPATH,
125 info->res);
126 info = info->next;
127 }
128 fclose(fp);
129 }
130 }
131 else
132 unlink(s);
133}
134
135
136BOOL add_resource (CHAR *res)
137{
138 LINKRES *info,*last = NULL;
139 INT x = 0;
140
141 if(!res || !*res)
142 return FALSE;
143 if(!loadedres)
144 load_resources();
145 info = reshead;
146 while(info) {
147 if(!stricmp(info->res,res))
148 return FALSE;
149 last = info;
150 info = info->next;
151 x++;
152 }
153 info = xmalloc(sizeof(LINKRES),pszSrcFile,__LINE__);
154 if(info) {
155 info->res = xstrdup(res,pszSrcFile,__LINE__);
156 if (!info->res)
157 free(info);
158 else {
159 info->next = NULL;
160 if(!reshead)
161 reshead = info;
162 else
163 last->next = info;
164 if(x > MAXNUMRES) {
165 info = reshead;
166 reshead = reshead->next;
167 free(info);
168 }
169 return TRUE;
170 }
171 }
172 return FALSE;
173}
174
175
176BOOL remove_resource (CHAR *res)
177{
178 LINKRES *info,*last = NULL;
179
180 if(!res || !*res)
181 return FALSE;
182 if(!loadedres)
183 load_resources();
184 info = reshead;
185 while(info) {
186 if(!stricmp(info->res,res)) {
187 if(last)
188 last->next = info->next;
189 else
190 reshead = info->next;
191 free(info->res);
192 free(info);
193 return TRUE;
194 }
195 last = info;
196 info = info->next;
197 }
198 return FALSE;
199}
200
201
202VOID free_resources (VOID)
203{
204 LINKRES *info,*next;
205
206 info = reshead;
207 while(info) {
208 next = info->next;
209 free(info->res);
210 free(info);
211 info = next;
212 }
213 reshead = NULL;
214 DosPostEventSem(CompactSem);
215}
216
217
218MRESULT EXPENTRY RemapDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
219{
220 static BOOL fRemapped;
221 static APPNOTIFY *apphead = NULL,*apptail = NULL;
222
223 switch(msg) {
224 case WM_INITDLG:
225 WinSendDlgItemMsg(hwnd,
226 MAP_ATTACHTO,
227 EM_SETTEXTLIMIT,
228 MPFROM2SHORT(CCHMAXPATH,0),
229 MPVOID);
230 fRemapped = FALSE;
231 if(!loadedres)
232 load_resources();
233 {
234 LINKRES *info;
235
236 info = reshead;
237 while(info) {
238 WinSendDlgItemMsg(hwnd,
239 MAP_ATTACHTO,
240 LM_INSERTITEM,
241 MPFROM2SHORT(LIT_END,0),
242 MPFROMP(info->res));
243 info = info->next;
244 }
245 }
246 {
247 ULONG ulDriveMap,ulDriveNum,x,ulType;
248 CHAR s[3] = " :";
249
250 DosError(FERR_DISABLEHARDERR);
251 if(!DosQCurDisk(&ulDriveNum,&ulDriveMap)) {
252 for(x = 0;x < 26;x++) {
253 if(!(driveflags[x] & DRIVE_IGNORE)) {
254 *s = (CHAR)x + 'A';
255 if(!(ulDriveMap & (1L << x)))
256 WinSendDlgItemMsg(hwnd,
257 MAP_ATTACHLIST,
258 LM_INSERTITEM,
259 MPFROM2SHORT(LIT_END,0),
260 MPFROMP(s));
261 else {
262 CheckDrive((CHAR)x + 'A',NULL,&ulType);
263 if(ulType & DRIVE_REMOTE)
264 WinSendDlgItemMsg(hwnd,
265 MAP_DETACHLIST,
266 LM_INSERTITEM,
267 MPFROM2SHORT(LIT_END,0),
268 MPFROMP(s));
269 }
270 }
271 }
272 }
273 else
274 WinDismissDlg(hwnd,0);
275 }
276 break;
277
278 case WM_CONTROL:
279 switch(SHORT1FROMMP(mp1)) {
280 case MAP_ATTACHLIST:
281 switch(SHORT2FROMMP(mp1)) {
282 case LN_ENTER:
283 PostMsg(hwnd,
284 WM_COMMAND,
285 MPFROM2SHORT(MAP_ATTACH,0),
286 MPVOID);
287 break;
288 }
289 break;
290 case MAP_DETACHLIST:
291 switch(SHORT2FROMMP(mp1)) {
292 case LN_ENTER:
293 PostMsg(hwnd,
294 WM_COMMAND,
295 MPFROM2SHORT(MAP_DETACH,0),
296 MPVOID);
297 break;
298 case LN_SELECT:
299 {
300 SHORT x;
301 CHAR d[3];
302
303 WinSetDlgItemText(hwnd,
304 MAP_ATTACHTO,
305 NullStr);
306 x = (SHORT)WinSendDlgItemMsg(hwnd,
307 MAP_DETACHLIST,
308 LM_QUERYSELECTION,
309 MPFROMSHORT(LIT_FIRST),
310 MPVOID);
311 if(x >= 0) {
312 *d = 0;
313 WinSendDlgItemMsg(hwnd,
314 MAP_DETACHLIST,
315 LM_QUERYITEMTEXT,
316 MPFROM2SHORT(x,sizeof(d)),
317 MPFROMP(d));
318 if(*d) {
319
320 CHAR buf[2048];
321 ULONG len;
322 APIRET rc;
323 FSQBUFFER2 *p2;
324
325 memset(buf,0,sizeof(buf));
326 len = sizeof(buf);
327 p2 = (FSQBUFFER2 *)buf;
328 DosError(FERR_DISABLEHARDERR);
329 rc = DosQueryFSAttach(d,
330 0,
331 FSAIL_QUERYNAME,
332 p2,
333 &len);
334 if(!rc) {
335
336 CHAR *p;
337
338 p = (char *)p2->szName;
339 p += p2->cbName + 1;
340 p += p2->cbFSDName + 1;
341 if(p2->cbFSAData)
342 WinSetDlgItemText(hwnd,
343 MAP_ATTACHTO,
344 p);
345 else
346 WinSetDlgItemText(hwnd,
347 MAP_ATTACHTO,
348 GetPString(IDS_UNKNOWNBRKTTEXT));
349 }
350 else
351 WinSetDlgItemText(hwnd,
352 MAP_ATTACHTO,
353 GetPString(IDS_UNKNOWNBRKTTEXT));
354 }
355 }
356 }
357 break;
358 }
359 break;
360 }
361 break;
362
363 case WM_APPTERMINATENOTIFY:
364 {
365 APPNOTIFY *info;
366 SHORT x,c;
367 CHAR d[3];
368 HWND hwndList;
369
370 if(!mp2)
371 fRemapped = TRUE;
372 info = apphead;
373GetRidOfIt:
374 while(info) {
375 if(info->happ == (HAPP)mp1) {
376/* Note: if this next line is removed, FM/2 will start the attach/detach
377 * request again, once for each request, to see if it might succeed and to
378 * ensure the request is seen by the user in case interaction is required.
379 */
380info->failedonce = TRUE;
381 hwndList = WinWindowFromID(hwnd,
382 (info->attach) ?
383 MAP_ATTACHLIST :
384 MAP_DETACHLIST);
385 if(!mp2 || (ULONG)mp2 == 1041 || info->failedonce) {
386 if(info->prev)
387 info->prev->next = info->next;
388 if(info->next)
389 info->next->prev = info->prev;
390 if(apphead == info)
391 apphead = info->next;
392 if(apptail == info)
393 apptail = info->prev;
394 }
395 if(!mp2) {
396 if(*info->uncname &&
397 stricmp(info->uncname,GetPString(IDS_UNKNOWNBRKTTEXT)) &&
398 add_resource(info->uncname)) {
399 save_resources();
400 WinSendDlgItemMsg(hwnd,
401 MAP_ATTACHTO,
402 LM_INSERTITEM,
403 MPFROM2SHORT(LIT_END,0),
404 MPFROMP(info->uncname));
405 }
406 c = (SHORT)WinSendMsg(hwndList,
407 LM_QUERYITEMCOUNT,
408 MPVOID,
409 MPVOID);
410 if(c > 0) {
411 for(x = 0;x < c;x++) {
412 *d = 0;
413 WinSendMsg(hwndList,
414 LM_QUERYITEMTEXT,
415 MPFROM2SHORT(x,sizeof(d)),
416 MPFROMP(d));
417 if(*d == info->device) {
418 WinSendMsg(hwndList,
419 LM_DELETEITEM,
420 MPFROMSHORT(x),
421 MPVOID);
422 hwndList = WinWindowFromID(hwnd,
423 (info->attach) ?
424 MAP_DETACHLIST :
425 MAP_ATTACHLIST);
426 d[1] = ':';
427 d[2] = 0;
428 WinSendMsg(hwndList,
429 LM_INSERTITEM,
430 MPFROM2SHORT(LIT_SORTASCENDING,0),
431 MPFROMP(d));
432 break;
433 }
434 }
435 }
436 }
437 else if((ULONG)mp2 != 1041 && !info->failedonce) {
438
439 PROGDETAILS pgd;
440 CHAR params[368],*p;
441 HAPP happ;
442
443 *d = info->device;
444 d[1] = ':';
445 d[2] = 0;
446 p = GetCmdSpec(FALSE);
447 memset(&pgd,0,sizeof(pgd));
448 pgd.Length = sizeof(pgd);
449 pgd.progt.progc = PROG_WINDOWABLEVIO;
450 pgd.progt.fbVisible = SHE_VISIBLE;
451 pgd.pszTitle = (info->attach) ? GetPString(IDS_ATTACHREQTEXT) :
452 GetPString(IDS_DETACHREQTEXT);
453 pgd.pszExecutable = p;
454 pgd.pszParameters = params;
455 pgd.pszStartupDir = NULL;
456 pgd.pszIcon = NULL;
457 pgd.pszEnvironment = NULL;
458 pgd.swpInitial.hwndInsertBehind = HWND_TOP;
459 pgd.swpInitial.hwnd = hwnd;
460 pgd.swpInitial.fl = SWP_SHOW | SWP_ACTIVATE;
461 if(info->attach)
462 sprintf(params,"/C NET USE %s \"%s\"",d,info->uncname);
463 else
464 sprintf(params,"/C NET USE %s /D",d);
465 info->failedonce = TRUE;
466 happ = WinStartApp(hwnd,&pgd,pgd.pszParameters,
467 NULL,SAF_MAXIMIZED);
468 if(!happ)
469 goto GetRidOfIt;
470 info->happ = happ;
471 break;
472 }
473 else if((ULONG)mp2 == 1041)
474 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,hwnd,
475 GetPString(IDS_ERRORTEXT),
476 "%s",
477 GetPString(IDS_CANTSTARTNETUSETEXT));
478 if(!mp2 || (ULONG)mp2 == 1041 || info->failedonce)
479 free(info);
480 break;
481 }
482 info = info->next;
483 }
484 }
485 break;
486
487 case WM_COMMAND:
488 switch(SHORT1FROMMP(mp1)) {
489 case MAP_DELETE:
490 {
491 SHORT x;
492 CHAR resource[CCHMAXPATH];
493
494 x = (SHORT)WinSendDlgItemMsg(hwnd,
495 MAP_ATTACHTO,
496 LM_QUERYSELECTION,
497 MPFROMSHORT(LIT_FIRST),
498 MPVOID);
499 if(x >= 0) {
500 *resource = 0;
501 WinSendDlgItemMsg(hwnd,
502 MAP_ATTACHTO,
503 LM_QUERYITEMTEXT,
504 MPFROM2SHORT(x,sizeof(resource)),
505 MPFROMP(resource));
506 bstrip(resource);
507 if(*resource) {
508 if(remove_resource(resource)) {
509 save_resources();
510 WinSendDlgItemMsg(hwnd,
511 MAP_ATTACHTO,
512 LM_DELETEITEM,
513 MPFROMSHORT(x),
514 MPVOID);
515 if(x)
516 x--;
517 WinSendDlgItemMsg(hwnd,
518 MAP_ATTACHTO,
519 LM_SELECTITEM,
520 MPFROMSHORT(x),
521 MPFROMSHORT(TRUE));
522 if(!(SHORT)WinSendDlgItemMsg(hwnd,
523 MAP_ATTACHTO,
524 LM_QUERYITEMCOUNT,
525 MPVOID,
526 MPVOID))
527 WinSetDlgItemText(hwnd,
528 MAP_ATTACHTO,
529 NullStr);
530 }
531 }
532 }
533 }
534 break;
535
536 case MAP_CLEAR:
537 free_resources();
538 save_resources();
539 WinSendDlgItemMsg(hwnd,
540 MAP_ATTACHTO,
541 LM_DELETEALL,
542 MPVOID,
543 MPVOID);
544 WinSetDlgItemText(hwnd,
545 MAP_ATTACHTO,
546 NullStr);
547 break;
548
549 case MAP_INFO:
550 case MAP_DETACH:
551 {
552 CHAR d[3],s[CCHMAXPATH];
553 SHORT x;
554
555 *s = 0;
556 WinQueryDlgItemText(hwnd,
557 MAP_ATTACHTO,
558 sizeof(s),
559 s);
560 bstrip(s);
561 x = (SHORT)WinSendDlgItemMsg(hwnd,
562 MAP_DETACHLIST,
563 LM_QUERYSELECTION,
564 MPFROMSHORT(LIT_FIRST),
565 MPVOID);
566 if(x >= 0) {
567 *d = 0;
568 WinSendDlgItemMsg(hwnd,
569 MAP_DETACHLIST,
570 LM_QUERYITEMTEXT,
571 MPFROM2SHORT(x,sizeof(d)),
572 MPFROMP(d));
573 if(*d) {
574 switch(SHORT1FROMMP(mp1)) {
575 case MAP_DETACH:
576 {
577 PROGDETAILS pgd;
578 CHAR params[368],*p;
579 HAPP happ;
580
581 p = GetCmdSpec(FALSE);
582 memset(&pgd,0,sizeof(pgd));
583 pgd.Length = sizeof(pgd);
584 pgd.progt.progc = PROG_WINDOWABLEVIO;
585 pgd.progt.fbVisible = SHE_VISIBLE;
586 pgd.pszTitle = GetPString(IDS_DETACHREQTEXT);
587 pgd.pszExecutable = p;
588 pgd.pszParameters = params;
589 pgd.pszStartupDir = NULL;
590 pgd.pszIcon = NULL;
591 pgd.pszEnvironment = NULL;
592 pgd.swpInitial.hwndInsertBehind = HWND_TOP;
593 pgd.swpInitial.hwnd = hwnd;
594 pgd.swpInitial.fl = SWP_SHOW | SWP_ACTIVATE;
595 sprintf(params,"/C NET USE %s /D",d);
596 happ = WinStartApp(hwnd,
597 &pgd,
598 pgd.pszParameters,
599 NULL,
600 SAF_MAXIMIZED);
601 if(happ) {
602
603 APPNOTIFY *info;
604
605 WinSetDlgItemText(hwnd,
606 MAP_ATTACHTO,
607 NullStr);
608 info = xmallocz(sizeof(APPNOTIFY),pszSrcFile,__LINE__);
609 if (info) {
610 info->happ = happ;
611 info->attach = FALSE;
612 info->failedonce = FALSE;
613 strcpy(info->uncname,s);
614 info->device = *d;
615 if(!apphead)
616 apphead = info;
617 else {
618 apptail->next = info;
619 info->prev = apptail;
620 }
621 apptail = info;
622 }
623 }
624 else
625 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
626 hwnd,
627 GetPString(IDS_ERRORTEXT),
628 GetPString(IDS_CANTSTARTTEXT),
629 p,
630 params);
631 }
632#ifdef NEVER // fixme to be gone?
633 DosError(FERR_DISABLEHARDERR);
634 rc = DosFSAttach(d,
635 s,
636 d,
637 strlen(d) + 1,
638 FS_DETACH);
639 if (rc) {
640 Dos_Error(MB_CANCEL,
641 rc,
642 hwnd,
643 pszSrcFile,
644 __LINE__,
645 GetPString(IDS_DETACHFAILEDTEXT),
646 d,
647 s);
648 }
649 else {
650 fRemapped = TRUE;
651 WinSendDlgItemMsg(hwnd,
652 MAP_DETACHLIST,
653 LM_DELETEITEM,
654 MPFROMSHORT(x),
655 MPVOID);
656 WinSendDlgItemMsg(hwnd,
657 MAP_ATTACHLIST,
658 LM_INSERTITEM,
659 MPFROM2SHORT(LIT_SORTASCENDING,0),
660 MPFROMP(d));
661 }
662#endif // fixme to be gone?
663 break;
664
665 case MAP_INFO:
666 runemf2(SEPARATEKEEP | WINDOWED | MAXIMIZED,
667 hwnd,
668 NULL,
669 NULL,
670 "%s /C NET USE %s",
671 GetCmdSpec(FALSE),
672 d);
673 break;
674 }
675 }
676 }
677 }
678 break;
679
680 case MAP_ATTACH:
681 {
682 CHAR d[3],s[CCHMAXPATH];
683 SHORT x;
684
685 *s = 0;
686 WinQueryDlgItemText(hwnd,
687 MAP_ATTACHTO,
688 sizeof(s),
689 s);
690 bstrip(s);
691 if(*s) {
692 x = (SHORT)WinSendDlgItemMsg(hwnd,
693 MAP_ATTACHLIST,
694 LM_QUERYSELECTION,
695 MPFROMSHORT(LIT_FIRST),
696 MPVOID);
697 if(x >= 0) {
698 *d = 0;
699 WinSendDlgItemMsg(hwnd,
700 MAP_ATTACHLIST,
701 LM_QUERYITEMTEXT,
702 MPFROM2SHORT(x,sizeof(d)),
703 MPFROMP(d));
704 if(*d) {
705
706 PROGDETAILS pgd;
707 CHAR params[368],*p;
708 HAPP happ;
709
710 p = GetCmdSpec(FALSE);
711 memset(&pgd,0,sizeof(pgd));
712 pgd.Length = sizeof(pgd);
713 pgd.progt.progc = PROG_WINDOWABLEVIO;
714 pgd.progt.fbVisible = SHE_VISIBLE;
715 pgd.pszTitle = GetPString(IDS_ATTACHREQTEXT);
716 pgd.pszExecutable = p;
717 pgd.pszParameters = params;
718 pgd.pszStartupDir = NULL;
719 pgd.pszIcon = NULL;
720 pgd.pszEnvironment = NULL;
721 pgd.swpInitial.hwndInsertBehind = HWND_TOP;
722 pgd.swpInitial.hwnd = hwnd;
723 pgd.swpInitial.fl = SWP_SHOW | SWP_ACTIVATE;
724 sprintf(params,"/C NET USE %s \"%s\"",d,s);
725 happ = WinStartApp(hwnd,
726 &pgd,
727 pgd.pszParameters,
728 NULL,
729 SAF_MAXIMIZED);
730 if(happ) {
731
732 APPNOTIFY *info;
733
734 info = xmallocz(sizeof(APPNOTIFY),pszSrcFile,__LINE__);
735 if (info) {
736 info->happ = happ;
737 info->attach = TRUE;
738 info->failedonce = FALSE;
739 strcpy(info->uncname,s);
740 info->device = *d;
741 if(!apphead)
742 apphead = info;
743 else {
744 apptail->next = info;
745 info->prev = apptail;
746 }
747 apptail = info;
748 }
749 }
750 else
751 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
752 hwnd,
753 GetPString(IDS_ERRORTEXT),
754 GetPString(IDS_CANTSTARTTEXT),
755 p,
756 params);
757#ifdef NEVER // fixme to be gone?
758 DosError(FERR_DISABLEHARDERR);
759 rc = DosFSAttach(d,s,s,strlen(s) + 1,FS_ATTACH);
760 if (rc) {
761 Dos_Error(MB_CANCEL,
762 rc,
763 hwnd,
764 pszSrcFile,
765 __LINE__,
766 GetPString(IDS_ATTACHFAILEDTEXT),
767 s,
768 d);
769 }
770 else {
771 fRemapped = TRUE;
772 WinSendDlgItemMsg(hwnd,
773 MAP_ATTACHLIST,
774 LM_DELETEITEM,
775 MPFROMSHORT(x),
776 MPVOID);
777 WinSendDlgItemMsg(hwnd,
778 MAP_DETACHLIST,
779 LM_INSERTITEM,
780 MPFROM2SHORT(LIT_SORTASCENDING,0),
781 MPFROMP(d));
782 }
783#endif // fixme to be gone?
784 }
785 }
786 }
787 }
788 break;
789
790 case IDM_HELP:
791 if(hwndHelp)
792 WinSendMsg(hwndHelp,
793 HM_DISPLAY_HELP,
794 MPFROM2SHORT(HELP_REMAP,0),
795 MPFROMSHORT(HM_RESOURCEID));
796 break;
797
798 case DID_CANCEL:
799 if(fRemapped) {
800 if(hwndTree)
801 PostMsg(hwndTree,
802 WM_COMMAND,
803 MPFROM2SHORT(IDM_RESCAN,0),
804 MPVOID);
805 else
806 FillInDriveFlags(NULL);
807 if(hwndMain)
808 PostMsg(hwndMain,
809 UM_BUILDDRIVEBAR,
810 MPVOID,
811 MPVOID);
812 }
813 WinDismissDlg(hwnd,0);
814 break;
815 }
816 return 0;
817
818 case WM_DESTROY:
819 if(apphead) {
820
821 APPNOTIFY *info,*next;
822
823 info = apphead;
824 while(info) {
825 next = info->next;
826 free(info);
827 info = next;
828 }
829 apphead = apptail = NULL;
830 saymsg(MB_YESNOCANCEL,
831 HWND_DESKTOP,
832 GetPString(IDS_NOTICETITLETEXT),
833 "%s",
834 GetPString(IDS_REMAPNOTICETEXT));
835 }
836 free_resources();
837 loadedres = FALSE;
838 break;
839 }
840 return WinDefDlgProc(hwnd,msg,mp1,mp2);
841}
842
Note: See TracBrowser for help on using the repository browser.