	.PREL
	.IDENT	LINE
	.INSERT	HVG.LIB
	.INSERT	MACRO.LIB
	.INSERT BBEQU.ASM
	.RELOC
; DIRECT COMMAND - TEXT COLLECTOR
TELL::	
;	LXI	D,MSG
;	CALL	PRTSTG
STOP::	CALL	HKSTOP#
RSTART::	LXI	SP,STACK#
	LXI	H,XXST1+1
	SHLD	CURRNT#
XXST1:	LXI	H,0
	SHLD	LOPVAR#
	SHLD	STKGOS#
XXST2:	MVI	A,'>'
	CALL	GETLN
	PUSH	D
	LXI	D,BUFFER#
; IGNORE ANY LEADING '>'
	LDAX	D
	CPI	'>'
	JRNZ	XXST4
	INX	D
XXST4:	CALL	TSTNUM#
	RSTIGN
	MOV	A,H
	ORA	L
	POP	B
	JZ	EXEC0#
	SHLD	OLDLN#
	DCX	D
	MOV	A,H
	STAX	D
	DCX	D
	MOV	A,L
	STAX	D
	PUSH	B
	PUSH	D
	MOV	A,C
	SUB	E
	PUSH	PSW
	CALL	FNDLN
	PUSH	D
	JRNZ	XXST3
	PUSH	D
	CALL	FNDNXT
	POP	B
	LHLD	TXTUNF#
	CALL	MVUP
	MOV	H,B
	MOV	L,C
	CALL	DCRTXT
XXST3:	POP	B
	LHLD	TXTUNF#
	POP	PSW
	PUSH	H
	CPI	3
	JRZ	RSTART
	ADD	L
	MOV	E,A
	MVI	A,0
	ADC	H
	MOV	D,A
	LHLD	HVDFTL#
	XCHG	
	CALL	COMP#
	JNC	QSORRY#
	CALL	INRTXT
	POP	D
	CALL	MVDOWN
	POP	D
	POP	H
	CALL	MVUP
	JMPR	XXST2
; FNDLN
FNDLN::
	CALL	HKFLN#
	MOV	A,H
	ORA	A
	JM	QHOW#
	LDED	HVTEXT#
FNDLP::	INX	D
	LDAX	D
	MOV	C,A
	DCX	D
	ADD	A
	RC	
	LDAX	D
	SUB	L
	MOV	B,A
	INX	D
	MOV	A,C
	SBB	H
	JRC	FL1
	DCX	D
	ORA	B
FI2:	RET
FNDNXT:	INX	D
FL1:	INX	D
FNDSKP:: LDAX	D
	CPI	CR
	JRNZ	FL1
	INX	D
	JMPR	FNDLP
GLED:	LDA	EDFLG#
	ANA	A
	JRZ	GLEDA
	LXI	D,BUFFER#
	CALL	TSTNUM#
	CALL	FNDLN
	MVI	A,'?'
	RNZ
	INX	D
	CALL	GLEDB
	XRA	A
	STA	EDFLG#
GLEDA:	LDED	EDPTR#
	LDAX	D
GLEDB:	INX	D
	SDED	EDPTR#
	RET
GETLN::	LXI	D,BUFFER#
	STA	EDFLG#
GL1:	RSTOCH	; PROMPT OR ECHO
GL2:	PUSH	B
	PUSH	H
	PUSH	D
; RETURN CHAR FROM NEXT LINE #
GL2A:	LXI	H,NLLNCT#
	MOV	A,M	; SENSE FLAG
	ANA	A
	JRZ	GL2C
	DCR	M
; FIRST	TIME THRU?
	CPI	5
	 JRNZ	GL2B	; JUMP IF NOT
; GET PREVIOUS LINE # AND BUMP IT
	LHLD	OLDLN#
	LXI	D,10
	DAD	D
	RES	7,H	; ALLOW NEG
GL2J:	SHLD	NLLNLN	; MOVE TO WORKING RAM CELL#
; COMPUTE DIVISION SUBTRACTOR
GL2B:	INDEXW	1
	.WORD	TBLDIV-2
	LHLD	NLLNLN#
	MVI	B,0
GL2E:	ANA	A
	DSBC	D
	JM	GL2F
	INR	B
	JMPR	GL2E
