	TITLE  'NORTH STAR SECRTARY AS OF 0308A'

;COPYRIGHT 1979, G. YOUNG, PO BOX 3218, NORTH HOLLYWOOD, CA 91609
;PERMISSION GRANTED TO COPY FOR ANY NON-COMMERCIAL USE ONLY.



NS	EQU	2000H		;NORTH STAR SYSTEM BEGINS AT 2000
DCOM	EQU	NS+22H
COUT	EQU	NS+0DH
CIN	EQU	NS+10H
CONTC	EQU	NS+16H
DOS	EQU	NS+28H
DLOOK	EQU	NS+1CH
DLIST	EQU	NS+25H
DOSER	EQU	NS+2DH
RWCHK	EQU	NS+2BH
DBYTE	EQU	NS+2FH
DWRIT	EQU	NS+1FH
PART1	EQU	NS+0D00H
	ORG	PART1
	JMP	INITA
	DB	0
	JMP	EOR		;RESTART WITHOUT RESETTING
ASSMB	DB	'  0308A',13
	DB	'COPYRIGHT 1979, G. YOUNG, INC'
DENTY	DB	'S'
BSPCH	DB	08
STOP	DB	0
SRCNT	DB	23
FLG1	DB	'N'
HTOT	DB	0
DATA0	DW	MEMRY
BSCR	DB	'C'
LNSIZ	DB	78
WRAP	DB	'Y'
MEMTP	DW	07FFFH
CLEAN	LXI	H,BOFP
	MVI	C,255
	XRA	A
CLRM	MOV	M,A
	INX	H
	DCR	C
	JNZ	CLRM
	LHLD	DATA0
	SHLD	BOFP
	SHLD	EOFP
	LHLD	MEMTP
	SHLD	TOP
	MVI	A,70
	STA	LINES
	MVI	A,0FFH
	STA	PNO
	MVI	A,1
	LHLD	BOFP
	MOV	M,A
	MVI	A,66
	STA	PAGE1
	MVI	A,54
	STA	PAGE2
	MVI	A,7
	STA	PAGE3
	LDA	BSPCH
	STA	X5F2+1
	STA	X5F1+1
	STA	X5F3+1
	LDA	LNSIZ
	STA	CPI80+1
	SUI	7
	STA	CPI74+1
	RET
INITA	LXI	SP,AREA+50
	LXI	SP,AREA+50
	CALL	CLEAN
	CALL	CRLF
	LXI	SP,AREA+50
	LXI	H,SMESS
	CALL	SCRN
	LXI	H,ASSMB
	CALL	SCRN
	LXI	SP,AREA+50
	CALL	FREE1
	LDA	FLG1
	CPI	'Y'
CNG2	JNZ	CONFIGURE
EOR	LXI	SP,AREA+50
	CALL	CRLF
	MVI	B,'#'
	CALL	OUT8
	CALL	READ
	LXI	H,IBUF
	MOV	A,M
	CPI	'0'
	CC	CMPCT
	CPI	'9'+1
	JC	LINER
	XRA	A
	STA	AUTO
	CALL	VALC
	CALL	COMM1
	JMP	EOR
CMPCT	LDA	DBFLG
	ORA	A
	JNZ	DUMP
	LXI	D,IBUF+1
L1X	LDAX	D
	MOV	M,A
	CPI	13
	JZ	L2X
	INX	D
	INX	H
	JMP	L1X
L2X	LXI	H,IBUF
	LDA	IBUF-1
	DCR	A
	STA	IBUF-1
	MOV	A,M
	RET
READ	LXI	H,IBUF
	LXI	D,TBUF
	XRA	A
	STA	HALT
	STA	TEMP
	LDA	AUTO
	ORA	A
	JZ	BACKN
	CALL	LNGEN
	MVI	C,6
	LXI	D,TBUF+4
	JMP	INPUT
RESTR	LXI	H,IBUF
RESCN	LXI	D,TBUF
	XRA	A
	STA	TEMP
BACKN	MVI	C,2
INPUT	CALL	IN8
	CPI	0
	JZ	INPUT
	CPI	02
	JZ	INPUT
	CPI	0AH
	JZ	INPUT
	CPI	07
	JZ	CPYLN
	CPI	18H	;CNTLX
	JZ	EOR
X5F1	CPI	08H
	JZ	BACKS
	CPI	011H
	JZ	BACKS
	CPI	0FH
	JZ	BACKS
	CPI	01H
	JZ	CPYCH
	CPI	04
	JZ	FNDCH
	CPI	19H
	JZ	PUTIN
	CPI	13
	JZ	EDONE
	CPI	0EH
	JZ	CNTLN
	CPI	010H
	JZ	RESTR
	CPI	1AH
	JZ	DELCH
	CPI	03H
	JZ	CLRX
	JMP	CHAR
CLRX	XRA	A
	STA	AUTO
	JMP	EOR
BACKS	MOV	A,C
	CPI	2
	JC	INPUT
	JZ	INPUT
	DCR	C
	DCX	H
	DCX	D
X5F2	MVI	B,08
	CALL	OUT8
	JMP	INPUT
DELCH	LDAX	D
	CPI	13
	JZ	INPUT
	INX	D
	MVI	B,'%'
	CALL	OUT8
	JMP	INPUT
CPYCH	LDAX	D
	CPI	13
	JZ	INPUT
	MOV	A,C
	CPI	139
	JZ	BELL
	LDAX	D
	MOV	M,A
	MOV	B,A
	CALL	OUT8
	INR	C
	INX	H
	INX	D
	JMP	INPUT
CPYLN	LDAX	D
	CPI	13
	JZ	INPUT
	MOV	A,C
	CPI	139
	JZ	BELL
	LDAX	D
	MOV	B,A
	MOV	M,A
	CALL	OUT8
	INX	D
	INX	H
	INR	C
	JMP	CPYLN
BELL	MVI	B,07
	CALL	OUT8
	JMP	INPUT
PUTIN	LDA	TEMP
	ORA	A
	JZ	SETON
	MVI	B,'>'
	CALL	OUT8
	XRA	A
	STA	TEMP
	JMP	INPUT
SETON	MVI	B,'<'
	CALL	OUT8
	MVI	A,1
	STA	TEMP
	JMP	INPUT
FNDCH	CALL	IN8
	CPI	03
	JZ	EOR
	PUSH	D
	INX	D
	MOV	B,A
FND2	LDAX	D
	CMP	B
	JZ	FND3
	CPI	13
	JZ	FND5
	INX	D
	JMP	FND2
FND3	POP	D
	MOV	B,A
	CALL	DUP1
FND4	LDAX	D
	CMP	B
	JZ	INPUT
	MOV	A,C
	CPI	139
	JZ	INPUT
	CALL	DUP1
	JMP	FND4
DUP1	LDAX	D
	MOV	M,A
	PUSH	B
	MOV	B,A
	CALL	OUT8
	POP	B
	INR	C
	INX	H
	INX	D
	RET
FND5	POP	D
	MVI	B,07
	CALL	OUT8
	JMP	FNDCH
CNTLN	MVI	B,'@'
	CALL	OUT8
	MVI	A,13
	MOV	M,A
	CALL	CRLF
	CALL	COPYLINE
	JMP	RESTR
COPYLINE	PUSH	D
	PUSH	H
	LXI	D,IBUF
	LXI	H,TBUF
CPYN	LDAX	D
	MOV	M,A
	CPI	13
	JZ	CPYX
	INX	D
	INX	H
	JMP	CPYN
CPYX	POP	H
	POP	D
	RET
EDONE	MOV	A,C
	CPI	2
	JZ	READ
	CPI	10
	JC	NOBACKUP
BACKUP	DCX	H
	DCR	C
	MOV	A,M
	CPI	' '
	JZ	BACKUP
	INX	H
	INR	C
NOBACKUP	MVI	M,13
	INX	H
	MVI	M,1
	LXI	H,IBUF-1
	MOV	M,C
	CALL	COPYLINE
	LDA	HALT
	ORA	A
	RZ
	CALL	LINE
	JMP	EOR
CHAR	MOV	B,A
	LDA	TEMP
	ORA	A
	JNZ	CHAR1	 ;SKIP IF INSERT MODE
	MOV	A,C
CPI80	CPI	66
	JNZ	CHAR1
	MOV	A,B
	STA	TEMP3
	LDA	WRAP
	CPI	'N'
	JZ	WRAP1
	LDA	AUTO
	ORA	A
	JNZ	WRAP2
WRAP1	MVI	B,07
	CALL	OUT8
	JMP	INPUT
WRAP2	MVI	M,13
	DCX	H
WRAP3	DCX	H
	MOV	A,M
	CPI	' '
	JNZ	WRAP3
WRAP6	DCX	H
	MOV	A,M
	CPI	' '
	JZ	WRAP6
	INX	H
	SHLD	ADDR1
	MVI	A,13
	MOV	M,A
	INX	H
	MOV	A,M
	STA	TEMP2+1
	MVI	A,1
	MOV	M,A
	LXI	H,IBUF
	MVI	C,2
WRAP7	MOV	A,M
	CPI	13
	JZ	WRAP8
	INR	C
	INX	H
	JMP	WRAP7
WRAP8	MOV	A,C
	STA	IBUF-1
	CALL	COPYLINE
	CALL	LINE
	CALL	CRLF
	LXI	H,IBUF
	MVI	B,'#'
	CALL	OUT8
	CALL	LNGEN
	MVI	C,6
	XCHG
	LHLD	ADDR1
	XCHG
	INX	D
	LDA	TEMP2+1
	CPI	' '
	JZ	WRAP4
	MOV	M,A
	MOV	B,A
	INR	C
	CALL	OUT8
	INX	H
WRAP4	INX	D
	LDAX	D
	CPI	13
	JZ	WRAP5
	MOV	M,A
	INX	H
	INR	C
	MOV	B,A
	CALL	OUT8
	JMP	WRAP4
WRAP5	LXI	D,TBUF-2
	PUSH	H
	MVI	H,0
	MOV	L,C
	DAD	D
	XCHG
	POP	H
	LDA	TEMP3
	MOV	B,A
CHAR1	MOV	M,B
	INR	C
	CALL	OUT8
	MOV	A,C
CPI74	CPI	59
	JNZ	NOBEL
	MVI	B,07
	CALL	OUT8
NOBEL	INX	H
	LDA	TEMP
	ORA	A
	JNZ	INPUT
	INX	D
	JMP	INPUT
COMM1	LXI	D,IBUF
	MVI	B,4
UPPER1	LDAX	D
	CPI	60H
	JC	LOWER1
	SBI	20H
	STAX	D
LOWER1	INX	D
	DCR	B
	JNZ	UPPER1
	LXI	D,CTAB
	MVI	B,NCOM
	MVI	A,4
	STA	NCHR
	CALL	COMS
	JNZ	ERR1
	PCHL
COMS	LXI	H,IBUF
	LDA	NCHR
	MOV	C,A
	CALL	SEAR
	LDAX	D
	MOV	L,A
	INX	D
	LDAX	D
	MOV	H,A
	RZ
	INX	D
	DCR	B
	JNZ	COMS
	INR	B
	RET
SEAR	LDAX	D
	CMP	M
	JNZ	INCA
	INX	H
	INX	D
	DCR	C
	JNZ	SEAR
	RET
INCA	INX	D
	DCR	C
	JNZ	INCA
	INR	C
	RET
ZBUF	XRA	A
	LXI	D,ABUF+12
	MVI	B,12
ZBU1	DCX	D
	STAX	D
	DCR	B
	JNZ	ZBU1
	RET
VALC	EQU	$
ETRA	LXI	H,0
	SHLD	BBUF+2
	SHLD	FBUF
	CALL	ZBUF
	LXI	H,IBUF-1
VAL1	INX	H
	MOV	A,M
	CPI	' '
	CMC
	RNC
	JNZ	VAL1
	SHLD	PNTR
	CALL	SBLK
	CMC
	RNC
VAL5	LXI	D,ABUF
	CALL	ALPS
	MOV	A,B
	CPI	5
	CMC
	RC
	LXI	B,ABUF
	CALL	AHEX
	RC
	SHLD	BBUF
	LXI	H,ABUF
	CALL	NORM
	CALL	SBLK
	CMC
	RNC
	LXI	D,ABUF+4
	CALL	ALPS
	MOV	A,B
	CPI	5
	CMC
	RC
	LXI	B,ABUF+4
	CALL	AHEX
	RC
	SHLD	BBUF+2
	LXI	H,ABUF+4
	CALL	NORM
	CALL	SBLK
	CMC
	RNC
	LXI	D,ABUF+8
	CALL	ALPS
	MOV	A,B
	CPI	5
	CMC
	RC
	LXI	H,ABUF+8
	CALL	NORM
	ORA	A
	RET
RANGE	PUSH	H
	PUSH	D
	LDA	ABUF+4
	ORA	A
	JZ	OK
	MVI	B,4
	LXI	H,ABUF
	LXI	D,ABUF+4
CKIT	LDAX	D
	CMP	M
	JC	ERR2
	JNZ	OK
	INX	H
	INX	D
	DCR	B
	JZ	OK
	JMP	CKIT
OK	POP	D
	POP	H
	RET
AHEX	LXI	H,0
AHE1	LDAX	B
	ORA	A
	RZ
	DAD	H
	DAD	H
	DAD	H
	DAD	H
	CALL	AHS1
	CPI	10H
	CMC
	RC
	ADD	L
	MOV	L,A
	INX	B
	JMP	AHE1
AHS1	SUI	48
	CPI	10
	RC
	SUI	7
	RET
ADEC	LXI	H,0
ADE11	LDAX	B
	ORA	A
	RZ
	MOV	D,H
	MOV	E,L
	DAD	H
	DAD	H
	DAD	D
	DAD	H
	SUI	48
	CPI	10
	CMC	
	RC
	MOV	E,A
	MVI	D,0
	DAD	D
	INX	B
	JMP	ADE11
BLK1	MVI	B,' '
	CALL	OUT8
	RET
ACHK	LHLD	BBUF
	LDA	BBUF+3
	CMP	H
	JNZ	ACH1
	LDA	BBUF+2
	CMP	L
	JNZ	ACH1
	STC
ACH1	INX	H
	SHLD	BBUF
	RET
NCOM	EQU	47
CTAB	DB	'APPE'
	DW	APPND
	DB	'AUTO'
	DW	AUTOL
	DB	'BLOA'
BLOAD	DW	BLOADCMND
	DB	'BOOT'
	DW	0E800H
	DB	'BSAV'
BSAVE	DW	BSAVECMND
	DB	'CALL'
	DW	CALLA
	DB	'CHAI'
	DW	CHAINCMND
	DB	'CHAL'
	DW	CHNGA
	DB	'CHNG'
	DW	CHNG
	DB	'CONF'
CONFG	DW	CNFG2
	DB	'COPY'
	DW	COPYCMND
	DB	'DELE'
	DW	DELL
	DB	'DELT'
	DW	DELL
	DB	'DEST'
	DW	DESTR
	DB	'DIRE'
	DW	DIRECTORY
	DB	'DUMP'
	DW	DUMP1
	DB	'EDIT'
	DW	EDIT
	DB	'EXPA'
	DW	EXPAND
	DB	'FIND'
	DW	FINDCMND
	DB	'FREE'
	DW	FREE
	DB	'HELP'
	DW	HELP
	DB	'JUST'
	DW	JUSTCMND
	DB	'LINE'
	DW	LINECMND
	DB	'LIST'
	DW	LIST
	DB	'LOAD'
	DW	LOAD
	DB	'MARG'
	DW	MARGINCMND
	DB	'MERG'
	DW	MERGECMND
	DB	'MOVE'
	DW	MOVECMND
	DB	'NSAV'
	DW	NSAVE
	DB	'NULL'
	DW	NULLCMND
	DB	'OFFS'
	DW	OFFSETCMND
	DB	'OPEN'
	DW	OPENCMND
	DB	'PAGE'
	DW	PAGECMND
	DB	'PNUM'
	DW	PNUMCMND
	DB	'PRIN'
	DW	PRINT
	DB	'QUIT'
	DW	QUIT
	DB	'RECO'
	DW	RECOVER
	DB	'RENU'
	DW	RENUMBER
	DB	'REPE'
	DW	REPEATCMND
	DB	'SAVE'
	DW	SAVECMND
	DB	'SCRA'
	DW	SCRAT
	DB	'SPAC'
	DW	SPACECMND
	DB	'STAT'
STATUS	DW	STATCMND
	DB	'TABS'
	DW	TABSCMND
	DB	'TITL'
	DW	TITLECMND
	DB	'UNIT'
	DW	UNITCMND
	DB	'DEBU'
	DW	DEBUG
QUIT	CALL	CRLF
	LXI	H,QUITM
	CALL	SCRN
	CALL	CRLF
	JMP	DOS
