source: trunk/dll/remap.c@ 304

Last change on this file since 304 was 246, checked in by root, 20 years ago

Renames

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