source: trunk/dll/remap.c@ 1104

Last change on this file since 1104 was 1104, checked in by Gregg Young, 17 years ago

Replace save_dir2(dir) with strcpy(dir, pFM2SaveDirectory)

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