Google
 

Trailing-Edge - PDP-10 Archives - integ_tools_tops20_v7_30-apr-86_dumper - tools/tvaxv1/gtvr01.mar
There are 7 other files named gtvr01.mar in the archive. Click here to see a list.
	.TITLE	GTVR01
;	AUTHOR: P. VAN DER MEIJ
;	DATE:   8-JAN-81
;
;	THIS ROUTINE PERFORMS TERMINAL INPUT 
;	FOR TV
;
;	IN	R0 = FUNCTION
;			0 - NORMAL INPUT
;			1 - FILE NAME
;			2 - END OF FILE NAME
;		R1 = ADDR INPUT BUFFER
;
;	OUT	R0 = LL
;			FUNCTION 1: R0=0 IF ESC, CR OR ^G
;
;	TERMINATORS ARE		FUNCTION 0:
;		- IN POSITION 1 : LF,BS,SPACE,^
;		- AFTER INPUT	: 2* ESCAPE
;		ARE ADDED AT END OF INPUT AND INCLUDED IN LL
;	TERMINATORS ARE		FUNCTION 1:
;		- IN POSITION 1 : ESC,^G,CR
;		- AFTER INPUT   : CR
;	TERMINATORS ARE		FUNCTION 2:
;		- IN POSITION 1 : CR,^G
;
;	LINE ADMINISTRATION
LANTAB=0				;HL1 - NR OF TABS
LASTAT=LANTAB+1				;XL1 - STATUS	
LAXSL=^X80				;START OF LINE
LAXEL=^X40				;END OF LINE
LAXFL=^X20				;FIRST LINE
LANCHR=LASTAT+1				;HL2 - NR OF CHARS
	.MACRO	MOVSP	P1
	MOVL	GTTAB,R1
	MOVL	P1*4(R1),R1
	MOVC3	(R1),2(R1),(R8)
	MOVL	R3,R8
	.ENDM
	.PAGE
	INIT	GTVR01
	MOVL	R1,WIADDR
	MOVB	R0,WIFUN		;FUNCTION
	CASEB	R0,#0,#2
XIN:	.WORD	XIN0-XIN
	.WORD	XIN1-XIN
	.WORD	XIN2-XIN
XIN2:	MOVW	#1,WIRL
	CLRW	WIPL
	BRW	XINX
XIN0:	MOVW	#80,WIRL
	MOVW	#24,WIPL
	MOVW	#^X2A00,WIFL		;*
	BRW	XINX
XIN1:	MOVW	#57,WIRL		;MAX 57 CHAR
	CLRW	WIPL
	MOVW	#^X0909,WIFL		;2 TABS
XINX:					;END INITIALISATION
	BITB	#GX2COM,GSTAT2
	IF.	*ON			;INPUT FROM FILE
		MOVL	WIADDR,R1
		MOVAB	GIN_RAB,R0
		TSTB	WIFUN
		IF.	*EQ			;FUNCTION 0
			CALLS	#0,GTVR09	;GET INPUT
		ELSE.
			CALLS	#0,GTVR09R
		ENDIF.
		TSTL	R0
		IF.	*LTS			;EOF ON INPUT
			BITB	#GX2TER,GSTAT2
			IF.	*ON		;ALSO ON TERMINAL
				BICB2	#GX2COM,GSTAT2
			ELSE.
				BRW	GEXIT	;EXIT
			ENDIF.
		ELSE.			;NOT EOF
			RET
		ENDIF.
	ENDIF.
	MOVL	WIADDR,R6
	MOVL	R6,ISTA			;SAVE START OF INPUT
	CLRW	ILCNT
	CLRL	INTAB
	CLRB	ITERMC
	MOVAB	LTAB,R7
	CLRL	(R7)
	MOVB	#LAXFL+LAXSL+LAXEL,LASTAT(R7)
	BITB	#WXTRUNC,WSTAT
	IF.	*ON			;PREVIOUS > 20 LINES INPUT
		BICB2	#WXTRUNC,WSTAT
		SUBW3	#2,WIRL,IRCNT
		CLRB	IPTERMC
		MOVL	GOBUFFA,R8
		MOVB	#^A'I',(R8)+
		MOVB	#^A'I',(R6)
		MOVSP	1		;CLEAR
		SUBW3	#1,WIRL,IRCNT	;SET MAX LINE SIZE
		BRW	TERMR
	ENDIF.
