Google
 

Trailing-Edge - PDP-10 Archives - tops20tools_v6_9-jan-86_dumper - tools/tvaxv1/tvmain.mar
There are 7 other files named tvmain.mar in the archive. Click here to see a list.
	.TITLE	TVMAIN - TV MAIN PROGRAM
; 25-Mar-82
;	Enhancements:
;		1.	:K command.
;		2.	[n];T command, to translate, either n lines,
;			or whole buffer from lower to uppercase.
;
;	Corrections:
;		1.	Displaying a line, with a length of exactly 80
;			positions, caused sending wrong information
;			to the screen.
;
; 29-Mar-82
;	Corrections:
;		1.	;T is now ;Z.
;		2.	Inserting of a string in one of the Q-registers,
;			interferes into the contents of the other Q-regs.
;
; 1-Apr-82
;	Corrections:
;		1.	@I/XXX/ did not work.
;
; 4-May-82
;	Corrections:
;		1.	While reading input file, don't delete
;			"pagemark/formfeed".
;		2.	Displaying a line of 80 characters, with pointer at
;			end of line, caused errors on screen.
;		3.	Explicit error-messages, when backup file cannot
;			be opened.
;		4.	Initialisation end file buffer.
;
; 3-Jun-82
;	Correction:
;		1.	If "HOLE" is located at end of buffer, it is brought
;			back to 8k, to prevent it from growing too large.
;
; 28-Oct-82
;	Corrections:
;		1.	Initial ;Y of non-existing file, followed by <ESC>,
;			caused dump.
;		2.	;Y with existing buffer, caused display 1 line
;			too high, sometimes.
;		3.	% command sometimes resulted in a dump.
;		4.	n,mX wanted <ESC>, prior to next command.
;
;	Improvements:
;		1.	@S and @R, improved error-messages, if no search
;			argument is specified.
;		2.	S and R commands use, either exact match (default),
;			or upper and lower case match (after ^X).
;		3.	With file-name commands after <ESC>, any character
;			can be specified, only action with ^G or <CR>.
;
; 1-Nov-82
;	Improvements:
;		1.	Calls for OAP statistics.
;		2.	Better possibilities when running under terminal
;			control, command processor and batch.
;		3.	If input not from terminal, end of command is not seen
;			as end of record, but scanning till 2 * <ESC> will
;			be performed.
;		4.	If running under batch:
;				- no screen output
;				- logging from input
;				- logging of output errors
;		5.	If writing to output file is not correct, the
;			incomplete version will be deleted by TV.
;
; 9-Nov-82
;	Corrections:
;		1.	Initial ;Y command, was written to TVBACK-file
;			without <ESC> <ESC>.
;
; 29-Nov-82
;	Enhancements:
;		1.	;P command.
;		2.	. (octal) values for TV input commands.
;		3.	Don't build screen again with ;X, ;U and ;S.
;		4.	Q-registers can be specified, using lowercase.
;		5.	Don't generate output to screen, if input from
;			command processor.
;
; 23-Dec-82
;	Corrections:
;		1.	;E and input from a file conflicts.
;		2.	0 or -* executing of <>, does not work correctly
;			(always goes one time).
;		3.	Lowercase @i, etc., did not work.
;
; 17-Jan-83
;	Corrections:
;		1.	Test for batch, cmd proc or terminal, did not work
;			with VMS V3, used some other trick.
;
; 3-Feb-83
;	Improvement:
;		1.	Execute FLUSH in GTVR08, after input of min. 15 char.
;			from tv-backup file.
;
; 31-Mar-83
;	Enhancement:
;		1.	;V for translation from uppercase to lowercase.
;
; 7-Oct-83
;	Correction:
;		1.	nA command gives value for next command.
;
;	Enhancements:
;		1.	^G to terminate commands.
;		2.	nMq also implemented.
;		3.	;Y will also read remainder of file, if file too big.
;		4.	Y added = HK + ;Y.
;		5.	;A command replaces spaces by tabs, and deletes
;			trailing spaces.
;
; 27-Dec-83
;	Correction/Improvement:
;		1.	Routine GEXTHOLR does not work for > 64K.
;		2.	Output to terminal with IO$M_NOFORMAT.
;
; 24-Jan-84
;	Enhancement:
;		1.	TV can also handle VT100
;				- table with terminal dependent char. in TVMAIN
;				- GTVR01 and GTVR02 special moves
;				- only for HP, display of non-printable char.
;
; 7-Feb-84
;	Correction:
;		1.	With ';U' and 'Y' command, HOLE is set back to 8k,
;			by which 'Y and ';Y' can use the whole buffer again.
;
	.page
	.MACRO	MOVSP	P1
	MOVL	GTTAB,R1
	MOVL	P1*4(R1),R1
	MOVC3	(R1),2(R1),(R8)
	MOVL	R3,R8
	.ENDM
	INIT	TVMAIN			;CHANGED GTVM01 INTO TVMAIN
	CALLS	#0,RRPRFB		;OAP INIT
	$OPEN	FAB=SIN_FAB
	IF.	*ERROR			;BATCH TASK
		BISB2	#GX2COM,GSTAT2
		$OPEN	FAB=GIN_FAB
	ELSE.
		$GETDVI_S ,SIN_FAB+FAB$L_STV,,WDLIST
		BITL	#TT2$M_DECCRT,WDEVDEP2
		IF.	*OFF		;NOT VT100 COMPATIBLE
			MOVAB	GHP2621,GTTAB
			BISB2	#GXHP,GSTAT2
		ENDIF.
		BISB2	#GX2TER,GSTAT2
		$OPEN	FAB=GIN_FAB
		ON_ERROR	GRERR
		CMPB	#02,GIN_FAB+FAB$B_RAT
		IF.	*EQ		;COMMAND PROC
			BISB2	#GX2COM,GSTAT2
		ENDIF.
	ENDIF.
	BITB	#GX2COM,GSTAT2
	IF.	*ON
		$CONNECT RAB=GIN_RAB
		$CREATE	FAB=GOUT_FAB
		ON_ERROR GRERR
		$CONNECT RAB=GOUT_RAB
	ENDIF.
	MOVL	#GBUFS+GBUFS+28,R1
	$EXPREG_S R1,WRET
	ON_ERROR GRERR
	MOVL	WRET,R1
	MOVL	R1,GOBUFFA
	ADDL2	#2048,R1
	MOVL	R1,GIBUFFA		;2K INPUT BUFFER
	ADDL2	#2048,R1
	MOVL	R1,GEBUFFA		;2K EXEC FILE BUFFER
	ADDL2	#2048,R1
	MOVL	R1,GIBUF2A		;SECOND 2K INPUT BUFFER
	ADDL2	#2048,R1
	MOVL	R1,GSBUFFA		;SCREEN BUFFER
	ADDL2	#2048,R1
	MOVL	R1,GIBUF3A		;BUFFER FOR GTVR09
	ADDL2	#2048,R1
	MOVL	R1,GIBUF4A		;ANOTHER BUFFER FOR GTVR09
	ADDL2	#2048,R1
	MOVL	R1,GQBUFFA		;Q-REG BUFFER
	ADDL2	#GBUFS*512,R1
	MOVL	R1,GFBUFFA		;2500K FILE BUFFER
	BSBW	GTVR08O			;OPEN LOGFILE
	CALLS	#0,GTVR03I		;READ INPUT FILE IF ON COMMAND LINE
