source: trunk/dll/info.c@ 1347

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

More code cleanup

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 31.3 KB
Line 
1
2/***********************************************************************
3
4 $Id: info.c 1347 2008-12-20 04:22:16Z gyoung $
5
6 Info windows
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2001, 2008 Steven H. Levine
10
11 16 Oct 02 SHL Handle large partitions
12 12 Feb 03 SHL FileInfoProc: standardize EA math
13 01 Aug 04 SHL Rework lstrip/rstrip usage
14 23 May 05 SHL Use QWL_USER
15 25 May 05 SHL Use ULONGLONG and CommaFmtULL
16 05 Jun 05 SHL Use QWL_USER
17 14 Jul 06 SHL Use Runtime_Error
18 24 Mar 07 SHL Correct FileInfoProc binary file detect
19 24 Mar 07 SHL Correct FileInfoProc/IconProc race crash
20 19 Apr 07 SHL Sync with AcceptOneDrop GetOneDrop mods
21 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
22 25 Aug 07 SHL Drop list from FILESTUF - data not static
23 25 Aug 07 SHL IconProc: do not use freed memory - random bad things happen
24 27 Sep 07 SHL Correct ULONGLONG size formatting
25 30 Dec 07 GKY Use CommaFmtULL
26 29 Feb 08 GKY Use xfree where appropriate
27
28***********************************************************************/
29
30#include <stdlib.h>
31#include <string.h>
32#include <ctype.h>
33#include <share.h>
34
35#define INCL_DOS
36#define INCL_WIN
37#define INCL_GPI
38#define INCL_LONGLONG
39
40#include "fm3dll.h"
41#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
42#include "draglist.h" // Data declaration(s)
43#include "notebook.h" // Data declaration(s)
44#include "inis.h" // Data declaration(s)
45#include "init.h" // Data declaration(s)
46#include "mainwnd.h" // Data declaration(s)
47#include "fm3dlg.h"
48#include "fm3str.h"
49#include "makelist.h" // AddToList
50#include "errutil.h" // Dos_Error...
51#include "strutil.h" // GetPString
52#include "attribs.h" // AttrListDlgProc
53#include "defview.h" // DefaultView
54#include "info.h"
55#include "valid.h" // CheckDrive, IsBinary
56#include "seticon.h" // SetIconDlgProc
57#include "droplist.h" // AcceptOneDrop, DropHelp, GetOneDrop
58#include "eas.h" // DisplayEAsProc
59#include "misc.h" // DrawTargetEmphasis
60#include "notify.h" // Notify
61#include "shadow.h" // OpenObject
62#include "chklist.h" // PopupMenu
63#include "presparm.h" // SetPresParams
64#include "strips.h" // bstrip
65#include "commafmt.h" // CommaFmtULL
66#include "wrappers.h" // xDosFindFirst
67#include "fortify.h"
68
69// Data definitions
70#pragma data_seg(DATA1)
71static PSZ pszSrcFile = __FILE__;
72
73#pragma data_seg(GLOBAL1)
74INT driveflags[26];
75
76CHAR *FlagMsg(CHAR drive, CHAR * buffer)
77{
78 ULONG x;
79 BOOL once = FALSE;
80 register CHAR *p;
81
82 if (buffer) {
83 *buffer = 0;
84 p = buffer;
85 if (isalpha(drive)) {
86 if (driveflags[toupper(drive) - 'A']) {
87 for (x = IDS_FLREMOVABLETEXT; x < IDS_FLRAMDISKTEXT + 1; x++) {
88 if (driveflags[toupper(drive) - 'A'] &
89 (1 << (x - IDS_FLREMOVABLETEXT))) {
90 if (once) {
91 *p = ' ';
92 p++;
93 }
94 else
95 once = TRUE;
96 *p = '[';
97 p++;
98 strcpy(p, GetPString(x));
99 p += strlen(p);
100 *p = ']';
101 p++;
102 *p = 0;
103 }
104 }
105 }
106 else
107 strcpy(buffer, "[None]");
108 }
109 }
110 return buffer;
111}
112
113MRESULT EXPENTRY DrvInfoProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
114{
115 CHAR *pszFileName;
116 CHAR szMB[20];
117 CHAR szKB[20];
118 CHAR szUnits[20];
119 APIRET rc;
120
121 switch (msg) {
122 case WM_INITDLG:
123 if (mp2) {
124
125 CHAR s[CCHMAXPATH * 2];
126 ULONG type;
127
128 pszFileName = (CHAR *)mp2;
129 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) pszFileName);
130 WinSendDlgItemMsg(hwnd,
131 INFO_LABEL,
132 EM_SETTEXTLIMIT,
133 MPFROM2SHORT(CCHMAXPATHCOMP, 0), MPVOID);
134 if (!(driveflags[toupper(*pszFileName) - 'A'] & DRIVE_NOSTATS)){
135 WinSendDlgItemMsg(hwnd,
136 INFO_FREE,
137 SLM_SETSLIDERINFO,
138 MPFROM2SHORT(SMA_SLIDERARMDIMENSIONS, 0),
139 MPFROM2SHORT(0, 0));
140 WinSendDlgItemMsg(hwnd,
141 INFO_USED,
142 SLM_SETSLIDERINFO,
143 MPFROM2SHORT(SMA_SLIDERARMDIMENSIONS, 0),
144 MPFROM2SHORT(0, 0));
145 }
146 if (driveflags[toupper(*pszFileName) - 'A'] & DRIVE_NOTWRITEABLE) {
147 WinSendDlgItemMsg(hwnd,
148 INFO_LABEL,
149 EM_SETREADONLY, MPFROM2SHORT(TRUE, 0), MPVOID);
150 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, DID_OK));
151 }
152 if (IsFullName(pszFileName)) {
153
154 CHAR FileSystem[CCHMAXPATH * 2];
155
156 sprintf(FileSystem,
157 GetPString(IDS_DRIVEINFOTITLETEXT), toupper(*pszFileName));
158 WinSetWindowText(hwnd, FileSystem);
159 if (CheckDrive(toupper(*pszFileName), FileSystem, &type) != -1){
160
161 FSALLOCATE fsa;
162
163 if (type & (DRIVE_REMOTE | DRIVE_ZIPSTREAM | DRIVE_VIRTUAL)) {
164
165 CHAR Path[3], *pfsn, *pfsd;
166 ULONG Size;
167 APIRET rc;
168 PFSQBUFFER2 pfsq;
169
170 Path[0] = toupper(*pszFileName);
171 Path[1] = ':';
172 Path[2] = 0;
173 Size = sizeof(s);
174 DosError(FERR_DISABLEHARDERR);
175 rc = DosQueryFSAttach(Path,
176 0, FSAIL_QUERYNAME, (PFSQBUFFER2) s, &Size);
177 if (!rc) {
178 pfsq = (PFSQBUFFER2) s;
179 pfsn = (PCHAR)(pfsq->szName) + pfsq->cbName + 1;
180 pfsd = pfsn + pfsq->cbFSDName + 1;
181 if (pfsq->cbFSAData && pfsd && *pfsd) {
182 sprintf(s, " (%s)", pfsd);
183 WinSetDlgItemText(hwnd, INFO_REALPATH, s);
184 }
185 }
186 }
187
188 DosError(FERR_DISABLEHARDERR);
189 if (!DosQueryFSInfo(toupper(*pszFileName) - '@',
190 FSIL_ALLOC, &fsa, sizeof(FSALLOCATE))) {
191
192 struct
193 {
194 ULONG serial;
195 CHAR volumelength;
196 CHAR volumelabel[CCHMAXPATH];
197 }
198 volser;
199 USHORT percentfree, percentused;
200
201 memset(&volser, 0, sizeof(volser));
202 DosError(FERR_DISABLEHARDERR);
203 if (!DosQueryFSInfo(toupper(*pszFileName) - '@',
204 FSIL_VOLSER,
205 &volser, (ULONG) sizeof(volser))) {
206 WinSetDlgItemText(hwnd, INFO_FS, FileSystem);
207 WinSetDlgItemText(hwnd, INFO_LABEL, volser.volumelabel);
208 sprintf(s, "%lx", volser.serial);
209 WinSetDlgItemText(hwnd, INFO_SERIAL, s);
210 FlagMsg(*pszFileName, s);
211 WinSetDlgItemText(hwnd, INFO_FLAGS, s);
212 if (!(driveflags[toupper(*pszFileName) - 'A'] & DRIVE_NOSTATS)){
213 CommaFmtULL(szMB, sizeof(szMB),
214 (ULONGLONG) fsa.cUnit *
215 (fsa.cSectorUnit * fsa.cbSector), 'M');
216 CommaFmtULL(szKB, sizeof(szKB),
217 (ULONGLONG) fsa.cUnit *
218 (fsa.cSectorUnit * fsa.cbSector), 'K');
219 CommaFmtULL(szUnits, sizeof(szUnits),
220 (ULONGLONG) fsa.cUnit, ' ');
221 sprintf(s, "%s, %s, %s %s%s", szMB, szKB, szUnits, GetPString(IDS_UNITTEXT), &"s"[fsa.cUnit == 1L]); // hack cough
222 WinSetDlgItemText(hwnd, INFO_TOTAL, s);
223
224 CommaFmtULL(szMB, sizeof(szMB),
225 (ULONGLONG) fsa.cUnitAvail *
226 (fsa.cSectorUnit * fsa.cbSector), 'M');
227 CommaFmtULL(szKB, sizeof(szKB),
228 (ULONGLONG) fsa.cUnitAvail *
229 (fsa.cSectorUnit * fsa.cbSector), 'K');
230 CommaFmtULL(szUnits, sizeof(szUnits),
231 (ULONGLONG) fsa.cUnitAvail, ' ');
232 sprintf(s,
233 "%s, %s, %s %s%s",
234 szMB, szKB, szUnits,
235 GetPString(IDS_UNITTEXT), &"s"[fsa.cUnitAvail == 1L]);
236 WinSetDlgItemText(hwnd, INFO_AVAILABLE, s);
237 sprintf(s,
238 GetPString(IDS_SECTORSTEXT),
239 fsa.cbSector,
240 fsa.cSectorUnit, &"s"[fsa.cSectorUnit == 1L]);
241 WinSetDlgItemText(hwnd, INFO_ALLOCUNITS, s);
242
243 percentfree = (fsa.cUnitAvail && fsa.cUnit) ?
244 (fsa.cUnitAvail * 100) / fsa.cUnit : 0;
245 if (!percentfree && fsa.cUnitAvail)
246 percentfree = 1;
247 percentused = 100 - percentfree;
248 WinSendDlgItemMsg(hwnd,
249 INFO_USED,
250 SLM_SETSLIDERINFO,
251 MPFROM2SHORT(SMA_SLIDERARMPOSITION,
252 SMA_INCREMENTVALUE),
253 MPFROMSHORT(percentused));
254 WinSendDlgItemMsg(hwnd,
255 INFO_FREE,
256 SLM_SETSLIDERINFO,
257 MPFROM2SHORT(SMA_SLIDERARMPOSITION,
258 SMA_INCREMENTVALUE),
259 MPFROMSHORT(percentfree));
260 sprintf(s, "%u%%", percentused);
261 WinSetDlgItemText(hwnd, INFO_USEDPERCENT, s);
262 sprintf(s, "%u%%", percentfree);
263 WinSetDlgItemText(hwnd, INFO_FREEPERCENT, s);
264 }
265 else
266 WinSetDlgItemText(hwnd, INFO_AVAILABLE, GetPString(IDS_STATSMEANINGLESSTEXT));
267 }
268 else {
269 sprintf(FileSystem,
270 GetPString(IDS_CANTQUERYVOLTEXT),
271 toupper(*pszFileName));
272 Notify(FileSystem);
273 WinDismissDlg(hwnd, 0);
274 }
275 }
276 else {
277 sprintf(FileSystem,
278 GetPString(IDS_CANTQUERYALLOCTEXT),
279 toupper(*pszFileName));
280 Notify(FileSystem);
281 WinDismissDlg(hwnd, 0);
282 }
283 }
284 else {
285 FlagMsg(*pszFileName, s);
286 sprintf(FileSystem,
287 GetPString(IDS_DRIVEINACCESSIBLETEXT),
288 toupper(*pszFileName), s);
289 Notify(FileSystem);
290 WinDismissDlg(hwnd, 0);
291 }
292 }
293 else {
294 WinDismissDlg(hwnd, 0);
295 }
296 }
297 else
298 WinDismissDlg(hwnd, 0);
299 break;
300
301 case WM_CONTROL:
302 return 0;
303
304 case WM_COMMAND:
305 switch (SHORT1FROMMP(mp1)) {
306 case DID_CANCEL:
307 WinDismissDlg(hwnd, 0);
308 break;
309
310 case IDM_HELP:
311 if (hwndHelp)
312 WinSendMsg(hwndHelp,
313 HM_DISPLAY_HELP,
314 MPFROM2SHORT(HELP_DRVINFO, 0), MPFROMSHORT(HM_RESOURCEID));
315 break;
316
317 case DID_OK:
318 pszFileName = INSTDATA(hwnd);
319 if (!(driveflags[toupper(*pszFileName) - 'A'] & DRIVE_NOTWRITEABLE)) {
320
321 CHAR s[CCHMAXPATHCOMP + 3];
322
323 *s = 0;
324 WinQueryDlgItemText(hwnd, INFO_LABEL, CCHMAXPATHCOMP, s);
325 bstrip(s);
326 if (*s) {
327 struct
328 {
329 ULONG serial;
330 CHAR volumelength;
331 CHAR volumelabel[CCHMAXPATH];
332 }
333 volser;
334
335 memset(&volser, 0, sizeof(volser));
336 DosError(FERR_DISABLEHARDERR);
337 if (!DosQueryFSInfo(toupper(*pszFileName) - '@',
338 FSIL_VOLSER,
339 &volser,
340 (ULONG) sizeof(volser)) &&
341 stricmp(s, volser.volumelabel)) {
342 memmove(s + 1, s, strlen(s) + 1);
343 *s = strlen(s + 1);
344 DosError(FERR_DISABLEHARDERR);
345 rc = DosSetFSInfo(toupper(*pszFileName) - '@',
346 2L, (PVOID) s, (ULONG) sizeof(s));
347 if (rc) {
348 Dos_Error(MB_CANCEL, rc, hwnd, __FILE__, __LINE__,
349 "DosSetFSInfo failed");
350 }
351 }
352 }
353 }
354 WinDismissDlg(hwnd, 1);
355 break;
356 }
357 return 0;
358 }
359 return WinDefDlgProc(hwnd, msg, mp1, mp2);
360}
361
362typedef struct {
363 USHORT size;
364 CHAR szFileName[CCHMAXPATH];
365 BOOL madechanges;
366} FILESTUF;
367
368typedef struct {
369 USHORT size;
370 PFNWP oldproc;
371 FILESTUF *pfs;
372 HWND lasthwndMenu;
373} ICONSTUF;
374
375/*
376 * subclass routine to allow changing a program's icon
377 */
378
379MRESULT EXPENTRY IconProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
380{
381 ICONSTUF *pis = (ICONSTUF *)WinQueryWindowPtr(hwnd, QWL_USER);
382 MRESULT mr;
383 CHAR *p;
384
385 static BOOL emphasized = FALSE;
386
387 if (!pis) {
388 Runtime_Error(pszSrcFile, __LINE__, "no data");
389 if (msg != WM_DESTROY)
390 return WinDefWindowProc(hwnd, msg, mp1, mp2);
391 }
392
393 switch (msg) {
394 case DM_DRAGOVER:
395 if (!emphasized) {
396 emphasized = TRUE;
397 DrawTargetEmphasis(hwnd, emphasized);
398 }
399 if (AcceptOneDrop(hwnd, mp1, mp2))
400 return MRFROM2SHORT(DOR_DROP, DO_MOVE);
401 return MRFROM2SHORT(DOR_NEVERDROP, 0);
402
403 case DM_DRAGLEAVE:
404 emphasized = FALSE;
405 DrawTargetEmphasis(hwnd, emphasized);
406 break;
407
408 case DM_DROPHELP:
409 DropHelp(mp1, mp2, hwnd, GetPString(IDS_DROPCHGICONHELPTEXT));
410 return 0;
411
412 case DM_DROP:
413 {
414 HPOINTER hptr;
415 CHAR szFrom[CCHMAXPATH + 2];
416 ICONINFO ici;
417
418 emphasized = FALSE;
419 DrawTargetEmphasis(hwnd, emphasized);
420 if (GetOneDrop(hwnd, mp1, mp2, szFrom, sizeof(szFrom))) {
421 memset(&ici, 0, sizeof(ICONINFO));
422 ici.cb = sizeof(ICONINFO);
423 ici.fFormat = ICON_FILE;
424 ici.pszFileName = szFrom;
425 if (!WinSetFileIcon((PSZ) pis->pfs->szFileName, (PICONINFO) & ici)) {
426 ici.fFormat = ICON_CLEAR;
427 WinSetFileIcon((PSZ) pis->pfs->szFileName, (PICONINFO) & ici);
428 }
429 hptr = WinLoadFileIcon(pis->pfs->szFileName, FALSE);
430 if (!hptr)
431 hptr = (!IsFile(pis->pfs->szFileName)) ? hptrDir : hptrFile;
432 if (pis && pis->oldproc) {
433 WinShowWindow(hwnd, FALSE);
434 pis->oldproc(hwnd, SM_SETHANDLE, MPFROMLONG(hptr), MPVOID);
435 WinShowWindow(hwnd, TRUE);
436 WinInvalidateRect(WinQueryWindow(hwnd, QW_PARENT), NULL, TRUE);
437 }
438 }
439 }
440 return 0;
441
442 case WM_PAINT:
443 mr = pis->oldproc(hwnd, msg, mp1, mp2);
444 PaintRecessedWindow(hwnd, (HPS) 0, FALSE, FALSE);
445 return mr;
446 break;
447
448 case WM_MENUEND:
449 if (pis->lasthwndMenu == (HWND)mp2)
450 WinDestroyWindow(pis->lasthwndMenu);
451 pis->lasthwndMenu = (HWND) 0;
452 break;
453
454 case WM_CONTEXTMENU:
455 if (pis->lasthwndMenu)
456 WinDestroyWindow(pis->lasthwndMenu);
457 pis->lasthwndMenu = WinLoadMenu(hwnd, FM3ModHandle, FLE_FRAME);
458 if (pis->lasthwndMenu) {
459 p = strrchr(pis->pfs->szFileName, '.');
460 if (!p || (stricmp(p, ".ICO") && stricmp(p, ".PTR")))
461 WinSendMsg(pis->lasthwndMenu,
462 MM_DELETEITEM,
463 MPFROM2SHORT(IDM_SELECTALL, TRUE), MPVOID);
464 PopupMenu(hwnd, hwnd, pis->lasthwndMenu);
465 }
466 break;
467
468 case WM_COMMAND:
469 switch (SHORT1FROMMP(mp1)) {
470 case IDM_SELECTALL:
471 case IDM_DESELECTALL:
472 WinDlgBox(HWND_DESKTOP,
473 hwnd,
474 SetIconDlgProc,
475 FM3ModHandle,
476 SETICON_FRAME,
477 (PVOID) ((SHORT1FROMMP(mp1) == IDM_SELECTALL) ?
478 pis->pfs->szFileName : NULL));
479 break;
480 }
481 return 0;
482
483 case WM_DESTROY:
484 emphasized = FALSE;
485 if (!pis)
486 return WinDefWindowProc(hwnd, msg, mp1, mp2);
487 else {
488 PFNWP oldproc = pis->oldproc;
489 if (pis->lasthwndMenu)
490 WinDestroyWindow(pis->lasthwndMenu);
491 free(pis);
492 return oldproc(hwnd, msg, mp1, mp2);
493 }
494 break;
495 }
496
497 return pis->oldproc(hwnd, msg, mp1, mp2);
498}
499
500MRESULT EXPENTRY FileInfoProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
501{
502 FILESTUF *pfs;
503 ICONSTUF *pis;
504 CHAR **ppsz;
505
506 switch (msg) {
507 case WM_INITDLG:
508 if (!mp2) {
509 WinDismissDlg(hwnd, 1);
510 break;
511 }
512 pfs = xmallocz(sizeof(FILESTUF), pszSrcFile, __LINE__);
513 if (!pfs) {
514 WinDismissDlg(hwnd, 1);
515 break;
516 }
517 pfs->size = sizeof(FILESTUF);
518 WinSetWindowPtr(hwnd, QWL_USER, pfs);
519 {
520 USHORT ids[] = { FLE_SIZES, FLE_SLACK, FLE_LASTWRITE, FLE_CREATE,
521 FLE_LASTACCESS, 0
522 };
523 INT x;
524 CHAR s[CCHMAXPATH];
525
526 ppsz = (CHAR **)mp2;
527 for (x = 0; ppsz[x]; x++) {
528 if (DosQueryPathInfo(ppsz[x], FIL_QUERYFULLNAME, s, sizeof(s)))
529 strcpy(s, ppsz[x]);
530 WinSendDlgItemMsg(hwnd,
531 FLE_NAME,
532 LM_INSERTITEM,
533 MPFROM2SHORT(LIT_SORTASCENDING, 0), MPFROMP(s));
534 }
535 if (!x) {
536 WinDismissDlg(hwnd, 1);
537 break;
538 }
539 WinSendDlgItemMsg(hwnd,
540 FLE_NAME,
541 LM_SELECTITEM, MPFROM2SHORT(0, 0), MPFROMSHORT(TRUE));
542 for (x = 0; ids[x]; x++)
543 SetPresParams(WinWindowFromID(hwnd, ids[x]),
544 &RGBGREY, &RGBBLACK, &RGBBLACK, NULL);
545 }
546 pis = xmallocz(sizeof(ICONSTUF), pszSrcFile, __LINE__);
547 if (!pis) {
548 WinDismissDlg(hwnd, 1);
549 break;
550 }
551 WinSetWindowPtr(WinWindowFromID(hwnd, FLE_ICON), QWL_USER, (PVOID) pis);
552 pis->size = sizeof(ICONSTUF);
553 pis->pfs = pfs;
554 pis->oldproc = WinSubclassWindow(WinWindowFromID(hwnd, FLE_ICON),
555 IconProc);
556 break;
557
558 case WM_CONTROL:
559 switch (SHORT1FROMMP(mp1)) {
560 case FLE_READONLY:
561 case FLE_ARCHIVED:
562 case FLE_SYSTEM:
563 case FLE_HIDDEN:
564 switch (SHORT2FROMMP(mp1)) {
565 case BN_CLICKED:
566 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
567 if (pfs && *pfs->szFileName) {
568
569 LISTINFO li;
570 UINT numfiles = 0, numalloc = 0;
571
572 memset(&li, 0, sizeof(LISTINFO));
573 if (!AddToList(pfs->szFileName, &li.list, &numfiles, &numalloc)) {
574 if (WinDlgBox(HWND_DESKTOP,
575 hwnd,
576 AttrListDlgProc,
577 FM3ModHandle,
578 ATR_FRAME, MPFROMP(&li)) && li.list && li.list[0]) {
579 pfs->madechanges = TRUE;
580 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
581 }
582 FreeList(li.list);
583 }
584 }
585 break;
586 } // switch
587 break;
588 case FLE_NAME:
589 switch (SHORT2FROMMP(mp1)) {
590 case LN_ENTER:
591 case LN_SELECT:
592 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
593 if (!pfs) {
594 Runtime_Error(pszSrcFile, __LINE__, "no data");
595 WinDismissDlg(hwnd, 1);
596 }
597 else {
598
599 SHORT sSelect;
600
601 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
602 FLE_NAME,
603 LM_QUERYSELECTION,
604 MPFROMSHORT(LIT_FIRST), MPVOID);
605 if (sSelect >= 0) {
606 *pfs->szFileName = 0;
607 WinSendDlgItemMsg(hwnd,
608 FLE_NAME,
609 LM_QUERYITEMTEXT,
610 MPFROM2SHORT(sSelect, CCHMAXPATH),
611 MPFROMP(pfs->szFileName));
612 if (*pfs->szFileName) {
613 if (SHORT2FROMMP(mp1) == LN_SELECT)
614 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
615 else
616 DefaultView(hwnd,
617 (HWND) 0, (HWND) 0, NULL, 32, pfs->szFileName);
618 }
619 }
620 }
621 break;
622 }
623 break;
624 }
625 return 0;
626
627 case UM_SETDIR:
628 WinCheckButton(hwnd, FLE_READONLY, FALSE);
629 WinCheckButton(hwnd, FLE_ARCHIVED, FALSE);
630 WinCheckButton(hwnd, FLE_SYSTEM, FALSE);
631 WinCheckButton(hwnd, FLE_HIDDEN, FALSE);
632 WinCheckButton(hwnd, FLE_DIRECTORY, FALSE);
633 WinCheckButton(hwnd, FLE_READABLE, FALSE);
634 WinCheckButton(hwnd, FLE_WRITEABLE, FALSE);
635 WinCheckButton(hwnd, FLE_OPEN, FALSE);
636 WinCheckButton(hwnd, FLE_BINARY, FALSE);
637 WinCheckButton(hwnd, FLE_ISARCHIVE, FALSE);
638 WinSetDlgItemText(hwnd, FLE_ARCNAME, NullStr);
639 WinCheckButton(hwnd, FLE_OS2FS, FALSE);
640 WinCheckButton(hwnd, FLE_OS2WIN, FALSE);
641 WinCheckButton(hwnd, FLE_OS2PM, FALSE);
642 WinCheckButton(hwnd, FLE_DOS, FALSE);
643 WinCheckButton(hwnd, FLE_32BIT, FALSE);
644 WinCheckButton(hwnd, FLE_WINREAL, FALSE);
645 WinCheckButton(hwnd, FLE_WINPROT, FALSE);
646 WinCheckButton(hwnd, FLE_WINENH, FALSE);
647 WinCheckButton(hwnd, FLE_DLL, FALSE);
648 WinCheckButton(hwnd, FLE_PHYSDRV, FALSE);
649 WinCheckButton(hwnd, FLE_VIRTDRV, FALSE);
650 WinCheckButton(hwnd, FLE_PROTDLL, FALSE);
651 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
652 if (pfs && *pfs->szFileName) {
653 CHAR s[97];
654 CHAR szCmmaFmtFileSize[81], szCmmaFmtEASize[81];
655 CHAR szCmmaFmtFileEASize[81], szCmmaFmtFileEASizeK[81];
656 FILEFINDBUF4L fs;
657 HDIR hdir = HDIR_CREATE;
658 ULONG apptype = 1;
659 FILE *fp;
660 HPOINTER hptr;
661 ARC_TYPE *info;
662
663 DosError(FERR_DISABLEHARDERR);
664 if (xDosFindFirst(pfs->szFileName,
665 &hdir,
666 FILE_NORMAL | FILE_ARCHIVED |
667 FILE_DIRECTORY | FILE_READONLY | FILE_HIDDEN |
668 FILE_SYSTEM,
669 &fs, sizeof(fs), &apptype, FIL_QUERYEASIZEL)) {
670 // Not found
671 SHORT sSelect, numitems;
672
673 DosBeep(250, 100); // Wake up user
674 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
675 FLE_NAME,
676 LM_QUERYSELECTION,
677 MPFROMSHORT(LIT_FIRST), MPVOID);
678 if (sSelect >= 0) {
679 WinSendDlgItemMsg(hwnd,
680 FLE_NAME,
681 LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
682 numitems = (SHORT) WinSendDlgItemMsg(hwnd,
683 FLE_NAME,
684 LM_QUERYITEMCOUNT,
685 MPVOID, MPVOID);
686 if (numitems)
687 PostMsg(WinWindowFromID(hwnd, FLE_NAME),
688 LM_SELECTITEM,
689 MPFROMSHORT(((sSelect) ? sSelect - 1 : 0)),
690 MPFROMSHORT(TRUE));
691 }
692 }
693 else {
694 DosFindClose(hdir);
695 sprintf(s,
696 "%04u/%02u/%02u %02u:%02u:%02u",
697 1980 + fs.fdateLastWrite.year,
698 fs.fdateLastWrite.month,
699 fs.fdateLastWrite.day,
700 fs.ftimeLastWrite.hours,
701 fs.ftimeLastWrite.minutes, fs.ftimeLastWrite.twosecs * 2);
702 WinSetDlgItemText(hwnd, FLE_LASTWRITE, s);
703 if (fs.fdateCreation.year &&
704 fs.fdateCreation.month && fs.fdateCreation.day) {
705 sprintf(s,
706 "%04u/%02u/%02u %02u:%02u:%02u",
707 1980 + fs.fdateCreation.year,
708 fs.fdateCreation.month,
709 fs.fdateCreation.day,
710 fs.ftimeCreation.hours,
711 fs.ftimeCreation.minutes, fs.ftimeCreation.twosecs * 2);
712 WinSetDlgItemText(hwnd, FLE_CREATE, s);
713 }
714 if (fs.fdateLastAccess.year &&
715 fs.fdateLastAccess.month && fs.fdateLastAccess.day) {
716 sprintf(s,
717 "%04u/%02u/%02u %02u:%02u:%02u",
718 1980 + fs.fdateLastAccess.year,
719 fs.fdateLastAccess.month,
720 fs.fdateLastAccess.day,
721 fs.ftimeLastAccess.hours,
722 fs.ftimeLastAccess.minutes, fs.ftimeLastAccess.twosecs * 2);
723 WinSetDlgItemText(hwnd, FLE_LASTACCESS, s);
724 }
725 CommaFmtULL(szCmmaFmtFileSize,
726 sizeof(szCmmaFmtFileSize), fs.cbFile, ' ');
727 CommaFmtULL(szCmmaFmtEASize,
728 sizeof(szCmmaFmtEASize), CBLIST_TO_EASIZE(fs.cbList), ' ');
729 CommaFmtULL(szCmmaFmtFileEASize,
730 sizeof(szCmmaFmtFileEASize),
731 fs.cbFile + CBLIST_TO_EASIZE(fs.cbList),
732 ' ');
733 CommaFmtULL(szCmmaFmtFileEASizeK,
734 sizeof(szCmmaFmtFileEASizeK),
735 fs.cbFile + CBLIST_TO_EASIZE(fs.cbList),
736 'K');
737 sprintf(s,
738 GetPString(IDS_SIZEINCLEASTEXT),
739 szCmmaFmtFileSize,
740 szCmmaFmtEASize,
741 szCmmaFmtFileEASize,
742 szCmmaFmtFileEASizeK);
743 WinSetDlgItemText(hwnd, FLE_SIZES, s);
744 CommaFmtULL(szCmmaFmtFileSize,
745 sizeof(szCmmaFmtFileSize), fs.cbFileAlloc - fs.cbFile, ' ');
746 sprintf(s, "%s", szCmmaFmtFileSize);
747 WinSetDlgItemText(hwnd, FLE_SLACK, s);
748 WinCheckButton(hwnd,
749 FLE_READONLY, ((fs.attrFile & FILE_READONLY) != 0));
750 WinCheckButton(hwnd,
751 FLE_ARCHIVED, ((fs.attrFile & FILE_ARCHIVED) != 0));
752 WinCheckButton(hwnd,
753 FLE_DIRECTORY, ((fs.attrFile & FILE_DIRECTORY) != 0));
754 WinCheckButton(hwnd, FLE_HIDDEN, ((fs.attrFile & FILE_HIDDEN) != 0));
755 WinCheckButton(hwnd, FLE_SYSTEM, ((fs.attrFile & FILE_SYSTEM) != 0));
756 DosError(FERR_DISABLEHARDERR);
757 if (!DosQueryAppType(pfs->szFileName, &apptype)) {
758 WinEnableWindow(WinWindowFromID(hwnd, FLE_OS2FS), TRUE);
759 WinEnableWindow(WinWindowFromID(hwnd, FLE_OS2WIN), TRUE);
760 WinEnableWindow(WinWindowFromID(hwnd, FLE_OS2PM), TRUE);
761 WinEnableWindow(WinWindowFromID(hwnd, FLE_BOUND), TRUE);
762 WinEnableWindow(WinWindowFromID(hwnd, FLE_32BIT), TRUE);
763 WinEnableWindow(WinWindowFromID(hwnd, FLE_DOS), TRUE);
764 WinEnableWindow(WinWindowFromID(hwnd, FLE_WINPROT), TRUE);
765 WinEnableWindow(WinWindowFromID(hwnd, FLE_WINREAL), TRUE);
766 WinEnableWindow(WinWindowFromID(hwnd, FLE_WINENH), TRUE);
767 WinEnableWindow(WinWindowFromID(hwnd, FLE_DLL), TRUE);
768 WinEnableWindow(WinWindowFromID(hwnd, FLE_PHYSDRV), TRUE);
769 WinEnableWindow(WinWindowFromID(hwnd, FLE_VIRTDRV), TRUE);
770 WinEnableWindow(WinWindowFromID(hwnd, FLE_PROTDLL), TRUE);
771 WinCheckButton(hwnd, FLE_OS2FS,
772 ((apptype & FAPPTYP_NOTWINDOWCOMPAT) &&
773 !(apptype & FAPPTYP_WINDOWCOMPAT)));
774 WinCheckButton(hwnd, FLE_OS2WIN,
775 ((apptype & FAPPTYP_WINDOWCOMPAT) &&
776 !(apptype & FAPPTYP_NOTWINDOWCOMPAT)));
777 WinCheckButton(hwnd, FLE_OS2PM,
778 ((apptype & FAPPTYP_WINDOWAPI) ==
779 FAPPTYP_WINDOWAPI));
780 WinCheckButton(hwnd, FLE_BOUND, ((apptype & FAPPTYP_BOUND) != 0));
781 WinCheckButton(hwnd, FLE_DLL, ((apptype & FAPPTYP_DLL) != 0));
782 WinCheckButton(hwnd, FLE_DOS, ((apptype & FAPPTYP_DOS) != 0));
783 WinCheckButton(hwnd, FLE_PHYSDRV,
784 ((apptype & FAPPTYP_PHYSDRV) != 0));
785 WinCheckButton(hwnd, FLE_VIRTDRV,
786 ((apptype & FAPPTYP_VIRTDRV) != 0));
787 WinCheckButton(hwnd, FLE_PROTDLL,
788 ((apptype & FAPPTYP_PROTDLL) != 0));
789 WinCheckButton(hwnd, FLE_WINREAL,
790 ((apptype & FAPPTYP_WINDOWSREAL) != 0));
791 WinCheckButton(hwnd, FLE_WINPROT,
792 ((apptype & FAPPTYP_WINDOWSPROT) != 0));
793 WinCheckButton(hwnd, FLE_32BIT, ((apptype & FAPPTYP_32BIT) != 0));
794 WinCheckButton(hwnd, FLE_WINENH, ((apptype & 0x1000) != 0));
795 }
796 else {
797 WinEnableWindow(WinWindowFromID(hwnd, FLE_OS2FS), FALSE);
798 WinEnableWindow(WinWindowFromID(hwnd, FLE_OS2WIN), FALSE);
799 WinEnableWindow(WinWindowFromID(hwnd, FLE_OS2PM), FALSE);
800 WinEnableWindow(WinWindowFromID(hwnd, FLE_BOUND), FALSE);
801 WinEnableWindow(WinWindowFromID(hwnd, FLE_32BIT), FALSE);
802 WinEnableWindow(WinWindowFromID(hwnd, FLE_DOS), FALSE);
803 WinEnableWindow(WinWindowFromID(hwnd, FLE_WINPROT), FALSE);
804 WinEnableWindow(WinWindowFromID(hwnd, FLE_WINREAL), FALSE);
805 WinEnableWindow(WinWindowFromID(hwnd, FLE_WINENH), FALSE);
806 WinEnableWindow(WinWindowFromID(hwnd, FLE_DLL), FALSE);
807 WinEnableWindow(WinWindowFromID(hwnd, FLE_PHYSDRV), FALSE);
808 WinEnableWindow(WinWindowFromID(hwnd, FLE_VIRTDRV), FALSE);
809 WinEnableWindow(WinWindowFromID(hwnd, FLE_PROTDLL), FALSE);
810 }
811 hptr = WinLoadFileIcon(pfs->szFileName, FALSE);
812 WinShowWindow(WinWindowFromID(hwnd, FLE_ICON), FALSE);
813 if (hptr) {
814 WinSendDlgItemMsg(hwnd,
815 FLE_ICON, SM_SETHANDLE, MPFROMLONG(hptr), MPVOID);
816 WinShowWindow(WinWindowFromID(hwnd, FLE_ICON), TRUE);
817 }
818 WinShowWindow(WinWindowFromID(hwnd, FLE_EAS), fs.cbList > 4);
819 if (!(fs.attrFile & FILE_DIRECTORY)) {
820 WinEnableWindow(WinWindowFromID(hwnd, FLE_READABLE), TRUE);
821 WinEnableWindow(WinWindowFromID(hwnd, FLE_WRITEABLE), TRUE);
822 WinEnableWindow(WinWindowFromID(hwnd, FLE_OPEN), TRUE);
823 WinEnableWindow(WinWindowFromID(hwnd, FLE_ISARCHIVE), TRUE);
824 WinEnableWindow(WinWindowFromID(hwnd, FLE_BINARY), TRUE);
825 fp = _fsopen(pfs->szFileName, "rb", SH_DENYNO);
826 if (fp) {
827 char buff[4096]; // 06 Oct 07 SHL protect against NTFS defect
828 ULONG len;
829 APIRET rc;
830
831 len = 512;
832 rc = DosRead(fileno(fp), buff, len, &len);
833 fclose(fp);
834 WinCheckButton(hwnd,
835 FLE_BINARY,
836 ((len && rc) ? IsBinary(buff, len) : 2));
837 WinCheckButton(hwnd, FLE_READABLE, TRUE);
838 info = find_type(pfs->szFileName, NULL);
839 if (info) {
840 WinCheckButton(hwnd, FLE_ISARCHIVE, 1);
841 if (info->id)
842 WinSetDlgItemText(hwnd, FLE_ARCNAME, info->id);
843 }
844 }
845 else {
846 WinCheckButton(hwnd, FLE_ISARCHIVE, 2);
847 WinCheckButton(hwnd, FLE_BINARY, 2);
848 }
849 fp = _fsopen(pfs->szFileName, "ab", SH_DENYNO);
850 if (fp) {
851 WinCheckButton(hwnd, FLE_WRITEABLE, TRUE);
852 fclose(fp);
853 }
854 fp = _fsopen(pfs->szFileName, "rb", SH_DENYRW);
855 if (!fp)
856 WinCheckButton(hwnd, FLE_OPEN, TRUE);
857 else
858 fclose(fp);
859 }
860 else {
861 WinEnableWindow(WinWindowFromID(hwnd, FLE_READABLE), FALSE);
862 WinEnableWindow(WinWindowFromID(hwnd, FLE_WRITEABLE), FALSE);
863 WinEnableWindow(WinWindowFromID(hwnd, FLE_OPEN), FALSE);
864 WinEnableWindow(WinWindowFromID(hwnd, FLE_ISARCHIVE), FALSE);
865 WinEnableWindow(WinWindowFromID(hwnd, FLE_BINARY), FALSE);
866 }
867 }
868 }
869 return 0;
870
871 case WM_COMMAND:
872 switch (SHORT1FROMMP(mp1)) {
873 case DID_OK:
874 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
875 WinDismissDlg(hwnd, (pfs && pfs->madechanges) ? 2 : 1);
876 break;
877 case IDM_HELP:
878 if (hwndHelp)
879 WinSendMsg(hwndHelp,
880 HM_DISPLAY_HELP,
881 MPFROM2SHORT(HELP_INFO, 0), MPFROMSHORT(HM_RESOURCEID));
882 break;
883 case FLE_SETTINGS:
884 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
885 if (pfs && *pfs->szFileName)
886 OpenObject(pfs->szFileName, Settings, hwnd);
887 break;
888 case FLE_EAS:
889 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
890 if (pfs && *pfs->szFileName) {
891
892 CHAR *list[2];
893
894 list[0] = pfs->szFileName;
895 list[1] = NULL;
896 WinDlgBox(HWND_DESKTOP,
897 hwnd, DisplayEAsProc, FM3ModHandle, EA_FRAME, (PVOID) list);
898 }
899 break;
900 case DID_CANCEL:
901 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
902 WinDismissDlg(hwnd, (pfs && pfs->madechanges) ? 2 : 0);
903 break;
904 }
905 return 0;
906
907 case WM_DESTROY:
908 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
909 xfree(pfs, pszSrcFile, __LINE__);
910 break;
911 }
912 return WinDefDlgProc(hwnd, msg, mp1, mp2);
913}
914
915MRESULT EXPENTRY SetDrvProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
916{
917 switch (msg) {
918 case WM_INITDLG:
919 if (!mp2 || !isalpha(*(CHAR *)mp2))
920 WinDismissDlg(hwnd, 0);
921 else {
922
923 CHAR s[80];
924
925 WinSetWindowULong(hwnd, QWL_USER, (toupper(*(CHAR *)mp2) - 'A'));
926 sprintf(s, GetPString(IDS_DRIVEFLAGSTITLETEXT), toupper(*(CHAR *)mp2));
927 WinSetWindowText(hwnd, s);
928/*
929 WinEnableWindow(WinWindowFromID(hwnd,DVS_REMOVABLE),FALSE);
930 WinEnableWindow(WinWindowFromID(hwnd,DVS_NOTWRITEABLE),FALSE);
931 WinEnableWindow(WinWindowFromID(hwnd,DVS_IGNORE),FALSE);
932 WinEnableWindow(WinWindowFromID(hwnd,DVS_CDROM),FALSE);
933 WinEnableWindow(WinWindowFromID(hwnd,DVS_NOLONGNAMES),FALSE);
934 WinEnableWindow(WinWindowFromID(hwnd,DVS_REMOTE),FALSE);
935 WinEnableWindow(WinWindowFromID(hwnd,DVS_VIRTUAL),FALSE);
936 WinEnableWindow(WinWindowFromID(hwnd,DVS_RAMDISK),FALSE);
937 WinEnableWindow(WinWindowFromID(hwnd,DVS_BOOT),FALSE);
938 WinEnableWindow(WinWindowFromID(hwnd,DVS_INVALID),FALSE);
939 WinEnableWindow(WinWindowFromID(hwnd,DVS_ZIPSTREAM),FALSE);
940 WinEnableWindow(WinWindowFromID(hwnd,DVS_NOSTATS),FALSE);
941*/
942 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
943 }
944 break;
945
946 case UM_UNDO:
947 {
948 ULONG drive = WinQueryWindowULong(hwnd, QWL_USER);
949
950 WinCheckButton(hwnd, DVS_REMOVABLE,
951 ((driveflags[drive] & DRIVE_REMOVABLE) != 0));
952 WinCheckButton(hwnd, DVS_NOTWRITEABLE,
953 ((driveflags[drive] & DRIVE_NOTWRITEABLE) != 0));
954 WinCheckButton(hwnd, DVS_IGNORE,
955 ((driveflags[drive] & DRIVE_IGNORE) != 0));
956 WinCheckButton(hwnd, DVS_CDROM,
957 ((driveflags[drive] & DRIVE_CDROM) != 0));
958 WinCheckButton(hwnd, DVS_NOLONGNAMES,
959 ((driveflags[drive] & DRIVE_NOLONGNAMES) != 0));
960 WinCheckButton(hwnd, DVS_REMOTE,
961 ((driveflags[drive] & DRIVE_REMOTE) != 0));
962 WinCheckButton(hwnd,DVS_VIRTUAL,
963 ((driveflags[drive] & DRIVE_VIRTUAL) != 0));
964 WinCheckButton(hwnd,DVS_RAMDISK,
965 ((driveflags[drive] & DRIVE_RAMDISK) != 0));
966 WinCheckButton(hwnd, DVS_BOOT,
967 ((driveflags[drive] & DRIVE_BOOT) != 0));
968 WinCheckButton(hwnd, DVS_INVALID,
969 ((driveflags[drive] & DRIVE_INVALID) != 0));
970 WinCheckButton(hwnd, DVS_NOPRESCAN,
971 ((driveflags[drive] & DRIVE_NOPRESCAN) != 0));
972 WinCheckButton(hwnd, DVS_ZIPSTREAM,
973 ((driveflags[drive] & DRIVE_ZIPSTREAM) != 0));
974 WinCheckButton(hwnd, DVS_NOLOADICONS,
975 ((driveflags[drive] & DRIVE_NOLOADICONS) != 0));
976 WinCheckButton(hwnd, DVS_NOLOADSUBJS,
977 ((driveflags[drive] & DRIVE_NOLOADSUBJS) != 0));
978 WinCheckButton(hwnd, DVS_NOLOADLONGS,
979 ((driveflags[drive] & DRIVE_NOLOADLONGS) != 0));
980 WinCheckButton(hwnd, DVS_SLOW, ((driveflags[drive] & DRIVE_SLOW) != 0));
981 WinCheckButton(hwnd, DVS_INCLUDEFILES,
982 ((driveflags[drive] & DRIVE_INCLUDEFILES) != 0));
983 WinCheckButton(hwnd,DVS_NOSTATS,
984 ((driveflags[drive] & DRIVE_NOSTATS) != 0));
985 }
986 return 0;
987
988 case WM_CONTROL:
989 return 0;
990
991 case WM_COMMAND:
992 switch (SHORT1FROMMP(mp1)) {
993 case DID_OK:
994 {
995 ULONG drive = WinQueryWindowULong(hwnd, QWL_USER);
996
997 if (WinQueryButtonCheckstate(hwnd, DVS_NOPRESCAN))
998 driveflags[drive] |= DRIVE_NOPRESCAN;
999 else
1000 driveflags[drive] &= (~DRIVE_NOPRESCAN);
1001 if (WinQueryButtonCheckstate(hwnd, DVS_NOLOADICONS))
1002 driveflags[drive] |= DRIVE_NOLOADICONS;
1003 else
1004 driveflags[drive] &= (~DRIVE_NOLOADICONS);
1005 if (WinQueryButtonCheckstate(hwnd, DVS_NOLOADSUBJS))
1006 driveflags[drive] |= DRIVE_NOLOADSUBJS;
1007 else
1008 driveflags[drive] &= (~DRIVE_NOLOADSUBJS);
1009 if (WinQueryButtonCheckstate(hwnd, DVS_NOLOADLONGS))
1010 driveflags[drive] |= DRIVE_NOLOADLONGS;
1011 else
1012 driveflags[drive] &= (~DRIVE_NOLOADLONGS);
1013 if (WinQueryButtonCheckstate(hwnd, DVS_SLOW))
1014 driveflags[drive] |= DRIVE_SLOW;
1015 else
1016 driveflags[drive] &= (~DRIVE_SLOW);
1017 if (WinQueryButtonCheckstate(hwnd, DVS_INCLUDEFILES))
1018 driveflags[drive] |= DRIVE_INCLUDEFILES;
1019 else
1020 driveflags[drive] &= (~DRIVE_INCLUDEFILES);
1021 if (WinQueryButtonCheckstate(hwnd,DVS_NOSTATS))
1022 driveflags[drive] |= DRIVE_NOSTATS;
1023 else
1024 driveflags[drive] &= (~DRIVE_NOSTATS);
1025 {
1026 ULONG flags;
1027 CHAR s[80];
1028
1029 sprintf(s, "%c.DriveFlags", (CHAR) (drive + 'A'));
1030 flags = driveflags[drive];
1031 flags &= (~(DRIVE_REMOVABLE | DRIVE_NOTWRITEABLE |
1032 DRIVE_IGNORE | DRIVE_CDROM |
1033 DRIVE_NOLONGNAMES | DRIVE_REMOTE |
1034 DRIVE_BOOT | DRIVE_INVALID | DRIVE_ZIPSTREAM |
1035 DRIVE_VIRTUAL | DRIVE_RAMDISK));
1036 PrfWriteProfileData(fmprof, appname, s, &flags, sizeof(ULONG));
1037 }
1038 }
1039 WinDismissDlg(hwnd, 1);
1040 break;
1041
1042 case DID_CANCEL:
1043 WinDismissDlg(hwnd, 0);
1044 break;
1045
1046 case IDM_UNDO:
1047 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1048 break;
1049
1050 case IDM_HELP:
1051 if (hwndHelp)
1052 WinSendMsg(hwndHelp,
1053 HM_DISPLAY_HELP,
1054 MPFROM2SHORT(HELP_FLAGS, 0), MPFROMSHORT(HM_RESOURCEID));
1055 break;
1056 }
1057 return 0;
1058 }
1059 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1060}
1061
1062#pragma alloc_text(FMINFO,FileInfoProc,IconProc)
1063#pragma alloc_text(FMINFO2,SetDrvProc,DrvInfoProc)
Note: See TracBrowser for help on using the repository browser.