L0:	SUBW3	#1,WIRL,IRCNT
	BITB	#WXREAD,WSTAT
	IF.	*ON			;PREVIOUS START
		BICB2	#WXREAD,WSTAT
		BITB	#GXTERM,GSTAT
		IF.	*ON		;PREVIOUS COMMAND CANCEL
			$HIBER_S
			BICB2	#GXTERM,GSTAT
			BRW	L0
		ELSE.			;NEW INPUT
			$HIBER_S
			BICB2	#GXTERM,GSTAT
		ENDIF.
		MOVB	WINCH,(R6)	;FIRST CHAR
	ELSE.
		$QIOW_S	CHAN=SIN_FAB+FAB$L_STV,-
			FUNC=#IO$_TTYREADALL+IO$M_NOECHO,IOSB=IIOSB,-
			P1=(R6),P2=#1,,P4=ITERM1
		ON_ERROR GRERR
	ENDIF.
	MOVB	ITERMC,IPTERMC		;SAVE PREVIOUS TERMINATOR
	MOVTC	#1,(R6),#0,GTERTAB,#1,ITERMC
	CASEB	WIFUN,#0,#2
L00:	.WORD	L00.0-L00
	.WORD	L00.1-L00
	.WORD	L00.2-L00
L00.0:					;FUNCTION 0
	CASEB	ITERMC,#1,#2
L01.0:	.WORD	L02.0-L01.0		;SPACE
	.WORD	L02.0-L01.0		;BS
	.WORD	L02.0-L01.0		;LF
	MOVL	GOBUFFA,R8
	CMPB	(R6),#32
	IF.	*GE			;NOT CTR CHAR
		MOVB	(R6),(R8)+	;ECHO INPUT
	ENDIF.
	MOVSP	1			;CLEAR
	BRW	TERMR			;DO TRICK
L02.0:	MOVL	#1,R0
	RET
;
L00.1:					;FUNCTION 1
	CASEB	ITERMC,#8,#2
L01.1:	.WORD	L02.1-L01.1		;ESC = 8
	.WORD	L02.1-L01.1		;CR = 9
	.WORD	L02.1-L01.1		;^G = 10
	MOVL	GOBUFFA,R8
	MOVB	(R6),(R8)+		;ECHO INPUT
	BRW	TERMR
L02.1:	MOVL	#1,R0
	MOVB	ITERMC,@ISTA
	RET
;
L00.2:					;FUNCTION 2
	MOVL	#1,R0
	CMPB	(R6),#13
	IF.	*EQ
		RET
	ENDIF.
	CMPB	(R6),#7
	IF.	*EQ
		RET
	ENDIF.
	MOVB	#7,@GOBUFFA
	MOVW	#1,R1
	BSBW	GWRITR			;BELL
	$QIOW_S	CHAN=SIN_FAB+FAB$L_STV,-
		FUNC=#IO$_TTYREADALL+IO$M_NOECHO,IOSB=IIOSB,-
		P1=(R6),P2=#1,,P4=ITERM1
	ON_ERROR GRERR
	BRW	L00.2	
;
;
;
;

L1:	TSTW	IRCNT
	IF.	*EQ				;ND OF TERMINAL LINE
		BICB2	#LAXEL,LASTAT(R7)
		BSBW	INCRL			;ADVANCE 1 LINE IN ADM
		MOVB	#LAXEL,LASTAT(R7)	;SET END OF LINE
	ENDIF.
	$QIOW_S	CHAN=SIN_FAB+FAB$L_STV,-
		FUNC=#IO$_TTYREADALL+IO$M_TRMNOECHO,IOSB=IIOSB,-
		P1=(R6),P2=IRCNT,,P4=ITERM2
	ON_ERROR GRERR
	MOVB	ITERMC,IPTERMC		;SAVE PREVIOUS TERMINATOR
	MOVZWL	IIOSB+2,R1
	IF.	*NE			;SOME INPUT
		CLRB	IPTERMC		;CLEAR PREVIOUS TERMINATOR
		ADDW2	R1,LANCHR(R7)
		SUBW2	R1,IRCNT
		ADDL2	R1,R6
	ENDIF.
	CMPW	IRCNT,IIOSB+2
	IF.	*EQ			;NO TERMINATOR FOUND
		CLRB	ITERMC
	ELSE.
		MOVTC	#1,IIOSB+4,#0,GTERTAB,#1,ITERMC
		MOVB	IIOSB+4,(R6)	;TERMINATOR TO INPUT
	ENDIF.
	MOVL	GOBUFFA,R8
	BRW	TERMR