L1:	CALLS	#0,GTVR02
	CLRL	R0			;FUNCTION 0
	MOVL	GIBUF2A,R1		;ADDR INPUT BUFFER
	CALLS	#0,GTVR01		;READ
	TSTW	R0
	IF.	*EQ			;NO INPUT
		BRW	L1
	ENDIF.
	MOVL	GIBUFFA,R2
	MOVL	GIBUF2A,GIBUFFA		;SWAP BUFFERS
	MOVL	R2,GIBUF2A
	MOVW	GI1LL,GI2LL		;SAVE PREVIOUS INPUT LENGTH
	MOVW	R0,GI1LL
	MOVL	GIBUFFA,R1		;SET ADDR INPUT
	BSBW	GTVR08WE		;WRITE COMMAND TO LOGFILE
	CALLS	#0,GTVR04		;PARSE INPUT COMMANDS + EXECUTE
	BRW	L1
GEXIT::					;STOP TV
	BSBW	GTVR08C			;CLOSE LOGFILE
	MOVL	GOBUFFA,R8
	MOVSP	0
	MOVSP	1			;CLEAR
	SUBL3	GOBUFFA,R3,R1
	BSBW	GWRITR			;DO IT
	BITB	#GX2TER,GSTAT2
	IF.	*OFF
		$CLOSE	FAB=GOUT_FAB
	ENDIF.
	PUSHL	L20
	CALLS	#1,RRPRFE		;CLOSE OFF OAP
	$EXIT_S
