1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
const segment public para 'const' ;AC000;bgb
;***************************************************************************
; Equates
;***************************************************************************
;
;Match Flags
Numeric_Value equ 8000h ; AN000
Signed_Numeric_Value equ 4000h ; AN000
Simple_String equ 2000h ; AN000
Date_String equ 1000h ; AN000
Time_String equ 0800h ; AN000
Complex_List equ 0400h ; AN000
Filespec equ 0200h ; AN000
Drive_Only equ 0100h ; AN000
Quoted_String equ 0080h ; AN000
Ignore_Colon equ 0010h ; AN000
Repeats_Allowed equ 0002h ; AN000
Optional equ 0001h ; AN000
;Function_Flags
File_Table_Capitalize equ 1 ; AN000
Char_Table_Capitalize equ 2 ; AN000
Remove_Colon equ 10h ; AN000
;Extra delimeters and EOL
No_Extra_Delimiters equ 00h ; AN000;SM
Delimiters_Only equ 1 ; AN000
EOL_Or_Delimiters equ 2 ; AN000
Semi_Colon equ ";" ; AN000
Tab equ 09h ; AN000
Colon equ ":" ; AN000
;Parse Errors
No_Error equ 0 ; AN000
Too_Many_Operands equ 1 ; AN000
Operand_Missing equ 2 ; AN000
Not_In_Switch_List equ 3 ; AN000
Not_In_Keyword_List equ 4 ; AN000
Out_Of_Range equ 6 ; AN000
Not_In_Value_List equ 7 ; AN000
Not_In_String_List equ 8 ; AN000
Syntax_Error equ 9 ; AN000
End_Of_Parse equ -1 ; AN000
;Return types
Type_Reserved equ 0 ; ;AN000;
Type_Number equ 1 ; ;AN000;
Type_List_Index equ 2 ; ;AN000;
Type_String equ 3 ; ;AN000;
Type_Complex equ 4 ; ;AN000;
Type_Filespec equ 5 ; ;AN000;
Type_Drive equ 6 ; ;AN000;
Type_Date equ 7 ; ;AN000;
Type_Time equ 8 ; ;AN000;
Type_Quoted_String equ 9 ; ;AN000;
;Other
None equ 0 ; AN000
No_Error equ 0 ; AN000
Switch_Found equ 0FFFFh ; AN000
Range_Ok equ 1 ; AN000
Command_Line_Parms equ 81h ; AN000
const ends ;AC000;bgb
data segment public para 'DATA' ;AC000;bgb
;***************************************************************************** ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; Parse Tables ;AN000;bgb
;***************************************************************************** ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; ;AN000;bgb
;The following parse control block can be used for any command which ;AN000;bgb
;needs only one optional file specification an operand. Returns a ;AN000;bgb
;pointer to the unverified string in PARSE1_OUTPUT. Currently used ;AN000;bgb
;for the RECOVER command. ;AN000;bgb
;***************************************************************************** ;AN000;bgb
;;;;db 'PARSE TABLE AREA' ;AN000;bgb
public parms_input_block, parms_ext_block, control_block, value_list_block
public results_block, parse_type, parse_code, parse_addr,
;AN000;bgb
;***************************************************************************** ;AN000;bgb
; This is the parms input block pointed to by es:di before calling sysparse. ;AN000;bgb
; it is the top level table. ;AN000;bgb
parms_input_block LABEL BYTE ;AN000;bgb
DW dg:parms_ext_block ; addr of parms extension block ;AN000;bgb
DB 0 ; no delimiters or eol chars ;AN000;bgb
;AN000;bgb
;***************************************************************************** ;AN000;bgb
; This is the parms extension block pointed to by the parms input block. ;AN000;bgb
; it defines the number and type of parameters allowed in the command line. ;AN000;bgb
parms_ext_block LABEL BYTE ;AN000;bgb
DB 1,1 ; only one positional parm ;AN000;bgb
DW dg:control_block ; addr of positional control block ;AN000;bgb
DB 0 ; no switches ;AN000;bgb
DB 0 ; no keywords ;AN000;bgb
; ;AN000;bgb
;PARSE control block for an optional file specification (upper cased) ;AN000;bgb
;or drive number ;AN000;bgb
; ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; This is the control block for either drive letter "c:", or filename.ext, or ;AN000;bgb
; both "c:filename.ext" entered in the command line. it is pointed to by the ;AN000;bgb
; parms extension block. ;AN000;bgb
control_block LABEL BYTE ;AN000;bgb
Dw $p_file_spc+$p_drv_only ; allowable return values ;AN000;bgb
; 0200 = filespec ;AN000;bgb
; 0100 = drive only ;AN000;bgb
DW 1 ; capitalize - file table ;AN000;bgb
DW dg:results_block ; points to reults block ;AN000;bgb
DW dg:value_list_block ; point to valu list block ;AN000;bgb
DB 0 ; no keyword synonyms ;AN000;bgb
; ;AN000;bgb
;Indicates no value list for PARSE. ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; This is the value list block pointed to by the control block. This table is ;AN000;bgb
; used to define the type of numeric or string parameters expected. Since no ;AN000;bgb
; parameters with numerics or strings are used, this block is set to zero. ;AN000;bgb
value_list_block DW 0 ;AN000; no values ;AN000;bgb
;AN000;bgb
; ;AN000;bgb
;Common output blocks for PARSE number, complex, or string values. ;AN000;bgb
;***************************************************************************** ;AN000;bgb
; This is the results block pointed to by the control block. ;AN000;bgb
; both "c:filename.ext" entered in the command line. it is pointed to by the ;AN000;bgb
; parms extension block. ;AN000;bgb
results_block LABEL BYTE ;AN000; ;AN000;bgb
PARSE_TYPE DB 0 ; type of parm returned ;AN000;bgb
PARSE_CODE DB 0 ; matched item tag / return valu ;AN000;bgb
PARSE_SYN DW 0 ; es offset of synonym ;AN000;bgb
PARSE_ADDR DD 0 ; either a numeric value, or ;AN000;bgb
dd 0 ;parser puts in too many;the offset of string value ;AN000;bgb
;;;;DB 'PARSE AREA ENDS'
data ends ;AN000;bgb
;AN000;bgb
; ;AN000;
code segment PUBLIC para 'CODE' ;AC000;bgb ;AN000;
;***************************************************************************** ;AN000;
; SysParse Routines ;AN000;
;***************************************************************************** ;AN000;
FarSW equ Not_Include ; ;AN000;
DateSW equ Not_Include ; ;AN000;
TimeSW equ Not_Include ; ;AN000;
FileSW equ Do_Include ; ;AN000;
CAPSW equ Not_Include ; ;AN000;
CmpxSW equ Not_Include ; ;AN000;
NumSW equ Not_Include ; ;AN000;
KeySW equ Not_Include ; ;AN000;
SwSW equ Not_Include ; ;AN000;
Val1SW equ Not_Include ; ;AN000;
Val2SW equ Not_Include ; ;AN000;
Val3SW equ Not_Include ; ;AN000;
DrvSW equ Do_Include ; ;AN000;
QusSW equ Not_Include ;
basesw equ 1 ;use ds as the default register ;an040;bgb
incsw equ 0 ;include psdata myself ;an040;bgb
code ends ;an040;bgb
;an040;bgb
;an040;bgb
data segment PUBLIC para 'DATA' ;an040;bgb
include psdata.inc ;an040;bgb
data ends ;an040;bgb
;an040;bgb
code segment PUBLIC para 'CODE' ;an040;bgb
pathlabl parser ;an040;bgb
INCLUDE PARSE.ASM ;AN000; ;an040;bgb
pathlabl parser ;an040;bgb
code ends ;an040;bgb
|