EXPAND	LXI	H,DATA
	SHLD	DATA0
	LXI	H,EOR
	SHLD	BLOAD
	SHLD	BSAVE
	SHLD	STATUS
	SHLD	CONFG
	SHLD	CNG2+1
	CALL	CLEAN
	CALL	FREE1
	JMP	EOR
CALLA	CALL	ETRA
	JC	ERR3
	LHLD	BBUF
	SHLD	CALLD
	LDA	BBUF+2
	STA	CALLC
	LXI	H,CALLP
	JMP	REPLY
CALLT	LXI	D,CALLM
	RET
CALLM	DB	'CALL COMMAND TEST'
	DB	13
CALLP	DB	'CALL COMMAND ACCEPTED'
	DB	13
BHEAD	DB	'  BLOCKS: '
	DB	13
CHEAD	DB	'  AVAILABLE: '
	DB	13
DHEAD	DB	'  LAST LINE: '
	DB	13
VCHK	LDA	ABUF
	ORA	A
	JZ	ERR2
	RET
FREE	EQU	$
FREER	CALL	FREE1
	CALL	FREE2
	LXI	H,BHEAD
	CALL	SCRN
	LHLD	EOFP
	SHLD	MPTY
	MVI	E,2
	LXI	B,MPTY
	LXI	H,BOFP
	XRA	A
	CALL	ADSB1
	LHLD	MPTY
	INR	H
	MOV	L,H
	MVI	H,0
	SHLD	MPTY
	CALL	DECPT
	RET
FREE1	CALL	CRLF
	LXI	H,HEAD
	CALL	SCRN
	LHLD	EOFP
	SHLD	MPTY
	MVI	E,2
	LXI	B,MPTY
	LXI	H,BOFP
	XRA	A
	CALL	ADSB1
	CALL	DECPT
	LXI	H,CHEAD
	CALL	SCRN
	CALL	ADSUB
	CALL	DECPT
	RET
FREE2	LXI	H,DHEAD
	CALL	SCRN
	CALL	LABPT
	RET
ADDRC	EQU	$
	LHLD	ADDR2
	SHLD	ADDR3
	LXI	B,ADDR3
	LXI	H,ADDR1
	JMP	ADDRC1
ADSUB	LHLD	TOP
	SHLD	MPTY
	LXI	B,MPTY
	LXI	H,EOFP
ADDRC1	MVI	E,2
	XRA	A
ADSB1	LDAX	B
	SBB	M
	STAX	B
	DCR	E
	RZ
	INX	B
	INX	H
	JMP	ADSB1
LABPT	CALL	BLK1
	MVI	E,4
	LXI	H,MAXL
LABP2	MOV	B,M
	CALL	OUT8
	DCR	E
	RZ
	INX	H
	JMP	LABP2
SCRAT	CALL	CRLF
	CALL	CLEAN
	CALL	FREE1
	JMP	EOR
ERR1	CALL	CRLF
	LXI	H,MESS1
	CALL	SCRN
	JMP	HELP
MESS1	DB	'INVALID COMMAND'
	DB	13
ERR2	LXI	H,MESS2
	JMP	REPLY
MESS2	DB	'INVALID PARAMETER'
	DB	13
ERR3	CALL	CRLF
	LXI	H,MESS3P1
	CALL	SCRN
	CALL	CRLF
	LXI	H,IBUF
	CALL	SCRN
	JMP	DUMP
MESS3P1	DB	'INVALID CHARACTER IN PARAMETER'
	DB	13
SMESS	DB	'SECRTARY REL '
	DB	'9.76'
	DB	13
HEAD	DB	'USED: '
	DB	13
QUITM	DB	'FINISHED'
	DB	13
HELP	LXI	H,CTAB
	MVI	E,NCOM-1
HELP1	CALL	CRLF
	MVI	D,12
HELP2	MVI	C,4
HELP3	MOV	B,M
	CALL	OUT8
	INX	H
	DCR	C
	JNZ	HELP3
	INX	H
	INX	H
	MVI	B,' '
	CALL	OUT8
	CALL	CONTC
	JZ	EOR
	DCR	E
	JZ	EOR
	DCR	D
	JNZ	HELP2
	JMP	HELP1
LINER	CALL	LINE
	JMP	EOR
LINE	CALL	FILLN2
	CALL	DELCK
	CALL	ADSUB
	LDA	MPTY+1
	ORA	A
	JNZ	OK2AD
	LDA	MPTY
	MOV	B,A
	LDA	IBUF-1
	SUB	B
	JC	OK2AD
	LXI	H,ERR4P1
	JMP	REPLY
ERR4P1	DB	'FILE FULL ERROR'
	DB	13
OK2AD	EQU	$
	MVI	C,4
	LXI	H,IBUF-1
LICK	INX	H
	MOV	A,M
	CPI	'0'
	JC	ERR3
	CPI	'9'+1
	JNC	ERR3
	DCR	C
	JNZ	LICK
	SHLD	HCON
	LXI	D,MAXL+3
	CALL	COM0
	JNC	INSR
	INX	H
	CALL	LODM
	LXI	H,MAXL+3
	CALL	STOM
	LXI	D,IBUF-1
	LHLD	EOFP
	MVI	C,1
	CALL	LMOV
SEOF	MVI	M,1
	SHLD	EOFP
	RET
INSR	CALL	FIN1
	MVI	C,2
	JZ	EQUL
	DCR	C
EQUL	MOV	B,M
	DCX	H
	MVI	M,2
	SHLD	INSP
	LDA	IBUF-1
	DCR	C
	JZ	LTX
	SUB	B
	JZ	ZEROX
	JC	GTX
LTX	LHLD	EOFP
	MOV	D,H
	MOV	E,L
	CALL	ADR
	SHLD	EOFP
	MVI	C,2
	CALL	RMOV
	JMP	ZEROX
GTX	CMA
	INR	A
	MOV	D,H
	MOV	E,L
	CALL	ADR
	XCHG
	CALL	LMOV
	MVI	M,1
	SHLD	EOFP
ZEROX	LHLD	INSP
	MVI	M,13
	INX	H
	LXI	D,IBUF-1
	MVI	C,1
	CALL	LMOV
	RET
FIND	LXI	H,ABUF+3
	SHLD	HCON
FIN1	LHLD	BOFP
	MOV	A,H
	ORA	L
	JZ	EOR
FI1	CALL	EO1
	XCHG
	LHLD	HCON
	XCHG
	MVI	A,4
	CALL	ADR
	CALL	COM0
	RC
	RZ
FI2	MOV	A,M
	CALL	ADR
	JMP	FI1
EOF	INX	H
EO1	MVI	A,1
	CMP	M
	RNZ
	XRA	A
	STA	UNIT
	JMP	EOR
ADR	ADD	L
	MOV	L,A
	RNC
	INR	H
	RET
LMOV	LDAX	D
	INX	D
	CMP	C
	RZ
	MOV	M,A
	INX	H
	JMP	LMOV
RMOV	LDAX	D
	DCX	D
	CMP	C
	RZ
	MOV	M,A
	DCX	H
	JMP	RMOV
LODM	MOV	B,M
	INX	H
	MOV	C,M
	INX	H
	MOV	D,M
	INX	H
	MOV	E,M
	RET
STOM	MOV	M,E
	DCX	H
	MOV	M,D
	DCX	H
	MOV	M,C
	DCX	H
	MOV	M,B
	RET
COM0	MVI	B,1
	MVI	C,4
	ORA	A
CO1	LDAX	D
	SBB	M
	JZ	CO2
	INR	B
CO2	DCX	D
	DCX	H
	DCR	C
	JNZ	CO1
	DCR	B
	RET
COM1	MVI	C,4
	LDAX	D
	SUI	1
	JMP	CO1+1
NORM	CALL	LODM
	XRA	A
	CMP	B
	RZ
NOR1	CMP	E
	CNZ	STOM
	RNZ
	MOV	E,D
	MOV	D,C
	MOV	C,B
	MVI	B,'0'
	JMP	NOR1
DELCK	LXI	H,IBUF-1
	MOV	A,M
	CPI	6
	RNZ
	XRA	A
	STA	AUTO
	LXI	H,0
	SHLD	BBUF+2
	SHLD	FBUF
	CALL	ZBUF
	LXI	H,IBUF
	LXI	D,ABUF
	MVI	B,5
LOOP	DCR	B
	JZ	DEL6
	MOV	A,M
	STAX	D
	INX	D
	INX	H
	JMP	LOOP
DEL6	CALL	DEL0
	JMP	EOR
FILLN2	LXI	H,IBUF
	MVI	C,4
FILL32	INX	H
	DCR	C
	RZ
FILL12	MOV	A,M
	CPI	'0'
	JC	FILL22
	CPI	'9'+1
	JNC	FILL22
	JMP	FILL32
FILL22	PUSH	D
	PUSH	H
	PUSH	B
	MVI	C,139
	LXI	D,IBUF+138
	LXI	H,IBUF+139
SHIFT2	LDAX	D
	MOV	M,A
	DCX	D
	DCX	H
	DCR	C
	JNZ	SHIFT2
	MVI	A,'0'
	STA	IBUF
	LDA	IBUF-1
	INR	A
	STA	IBUF-1
	POP	B
	POP	H
	POP	D
	JMP	FILL32
LIST	CALL	CRLF
	CALL	RANGE
	CALL	FIND
LIST2	XRA	A
	STA	CNTR
LIST0	INX	H
	CALL	OUTPT
	CALL	EOF
	CALL	STOPL
	CALL	CONTC
	JZ	LIST3
	LDA	UNIT
	ORA	A
	JNZ	LIST0
	LDA	SRCNT
	ORA	A
	JZ	LIST0
	MOV	B,A
	LDA	CNTR
	INR	A
	STA	CNTR
	CMP	B
	JC	LIST0
	PUSH	H
	LXI	H,M1
	CALL	SCRN
LIST1	CALL	IN8
	CPI	03
	JZ	LIST3
	CPI	13
	JNZ	LIST1
	CALL	CRLF
	POP	H
	JMP	LIST2
LIST3	XRA	A
	STA	UNIT
	JMP	EOR
STOPL	LXI	D,ABUF+4
	MVI	B,4
STOP1	LDAX	D
	ORA	A
	JNZ	STOP2
	INX	D
	DCR	B
	JNZ	STOP1
	RET
STOP2	PUSH	H
	INX	H
	LXI	D,ABUF+4
	MVI	B,4
STOP4	LDAX	D
	CMP	M
	JZ	STOP3
	JC	EOR
	POP	H
	RET
STOP3	INX	H
	INX	D
	DCR	B
	JNZ	STOP4
	POP	H
	RET
DELL	CALL	VCHK
	CALL	RANGE
DEL0	CALL	FIND
	SHLD	INSP
	LXI	H,ABUF+7
	MOV	A,M
	ORA	A
	JNZ	DEL1
	LXI	H,ABUF+3
DEL1	SHLD	HCON
	XCHG
	LXI	H,MAXL+3
	CALL	COM0
	LHLD	INSP
	JC	NOVR
	SHLD	EOFP
	MVI	M,1
	XCHG
	LHLD	BOFP
	XCHG
	MVI	B,13
	DCX	H
DEL2	MOV	A,L
	SUB	E
	MOV	A,H
	SBB	D
	MVI	A,13
	JC	DEL4
	DCR	B
	DCX	H
	CMP	M
	JNZ	DEL2
	DCX	H
	MOV	A,L
	SUB	E
	MOV	A,H
	SBB	D
	JC	DEL5
	CMP	M
	INX	H
	INX	H
	JZ	DEL3
	INX	H
DEL3	CALL	LODM
	LXI	H,MAXL+3
	CALL	STOM
	RET
DEL4	CMP	B
DEL5	XCHG
	JNZ	DEL3-1
	STA	MAXL
	RET
NOVR	CALL	FI1
	CZ	FI2
NOV1	XCHG
	LHLD	INSP
	MVI	C,1
	CALL	LMOV
	SHLD	EOFP
	MVI	M,1
	RET
SBLK	LHLD	PNTR
SBL1	MOV	A,M
	CPI	','
	JZ	SBL2
	CPI	' '
	RNZ
SBL2	INX	H
	SHLD	PNTR
	JMP	SBL1
ALPS	MVI	B,0
ALP1	STAX	D
	INR	B
	MOV	A,B
	CPI	11
	RNC
	INX	D
	INX	H
	SHLD	PNTR
	MOV	A,M
	CPI	'0'
	RC
	CPI	'9'+1
	JC	ALP1
	CPI	'A'
	RC
	CPI	'Z'+1
	JC	ALP1
	RET
DECPT	XRA	A
	STA	LAST
	LXI	H,2710H
	SHLD	TEMP2
	CALL	DIVID2
	LXI	H,03E8H
	SHLD	TEMP2
	CALL	DIVID2
	LXI	H,64H
	SHLD	TEMP2
	CALL	DIVID2
	LXI	H,0AH
	SHLD	TEMP2
	CALL	DIVID2
	LDA	MPTY
	ADI	'0'
	MOV	B,A
	CALL	OUT8
	RET
DIVID2	MVI	E,0
	LHLD	MPTY
	SHLD	TEMP
SB22	LXI	B,TEMP
	LXI	H,TEMP2
	XRA	A
	LDAX	B
	SBB	M
	STAX	B
	INX	B
	INX	H
	LDAX	B
	SBB	M
	STAX	B
	JC	NEG2
	INR	E
	PUSH	H
	LHLD	TEMP
	SHLD	MPTY
	POP	H
	JMP	SB22
NEG2	MOV	A,E
DIV2	ADI	'0'
	MOV	B,A
	LDA	LAST
	ORA	A
	JNZ	DIV4
	MOV	A,B
	CPI	'0'
	RZ
	STA	LAST
DIV4	CALL	OUT8
	RET
LNGEN	PUSH	B
	PUSH	D
	PUSH	H
	MVI	C,2
	LXI	H,NUMBR
	LXI	D,LINE1
CONVT	LDAX	D
	RRC
	RRC
	RRC
	RRC
	CALL	UNPAK
	LDAX	D
	CALL	UNPAK
	INX	D
	DCR	C
	JNZ	CONVT
	POP	H
	MVI	C,4
	LXI	D,NUMBR
LOOP2	LDAX	D
	MOV	M,A
	INX	D
	INX	H
	DCR	C
	JNZ	LOOP2
	PUSH	H
	MVI	C,2
	LXI	D,LINE1+1
	LXI	H,INCR+1
	XRA	A
LOOP1	LDAX	D
	ADC	M
	DAA
	STAX	D
	DCR	C
	DCX	D
	DCX	H
	JNZ	LOOP1
	POP	H
	POP	D
	POP	B
	RET
AUTOL	LXI	H,0500H
	SHLD	INCR
	CALL	VCHK
	LXI	H,LINE1
	LXI	D,ABUF
	CALL	PACK
	LXI	H,INCR
	LDAX	D
	CPI	0
	JZ	SWITH
	CALL	PACK
SWITH	MVI	A,1
	STA	AUTO
	JMP	EOR
PACK	CALL	TWICE
TWICE	CALL	TEST
	RLC
	RLC
	RLC
	RLC
	MOV	B,A
	INX	D
	CALL	TEST
	ADD	B
	MOV	M,A
	INX	D
	INX	H
	RET
TEST	LDAX	D
	CPI	'0'
	JC	ERR3
	CPI	'9'+1
	JNC	ERR3
	ANI	0FH
	RET
UNPAK	ANI	0FH
	ADI	'0'
	MOV	M,A
	MOV	B,A
	LDA	AUTO
	ORA	A
	CNZ	OUT8
	INX	H
	RET
EDIT	CALL	CRLF
	MVI	B,'>'
	CALL	OUT8
	MVI	A,1
	STA	HALT
	LDA	ABUF
	ORA	A
	JZ	ERR9
	XRA	A
	STA	TEMP
	CALL	FIND
	INX	H
	LXI	D,TBUF
CPYLOOP	MOV	A,M
	STAX	D
	MOV	B,A
	CALL	OUT8
	MOV	A,B
	CPI	13
	JZ	DPLAY
	INX	H
	INX	D
	JMP	CPYLOOP
DPLAY	CALL	CRLF
	MVI	B,'>'
	CALL	OUT8
	JMP	RESTR
ERR9	LXI	H,ERRM9
	JMP	REPLY
ERRM9	DB	'MISSING LINE NO.'
	DB	13
SAVME	CALL	CRLF
	LXI	H,DUMMY
	CALL	SCRN
	CALL	IN8
	MOV	B,A
	CALL	OUT8
	MOV	E,B
	CALL	CRLF
	MOV	A,E
	CPI	'Y'
	JZ	SAVM1
	LXI	H,SORRY
	CALL	SCRN
	CALL	CRLF
	JMP	DOS