L20:	.LONG	20			;TV OAP STATISTICS ACCUMULATION
;
;	OUTPUT ONLY TO THE TERMINAL
;
GWRITR::
	BITB	#GX2COM,GSTAT2
	IF.	*OFF			;ON TERMINAL
		$QIOW_S	CHAN=SIN_FAB+FAB$L_STV,FUNC=#IO$_WRITEVBLK+IO$M_NOFORMAT,-
			P1=@GOBUFFA,P2=R1
		ON_ERROR GRERR
	ENDIF.
	RSB
;
;	OUTPUT IN BATCH
;	IN	R0 = LL
;		R1 = ADDR
;
GWRITR2::
	BITB	#GX2TER,GSTAT2
	IF.	*OFF			;NOT ON TERMINAL
		MOVL	R1,GOUT_RAB+RAB$L_RBF
		MOVW	R0,GOUT_RAB+RAB$W_RSZ
		$PUT	RAB=GOUT_RAB
		ON_ERROR GRERR
	ENDIF.
	RSB
;
GRERR::	$EXIT_S R0
GBUFS==1000
WRET:	.BLKL	2
SYSINPX:	.LONG	9,.+4
	.ASCII	/SYS$INPUT/
SYSOUTX:	.LONG	10,.+4
	.ASCII	/SYS$OUTPUT/
LOGNX:	.LONG	10,LOGNT
LOGNT:	.BLKB	10
WTT:	.ASCII	/_T/
;
;	GLOBAL PARAMETERS
;
GERRN::	.WORD	0			;ERROR NUMBER
GI1LL::	.BLKW				;LENGTH INPUT IN FIRST BUFFER
GI2LL::	.BLKW				;LENGTH INPUT IN SECOND BUFFER
	.ALIGN	LONG
GIBUFFA:: .BLKL				;TERMINAL INPUT BUFFER ADDR
GIBUF2A:: .BLKL				;SECOND TERMINAL INPUT BUFFER
GOBUFFA:: .BLKL				;TERMINAL OUTPUT BUFFER ADDR
GOPTR::	.LONG	0			;START BYTE NR IN BUFFER FOR OUTPUT
GSBUFFA:: .BLKL				;SCREEN BUFFER ADDR (20*80)
GQBUFFA:: .BLKL				;Q-REGISTER BUFFER ADDR
GIBUF3A:: .BLKL				;INPUT BUFFER NON TERMINAL INPUT
GIBUF4A::	.BLKL
GEBUFFA::	.BLKL			;EXEC FILE BUFFER
GFBUFFA:: .BLKL				;FILE BUFFER ADDR
GFPTR::	.LONG	0			;CURRENT BUFFER PTR, REL BYTE NR FROM 0
GMIDPTR:: .LONG	0			;PTR TO MIDDLE OF LAST DISPLAYED WINDOW
GFCNT::	.LONG	0			;NR OF BYTES IN BUFFER
GHPTR::	.LONG	0			;START BYTE NR OF HOLE IN BUFFER
GHCNT::	.LONG	8192			;NR OF BYTES IN HOLE
GSTAT::	.BYTE	GXCTLL
GXCTLL==^X80				;^L DONE
GXVAL==^X40				;EXPRESSION BEFORE COMMAND PRESENT
GXMORE==^X20				;NEXT PAGE TO BE DISPLAYED
GXRNG==^X10				;RANGE PRESENT BIT
GXIN1==^X08				;ONE BYTE INPUT COMMAND PRESENT
GXSRCH1==^X04				; SPECIAL : SEARCH
GXEXEC==^X02				;   ;E ACTIVE
GXTERM==^X01				;CANCEL COMMAND EXECUTION
GSTAT2::	.BYTE	0
GX2SRC==^X80				;IF ON UPPER/LOWER MATCH
GX2TER==^X40				;INPUT FROM TERMINAL
GX2COM==^X20				;INPUT FROM @COMMAND
GXHP==^X10				;HP-2621 TERMINAL
GEXP1::	.LONG	0			;RESULT OF EXPRESSION EVALUATION
GEXP2::	.LONG				;RESULT OF EXP EVALUATION
GTTAB::	.ADDRESS	GVT100		;DEFAULT
GNONDIS::	.BYTE	24		;NON DISPLAY CHARACTER (BLACK BOX)
GSCT::					;SCAN TABLE
;	1 = CR,HT END OF BUFFER  SCAN
;	2 = NUMERIC STRING SCAN
;	4 = DISPLAY ON SCAN
;	8 = ;SPACE SCAN
	.REPEAT	32
	.BYTE	4			;ALL SPECIAL CHAR
	.ENDR
