]> wirehaze git hosting - MS-DOS.git/blob - v4.0/src/CMD/FORMAT/FORPARSE.INC

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v4.0 / src / CMD / FORMAT / FORPARSE.INC
1 ;\ f
2
3
4
5 data segment public para 'DATA'
6
7 ;
8 ;*****************************************************************************
9 ; Publics
10 ;*****************************************************************************
11 ;
12
13 Public Drive_Letter_Buffer
14 Public Switch_Buffer
15 Public Switch_Num_Buffer
16 Public Switch_String_Buffer
17
18
19 ;
20 ;***************************************************************************
21 ; Equates
22 ;***************************************************************************
23 ;
24
25 ;Match Flags
26
27 Numeric_Value equ 8000h ; ;AN000;
28 Signed_Numeric_Value equ 4000h ; ;AN000;
29 Simple_String equ 2000h ; ;AN000;
30 Date_String equ 1000h ; ;AN000;
31 Time_String equ 0800h ; ;AN000;
32 Complex_List equ 0400h ; ;AN000;
33 Filespec equ 0200h ; ;AN000;
34 Drive_Only equ 0100h ; ;AN000;
35 Quoted_String equ 0080h ; ;AN000;
36 Ignore_Colon equ 0010h ; ;AN000;
37 Repeats_Allowed equ 0002h ; ;AN000;
38 Optional equ 0001h ; ;AN000;
39
40 ;Function_Flags
41
42 File_Table_Capitalize equ 1 ; ;AN000;
43 Char_Table_Capitalize equ 2 ; ;AN000;
44 Remove_Colon equ 10h ; ;AN000;
45
46 ;Extra delimeters and EOL
47
48 Delimiters_Only equ 1 ; ;AN000;
49 EOL_Or_Delimiters equ 2 ; ;AN000;
50
51 Semi_Colon equ ";" ; ;AN000;
52 Tab equ 09h ; ;AN000;
53 Colon equ ":" ; ;AN000;
54
55
56 ;Parse Errors
57
58 No_Error equ 0 ; ;AN000;
59 Too_Many_Operands equ 1 ; ;AN000;
60 Operand_Missing equ 2 ; ;AN000;
61 Not_In_Switch_List equ 3 ; ;AN000;
62 Not_In_Keyword_List equ 4 ; ;AN000;
63 Out_Of_Range equ 6 ; ;AN000;
64 Not_In_Value_List equ 7 ; ;AN000;
65 Not_In_String_List equ 8 ; ;AN000;
66 Syntax_Error equ 9 ; ;AN000;
67 End_Of_Parse equ -1 ; ;AN000;
68
69 ;Return types
70
71 Type_Reserved equ 0 ; ;AN000;
72 Type_Number equ 1 ; ;AN000;
73 Type_List_Index equ 2 ; ;AN000;
74 Type_String equ 3 ; ;AN000;
75 Type_Complex equ 4 ; ;AN000;
76 Type_Filespec equ 5 ; ;AN000;
77 Type_Drive equ 6 ; ;AN000;
78 Type_Date equ 7 ; ;AN000;
79 Type_Time equ 8 ; ;AN000;
80 Type_Quoted_String equ 9 ; ;AN000;
81
82 ;Other
83
84 None equ 0 ; ;AN000;
85 No_Error equ 0 ; ;AN000;
86 Switch_Found equ 0FFFFh ; ;AN000;
87 Range_Ok equ 1 ; ;AN000;
88 Command_Line_Parms equ 81h ; ;AN000;
89
90 ;
91 ;*****************************************************************************
92 ; Parse Structures
93 ;*****************************************************************************
94 ;
95
96 Control struc
97
98 Match_Flags dw ?
99 Function_Flags dw ?
100 Result dw ?
101 Values dw ?
102 Num_Keywords db ?
103 Keyword db ?
104
105 Control ends
106
107 Drive_Letter_Return struc ; ;AN000;
108
109 Drive_Type db 0 ; ;AN000;
110 Drive_Item_Tag db 0 ; ;AN000;
111 Drive_Pointer dw 0 ; ;AN000;
112 Drive_Number db 0 ;A=1, B=2, C=3 ;AN000;
113 Drive_debug db 8 dup(0)
114
115 Drive_Letter_Return ends ; ;AN000;
116
117 Switch_Return struc ; ;AN000;
118
119 Switch_Type db 0 ; ;AN000;
120 Switch_Item_Tag db 0 ; ;AN000;
121 Switch_Pointer dw 0 ; ;AN000;
122 Switch_Debug db 4 dup(0)
123
124 Switch_Return ends ; ;AN000;
125
126 Switch_Num_Return struc ; ;AN000;
127
128 Switch_Num_Type db 0 ; ;AN000;
129 Switch_Num_Item_Tag db 0 ; ;AN000;
130 Switch_Num_Pointer dw 0 ; ;AN000;
131 Switch_Number_Low dw 0 ; ;AN000;
132 Switch_Number_High dw 0 ; ;AN000;
133
134 Switch_Num_Return ends ; ;AN000;
135
136 Switch_String_Return struc ; ;AN000;
137
138 Switch_String_Type db 0 ; ;AN000;
139 Switch_String_Item_Tag db 0 ; ;AN000;
140 Switch_String_Pointer dw 0 ; ;AN000;
141 Switch_String_Off dw 0 ; ;AN000;
142 Switch_String_Seg dw 0 ; ;AN000;
143
144 Switch_String_Return ends ; ;AN000;
145
146
147 ;
148 ;**************************************************************************
149 ; Parse tables
150 ;**************************************************************************
151 ;
152
153 IF FSExec ;conditionally assemble /FS: ;an018; dms;
154
155 Switch_FS_Table label byte ; ;AN000;
156
157 dw Drive_Control_Definition ;Point to next level ;AN000;
158 db 0 ; ;AN000;
159
160 ENDIF ;end conditional assembly /FS: ;an018; dms;
161
162 Command_Line_Table label byte ; ;AN000;
163
164 dw Command_Control ;Point to next level ;AN000;
165 db 0 ; ;AN000;
166
167 ;
168 ;**************************************************************************
169 ;Define Positionals, Switches and Keywords
170 ;**************************************************************************
171 ;
172
173
174 IF FSExec ;conditionally assemble /FS: ;an018; dms;
175
176 Drive_Control_Definition label byte ; ;AN000;
177
178 db 1,1 ;Only drive letter posistional ;AN000;
179 dw Positional_Control ;Pointer to control table ;AN000;
180 db 1 ;1 switch ;AN000;
181 dw Switch_FS_Control ; ;AN000;
182 db None ;No Keywords (maxk) ;AN000;
183
184 ENDIF ;end conditional assembly /FS: ;an018; dms;
185
186 Command_Control label byte ; ;AN000;
187
188 db 1,1 ;Only drive letter posistional ;AN000;
189 dw Positional_Control ;Pointer to control table ;AN000;
190 IF ShipDisk
191 db 13 ;if /Z switch needed ;an000; dms;
192 ELSE
193 db 12 ; ;AC001;
194 ENDIF
195 dw Switch_V_Control ;Without quotes AN000;
196 dw Switch_S_Control ; ;AN000;
197 dw Switch_4_Control ; ;AN000;
198 dw Switch_1_Control ; ;AN000;
199 dw Switch_8_Control ; ;AN000;
200 dw Switch_B_Control ; ;AN000;
201 dw Switch_T_Control ; ;AN000;
202 dw Switch_N_Control ; ;AN000;
203 dw Switch_Select_Control ; ;AN000;
204 dw Switch_Backup_Control ; ;AN000;
205 dw Switch_Autotest_Control ; ;AN000;
206 dw Switch_F_Control ; ;AC001;
207 IF ShipDisk
208 dw Switch_Z_Control ;1 sector/cluster switch ;an000; dms;
209 ENDIF
210 db None ;No Keywords (maxk) ;AN000;
211
212 ;
213 ;**************************************************************************
214 ;Control Tables
215 ;**************************************************************************
216 ;
217
218 Positional_Control label byte ; ;AN000;
219
220 dw Drive_Only ;Match_Flag ;AN000;
221 dw None ;No function flags ;AN000;
222 dw Drive_Letter_Buffer ;Where it will be returned ;AN000;
223 dw No_Value ;No value ranges defined ;AN000;
224 db None ;No defined switches/keywords ;AN000;
225
226 IF FSExec ;conditionally assemble /FS: ;an018; dms;
227
228 Switch_FS_Control label byte
229 dw Simple_String ;/FS:xxxxx ;AN000;
230 dw File_Table_Capitalize ;Make it uppercase ;AN000;
231 dw Switch_String_Buffer ; ;AN000;
232 dw No_Value ; ;AN000;
233 db 1 ; ;AN000;
234 db "/FS",0 ; ;AN000;
235
236 ENDIF ;end conditional assembly /FS: ;an018; dms;
237
238 Switch_V_Control label byte ; ;AN000;
239
240 dw Simple_String+Quoted_String+Optional ;/v:xxxxxxxx ;AN000;
241 dw File_Table_Capitalize ; ;AN000;
242 dw Switch_String_Buffer ; ;AN000;
243 dw No_Value ; ;AN000;
244 db 1 ; ;AN000;
245 db "/V",0 ; ;AN000;
246
247 Switch_S_Control label byte ; ;AN000;
248
249 dw None ; ;AN000;
250 dw None ; ;AN000;
251 dw Switch_Buffer ; ;AN000;
252 dw No_Value ; ;AN000;
253 db 1 ; ;AN000;
254 db "/S",0 ; ;AN000;
255
256 Switch_4_Control label byte ; ;AN000;
257
258 dw None ; ;AN000;
259 dw None ; ;AN000;
260 dw Switch_Buffer ; ;AN000;
261 dw No_Value ; ;AN000;
262 db 1 ; ;AN000;
263 db "/4",0 ; ;AN000;
264
265 Switch_1_Control label byte ; ;AN000;
266
267 dw None ; ;AN000;
268 dw None ; ;AN000;
269 dw Switch_Buffer ; ;AN000;
270 dw No_Value ; ;AN000;
271 db 1 ; ;AN000;
272 db "/1",0 ; ;AN000;
273
274 Switch_8_Control label byte ; ;AN000;
275
276 dw None ; ;AN000;
277 dw None ; ;AN000;
278 dw Switch_Buffer ; ;AN000;
279 dw No_Value ; ;AN000;
280 db 1 ; ;AN000;
281 db "/8",0 ; ;AN000;
282
283 Switch_B_Control label byte ; ;AN000;
284
285 dw None ; ;AN000;
286 dw None ; ;AN000;
287 dw Switch_Buffer ; ;AN000;
288 dw No_Value ; ;AN000;
289 db 1 ; ;AN000;
290 db "/B",0 ; ;AN000;
291
292 Switch_T_Control label byte ; ;AN000;
293
294 dw Numeric_Value ; ;AN000;
295 dw None ; ;AN000;
296 dw Switch_Num_Buffer ; ;AN000;
297 dw Switch_T_Value ; ;AN000;
298 db 1 ; ;AN000;
299 db "/T",0 ; ;AN000;
300
301 Switch_N_Control label byte ; ;AN000;
302
303 dw Numeric_Value ; ;AN000;
304 dw None ; ;AN000;
305 dw Switch_Num_Buffer ; ;AN000;
306 dw Switch_N_Value ; ;AN000;
307 db 1 ; ;AN000;
308 db "/N",0 ; ;AN000;
309
310 Switch_Select_Control label byte ; ;AN000;
311
312 dw None ; ;AN000;
313 dw None ; ;AN000;
314 dw Switch_Buffer ; ;AN000;
315 dw No_Value ; ;AN000;
316 db 1 ; ;AN000;
317 db "/SELECT",0 ; ;AN000;
318
319 Switch_Backup_Control label byte ; ;AN000;
320
321 dw None ; ;AN000;
322 dw None ; ;AN000;
323 dw Switch_Buffer ; ;AN000;
324 dw No_Value ; ;AN000;
325 db 1 ; ;AN000;
326 db "/BACKUP",0 ; ;AN000;
327
328 Switch_Autotest_Control label byte ; ;AN000;
329
330 dw None ; ;AN000;
331 dw None ; ;AN000;
332 dw Switch_Buffer ; ;AN000;
333 dw No_Value ; ;AN000;
334 db 1 ; ;AN000;
335 db "/AUTOTEST",0 ; ;AN000;
336
337 Switch_F_Control label byte ; ;AN001;
338 dw Simple_String ;/F:xxxxx ;AN001;
339 dw File_Table_Capitalize ;Make it uppercase ;AN001;
340 dw Switch_String_Buffer ; ;AN001;
341 dw Switch_Size_Value ; ;AN001;
342 db 1 ; ;AN001;
343 db "/F",0 ; ;AN001;
344
345 IF ShipDisk
346
347 Switch_Z_Control label byte ;control structure for /Z ;an000; dms;
348 dw None ; ;an000; dms;
349 dw None ; ;an000; dms;
350 dw Switch_Buffer ; ;an000; dms;
351 dw No_Value ; ;an000; dms;
352 db 1 ; ;an000; dms;
353 db "/Z",0 ; ;an000; dms;
354
355 ENDIF
356
357 ;
358 ;************************************************************************
359 ; PARSE Value Lists
360 ;************************************************************************
361 ;
362
363 Switch_T_Value label byte ; ;AN000;
364
365 db 1 ;Range only ;ANOOO;
366 db 1 ;1 range ;ANOOO;
367 db Range_OK ;Item_Tag ;ANOOO;
368 dd 1 ;1 is low bound ;ANOOO;
369 dd 1024 ;2**10 is max ;AN000;
370
371 Switch_N_Value label byte ; ;AN000;
372
373 db 1 ;Range only ;ANOOO;
374 db 1 ;1 range ;ANOOO;
375 db Range_OK ;Item_Tag ;ANOOO;
376 dd 1 ;1 is low bound ;ANOOO;
377 dd 64 ;2**6 is max ;AN000;
378
379 Switch_Size_Value label byte ; ;AN001;
380
381 db 3 ;Look for strings ;AN001;
382 db 0 ;No ranges ;AN001;
383 db 0 ;No numerics ;AN001;
384 db 27 ;16 possible strings ;AN001;
385 db Size_160 ; ;AN001;
386 dw String_160k_1 ;/F:160 ;AN001;
387 db Size_160 ; ;AN001;
388 dw String_160k_2 ;/F:160K ;AN001;
389 db Size_160 ; ;AN001;
390 dw String_160k_3 ;/F:160KB ;AN001;
391 db Size_180 ; ;AN001;
392 dw String_180k_1 ;/F:180 ;AN001;
393 db Size_180 ; ;AN001;
394 dw String_180k_2 ;/F:180K ;AN001;
395 db Size_180 ; ;AN001;
396 dw String_180k_3 ;/F:180KB ;AN001;
397 db Size_320 ; ;AN001;
398 dw String_320k_1 ;/F:320 ;AN001;
399 db Size_320 ; ;AN001;
400 dw String_320k_2 ;/F:320K ;AN001;
401 db Size_320 ; ;AN001;
402 dw String_320k_3 ;/F:320KB ;AN001;
403 db Size_360 ; ;AN001;
404 dw String_360k_1 ;/F:360 ;AN001;
405 db Size_360 ; ;AN001;
406 dw String_360k_2 ;/F:360K ;AN001;
407 db Size_360 ; ;AN001;
408 dw String_360k_3 ;/F:360KB ;AN001;
409 db Size_720 ; ;AN001;
410 dw String_720k_1 ;/F:720 ;AN001;
411 db Size_720 ; ;AN001;
412 dw String_720k_2 ;/F:720K ;AN001;
413 db Size_720 ; ;AN001;
414 dw String_720k_3 ;/F:720KB ;AN001;
415 db Size_1200 ; ;AN001;
416 dw String_1200k_1 ;/F:1200 ;AN001;
417 db Size_1200 ; ;AN001;
418 dw String_1200k_2 ;/F:1200K ;AN001;
419 db Size_1200 ; ;AN001;
420 dw String_1200k_3 ;/F:1200KB ;AN001;
421 db Size_1200 ; ;AN001;
422 dw String_1200k_4 ;/F:1.2 ;AN001;
423 db Size_1200 ; ;AN001;
424 dw String_1200k_5 ;/F:1.2M ;AN001;
425 db Size_1200 ; ;AN001;
426 dw String_1200k_6 ;/F:1.2MB ;AN001;
427 db Size_1440 ; ;AN001;
428 dw String_1440k_1 ;/F:1440 ;AN001;
429 db Size_1440 ; ;AN001;
430 dw String_1440k_2 ;/F:1440K ;AN001;
431 db Size_1440 ; ;AN001;
432 dw String_1440k_3 ;/F:1440KB ;AN001;
433 db Size_1440 ; ;AN001;
434 dw String_1440k_4 ;/F:1.44 ;AN001;
435 db Size_1440 ; ;AN001;
436 dw String_1440k_5 ;/F:1.44M ;AN001;
437 db Size_1440 ; ;AN001;
438 dw String_1440k_6 ;/F:1.44MB ;AN001;
439
440
441 No_Value label byte ; ;AN000;
442 db 0 ; ;AN000;
443
444 ;
445 ;*****************************************************************************
446 ; Data Area for value lists
447 ;*****************************************************************************
448 ;
449
450 ;
451 ;The following are a list of the allowed strings for the /F:xxxxx switch.
452 ;
453
454 String_160k_1 db "160" ,Asciiz_End ; ;AN001;
455 String_160k_2 db "160K" ,Asciiz_End ; ;AN001;
456 String_160k_3 db "160KB" ,Asciiz_End ; ;AN001;
457 String_180k_1 db "180" ,Asciiz_End ; ;AN001;
458 String_180k_2 db "180K" ,Asciiz_End ; ;AN001;
459 String_180k_3 db "180KB" ,Asciiz_End ; ;AN001;
460 String_320k_1 db "320" ,Asciiz_End ; ;AN001;
461 String_320k_2 db "320K" ,Asciiz_End ; ;AN001;
462 String_320k_3 db "320KB" ,Asciiz_End ; ;AN001;
463 String_360k_1 db "360" ,Asciiz_End ; ;AN001;
464 String_360k_2 db "360K" ,Asciiz_End ; ;AN001;
465 String_360k_3 db "360KB" ,Asciiz_End ; ;AN001;
466 String_720k_1 db "720" ,Asciiz_End ; ;AN001;
467 String_720k_2 db "720K" ,Asciiz_End ; ;AN001;
468 String_720k_3 db "720KB" ,Asciiz_End ; ;AN001;
469 String_1200k_1 db "1200" ,Asciiz_End ; ;AN001;
470 String_1200k_2 db "1200K",Asciiz_End ; ;AN001;
471 String_1200k_3 db "1200KB",Asciiz_End ; ;AN001;
472 String_1200k_4 db "1.2" ,Asciiz_End ; ;AN001;
473 String_1200k_5 db "1.2M" ,Asciiz_End ; ;AN001;
474 String_1200k_6 db "1.2MB" ,Asciiz_End ; ;AN001;
475 String_1440k_1 db "1440" ,Asciiz_End ; ;AN001;
476 String_1440k_2 db "1440K",Asciiz_End ; ;AN001;
477 String_1440k_3 db "1440KB",Asciiz_End ; ;AN001;
478 String_1440k_4 db "1.44",Asciiz_End ; ;AN001;
479 String_1440k_5 db "1.44M",Asciiz_End ; ;AN001;
480 String_1440k_6 db "1.44MB",Asciiz_End ; ;AN001;
481
482 ;
483 ;************************************************************************
484 ; PARSE Return Buffers
485 ;************************************************************************
486 ;
487
488 Drive_Letter_Buffer Drive_Letter_Return <> ;Example of structure ;AN000;
489 Switch_Buffer Switch_Return <> ; ;AN000;
490 Switch_Num_Buffer Switch_Num_Return <> ; ;AN000;
491 Switch_String_Buffer Switch_String_Return <> ; ;AN000;
492
493 data ends
494
495 ;
496 ;*****************************************************************************
497 ; SysParse Routines
498 ;*****************************************************************************
499 ;
500
501
502 code segment public para 'CODE'
503 assume cs:code,ds:Data
504
505 FarSW equ Not_Include ;AN000;
506 DateSW equ Not_Include ; ;AN000;
507 TimeSW equ Not_Include ; ;AN000;
508 FileSW equ Do_Include ; ;AN000;
509 CAPSW equ Do_Include ; ;AN000;
510 CmpxSW equ Not_Include ; ;AN000;
511 NumSW equ Do_Include ; ;AN000;
512 KeySW equ Not_Include ; ;AN000;
513 SwSW equ Do_Include ; ;AN000;
514 Val1SW equ DO_Include ; ;AN000;
515 Val2SW equ Not_Include ; ;AN000;
516 Val3SW equ Do_Include ; ;AN001;
517 DrvSW equ Do_Include ; ;AN000;
518 QusSW equ Do_Include ; ;AN000;
519
520 INCLUDE PARSE.ASM ; ;AN000;
521
522
523 code ends