DUMMY	DB	'DO YOU HAVE A BACKUP OF '
	DB	'THIS DISK (Y/N)? '
	DB	13
SORRY	DB	'BACKUP	THIS DISK NOW!!!'
	DB	13
SAVM1	MVI	A,1
	STA	DISK
	LXI	H,RITER
	CALL	DLOOK
	JNC	SAVM2
	LXI	H,RITER
	JMP	REPLY
RITER	DB	'SECRTARY '
	DB	'NOT FOUND ON DRIVE 1'
	DB	13
SAVM2	LDA	RWCHK
	STA	TEMP
	XRA	A
	STA	RWCHK
	CALL	SETDN
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG
	LDA	DISK
	MOV	C,A
	LDA	DISK
	ANI	80H
	JZ	L4
	MVI	A,26
	JMP	L5
L4	MVI	A,52
L5	EQU	$
	MVI	B,0
	LXI	D,PART1
	CALL	DCOM
	JC	IOERR2
	LDA	TEMP
	STA	RWCHK
	RET
SETDN	LDA	DENTY
	CPI	'S'
	JZ	SETS
	LDA	DBYTE
	ORA	A
	JZ	SETS
SETD	MVI	A,87H
	STA	FTYPE
	LDA	DISK
	ORI	80H
	JMP	SETE
SETS	MVI	A,7
	STA	FTYPE
	LDA	DISK
	ANI	07
SETE	STA	DISK
	RET
;FILE	LOAD	ROUTINE
LOAD	CALL	CRLF
	CALL	LOADR
	CALL	FREE
	JMP	EOR
CHAINCMND	CALL	LOADR
	LXI	H,000
	SHLD	ABUF
	SHLD	ABUF+2
	JMP	PRINT
LOADR	CALL	SETUP
	CALL	GFILE
	CALL	DIREC
	CALL	SETDN
	MVI	A,1
	CALL	SIZE
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG
	LDA	DISK
	MOV	C,A
	LDA	BLOCK
	PUSH	PSW
	LDA	DISK
	ANI	80H
	JZ	LOADSNGL
	POP	PSW
	RRC
	JMP	LOADBLK
LOADSNGL POP	PSW
LOADBLK	EQU	$
	MVI	B,1
	XCHG
	LHLD	BOFP
	XCHG
DOIT	CALL	DCOM
	JNC	IOGD
IOERR2	LXI	H,ERR31
	JMP	REPLY
ERR31	DB	'DISK FULL ERROR'
	DB	07
	DB	07
	DB	07
	DB	13
IOGD	LHLD	BOFP
LOAD2	LXI	D,MAXL
	MVI	C,4
LOAD14	INX	H
	MOV	A,M
	STAX	D
	INX	D
	DCR	C
	JNZ	LOAD14
LOAD3	INX	H
	MVI	A,0DH
	CMP	M
	JNZ	LOAD3
	INX	H
	MVI	A,1
	CMP	M
	JNZ	LOAD2
LOAD4	SHLD	EOFP
LOAD5	RET
	DB	3AH
;NEW	FILE	SAVE	ROUTINE
NSAVE	CALL	CRLF
	CALL	SETUP
	CALL	GFILE
	CALL	GPARM
	STA	BLOCK
	LDA	DISK
	ANI	7FH
	LXI	H,FILE
	CALL	DLOOK
	JNC	NSERR
	SHLD	TEMP
	MVI	B,10
	LXI	H,TBUF
NSAV4	MVI	A,20H
	MOV	M,A
	INX	H
	DCR	B
	JNZ	NSAV4
	LDA	DISK
	LXI	H,TBUF
	CALL	DLOOK
	JC	IOERR2
	CALL	SETDN
	MVI	B,8
NSAV5	DCX	H
	DCR	B
	JNZ	NSAV5
	LXI	D,FILE
	MVI	B,8
NSAV2	LDAX	D
	MOV	M,A
	INX	H
	INX	D
	DCR	B
	JNZ	NSAV2
NSAV3	SHLD	TEMP2
	LDA	TEMP
	MOV	M,A
	INX	H
	LDA	TEMP+1
	MOV	M,A
	INX	H
	LDA	BLOCK
	ORA	A
	JNZ	NSAV6
	CALL	SIZEB
	LDA	BLOCK
	INR	A
	INR	A
	INR	A
	INR	A
	STA	BLOCK
NSAV6	PUSH	PSW
	LDA	DISK
	ANI	80H
	JZ	SDBLK
	POP	PSW
	RRC
	JNC	NOINR
	INR	A
NOINR	ANI	7FH
	JMP	L1
SDBLK	POP	PSW
L1	STA	BLOCK
	MOV	M,A
	INX	H
	XRA	A
	MOV	M,A
	INX	H
	LDA	FTYPE
	MOV	M,A
	CALL	DWRIT
	CALL	DIREC
	CALL	SETDN
	JMP	SAVE1
NSERR	LXI	H,MESSD2
	JMP	REPLY
MESSD2	DB	'FILE ALREADY EXISTS'
	DB	13
;FILE	SAVE	ROUTINE
SAVECMND	CALL	CRLF
	CALL	SETUP
	CALL	GFILE
	CALL	DIREC
	CALL	SETDN
	XRA	A
	CALL	SIZE
	LDA	DBYTE
	ORA	A
	JZ	SAVE1
	LDA	BLOCK
	RRC
	INR	A
SAVE2	ANI	7FH
	STA	BLOCK
SAVE1	MOV	E,M
	INX	H
	MOV	D,M
	XCHG
	LDA	DISK
	MOV	C,A
	LDA	BLOCK
	MVI	B,0
	XCHG
	LHLD	BOFP
	XCHG
	CALL	DCOM
	JC	IOERR2
	LXI	H,MESSB
	JMP	REPLY
MESSB	DB	'SAVED'
        DB	13
DESTR	CALL	CRLF
	CALL	SETUP
	CALL	GFILE
	CALL	DIREC
	MVI	B,8
KILL2	DCX	H
	DCR	B
	JNZ	KILL2
	MVI	B,8
	MVI	A,' '
KILL3	MOV	M,A
	INX	H
	DCR	B
	JNZ	KILL3
KILL4	LXI	H,CHK
	CALL	SCRN
	CALL	IN8
	MOV	B,A
	CALL	OUT8
	MOV	E,B
	CALL	CRLF
	MOV	A,E
	CPI	'N'
	JZ	EOR
	CPI	'Y'
	JNZ	KILL4
	CALL	DWRIT
	LXI	H,MSGK
	JMP	REPLY
MSGK	DB	'FILE DELETED',13
CHK	DB	'ARE YOU SURE (Y/N)? ',13
APPND	CALL	APPNDR			;APPEND COMMAND
	CALL	FREE
	JMP	EOR
APPNDR	CALL	CRLF
	CALL	SETUP
	CALL	GFILE
	CALL	DIREC
	CALL	SETDN
	CALL	SIZEA
	MOV	E,M
	INX	H
	MOV	D,M
	LDA	DISK
	MOV	C,A
	LDA	BLOCK
	MVI	B,1
	LHLD	EOFP
	XCHG
	JMP	DOIT
SIZEA	PUSH	H
	INX	H
	INX	H
	MOV	A,M
	STA	BLOCK
	LDA	DISK
	ANI	80H
	JZ	L2
	LDA	BLOCK
	ANI	7FH
	RLC
	STA	BLOCK
L2	LHLD	EOFP
	JMP	INSZ2
SIZEB	PUSH	H
	LHLD	BOFP
	SHLD	ADDR1
	LHLD	EOFP
	SHLD	ADDR2
	CALL	ADDRC
	LDA	ADDR3+1
	INR	A
	STA	BLOCK
	POP	H
	RET
SIZE	PUSH	H
	STA	TEMP
	INX	H
	INX	H
	MOV	A,M
	STA	BLOCK
	LDA	DISK
	ANI	80H
	JZ	L3
	LDA	BLOCK
	ANI	7FH
	RLC
	STA	BLOCK
L3	LDA	TEMP
	ORA	A
	JZ	OUTSZ
;	SIZE	ON	LOAD
INSZ	LHLD	BOFP
INSZ2	SHLD	ADDR1
	LHLD	TOP
	SHLD	ADDR2
	CALL	ADDRC
	LDA	ADDR3+1
	INR	A
	LXI	H,BLOCK
	CMP	M
	JZ	SIZE9
	JC	ERR6
	MOV	A,M
	JMP	SIZE9
;	SIZE	ON	SAVE
OUTSZ	LHLD	BOFP
	SHLD	ADDR1
	LHLD	EOFP
	SHLD	ADDR2
	CALL	ADDRC
	LDA	ADDR3+1
	INR	A
	LXI	H,BLOCK
	CMP	M
	JZ	SIZE9
	JNC	ERR5
SIZE9	STA	BLOCK
	POP	H
	RET
ERR5	CALL	CRLF
	LXI	H,ERRM5
	CALL	SCRN
	JMP	EOR
RPLY	CALL	CRLF
	CALL	SCRN
	POP	H
	RET
ERRM5	DB	'FILE TOO SMALL...NOT SAVED'
	DB	13
ERR6	LXI	H,ERRM6
	STA	BLOCK
	JMP	RPLY
ERRM6	DB	'FILE TOO LARGE TO FIT IN MEMORY...ONLY PARTIALLY LOADED'
	DB	13
;GET	THE	FILE	NAME
GFILE	MVI	A,1
	STA	DISK
	MVI	C,9
	MVI	A,' '
	LXI	D,FILE
BFILL	STAX	D
	INX	D
	DCR	C
	JNZ	BFILL
LOOK1	MOV	A,M
	CPI	13
	JZ	ERR1
	CPI	' '
	JNZ	MFILE
	INX	H
	JMP	LOOK1
MFILE	MVI	C,9
	LXI	D,FILE
FILL1	MOV	A,M
	CPI	13
	JZ	UPPER
	CPI	' '
	JZ	UPPER
	CPI	','
	JZ	LOOKU
	STAX	D
	INX	H
	INX	D
	DCR	C
	JZ	ERR1
	JMP	FILL1
LOOKU	INX	H
	MOV	A,M
	CPI	13
	JZ	UPPER
	CPI	'1'
	JC	ERR1
	CPI	'4'+1	;QD ALLOWS 4 DRIVES
	JNC	ERR1
	ANI	0FH
	STA	DISK
	INX	H
UPPER	LXI	D,FILE
	MVI	B,8
UPPR	LDAX	D
	CPI	60H
	JC	LOWER
	SBI	20H
	STAX	D
LOWER	INX	D
	DCR	B
	JNZ	UPPR
	RET
;	SEE	IF	FILE IS THERE
DIREC	LDA	DISK
	LXI	H,FILE
	CALL	DLOOK
	RNC
	LXI	H,ERR4
	JMP	REPLY
ERR4	DB	'FILE NOT FOUND'
	DB	13
;OUTPUT	NULL	CHARACTERS
NULLO	LDA	NULLC
	ORA	A
	RZ
	PUSH	D
	MOV	E,A
NULL2	MVI	B,0
	CALL	OUT8A
	DCR	E
	JNZ	NULL2
NULL3	POP	D
	RET
;OUTPUT	A	CARRIAGE	RETURN LINE FEED
CRLF	MVI	B,13
	CALL	OUT8
	MVI	B,10
	CALL	OUT8
	CALL	NULLO
	RET
;CHARACTER	INPUT	ROUTINE
IN8	XRA	A
	JMP	CIN
;ECHOE	TAB	CHAR	AS @
;OUTPUT	A	CHARACTER	TO THE CONSOLE
OUT8	MVI	A,09
	CMP	B
	JNZ	SKIP21
	MVI	B,'@'
SKIP21	XRA	A
	JMP	COUT
;OUTPUT	A	CHARACTER	TO UNIT "UNIT"
OUT8A	MVI	A,09
	CMP	B
	JNZ	SKIP22
	MVI	B,'@'
SKIP22	LDA	UNIT
	JMP	COUT
;DISPLAY	LINE	THROUGH	CR
SCRN	MOV	B,M
	MVI	A,13
	CMP	B
	RZ
	CALL	OUT8
	INX	H
	JMP	SCRN
;LINE	PRINT	FOR	LIST AND PRINT COMMANDS
OUTPT	MOV	B,M
	MVI	A,13
	CMP	B
	JZ	OUTDN
	CALL	OUT8A
	INX	H
	JMP	OUTPT
OUTDN	CALL	OUTCR
	LDA	SPACE
	ORA	A
	RZ
	PUSH	B
	MOV	C,A
OUTA	DCR	C
	JZ	OUTB
	CALL	OUTCR
	JMP	OUTA
OUTB	POP	B
	RET
OUTCR	MVI	B,13
	CALL	OUT8A
	MVI	B,10
	CALL	OUT8A
	CALL	NULLO
	RET
;DISPLAY	AN	ERROR	MESSAGE
REPLY	CALL	CRLF
	CALL	SCRN
	JMP	EOR
DIRECTORY	EQU	$
CATLG	LHLD	DOSER
	SHLD	ADDR1
	LXI	H,CAT2
	SHLD	DOSER
	CALL	CRLF
	CALL	SETUP
	CALL	GPARM
	ORA	A
	JNZ	CAT1
	MVI	A,1
CAT1	MVI	L,0
	CALL	DLIST
CAT2	LHLD	ADDR1
	SHLD	DOSER
	CALL	CRLF
	JMP	EOR
;	GET	1	PARAMETER
PARM	EQU	$
GPARM	EQU	$
	PUSH	D
	PUSH	B
	XRA	A
	STA	SAVE
PARM9	EQU	$
	MOV	A,M
	CPI	13
	JZ	PEOF
	CPI	','
	JZ	PARM0
	CPI	' '
	JNZ	PARM1
PARM0	INX	H
	JMP	PARM9
PARM1	EQU	$
	CPI	'0'
	JC	ERR2
	CPI	'9'+1
	JNC	ERR2
	ANI	0FH
	MOV	E,A
	LDA	SAVE
	MOV	B,A
	RLC
	RLC
	RLC
	ADD	B
	ADD	B
	ADD	E
	STA	SAVE
	INX	H
	MOV	A,M
	CPI	13
	JZ	PEOF
	CPI	','
	JZ	PEOF
	CPI	' '
	JZ	PEOF
	JMP	PARM1
PEOF	LDA	SAVE
	POP	B
	POP	D
	RET
MERGECMND	EQU	$
BASIC	LDA	IBUF-1
	CPI	8
	JNC	BDB1
	CALL	EOFBA
	LXI	H,BMSG5
	JMP	REPLY
BMSG5	DB	'BASIC FILE DELETED'
	DB	13
BDB1	LDA	INSRT
	ORA	A
	JZ	BDB2
	JMP	NSERR
BDB2	LDA	TOP+1
	DCR	A
	DCR	A
	MOV	B,A
	LDA	EOFP+1
	CMP	B
	JC	BDB3
	LXI	H,BMSG22
	JMP	REPLY
BMSG22	DB	'NO ROOM FOR BUFFER'
	DB	13
BDB3	CALL	SETUP
	CALL	GFILE
	CALL	DIREC
	CALL	SETDN
	LDA	DENTY
	CPI	'S'
	JZ	BDB42
	LDA	DBYTE
	ORA	A
	JZ	BDB42
	MVI	A,1
	JMP	BDB72
BDB42	MVI	A,2
BDB72	STA	BLOCK
	PUSH	H
	LHLD	TOP
	DCR	H
	DCR	H
	DCR	L
	SHLD	TOP
	POP	H
	PUSH	H
	INX	H
	INX	H
	INX	H
	INX	H
	MOV	A,M
	ANI	0FH
	CPI	3
	JZ	BDB52
	LXI	H,BMSG32
	JMP	REPLY
BMSG32	DB	'NOT A BASIC DATA FILE'
	DB	13
BDB52	POP	H
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG
	DCX	H
	LDA	BLOCK
	CPI	1
	JZ	SDA2
	DCX	H
SDA2	SHLD	DSKAD
	LHLD	TOP
	INX	H
	SHLD	BUFAD
	CALL	GETBA
	LHLD	BUFAD
	MOV	A,M
	CPI	3
	JZ	BDB6
	LXI	H,BMSG4
	JMP	REPLY
BMSG4	DB	'FILE NOT STRING DATA'
	DB	13
BDB6	INX	H
	MOV	A,M
	STA	RECCT
	INX	H
	SHLD	BUFAD
	LHLD	BUFCT
	INX	H
	INX	H
	SHLD	BUFCT
	XRA	A
	STA	INHIB
	MVI	A,1
	STA	INSRT
	CALL	FREE
	JMP	EOR
