	.TITLE	LINE
	.DSABL	GBL
	.GLOBL	DISP
	.GLOBL	ALT
	.GLOBL	INFO	ONOFF
	.GLOBL	MODE
	.GLOBL	TTI	PCENTER
	.GLOBL	PROMPT	LINE	LEN	MSTRLE	X
	.GLOBL	UPACK	PRPACK	MINI
	.GLOBL	SL.PTR	SL.STR
	.GLOBL	WINPKEY
	.GLOBL	BUFF

	.INCLU	"SCRMAC"
	.INCLU	"DIAMAC"

L.DEV::
	.WATTR	#^B0011
	.WPUT	#PROMPT,#0,#HEIGHT-2,#3.
	RETURN

L.GOTO::
	MOV	R0,-(SP)
	MOV	X,R0
	ADD	#4.,R0
	.WGCUR	R0,#HEIGHT-2
	MOV	(SP)+,R0
	RETURN

L.PRI::
	.WATTR	#^B0011

	MOV	LEN,R0
	ADD	#4.,R0
	.WPUT	#PROMPT,#0,#HEIGHT-2,R0

	.WCLRE
	RETURN

LPRI:	.WATTR	#^B0011

	MOV	LEN,R0
	SUB	X,R0
	INC	R0
	MOV	#3.,R2
	ADD	X,R2
	MOV	R2,R3
	ADD	#PROMPT,R3

	.WPUT	R3,R2,#HEIGHT-2,R0

OLDLEN	=	. + 4
	CMP	LEN,#-1
	BHI	1$
	.WCLRE
1$:	MOV	LEN,OLDLEN

	RETURN

.MACRO	.LABEL	ADDR,CODE
	.WORD	ADDR-.,CODE
.ENDM

CHAR::	JSR	R0,DISP
	.LABEL	ESC	,33
	.LABEL	S.U	,'u
	.LABEL	S.K	,'k

	.LABEL	BACK	,230
	.LABEL	LEFT	,216
	.LABEL	RIGHT	,217
	.LABEL	UP	,214
	.LABEL	DOWN	,215

	.LABEL	C.BACK	,230!40
	.LABEL	C.LEFT	,216!40
	.LABEL	C.RIGHT	,217!40
	.LABEL	UP	,214!40
	.LABEL	DOWN	,215!40
	.WORD
	CMPB	R0,#' 
	BLT	DONE
	CMPB	R0,#'a
	BGE	DONE
	CMP	LEN,#MSTRLEN
	BEQ	DONE
	MOV	#LINE,R1
	MOV	R1,R2
	ADD	LEN,R1
	ADD	X,R2
1$:	MOVB	(R1),1(R1)
	DEC	R1
	CMP	R1,R2
	BGE	1$
	INC	R1
2$:	MOVB	R0,(R1)
	INC	LEN
	INC	X
	CALL	LPRI
	CALL	L.GOTO

DONE:	JMP	TTI

LEFT:	TST	X
	BEQ	DONE
	DEC	X
	CALL	L.GOTO
	BR	DONE

RIGHT:	CMP	X,LEN
	BEQ	DONE
	INC	X
	CALL	L.GOTO
	BR	DONE

C.LEFT:	MOV	X,R1
1$:	TST	R1
	BEQ	POS
	DEC	R1
	CALL	WHO
	BCC	1$

2$:	TST	R1
	BEQ	POS
	DEC	R1
	CALL	WHO
	BCS	2$
	INC	R1
	BR	POS

C.RIGH:	MOV	X,R1
1$:	CMP	R1,LEN
	BEQ	POS
	INC	R1
	CALL	WHO
	BCC	1$

2$:	CMP	R1,LEN
	BEQ	POS
	INC	R1
	CALL	WHO
	BCS	2$
POS:	MOV	R1,X
	CALL	L.GOTO
.DONE:	JMP	DONE

BACK::	TST	X
	BEQ	DONE
	DEC	X
	MOV	#LINE,R1
	ADD	X,R1
1$:	INC	R1
	MOVB	(R1),-1(R1)
	BNE	1$
	DEC	LEN
	CALL	LPRI
	CALL	L.GOTO
	BR	DONE

