source: trunk/dll/remap.c @ 689

Last change on this file since 689 was 689, checked in by Steven Levine, 13 years ago

Commit OpenWatcom? compatibility updates

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