GETBA	PUSH	H
	PUSH	B
	PUSH	D
	LHLD	TOP
	INX	H
	SHLD	BUFAD
	XCHG
	LHLD	DSKAD
	INX	H
	LDA	BLOCK
	CPI	1
	JZ	SDA
	INX	H
SDA	SHLD	DSKAD
	LDA	DISK
	MOV	C,A
	LDA	BLOCK
	MVI	B,1
	CALL	DCOM
	JC	IOERR
	CALL	RSTBA
	POP	D
	POP	B
	POP	H
	RET
EOFBA	LDA	INSRT
	ORA	A
	RZ
	XRA	A
	STA	RPEAT
	STA	INSRT
	LXI	H,0000H
	SHLD	DSKAD
	SHLD	BUFAD
	SHLD	BUFCT
	SHLD	RECCT
	LHLD	TOP
	INR	H
	INR	H
	INR	L
	SHLD	TOP
	MVI	A,1
	STA	INHIB
	RET
RSTBA	MVI	A,99
	STA	RPEAT
	LXI	H,0000
	SHLD	BUFCT
	RET
MOVBA	LDA	INHIB
	ORA	A
	RNZ
	PUSH	H
	PUSH	B
MOV0	LHLD	BUFAD
	MOV	A,M
	CPI	'+'
	JZ	MOV1
	STAX	D
	INX	D
	LDA	NCHR
	INR	A
	STA	NCHR
	MOV	B,A
	LDA	CCNT
	CMP	B
	JZ	LFULL
	CALL	INRBF
	CALL	INRRC
	LDA	INHIB
	ORA	A
	JZ	MOV0
	JMP	POPIT
MOV1	CALL	INRBF
	CALL	INRRC
POPIT	POP	B
	POP	H
	RET
LFULL	CALL	INRBF
	CALL	INRRC
	LHLD	BUFAD
	MOV	A,M
	CPI	'+'
	JZ	MOV1
	LDA	INHIB
	ORA	A
	JZ	LFULL
	JMP	POPIT
INRBF	INX	H
	SHLD	BUFAD
	LHLD	BUFCT
	INX	H
	SHLD	BUFCT
	MOV	A,H
	CPI	2
	RNZ
	CALL	GETBA
	RET
INRRC	LDA	CUSED
	INR	A
	STA	CUSED
	MOV	B,A
	LDA	RECCT
	CMP	B
	RNZ
	MVI	A,1
	STA	INHIB
	RET
FLUSH	PUSH	H
	PUSH	B
	XRA	A
	STA	INHIB
FLSH1	LHLD	BUFAD
	MOV	A,M
	CPI	03
	JZ	FLSH2
	CPI	1
	JZ	FLSH3
	CALL	INRBF
	JMP	FLSH1
FLSH2	CALL	INRBF
	LHLD	BUFAD
	MOV	A,M
	STA	RECCT
	XRA	A
	STA	CUSED
	CALL	INRBF
	POP	B
	POP	H
	RET
FLSH3	POP	B
	POP	H
	JMP	EOFBA
DEBUG		MVI	A,1
	STA	DBFLG
	CALL	HASH1
	CALL	HASH2
	JMP	EOR
DUMP1	CALL	OUTCR
	LHLD	BBUF+2
	XCHG
	LHLD	BBUF
	LDA	IBUF-1
	CPI	6
	JZ	DPRAM
	CALL	DUMP3
	CALL	OUTCR
	JMP	EOR
DPRAM	CALL	DUMP4
	CALL	OUTCR
	JMP	EOR
DUMP2	LDA	DBFLG
	ORA	A
	JZ	EOR
DUMP	EQU	$
DUMP4	LXI	D,TBUF+140
	LXI	H,AREA
	CALL	DUMP3
	JMP	EOR
DUMP5	PUSH	H
	PUSH	D
	PUSH	B
	PUSH	PSW
	SHLD	HL
	XCHG
	SHLD	DE
	JMP	H0
DUMP3	PUSH	H
	PUSH	D
	PUSH	B
	PUSH	PSW
	SHLD	HL
	XCHG
	SHLD	DE
REASK	CALL	CRLF
	LXI	H,MSGD
	CALL	SCRN
	CALL	IN8
	CPI	03
	JZ	EOR
	MOV	B,A
	CALL	OUT8
	MOV	A,B
	CPI	'0'
	JC	REASK
	CPI	'7'
	JNC	REASK
	ANI	07H
	STA	UNIT
	CALL	CRLF
H0	LXI	H,HL+1
	CALL	HEX
	LXI	H,HL
	CALL	HEX
	LHLD	HL
	MVI	D,8
H2	MVI	B,' '
	CALL	OUT8A
	MVI	E,4
H1	CALL	HEX
	INX	H
	DCR	E
	JNZ	H1
	DCR	D
	JNZ	H2
	LHLD	HL
	MVI	B,' '
	CALL	OUT8A
	MVI	D,32
H4	MOV	A,M
	CPI	20H
	JC	H5
	CPI	7EH
	JC	H3
H5	MVI	A,'.'
H3	MOV	B,A
	CALL	OUT8A
	INX	H
	DCR	D
	JNZ	H4
	CALL	OUTCR
	SHLD	HL
	CALL	CONTC
	JZ	EOR
	LDA	HL+1
	MOV	B,A
	LDA	DE+1
	CMP	B
	JZ	H6
	JNC	H0
	JMP	H7
H6	LDA	HL
	MOV	B,A
	LDA	DE
	CMP	B
	JZ	H7
	JNC	H0
H7	XRA	A
	STA	UNIT
	POP	PSW
	POP	B
	POP	D
	POP	H
	RET
MSGD	DB	'UNIT? '
	DB	13
HEX	PUSH	H
	MOV	A,M
	CALL	BINH
	LXI	H,HCON
	MOV	B,M
	CALL	OUT8A
	INX	H
	MOV	B,M
	CALL	OUT8A
	POP	H
	RET
BINH	LXI	H,HCON
	MOV	B,A
	RAR
	RAR
	RAR
	RAR
	CALL	BIN1
	MOV	M,A
	INX	H
	MOV	A,B
	CALL	BIN1
	MOV	M,A
	RET
BIN1	ANI	0FH
	ADI	48
	CPI	58
	RC
	ADI	7
	RET
HASH1	LXI	H,CLEAN
	LXI	D,RAM
	MVI	B,0
	CALL	HASH3
	LXI	H,PART5
	LXI	D,MEMRY
HASH3	MOV	A,B
	ADD	M
	MOV	B,A
	INX	H
	MOV	A,H
	CMP	D
	JNZ	HASH3
	MOV	A,L
	CMP	E
	JNZ	HASH3
	RET
HASH2	LDA	HTOT
	CMP	B
	RZ
	MOV	A,B
	STA	HTOT
	LXI	H,HASHM
	CALL	CRLF
	CALL	SCRN
	CALL	CRLF
	RET
HASHM	DB	'INTEGRITY FAILURE'
	DB	13
MOVECMND	MVI	A,1
	JMP	COPYCMND+1
COPYCMND	EQU	$
	XRA	A
	STA	TEMP3
	CALL	RANGE
GETLN	EQU	$
	LXI	H,0100H
	SHLD	INCR
	LXI	H,LINE1
	LXI	D,ABUF+8
	CALL	PACK
	XRA	A
	STA	TEMP3+1
	LXI	D,ABUF+8
	LXI	H,ABUF
	MVI	B,4
AGAIN	LDAX	D
	CMP	M
	JC	BKWRD
	JNZ	FRWRD
	INX	H
	INX	D
	DCR	B
	JZ	FRWRD
	JMP	AGAIN
BKWRD	MVI	A,1
	STA	TEMP3+1
FRWRD	CALL	FIND
MOVL	SHLD	ADDR1
	LXI	D,IBUF-1
	MOV	A,M
	STAX	D
	INX	D
	INX	H
MOVX	MOV	A,M
	STAX	D
	CPI	13
	JZ	COPD
	INX	H
	INX	D
	JMP	MOVX
COPD	SHLD	ADDR2
	INX	D
	MVI	A,1
	STAX	D
	LXI	H,IBUF
	CALL	LNGEN
	CALL	LINE
	LXI	D,ABUF+4
	LHLD	ADDR1
	LDA	TEMP3+1
	ORA	A
	JZ	SKPAD
	LHLD	ADDR2
	INX	H
	SHLD	ADDR1
	INX	H
	CALL	ADVNC
	SHLD	ADDR2
	LHLD	ADDR1
SKPAD	INX	H
	MVI	B,5
ENDD	DCR	B
	JZ	DONE2
	LDAX	D
	CMP	M
	JNZ	CNEXT
	INX	D
	INX	H
	JMP	ENDD
CNEXT	LHLD	ADDR2
	INX	H
	MOV	A,M
	CPI	1
	JZ	DONE2
	PUSH	B
	PUSH	H
	PUSH	D
	MVI	B,4
	INX	H
	LXI	D,ABUF+4
RETRY	LDAX	D
	CMP	M
	JC	DONE2
	JNZ	RESET
	INX	H
	INX	D
	DCR	B
	JZ	RESET
	JMP	RETRY
ADVNC	INX	H
AD	MOV	A,M
	CPI	13
	JZ	FNDIT
	INX	H
	JMP	AD
FNDIT	RET
RESET	POP	D
	POP	H
	POP	B
	JMP	MOVL
DONE2	LDA	TEMP3
	ORA	A
	JNZ	MOVC
	LXI	H,MESS21
	JMP	REPLY
MESS21	DB	'COPIED'
	DB	13
MOVC	CALL	DELL
	LXI	H,MESS22
	JMP	REPLY
MESS22	DB	'MOVED'
	DB	13

CHNG	MVI	A,1
	JMP	CHNGA+1
CHNGA	XRA	A
	STA	TEMP3
FINDZ	CALL	CRLF
	LXI	H,IBUF
	LXI	D,TBUF
EDIT5	MOV	A,M
	STAX	D
	CPI	13
	JZ	EDIT6
	INX	H
	INX	D
	JMP	EDIT5
EDIT6	LXI	H,TBUF
	CALL	SET1
	XRA	A
	STA	CNTR
CHNG1	MVI	A,13
	CMP	M
	JZ	ERR2
	MVI	A,' '
	CMP	M
	JNZ	CHNG5
	INX	H
	JMP	CHNG1
CHNG5	SHLD	ADDR1
CHNG6	MVI	A,13
	CMP	M
	JZ	ERR2
	MVI	A,'^'
	CMP	M
	JZ	CHNG2
	INX	H
	JMP	CHNG6
CHNG2	LHLD	BOFP
	INX	H
CHNGX	SHLD	ADDR2
	INX	H
	INX	H
	INX	H
	INX	H
	SHLD	ADDR3
	XCHG
	LHLD	ADDR1
	XCHG
CHNG3	LDAX	D
	CPI	'^'
	JZ	FUND
	CMP	M
	JNZ	NOTXX
	INX	H
	INX	D
	JMP	CHNG3
NOTXX	LHLD	ADDR1
	XCHG
	LHLD	ADDR3
	INX	H
	SHLD	ADDR3
	MVI	A,13
	CMP	M
	JNZ	CHNG3
	SHLD	ADDR3
EOFXX	LHLD	ADDR3
	INX	H
	MVI	A,1
	CMP	M
	JZ	FINIX
	CALL	CONTC
	JZ	EOR
	INX	H
	JMP	CHNGX
FUND	LDA	CNTR
	INR	A
	STA	CNTR
	CALL	REDIT
	LDA	TEMP3
	ORA	A
	JZ	CHNG4
	LXI	H,IBUF
	CALL	SCRN
IN1	CALL	IN8
	CPI	13
	JZ	KEEP
	CPI	03
	JZ	EOR
	CPI	01
	JZ	DELT
	CPI	20H
	JZ	DELT
	JMP	IN1
KEEP	CALL	CRLF
CHNG4	CALL	LINE
	JMP	EOFXX
DELT	CALL	CRLF
	LHLD	ADDR4
	SHLD	ADDR3
	JMP	EOFXX
FINIX	LDA	CNTR
	ORA	A
	JNZ	EOR
	LXI	H,MESS3
	JMP	REPLY
MESS3	DB	'CHAR NOT FOUND'
	DB	13
REDIT	LXI	B,IBUF
	MVI	A,6
	STA	INCR
	LHLD	ADDR2
	MVI	D,5
EDIT3	DCR	D
	JZ	EDIT4
	MOV	A,M
	STAX	B
	INX	H
	INX	B
	JMP	EDIT3
EDIT4	SHLD	ADDR3
	XCHG
	LHLD	ADDR1
	XCHG
EDIT1	LDAX	D
	CPI	'^'
	JZ	STFND
	CMP	M
	JNZ	STNF
	INX	H
	INX	D
	JMP	EDIT1
STNF	LHLD	ADDR3
	MOV	A,M
	STAX	B
	INX	B
	LDA	INCR
	INR	A
	STA	INCR
	CPI	139
	JZ	ERR44
	LHLD	ADDR1
	XCHG
	LHLD	ADDR3
	INX	H
	SHLD	ADDR3
	MVI	A,13
	CMP	M
	JNZ	EDIT1
ERR44	LXI	H,MESS44
	JMP	REPLY
MESS44	DB	'CHAR OVERFLOW'
	DB	13
	JMP	LNFUL
STFND	INX	D
EDIT2	LDAX	D
	CPI	13
	JZ	DADD
	STAX	B
	INX	B
	INX	D
	LDA	INCR
	INR	A
	STA	INCR
	CPI	139
	JZ	LNFUL
	JMP	EDIT2
DADD	MOV	A,M
	CPI	13
	JZ	LNFUL
	STAX	B
	INX	H
	INX	B
	LDA	INCR
	INR	A
	STA	INCR
	CPI	139
	JZ	LNFUL
	JMP	DADD
LNFUL	MVI	A,13
	STAX	B
	INX	B
	MVI	A,1
	STAX	B
	SHLD	ADDR4
	STAX	B
	LHLD	ADDR2
	DCX	H
	DCX	H
	SHLD	ADDR3
	LDA	INCR
	STA	IBUF-1
	RET
RECOVER	EQU	$
RCVR0	CALL	RVSUB
	ORA	A
	JNZ	RCVR9
	CALL	FREE
	LXI	H,MESS6
	JMP	REPLY
RCVR9	LXI	H,MESS5
	JMP	REPLY
MESS5	DB	'CANNOT	RECOVER'
	DB	13
MESS6	DB	'RECOVERY SUCCESSFUL'
	DB	13
RVSUB	LHLD	BOFP
	MOV	A,M
	CPI	01
	JNZ	RCVR5
	MVI	B,2
RCVR1	INX	H
	MOV	A,M
	CPI	13
	JZ	RCVR2
	INR	B
	MVI	A,139
	CMP	B
	JNZ	RCVR1
	MVI	A,1
	RET
RCVR2	LHLD	BOFP
	MOV	M,B
	JMP	RCVR0
RCVR5	SHLD	ADDR1
RCVR3	XCHG
	LHLD	ADDR1
	SHLD	ADDR2
	XCHG
	SHLD	ADDR1
	MOV	A,M
	CPI	01
	JZ	RCVRD
	MOV	B,A
	DCR	B
RCVR4	INX	H
	LDA	TOP+1
	CMP	H
	JNZ	RCVR7
	LDA	TOP
	CMP	L
	JZ	RCVR8
RCVR7	DCR	B
	JNZ	RCVR4
	MOV	A,M
	INX	H
	CPI	13
	JZ	RCVR3
RCVR8	LHLD	ADDR1
	MVI	A,01
	MOV	M,A
RCVRD	SHLD	EOFP
	LHLD	ADDR2
	INX	H
	MVI	B,4
	LXI	D,MAXL
RCVR6	MOV	A,M
	STAX	D
	INX	H
	INX	D
	DCR	B
	JNZ	RCVR6
	XRA	A
	RET
JUSTCMND	EQU	$
JUST	LXI	D,IBUF
JUST2	LDAX	D
	CPI	13
	JZ	JUST5
	CPI	' '
	JZ	JUST3
	INX	D
	JMP	JUST2
JUST3	LDAX	D
	CPI	13
	JZ	JUST5
	CPI	'O'
	JZ	JUST4
	CPI	6FH
	JZ	JUST4
	INX	D
	JMP	JUST3
JUST4	INX	D
	LDAX	D
	CPI	'N'
	JZ	XJON
	CPI	6EH
	JZ	XJON
	CPI	'F'
	JZ	XJOFF2
	CPI	66H
	JZ	XJOFF2
JUST5	LDA	JSW
JUST6	ORA	A
	JZ	XJOFF
	LXI	H,MES12
	JMP	REPLY
XJOFF	LXI	H,MES11
	JMP	REPLY
