|
|
1.1 root 1: /* This header file does all the necessary includes and defines all the
2: structures and constants needed for the nead program */
3:
4: #define INCL_WIN
5: #define INCL_WINHEAP
6: #define INCL_WINDIALOGS
7: #define INCL_GPIPRIMITIVES
8:
9: #include <os2.h>
10: #include <dos.h>
11: #include <malloc.h>
12: #include <stdio.h>
13: #include <string.h>
14:
15: /* The HoldFEA is used to hold individual EAs. The member names correspond
16: directly to those of the FEA structure. Note however, that both szName
17: and aValue are pointers to the values. An additional field, next, is
18: used to link the HoldFEA's together to form a linked list. */
19:
20: struct _HoldFEA
21: {
22: BYTE fEA; /* Flag byte */
23: BYTE cbName;
24: USHORT cbValue;
25: CHAR *szName;
26: CHAR *aValue;
27: struct _HoldFEA *next;
28: };
29: typedef struct _HoldFEA HOLDFEA;
30:
31: /* The DeleteList is used to hold the names of EAs that need to be explicitly
32: deleted before the current EAs are written. This is necessary because
33: there does not exist a way to automatically delete all existing EAs
34: associated with a file. The next field allows the structures to be
35: linked. */
36:
37: struct _DeleteList
38: {
39: CHAR *EAName;
40: struct _DeleteList *next;
41: };
42: typedef struct _DeleteList DELETELIST;
43:
44: /* The PassData struct is used to pass data, especially as the user data
45: parameter for dialog box calls. The Point field points to several types
46: of data throughout the program. Usually it points to either an asciiz
47: name or a HoldData structure. The rest of the fields are used for m-m
48: recursive calls. cbMulti is the length of the m-m field currently being
49: considered. usMultiOffset is the offset from the beginning of the
50: EA (->aValue) to the start of the current m-m field. usIndex is a count
51: of the number of sub-fields in the current m-m. */
52:
53: struct _PassData
54: {
55: CHAR *Point;
56: USHORT cbMulti;
57: USHORT usMultiOffset;
58: USHORT usIndex;
59: BYTE fFlag;
60: };
61: typedef struct _PassData PASSDATA;
62:
63: /* The ReEnter structure is used to keep track of the static data for
64: MultiTypeProc. This structure is necessary since the proc is recursive
65: and the static data is only available during the initialize message.
66: The structure holds the two static variables and has a next field to
67: allow the list to be linked. */
68:
69: struct _ReEnter
70: {
71: HOLDFEA *pFEA;
72: PASSDATA FAR *pPDat;
73: struct _ReEnter *next;
74: };
75: typedef struct _ReEnter REENTER;
76:
77: /* This struct holds the static data that allows translation between the
78: EA type and descriptor string, etc. Data is global. */
79:
80: struct _EADATA
81: {
82: USHORT usPrefix;
83: CHAR szFormat[36];
84: USHORT usFldType;
85: };
86: typedef struct _EADATA EADATA;
87:
88: BOOL OpenFile(HWND,USHORT);
89: BOOL AddEA(HWND);
90: BOOL QueryEAs(CHAR *);
91: BOOL EditEAValue(HWND, PASSDATA *);
92: BOOL EAExists(CHAR *);
93: BOOL EditEA(HWND);
94: BOOL CheckEAIntegrity(CHAR *,USHORT);
95: MRESULT EXPENTRY OpenFileProc (HWND, USHORT, MPARAM, MPARAM);
96: MRESULT EXPENTRY MainDlgProc (HWND, USHORT, MPARAM, MPARAM);
97: MRESULT EXPENTRY AddEAProc (HWND, USHORT, MPARAM, MPARAM);
98: MRESULT EXPENTRY AsciiEditProc (HWND, USHORT, MPARAM, MPARAM);
99: MRESULT EXPENTRY IconDlgProc (HWND, USHORT, MPARAM, MPARAM);
100: MRESULT EXPENTRY MultiTypeProc (HWND, USHORT, MPARAM, MPARAM);
101: VOID FillDirListBox (HWND,CHAR *);
102: VOID FillFileListBox (HWND);
103: VOID Free_FEAList(HOLDFEA *,DELETELIST *);
104: VOID ShowEAType(HWND);
105: VOID DeleteCurEA(HWND);
106: VOID WriteEAs(VOID);
107: VOID ChangeName(HOLDFEA *,CHAR *);
108: VOID MultiAdd(HWND, HOLDFEA *, PASSDATA FAR *);
109: SHORT ParseFileName (CHAR *, CHAR *);
110: USHORT LookupEAType(USHORT);
111: USHORT CurEAType(HOLDFEA *);
112: USHORT GetUSHORT(HOLDFEA *,USHORT);
113: HOLDFEA *GetCurFEA(HWND, HOLDFEA *);
114: CHAR *MultiTypeIndex(CHAR *, USHORT);
115: CHAR *EAValueString(CHAR *);
116: VOID GetMem(PPVOID, ULONG);
117: VOID ResizeMem(PVOID, ULONG, ULONG);
118:
119: #define FreeMem(p) DosFreeMem(p)
120:
121: #define ARGFILE 1
122: #define MAX_GEA 500L /* Max size for a GEA List */
123: #define Ref_ASCIIZ 1 /* Reference type for DosEnumAttribute */
124: #define MAXEANAME 255 /* Maximum length an EA Name can be */
125: #define MAXEAVALUE 2048 /* Arbitrary max edit fld len of EA Val */
126: #define EATABLESIZE 12 /* Number of entries in ConvTable */
127: #define GROWSIZE 512 /* Minimum size to increase the heap by */
128: #define FILE_ALL 0x0007 /* Read-only, sys, hidden, & normal */
129: #define MAXSHOWSIZE 34 /* Number of chars to place in desc lbox*/
130: #define LENUSHORTBUF 6 /* Buf size needed to for ascii USHORT */
131:
132: /* Return values from ParseFileName */
133: #define FILE_INVALID 0 /* The filename was invalid */
134: #define FILE_PATH 1 /* The filename was a path */
135: #define FILE_VALID 2 /* The filename was valid */
136:
137: /* definition of level specifiers. required for File Info */
138:
139: #define GetInfoLevel1 1 /* Get info from SFT */
140: #define GetInfoLevel2 2 /* Get size of FEAlist */
141: #define GetInfoLevel3 3 /* Get FEAlist given the GEAlist */
142: #define GetInfoLevel4 4 /* Get whole FEAlist */
143: #define GetInfoLevel5 5 /* Get FSDname */
144:
145: #define SetInfoLevel1 1 /* Set info in SFT */
146: #define SetInfoLevel2 2 /* Set FEAlist */
147:
148: #define OPENMODE OM_DENY_NONE+OM_READ_WRITE
149: #define OPENFLAG OF_OPEN_FILE
150: #define CREATFLAG OF_CREATE_FILE+OF_FAIL
151: #define REPLFLG OF_REPLACE_FILE
152:
153: #define EA_LPBINARY 0xfffe /* Length preceeded binary */
154: #define EA_LPASCII 0xfffd /* Length preceeded ascii */
155: #define EA_ASCIIZ 0xfffc /* Asciiz */
156: #define EA_LPBITMAP 0xfffb /* Length preceeded bitmap */
157: #define EA_LPMETAFILE 0xfffa /* metafile */
158: #define EA_LPICON 0xfff9 /* Length preceeded icon */
159: #define EA_ASCIIZFN 0xffef /* Asciiz file name of associated dat */
160: #define EA_ASCIIZEA 0xffee /* Asciiz EA of associated data */
161: #define EA_MVMT 0xffdf /* Multi-value multi-typed field */
162: #define EA_MVST 0xffde /* Multy value single type field */
163: #define EA_ASN1 0xffdd /* ASN.1 field */
164:
165: #define HM_VALIDFLAGS 0x0003
166:
167: /****** Resource IDs *****/
168:
169: #define IDR_EAD 1
170: #define IDD_MULTILIST 2
171: #define IDD_BITMAP 3
172: #define IDD_ASCIIZ 4
173: #define ID_MENU_MAIN 5
174: #define IDD_OPENBOX 6
175: #define IDD_PATH 7
176: #define IDD_FILEEDIT 8
177: #define IDD_DIRLIST 9
178: #define IDD_FILELIST 10
179: #define IDD_MAIN 11
180: #define IDD_FNAME 12
181: #define IDD_LBOX 13
182: #define IDD_EATYPE 14
183: #define IDD_ADD 15
184: #define IDD_DELETE 16
185: #define IDD_COPY 17
186: #define IDD_EDIT 18
187: #define IDD_PASTE 19
188: #define IDD_NEWFILE 20
189: #define IDD_WRITE 21
190: #define IDD_QUIT 22
191: #define IDD_ADDEA 23
192: #define IDD_EANAME 24
193: #define IDD_NEW 25
194: #define IDD_EXISTING 26
195: #define IDD_ASCIIEDIT 27
196: #define IDD_EAVALUE 28
197: #define IDD_ICONWIN 29
198: #define BMP_EMPTY 30
199: #define IDD_ICON 31
200: #define IDD_MULTIBOX 32
201: #define DID_DONE 33
202: #define IDD_TITLE 34
203: #define IDD_LPDATA 35
204: #define IDD_NEEDBIT 36
205: #define IDD_CODEPAGE 37
206:
207:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.