C.BACK::
	MOV	X,R1
1$:	TST	R1
	BEQ	DEL
	DEC	R1
	CALL	WHO
	BCC	1$

2$:	TST	R1
	BEQ	DEL
	DEC	R1
	CALL	WHO
	BCS	2$
	INC	R1

DEL:	CMP	R1,X
	BEQ	DONE
	MOV	#LINE,R3
	MOV	R3,R4
	ADD	X,R3
	ADD	R1,R4
1$:	MOVB	(R3)+,(R4)+
	BNE	1$
	SUB	R4,R3
	SUB	R3,LEN
	BR	.POS

S.U:	TST	X
	BEQ	.DONE

	MOV	#LINE,R1
	MOV	R1,R0
	ADD	X,R0
1$:	MOVB	(R0)+,(R1)+
	BNE	1$

	SUB	X,LEN
	CLR	R1
	BR	.POS

S.K:	MOV	X,LEN
	MOV	#LINE,R1
	ADD	LEN,R1
	CLRB	@R1
	CALL	LPRI
	BR	.DONE

ESC:	CLRB	LINE
	CLR	LEN
	CLR	X
	CALL	LPRI
	CALL	L.GOTO
	BR	.DONE

S.ENT::	BIT	#INFO!ONOFF,MODE(R5)
	BNE	.DONE
	TST	(R5)
	BEQ	.DONE

	MOV	X,R1
	BEQ	5$
	DEC	R1
	CALL	WHO
	BCS	.DONE
	INC	R1
5$:	ADD	#LINE,R1

	CALL	UPACK
	CALL	PRPACK

	MOV	#6+1+3,R0
	MOV	#MINI,R4
1$:	CMPB	(R4)+,#' 
	BEQ	2$
	SOB	R0,1$
	INC	R4
2$:	SUB	#MINI,R4

	MOV	LEN,R0
	ADD	R4,R0
	CMP	R0,#MSTRLEN
	BGT	..DONE

	MOV	#LINE,R2
	INC	R2
	MOV	R2,R3
	ADD	LEN,R2
	ADD	R0,R3
	MOV	R0,LEN
3$:	MOVB	-(R2),-(R3)
	CMP	R2,R1
	BNE	3$

	MOV	#MINI,R2
	DEC	R4
4$:	MOVB	(R2)+,(R1)+
	SOB	R4,4$
	MOVB	#' ,(R1)+
	SUB	#LINE,R1
.POS:	MOV	R1,X
	CALL	L.PRI
	CALL	L.GOTO
..DONE:	JMP	DONE

WHO:	MOVB	LINE(R1),R0
	CMPB	R0,#'0
	BLT	NO
	CMPB	R0,#'9
	BLE	YES
	CMPB	R0,#'A
	BLT	NO
	CMPB	R0,#'Z
	BLE	YES
NO:	CLC
	RETURN
YES:	SEC
	RETURN

SL.MSTR	=	10.
SL.SLEN	==	80.-4

UP:	MOV	SL.PTR,R1
	BEQ	UD.QUIT
	ADD	#SL.SLEN*<SL.MSTR-1>,R1
	CMP	SL.STR,R1
	BEQ	UD.QUIT
	ADD	#SL.SLEN,SL.STR
	TSTB	@SL.STR
	BNE	UD
	SUB	#SL.SLEN,SL.STR
	BR	UD.QUIT

DOWN:	TST	SL.PTR
	BEQ	UD.QUIT
	CMP	SL.STR,SL.PTR
	BLO	UD.QUIT
.SUB:	SUB	#SL.SLEN,SL.STR
UD:	CALL	SL
UD.QUI:	JMP	TTI

SL:	CMP	SL.STR,SL.PTR
	BHIS	1$
	CLRB	LINE
	BR	3$

1$:	MOV	SL.STR,R1
	MOV	#LINE,R2
2$:	MOVB	(R1)+,(R2)+
	BNE	2$