XJON	MVI	A,1
	JMP	XJOFF2+1
XJOFF2	XRA	A
	STA	JSW
	JMP	JUST6
MES11	DB	'JUSTIFY OFF'
	DB	13
MES12	DB	'JUSTIFY ON'
	DB	13
NULLCMND	EQU	$
NULLS	CALL	SETUP
	CALL	GPARM
	STA	NULLC
	LXI	H,MESSD
	JMP	REPLY
MESSD	DB	'NULL COUNT ACCEPTED'
	DB	13
OFFSETCMND	EQU	$
SETOF	CALL	SETUP
	CALL	GPARM
	STA	OFFST
	LXI	H,MESSO
	JMP	REPLY
MESSO	DB	'OFFSET ACCEPTED'
	DB	13
MARGINCMND	EQU	$
MARGN	CALL	SETUP
	CALL	GPARM
	ORA	A
	JZ	ERR2
	DCR	A
	STA	OFFST
	CALL	GPARM
	ORA	A
	JZ	ERR2
	CPI	132
	JNC	ERR2
	MOV	B,A
	LDA	OFFST
	MOV	C,A
	MOV	A,B
	SUB	C
	JC	ERR2
	STA	LINES
	LXI	H,MESSM
	JMP	REPLY
MESSM	DB	'MARGINS SET'
	DB	13
PNUMCMND	EQU	$
SETPN	CALL	SETUP
	CALL	GPARM
	DCR	A
	STA	PNO
	LXI	H,MESSP
	JMP	REPLY
MESSP	DB	'PAGE NO ACCEPTED'
	DB	13
REPEATCMND	EQU	$
REPET	CALL	SETUP
	CALL	GPARM
	STA	RPEAT
	LXI	H,MESSE
	JMP	REPLY
MESSE	DB	'REPEAT COUNT ACCEPTED'
	DB	13
LINECMND	EQU	$
	CALL	SETUP
	CALL	GPARM
	STA	LINES
	LXI	H,MESSF
	JMP	REPLY
MESSF	DB	'CHAR/LINE CHANGED'
	DB	13
SPACECMND	EQU	$
SPACX	CALL	SETUP
	CALL	GPARM
	STA	SPACE
	LXI	H,MESSG
	JMP	REPLY
MESSG	DB	'SPACING CHANGED'
	DB	13
UNITCMND	EQU	$
UNITX	CALL	SETUP
	CALL	GPARM
	STA	UNIT
	LXI	H,MESS7
	JMP	REPLY
MESS7	DB	'PRINT UNIT CHANGED'
	DB	13
PAGECMND	EQU	$
PAGEX	CALL	SETUP
	CALL	GPARM
	ORA	A
	JZ	ERR2
	STA	PAGE1
	CALL	GPARM
	ORA	A
	JZ	OK1
	STA	PAGE2
	CALL	GPARM
	ORA	A
	JZ	OK1
	STA	PAGE3
OK1	LXI	H,MESS8
	JMP	REPLY
MESS8	DB	'PAGE PARMS CHANGED'
	DB	13
TITLECMND	EQU	$
TITLX	CALL	SETUP
	MVI	B,50
	LXI	D,TITLEX
TITL0	MOV	A,M
	CPI	' '
	JNZ	TITL12
	INX	H
	JMP	TITL0
TITL12	MOV	A,M
	STAX	D
	CPI	13
	JZ	TITL2
	INX	H
	INX	D
	DCR	B
	JNZ	TITL12
	LXI	H,MESSA
	JMP	REPLY
MESSA	DB	'TITLE TOO LONG'
	DB	13
TITL2	LXI	H,MESS9
	JMP	REPLY
MESS9	DB	'TITLE ACCEPTED'
	DB	13
FINDCMND	CALL	CRLF
	CALL	SETUP
	XRA	A
	STA	CNTR
FIND1	MVI	A,13
	CMP	M
	JZ	ERR1
	MVI	A,' '
	CMP	M
	JNZ	FIND2
	INX	H
	JMP	FIND1
FIND2	SHLD	ADDR1
	LHLD	BOFP
	INX	H
FINDX	SHLD	ADDR2
	INX	H
	INX	H
	INX	H
	INX	H
	SHLD	ADDR3
	XCHG
	LHLD	ADDR1
	XCHG
FIND3	LDAX	D
	CPI	13
	JZ	FOUND
	CMP	M
	JNZ	NOTFD
	INX	H
	INX	D
	JMP	FIND3
NOTFD	LHLD	ADDR1
	XCHG
	LHLD	ADDR3
	INX	H
	SHLD	ADDR3
	MVI	A,13
	CMP	M
	JNZ	FIND3
EOFLN2	INX	H
	MVI	A,1
	CMP	M
	JZ	FINI
	CALL	CONTC
	JZ	EOR
	INX	H
	JMP	FINDX
FOUND	LHLD	ADDR2
	LDA	CNTR
	INR	A
	STA	CNTR
FIND5	MOV	A,M
	CPI	13
	JZ	FIND4
	MOV	B,A
	CALL	OUT8A
	INX	H
	JMP	FIND5
FIND4	CALL	OUTCR
	JMP	EOFLN2
FINI	LDA	CNTR
	ORA	A
	JNZ	EOR
	LXI	H,MESSC
	JMP	REPLY
MESSC	DB	'CHAR NOT FOUND'
	DB	13
OPENCMND	CALL	RANGE
	MVI	A,1
OPEN2	STA	TEMP
	LXI	H,0100H
	SHLD	INCR
	CALL	VCHK
	LXI	H,LINE1
	LXI	D,ABUF+4
	CALL	PACK
	LHLD	LINE1
	SHLD	TBUF
	LXI	H,INCR
	LDAX	D
	CPI	0
	CNZ	PACK
	LHLD	LINE1
	SHLD	TEMP2
	CALL	FIND
OPEN3	CALL	RNUMB
	MVI	C,4
OPEN4	INX	H
	DCR	C
	JNZ	OPEN4
OPEN5	INX	H
	MVI	A,0DH
	CMP	M
	JNZ	OPEN5
	INX	H
	MVI	A,1
	CMP	M
	JNZ	OPEN3
	LDA	TEMP
	ORA	A
	JZ	CFREE
	XRA	A
	JMP	OPEN2
CFREE	CALL	FREE
	JMP	EOR
RENUMBER	EQU	$
RENUM	MVI	A,1
RECAL	STA	TEMP
	LXI	H,0500H
	SHLD	INCR
	CALL	VCHK
	LXI	H,LINE1
	LXI	D,ABUF
	CALL	PACK
	LXI	H,INCR
	LDAX	D
	CPI	0
	CNZ	PACK
	LHLD	LINE1
	SHLD	TEMP2
	LHLD	BOFP
NXLIN	CALL	RNUMB
	MVI	C,4
NUM1	INX	H
	DCR	C
	JNZ	NUM1
ALPHA	INX	H
	MVI	A,0DH
	CMP	M
	JNZ	ALPHA
	INX	H
	MVI	A,1
	CMP	M
	JNZ	NXLIN
	LDA	TEMP
	ORA	A
	JZ	CFREE
	XRA	A
	JMP	RECAL
RNUMB	PUSH	B
	PUSH	D
	PUSH	H
	MVI	C,2
	LXI	H,NUMBR
	LXI	D,LINE1
CVRT	LDAX	D
	RRC
	RRC
	RRC
	RRC
	CALL	NGEN
	LDAX	D
	CALL	NGEN
	INX	D
	DCR	C
	JNZ	CVRT
	LDA	TEMP
	ORA	A
	JNZ	NOMOV
	POP	H
	PUSH	H
	MVI	C,4
	LXI	D,NUMBR-1
CVRT1	INX	D
	INX	H
	LDAX	D
	MOV	M,A
	DCR	C
	JNZ	CVRT1
	LXI	H,MAXL
	MVI	C,4
	LXI	D,NUMBR
CVRT2	LDAX	D
	MOV	M,A
	INX	D
	INX	H
	DCR	C
	JNZ	CVRT2
NOMOV	LXI	D,LINE1+1
	LXI	H,INCR+1
	XRA	A
	LDAX	D
	ADC	M
	DAA
	STAX	D
	DCX	D
	DCX	H
	LDAX	D
	ADC	M
	DAA
	STAX	D
	LDA	TEMP2
	MOV	B,A
	LDA	LINE1
	CMP	B
	JC	TOBIG
	LHLD	LINE1
	SHLD	TEMP2
	POP	H
	POP	D
	POP	B
	RET
TOBIG	LXI	H,ERRM7
	JMP	REPLY
ERRM7	DB	'RENUMBER VALUES TOO BIG'
	DB	13
NGEN	ANI	0FH
	ADI	'0'
	MOV	M,A
	INX	H
	RET
TABSCMND	EQU	$
SETAB	LXI	H,TABT
	MVI	B,10
	XRA	A
TAB64	MOV	M,A
	INX	H
	DCR	B
	JNZ	TAB64
	CALL	SETUP
TAB1	LXI	D,TABT
	MVI	B,10
TAB54	EQU	$
	CALL	GPARM
	STAX	D
	INX	D
	DCR	B
	JZ	TAB44
	MOV	A,M
	CPI	13
	JNZ	TAB54
TAB44	LXI	H,ERRM8
	JMP	REPLY
ERRM8	DB	'TABS SET'
	DB	13
PRINT	CALL	CRLF
	LHLD	BOFP
	MOV	A,M
	CPI	1
	JZ	STPIT
	MVI	A,1
	STA	LOMRG
	LDA	LINES
	STA	HIMRG
	STA	CCNT
	CALL	STADD
	LHLD	CALLD
	SHLD	CALLX+1
PRNT1	CALL	FIND
	XRA	A
	STA	JUSTY
	STA	ULFLG
	STA	HALT
	INX	H
	INX	H
	INX	H
	INX	H
	INX	H
	MVI	A,13
	STA	HL
	CALL	CMNDS
	LDA	PNO
	STA	TEMP+1
PRUN	XRA	A
	MOV	C,A
	STA	CNTR
	STA	TEMP
	LDA	TEMP+1
	INR	A
	STA	TEMP+1
	JZ	SKIP1
	CPI	250
	JC	MOVE1
	DCR	A
	STA	TEMP+1
MOVE1	CALL	MOVIT
	LDA	TITLEX
	ORA	A
	JZ	PPG1
	LXI	D,TITLEX
	CALL	PRNTR
	LDA	TEMP+1
	ORA	A
	JZ	NOTTL
	LDA	TEMP+1
	CPI	250
	JNC	NOTTL
PPG1	LDA	LINES
	SBI	8
	CMP	C
	JC	PPG2
	JZ	PPG2
	MVI	B,' '
	CALL	OUT8A
	INR	C
	JMP	PPG1
PPG2	LDA	TEMP+1
	CPI	250
	JNC	NOTTL
	PUSH	H
	LXI	H,PN2
	CALL	BIND
	POP	H
	LXI	D,PN2
	LDAX	D
	CPI	'0'
	JNZ	PPG3
	INX	D
	LDAX	D
	CPI	'0'
	JNZ	PPG3
	INX	D
PPG3	CALL	PRNTR
	JMP	NOTTL
	DB	0CDH
SKIP1	INR	A
	STA	TEMP+1
NOTTL	CALL	PCRLF
	LDA	CNTR
	INR	A
	STA	CNTR
	MOV	B,A
	LDA	PAGE3
	CMP	B
	JZ	PBODY
	JC	PBODY
	JMP	NOTTL
PBODY	CALL	FORMT
	DCX	H
	MOV	A,M
	INX	H
	CPI	'\'
	JZ	EJECT
	LDA	CALLC
	ORA	A
	JZ	PB1
	MOV	B,A
	MVI	C,133
	LXI	D,TBUF
CALL1	LDAX	D
	CMP	B
	JZ	CALL2
	CPI	13
	JZ	PB1
	INX	D
	DCR	C
	JZ	PB1
	JMP	CALL1
	DB	0CDH
CALL2	PUSH	H
	LXI	H,TBUF
	LXI	D,TBUF
CALLX	CALL	CALLT
	POP	H
	JMP	CALL4
PB1	LXI	D,TBUF
CALL4	CALL	MOVIT
	CALL	PRNTR
PB2	CALL	PCRLF
	LDA	CNTR
	INR	A
	STA	CNTR
	LDA	TEMP
	INR	A
	STA	TEMP
	MOV	B,A
	LDA	PAGE2
	CMP	B
	JZ	FULL
	LDA	CNTR
	MOV	B,A
	LDA	PAGE1
	CMP	B
	JZ	FULL
	LDA	SPACE
	ORA	A
	JZ	NOTFL
	MOV	C,A
BLKLN	DCR	C
	JZ	NOTFL
	CALL	PCRLF
	LDA	CNTR
	INR	A
	STA	CNTR
	LDA	TEMP
	INR	A
	STA	TEMP
	MOV	B,A
	LDA	PAGE2
	CMP	B
	JZ	FULL
	LDA	CNTR
	MOV	B,A
	LDA	PAGE1
	CMP	B
	JZ	FULL
	JMP	BLKLN
NOTFL	CALL	CONTC
	JZ	RTRN
	MVI	A,1
	CMP	M
	JZ	FULL
	JMP	PBODY
EJECT	MOV	A,M
	CPI	13
	JZ	FULL
TRY	CPI	'0'
	JC	BAD
	CPI	'9'+1
	JC	GOOD
BAD	CPI	13
	JZ	FULL
	INX	H
	MOV	A,M
	JMP	TRY
GOOD	CALL	NUMB
GOOD1	MOV	A,M
	CPI	13
	JZ	GOOD2
	INX	H
	JMP	GOOD1
GOOD2	INX	H
	INX	H
	INX	H
	INX	H
	INX	H
	INX	H
	MVI	A,3
	STA	HL
	CALL	CMNDS
	LDA	TEMP
	ADD	B
	MOV	B,A
	LDA	PAGE2
	CMP	B
	JNC	PBODY
	JZ	PBODY
FULL	LDA	CNTR
	MOV	B,A
	LDA	PAGE1
	CMP	B
	JZ	CKEOF
	CALL	PCRLF
	LDA	CNTR
	INR	A
	STA	CNTR
	JMP	FULL
	DB	0C3H
CKEOF	MVI	A,1
	CMP	M
	JNZ	HALT1
	LDA	INSRT
	ORA	A
	CNZ	FLUSH
	LDA	RPEAT
	ORA	A
	JZ	RTRN
	CPI	1
	JZ	RTRN
	DCR	A
	STA	RPEAT
	CALL	PAUSE
	JMP	PRNT1
RTRN	XRA	A
	STA	SPACE
	CALL	EOFBA
STPIT	XRA	A
	STA	UNIT
	JMP	EOR
HALT1	CALL	PAUSE
	JMP	PRUN
PCRLF	CALL	CONTC
	JZ	RTRN
	MVI	B,13
	CALL	OUT8A
	MVI	B,10
	CALL	OUT8A
	PUSH	D
	LDA	UNIT
	ORA	A
	JNZ	NOSTP
	LDA	SRCNT
	ORA	A
	JZ	NOSTP
	LDA	HALT
	INR	A
	STA	HALT
	MOV	D,A
	LDA	SRCNT
	CMP	D
	JC	PT3
	JNZ	NOSTP
PT3	LXI	D,M1
PT1	LDAX	D
	CPI	13
	JZ	PT2
	MOV	B,A
	CALL	OUT8A
	INX	D
	JMP	PT1
PT2	CALL	IN8
	CPI	03
	JZ	STPIT
	CPI	13
	JNZ	PT2
	XRA	A
	STA	HALT
	MVI	B,13
	CALL	OUT8A
	MVI	B,10
	CALL	OUT8A
NOSTP	LDA	NULLC
	ORA	A
	JZ	PCRL2
	MOV	E,A
PCRL1	MVI	B,0
	CALL	OUT8A
	DCR	E
	JNZ	PCRL1
PCRL2	POP	D
	RET
M1	DB	'PRESS RETURN TO CONTINUE'
	DB	13
FORMT	XRA	A
	STA	NCHR
	STA	SAVE
	STA	TBCNT
FORM1	XCHG
	LXI	H,TABT
	SHLD	TABAD
	LHLD	TADD
	XCHG
FORM2	MOV	A,M
	INX	H
	CPI	'>'
	JZ	MARG
	CPI	'['	;VT
	JZ	JON
	CPI	']'	;SHIFT M
	JZ	JOFF
	CPI	'<'
	JZ	CON
	CPI	'^'
	JZ	INSR1
	CPI	13
	JZ	NEWLN
	CPI	'\'
	JZ	EOFPT
	CPI	09
	JZ	TABEX
	CPI	7EH	;TILDE-PAUSE
	JZ	YOUIN
	CPI	'.'
	JZ	EOFS
	CPI	'&'
	JNZ	FORM3
	CALL	SETUL
	DCX	D
	LDAX	D
	CPI	' '
	JNZ	FL1
	MOV	A,M
	CPI	' '
	JNZ	FL1
	JMP	FORM4
