source: trunk/dll/remap.c@ 433

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

Use xfgets

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