5 data segment public para 'DATA'
8 ;*****************************************************************************
10 ;*****************************************************************************
13 Public Drive_Letter_Buffer
15 Public Switch_Num_Buffer
16 Public Switch_String_Buffer
20 ;***************************************************************************
22 ;***************************************************************************
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;
42 File_Table_Capitalize equ 1 ; ;AN000;
43 Char_Table_Capitalize equ 2 ; ;AN000;
44 Remove_Colon equ 10h ; ;AN000;
46 ;Extra delimeters and EOL
48 Delimiters_Only equ 1 ; ;AN000;
49 EOL_Or_Delimiters equ 2 ; ;AN000;
51 Semi_Colon equ ";" ; ;AN000;
53 Colon equ ":" ; ;AN000;
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;
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;
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;
91 ;*****************************************************************************
93 ;*****************************************************************************
107 Drive_Letter_Return struc ; ;AN000;
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)
115 Drive_Letter_Return ends ; ;AN000;
117 Switch_Return struc ; ;AN000;
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)
124 Switch_Return ends ; ;AN000;
126 Switch_Num_Return struc ; ;AN000;
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;
134 Switch_Num_Return ends ; ;AN000;
136 Switch_String_Return struc ; ;AN000;
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;
144 Switch_String_Return ends ; ;AN000;
148 ;**************************************************************************
150 ;**************************************************************************
153 IF FSExec ;conditionally assemble /FS: ;an018; dms;
155 Switch_FS_Table label byte ; ;AN000;
157 dw Drive_Control_Definition ;Point to next level ;AN000;
160 ENDIF ;end conditional assembly /FS: ;an018; dms;
162 Command_Line_Table label byte ; ;AN000;
164 dw Command_Control ;Point to next level ;AN000;
168 ;**************************************************************************
169 ;Define Positionals, Switches and Keywords
170 ;**************************************************************************
174 IF FSExec ;conditionally assemble /FS: ;an018; dms;
176 Drive_Control_Definition label byte ; ;AN000;
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;
184 ENDIF ;end conditional assembly /FS: ;an018; dms;
186 Command_Control label byte ; ;AN000;
188 db 1,1 ;Only drive letter posistional ;AN000;
189 dw Positional_Control ;Pointer to control table ;AN000;
191 db 13 ;if /Z switch needed ;an000; dms;
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;
208 dw Switch_Z_Control ;1 sector/cluster switch ;an000; dms;
210 db None ;No Keywords (maxk) ;AN000;
213 ;**************************************************************************
215 ;**************************************************************************
218 Positional_Control label byte ; ;AN000;
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;
226 IF FSExec ;conditionally assemble /FS: ;an018; dms;
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;
236 ENDIF ;end conditional assembly /FS: ;an018; dms;
238 Switch_V_Control label byte ; ;AN000;
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;
247 Switch_S_Control label byte ; ;AN000;
251 dw Switch_Buffer ; ;AN000;
252 dw No_Value ; ;AN000;
256 Switch_4_Control label byte ; ;AN000;
260 dw Switch_Buffer ; ;AN000;
261 dw No_Value ; ;AN000;
265 Switch_1_Control label byte ; ;AN000;
269 dw Switch_Buffer ; ;AN000;
270 dw No_Value ; ;AN000;
274 Switch_8_Control label byte ; ;AN000;
278 dw Switch_Buffer ; ;AN000;
279 dw No_Value ; ;AN000;
283 Switch_B_Control label byte ; ;AN000;
287 dw Switch_Buffer ; ;AN000;
288 dw No_Value ; ;AN000;
292 Switch_T_Control label byte ; ;AN000;
294 dw Numeric_Value ; ;AN000;
296 dw Switch_Num_Buffer ; ;AN000;
297 dw Switch_T_Value ; ;AN000;
301 Switch_N_Control label byte ; ;AN000;
303 dw Numeric_Value ; ;AN000;
305 dw Switch_Num_Buffer ; ;AN000;
306 dw Switch_N_Value ; ;AN000;
310 Switch_Select_Control label byte ; ;AN000;
314 dw Switch_Buffer ; ;AN000;
315 dw No_Value ; ;AN000;
317 db "/SELECT",0 ; ;AN000;
319 Switch_Backup_Control label byte ; ;AN000;
323 dw Switch_Buffer ; ;AN000;
324 dw No_Value ; ;AN000;
326 db "/BACKUP",0 ; ;AN000;
328 Switch_Autotest_Control label byte ; ;AN000;
332 dw Switch_Buffer ; ;AN000;
333 dw No_Value ; ;AN000;
335 db "/AUTOTEST",0 ; ;AN000;
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;
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;
353 db "/Z",0 ; ;an000; dms;
358 ;************************************************************************
360 ;************************************************************************
363 Switch_T_Value label byte ; ;AN000;
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;
371 Switch_N_Value label byte ; ;AN000;
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;
379 Switch_Size_Value label byte ; ;AN001;
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;
441 No_Value label byte ; ;AN000;
445 ;*****************************************************************************
446 ; Data Area for value lists
447 ;*****************************************************************************
451 ;The following are a list of the allowed strings for the /F:xxxxx switch.
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;
483 ;************************************************************************
484 ; PARSE Return Buffers
485 ;************************************************************************
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;
496 ;*****************************************************************************
498 ;*****************************************************************************
502 code segment public para 'CODE'
503 assume cs:code,ds:Data
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;
520 INCLUDE PARSE.ASM ; ;AN000;