FL1	INX	D
	JMP	FORM2
FORM4	INX	D
	MVI	A,'&'
FORM3	STAX	D
	LDA	ULFLG
	ORA	A
	JZ	FORM5
	LDAX	D
	CPI	' '
	JZ	FORM5
	ORI	80H
	STAX	D
FORM5	INX	D
	LDA	NCHR
	INR	A
	STA	NCHR
	MOV	B,A
	CALL	SAVER
	LDA	JUSTY
	ORA	A
	JZ	FORM2
	LDA	CCNT
	CMP	B
	JZ	FILLN
	JMP	FORM2
EOFS	MOV	A,M
	CPI	13
	JNZ	NEOFS
	MVI	A,'.'
	STAX	D
	INX	D
	LDA	NCHR
	INR	A
	STA	NCHR
	MOV	B,A
	LDA	JUSTY
	ORA	A
	JZ	EOFS1
	LDA	CCNT
	CMP	B
	JZ	FILLN
EOFS1	MVI	A,' '
	JMP	FORM3
NEOFS	MVI	A,'.'
	JMP	FORM3
SETUL	MOV	A,M
	CPI	13
	JZ	OFFUL
	CPI	' '
	JNZ	ONUL
OFFUL	XRA	A
	JMP	STAUL
ONUL	MVI	A,1
STAUL	STA	ULFLG
	RET
MARG	MOV	A,M
	CPI	13
	JNZ	SETMG
	MVI	A,1
	STA	LOMRG
	LDA	LINES
	STA	HIMRG
	STA	CCNT
	CALL	STADD
	INX	H
	JMP	NXTLN
	DB	3AH
;SET	MARGINS
SETMG	EQU	$
	CALL	NUMB
	MOV	A,B
	ORA	A
	JZ	MAR1
	STA	LOMRG
	LDA	LINES
	CMP	B
	JC	ERRMG
	MOV	A,M
	CPI	13
	JZ	MAR2
	INX	H
	JMP	MAR3
MAR1	INX	H
	MVI	A,1
	STA	LOMRG
	JMP	MAR3
MAR2	LDA	LINES
	JMP	MAR5
MAR6	LDA	LINES
	JMP	MAR5
MAR3	CALL	NUMB
MAR4	MOV	A,B
	ORA	A
	JZ	MAR6
MAR5	STA	HIMRG
	LDA	LOMRG
	MOV	B,A
	LDA	HIMRG
	SUB	B
	JC	ERRMG
	INR	A
	STA	CCNT
	LXI	D,TBUF
	MVI	B,133
	MVI	A,' '
CLR	STAX	D
	INX	D
	DCR	B
	JNZ	CLR
	CALL	STADD
	INX	H
NXTLN	MOV	A,M
	CPI	1
	JZ	EOF
	INX	H
	INX	H
	INX	H
	INX	H
	INX	H
	MVI	A,3
	STA	HL
	CALL	CMNDS
	JMP	FORM2
ERRMG	LXI	H,ERRM4
	JMP	REPLY
ERRM4	DB	'MARGIN	ERROR'
	DB	13
PATCH	DB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
NUMB	XRA	A
	MOV	B,A
NUMB2	MOV	A,M
	CPI	13
	RZ
	CPI	','
	RZ
	CPI	' '
	RZ
	CPI	'0'
	JC	ERR3
	CPI	'9'+1
	JNC	ERR3
	ANI	0FH
	MOV	C,A
	MOV	A,B
	RLC
	RLC
	RLC
	ADD	B
	ADD	B
	ADD	C
	MOV	B,A
	INX	H
	JMP	NUMB2
STADD		EQU	$
	LXI	D,TBUF
	LDA	LOMRG
	DCR	A
	ADD	E
	MOV	E,A
	JNC	STAD1
	MOV	A,D
	INR	A
	MOV	D,A
STAD1	XCHG
	SHLD	TADD
	XCHG
	RET
	DB	0CDH
;TAB	EXPANSION
TABEX	PUSH	H
	LHLD	TABAD
TABX1	MOV	A,M
	ORA	A
	JZ	TAB99
	LDA	TBCNT
	CPI	10
	JZ	TAB99
	INR	A
	STA	TBCNT
TABX3	LDA	NCHR
	MOV	B,A
	LDA	LOMRG
	ADD	B
	MOV	C,A	;TRUE POSITION
	MOV	A,M	;TAB POSITION
	CMP	C
	JZ	TAB98
	JNC	TABX2
	INX	H
	JMP	TABX1
TABX2	MVI	A,' '
	STAX	D
	INX	D
	LDA	NCHR
	INR	A
	STA	NCHR
	MOV	B,A
	LDA	CCNT
	CMP	B
	JZ	TAB98
	JC	TAB98
	JMP	TABX3
	DB	0CAH
TAB98	INX	H
TAB99	SHLD	TABAD
	POP	H
	JMP	FORM2
INSR1	LDA	INSRT
	ORA	A
	JNZ	INSR2
	MVI	A,'^'
	JMP	FORM3
INSR2	CALL	MOVBA
	JMP	FORM2
	DB	3AH
;	LINE	FILL
SAVER	MOV	A,M
	CPI	' '
	RNZ
	SHLD	ADDR1
	XCHG
	SHLD	ADDR2
	XCHG
	LDA	NCHR
	STA	ADDR4
	RET
FILLN	EQU	$
	MVI	A,13
	STAX	D
FILL2	LHLD	ADDR2
	XCHG
	LDA	ADDR4
	STA	NCHR
BKUP	DCX	D
	LDA	NCHR
	DCR	A
	STA	NCHR
	LDAX	D
	CPI	' '
	JZ	BKUP
NOBU	LDA	JUSTY
	ORA	A
	CNZ	JSTFY
	LHLD	ADDR1
BLKCK	MOV	A,M
	INX	H
	CPI	' '
	JZ	BLKCK
	INX	D
	DCX	H
	JMP	EOFPT
;JUSTIFICATION	ROUTINE
JSTFY	LDA	SAVE
	ORA	A
	RNZ
	LDA	JSW
	ORA	A
	RZ
	PUSH	H
	PUSH	B
	LDA	NCHR
	INR	A
	STA	NCHR
	MOV	B,A
	LDA	CCNT
	CMP	B
	JZ	JEND
	JC	JEND
	MVI	A,13
	INX	D
	STAX	D
	XCHG
	LHLD	TADD
	XCHG
INDT1	LDAX	D
	CPI	' '
	JNZ	BLTWO
	INX	D
	JMP	INDT1
;ADD	1	BLANK	WHERE 2 OR MORE OCCUR
BLTWO	LDAX	D
	CPI	13
	JZ	ODD
	CPI	' '
	JNZ	ONLY1
	INX	D
	LDAX	D
	CPI	13
	JZ	ODD
	CPI	' '
	JNZ	ONLY1
	CALL	BLINS
	LDA	NCHR
	MOV	C,A
	LDA	CCNT
	CMP	C
	JZ	JEND
	JC	JEND
ONLY1	INX	D
	JMP	BLTWO
	DB	0CDH
;EXTRA	BLANK	EVERY	OTHER ONE
ODD	XCHG
	LHLD	TADD
	XCHG
	XRA	A
	STA	INSP
ODD2	LDAX	D
	CPI	' '
	JNZ	ODD3
	INX	D
	JMP	ODD2
ODD3	LDAX	D
	CPI	13
	JZ	REBLK
	CPI	' '
	JNZ	ODD4
	LDA	INSP
	ORA	A
	JZ	ODD5
	XRA	A
	STA	INSP
	CALL	BLINS
	LDA	NCHR
	MOV	C,A
	LDA	CCNT
	CMP	C
	JZ	JEND
	JC	JEND
ODD4	INX	D
	JMP	ODD3
ODD5	MVI	A,1
	STA	INSP
	JMP	ODD4
	DB	0CAH
;ADD	BLANK	TO	EVEN SPACES
REBLK	XCHG
	LHLD	TADD
	XCHG
INDT2	LDAX	D
	CPI	' '
	JNZ	BLONE
	INX	D
	JMP	INDT2
BLONE	LDAX	D
	CPI	13
	JZ	REBLK
	CPI	' '
	JNZ	NOBLK
	CALL	BLINS
	LDA	NCHR
	MOV	C,A
	LDA	CCNT
	CMP	C
	JZ	JEND
	JC	JEND
NOBLK	INX	D
	JMP	BLONE
JEND	POP	B
	POP	H
	XCHG
	LHLD	TADD
	XCHG
JEND2	LDAX	D
	CPI	13
	RZ
	INX	D
	JMP	JEND2
;	BLANK	INSERT
BLINS	PUSH	H
	PUSH	B
	LXI	B,TBUF+130
	LXI	H,TBUF+131
BLIN1	LDAX	B
	MOV	M,A
	MOV	A,D
	CMP	B
	JNZ	BLIN3
	MOV	A,E
	CMP	C
	JZ	BLIN2
BLIN3	DCX	B
	DCX	H
	JMP	BLIN1
BLIN2	MVI	A,' '
	STAX	D
	LDA	NCHR
	INR	A
	STA	NCHR
BLIN4	INX	D
	LDAX	D
	CPI	' '
	JZ	BLIN4
	POP	B
	POP	H
	RET
YOUIN	CALL	IN8
	CPI	03
	JZ	STPIT
X5F3	CPI	08
	JZ	BACKYOU
	CPI	13
	JZ	FORM2
	MOV	B,A
	STAX	D
	INX	D
	LDA	UNIT
	ORA	A
	JZ	SKIP2
	CALL	OUT8
SKIP2	LDA	NCHR
	INR	A
	STA	NCHR
	MOV	B,A
	LDA	CCNT
	CMP	B
	JZ	FORM2
	JC	FORM2
	JMP	YOUIN
BACKYOU LDA	NCHR
	ORA	A
	JZ	YOUIN
	DCR	A
	STA	NCHR
	DCX	D
	LDA	X5F3+1
	MOV	B,A
	LDA	UNIT
	ORA	A
	JZ	YOUIN
	CALL	OUT8
	JMP	YOUIN
JON	MVI	C,1
	JMP	JOFF+1
JOFF	XRA	A
	STA	JUSTY
	JMP	FORM2
NEWLN	MOV	A,M
	CPI	1
	JZ	EOFPT
	INX	H
	INX	H
	INX	H
	INX	H
	INX	H
	LDA	JUSTY
	ORA	A
	JZ	EOFPT
	SHLD	ADDR1
	XCHG
	SHLD	ADDR2
	XCHG
	LDA	NCHR
	STA	ADDR4
	MVI	A,' '
	JMP	FORM3
EOFPT	MVI	A,13
	STAX	D
	MVI	A,3
	STA	HL
	CALL	CMNDS
	RET
PRNTR	PUSH	D
	PUSH	H
	XCHG
	SHLD	HL
	XRA	A
	MOV	C,A
	MOV	D,A
	LDA	BSCR
	CPI	'B'
	JZ	PRNT7
PRNT0	MOV	A,M
	CPI	13
	JZ	PRNT4
	ANI	80H
	JZ	PRNT2
	INR	D
	MOV	A,M
	ANI	7FH
	JMP	PRNT3
PRNT2	MOV	A,M
PRNT3	MOV	B,A
	CALL	OUT8A
	INR	C
	INX	H
	JMP	PRNT0
PRNT4	MOV	A,D
	ORA	A
	JZ	PRNT9
	MVI	B,0DH
	CALL	OUT8A
	PUSH	B
	CALL	MOVIT
	POP	B
	LHLD	HL
PRNT5	MOV	A,M
	CPI	13
	JZ	PRNT9
	ANI	80H
	JZ	PRNT6
	MVI	B,'_'
	CALL	OUT8A
	INX	H
	DCR	D
	JZ	PRNT9
	JMP	PRNT5
PRNT6	MVI	B,' '
	CALL	OUT8A
	INX	H
	JMP	PRNT5
PRNT7	MOV	A,M
	CPI	13
	JZ	PRNT9
	ANI	80H
	JNZ	PRNT8
	MOV	A,M
	MOV	B,A
PRNTA	CALL	OUT8A
	INR	C
	INX	H
	JMP	PRNT7
PRNT8	MOV	A,M
	ANI	7FH
	MOV	B,A
	CALL	OUT8A
	MVI	B,08
	CALL	OUT8A
	MVI	B,5FH
	JMP	PRNTA
PRNT9	POP	H
	POP	D
	RET
CKJ	INX	H
	MVI	A,1
	STA	SAVE
	CALL	FORM1
	JMP	PB1
;CENTER	TITLE
	DB	0CDH
CON	PUSH	B
	XRA	A
	MOV	C,A
	LXI	D,TBUF
CPY4	MOV	A,M
	INX	H
	CPI	'&'
	JNZ	CEN2
	CALL	SETUL
	DCX	D
	LDAX	D
	CPI	' '
	JNZ	CEN4
	MOV	A,M
	CPI	' '
	JNZ	CEN4
	JMP	CEN1
CEN4	INX	D
	JMP	CPY4
CEN1	INX	D
	MVI	A,'&'
CEN2	CPI	13
	JZ	CENT
	STAX	D
	LDA	ULFLG
	ORA	A
	JZ	CEN3
	LDAX	D
	CPI	' '
	JZ	CEN3
	ORI	80H
	STAX	D
CEN3	INX	D
	INR	C
	MOV	B,C
	LDA	LINES
	CMP	B
	JNC	CPY4
	JZ	DON2
	POP	B
	LXI	H,ERRM3
	JMP	REPLY
ERRM3	DB	'LINE TOO SMALL TO CENTER'
	DB	13
	DB	03AH
CENT	MVI	A,13
	STAX	D
	XCHG
	SHLD	ADDR1
	XCHG
	INR	C
	MOV	A,C
	STA	NCHR
	MOV	B,A
	LDA	LINES
	SUB	B
	RRC
	ANI	07FH
	INR	A
	MOV	B,A
	PUSH	H
LOOP4	LHLD	ADDR1
	XCHG
	LHLD	ADDR1
	INX	H
	SHLD	ADDR1
	LDA	NCHR
	MOV	C,A
LOOP3	LDAX	D
	MOV	M,A
	MVI	A,' '
	STAX	D
	DCX	H
	DCX	D
	DCR	C
	JNZ	LOOP3
	DCR	B
	JNZ	LOOP4
	LHLD	ADDR1
	XCHG
	POP	H
DON2	POP	B
	JMP	NEWLN
;PAGE	NO	TO	DBII
BIND	MVI	B,100
	CALL	BID1
	MVI	B,10
	CALL	BID1
	ADI	'0'
	MOV	M,A
	RET
BID1	MVI	M,'0'-1
	INR	M
	SUB	B
	JNC	BID1+2
	ADD	B
	INX	H
	RET
PN2	DB	'000'
	DB	13
PAUSE	LDA	STOP
	ORA	A
	RZ
PAZ	CALL	IN8
	CPI	13
	JNZ	PAZ
	RET
MOVIT	LDA	OFFST
	ORA	A
	RZ
	MOV	C,A
	MVI	B,' '
SHIFT5	CALL	OUT8A
	DCR	C
	JNZ	SHIFT5
	RET
CMNDS	PUSH	D
CMND2	MOV	A,M
	CPI	'#'
	JNZ	RETRN
	SHLD	ADDR1
COMM	LXI	D,IBUF
	INX	H
UPPER4	MOV	A,M
	STAX	D
	INX	D
	INX	H
	CPI	13
	JZ	SCAN
	JMP	UPPER4
SCAN	SHLD	DE
	MVI	B,4
	LXI	D,IBUF
SCAN2	LDAX	D
	CPI	60H
	JC	SCAN3
	SBI	20H
	STAX	D
SCAN3	INX	D
	DCR	B
	JNZ	SCAN2
	LXI	D,CTAB2
	LDA	HL
	MOV	B,A
	MVI	A,4
	STA	NCHR
	CALL	COMS
	JNZ	ERR1
	PCHL
NOGO	LHLD	ADDR1
RETRN	POP	D
	RET
CTAB2	DB	'SPAC'
	DW	SPAC2
	DB	'COMM'
	DW	COMNT
	DB	'CHAI'
	DW	CHAIN
	DB	'NULL'
	DW	NULL1
	DB	'TITL'
	DW	TITL1
	DB	'LINE'
	DW	LINE2
	DB	'UNIT'
	DW	UNIT2
	DB	'PAGE'
	DW	PAGEZ
	DB	'JUST'
	DW	JUSTZ
	DB	'TABS'
	DW	TABSZ
	DB	'OFFS'
	DW	OFF2
	DB	'PNUM'
	DW	PNUM2
	DB	'MARG'
	DW	MARG1
