source: trunk/dll/info.c@ 897

Last change on this file since 897 was 897, checked in by Gregg Young, 18 years ago

Use CommaFmtULL for additional file, EA etc sizes display; Modify/Create TestFDates & TestCDates for comparing/sorting files or CNRITEMS by date/time.

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