5 data segment public para 'DATA' ;an000;bgb ;AN000;
9 ;***************************************************************************** ;an000;bgb
11 ;***************************************************************************** ;an000;bgb
14 ; Public Drive_Letter_Buffer ;an000;bgb
15 Public SwBuffer ;an000;bgb
16 Public Switch_F_Buffer ;an000;bgb
17 ; Public FileSpec_Buffer ;an000;bgb
18 public buffer ;an000;bgb
19 public sw_v, sw_f ;an000;bgb;an020;bgb
22 ;*************************************************************************** ;an000;bgb
24 ;*************************************************************************** ;an000;bgb
27 ;Match Flags ;an000;bgb
29 Numeric_Value equ 8000h ; ;an000;bgb;AN000;
30 Signed_Numeric_Value equ 4000h ; ;an000;bgb;AN000;
31 Simple_String equ 2000h ; ;an000;bgb;AN000;
32 Date_String equ 1000h ; ;an000;bgb;AN000;
33 Time_String equ 0800h ; ;an000;bgb;AN000;
34 Complex_List equ 0400h ; ;an000;bgb;AN000;
35 Quoted_String equ 0080h ; ;an000;bgb;AN000;
36 Ignore_Colon equ 0010h ; ;an000;bgb;AN000;
37 Repeats_Allowed equ 0002h ; ;an000;bgb;AN000;
38 Optional equ 0001h ; ;an000;bgb;AN000;
39 Filespec equ 0200h ; ;an000;bgb;AN000;
40 Drive_Only equ 0100h ; ;an000;bgb;AN000;
42 ;Function_Flags ;an000;bgb
44 File_Table_Capitalize equ 1 ; ;an000;bgb;AN000;
45 Char_Table_Capitalize equ 2 ; ;an000;bgb;AN000;
46 Remove_Colon equ 10h ; ;an000;bgb;AN000;
48 ;Extra delimeters and EOL ;an000;bgb
50 Delimiters_Only equ 1 ; ;an000;bgb;AN000;
51 EOL_Or_Delimiters equ 2 ; ;an000;bgb;AN000;
53 Semi_Colon equ ";" ; ;an000;bgb;AN000;
54 Tab equ 09h ; ;an000;bgb;AN000;
55 Colon equ ":" ; ;an000;bgb;AN000;
58 ;Parse Errors ;an000;bgb
60 No_Error equ 0 ; ;an000;bgb;AN000;
61 Too_Many_Operands equ 1 ; ;an000;bgb;AN000;
62 Operand_Missing equ 2 ; ;an000;bgb;AN000;
63 Not_In_Switch_List equ 3 ; ;an000;bgb;AN000;
64 Not_In_Keyword_List equ 4 ; ;an000;bgb;AN000;
65 Out_Of_Range equ 6 ; ;an000;bgb;AN000;
66 Not_In_Value_List equ 7 ; ;an000;bgb;AN000;
67 Not_In_String_List equ 8 ; ;an000;bgb;AN000;
68 Syntax_Error equ 9 ; ;an000;bgb;AN000;
69 End_Of_Parse equ -1 ; ;an000;bgb;AN000;
71 ;Return types ;an000;bgb
73 Type_Reserved equ 0 ; ;an000;bgb;AN000;
74 Type_Number equ 1 ; ;an000;bgb;AN000;
75 Type_List_Index equ 2 ; ;an000;bgb;AN000;
76 Type_String equ 3 ; ;an000;bgb;AN000;
77 Type_Complex equ 4 ; ;an000;bgb;AN000;
78 Type_Filespec equ 5 ; ;an000;bgb;AN000;
79 Type_Drive equ 6 ; ;an000;bgb;AN000;
80 Type_Date equ 7 ; ;an000;bgb;AN000;
81 Type_Time equ 8 ; ;an000;bgb;AN000;
82 Type_Quoted_String equ 9 ; ;an000;bgb;AN000;
86 None equ 0 ; ;an000;bgb;AN000;
87 No_Error equ 0 ; ;an000;bgb;AN000;
88 Switch_Found equ 0FFFFh ; ;an000;bgb;AN000;
89 Range_Ok equ 1 ; ;an000;bgb;AN000;
90 Command_Line_Parms equ 81h ; ;an000;bgb;AN000;
93 ;***************************************************************************** ;an000;bgb
94 ; Parse Structures ;an000;bgb
95 ;***************************************************************************** ;an000;bgb
98 Control struc ;an000;bgb
100 Match_Flags dw ? ;an000;bgb
101 Function_Flags dw ? ;an000;bgb
102 Result dw ? ;an000;bgb
103 Values dw ? ;an000;bgb
104 Num_Keywords db ? ;an000;bgb
105 Keyword db ? ;an000;bgb
107 Control ends ;an000;bgb
109 ;Drive_Letter_Return struc ; ;an000;bgb ;AN000;
110 ;Drive_Type db 0 ; ;an000;bgb ;AN000;
111 ;Drive_Item_Tag db 0 ; ;an000;bgb ;AN000;
112 ;Drive_Pointer dw 0 ; ;an000;bgb ;AN000;
113 ;Drive_Number db 0 ;A=1, B=2, C=3 ;an000;bgb ;AN000;
114 ;Drive_debug db 8 dup(0) ;an000;bgb
115 ;Drive_Letter_Return ends ; ;an000;bgb ;AN000;
117 ;Filespec_Return struc ;AN000;SM ;an000;bgb
118 ;Filespec_Type db 0 ;AN000;SM ;an000;bgb
119 ;FileSpec_Item db 0 ;AN000;SM ;an000;bgb
120 ;FileSpec_Pointer dw 0 ;AN000;SM ;an000;bgb
121 ;Filespec_String_Off dw 0 ;AN000;SM ;an000;bgb
122 ;FileSpec_String_Seg dw 0 ;an000;bgb
123 ;FileSpec_Return ends ;an000;bgb
125 single_Return struc ;AN000;SM ;an000;bgb
126 dftype db 0 ;AN000;SM ;an000;bgb
127 Item db 0 ;AN000;SM ;an000;bgb
128 Pointer dw 0 ;AN000;SM ;an000;bgb
129 drnum_stroff dw 0 ;AN000;SM ;an000;bgb
130 return_strseg dw 0 ;an000;bgb
131 single_return ends ;an000;bgb
134 Switch_Return struc ; ;an000;bgb;AN000;
135 Switch_Type db 0 ; ;an000;bgb;AN000;
136 Switch_Item_Tag db 0 ; ;an000;bgb;AN000;
137 Switch_Pointer dw 0 ; ;an000;bgb;AN000;
138 Switch_Debug db 4 dup(0) ;an000;bgb
139 Switch_Return ends ; ;an000;bgb;AN000;
141 Switch_Num_Return struc ; ;an000;bgb;AN000;
142 Switch_Num_Type db 0 ; ;an000;bgb ;AN000;
143 Switch_Num_Item_Tag db 0 ; ;an000;bgb ;AN000;
144 Switch_Num_Pointer dw 0 ; ;an000;bgb ;AN000;
145 Switch_Number_Low dw 0 ; ;AN0;an000;bgb00;
146 Switch_Number_High dw 0 ; ;AN0;an000;bgb00;
147 Switch_Num_Return ends ; ;an000;bgb;AN000;
149 Switch_String_Return struc ; ;an000;bgb;AN000;
150 Switch_String_Type db 0 ; ;an000;bgb ;AN000;
151 Switch_String_Item_Tag db 0 ; ;an000;bgb ;AN000;
152 Switch_String_Pointer dw 0 ; ;an000;bgb ;AN000;
153 Switch_String_Off dw 0 ; ;an000;bgb;AN000;
154 Switch_String_Seg dw 0 ; ;an000;bgb;AN000;
155 Switch_String_Return ends ; ;an000;bgb;AN000;
159 ;************************************************************************** ;an000;bgb
160 ; Parse tables ;an000;bgb
161 ;************************************************************************** ;an000;bgb
163 Public input_Table ;an000;bgb
164 input_Table label byte ; ;AN000;;an000;bgb
166 dw offset dg:ext_table ;Point to next level ;A;an000;bgbN000;
167 db Delimiters_Only ; ;an000;bgb;AN000;
168 db 1 ; ;an000;bgb;AN000;
169 db Semi_Colon ; ;an000;bgb;AN000;
171 Drive_Table label byte ;an000;bgb;AN000;
173 dw offset dg:Drive_Control_Definition ;Point to next level ;an000;bgb ;AN000;
174 db Delimiters_Only ; ;an000;bgb;AN000;
175 db 1 ; ;an000;bgb;AN000;
176 db Semi_Colon ; ;an000;bgb;AN000;
179 ;************************************************************************** ;an000;bgb
180 ;Define Positionals, Switches and Keywords ;an000;bgb
181 ;************************************************************************** ;an000;bgb
184 Public ext_table ;an000;bgb
185 ext_table label byte ; ;an000;bgb;AN000;
187 db 0,1 ;up to one parm, either drive or file ;an000;bgb;an026;bgb
188 dw dg:dfcontrol ;Pointer to control table ;an000;bgb ;AN000;
189 db 1 ;1 switch def ;an000;bgb;AN020;bgb
190 dw dg:SwControl ;switch control block ;an000;bgb;AN020;bgb
191 db None ;No Keywords (maxk) ;an000;bgb;AN000;
193 Drive_Control_Definition label byte ; ;an000;bgb;AN000;
195 db 0,1 ;Only drive letter positional ;an000;bgb;AN000;
196 dw dg:dfControl ;Pointer to control table ;AN0;an000;bgb00;
197 db None ;0 switches ;an000;bgb;AN000;
198 db None ;No Keywords (maxk) ;an000;bgb;AN000;
203 ;************************************************************************** ;an000;bgb
204 ; Define Positionals, Switches and Keywords ;an000;bgb
205 ;************************************************************************** ;an000;bgb
207 ;this is the new control block for both drive letters and filespecs ;an000;bgb
208 Public dfControl ;an000;bgb
209 dfControl label byte ; ;AN000;;an000;bgb
210 dw drive_only+FileSpec+Optional ; ;an000;bgb ;AN000;
211 dw None ; ;an000;bgb;AN000;
212 dw dg:Buffer ; ;AN000; ;an000;bgb
213 dw dg:No_Value ; ;an000;bgb;AN000;
214 db None ; ;an000;bgb;AN000;
216 Public SwControl ;an02;an000;bgb0;bgb
217 SwControl label byte ; ;AN020;;an000;bgbbgb
218 dw None ; ;an000;bgb;AN000;
219 dw None ; ;an000;bgb;AN000;
220 dw dg:SwBuffer ; ;AN000;;an000;bgb
221 dw dg:No_Value ;an000;bgb ;AN000;
222 db 2 ; ;an000;bgb;AN020;bgb
223 sw_v db "/V",0 ; ;an000;bgb;AN020;bgb
224 sw_f db "/F",0 ; ;an000;bgb;AN020;bgb
228 ;***************************************************************************** ;an000;bgb
229 ; Value lists ;an000;bgb
230 ;***************************************************************************** ;an000;bgb
233 No_Value db 0 ; ;an000;bgb;AN000;
237 ;************************************************************************ ;an000;bgb
238 ; PARSE Return Buffers ;an000;bgb
239 ;************************************************************************ ;an000;bgb
241 ; these buffers were replaced by a single buffer due to the parser bug ;an000;bgb
242 ;Drive_Letter_Buffer Drive_Letter_Return <> ;Example of structure ;an000;bgb ;AN000;
243 ;FileSpec_Buffer FileSpec_Return <> ; ;an000;bgb
244 SwBuffer Switch_Return <> ; ;an000;bgb;AN000;
245 Switch_F_Buffer Switch_Return <> ; ;an000;bgb;AN000;
246 buffer single_return <> ; new results buffer ;an000;bgb
247 data ends ; ;an000;bgb;AN000;
250 ;***************************************************************************** ;an000;bgb
251 ; SysParse Routines ;an000;bgb
252 ;***************************************************************************** ;an000;bgb
256 code segment public para 'CODE' ;an000;bgb
258 FarSW equ Not_Include ; ;an000;bgb;AN000; ;AN000;
259 DateSW equ Not_Include ; ;an000;bgb;AN000;
260 TimeSW equ Not_Include ; ;an000;bgb;AN000;
261 FileSW equ Do_Include ; ;an000;bgb;AN000;
262 CAPSW equ Not_Include ; ;an000;bgb;AN000;
263 CmpxSW equ Not_Include ; ;an000;bgb;AN000;
264 NumSW equ Not_Include ; ;an000;bgb;AN000;
265 KeySW equ Not_Include ; ;an000;bgb;AN000;
266 SwSW equ Do_Include ; ;an000;bgb;AN000;
267 Val1SW equ Not_Include ; ;an000;bgb;AN000;
268 Val2SW equ Not_Include ; ;an000;bgb;AN000;
269 Val3SW equ Not_Include ; ;an000;bgb;AN000;
270 DrvSW equ Do_Include ; ;an000;bgb;AN000;
271 QusSW equ Not_Include ; ;an000;bgb;AN000;
272 basesw equ 1 ;use ds as the default register ;an025;bgb
273 incsw equ 0 ;include psdata myself ;an028;bgb
277 data segment PUBLIC para 'DATA' ;an028;bgb
278 include psdata.inc ;an028;bgb
281 code segment PUBLIC para 'CODE' ;an028;bgb
282 pathlabl parser ;an028;bgb
283 INCLUDE PARSE.ASM ;AN000; ;an028;bgb
284 pathlabl parser ;an028;bgb