SETUP	LXI	H,IBUF
SET1	INX	H
	MOV	A,M
	CPI	' '
	JZ	SET2
	CPI	13
	RZ
	JMP	SET1
SET2	INX	H
	MOV	A,M
	CPI	13
	RZ
	CPI	' '
	JZ	SET2
	RET
MARG1	CALL	SETUP
	CALL	NUMB
	MOV	A,B
	ORA	A
	JZ	ERR2
	DCR	A
	STA	OFFST
	INX	H
	CALL	NUMB
	MOV	A,B
	ORA	A
	JZ	ERR2
	MOV	C,A
	LDA	OFFST
	MOV	B,A
	MOV	A,C
	SUB	B
	JC	ERR2
	STA	LINES
	STA	HIMRG
	STA	CCNT
	JMP	SKIP3
COMNT	CALL	SETUP
	JMP	SKIP3
NULL1	CALL	SETUP
	CALL	NUMB
	MOV	A,B
	STA	NULLC
	JMP	SKIP3
LINE2	CALL	SETUP
	CALL	NUMB
	MOV	A,B
	STA	LINES
	STA	HIMRG
	STA	CCNT
	JMP	SKIP3
SPAC2	CALL	SETUP
	CALL	NUMB
	MOV	A,B
	STA	SPACE
	JMP	SKIP3
UNIT2	CALL	SETUP
	CALL	NUMB
	MOV	A,B
	STA	UNIT
	JMP	SKIP3
OFF2	CALL	SETUP
	CALL	NUMB
	MOV	A,B
	STA	OFFST
	JMP	SKIP3
PNUM2	CALL	SETUP
	CALL	NUMB
	MOV	A,B
	DCR	A
	STA	PNO
	JMP	SKIP3
JUSTZ	CALL	SETUP
	CALL	ONOFF
	MOV	A,B
	STA	JSW
	JMP	SKIP3
PAGEZ	CALL	SETUP
	CALL	NUMB
	MOV	A,B
	STA	PAGE1
	MOV	A,M
	CPI	13
	JZ	SKIP3
	INX	H
	CALL	NUMB
	MOV	A,B
	STA	PAGE2
	MOV	A,M
	CPI	13
	JZ	SKIP3
	INX	H
	CALL	NUMB
	MOV	A,B
	STA	PAGE3
	JMP	SKIP3
TITL1	CALL	SETUP
	LXI	D,TITLEX
	MVI	B,50
TITL3	MOV	A,M
	STAX	D
	CPI	13
	JZ	SKIP3
	INX	H
	INX	D
	DCR	B
	JNZ	TITL3
	LXI	H,MSG1X4
	JMP	REPLY
MSG1X4	DB	'TITLE TOO LONG'
	DB	13
CHAIN	CALL	LOADR
	LHLD	BOFP
	LXI	SP,AREA+50
	INX	H
	INX	H
	INX	H
	INX	H
	INX	H
	LDA	TEMP+1
	STA	PNO
	MVI	A,13
	STA	HL
	CALL	CMNDS
	LDA	PNO
	STA	TEMP+1
	JMP	PB1
TABSZ	CALL	SETUP
	LXI	D,TABT
	MVI	B,10
	XRA	A
TAB6	STAX	D
	INX	D
	DCR	B
	JNZ	TAB6
	LXI	D,TABT
	MVI	B,10
TAB5	PUSH	B
	CALL	NUMB
	MOV	A,B
	STAX	D
	INX	D
	POP	B
	DCR	B
	JZ	SKIP3
	MOV	A,M
	CPI	13
	JZ	SKIP3
	INX	H
	JMP	TAB5
	DB	0CDH
ONOFF	XRA	A
	MOV	B,A
	MOV	A,M
	CPI	13
	RZ
	CPI	'O'
	JZ	ON2
	CPI	6FH
	RNZ
ON2	INX	H
	MOV	A,M
	CPI	'N'
	JZ	ON3
	CPI	6EH
	RNZ
	MOV	A,M
	CPI	1
	JZ	EOFPT
ON3	MVI	B,1
	RET
SKIP3	LHLD	DE
	INX	H
	MOV	A,M
	CPI	1
	JZ	EOF
	INX	H
	INX	H
	INX	H
	INX	H
	JMP	CMND2
RAM	EQU	$
AREA	DS	55
BOFP	DS	2
EOFP	DS	2
TOP	DS	2
MPTY	DS	2
MAXL	DS	4
INSP	DS	2
HCON	DS	2
FBUF	DS	5
NULLC	DS	1
SPACE	DS	1
LINES	DS	1
PAGE1	DS	1
PAGE2	DS	1
PAGE3	DS	1
FILE	DS	9
DISK	DS	1
LINEA	DS	2
SAVE	DS	1
NUMBR	DS	4
INCR	DS	2
RDWRT	EQU	INCR
CNTR	DS	1
RPEAT	DS	1
BLKS	DS	1
BLOCK	DS	1
UNIT	DS	1
AUTO	DS	1
JUSTY	DS	1
JSW	DS	1
INSRT	DS	1
CALLC	DS	1
CALLD	DS	2
ABUF	DS	12
BBUF	DS	4
NCHR	DS	1
PNTR	DS	2
LINE1	DS	2
TEMP	DS	2
ADDR1	DS	2
ADDR2	DS	2
ADDR3	DS	2
ADDR4	DS	2
TEMP2	DS	2
TEMP3	DS	2
ULFLG	DS	1
FTYPE	DS	1
TABAD	DS	2
TBCNT	DS	1
TADD	DS	2
TABT	DS	10
TITLEX	DS	50
HALT	DS	1
HIMRG	DS	1
LOMRG	DS	1
OFFST	DS	1
PNO	DS	1
DSKAD	DS	2
BUFAD	DS	2
BUFCT	DS	2
RECCT	DS	1
CUSED	DS	1
INHIB	DS	1
HL	DS	2
DE	DS	2
RECAD	EQU	DE
DBFLG	DS	1
LAST	DS	1
IBUF1	DS	1
IBUF	DS	140
TBUF	DS	140
DATA	EQU	$
PART5	EQU	$
BLOADCMND	CALL	GETBF
	MVI	A,1
	STA	RDWRT	;READ OPERATION
	CALL	GETFL
	LHLD	BOFP
	SHLD	EOFP
	MVI	M,1
	LXI	H,0000
	SHLD	MAXL
	SHLD	MAXL+2
	LXI	H,IBUF
	SHLD	RECAD
	CALL	GETBACHR
STRT1	CALL	GCHAR	 ;SKIP CNT
	CPI	01
	JZ	DONE5
	CALL	GCHAR	 ;GET LINE NO
	MOV	C,A
	CALL	GCHAR
	MOV	B,A
	CALL	DBII	;LINE NO TO DBII
LOAD1	CALL	GCHAR
	CPI	13
	JZ	EOFLN5
	CPI	09AH
	JZ	LNNO
	CPI	80
	JNC	DECOD
	LHLD	RECAD
	MOV	M,A
	INX	H
	SHLD	RECAD
	JMP	LOAD1
LNNO	CALL	GCHAR
	MOV	C,A
	CALL	GCHAR
	MOV	B,A
	CALL	DBII
	JMP	LOAD1
DONE5	LHLD	TOP
	INR	H
	INR	H
	INR	L
	SHLD	TOP
	CALL	FREE
	JMP	EOR
EOFLN5	LHLD	RECAD
	MVI	A,13
	MOV	M,A
	INX	H
	MVI	A,01
	MOV	M,A
	MVI	B,2
	LXI	H,IBUF
END1	MOV	A,M
	CPI	13
	JZ	END2
	INX	H
	INR	B
	JMP	END1
END2	MOV	A,B
	STA	IBUF-1
	CALL	CONTC
	JZ	DONE5
	LDA	DBFLG
	ORA	A
	JZ	END3
	LXI	H,IBUF
	CALL	CRLF
	CALL	SCRN
END3	CALL	LINE
	LXI	H,IBUF
	SHLD	RECAD
	JMP	STRT1
GCHAR	LHLD	BUFCT
	MVI	A,2
	CMP	H
	CZ	GETBACHR
	LHLD	BUFAD
	MOV	D,H
	MOV	E,L
	INX	H
	SHLD	BUFAD
	LHLD	BUFCT
	INX	H
	SHLD	BUFCT
	LDAX	D
	RET
;CONVERT	BINARY	LINE	NO TO DBII
DBII	LXI	D,9999
	MOV	A,D
	CMP	B
	JNC	DBI2
	LXI	H,DBIM
	JMP	REPLY
DBIM	DB	'LINE NOS > 9999'
	DB	13
DBI2	XRA	A
	STA	LAST
	MOV	H,B
	MOV	L,C
	SHLD	MPTY
	LXI	H,1000
	SHLD	TEMP2
	CALL	DIVID5
	LXI	H,100
	SHLD	TEMP2
	CALL	DIVID5
	LXI	H,10
	SHLD	TEMP2
	CALL	DIVID5
	LDA	MPTY
	CALL	DBX
	RET
DIVID5	MVI	E,0
	LHLD	MPTY
	SHLD	TEMP
SB2	LXI	B,TEMP
	LXI	H,TEMP2
	XRA	A
	LDAX	B
	SBB	M
	STAX	B
	INX	B
	INX	H
	LDAX	B
	SBB	M
	STAX	B
	JC	NEG
	INR	E
	PUSH	H
	LHLD	TEMP
	SHLD	MPTY
	POP	H
	JMP	SB2
NEG	MOV	A,E
DBX	ADI	'0'
	MOV	D,A
	LDA	LAST
	ORA	A
	JNZ	ZERO
	MOV	A,D
	CPI	'0'
	RZ
	STA	LAST
ZERO	MOV	A,D
	LHLD	RECAD
	MOV	M,A
	INX	H
	SHLD	RECAD
	RET
GETBF	LDA	TOP+1
	DCR	A
	DCR	A
	MOV	B,A
	LDA	EOFP+1
	CMP	B
	RC
	LXI	H,BMSG2
	JMP	REPLY
BMSG2	DB	'NO ROOM FOR BUFFER'
	DB	13
GETFL	CALL	SETUP
	CALL	GFILE
	CALL	DIREC
	CALL	SETDN
	PUSH	H
	LHLD	TOP
	DCR	H
	DCR	H
	DCR	L
	SHLD	TOP
	POP	H
	LDA	DENTY
	CPI	'S'
	JZ	BDB4
	LDA	DBYTE
	ORA	A
	JZ	BDB4
	MVI	A,1
	JMP	BDB7
BDB4	MVI	A,2
BDB7	STA	BLOCK
	PUSH	H
	INX	H
	INX	H
	INX	H
	INX	H
	MOV	A,M
	ANI	0FH
	CPI	2
	JZ	BDB5
	LXI	H,BMSG3
	JMP	REPLY
BMSG3	DB	'NOT A BASIC PGM FILE'
	DB	13
BDB5	POP	H
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG
	DCX	H
	LDA	BLOCK
	CPI	2
	JNZ	ONE1
	DCX	H
ONE1	SHLD	DSKAD
	LHLD	TOP
	INX	H
	SHLD	BUFAD
	XCHG
	INX	H	;GET THE SIZE
	MOV	A,M	;SAVE THE LOW ORDER BYTE
	STA	SAVE	 ;SAVE THE SIZE BYTE
	RET
GETBACHR	PUSH	H
	PUSH	B
	PUSH	D
	LHLD	TOP
	INX	H
	SHLD	BUFAD
	XCHG
	LHLD	DSKAD
	INX	H
	LDA	BLOCK
	CPI	2
	JNZ	ONE
	INX	H
ONE	SHLD	DSKAD
	LDA	DISK
	MOV	C,A
	LDA	RDWRT
	MOV	B,A
	LDA	BLOCK
	CALL	DCOM
	JC	IOERR
	LXI	H,0000
	SHLD	BUFCT
	POP	D
	POP	B
	POP	H
	RET
IOERR	LXI	H,MSG1
	JMP	REPLY
MSG1	DB	'DISK I/O ERROR'
	DB	13
;REPLACE	TOKEN	WITH	DBII TEXT
DECOD	LXI	H,BTAB
	MOV	B,A
CODE1	MOV	A,M
	CPI	0FFH
	JZ	CODE6
	CPI	80H
	JNC	CODE2
CODE3	INX	H
	JMP	CODE1
CODE2	CMP	B
	JNZ	CODE3
	INX	H
	XCHG
	LHLD	RECAD
CODE4	LDAX	D
	CPI	80H
	JNC	CODE5	;ON NEXT CODE
	MOV	M,A
	INX	D
	INX	H
	JMP	CODE4
CODE6	LHLD	RECAD
	MOV	A,B
	MOV	M,A
	INX	H
CODE5	SHLD	RECAD
	JMP	LOAD1
;*************		BSAVE	 BSAVE  BSAVE  ****************
BSAVECMND	CALL	GETBF
	CALL	GETFL
	LXI	H,0000
	SHLD	BUFCT
	XRA	A
	STA	RDWRT
	STA	INHIB
	MVI	A,01
	STA	CCNT
	LHLD	BOFP
	SHLD	ADDR1
DECD1	LXI	H,IBUF
	SHLD	ADDR2
	CALL	GETCH
	CPI	01
	JZ	EOFPT5
	CALL	GETCH
	CALL	BINLN
DECD2	CALL	GETCH
	CPI	13
	JZ	ENDLN
	CPI	' '
	JZ	NONUM
	CPI	','
	JZ	NONUM
	CPI	22H
	JZ	QUOTE
	CPI	'0'
	JC	TOKEN
	CPI	'9'+1
	JNC	TOKEN
	JMP	LINEX
QUOTE	PUSH	PSW
	LDA	INHIB
	ORA	A
	JZ	QUOT2
	XRA	A
QUOT3	STA	INHIB
	POP	PSW
	JMP	LINEX
QUOT2	MVI	A,1
	JMP	QUOT3
NONUM	CALL	PUTCH
	JMP	DECD2
LINEX	MOV	B,A
	LDA	LINE1
	ORA	A
	JNZ	GENLN
	MOV	A,B
	CALL	PUTCH
	JMP	DECD2
ENDLN	CALL	PUTCH
	XRA	A
	STA	INHIB
	LDA	CCNT
	STA	IBUF-1
	LHLD	BUFAD
	SHLD	HL
	LXI	B,IBUF-1
	XCHG
	LHLD	BUFCT
ADDLN	LDAX	B
	STAX	D
	INX	B
	INX	D
	INX	H
	CALL	CKEND
	LDA	CCNT
	DCR	A
	JZ	ADDL3
	STA	CCNT
	JMP	ADDLN
ADDL3	CALL	CKEND
	SHLD	BUFCT
	XCHG
	SHLD	BUFAD
	CALL	CONTC
	JZ	EOFPT5
	LDA	DBFLG
	ORA	A
	JZ	DECD1
	XCHG
	LHLD	HL
	CALL	DUMP5
	JMP	DECD1
EOFPT5	LHLD	BUFAD
	MVI	A,01
	MOV	M,A
	CALL	PUTBA
	LHLD	TOP
	INR	H
	INR	H
	INR	D
	SHLD	TOP
	JMP	EOR
GENLN	MVI	A,9AH
	CALL	PUTCH
	CALL	BINLN
	JMP	DECD2
TOKEN	PUSH	PSW
	LDA	INHIB
	ORA	A
	JNZ	NOT2
	POP	PSW
	LXI	B,BTAB
	LHLD	ADDR1
	DCX	H
	SHLD	ADDR1
	XRA	A
	STA	LINE1
	LDAX	B
NXTN	STA	TEMP
	CPI	0FFH
	JZ	NOTOK	;NO TOKEN FOUND
	INX	B
	LHLD	ADDR1
	LDAX	B
CKNXT	CMP	M
	JNZ	SKIP
	INX	H
	INX	B
	LDAX	B
	CPI	80H
	JC	CKNXT
	LDA	TEMP
	SHLD	ADDR1
	CALL	PUTCH
	CPI	88H
	JZ	GOTO
	CPI	89H
	JZ	GOTO
	CPI	0B2H
	JZ	GOTO
	CPI	8EH
	JZ	GOTO
	CPI	9FH
	JZ	GOTO
	CPI	0B4H
	JZ	GOTO
	CPI	96H
	JZ	GOTO
	JMP	DECD2
GOTO	MVI	A,1	;SET TO EXPECT LINE NO
	STA	LINE1
	JMP	DECD2
NOT2	POP	PSW
	CALL	PUTCH
	JMP	DECD2
NOTKN	CALL	PUTCH
	CALL	GETCH	;DUMMY CALL
	JMP	DECD2
