source: trunk/dll/remap.c@ 201

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