GL2F:	DAD	D
	SHLD	NLLNLN#
	LXI	H,NLLNZS#
	MOV	A,B
	ANA	A
	JRNZ	GL2G
	MOV	A,M
	ANA	A
	JRZ	GL2A	; YES - JUMP BACK
	XRA	A
GL2G:	ADI	'0'	; MAKE ASCII
	MOV	M,A	; SET NONZERO FLAG
	JMPR	GL2D
; NOTHIN FANCY
GL2C:	CALL	CURSE#	; TOSS UP CURSOR
	CALL	CHKIO#	; GET NORMAL CHARACTER
	CALL	UNCURSE# ; UNWRITE THE CURSOR
	POP	D
	STAX	D	; STUFF CHAR AS DELIMITER
	PUSH	D
	CPI	EDKEY
	CZ	GLED
GL2D:	POP	D
	POP	H
	POP	B
GL3:	STAX	D
	CPI	RUBOUT
	JRNZ	GL4
	MOV	A,E
	PUSH	H
	LXI	H,BUFFER#
	CMP	L
	POP	H
	JRZ	GL2
	DCX	D
	LDAX	D
	CPI	68H	; TOKEN TO RUB OUT?
	JRNC	TOKIN
	CALL	PNOTE#
	MVI	A,RUBOUT
	JMPR	GL1
TOKIN:	PUSH	D
	CALL	TOKEPT#
TOKER:	MOV	A,M
	PUSH	H
	ANI	7FH
	CALL	PNOTE#
	MVI	A,RUBOUT
	CALL	VDM#
	POP	H
	MOV	A,M
	INX	H
	RLC	
	JRNC	TOKER
TOKEQ:	MVI	A,RUBOUT
	RSTOCH	; ECHO ONE RUBOUT CHAR
	POP	D
GL9:	JMP	GL2
GL4:	CPI	CR
	JZ	GL5
	MOV	A,E
	PUSH	H
	LXI	H,BUFEND#
	CMP	L
	POP	H
	JRZ	GL9
	LDAX	D
	INX	D
	JMP	GL1
GL5:	INX	D
	INX	D
	MVI	A,0FFH
	STAX	D
	DCX	D
	JMP	CRLF#
; MVUP AND MVDOWN
MVUP::	CALL	COMP#
	RZ
	LDAX	D
	STAX	B
	INX	D
	INX	B
	JMPR	MVUP
MVDOWN:: MOV	A,B
	SUB	D
	JRNZ	MD1
	MOV	A,C
	SUB	E
	RZ
MD1:	DCX	D
	DCX	H
	LDAX	D
	MOV	M,A
	JMPR	MVDOWN
; SUBROUTINE TO MOVE ARRAY TO HIGHER ADDRESS
INRTXT:	PUSH	B
	PUSH	D
	PUSH	H
	XCHG		; DE=NEW
	LHLD	HVDFTL#
	ANA	A
	DSBC	D
	MOV	C,L
	MOV	B,H	; BC= # OF BYTES
	LHLD	TXTUNF#	; HL=OLD
	ANA	A
	DSBC	D	; HL=OLD-NEW (NEGATIVE DIFF)
	LDED	HVDFTL#
	DAD	D	; HL= DEFLMT-DIFF
	MOV	A,B	; CHECK ZERO
	ORA	C
	JRZ	..NOGO
	LDDR
..NOGO:	POP	H
	SHLD	TXTUNF#
	POP	D
	POP	B
	RET
; SUBROUTINE TO MOVE ARRAY TO LOWER ADDRESS
DCRTXT:	PUSH	B
	PUSH	D
	PUSH	H
	XCHG
	LBCD	TXTUNF#
	LHLD	HVDFTL#
	ANA	A
	DSBC	B
	MOV	C,L
	MOV	B,H
	LHLD	TXTUNF#
	MOV	A,B
	ORA	C
	JRZ	..NLDR
	LDIR
..NLDR:	POP	H
	SHLD	TXTUNF#
	POP	D
	POP	B
	RET
TBLDIV:	.WORD	1
	.WORD	10
	.WORD	100
	.WORD	1000
	.WORD	10000
	.END
                            