source: trunk/dll/info.c@ 1358

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

Comments for CS 1354/55

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