.=GSCT+13				;CR
	.BYTE	4
.=GSCT+9				;HT
	.BYTE	5
.=GSCT+^A'0'
	.REPEAT	10
	.BYTE	2
	.ENDR				;ASCII  0-9
.=GSCT+^A'I'
	.BYTE	8			;SKIP >
.=GSCT+^A'R'
	.BYTE	8
.=GSCT+^A'S'
	.BYTE	8
.=GSCT+^A'<'
	.BYTE	8
.=GSCT+^A'>'
	.BYTE	8
.=GSCT+^A';'
	.BYTE	8
.=GSCT+128
	.BYTE	1			;SPECIAL END OF LINE
.=GSCT+255
	.BYTE	1			;END OF BUFFER
.=GSCT+256
G64K::	.WORD	-1,0			;64K-1
GCRX==128				;END OF LINE
	.ALIGN	LONG
SIN_FAB:: $FAB	FNM=<TT:>,FOP=UFO
GIN_FAB:: $FAB	FNM=<SYS$INPUT>,FAC=<GET>,MRS=2048
GIN_RAB:: $RAB	FAB=GIN_FAB
GOUT_FAB:: $FAB	FNM=<SYS$OUTPUT>,FAC=<PUT>,MRS=2048,RFM=VAR,RAT=CR,BLS=2048
GOUT_RAB:: $RAB	FAB=GOUT_FAB
	$DVIDEF
	$TT2DEF
WDLIST:	.WORD	4,DVI$_DEVDEPEND2
	.ADDRESS WDEVDEP2
	.LONG	0,0
WDEVDEP2:	.BLKL
WCHKB:	.BLKB
	.PAGE
;	VIA ADDRESS TABEL PER FUNCTIE EEN ENTRIE HL2,CLN
;
;	FUNCTIE:	0 - HOME
;			1 - CLEAR SCREEN
;			2 - ERASE TO END OF LINE
;			3 - CURSOR RIGHT 1 POS
;			4 - CURSOR UP
;			5 - SCROLL UP
;
GHP2621:	.ADDRESS	HP0,HP1,HP2,HP3,HP4,HP5
GVT100:	.ADDRESS	VT0,VT1,VT2,VT3,VT4,VT5
HP0:	.WORD	2
	.BYTE	27,^A'H'
HP1:	.WORD	2
	.BYTE	27,^A'J'
HP2:	.WORD	2
	.BYTE	27,^A'K'
HP3:	.WORD	2
	.BYTE	27,^A'C'
HP4:	.WORD	2
	.BYTE	27,^A'A'
HP5:	.WORD	2
	.BYTE	27,^A'T'
;
;
VT0:	.WORD	3
	.BYTE	27,^A'[',^A'H'
VT1:	.WORD	3
	.BYTE	27,^A'[',^A'J'
VT2:	.WORD	3
	.BYTE	27,^A'[',^A'K'
VT3:	.WORD	3
	.BYTE	27,^A'[',^A'C'
VT4:	.WORD	3
	.BYTE	27,^A'[',^A'A'
VT5:	.WORD	3
	.BYTE	27,^A'[',^A'A'
	.END	TVMAIN			;CHANGED GTVM01 INTO TVMAIN