source: trunk/dll/info.c@ 36

Last change on this file since 36 was 36, checked in by root, 23 years ago

Handle large partitions

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