;
;
TERMR:
	TSTB	WIFUN
	IF.	*EQ
		BRW	TERMR.0		;FUNCTION 0
	ENDIF.
TERMR.1:
	CASEB	ITERMC,#0,#14
T1.1:	.WORD	TERM0-T1.1
	.WORD	TERM0-T1.1
	.WORD	TERM2-T1.1
	.WORD	TERM3-T1.1
	.WORD	TERM4-T1.1
	.WORD	TERM5-T1.1
	.WORD	TERM6-T1.1
	.WORD	TERM7-T1.1
	.WORD	TERM8-T1.1
	.WORD	TERM9.1-T1.1
	.WORD	TERM10.1-T1.1
	.WORD	TERM11-T1.1
	.WORD	TERM99-T1.1		;END OF LINE
	.WORD	TERM13-T1.1
	.WORD	TERM14-T1.1
	BRW	TERM0
TERM9.1:				;CR
	SUBL3	ISTA,R6,R0
	RET
;
TERM10.1:				;^G
	MOVB	ITERMC,@ISTA
	CLRL	R0
	RET
;
TERMR.0:
	CASEB	ITERMC,#0,#14
T1:	.WORD	TERM0-T1
	.WORD	T1-T1
	.WORD	TERM2-T1
	.WORD	TERM3-T1
	.WORD	TERM4-T1
	.WORD	TERM5-T1
	.WORD	TERM6-T1
	.WORD	TERM7-T1
	.WORD	TERM8-T1
	.WORD	TERM9-T1
	.WORD	TERM10-T1
	.WORD	TERM11-T1
	.WORD	TERM12-T1
	.WORD	TERM13-T1
	.WORD	TERM14-T1
TERM0:					;NOT TERMINATED
	INCW	LANCHR(R7)
	INCL	R6
	DECW	IRCNT
	BRW	TERM99
;
;
;
TERM2:					;BS
TERM13:					;ALL OTHER ^....
	BITB	#GXHP,GSTAT2
	IF.	*ON			;HP
		MOVW	ESCY,(R8)+	;ON
		MOVB	(R6)+,(R8)+	;INPUT CHAR
		MOVC3	#6,ESCZ,(R8)
		MOVL	R3,R8		;OFF
	ELSE.
		MOVB	GNONDIS,(R8)+
		INCL	R6
	ENDIF.
	DECW	IRCNT
	IF.	*EQ			;END OF LINE
		MOVW	CRLF,(R8)+
	ENDIF.
	INCW	LANCHR(R7)
	BRW	TERM99
;
;
;
TERM3:					;LF
;	CMPW	ILCNT,#2
;	IF.	*LT
;		MOVSP	4		;CURSOR UP
;	ELSE.
;		MOVSP	5		;SCROLL UP
;	ENDIF.
	BITB	#GXHP,GSTAT2
	IF.	*ON
		MOVW	ESCY,(R8)+
		MOVB	#10,(R8)+	;LF
		MOVC3	#6,ESCZ,(R8)
		MOVL	R3,R8		;OFF
	ELSE.
		MOVB	GNONDIS,(R8)+
	ENDIF.
	DECW	IRCNT
	INCW	LANCHR(R7)
	MOVB	#10,(R6)+
	BRW	TERM99
;
;
;
TERM4:					;^U
	MOVB	#13,(R8)+		;CR TO TERMINAL
TERM401: SUBB2	LANTAB(R7),INTAB
	MOVZWL	LANCHR(R7),R1
	SUBL2	R1,R6			;ADJUST  INPUT PTR
	BITB	#LAXSL,LASTAT(R7)
	IF.	*OFF			;NOT AT START OF LINE
