source: trunk/dll/remap.c@ 469

Last change on this file since 469 was 469, checked in by root, 19 years ago

Use _fsopen to avoid noise complaints

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