summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/ATTRIB/ATTRIB.H
diff options
context:
space:
mode:
authorGravatar Mark Zbikowski2024-04-25 21:24:10 +0100
committerGravatar Microsoft Open Source2024-04-25 22:32:27 +0000
commit2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch)
tree80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/CMD/ATTRIB/ATTRIB.H
parentMerge pull request #430 from jpbaltazar/typoptbr (diff)
downloadms-dos-main.tar.gz
ms-dos-main.tar.xz
ms-dos-main.zip
MZ is back!HEADmain
Diffstat (limited to 'v4.0/src/CMD/ATTRIB/ATTRIB.H')
-rw-r--r--v4.0/src/CMD/ATTRIB/ATTRIB.H443
1 files changed, 443 insertions, 0 deletions
diff --git a/v4.0/src/CMD/ATTRIB/ATTRIB.H b/v4.0/src/CMD/ATTRIB/ATTRIB.H
new file mode 100644
index 0000000..5297d11
--- /dev/null
+++ b/v4.0/src/CMD/ATTRIB/ATTRIB.H
@@ -0,0 +1,443 @@
1/* Module ATTRIB.H */
2
3/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
4/* All defines for attrib.c */
5/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
6
7#define FALSE 0 /*;AN000;*/
8#define TRUE !FALSE /*;AN000;*/
9
10#ifndef BYTE
11#define BYTE unsigned char /*;AN000;*/
12#define WORD unsigned short /*;AN000;*/
13#define DWORD unsigned long /*;AN000;*/
14#endif
15
16#define CARRY 0x0001 /*;AN000; carry flag */
17
18#define YES 1 /*;AN000; Yes return from int 21h Y/N check */
19#define NO 0 /*;AN000; NO return from int 21h Y/N check */
20
21#define NUL 0x0 /*;AN000;*/
22#define BLANK 0x20 /*;AN000;*/
23#define TAB 0x09 /*;AN000;*/
24#define CR 0x0d /*;AN000;*/
25#define LF 0x0a /*;AN000;*/
26
27/* Error_exit() parameter values */
28#define ERR_EXTENDED 1 /*;AN000;*/
29#define ERR_PARSE 2 /*;AN000;*/
30
31
32/* standard file handles */
33#define STDIN 0x00 /*;AN000; Standard Input device handle */
34#define STDOUT 0x01 /*;AN000; Standard Output device handle */
35#define STDERR 0x02 /*;AN000; Standard Error Output device handle */
36#define STDAUX 0x03 /*;AN000; Standard Auxiliary device handle */
37#define STDPRN 0x04 /*;AN000; Standard Printer device handle */
38
39/* attribute byte defines */
40#define AFILE 0x00 /*;AN000;*/
41#define READONLY 0x01 /*;AN000;*/
42#define HIDDEN 0x02 /*;AN000;*/
43#define SYSTEM 0x04 /*;AN000;*/
44#define LABEL 0x08 /*;AN000;*/
45#define SUBDIR 0x10 /*;AN000;*/
46#define ARCHIVE 0x20 /*;AN000;*/
47
48/* extended attribute type defines */
49#define EAISUNDEF 0 /*;AN000; undefined type */
50#define EAISLOGICAL 1 /*;AN000; logical (0 or 1) */
51#define EAISBINARY 2 /*;AN000; binary integer */
52#define EAISASCII 3 /*;AN000; ASCII type */
53#define EAISDATE 4 /*;AN000; DOS file date format */
54#define EAISTIME 5 /*;AN000; DOS file time format */
55
56#define EANAMES 6 /*;AN000; ext attr names ASCII */
57
58/* extended attribute flag defines */
59#define EASYSTEM 0x8000 /*;AN000; EA is system defined */
60#define EAREADONLY 0x4000 /*;AN000; EA is read only */
61#define EAHIDDEN 0x2000 /*;AN000; EA is hidden */
62#define EACREATEONLY 0x1000 /*;AN000; EA is setable only at create time */
63
64/* extended attribute failure return code defines */
65#define EARCNOERROR 0 /*;AN000; no error */
66#define EARCNOTFOUND 1 /*;AN000; name not found */
67#define EARCNOSPACE 2 /*;AN000; no space to hold name or value */
68#define EARCNOTNOW 3 /*;AN000; name can't be set on this function */
69#define EARCNOTEVER 4 /*;AN000; name can't be set */
70#define EARCUNDEF 5 /*;AN000; name known to this FS but not supported */
71#define EARCDEFBAD 6 /*;AN000; EA definition bad (TYPE,LENGTH, etc.) */
72#define EARCACCESS 7 /*;AN000; EA access denied */
73#define EARCVALBAD 8 /*;AN000; EA value not supported */
74#define EARCUNKNOWN -1 /*;AN000; undetermined cause */
75
76/* message retriever interface defines */
77#define NOSUBPTR 0 /*;AN000; no sublist pointer */
78#define NOSUBCNT 0 /*;AN000; 0 substitution count */
79#define ONEPARM 1 /*;AN000; 1 substitution count */
80#define TWOPARM 2 /*;AN000; 2 substitution count */
81#define NOINPUT 0 /*;AN000; no user input */
82#define INPUT 1 /*;AN000; ask user for Y/N input */
83
84/* misc. defines */
85#define A_FILESIZE 1 /* id of special attribute: filesize */
86#define A_DATE 2 /* id of special attribute: date */
87#define A_TIME 3 /* id of special attribute: time */
88
89#define MAX_ATTR_SIZE 160 /*;AN000; max ext attribute buffer size */
90#define MAX_KEYWORD 128 /*;AN000; max size of extended attribute keyword */
91#define MAX_SPL 3 /*;AN000; max number of special attributes */
92
93#define ATTR_SIZE 7 /*;AN000; size in bytes of attr struct */
94#define NAME_SIZE 4 /*;AN000; size in bytes of name struct */
95
96#define NOERROR 0 /*;AN000;*/
97#define NOMOREFILES 18 /*;AN000;*/
98#define FILENOTFOUND 2 /*;AN000;*/
99
100#define GET_DATE 1 /*;AN000;*/
101#define GET_TIME 2 /*;AN000;*/
102
103#define INACTIVE 0x7fff /*;AN000;*/
104/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
105/* All structures defined for attrib.c */
106/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
107
108struct p_null { /*;AN000; a null value list for parser */
109 unsigned char null; /*;AN000;*/
110 }; /*;AN000;*/
111
112struct query_list { /*;AN000; Generic attribute overlay structure */
113 WORD ql_num;
114 BYTE ql_type; /*;AN000; EA type */
115 WORD ql_flags; /*;AN000; EA flags */
116 BYTE ql_name_len; /*;AN000; name length */
117 char ql_name[MAX_KEYWORD]; /*;AN000; name */
118 }; /*;AN000;*/
119
120struct name_list { /*;AN000; Generic attribute overlay structure */
121 BYTE nl_type; /*;AN000; EA type */
122 WORD nl_flags; /*;AN000; EA flags */
123 BYTE nl_name_len; /*;AN000; name length */
124 char nl_name[MAX_KEYWORD]; /*;AN000; name */
125 }; /*;AN000;*/
126
127struct attr_list { /*;AN000; Generic attribute overlay structure */
128 BYTE at_type; /*;AN000; EA type */
129 WORD at_flags; /*;AN000; EA flags */
130 BYTE at_rc; /*;AN000; EA return code */
131 BYTE at_name_len; /*;AN000; name length */
132 WORD at_value_len; /*;AN000; value length */
133 char at_name[MAX_KEYWORD]; /*;AN000; name */
134 }; /*;AN000;*/
135
136struct parm_list { /*;AN000; Parm list for extended open DOS call */
137 DWORD pm_list; /*;AN000; extended attr. list */
138 WORD pm_num_parms; /*;AN000; number of parameters */
139 BYTE pm_id; /*;AN000; id */
140 WORD pm_iomode; /*;AN000; iomode */
141 }; /*;AN000;*/
142
143struct spl_list { /*;AN000;*/
144 char name[MAX_KEYWORD]; /*;AN000;*/
145 WORD id; /*;AN000;*/
146 }; /*;AN000;*/
147
148struct bin_struct { /*;AN000;*/
149 BYTE length; /*;AN000;*/
150 DWORD dword; /*;AN000;*/
151 }; /*;AN000;*/
152
153union eav_union { /*;AN000;*/
154 WORD ea_undef; /*;AN000;*/
155 BYTE ea_logical; /*;AN000;*/
156 struct bin_struct ea_bin; /*;AN000;*/
157 char ea_ascii[129]; /*;AN000;*/
158 DWORD ea_time; /*;AN000;*/
159 DWORD ea_date; /*;AN000;*/
160 }; /*;AN000;*/
161/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
162/* All global variables for attrib.c */
163/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
164struct spl_list specials[MAX_SPL] = { /*;AN000;*/
165 "FILESIZE", A_FILESIZE, /*;AN000;*/
166 "DATE", A_DATE, /*;AN000;*/
167 "TIME", A_TIME }; /*;AN000;*/
168
169
170/* parser structure variables */
171union eav_union ext_attr_value; /*;AN000; result value union */
172
173struct p_result_blk pos1_buff; /*;AN000; result buffer for -+A,-+R */
174struct p_result_blk pos2_buff; /*;AN000; result buffer for -+A,-+R */
175struct p_result_blk pos3_buff; /*;AN000; result buffer for filespec */
176struct p_result_blk pos4_buff; /*;AN000; result buffer for -+A,-+R */
177struct p_result_blk pos5_buff; /*;AN000; result buffer for -+A,-+R */
178struct p_result_blk pos6_buff; /*;AN000; result buffer for id */
179struct p_result_blk pos6b_buff; /*;AN000; result buffer for id */
180struct p_result_blk sw_buff; /*;AN000; result buffer for /S */
181
182char nullword[] = " "; /*;AN000; used when no word attribute */
183char nulldword[] = " "; /*;AN000; used when no double word attribute */
184char nulldate[] = " "; /*;AN000; used when no date attribute */
185char nulltime[] = " "; /*;AN000; used when no time attribute */
186
187char plusa[] = "+A"; /*;AN000; strings for match */
188char minusa[] = "-A"; /*;AN000;*/
189char plusr[] = "+R"; /*;AN000;*/
190char minusr[] = "-R"; /*;AN000;*/
191
192struct p_null noval = /*;AN000; structure for no value list */
193 { 0 }; /*;AN000;*/
194
195struct ps_valist_blk vals1 = /*;AN000; +A-A+R-R value list */
196 { p_nval_string, /*;AN000; string value list type */
197 0, /*;AN000; number of ranges */
198 0, /*;AN000; number of numbers */
199 4, /*;AN000; number of strings */
200 0x20, /*;AN000; item tag */
201 (WORD)plusa, /*;AN000; address of string */
202 0x20, /*;AN000; item tag */
203 (WORD)minusa, /*;AN000; address of string */
204 0x01, /*;AN000; item tag */
205 (WORD)plusr, /*;AN000; address of string */
206 0x01, /*;AN000; item tag */
207 (WORD)minusr }; /*;AN000; address of string */
208
209struct p_control_blk p_con1 = /*;AN000; describes +-A or +-R */
210 { 0x2001, /*;AN000; Simple string,optional */
211 0x0002, /*;AN000; Cap result by char table */
212 (WORD)&pos1_buff, /*;AN000;*/
213 (WORD)&vals1, /*;AN000;*/
214 0, /*;AN000;*/
215 0 }; /*;AN000;*/
216
217struct p_control_blk p_con2 = /*;AN000; describes +-A or +-R (2nd occurrance) */
218 { 0x2001, /*;AN000; Simple string,optional */
219 0x0002, /*;AN000; Cap result by char table */
220 (WORD)&pos2_buff, /*;AN000;*/
221 (WORD)&vals1, /*;AN000;*/
222 0, /*;AN000;*/
223 0 }; /*;AN000;*/
224
225struct p_control_blk p_con3 = /*;AN000; describes filespec */
226 { 0x0200, /*;AN000; File spec required */
227 0x0001, /*;AN000; Cap result by file table */
228 (WORD)&pos3_buff, /*;AN000;*/
229 (WORD)&noval, /*;AN000;*/
230 0, /*;AN000;*/
231 0 }; /*;AN000;*/
232
233struct p_control_blk p_con4 = /*;AN000; describes +-A or +-R */
234 { 0x2001, /*;AN000; Simple string,optional */
235 0x0002, /*;AN000; Cap result by char table */
236 (WORD)&pos4_buff, /*;AN000;*/
237 (WORD)&vals1, /*;AN000;*/
238 0, /*;AN000;*/
239 0 }; /*;AN000;*/
240
241struct p_control_blk p_con5 = /*;AN000; describes +-A or +-R (2nd occurrance) */
242 { 0x2001, /*;AN000; Simple string,optional */
243 0x0002, /*;AN000; Cap result by char table */
244 (WORD)&pos5_buff, /*;AN000;*/
245 (WORD)&vals1, /*;AN000;*/
246 0, /*;AN000;*/
247 0 }; /*;AN000;*/
248
249struct p_control_blk p_con6 = /*;AN000; describes id */
250 { 0x2001, /*;AN000; Simple string,optional */
251 0x0002, /*;AN000; Cap result by char table */
252 (WORD)&pos6_buff, /*;AN000;*/
253 (WORD)&noval, /*;AN000;*/
254 0, /*;AN000;*/
255 0 }; /*;AN000;*/
256
257struct p_control_blk p_con6a = /*;AN000; describes id */
258 { 0x2000, /*;AN000; Simple string */
259 0x0002, /*;AN000; Cap result by char table */
260 (WORD)&pos6_buff, /*;AN000;*/
261 (WORD)&noval, /*;AN000;*/
262 0, /*;AN000;*/
263 0 }; /*;AN000;*/
264
265struct p_control_blk p_con6b = /*;AN000; describes id */
266 { 0xe481, /*;AN000; Quoted string */
267 0x0002, /*;AN000;*/
268 (WORD)&pos6b_buff, /*;AN000;*/
269 (WORD)&noval, /*;AN000;*/
270 0, /*;AN000;*/
271 0 }; /*;AN000;*/
272
273struct p_control_blk p_swi1 = /*;AN000; Switch control block */
274 { 0x0001, /*;AN000; Optional (switch) */
275 0x0002, /*;AN000; Cap result by char table */
276 (WORD)&sw_buff, /*;AN000;*/
277 (WORD)&noval, /*;AN000;*/
278 1, /*;AN000; one switch allowed */
279 "/S" }; /*;AN000; /S */
280
281struct p_parmsx p_px1 = /*;AN000; Parser Control definition for Parm Block 1 */
282 { 1, /*;AN000; positionals */
283 6, /*;AN000;*/
284 &p_con1, /*;AN000;*/
285 &p_con2, /*;AN000;*/
286 &p_con3, /*;AN000;*/
287 &p_con4, /*;AN000;*/
288 &p_con5, /*;AN000;*/
289 &p_con6, /*;AN000;*/
290 1, /*;AN000; switches */
291 &p_swi1, /*;AN000;*/
292 0, /*;AN000; keywords*/
293 0, /*;AN000;*/
294 0, /*;AN000;*/
295 0 }; /*;AN000;*/
296
297struct p_parms p_p1 = /*;AN000; Parms block for line */
298 { &p_px1, /*;AN000; Address of extended parm list */
299 0, /*;AN000;*/
300 0, /*;AN000;*/
301 0 }; /*;AN000;*/
302
303struct p_parmsx p_px2 = /*;AN000; Parser Control definition for Parm Block 1 */
304 { 1, /*;AN000; positionals */
305 2, /*;AN000;*/
306 &p_con6a, /*;AN000;*/
307 &p_con6b, /*;AN000;*/
308 0, /*;AN000;*/
309 0, /*;AN000;*/
310 0, /*;AN000;*/
311 0, /*;AN000;*/
312 1, /*;AN000; switches */
313 &p_swi1, /*;AN000;*/
314 0, /*;AN000; keywords*/
315 0, /*;AN000;*/
316 0, /*;AN000;*/
317 0 }; /*;AN000;*/
318
319struct p_parms p_p2 = /*;AN000; Parms block for line */
320 { &p_px2, /*;AN000; Address of extended parm list */
321 1, /*;AN000;*/
322 1, /*;AN000;*/
323 "=" }; /*;AN000;*/
324
325/* extended open structure variables */
326struct parm_list plist = /*;AN000; Extended open parm list */
327 { -1, /*;AN000; ptr to attr. list */
328 1, /*;AN000; number of parms */
329 6, /*;AN000; id */
330 2 }; /*;AN000; iomode */
331
332/* messgages */
333struct m_sublist msg_num = /*;AN000; describes substitutions */
334 { 72, /*;AN000; for parm one of message */
335 0, /*;AN000; */
336 0, /*;AN000; */
337 0, /*;AN000; */
338 1, /*;AN000; */
339 sf_unsbin2d | sf_right, /*;AN000; unsigned binary to decimal*/
340 9, /*;AN000; */
341 9, /*;AN000; */
342 0 }; /*;AN000; */
343struct m_sublist msg_str2 = /*;AN000; describes substitutions */
344 { 60, /*;AN000; for parm one of message */
345 0, /*;AN000; */
346 0, /*;AN000; */
347 0, /*;AN000; */
348 1, /*;AN000; */
349 sf_left | sf_char | sf_asciiz, /*;AN000; string */
350 0, /*;AN000; null string */
351 0, /*;AN000; */
352 (BYTE)" " }; /*;AN000; */
353struct m_sublist msg_dword = /*;AN000; describes substitutions */
354 { 48, /*;AN000; for parm one of message */
355 0, /*;AN000; */
356 0, /*;AN000; */
357 0, /*;AN000; */
358 1, /*;AN000; */
359 sf_unsbin2d | sf_dword | sf_right, /*;AN000; unsigned binary to decimal*/
360 10, /*;AN000; */
361 9, /*;AN000; */
362 0 }; /*;AN000; */
363struct m_sublist msg_date = /*;AN000; describes substitutions */
364 { 36, /*;AN000; for parm one of message */
365 0, /*;AN000; */
366 0, /*;AN000; */
367 0, /*;AN000; */
368 1, /*;AN000; */
369 sf_date | sf_mdy2, /*;AN000; unsigned binary to decimal*/
370 9, /*;AN000; */
371 9, /*;AN000; */
372 0 }; /*;AN000; */
373struct m_sublist msg_time = /*;AN000; describes substitutions */
374 { 24, /*;AN000; for parm one of message */
375 0, /*;AN000; */
376 0, /*;AN000; */
377 0, /*;AN000; */
378 1, /*;AN000; */
379 sf_time12 | sf_hhmm | sf_right, /*;AN000; unsigned binary to decimal*/
380 9, /*;AN000; NN-NN-NNa (9 characters) */
381 9, /*;AN000; */
382 0 }; /*;AN000; */
383struct m_sublist msg_str = /*;AN000; describes substitutions */
384 { 12, /*;AN000; for parm one of message */
385 0, /*;AN000; */
386 0, /*;AN000; */
387 0, /*;AN000; */
388 1, /*;AN000; */
389 sf_left | sf_char | sf_asciiz, /*;AN000; string */
390 9, /*;AN000; null string */
391 9, /*;AN000; */
392 (BYTE)" " }; /*;AN000; */
393struct m_sublist msg_str1 = /*;AN000; describes substitutions */
394 { 12, /*;AN000; for parm two of message */
395 0, /*;AN000; */
396 0, /*;AN000; */
397 0, /*;AN000; */
398 2, /*;AN000; */
399 sf_left | sf_char | sf_asciiz, /*;AN000; string */
400 0, /*;AN000; null string */
401 0, /*;AN000; */
402 (BYTE)" " }; /*;AN000; */
403struct m_sublist msg_error = /*;AN000; describes substitutions */
404 { 12, /*;AN000; for extended error messages*/
405 0, /*;AN000; */
406 0, /*;AN000; */
407 0, /*;AN000; */
408 0, /*;AN000; */
409 sf_left | sf_char | sf_asciiz, /*;AN000; string */
410 0, /*;AN000; null string */
411 0, /*;AN000; */
412 (BYTE)" " }; /*;AN000; */
413
414/* misc. variables */
415union REGS inregs, /*;AN000; Registers */
416 outregs; /*;AN000;*/
417struct SREGS segregs; /*;AN000; Segment registers */
418
419DWORD old_int24_off; /*;AN000;*/
420
421WORD descending; /*;AN000;*/
422WORD append_x_status; /*;AN000;*/
423WORD did_attrib_ok; /*;AN000;*/
424WORD set_reg_attr, /*;AN000;*/
425 set_ext_attr; /*;AN000;*/
426WORD do_reg_attr, /*;AN000;*/
427 do_ext_attr; /*;AN000;*/
428
429BYTE far *DBCS_ptr; /*;AN000;*/
430BYTE ext_attr_value_type; /*;AN000;*/
431BYTE attr; /*;AN000;*/
432BYTE bits[8] = { 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 }; /*;AN000;*/
433BYTE pmask, /*;AN000;*/
434 mmask; /*;AN000;*/
435
436char as[8] = { ' ',' ','A',' ',' ',' ',' ','R' }; /*;AN000;*/
437char fix_es_reg[1]; /*;AN000;*/
438char ext_attr[MAX_KEYWORD]; /*;AN000;*/
439char error_file_name[256]; /*;AN005;*/
440char fspec[256]; /*;AN000;*/
441char file[256]; /*;AN000;*/
442char str_on[3] = {"ON"}; /*;AN000;*/
443char str_off[4] = {"OFF"}; /*;AN000;*/