SKIP	LDAX	B
	CPI	80H
	JNC	NXTN
	INX	B
	JMP	SKIP
NOTOK	LHLD	ADDR1
	MOV	A,M
	INX	H
	JMP	NOTKN
GETCH	LHLD	ADDR1
	MOV	A,M
	INX	H
	SHLD	ADDR1
	RET
CCNT	DB	0
PUTCH	LHLD	ADDR2
	MOV	M,A
	INX	H
	SHLD	ADDR2
	LXI	H,CCNT
	INR	M
	RET
CKEND	MVI	A,2
	CMP	H
	RNZ
	CALL	PUTBA
	LHLD	BUFAD
	XCHG
	LXI	H,0000
	RET
PUTBA	LDA	SAVE	;GET REMAINING SIZE
	ORA	A
	JZ	SMALL
	DCR	A
	STA	SAVE
	LDA	BLOCK
	CPI	2
	JNZ	PUT1
	LDA	SAVE
	ORA	A
	JZ	SMALL
	DCR	A
	STA	SAVE
PUT1	CALL	GETBACHR
	RET
SMALL	LXI	H,MSG2
	JMP	REPLY
MSG2	DB	'BASIC FILE TOO SMALL'
	DB	13
BINLN	LHLD	ADDR1
	DCX	H
	SHLD	ADDR1
	LXI	H,0
ADE1	PUSH	H
	CALL	GETCH
	POP	H
	CPI	'0'
	JC	DUN
	CPI	'9'+1
	JNC	DUN
	MOV	D,H
	MOV	E,L
	DAD	H
	DAD	H
	DAD	D
	DAD	H
	SUI	48
	CPI	10
	CMC
	JC	DUN
	MOV	E,A
	MVI	D,0
	DAD	D
	JMP	ADE1
DUN	PUSH	H
	MOV	A,L
	CALL	PUTCH
	POP	H
	MOV	A,H
	CALL	PUTCH
	LHLD	ADDR1
	DCX	H
	SHLD	ADDR1
	RET
BTAB	DB	80H
	DB	'LET'
	DB	81H
	DB	'FOR'
	DB	82H
	DB	'PRINT'
	DB	83H
	DB	'NEXT'
	DB	84H
	DB	'IF'
	DB	85H
	DB	'READ'
	DB	86H
	DB	'INPUT'
	DB	87H
	DB	'DATA'
	DB	88H
	DB	'GOTO'
	DB	89H
	DB	'GOSUB'
	DB	8AH
	DB	'RETURN'
	DB	8BH
	DB	'DIM'
	DB	8CH
	DB	'STOP'
	DB	8DH
	DB	'END'
	DB	8EH
	DB	'RESTORE'
	DB	8FH
	DB	'REM'
	DB	90H
	DB	'FN'
	DB	91H
	DB	'DEF'
	DB	92H
	DB	'!'
	DB	93H
	DB	'ON'
	DB	94H
	DB	'OUT'
	DB	95H
	DB	'FILL'
	DB	96H
	DB	'EXIT'
	DB	97H
	DB	'OPEN'
	DB	98H
	DB	'CLOSE'
	DB	99H
	DB	'WRITE'
	DB	9BH
	DB	'CHAIN'
	DB	9CH
	DB	'LINE'
	DB	9DH
	DB	'DESTROY'
	DB	9EH
	DB	'CREATE'
	DB	9FH
	DB	'ERRSET'
	DB	0A0H
	DB	'RUN'
	DB	0A1H
	DB	'LIST'
	DB	0A2H
	DB	'MEMSET'
	DB	0A3H
	DB	'SCR'
	DB	0A4H
	DB	'AUTO'
	DB	0A5H
	DB	'LOAD'
	DB	0A6H
	DB	'CONT'
	DB	0A7H
	DB	'APPEND'
	DB	0A8H
	DB	'REN'
	DB	0A9H
	DB	'NSAVE'
	DB	0AAH
	DB	'SAVE'
	DB	0ABH
	DB	'BYE'
	DB	0ACH
	DB	'EDIT'
	DB	0ADH
	DB	'DEL'
	DB	0AEH
	DB	'PSIZE'
	DB	0AFH
	DB	'CAT'
	DB	0B0H
	DB	'STEP'
	DB	0B1H
	DB	'TO'
	DB	0B2H
	DB	'THEN'
	DB	0B3H
	DB	'TAB'
	DB	0B4H
	DB	'ELSE'
	DB	0B5H
	DB	'CHR$'
	DB	0B6H
	DB	'DB'
	DB	0B7H
	DB	'VAL'
	DB	0B8H
	DB	'STR$'
	DB	0B9H
	DB	'NOENDMARK'
	DB	0BAH
	DB	'INCHAR'
	DB	0BBH
	DB	'FILE'
	DB	0E0H
	DB	'('
	DB	0E0H
	DB	'['
	DB	0E2H
	DB	'*'
	DB	0E3H
	DB	'+'
	DB	0E5H
	DB	'-'
	DB	0E7H
	DB	'/'
	DB	0ECH
	DB	'AND'
	DB	0EDH
	DB	'OR'
	DB	0EFH
	DB	'>='
	DB	0F0H
	DB	'<='
	DB	0F1H
	DB	'<>'
	DB	0EFH
	DB	'>='
	DB	0F0H
	DB	'=<'
	DB	0F4H
	DB	'<'
	DB	0F5H
	DB	'='
	DB	0F6H
	DB	'>'
	DB	0F7H
	DB	'NOT'
	DB	0E1H
	DB	'^'
	DB	0C6H
	DB	'INT'
	DB	0CCH
	DB	'LEN'
	DB	0CDH
	DB	'CALL'
	DB	0CEH
	DB	'RND'
	DB	0CAH
	DB	'SGN'
	DB	0CBH
	DB	'SIN'
	DB	0C4H
	DB	'SQRT'
	DB	0D2H
	DB	'ATN'
	DB	0D8H
	DB	'FREE'
	DB	0D9H
	DB	'INP'
	DB	0DAH
	DB	'EXAM'
	DB	0DBH
	DB	'ABS'
	DB	0DCH
	DB	'COS'
	DB	0DDH
	DB	'LOG'
	DB	0DEH
	DB	'EXP'
	DB	0DFH
	DB	'TYP'
	DB	0FFH
CONFIGURE LXI	SP,AREA+50
	CALL	CRLF
	LXI	H,Q1
	CALL	SCRN
	CALL	IN8
	MOV	B,A
	CALL	OUT8
	MOV	E,B
	CALL	CRLF
	MOV	A,E
	CPI	'N'
	JZ	EOR
	CPI	'Y'
	JNZ	CONFIGURE
CNFG2	CALL	CRLF
	MVI	A,'Y'
	STA	FLG1
	LXI	H,MEMRY
MEM1	XRA	A
	MOV	M,A
	MOV	A,M
	ORA	A
	JNZ	MEM2
	INX	H
	MOV	A,H
	ORA	A
	JZ	MEM2
	JMP	MEM1
MEM2	DCX	H
	SHLD	MEMTP
	MOV	A,L	 ;SHOULD END IN FF
	INR	A
	JZ	MEM4
	CALL	MEMER
	JMP	MEM4
MEMER	SHLD	HL
	CALL	CRLF
	LXI	H,MEM3
	CALL	SCRN
	LXI	H,HL+1
	CALL	HEX
	LXI	H,HL
	CALL	HEX
	LHLD	HL
	RET
MEM3	DB	'MEMORY	ERROR AT '
	DB	13
MEM4	CALL	CRLF
CNFG3	LXI	H,Q3
	CALL	SCRN
	CALL	IN8
	MOV	B,A
	CALL	OUT8
	MOV	A,B
	STA	BSPCH
	CALL	CRLF
CNFG4	LXI	H,Q4
	CALL	SCRN
	CALL	IN8
	STA	DENTY
	MOV	B,A
	CALL	OUT8
	MOV	A,B
	CPI	'S'
	JZ	CNFGA
	CPI	'D'
	JZ	CNFGA
	CALL	CRLF
	JMP	CNFG4
CNFGA	CALL	CRLF
CNFG5	LXI	H,Q5
	CALL	SCRN
	CALL	IN8
	MOV	B,A
	CALL	OUT8
	MOV	A,B
	CPI	'N'
	JZ	CNFGB
	CPI	'Y'
	JZ	CNFGC
	CALL	CRLF
	JMP	CNFG5
CNFGB	XRA	A
	JMP	NOSTOP
CNFGC	MVI	A,1
NOSTOP	EQU	$
	STA	STOP
	CALL	CRLF
	LXI	H,Q6
	CALL	SCRN
	CALL	READ
	LXI	H,IBUF
	CALL	GPARM
	ORA	A
	JZ	$+1
	DCR	A
	STA	SRCNT
CNFG8	CALL	CRLF
	LXI	H,Q8
	CALL	SCRN
	CALL	READ
	LXI	H,IBUF
	CALL	GPARM
	CPI	139
	JNC	CNFG8
	ADI	2
	STA	LNSIZ
CNFG7	CALL	CRLF
	LXI	H,Q7
	CALL	SCRN
	CALL	IN8
	MOV	B,A
	STA	WRAP
	CALL	OUT8
	CALL	CRLF
	LDA	WRAP
	CPI	'Y'
	JZ	CNF10
	CPI	'N'
	JZ	CNF10
	JMP	CNFG7
CNF10	LXI	H,Q10
	CALL	SCRN
	CALL	IN8
	MOV	B,A
	CALL	OUT8
	MOV	A,B
	STA	BSCR
	CALL	CRLF
	LDA	BSCR
	CPI	'B'
	JZ	CNFG9
	CPI	'C'
	JZ	CNFG9
	JMP	CNF10
CNFG9	LXI	H,Q99
	CALL	SCRN
	CALL	IN8
	MOV	B,A
	CALL	OUT8
	MOV	A,B
	CPI	'N'
	JZ	SPC
	CPI	'Y'
	JZ	CNFGD
	JMP	CNFG9
CNFGD	CALL	HASH1
	MOV	A,B
	STA	HTOT
	CALL	SAVME
	JMP	PART1
SPC	CALL	CRLF
	CALL	HASH1
	MOV	A,B
	STA	HTOT
	JMP	PART1
Q1	DB	'CONFIGURE (Y/N)? '
	DB	13
Q3	DB	'TYPE CHAR USED FOR BACKSPACE'
	DB	13
Q4	DB	'SINGLE OR DOUBLE DENSITY (S/D)? '
	DB	13
Q5	DB	'STOP AT END OF EACH PAGE (Y/N)? '
	DB	13
Q6	DB	'LINES PER SCREEN OR ZERO? '
	DB	13
Q7	DB	'LINE WRAP AROUND ON INPUT (Y/N)? '
	DB	13
Q8	DB	'INPUT LINE LENGTH? '
	DB	13
Q10	DB	'UNDERLINE USING BS OR CR (B/C)? '
	DB	13
Q99	DB	'SAVE THIS VERSION OF SECRTARY (Y/N)? '
	DB	13


; STATUS COMMAND SHOWS ALL USER CHANGABLE INDICATORS
STATCMND	CALL	CRLF
	CALL	CRLF		;BLANK LINE BEFORE DISPLAY
	LXI	H,STAT1		;SCREEN SIZE
	CALL	SCRN
	LDA	SRCNT
	INR	A
	CALL	NUMBER
	LXI	H,STAT2
	CALL	SCRN
	LDA	LNSIZ
	DCR	A		;CONFIGURE ADDS 2
	DCR	A	
	CALL	NUMBER
	LXI	H,STAT3		;LINE WRAPAROUND
	CALL	SCRN
	LDA	WRAP
	CALL	ALPHABETIC
	LXI	H,STAT4		;UNDERLINE MODE
	CALL	SCRN
	LDA	BSCR
	CALL	ALPHABETIC
	CALL	CRLF
	LXI	H,STAT5		;STOP AT BOTTOM OF PAGE
	CALL	SCRN
	LDA	STOP
	ORA	A
	JZ	STATUS1
	MVI	A,'Y'
	JMP	STATUS2
STATUS1	MVI	A,'N'
STATUS2	CALL	ALPHABETIC
	LXI	H,STAT6		;DISK DENSITY
	CALL	SCRN
	LDA	DENTY
	CALL	ALPHABETIC
	LXI	H,STAT7		;NULL COUNT
	CALL	SCRN
	LDA	NULLC
	CALL	NUMBER
	LXI	H,STAT19	;OFFSET
	CALL	SCRN
	LDA	OFFST
	CALL	NUMBER
	CALL	CRLF
	LXI	H,STAT8		;PAGE SIZE
	CALL	SCRN
	LDA	PAGE1
	CALL	NUMBER
	LDA	PAGE2
	CALL	NUMBER
	LDA	PAGE3
	CALL	NUMBER
	LXI	H,STAT9		;MARGINS
	CALL	SCRN
	LDA	OFFST
	INR	A
	CALL	NUMBER
	LDA	OFFST
	MOV	B,A
	LDA	LINES
	ADD	B
	CALL	NUMBER
	LXI	H,STAT10	;OUTPUT LINE LENGTH
	CALL	SCRN
	LDA	LINES
	CALL	NUMBER
	CALL	CRLF
	LXI	H,STAT11	;TAB SETTINGS
	CALL	SCRN
	LXI	D,TABT
	MVI	B,10
	LDAX	D
	ORA	A
	JNZ	STATTAB
	LXI	H,STAT99
	CALL	SCRN
	JMP	STATSPC
STATTAB	CALL	NUMBER
	INX	D
	DCR	B
	JZ	STATSPC
	LDAX	D
	ORA	A
	JNZ	STATTAB
STATSPC	LXI	H,STAT12	;SPACING BETWEEN LINES
	CALL	SCRN
	LDA	SPACE
	CALL	NUMBER
	CALL	CRLF
	LXI	H,STAT13	;TITLE
	CALL	SCRN
	LDA	TITLEX
	ORA	A
	JNZ	STATTTL
	LXI	H,STAT99
	CALL	SCRN
	JMP	STATLN6
STATTTL	LXI	H,TITLEX
	CALL	SCRN
STATLN6	CALL	CRLF
	LXI	H,STAT14	;JUSTIFY
	CALL	SCRN
	LDA	JSW
	ORA	A
	JZ	STATJN
	MVI	A,'Y'
	JMP	STATJY
STATJN	MVI	A,'N'
STATJY	CALL	ALPHABETIC
	LXI	H,STAT16	;UNIT
	CALL	SCRN
	LDA	UNIT
	CALL	NUMBER
	LXI	H,STAT17	;REPEAT
	CALL	SCRN
	LDA	RPEAT
	CALL	NUMBER
	LXI	H,STAT18	;PAGE NUMBER--PNUM
	CALL	SCRN
	LDA	PNO
	INR	A
	CALL	NUMBER
	CALL	FREE		;MEMORY UTILIZATION INFO
	CALL	CRLF
	JMP	EOR

NUMBER	EQU	$
	PUSH	H
	PUSH	D
	PUSH	B
	CALL	BLANK
	LXI	H,PN2
	CALL	BIND
	LXI	D,PN2
	LDAX	D
	CPI	'0'		;SKIP LEADING ZEROES
	JNZ	PRTNUMB
	INX	D
	LDAX	D		;SKIP ZEROES
	CPI	'0'
	JNZ	PRTNUMB
	INX	D
PRTNUMB	EQU	$
	XCHG
	CALL	SCRN
	POP	B
	POP	D
	POP	H
	RET

BLANK	PUSH	PSW		;SAVE A REG
	MVI	B,20H
	CALL	OUT8
	POP	PSW
	RET

ALPHABETIC EQU	$		;PRINT 1 ALPHA CHAR IN A
	CALL	BLANK
	MOV	B,A
	JMP	OUT8		;PRINT IT USING OUT8'S RETURN
STAT1	DB	'SCREEN SIZE:',13
STAT2	DB	' X',13
STAT3	DB	'   LINE WRAPAROUND:',13
STAT4	DB	'   UNDERLINE:',13
STAT5	DB	'STOP AT BOTTOM:',13
STAT6	DB	'   DISK DENSITY:',13
STAT7	DB	'   NULLS:',13
STAT8	DB	'PAGE SIZE:',13
STAT9	DB	'   MARGINS:',13
STAT10	DB	'   OUTPUT LINE:',13
STAT11	DB	'TABS:',13
STAT12	DB	'   SPACING:',13
STAT13	DB	'TITLE: ',13
STAT14	DB	'JUSTIFY:',13
STAT16	DB	'   UNIT:',13
STAT17	DB	'   REPEAT:',13
STAT18	DB	'   PNUM:',13
STAT19	DB	'   OFFSET:',13
STAT99	DB	' NONE',13
MEMRY	EQU	$
	END

