source: trunk/dll/remap.c@ 2

Last change on this file since 2 was 2, checked in by root, 23 years ago

Initial revision

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