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
RevLine 
[123]1
2/***********************************************************************
3
4 $Id: remap.c 1104 2008-08-02 20:33:03Z gyoung $
5
[246]6 Copyright (c) 1993, 1998 M. Kimes
[1082]7 Copyright (c) 2004, 2008 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
[793]14 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[985]15 29 Feb 08 GKY Use xfree where appropriate
[1082]16 19 Jul 08 GKY Replace save_dir2(dir) with pFM2SaveDirectory and use BldFullPathName
[123]17
18***********************************************************************/
19
[2]20#include <stdlib.h>
21#include <string.h>
22#include <share.h>
[689]23#include <io.h> // unlink
[404]24
[907]25#define INCL_DOS
26#define INCL_WIN
27#define INCL_LONGLONG // dircnrs.h
28
[2]29#include "fm3dlg.h"
30#include "fm3str.h"
[907]31#include "errutil.h" // Dos_Error...
32#include "strutil.h" // GetPString
[1082]33#include "pathutil.h" // BldFullPathName
[907]34#include "fm3dll.h"
[1039]35#include "fortify.h"
[2]36
37#pragma data_seg(DATA1)
[353]38
39static PSZ pszSrcFile = __FILE__;
40
[551]41typedef struct APPNOTIFY
42{
43 HAPP happ;
44 BOOL attach;
45 BOOL failedonce;
46 CHAR uncname[CCHMAXPATH];
47 CHAR device;
[2]48 struct APPNOTIFY *next;
49 struct APPNOTIFY *prev;
[551]50}
51APPNOTIFY;
[2]52
[551]53typedef struct LINKRES
54{
55 CHAR *res;
[2]56 struct LINKRES *next;
[551]57}
58LINKRES;
[2]59
[551]60static LINKRES *reshead = NULL;
61static BOOL loadedres = FALSE;
[2]62
63#define MAXNUMRES 200
64
[551]65VOID load_resources(VOID)
[353]66{
[2]67 /* load linked list of resources from RESOURCE.DAT file */
68
[551]69 FILE *fp;
70 LINKRES *info, *last = NULL;
71 CHAR s[CCHMAXPATH + 14];
72 INT x = 0;
[2]73
74 loadedres = TRUE;
[1082]75 BldFullPathName(s, pFM2SaveDirectory, "RESOURCE.DAT");
[551]76 fp = _fsopen(s, "r", SH_DENYWR);
[353]77 if (fp) {
[404]78 while (x < MAXNUMRES && !feof(fp)) {
[551]79 if (!xfgets_bstripcr(s, sizeof(s), fp, pszSrcFile, __LINE__))
80 break;
[404]81 if (*s && *s != ';') {
[551]82 info = xmalloc(sizeof(LINKRES), pszSrcFile, __LINE__);
83 if (info) {
84 info->res = xstrdup(s, pszSrcFile, __LINE__);
85 if (!info->res)
[1039]86 free(info);
[353]87 else {
[551]88 x++;
89 info->next = NULL;
90 if (!reshead)
91 reshead = info;
92 else
93 last->next = info;
94 last = info;
95 }
96 }
[2]97 }
98 }
99 fclose(fp);
100 }
101}
102
[551]103VOID save_resources(VOID)
[353]104{
[2]105 /* save linked list of resources to RESOURCE.DAT file */
106
107 LINKRES *info;
[551]108 FILE *fp;
109 CHAR s[CCHMAXPATH + 14];
[2]110
[551]111 if (!loadedres)
[2]112 return;
[1082]113 BldFullPathName(s, pFM2SaveDirectory, "RESOURCE.DAT");
[551]114 if (reshead) {
115 fp = xfopen(s, "w", pszSrcFile, __LINE__);
[353]116 if (fp) {
[551]117 fputs(GetPString(IDS_REMOTEFILETEXT), fp);
[2]118 info = reshead;
[353]119 while (info) {
[551]120 fprintf(fp, "%0.*s\n", CCHMAXPATH, info->res);
121 info = info->next;
[2]122 }
123 fclose(fp);
124 }
125 }
126 else
127 unlink(s);
128}
129
[551]130BOOL add_resource(CHAR * res)
[353]131{
[551]132 LINKRES *info, *last = NULL;
133 INT x = 0;
[2]134
[551]135 if (!res || !*res)
[2]136 return FALSE;
[551]137 if (!loadedres)
[2]138 load_resources();
139 info = reshead;
[551]140 while (info) {
141 if (!stricmp(info->res, res))
[2]142 return FALSE;
143 last = info;
144 info = info->next;
145 x++;
146 }
[551]147 info = xmalloc(sizeof(LINKRES), pszSrcFile, __LINE__);
148 if (info) {
149 info->res = xstrdup(res, pszSrcFile, __LINE__);
[353]150 if (!info->res)
[1039]151 free(info);
[353]152 else {
[2]153 info->next = NULL;
[551]154 if (!reshead)
155 reshead = info;
[2]156 else
[551]157 last->next = info;
158 if (x > MAXNUMRES) {
159 info = reshead;
160 reshead = reshead->next;
[1039]161 free(info);
[2]162 }
163 return TRUE;
164 }
165 }
166 return FALSE;
167}
168
[551]169BOOL remove_resource(CHAR * res)
[353]170{
[551]171 LINKRES *info, *last = NULL;
[2]172
[551]173 if (!res || !*res)
[2]174 return FALSE;
[551]175 if (!loadedres)
[2]176 load_resources();
177 info = reshead;
[551]178 while (info) {
179 if (!stricmp(info->res, res)) {
180 if (last)
181 last->next = info->next;
[2]182 else
[551]183 reshead = info->next;
[1009]184 xfree(info->res, pszSrcFile, __LINE__);
[1039]185 free(info);
[2]186 return TRUE;
187 }
188 last = info;
189 info = info->next;
190 }
191 return FALSE;
192}
193
[551]194VOID free_resources(VOID)
[353]195{
[551]196 LINKRES *info, *next;
[2]197
198 info = reshead;
[551]199 while (info) {
[2]200 next = info->next;
[1009]201 xfree(info->res, pszSrcFile, __LINE__);
[1039]202 free(info);
[2]203 info = next;
204 }
205 reshead = NULL;
206 DosPostEventSem(CompactSem);
207}
208
[551]209MRESULT EXPENTRY RemapDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[353]210{
[2]211 static BOOL fRemapped;
[551]212 static APPNOTIFY *apphead = NULL, *apptail = NULL;
[2]213
[551]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;
[2]224
[551]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;
[2]232 }
[551]233 }
234 {
235 ULONG ulDriveMap, ulDriveNum, x, ulType;
236 CHAR s[3] = " :";
[2]237
[551]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';
[766]243 if (!(ulDriveMap & (1 << x)))
[551]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 }
[2]258 }
[551]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 }
[2]272 break;
[551]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];
[2]282
[551]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) {
[2]295
[551]296 CHAR buf[2048];
297 ULONG len;
298 APIRET rc;
299 FSQBUFFER2 *p2;
[2]300
[551]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) {
[2]307
[551]308 CHAR *p;
[2]309
[551]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;
[2]328 }
329 break;
[551]330 }
331 break;
[2]332
[551]333 case WM_APPTERMINATENOTIFY:
334 {
335 APPNOTIFY *info;
336 SHORT x, c;
337 CHAR d[3];
338 HWND hwndList;
[2]339
[551]340 if (!mp2)
341 fRemapped = TRUE;
342 info = apphead;
343 GetRidOfIt:
344 while (info) {
345 if (info->happ == (HAPP) mp1) {
[2]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 */
[551]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) {
[2]399
[551]400 PROGDETAILS pgd;
401 CHAR params[368], *p;
402 HAPP happ;
[2]403
[551]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)
[1039]439 free(info);
[551]440 break;
441 }
442 info = info->next;
[2]443 }
[551]444 }
445 break;
[2]446
[551]447 case WM_COMMAND:
448 switch (SHORT1FROMMP(mp1)) {
449 case MAP_DELETE:
450 {
451 SHORT x;
452 CHAR resource[CCHMAXPATH];
[2]453
[551]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;
[2]488
[551]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;
[2]495
[551]496 case MAP_INFO:
497 case MAP_DETACH:
498 {
499 CHAR d[3], s[CCHMAXPATH];
500 SHORT x;
[2]501
[551]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;
[2]522
[551]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) {
[2]542
[551]543 APPNOTIFY *info;
[2]544
[551]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 }
[353]568#ifdef NEVER // fixme to be gone?
[551]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;
[2]591
[551]592 case MAP_INFO:
593 runemf2(SEPARATEKEEP | WINDOWED | MAXIMIZED,
[888]594 hwnd, pszSrcFile, __LINE__,
[551]595 NULL, NULL, "%s /C NET USE %s", GetCmdSpec(FALSE), d);
596 break;
597 }
598 }
599 }
600 }
601 break;
[2]602
[551]603 case MAP_ATTACH:
604 {
605 CHAR d[3], s[CCHMAXPATH];
606 SHORT x;
[2]607
[551]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) {
[2]623
[551]624 PROGDETAILS pgd;
625 CHAR params[368], *p;
626 HAPP happ;
[2]627
[551]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) {
[2]647
[551]648 APPNOTIFY *info;
[2]649
[551]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);
[353]671#ifdef NEVER // fixme to be gone?
[551]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;
[2]698
[551]699 case IDM_HELP:
700 if (hwndHelp)
701 WinSendMsg(hwndHelp,
702 HM_DISPLAY_HELP,
703 MPFROM2SHORT(HELP_REMAP, 0), MPFROMSHORT(HM_RESOURCEID));
704 break;
[2]705
[551]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);
[2]714 }
[551]715 WinDismissDlg(hwnd, 0);
716 break;
717 }
718 return 0;
[2]719
[551]720 case WM_DESTROY:
721 if (apphead) {
[2]722
[551]723 APPNOTIFY *info, *next;
[2]724
[551]725 info = apphead;
726 while (info) {
727 next = info->next;
[1039]728 free(info);
[551]729 info = next;
[2]730 }
[551]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;
[2]740 }
[551]741 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]742}
[793]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.