TERM402:	BSBW	DECLR		;1 LINE BACK
		BRW	TERM401
	ENDIF.
	TSTW	LANCHR(R7)
	IF.	*EQ				;AT EMPTY LINE
		BITB	#LAXFL,LASTAT(R7)
		IF.	*ON			;AT BEGIN
			MOVW	WIFL,(R8)+
			MOVB	#7,(R8)+	;BELL
		ELSE.				;NOT BEGIN
			BRW	TERM402		;BACK MORE
		ENDIF.
	ELSE.
		BITB	#LAXFL,LASTAT(R7)
		IF.	*ON
			MOVW	WIFL,(R8)+
		ENDIF.
	ENDIF.
	MOVSP	1			;CLEAR
	CLRB	LANTAB(R7)
	CLRW	LANCHR(R7)
	BISB2	#LAXEL,LASTAT(R7)	;SET END OF LINE
	MOVW	#80,IRCNT
	BRW	TERM99
;
;
;
TERM5:					;^R
	CMPL	R6,ISTA
	IF.	*EQ			;AT START
		MOVB	#7,(R8)+	;BELL
		BRW	TERM99
	ENDIF.
	MOVB	#13,(R8)+		;CR
TERM501: MOVZWL	LANCHR(R7),R1
	SUBL2	R1,R6
	BITB	#LAXSL,LASTAT(R7)
	IF.	*OFF			;NOT AT START OF LINE
		BSBW	DECLR
		BRW	TERM501
	ENDIF.
TERM502: BSBW	MOVLR
	BITB	#LAXEL,LASTAT(R7)
	IF.	*OFF			;NOT AT END OF LINE
		ADDL2	#4,R7
		INCW	ILCNT
		DECL	R6
		CMPB	(R6)+,#9	;HT
		IF.	*NE
			MOVW	CRLF,(R8)+
		ENDIF.
		BRW	TERM502
	ENDIF.
	BRW	TERM99
;
;
;
TERM6:					;^C
	BRW	GEXIT			;STOP
;
;
;
TERM7:					;DEL
	CMPL	R6,ISTA
	IF.	*EQ			;NO INPUT PRESENT
		MOVB	#7,(R8)+	;BELL
		BSBW	TOUTR
		BRW	L0
	ENDIF.
	DECL	R6
	TSTW	LANCHR(R7)
	IF.	*EQ			;AT START OF LINE
		BSBW	DECLR		;1 LINE BACK
		BISB2	#LAXEL,LASTAT(R7)
		DECW	LANCHR(R7)
		MOVZWL	LANCHR(R7),R1
		SUBL2	R1,R6
		BSBW	MOVLR		;MOVE LINE TO OUTPUT
		MOVSP	2		;TO END OF LINE
		CMPB	#9,(R6)		;HT DELETED
		IF.	*EQ		;YES
			DECB	LANTAB(R7)
			DECL	INTAB
			MOVL	INTAB,R2
			MOVB	ITTAB[R2],IRCNT
		ELSE.
			CMPB	#13,(R6)	;CR DELETED
			IF.	*EQ
				BSBW	SETRR	;SET READ COUNT
			ELSE.
				MOVW	#1,IRCNT
			ENDIF.
		ENDIF.
	ELSE.
		DECW	LANCHR(R7)
		CMPB	(R6),#9
		IF.	*EQ			;HT
			DECL	INTAB
			MOVL	INTAB,R2
			CLRL	R0
			MOVB	ITTAB[R2],R0
			ADDW2	R0,IRCNT
TERM702:		MOVB	#8,(R8)+	;BS
			SOBGTR	R0,TERM702
		ELSE.
			INCW	IRCNT
			MOVB	#8,(R8)+
		ENDIF.
		MOVSP	2		;ERASE TO END OF LINE
	ENDIF.
	BRW	TERM99
;
;
;
TERM8:					;ESC
	DECW	IRCNT
	INCW	LANCHR(R7)
	INCL	R6			;ESC TO INPUT