3$:	MOV	#LINE,R1
4$:	TSTB	(R1)+
	BNE	4$
	SUB	#LINE+1,R1
	MOV	R1,LEN
	MOV	R1,X

	CALL	L.PRI
	CALL	L.GOTO
	RETURN

SL.PUT::
	MOV	SL.PTR,R1
	BEQ	5$
	MOV	#LINE,R2
1$:	CMPB	@R1,(R2)+
	BNE	2$
	TSTB	(R1)+
	BEQ	5$
	BR	1$

2$:	MOV	SL.PTR,R1
	MOV	#SL.SLEN*<SL.MSTR-1>,R0
	ADD	R0,R1
	MOV	R1,R2
	ADD	#SL.SLEN,R2
3$:	MOVB	-(R1),-(R2)
	SOB	R0,3$

	MOV	#LINE,R2
4$:	MOVB	(R2)+,(R1)+
	BNE	4$
5$:	RETURN

DX.MIN	=	32.-2
DX.MAX	=	42.-2

A.F8::
	MOV	SL.PTR,R3
	BNE	CONT
	JMP	TTI

CONT:	MOV	#SL.MSTR,R0
	MOV	#BUFF,R2
	MOV	#DX.MIN,DX
	MOV	#1,DY
1$:	TSTB	@R3
	BEQ	ECALC
	INC	DY
	MOV	R3,-(SP)
2$:	TSTB	(R3)+
	BNE	2$
	SUB	@SP,R3
	DEC	R3
	CMP	R3,DX
	BLOS	4$
	CMP	R3,#DX.MAX
	BLOS	3$
	MOV	#DX.MAX,R3
3$:	MOV	R3,DX
4$:	MOV	R3,(R2)+
	MOV	(SP)+,R3
	ADD	#SL.SLEN,R3
	SOB	R0,1$

ECALC:	ADD	#2,DX

	MOV	#HEIGHT-5,R0
	SUB	DY,R0
	ASR	R0
	MOV	R0,BY

	.DIALOG	#D.HIS

	INC	DIA.BX
	MOV	DY,R0
	DEC	R0
	BEQ	EDUMP
	MOV	BY,R1
	INC	R1
1$:	INC	R1
	SUB	#SL.SLEN,R3
	.WPUT	R3,DIA.BX,R1,-(R2)
	SOB	R0,1$

EDUMP:
	DEC	DIA.BX
	ADD	#2,BY
	DEC	DY

	MOV	SL.STR,R1
	SUB	SL.PTR,R1
	SXT	R0
	DIV	#SL.SLEN,R0
	MOV	R0,R1
	INC	R1
	NEG	R1
	ADD	DY,R1
	CALL	CURSOR

KEYIN:	CALL	WINPKEY
	JSR	R0,DISP
	.LABEL	H.UP	,214
	.LABEL	H.DOWN	,215

	.LABEL	H.DONE	,33
	.LABEL	H.DONE	,212
	.LABEL	ENTER	,200
	.WORD
	BR	KEYIN

H.UP:	TST	R1
	BEQ	.EUD
	CALL	CURSOR
	DEC	R1
	BR	.UD

H.DOWN:	CMP	R1,DY
	BEQ	.EUD
	CALL	CURSOR
	INC	R1
.UD:	CALL	CURSOR
.EUD:	BR	KEYIN

ENTER:	SUB	DY,R1
	NEG	R1
	DEC	R1
	MUL	#SL.SLEN,R1
	ADD	SL.PTR,R1
	MOV	R1,SL.STR

	CLRB	ING
	.WRES
	.WSCUR
	CALL	SL
	TSTB	LINE
	BEQ	1$
	JMP	PCENTER
1$:	JMP	TTI

H.DONE:	.WRES
	.WSCUR
	JMP	TTI

CURSOR:	MOV	BY,R0
	ADD	R1,R0
	.WSWAB	DIA.BX,R0,DX
	RETURN

D.HIS:	.BYTE	^B1011,1
DX:	.WORD
DY:	.WORD
BY:	.WORD
	.WORD	TL.HIS
	.WORD
	.WORD

TL.HIS:	.ASCIZ	" History "
	.EVEN

	.END
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  