source: trunk/dll/info.c@ 125

Last change on this file since 125 was 123, checked in by root, 21 years ago

Rework lstrip/rstrip usage

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