;	CMPL	R8,GOBUFFA
;	IF.	*NE			;NOT FIRST OUTPUT
;		MOVL	GOBUFFA,R8
;		CMPB	(R8),#27
;		IF.	*EQ		;FIRST NO ECHO ESCAPE
;			MOVB	#^A'$',(R8)+
;		ELSE.
;			MOVW	#^A\P$\,(R8)+	;NEUTRALISE ESC ECHO
;		ENDIF.
;		MOVSP	1		;CLEAR
;	ELSE.
;		MOVW	#^A\P$\,(R8)+	;$ TO TERMINAL
;	ENDIF.
	MOVB	#^A'$',(R8)+
	CMPB	-1(R6),-2(R6)
	IF.	*EQ			;SECOND ESC IN ROW
		BSBW	TOUTR
		$QIO_S	CHAN=SIN_FAB+FAB$L_STV,-
			FUNC=#IO$_TTYREADALL+IO$M_NOECHO,IOSB=IIOSB,-
			ASTADR=GTVR01A,-
			P1=WINCH,P2=#1,,P4=ITERM1
		ON_ERROR GRERR
		BISB2	#WXREAD,WSTAT
		SUBL3	ISTA,R6,R0	;SET LENGTH
		SUBL2	#2,R0		;DELETE ESC,ESC
		RET
	ENDIF.
	BRW	TERM99
;
;
;
TERM9:					;CR
	MOVW	CRLF,(R8)+		;CR LF TO TERMINAL
	INCL	R6			;CR TO INPUT
	INCW	LANCHR(R7)
	BSBW	INCRL
	MOVB	#LAXSL+LAXEL,LASTAT(R7)
	BRW	TERM99
;
;
;
TERM10:					;^G
	CMPB	ITERMC,IPTERMC
	IF.	*EQ			;2* IN ROW
		BRW	TERM4		;AS ^U
	ELSE.
		MOVB	#7,(R8)+	;BELL
		BRW	TERM99
	ENDIF.
;
;
;
TERM11:					;HT
	MOVB	#9,(R8)+
	INCL	R6			;HT IN INPUT
	INCW	LANCHR(R7)
	MOVZWL	IRCNT,R1		;REMAINING IN LINE
	ASHL	#-3,R1,R2
	ASHL	#3,R2,R2
	SUBL2	R2,R1			;MODULO 8
	IF.	*EQ
		MOVB	#8,R1
	ENDIF.
	MOVL	INTAB,R2
	MOVB	R1,ITTAB[R2]		;SAVE NR CHAR SKIPPED BY TAB
	INCL	INTAB
	INCB	LANTAB(R7)
	SUBW2	R1,IRCNT		;SET REMAINING IN LINE
	BRW	TERM99
;
;
;
TERM12:					;END OF LINE
	MOVW	CRLF,(R8)+
	BRW	TERM99
;
;
TERM14:					;^W
	CMPL	R6,ISTA
	IF.	*EQ			;NO INPUT
		MOVB	#7,(R8)+
		BRW	TERM99
	ENDIF.
	MOVB	#13,(R8)+
TERM1401: CMPL	R6,ISTA
	IF.	*EQ			;NO INPUT
		MOVSP	1		;CLEAR
		MOVW	WIFL,(R8)+
		BRW	TERM99
	ENDIF.
	TSTW	LANCHR(R7)
	IF.	*EQ			;EMPTY LINE
		BSBW	DECLR
	ENDIF.
	DECL	R6
	DECW	LANCHR(R7)
	CMPB	(R6),#9
	IF.	*EQ			;HT DETECTED
		DECB	LANTAB(R7)
		DECL	INTAB
		BRW	TERM1401
	ENDIF.
	MATCHC	#1,(R6),#WT14L,WT14
	IF.	*EQ			;STILL A TERMINATOR
		BRW	TERM1401
	ENDIF.
TERM1402: CMPL	R6,ISTA
	IF.	*NE			;STILL INPUT PRESENT
		DECL	R6
		MATCHC	#1,(R6),#WT14L,WT14
		IF.	*NE			;NO TERMINATOR
			DECW	LANCHR(R7)
			IF.	*EQ		;EMPTY LINE
				CMPL	R6,ISTA
				IF.	*NE	;NOT FIRST LINE
					MATCHC	#1,-1(R6),#WT14L,WT14
					IF.	*EQ	;TERMINATOR
						MOVSP	1	;CLEAR
						BRW	TERM99
					ENDIF.
					BSBW	DECLR
					BRW	TERM1402
				ELSE.
					BRW	TERM1401
				ENDIF.
			ENDIF.
			BRW	TERM1402
		ENDIF.
		INCL	R6
	ENDIF.
	MOVZWL	LANCHR(R7),R1
	SUBL2	R1,R6
	BSBW	MOVLR			;REDISPLAY CURRENT LINE
	BSBW	SETRR			;SET READ LENGTH
	MOVSP	1			;CLEAR
	BRW	TERM99
