source: trunk/dll/info.c@ 51

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

Standardize EA match

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