source: trunk/dll/info.c@ 1439

Last change on this file since 1439 was 1439, checked in by Gregg Young, 16 years ago

Changes to allow high mem loading of dll; Refactor .LONGNAME and .SUBJECT EA fetch to FetchCommonEAs. Add szFSType to FillInRecordFromFSA use to bypass EA scan and size formatting for tree container; Fix labels/FS type to work on scan on NOPRESCAN Drives; Fixed dbl directory names on restore of dir cnrs; (Tickets 47, 339, 363, 368, 369, 370)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 32.6 KB
Line 
1
2/***********************************************************************
3
4 $Id: info.c 1439 2009-07-12 21:57:04Z 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 11 Jan 08 GKY Add Write verify off and recures scan to drive info display when appropriate.
31 07 Feb 09 GKY Allow user to turn off alert and/or error beeps in settings notebook.
32 07 Feb 09 GKY Add *DateFormat functions to format dates based on locale
33 08 Mar 09 GKY Renamed commafmt.h i18nutil.h
34 12 Jul 09 GKY Add xDosQueryAppType and xDoxAlloc... to allow FM/2 to load in high memory
35 12 Jul 09 GKY Remove code to update recursive scan setting which isn't user setable
36
37***********************************************************************/
38
39#include <stdlib.h>
40#include <string.h>
41#include <ctype.h>
42#include <share.h>
43
44#define INCL_DOS
45#define INCL_WIN
46#define INCL_GPI
47#define INCL_LONGLONG
48
49#include "fm3dll.h"
50#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
51#include "draglist.h" // Data declaration(s)
52#include "notebook.h" // Data declaration(s)
53#include "inis.h" // Data declaration(s)
54#include "init.h" // Data declaration(s)
55#include "mainwnd.h" // Data declaration(s)
56#include "fm3dlg.h"
57#include "fm3str.h"
58#include "makelist.h" // AddToList
59#include "errutil.h" // Dos_Error...
60#include "strutil.h" // GetPString
61#include "attribs.h" // AttrListDlgProc
62#include "defview.h" // DefaultView
63#include "info.h"
64#include "valid.h" // CheckDrive, IsBinary
65#include "seticon.h" // SetIconDlgProc
66#include "droplist.h" // AcceptOneDrop, DropHelp, GetOneDrop
67#include "eas.h" // DisplayEAsProc
68#include "misc.h" // DrawTargetEmphasis
69#include "notify.h" // Notify
70#include "shadow.h" // OpenObject
71#include "chklist.h" // PopupMenu
72#include "presparm.h" // SetPresParams
73#include "strips.h" // bstrip
74#include "i18nutil.h" // CommaFmtULL
75#include "wrappers.h" // xDosFindFirst
76#include "fortify.h"
77
78// Data definitions
79#pragma data_seg(DATA1)
80static PSZ pszSrcFile = __FILE__;
81
82#pragma data_seg(GLOBAL1)
83INT driveflags[26];
84
85CHAR *FlagMsg(CHAR drive, CHAR * buffer)
86{
87 ULONG x;
88 BOOL once = FALSE;
89 register CHAR *p;
90
91 if (buffer) {
92 *buffer = 0;
93 p = buffer;
94 if (isalpha(drive)) {
95 if (driveflags[toupper(drive) - 'A']) {
96 for (x = IDS_FLREMOVABLETEXT; x < IDS_FLRECURSESCANDONETEXT + 1; x++) {
97 if (driveflags[toupper(drive) - 'A'] &
98 (1 << (x - IDS_FLREMOVABLETEXT))) {
99 if (once) {
100 *p = ' ';
101 p++;
102 }
103 else
104 once = TRUE;
105 *p = '[';
106 p++;
107 strcpy(p, GetPString(x));
108 p += strlen(p);
109 *p = ']';
110 p++;
111 *p = 0;
112 }
113 }
114 }
115 else
116 strcpy(buffer, "[None]");
117 }
118 }
119 return buffer;
120}
121
122MRESULT EXPENTRY DrvInfoProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
123{
124 CHAR *pszFileName;
125 CHAR szMB[20];
126 CHAR szKB[20];
127 CHAR szUnits[20];
128 APIRET rc;
129
130 switch (msg) {
131 case WM_INITDLG:
132 if (mp2) {
133
134 CHAR s[CCHMAXPATH * 2];
135 ULONG type;
136
137 pszFileName = (CHAR *)mp2;
138 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) pszFileName);
139 WinSendDlgItemMsg(hwnd,
140 INFO_LABEL,
141 EM_SETTEXTLIMIT,
142 MPFROM2SHORT(CCHMAXPATHCOMP, 0), MPVOID);
143 if (!(driveflags[toupper(*pszFileName) - 'A'] & DRIVE_NOSTATS)){
144 WinSendDlgItemMsg(hwnd,
145 INFO_FREE,
146 SLM_SETSLIDERINFO,
147 MPFROM2SHORT(SMA_SLIDERARMDIMENSIONS, 0),
148 MPFROM2SHORT(0, 0));
149 WinSendDlgItemMsg(hwnd,
150 INFO_USED,
151 SLM_SETSLIDERINFO,
152 MPFROM2SHORT(SMA_SLIDERARMDIMENSIONS, 0),
153 MPFROM2SHORT(0, 0));
154 }
155 if (driveflags[toupper(*pszFileName) - 'A'] & DRIVE_NOTWRITEABLE) {
156 WinSendDlgItemMsg(hwnd,
157 INFO_LABEL,
158 EM_SETREADONLY, MPFROM2SHORT(TRUE, 0), MPVOID);
159 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, DID_OK));
160 }
161 if (IsFullName(pszFileName)) {
162
163 CHAR FileSystem[CCHMAXPATH * 2];
164
165 sprintf(FileSystem,
166 GetPString(IDS_DRIVEINFOTITLETEXT), toupper(*pszFileName));
167 WinSetWindowText(hwnd, FileSystem);
168 if (CheckDrive(toupper(*pszFileName), FileSystem, &type) != -1){
169
170 FSALLOCATE fsa;
171
172 if (type & (DRIVE_REMOTE | DRIVE_ZIPSTREAM | DRIVE_VIRTUAL)) {
173
174 CHAR Path[3], *pfsn, *pfsd;
175 ULONG Size;
176 APIRET rc;
177 PFSQBUFFER2 pfsq;
178
179 Path[0] = toupper(*pszFileName);
180 Path[1] = ':';
181 Path[2] = 0;
182 Size = sizeof(s);
183 DosError(FERR_DISABLEHARDERR);
184 rc = DosQueryFSAttach(Path,
185 0, FSAIL_QUERYNAME, (PFSQBUFFER2) s, &Size);
186 if (!rc) {
187 pfsq = (PFSQBUFFER2) s;
188 pfsn = (PCHAR)(pfsq->szName) + pfsq->cbName + 1;
189 pfsd = pfsn + pfsq->cbFSDName + 1;
190 if (pfsq->cbFSAData && pfsd && *pfsd) {
191 sprintf(s, " (%s)", pfsd);
192 WinSetDlgItemText(hwnd, INFO_REALPATH, s);
193 }
194 }
195 }
196
197 DosError(FERR_DISABLEHARDERR);
198 if (!DosQueryFSInfo(toupper(*pszFileName) - '@',
199 FSIL_ALLOC, &fsa, sizeof(FSALLOCATE))) {
200
201 struct
202 {
203 ULONG serial;
204 CHAR volumelength;
205 CHAR volumelabel[CCHMAXPATH];
206 }
207 volser;
208 USHORT percentfree, percentused;
209
210 memset(&volser, 0, sizeof(volser));
211 DosError(FERR_DISABLEHARDERR);
212 if (!DosQueryFSInfo(toupper(*pszFileName) - '@',
213 FSIL_VOLSER,
214 &volser, (ULONG) sizeof(volser))) {
215 WinSetDlgItemText(hwnd, INFO_FS, FileSystem);
216 WinSetDlgItemText(hwnd, INFO_LABEL, volser.volumelabel);
217 sprintf(s, "%lx", volser.serial);
218 WinSetDlgItemText(hwnd, INFO_SERIAL, s);
219 FlagMsg(*pszFileName, s);
220 WinSetDlgItemText(hwnd, INFO_FLAGS, s);
221 if (!(driveflags[toupper(*pszFileName) - 'A'] & DRIVE_NOSTATS)){
222 CommaFmtULL(szMB, sizeof(szMB),
223 (ULONGLONG) fsa.cUnit *
224 (fsa.cSectorUnit * fsa.cbSector), 'M');
225 CommaFmtULL(szKB, sizeof(szKB),
226 (ULONGLONG) fsa.cUnit *
227 (fsa.cSectorUnit * fsa.cbSector), 'K');
228 CommaFmtULL(szUnits, sizeof(szUnits),
229 (ULONGLONG) fsa.cUnit, ' ');
230 sprintf(s, "%s, %s, %s %s%s", szMB, szKB, szUnits, GetPString(IDS_UNITTEXT), &"s"[fsa.cUnit == 1L]); // hack cough
231 WinSetDlgItemText(hwnd, INFO_TOTAL, s);
232
233 CommaFmtULL(szMB, sizeof(szMB),
234 (ULONGLONG) fsa.cUnitAvail *
235 (fsa.cSectorUnit * fsa.cbSector), 'M');
236 CommaFmtULL(szKB, sizeof(szKB),
237 (ULONGLONG) fsa.cUnitAvail *
238 (fsa.cSectorUnit * fsa.cbSector), 'K');
239 CommaFmtULL(szUnits, sizeof(szUnits),
240 (ULONGLONG) fsa.cUnitAvail, ' ');
241 sprintf(s, "%s, %s, %s %s%s",
242 szMB, szKB, szUnits,
243 GetPString(IDS_UNITTEXT), &"s"[fsa.cUnitAvail == 1L]);
244 WinSetDlgItemText(hwnd, INFO_AVAILABLE, s);
245 sprintf(s,
246 GetPString(IDS_SECTORSTEXT),
247 fsa.cbSector,
248 fsa.cSectorUnit, &"s"[fsa.cSectorUnit == 1L]);
249 WinSetDlgItemText(hwnd, INFO_ALLOCUNITS, s);
250
251 percentfree = (fsa.cUnitAvail && fsa.cUnit) ?
252 (fsa.cUnitAvail * 100) / fsa.cUnit : 0;
253 if (!percentfree && fsa.cUnitAvail)
254 percentfree = 1;
255 percentused = 100 - percentfree;
256 WinSendDlgItemMsg(hwnd,
257 INFO_USED,
258 SLM_SETSLIDERINFO,
259 MPFROM2SHORT(SMA_SLIDERARMPOSITION,
260 SMA_INCREMENTVALUE),
261 MPFROMSHORT(percentused));
262 WinSendDlgItemMsg(hwnd,
263 INFO_FREE,
264 SLM_SETSLIDERINFO,
265 MPFROM2SHORT(SMA_SLIDERARMPOSITION,
266 SMA_INCREMENTVALUE),
267 MPFROMSHORT(percentfree));
268 sprintf(s, "%u%%", percentused);
269 WinSetDlgItemText(hwnd, INFO_USEDPERCENT, s);
270 sprintf(s, "%u%%", percentfree);
271 WinSetDlgItemText(hwnd, INFO_FREEPERCENT, s);
272 }
273 else
274 WinSetDlgItemText(hwnd, INFO_AVAILABLE, GetPString(IDS_STATSMEANINGLESSTEXT));
275 }
276 else {
277 sprintf(FileSystem,
278 GetPString(IDS_CANTQUERYVOLTEXT),
279 toupper(*pszFileName));
280 Notify(FileSystem);
281 WinDismissDlg(hwnd, 0);
282 }
283 }
284 else {
285 sprintf(FileSystem,
286 GetPString(IDS_CANTQUERYALLOCTEXT),
287 toupper(*pszFileName));
288 Notify(FileSystem);
289 WinDismissDlg(hwnd, 0);
290 }
291 }
292 else {
293 FlagMsg(*pszFileName, s);
294 sprintf(FileSystem,
295 GetPString(IDS_DRIVEINACCESSIBLETEXT),
296 toupper(*pszFileName), s);
297 Notify(FileSystem);
298 WinDismissDlg(hwnd, 0);
299 }
300 }
301 else {
302 WinDismissDlg(hwnd, 0);
303 }
304 }
305 else
306 WinDismissDlg(hwnd, 0);
307 break;
308
309 case WM_CONTROL:
310 return 0;
311
312 case WM_COMMAND:
313 switch (SHORT1FROMMP(mp1)) {
314 case DID_CANCEL:
315 WinDismissDlg(hwnd, 0);
316 break;
317
318 case IDM_HELP:
319 if (hwndHelp)
320 WinSendMsg(hwndHelp,
321 HM_DISPLAY_HELP,
322 MPFROM2SHORT(HELP_DRVINFO, 0), MPFROMSHORT(HM_RESOURCEID));
323 break;
324
325 case DID_OK:
326 pszFileName = INSTDATA(hwnd);
327 if (!(driveflags[toupper(*pszFileName) - 'A'] & DRIVE_NOTWRITEABLE)) {
328
329 CHAR s[CCHMAXPATHCOMP + 3];
330
331 *s = 0;
332 WinQueryDlgItemText(hwnd, INFO_LABEL, CCHMAXPATHCOMP, s);
333 bstrip(s);
334 if (*s) {
335 struct
336 {
337 ULONG serial;
338 CHAR volumelength;
339 CHAR volumelabel[CCHMAXPATH];
340 }
341 volser;
342
343 memset(&volser, 0, sizeof(volser));
344 DosError(FERR_DISABLEHARDERR);
345 if (!DosQueryFSInfo(toupper(*pszFileName) - '@',
346 FSIL_VOLSER,
347 &volser,
348 (ULONG) sizeof(volser)) &&
349 stricmp(s, volser.volumelabel)) {
350 memmove(s + 1, s, strlen(s) + 1);
351 *s = strlen(s + 1);
352 DosError(FERR_DISABLEHARDERR);
353 rc = DosSetFSInfo(toupper(*pszFileName) - '@',
354 2L, (PVOID) s, (ULONG) sizeof(s));
355 if (rc) {
356 Dos_Error(MB_CANCEL, rc, hwnd, __FILE__, __LINE__,
357 "DosSetFSInfo failed");
358 }
359 }
360 }
361 }
362 WinDismissDlg(hwnd, 1);
363 break;
364 }
365 return 0;
366 }
367 return WinDefDlgProc(hwnd, msg, mp1, mp2);
368}
369
370typedef struct {
371 USHORT size;
372 CHAR szFileName[CCHMAXPATH];
373 BOOL madechanges;
374} FILESTUF;
375
376typedef struct {
377 USHORT size;
378 PFNWP oldproc;
379 FILESTUF *pfs;
380 HWND lasthwndMenu;
381} ICONSTUF;
382
383/*
384 * subclass routine to allow changing a program's icon
385 */
386
387MRESULT EXPENTRY IconProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
388{
389 ICONSTUF *pis = (ICONSTUF *)WinQueryWindowPtr(hwnd, QWL_USER);
390 MRESULT mr;
391 CHAR *p;
392
393 static BOOL emphasized = FALSE;
394
395 if (!pis) {
396 Runtime_Error(pszSrcFile, __LINE__, NULL);
397 if (msg != WM_DESTROY)
398 return WinDefWindowProc(hwnd, msg, mp1, mp2);
399 }
400
401 switch (msg) {
402 case DM_DRAGOVER:
403 if (!emphasized) {
404 emphasized = TRUE;
405 DrawTargetEmphasis(hwnd, emphasized);
406 }
407 if (AcceptOneDrop(hwnd, mp1, mp2))
408 return MRFROM2SHORT(DOR_DROP, DO_MOVE);
409 return MRFROM2SHORT(DOR_NEVERDROP, 0);
410
411 case DM_DRAGLEAVE:
412 emphasized = FALSE;
413 DrawTargetEmphasis(hwnd, emphasized);
414 break;
415
416 case DM_DROPHELP:
417 DropHelp(mp1, mp2, hwnd, GetPString(IDS_DROPCHGICONHELPTEXT));
418 return 0;
419
420 case DM_DROP:
421 {
422 HPOINTER hptr;
423 CHAR szFrom[CCHMAXPATH + 2];
424 ICONINFO ici;
425
426 emphasized = FALSE;
427 DrawTargetEmphasis(hwnd, emphasized);
428 if (GetOneDrop(hwnd, mp1, mp2, szFrom, sizeof(szFrom))) {
429 memset(&ici, 0, sizeof(ICONINFO));
430 ici.cb = sizeof(ICONINFO);
431 ici.fFormat = ICON_FILE;
432 ici.pszFileName = szFrom;
433 if (!WinSetFileIcon((PSZ) pis->pfs->szFileName, (PICONINFO) & ici)) {
434 ici.fFormat = ICON_CLEAR;
435 WinSetFileIcon((PSZ) pis->pfs->szFileName, (PICONINFO) & ici);
436 }
437 hptr = WinLoadFileIcon(pis->pfs->szFileName, FALSE);
438 if (!hptr)
439 hptr = (!IsFile(pis->pfs->szFileName)) ? hptrDir : hptrFile;
440 if (pis && pis->oldproc) {
441 WinShowWindow(hwnd, FALSE);
442 pis->oldproc(hwnd, SM_SETHANDLE, MPFROMLONG(hptr), MPVOID);
443 WinShowWindow(hwnd, TRUE);
444 WinInvalidateRect(WinQueryWindow(hwnd, QW_PARENT), NULL, TRUE);
445 }
446 }
447 }
448 return 0;
449
450 case WM_PAINT:
451 mr = pis->oldproc(hwnd, msg, mp1, mp2);
452 PaintRecessedWindow(hwnd, (HPS) 0, FALSE, FALSE);
453 return mr;
454 break;
455
456 case WM_MENUEND:
457 if (pis->lasthwndMenu == (HWND)mp2)
458 WinDestroyWindow(pis->lasthwndMenu);
459 pis->lasthwndMenu = (HWND) 0;
460 break;
461
462 case WM_CONTEXTMENU:
463 if (pis->lasthwndMenu)
464 WinDestroyWindow(pis->lasthwndMenu);
465 pis->lasthwndMenu = WinLoadMenu(hwnd, FM3ModHandle, FLE_FRAME);
466 if (pis->lasthwndMenu) {
467 p = strrchr(pis->pfs->szFileName, '.');
468 if (!p || (stricmp(p, PCSZ_DOTICO) && stricmp(p, PCSZ_DOTPTR)))
469 WinSendMsg(pis->lasthwndMenu,
470 MM_DELETEITEM,
471 MPFROM2SHORT(IDM_SELECTALL, TRUE), MPVOID);
472 PopupMenu(hwnd, hwnd, pis->lasthwndMenu);
473 }
474 break;
475
476 case WM_COMMAND:
477 switch (SHORT1FROMMP(mp1)) {
478 case IDM_SELECTALL:
479 case IDM_DESELECTALL:
480 WinDlgBox(HWND_DESKTOP,
481 hwnd,
482 SetIconDlgProc,
483 FM3ModHandle,
484 SETICON_FRAME,
485 (PVOID) ((SHORT1FROMMP(mp1) == IDM_SELECTALL) ?
486 pis->pfs->szFileName : NULL));
487 break;
488 }
489 return 0;
490
491 case WM_DESTROY:
492 emphasized = FALSE;
493 if (!pis)
494 return WinDefWindowProc(hwnd, msg, mp1, mp2);
495 else {
496 PFNWP oldproc = pis->oldproc;
497 if (pis->lasthwndMenu)
498 WinDestroyWindow(pis->lasthwndMenu);
499 free(pis);
500 return oldproc(hwnd, msg, mp1, mp2);
501 }
502 break;
503 }
504
505 return pis->oldproc(hwnd, msg, mp1, mp2);
506}
507
508MRESULT EXPENTRY FileInfoProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
509{
510 FILESTUF *pfs;
511 ICONSTUF *pis;
512 CHAR **ppsz;
513
514 switch (msg) {
515 case WM_INITDLG:
516 if (!mp2) {
517 WinDismissDlg(hwnd, 1);
518 break;
519 }
520 pfs = xmallocz(sizeof(FILESTUF), pszSrcFile, __LINE__);
521 if (!pfs) {
522 WinDismissDlg(hwnd, 1);
523 break;
524 }
525 pfs->size = sizeof(FILESTUF);
526 WinSetWindowPtr(hwnd, QWL_USER, pfs);
527 {
528 USHORT ids[] = { FLE_SIZES, FLE_SLACK, FLE_LASTWRITE, FLE_CREATE,
529 FLE_LASTACCESS, 0
530 };
531 INT x;
532 CHAR s[CCHMAXPATH];
533
534 ppsz = (CHAR **)mp2;
535 for (x = 0; ppsz[x]; x++) {
536 if (DosQueryPathInfo(ppsz[x], FIL_QUERYFULLNAME, s, sizeof(s)))
537 strcpy(s, ppsz[x]);
538 WinSendDlgItemMsg(hwnd,
539 FLE_NAME,
540 LM_INSERTITEM,
541 MPFROM2SHORT(LIT_SORTASCENDING, 0), MPFROMP(s));
542 }
543 if (!x) {
544 WinDismissDlg(hwnd, 1);
545 break;
546 }
547 WinSendDlgItemMsg(hwnd,
548 FLE_NAME,
549 LM_SELECTITEM, MPFROM2SHORT(0, 0), MPFROMSHORT(TRUE));
550 for (x = 0; ids[x]; x++)
551 SetPresParams(WinWindowFromID(hwnd, ids[x]),
552 &RGBGREY, &RGBBLACK, &RGBBLACK, NULL);
553 }
554 pis = xmallocz(sizeof(ICONSTUF), pszSrcFile, __LINE__);
555 if (!pis) {
556 WinDismissDlg(hwnd, 1);
557 break;
558 }
559 WinSetWindowPtr(WinWindowFromID(hwnd, FLE_ICON), QWL_USER, (PVOID) pis);
560 pis->size = sizeof(ICONSTUF);
561 pis->pfs = pfs;
562 pis->oldproc = WinSubclassWindow(WinWindowFromID(hwnd, FLE_ICON),
563 IconProc);
564 break;
565
566 case WM_CONTROL:
567 switch (SHORT1FROMMP(mp1)) {
568 case FLE_READONLY:
569 case FLE_ARCHIVED:
570 case FLE_SYSTEM:
571 case FLE_HIDDEN:
572 switch (SHORT2FROMMP(mp1)) {
573 case BN_CLICKED:
574 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
575 if (pfs && *pfs->szFileName) {
576
577 LISTINFO li;
578 UINT numfiles = 0, numalloc = 0;
579
580 memset(&li, 0, sizeof(LISTINFO));
581 if (!AddToList(pfs->szFileName, &li.list, &numfiles, &numalloc)) {
582 if (WinDlgBox(HWND_DESKTOP,
583 hwnd,
584 AttrListDlgProc,
585 FM3ModHandle,
586 ATR_FRAME, MPFROMP(&li)) && li.list && li.list[0]) {
587 pfs->madechanges = TRUE;
588 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
589 }
590 FreeList(li.list);
591 }
592 }
593 break;
594 } // switch
595 break;
596 case FLE_NAME:
597 switch (SHORT2FROMMP(mp1)) {
598 case LN_ENTER:
599 case LN_SELECT:
600 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
601 if (!pfs) {
602 Runtime_Error(pszSrcFile, __LINE__, NULL);
603 WinDismissDlg(hwnd, 1);
604 }
605 else {
606
607 SHORT sSelect;
608
609 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
610 FLE_NAME,
611 LM_QUERYSELECTION,
612 MPFROMSHORT(LIT_FIRST), MPVOID);
613 if (sSelect >= 0) {
614 *pfs->szFileName = 0;
615 WinSendDlgItemMsg(hwnd,
616 FLE_NAME,
617 LM_QUERYITEMTEXT,
618 MPFROM2SHORT(sSelect, CCHMAXPATH),
619 MPFROMP(pfs->szFileName));
620 if (*pfs->szFileName) {
621 if (SHORT2FROMMP(mp1) == LN_SELECT)
622 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
623 else
624 DefaultView(hwnd,
625 (HWND) 0, (HWND) 0, NULL, 32, pfs->szFileName);
626 }
627 }
628 }
629 break;
630 }
631 break;
632 }
633 return 0;
634
635 case UM_SETDIR:
636 WinCheckButton(hwnd, FLE_READONLY, FALSE);
637 WinCheckButton(hwnd, FLE_ARCHIVED, FALSE);
638 WinCheckButton(hwnd, FLE_SYSTEM, FALSE);
639 WinCheckButton(hwnd, FLE_HIDDEN, FALSE);
640 WinCheckButton(hwnd, FLE_DIRECTORY, FALSE);
641 WinCheckButton(hwnd, FLE_READABLE, FALSE);
642 WinCheckButton(hwnd, FLE_WRITEABLE, FALSE);
643 WinCheckButton(hwnd, FLE_OPEN, FALSE);
644 WinCheckButton(hwnd, FLE_BINARY, FALSE);
645 WinCheckButton(hwnd, FLE_ISARCHIVE, FALSE);
646 WinSetDlgItemText(hwnd, FLE_ARCNAME, NullStr);
647 WinCheckButton(hwnd, FLE_OS2FS, FALSE);
648 WinCheckButton(hwnd, FLE_OS2WIN, FALSE);
649 WinCheckButton(hwnd, FLE_OS2PM, FALSE);
650 WinCheckButton(hwnd, FLE_DOS, FALSE);
651 WinCheckButton(hwnd, FLE_32BIT, FALSE);
652 WinCheckButton(hwnd, FLE_WINREAL, FALSE);
653 WinCheckButton(hwnd, FLE_WINPROT, FALSE);
654 WinCheckButton(hwnd, FLE_WINENH, FALSE);
655 WinCheckButton(hwnd, FLE_DLL, FALSE);
656 WinCheckButton(hwnd, FLE_PHYSDRV, FALSE);
657 WinCheckButton(hwnd, FLE_VIRTDRV, FALSE);
658 WinCheckButton(hwnd, FLE_PROTDLL, FALSE);
659 pfs = WinQueryWindowPtr(hwnd, QWL_USER);
660 if (pfs && *pfs->szFileName) {
661 CHAR s[97];
662 CHAR szCmmaFmtFileSize[81], szCmmaFmtEASize[81];
663 CHAR szCmmaFmtFileEASize[81], szCmmaFmtFileEASizeK[81], szDate[DATE_BUF_BYTES];
664 FILEFINDBUF4L fs;
665 HDIR hdir = HDIR_CREATE;
666 ULONG apptype = 1;
667 FILE *fp;
668 HPOINTER hptr;
669 ARC_TYPE *info;
670
671 DosError(FERR_DISABLEHARDERR);
672 if (xDosFindFirst(pfs->szFileName,
673 &hdir,
674 FILE_NORMAL | FILE_ARCHIVED |
675 FILE_DIRECTORY | FILE_READONLY | FILE_HIDDEN |
676 FILE_SYSTEM,
677 &fs, sizeof(fs), &apptype, FIL_QUERYEASIZEL)) {
678 // Not found
679 SHORT sSelect, numitems;
680
681 if (!fAlertBeepOff)
682 DosBeep(250, 100); // Wake up user
683 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
684 FLE_NAME,
685 LM_QUERYSELECTION,
686 MPFROMSHORT(LIT_FIRST), MPVOID);
687 if (sSelect >= 0) {
688 WinSendDlgItemMsg(hwnd,
689 FLE_NAME,
690 LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
691 numitems = (SHORT) WinSendDlgItemMsg(hwnd,
692 FLE_NAME,
693 LM_QUERYITEMCOUNT,
694 MPVOID, MPVOID);
695 if (numitems)
696 PostMsg(WinWindowFromID(hwnd, FLE_NAME),
697 LM_SELECTITEM,
698 MPFROMSHORT(((sSelect) ? sSelect - 1 : 0)),
699 MPFROMSHORT(TRUE));
700 }
701 }
702 else {
703 DosFindClose(hdir);
704 FDateFormat(szDate, fs.fdateLastWrite);
705 sprintf(s, "%s %02u%s%02u%s%02u",
706 szDate,
707 fs.ftimeLastWrite.hours, TimeSeparator,
708 fs.ftimeLastWrite.minutes, TimeSeparator, fs.ftimeLastWrite.twosecs * 2);
709 WinSetDlgItemText(hwnd, FLE_LASTWRITE, s);
710 if (fs.fdateCreation.year &&
711 fs.fdateCreation.month && fs.fdateCreation.day) {
712 FDateFormat(szDate, fs.fdateCreation);
713 sprintf(s, "%s %02u%s%02u%s%02u",
714 szDate,
715 fs.ftimeCreation.hours, TimeSeparator,
716 fs.ftimeCreation.minutes, TimeSeparator, fs.ftimeCreation.twosecs * 2);
717 WinSetDlgItemText(hwnd, FLE_CREATE, s);
718 }
719 if (fs.fdateLastAccess.year &&
720 fs.fdateLastAccess.month && fs.fdateLastAccess.day) {
721 FDateFormat(szDate, fs.fdateLastAccess);
722 sprintf(s, "%s %02u%s%02u%s%02u",
723 szDate,
724 fs.ftimeLastAccess.hours, TimeSeparator,
725 fs.ftimeLastAccess.minutes, TimeSeparator, 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 (!xDosQueryAppType(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 {
1037 ULONG flags;
1038 CHAR FlagKey[80];
1039
1040 sprintf(FlagKey, "%c.DriveFlags", (CHAR) (drive + 'A'));
1041 flags = driveflags[drive];
1042 flags &= (~(DRIVE_REMOVABLE | DRIVE_NOTWRITEABLE |
1043 DRIVE_IGNORE | DRIVE_CDROM |
1044 DRIVE_REMOTE | DRIVE_RSCANNED |
1045 DRIVE_BOOT | DRIVE_INVALID | DRIVE_ZIPSTREAM |
1046 DRIVE_VIRTUAL | DRIVE_RAMDISK));
1047 PrfWriteProfileData(fmprof, appname, FlagKey, &flags, sizeof(ULONG));
1048 }
1049 }
1050 WinDismissDlg(hwnd, 1);
1051 break;
1052
1053 case DID_CANCEL:
1054 WinDismissDlg(hwnd, 0);
1055 break;
1056
1057 case IDM_UNDO:
1058 PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
1059 break;
1060
1061 case IDM_HELP:
1062 if (hwndHelp)
1063 WinSendMsg(hwndHelp,
1064 HM_DISPLAY_HELP,
1065 MPFROM2SHORT(HELP_FLAGS, 0), MPFROMSHORT(HM_RESOURCEID));
1066 break;
1067 }
1068 return 0;
1069 }
1070 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1071}
1072
1073#pragma alloc_text(FMINFO,FileInfoProc,IconProc)
1074#pragma alloc_text(FMINFO2,SetDrvProc,DrvInfoProc)
Note: See TracBrowser for help on using the repository browser.