WT14:	.BYTE	13,9,^A/ /		;CR,HT,SPACE
WT14L=.-WT14
;
;
TERM99:					;END OF INTERPRETATION
	BSBW	TOUTR
	CMPL	R6,ISTA
	IF.	*EQ			;AT START OF LINE
		BRW	L0
	ELSE.
		BRW	L1
	ENDIF.
;
;
TOUTR:
	SUBL3	GOBUFFA,R8,R1
	IF.	*NE			;SOME OUTPUT TO DO
		BSBW	GWRITR
	ENDIF.
	RSB
;
;
DECLR:					;SET SCREEN POSITION 1 LINE BACK
	SUBL2	#4,R7
	DECW	ILCNT
	CMPW	ILCNT,#2
	IF.	*LT
		MOVSP	4
	ELSE.
		MOVSP	5		;SCROLL UP
	ENDIF.
	RSB
;
;
SETRR:					;SET NR OF CHAR REMAINING IN LINE
	BITB	#LAXFL,LASTAT(R7)
	IF.	*ON			;AT FIRST LINE
		SUBW3	#1,WIRL,IRCNT
	ELSE.
		MOVW	WIRL,IRCNT
	ENDIF.
	SUBW2	LANCHR(R7),IRCNT
	CLRL	R0
	MOVB	LANTAB(R7),R0
	CLRL	R1
	TSTL	R0
	IF.	*NE			;HT PRESENT IN LINE
SETR1:	SUBL3	R0,INTAB,R2
		MOVB	ITTAB[R2],R1
		DECL	R1
		SUBW2	R1,IRCNT
		SOBGTR	R0,SETR1
	ENDIF.
	RSB
;
;
;
;
;	IN	R6 = INPUT ADDR
;	OUT	R6 UPDATED
MOVLR:
	MOVW	LANCHR(R7),MOVLL
	BITB	#LAXFL,LASTAT(R7)
	IF.	*ON
		MOVW	WIFL,(R8)+
	ENDIF.
	BICB2	#MOVSON,MOVSW
MOVL1:	SCANC	MOVLL,(R6),MOVSCT,#1
	SUBW3	R0,MOVLL,R0
	IF.	*NE			;SOME TEXT
		SUBW2	R0,MOVLL	;REMAINING LENGTH
		MOVC3	R0,(R6),(R8)
		MOVL	R1,R6
		MOVL	R3,R8
		BICB2	#MOVSON,MOVSW
	ENDIF.
	TSTW	MOVLL
	IF.	*EQ			;END OF LINE
		RSB
	ENDIF.
	CMPB	#27,(R6)
	IF.	*EQ			;ESCAPE
		MOVB	#^A\$\,(R8)+
		INCL	R6
		BICB2	#MOVSON,MOVSW
	ELSE.
		BITB	#GXHP,GSTAT2
		IF.	*ON			;HP
			BITB	#MOVSON,MOVSW
			IF.	*ON		;PREVIOUS DISPLAY ON
				SUBL2	#6,R8
			ELSE.
				BISB2	#MOVSON,MOVSW
				MOVW	ESCY,(R8)+
			ENDIF.
			MOVB	(R6)+,(R8)+
			MOVC3	#6,ESCZ,(R8)
			MOVL	R3,R8		;OFF
		ELSE.
			MOVB	GNONDIS,(R8)+
			INCL	R6
		ENDIF.
	ENDIF.
	DECW	MOVLL
	IF.	*NE			;NOT END OF LINE
		BRW	MOVL1
	ENDIF.
	RSB
MOVLL:	.BLKW
MOVSCT:	
	.REPEAT	32
	.BYTE	1
	.ENDR
.=MOVSCT+9
	.BYTE	0			;HT NO DISPLAY ON
