summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/COMMAND/UINIT.ASM
blob: 8f3498b6967a999a9b6fcfe966c1fd92afdfd076 (plain) (blame)
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