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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
page 80,132
; SCCSID = @(#)uinit.asm 4.5 85/12/04
; SCCSID = @(#)uinit.asm 4.5 85/12/04
TITLE COMMAND Initialization messages
.XCREF
.XLIST
include comsw.asm
include comseg.asm
include ifequ.asm
.LIST
.CREF
addr macro sym,name
public name
ifidn <name>,<>
dw offset resgroup:sym
else
name dw offset resgroup:sym
endif
endm
ENVIRONMENT SEGMENT PUBLIC PARA ;AC000;
EXTRN ECOMSPEC:BYTE
ENVIRONMENT ENDS
TRANCODE SEGMENT PUBLIC BYTE ;AC000;
extrn Printf_init:FAR
extrn Triage_Init:FAR
extrn append_parse:FAR ;AN054;
TranCode ENDS
INIT SEGMENT PUBLIC PARA ;AC000;
public icondev
public BADCSPFL
public COMSPECT
public AUTOBAT
public fslash
public bslash
public space
public PRDATTM
public INITADD
public print_add
public CHUCKENV
public scswitch
public ucasea
public ECOMLOC
public equalsign
public lcasea
public lcasez
public comspstring
public EnvSiz
public EnvMax
public initend
public trnsize
public resetenv ;AC000;
public ext_msg ;AC000;
public num_positionals
public internat_info
public parsemes_ptr
PUBLIC triage_add
PUBLIC oldenv
PUBLIC usedenv
PUBLIC KAUTOBAT ;AN000; 3/3/KK
public eswitch ;AN018;
public dswitch ;AN018;
public init_parse ;AN054;
public old_parse_ptr ;AN057;
PUBLIC pars_msg_off ;AN060;
PUBLIC pars_msg_seg ;AN060;
include resmsg.equ ;AC000;
ICONDEV LABEL BYTE
DB "/DEV/"
DB "CON",0,0,0,0,0,0 ; Room for 8 char device
BADCSPFL DB 0
COMSPECT DB "/COMMAND.COM",0,0
AUTOBAT DB 0,":\AUTOEXEC.BAT",0,0DH ;AC027;
KAUTOBAT DB 0,":\KAUTOEXE.BAT",0,0DH ;AC027; 3/3/KK
PRDATTM DB -1 ;Init not to prompt for date time
INITADD DD ?
print_add LABEL DWORD
DW OFFSET TranGroup:Printf_INIT
DW 0
triage_add LABEL DWORD
DW OFFSET TranGroup:Triage_Init
DW 0
CHUCKENV DB 0
;eg ECOMLOC DW OFFSET ENVIRONMENT:ECOMSPEC-10H
ECOMLOC DW OFFSET ENVIRONMENT:ECOMSPEC ;eg
COMSPSTRING DB "COMSPEC="
equalsign db "="
lcasea db "a"
lcasez db "z"
fslash db "/"
bslash db "\"
space db " "
scswitch db "C" ; Single command
ucasea db "A"
EnvSiz DW 0 ; size user wants to allocate
EnvMax DW 0 ; maximum size allowed.
oldenv DW 0 ; envirseg at initialization
usedenv DW 0 ; amount of envirseg used
PARS_MSG_OFF DW 0 ;AN060; SAVED PARSE ERROR MESSAGE OFFSET
PARS_MSG_SEG DW 0 ;AN060; SAVED PARSE ERROR MESSAGE SEGMENT
;Do not separate the following two words. Used to call transient PARSE routine
init_parse label dword ;AN054;
init_p DW TRANGROUP:APPEND_PARSE ;AN054;
initend DW 0 ;eg segment address of end of init
;End of data that shouldn't be separated.
trnsize DW 0 ;eg size of transient in paragraphs
resetenv DB 0 ;eg set if we need to setblck env at endinit
ext_msg DB 0 ;AN000; set if /MSG switch entered
eswitch db 0 ;AN018; set if /e was entered
dswitch db 0 ;AN018; set if /d was entered
parsemes_ptr dw 0 ;AN000; word to store parse error number
;
; PARSE BLOCK FOR COMMAND
;
PUBLIC PARSE_COMMAND ;AN000;
PUBLIC COMND1_OUTPUT ;AN000;
PUBLIC COMND1_TYPE ;AN000;
PUBLIC COMND1_CODE ;AN000;
PUBLIC COMND1_SYN ;AN000;
PUBLIC COMND1_ADDR ;AN000;
PUBLIC COMMAND_F_SYN ;AN000;
PUBLIC COMMAND_P_SYN ;AN000;
PUBLIC COMMAND_C_SYN ;AN000;
PUBLIC COMMAND_D_SYN ;AN000;
PUBLIC COMMAND_E_SYN ;AN000;
PUBLIC COMMAND_M_SYN ;AN000;
;
; The following parse control block is used for COMMAND. This block is
; used for parsing during initialization. The sytax for COMMAND is:
; COMMAND [d:][path][/P][/F][/D][/E:xxxxx][/MSG][/C executable]
; Anything on the command line after the /C switch will be passed to the
; executable command, so if /C is used, it must be specified last. The
; /MSG switch can only be specified if the /P switch is specified.
;
ENVBIG EQU 32768 ;AN000; maximum environment size
ENVSML EQU 160 ;AN000; minimum environment size
INTERNAT_INFO LABEL BYTE ;AN000; used for country info after parsing is completed
PARSE_COMMAND LABEL BYTE ;AN000;
DW RESGROUP:COMMAND_PARMS ;AN000;
DB 0 ;AN000; no extra delimiter
COMMAND_PARMS LABEL BYTE ;AN000;
DB 0,1 ;AN000; 1 positional parm
DW RESGROUP:COMMAND_FILE ;AN000;
DB 6 ;AN000; 6 switches
DW RESGROUP:COMMAND_SWITCH1 ;AN000;
DW RESGROUP:COMMAND_SWITCH2 ;AN000;
DW RESGROUP:COMMAND_SWITCH3 ;AN000;
DW RESGROUP:COMMAND_SWITCH4 ;AN000;
DW RESGROUP:COMMAND_SWITCH5 ;AN000;
DW RESGROUP:COMMAND_SWITCH6 ;AN000;
DB 0 ;AN000; no keywords
COMMAND_FILE LABEL BYTE ;AN000;
DW 0201H ;AN000; filespec - optional
DW 1 ;AN000; capitalize - file table
DW RESGROUP:COMND1_OUTPUT ;AN000; result buffer
DW RESGROUP:NO_VAL ;AN000;
DB 0 ;AN000; no keywords
COMMAND_SWITCH1 LABEL BYTE ;AN000;
DW 0 ;AN000; no match flags
DW 2 ;AN000; capitalize by char table
DW RESGROUP:COMND1_OUTPUT ;AN000; result buffer
DW RESGROUP:NO_VAL ;AN000;
DB 1 ;AN000; 1 keyword
COMMAND_P_SYN DB "/P",0 ;AN000; /P switch
COMMAND_SWITCH2 LABEL BYTE ;AN000;
DW 0 ;AN000; no match flags
DW 2 ;AN000; capitalize by char table
DW RESGROUP:COMND1_OUTPUT ;AN000; result buffer
DW RESGROUP:NO_VAL ;AN000;
DB 1 ;AN000; 1 keyword
COMMAND_F_SYN DB "/F",0 ;AN000; /F switch
COMMAND_SWITCH3 LABEL BYTE ;AN000;
DW 0 ;AN000; no match flags
DW 2 ;AN000; capitalize by char table
DW RESGROUP:COMND1_OUTPUT ;AN000; result buffer
DW RESGROUP:NO_VAL ;AN000;
DB 1 ;AN000; 1 keyword
COMMAND_D_SYN DB "/D",0 ;AN000; /D switch
COMMAND_SWITCH4 LABEL BYTE ;AN000;
DW 8000H ;AN000; numeric value - required
DW 0 ;AN000; no function flags
DW RESGROUP:COMND1_OUTPUT ;AN000; result buffer
DW RESGROUP:COMMAND_E_VAL ;AN000; pointer to value list
DB 1 ;AN000; 1 keyword
COMMAND_E_SYN DB "/E",0 ;AN000; /E switch
COMMAND_E_VAL LABEL BYTE ;AN000;
DB 1 ;AN000;
DB 1 ;AN000; 1 range
DB 1 ;AN000; returned if result
DD ENVSML,ENVBIG ;AN000; minimum & maximum value
DB 0 ;AN000; no numeric values
DB 0 ;AN000; no string values
COMMAND_SWITCH5 LABEL BYTE ;AN000;
DW 0 ;AN000; no match flags
DW 2 ;AN000; capitalize by char table
DW RESGROUP:COMND1_OUTPUT ;AN000; result buffer
DW RESGROUP:NO_VAL ;AN000;
DB 1 ;AN000; 1 keyword
COMMAND_C_SYN DB "/C",0 ;AN000; /C switch
COMMAND_SWITCH6 LABEL BYTE ;AN000;
DW 0 ;AN000; no match flags
DW 2 ;AN000; capitalize by char table
DW RESGROUP:COMND1_OUTPUT ;AN000; result buffer
DW RESGROUP:NO_VAL ;AN000;
DB 1 ;AN000; 1 keyword
COMMAND_M_SYN DB "/MSG",0 ;AN000; /MSG switch
COMND1_OUTPUT LABEL BYTE ;AN000;
COMND1_TYPE DB 0 ;AN000; type
COMND1_CODE DB 0 ;AN000; return value
COMND1_SYN DW 0 ;AN000; synonym pointer
COMND1_ADDR DD 0 ;AN000; numeric value / address
; of string value
NO_VAL DB 0 ;AN000; no values
num_positionals DW 0 ;AN000; counter for positionals
old_parse_ptr DW 0 ;AN057; SI position before calling parser
.xlist
.xcref
INCLUDE SYSMSG.INC ;AN000; get message services routine
.list
.cref
ASSUME DS:RESGROUP,ES:RESGROUP,CS:RESGROUP
MSG_UTILNAME <COMMAND> ;AN000; define utility name
MSG_SERVICES <COMR,COMMAND.CLB> ;AN000; include initialization messages
include msgdcl.inc
INIT ENDS
END
|