1 TITLE PART3
- COMMAND Transient routines
.
16 DATARES
SEGMENT PUBLIC
17 EXTRN BATCH
:WORD,BATLOC
:DWORD
18 EXTRN RETCODE
:WORD,ECHOFLAG
:BYTE
19 EXTRN SINGLECOM
:WORD,FORFLAG
:BYTE,UFORDRV
:BYTE
20 EXTRN FORSET
:BYTE,FORCOM
:BYTE,FORVAR
:BYTE,FORPTR
:WORD
21 EXTRN FORUFCB
:BYTE,FORFCB
:BYTE,RE_INSTR
:BYTE,RE_OUT_APP
:BYTE
22 EXTRN RE_OUTSTR
:BYTE,PIPEFLAG
:BYTE
26 TRANDATA
SEGMENT PUBLIC
28 EXTRN BADLAB
:BYTE,SYNTMES
:BYTE,FORNESTMES
:BYTE
29 EXTRN NOTFND
:BYTE,FULDIR
:BYTE,IFTAB
:BYTE
32 TRANSPACE
SEGMENT PUBLIC
34 EXTRN BATHAND
:WORD,RESSEG
:WORD,DIRBUF
:BYTE,COMBUF
:BYTE
35 EXTRN GOTOLEN
:WORD,IFNOTFLAG
:BYTE
40 TRANCODE
SEGMENT PUBLIC BYTE
41 ASSUME
CS:TRANGROUP
,DS:NOTHING
,ES:NOTHING
,SS:NOTHING
43 EXTRN SCANOFF
:NEAR,DOCOM
:NEAR,DOCOM1
:NEAR,CERROR
:NEAR
44 EXTRN PRINT
:NEAR,TCOMMAND
:NEAR,DELIM
:NEAR,GETBATBYT
:NEAR
45 EXTRN FCB_TO_ASCZ
:NEAR
47 PUBLIC GOTO
,$
IF,IFERLEV
,SHIFT
,IFEXISTS
48 PUBLIC STRCOMP
,MesTran
,$FOR
,IFNOT
49 PUBLIC FORPROC
,BATOPEN
,BATCLOSE
50 PUBLIC IOSET
,TESTDOREIN
,TESTDOREOUT
55 CMP [SINGLECOM
],0FF00H
57 MOV [SINGLECOM
],-1 ; Cause a terminate
65 MOV DX,OFFSET TRANGROUP
:DIRBUF
74 MOV DX,OFFSET RESGROUP
:FORFCB
75 MOV AH,DIR_SEARCH_NEXT
78 MOV AH,DIR_SEARCH_FIRST
90 MOV SI,OFFSET TRANGROUP
:DIRBUF
91 MOV DI,OFFSET RESGROUP
:FORSET
103 MOV BYTE PTR ES:[DI-1],0DH
119 MOV DX,SI ; DX points to next parm
120 MOV SI,OFFSET RESGROUP
:FORCOM
121 MOV DI,OFFSET TRANGROUP
:COMBUF
+2
141 POP SI ; Get back command line pointer
150 MOV [FORPTR
],DX ; Point to next set element
156 MOV BYTE PTR ES:[DI-1],'$'
157 MOV DX,OFFSET TRANGROUP
:COMBUF
+2
159 MOV BYTE PTR ES:[DI-1],0DH
164 ASSUME
DS:TRANGROUP
,ES:TRANGROUP
170 MOV DX,OFFSET TRANGROUP
:FORNESTMES
171 CMP [SINGLECOM
],0FF00H
173 MOV [SINGLECOM
],-1 ; Cause termination
184 MOV DI,OFFSET RESGROUP
:FORSET
201 CMP AX,('N' SHL 8) OR 'I'
203 CMP AX,('n' SHL 8) OR 'i'
211 CMP AL,')' ; Special check for null set
232 MOV BYTE PTR ES:[DI-1],0DH
238 CMP BYTE PTR ES:[DI-1],0DH
245 CMP AX,('O' SHL 8) OR 'D'
247 CMP AX,('o' SHL 8) OR 'd'
255 MOV DI,OFFSET RESGROUP
:FORCOM
264 MOV [SINGLECOM
],0FF00H ; Flag single command for
271 MOV DI,OFFSET RESGROUP
:FORFCB
272 MOV SI,OFFSET RESGROUP
:FORSET
273 CMP BYTE PTR [SI+1],':'
277 MOV AX,PARSE_FILE_DESCRIPTOR
SHL 8
282 ASSUME
DS:TRANGROUP
,ES:TRANGROUP
288 MOV DX,OFFSET TRANGROUP
:SYNTMES
299 MOV DI,OFFSET TRANGROUP
:IFTAB
; Prepare to search if table
315 OR AH,20H
; Try lower case
321 ADD DI,CX ; Bump to next position without affecting flags
322 MOV BX,[DI] ; Get handler address
351 JMP SHORT FIRST_STRING
358 JMP SHORT EQUAL_CHECK
369 CMP BYTE PTR [SI-1],0DH
389 MOV DI,OFFSET TRANGROUP
:DIRBUF
390 MOV AX,(PARSE_FILE_DESCRIPTOR
SHL 8) OR 01H
410 MOV DI,OFFSET TRANGROUP
:COMBUF
+2
435 MOV AH,BYTE PTR [RETCODE
]
454 ASSUME
DS:NOTHING
,ES:NOTHING
464 REP MOVSW ; Perform shift of existing parms
468 MOV WORD PTR [DI],-1 ; Assume no parm
477 MOV ES:[DI],SI ; Pointer to next parm as %9
481 ASSUME
DS:TRANGROUP
,ES:TRANGROUP
486 retz
; If not in batch mode, a nop
488 MOV WORD PTR [BATLOC
],DX ; Back to start
489 MOV WORD PTR [BATLOC
+2],DX
490 CALL BATOPEN
; Find the batch file
491 MOV DI,FCB
+1 ; Get the label
504 LABLKLP: ; Look for the label
517 MOV DX,OFFSET TRANGROUP
:BADLAB
556 ;Open the BATCH file, If open fails, AL is drive of batch file (A=1)
557 ASSUME
DS:RESGROUP
,ES:TRANGROUP
563 INT int_command
; Open the batch file
569 MOV DX,WORD PTR [BATLOC
]
570 MOV CX,WORD PTR [BATLOC
+2]
571 MOV AX,LSEEK
SHL 8 ; Go to the right spot
577 MOV AL,[BX] ; Get drive spec
580 STC ; SUB mucked over carry
584 ASSUME
DS:NOTHING
,ES:NOTHING
591 ; ALL REGISTERS PRESERVED
592 ASSUME
DS:NOTHING
,ES:NOTHING
,SS:NOTHING
601 JNZ NOREDIR
; Don't muck up the pipe
617 MOV DX,OFFSET RESGROUP
:RE_INSTR
620 MOV DX,OFFSET TRANGROUP
:NOTFND
624 XCHG AL,[BX.PDB_JFN_Table
]
625 MOV DS:[PDB_JFN_Table
],AL
639 MOV DX,OFFSET RESGROUP
:RE_OUTSTR
640 MOV AX,(OPEN
SHL 8) OR 1
646 MOV AX,(LSEEK
SHL 8) OR 2
650 MOV DX,OFFSET RESGROUP
:RE_OUTSTR
654 MOV DX,OFFSET TRANGROUP
:FULDIR
659 XCHG AL,[BX.PDB_JFN_Table
]
660 MOV DS:[PDB_JFN_Table
+1],AL
665 ; Compare ASCIZ DS:SI with ES:DI.
668 retnz
; Strings not equal
669 cmp byte ptr [SI-1],0 ; Hit NUL terminator?
670 retz
; Yes, strings equal
671 jmp short STRCOMP
; Equal so far, keep going