.=MOVSCT+256
MOVSW:	.BYTE	1
MOVSON=^X80				;DISPLAY FUNCTIONS BEEN ON
;
;
INCRL:					;ADVANCE ONE TERMINAL LINE
	INCW	ILCNT
	CMPW	ILCNT,WIPL
	IF.	*GT			;MORE THEN MAX LINES
		SUBL3	ISTA,R6,R0
		TSTB	WIFUN
		IF.	*EQ		;FUNCION 0
			BISB2	#WXTRUNC,WSTAT
		ENDIF.
		RET
	ENDIF.
	BITB	#GXHP,GSTAT2
	IF.	*OFF
		CMPW	ILCNT,#3
		IF.	*EQ
			BISB2	#GXCTLL,GSTAT
		ENDIF.
	ENDIF.
	ADDL2	#4,R7
	CLRL	(R7)
	MOVW	WIRL,IRCNT
	RSB
;
LTAB:	.BLKL	25
ILCNT:	.BLKW				;TERMINAL LINE COUNT
ISTA:	.BLKL
IRCNT:	.BLKW
INTAB:	.LONG	0
ITTAB:	.BLKB	256
	.ALIGN	LONG
ITERM1:	.LONG	.+4
	.LONG	0,0
ITERMC:	.BLKB
IPTERMC: .BLKB
ITERM2:	.LONG	.+4
	.WORD	16,0
	.LONG	ITMASK
ITMASK:
.MACRO	TER,P1
WA1=P1/32
WA2=WA1*32
WA2=P1-WA2
WA2=1@WA2
.IIF	EQ	WA1	,WM0=WM0!WA2
.IIF	EQ	WA1-1	,WM1=WM1!WA2
.IIF	EQ	WA1-2	,WM2=WM2!WA2
.IIF	EQ	WA1-3	,WM3=WM3!WA2
.ENDM
WM0=0
WM1=0
WM2=0
WM3=0
	TER	127			;DEL
	.LONG	-1,WM1,WM2,WM3
;
;	TERMINATORS FOR FILE NAME READ
;		GTVR03
WM0=0
	TER	13			;CR
	TER	7			;^G
	TER	27			;ESC
GTERMF:: .LONG	.+4,0,WM0
IIOSB:	.BLKL	2
GTERTAB::	
	.REPEAT	32
	.BYTE	13
	.ENDR
.=GTERTAB+32	
	.BYTE	1			;SPACE
.=GTERTAB+^A/^/
	.BYTE	1			;^
.=GTERTAB+8	
	.BYTE	2			;BS
.=GTERTAB+10	
	.BYTE	3			;LF
.=GTERTAB+21	
	.BYTE	4			;^U
.=GTERTAB+18	
	.BYTE	5			;^R
.=GTERTAB+3	
	.BYTE	6			;^C
.=GTERTAB+127	
	.BYTE	7			;DEL
.=GTERTAB+27	
	.BYTE	8			;ESC
.=GTERTAB+13	
	.BYTE	9			;CR
.=GTERTAB+7	
	.BYTE	10			;^G
.=GTERTAB+9	
	.BYTE	11			;HT
.=GTERTAB	
	.BYTE	12			;END OF READ LINE
.=GTERTAB+23
	.BYTE	14			;^W
.=GTERTAB+256
ESCY:	.BYTE	27,^A\Y\		;DISPLAY FUNC ON
ESCZ:	.BYTE	27,^A\Z\,8,8,27,^A\K\	;DISPLAY OFF
CRLF:	.BYTE	10,13			;CR / LF
WINCH:	.BLKB	1			;FIRST CHAR READ
WSTAT:	.BLKB
WXTRUNC=^X80				;PREVIOUS INPUT > 24 LINES
WXREAD=^X40				;READ DONE
WIADDR:	.BLKL
WIRL:	.BLKW
WIPL:	.BLKW
WIFUN:	.BLKB
WIFL:	.BLKW				;2 BYTES FO FIRST PROMPT
	.PAGE
;	AST INPUT COMPLETION ROUTINE
	.ENTRY	GTVR01A,^M<R2,R3>
	CMPB	WINCH,#7		;^G
	IF.	*EQ
		BISB2	#GXTERM,GSTAT	;TERMINATE
	ENDIF.
	$WAKE_S
	RET
	.END