File: VCMHAZ.PG of Tape: Sources/Other/new-22-vista-2
(Source file text) 

	FILE	VCMHAZ - HAZLETINE					/01.16
/	TITLE	VERSION 01.18  --  COPYRIGHT NOTICE
/
/
/		******************************************
/		**					**
/		**	        V I D E O		**
/		**     C H A R A C T E R I S T I C S	**
/		**	       M O D U L E		**
/		**					**
/		**		CODED BY		**
/		**	   C. E. STEUART DEWAR		**
/		**	      MARCH, 1980		**
/		**					**
/		**					**
/		******************************************
/
/
/	COPYRIGHT  (c) 1980 Under BERNE and UNIVERSAL COPYRIGHT LAW
/		By: DEWAR INFORMATION SYSTEMS CORPORATION
/
/	The information in this document  is subject to change without
/	notice  and  should  not be construed as a commitment by DEWAR
/	INFORMATION SYSTEMS  CORPORATION.   DEWAR  INFORMATION SYSTEMS
/	assumes no  responsibility  for  any errors that may appear in
/	this document  other  than providing  corrections for any such
/	errors when brought to the attention of DEWAR INFORMATION SYS-
/	TEMS CORPORATION.
/
/	The SOFTWARE  described  in  this document is furnished to the
/	purchaser under a license for use on a  single computer system
/	and can be copied  (with inclusion of DISC's copyright notice)
/	only for use in such system.
/
/ 	Licensees  of the  SOFTWARE  may make changes to the  software
/ 	with the understanding that the warranty for the SOFTWARE only
/ 	applies  to the original  unmodified version  delivered to the
/ 	licensee.  The fact that licensee may have modified or changed
/ 	the  SOFTWARE  in no way alters or detracts from the copyright
/ 	protection and proprietary rights due to DISC for the SOFTWARE
	EJECT
/
/	VISTA IS A SCREEN ORIENTED TEXT EDITOR FOR A VISUAL DISPLAY
/	TERMINAL.
/
/	FUNCTION KEYS ON A TERMINAL ARE HANDLED THROUGH THE USE OF
/	THIS VIDEO CHARACTERISTICS MODULE (VCM), THAT HANDLES ALL INPUT TO THE
/	MAIN PORTION OF THE VISTA PROGRAM. IN THE SAME WAY, ALL OUTPUT FROM
/	THE VISTA PROGRAM IS ENCODED AND IT IS THE FUNCTION OF THE
/	'VCM' MODULE TO RETRANSLATE THIS OUTPUT INTO A FORM
/	SUITABLE FOR THE SPECIFIC TERMINAL IN USE.
/
/	THE VCM PROVIDED STANDARDLY PROVIDED WITH
/	VISTA HAS BEEN DESIGNED AROUND THE VT52/VT100 TERMINALS SINCE
/	IT IS EXPECTED THAT THESE ARE THE MOST COMMON DISPLAY TERMINALS
/	TO BE FOUND ON PDP8 SYSTEMS.
/
/	IMPLEMENTATION OF OTHER VIDEO DISPLAY TERMINALS IS EXTREMELY
/	SIMPLE SINCE THE MAIN CORE OF THE VISTA PROGRAM IS NEVER
/	CHANGED.
/
/	CONSULT THE 'VISTA' PROGRAM MANUAL FOR DETAILS ON THE USE OF THIS
/				EDITING PROGRAM.
/
/	VIDEO CHARACTERISTICS MODULE IS ALLOCATED 3 PDP8 PAGES FROM
/				06000-06577
	TITLE	SCREEN LAYOUT FORMAT
/
/	IN ORDER TO UNDERSTAND HOW VISTA WORKS IT IS ESSENTIAL TO
/	KNOW THE MEMORY LAYOUT.
/
/	A COPY OF EACH LINE ON THE VIDEO SCREEN IS MAINTAINED IN A
/	FIELD 1 BUFFER CALLED 'SCREEN'. EACH BYTE ON THE SCREEN OCCUPIES
/	ONE WORD IN THIS BUFFER.
/
/	A ROW TABLE IS MAINTAINED WHICH CONSISTS OF A ONE WORD ADDRESS
/	FOR EACH LINE ON THE SCREEN. THE ROW TABLE IS SIMPLY A SET OF
/	POINTERS TO THE FIRST WORD ON EACH LINE. THIS FIRST WORD IS
/	A STATUS/COUNT WORD FOR THE LINE WHICH IMMEDIATELY FOLLOWS.
/
/	THE FUNCTION OF THE ROW TABLE IS TO AVOID MOVING THE SCREEN MEMORY
/	AROUND DURING INSERTION AND DELETION OF LINES. IN THIS CASE, ONLY
/	THE ROW TABLE ITSELF HAS TO BE ADJUSTED. FOR THIS REASON, THE
/	POINTER ADDRESSES IN THE ROW TABLE ARE NOT NECESSARY IN ANY ORDER.
/
/	THE FORMAT OF THE STATUS/COUNT WORD FOR EACH LINE IS:
/
/		ABC DEE EEE EEE
/
/	A = 0	CURRENT LINE EXISTS
/	    1	CURRENT LINE DOES NOT EXIST (AT END OF FILE OR UNESTABLISHED)
/
/	B = 0	LINE ENDS WITH CR/LF
/	    1	LINE ENDS WITHOUT CR/LF
/
/	C = 0	LINE NOT MARKED
/	    1	LINE MARKED AS PART OF BLOCK (FOR SAVE/DELETION)
/
/	D = 0	CURRENT LINE HAS NOT BEEN MODIFIED ON THIS EDIT
/	    1   HAS BEEN MODIFIED ON THIS EDIT CYCLE
/
/	EEE..E	LINE LENGTH IN THE RANGE 0-255
/
/
/	END OF FILE IS INDICATED BY 'BOF' FLAG BEING SET AND BY ROWS
/	WITH A BIT 0 STATUS OF 1.
/
/	THERE ARE TWO ONE-BLOCK BUFFERS 'FEEDING' THE SCREEN WINDOW:
/	THE ABOVE SCREEN BUFFER (ABUF) AND THE BELOW SCREEN BUFFER
/	(BBUF). THESE BUFFERS ARE IN OS/8 FORMAT AND ARE READ AND
/	WRITTEN FROM THE OS/8 DEVICE AS NEEDED.
/
	TITLE	IMPORTANT GLOBAL CELLS
/
/	YOU MAY NEED TO BE AWARE OF THE FOLLOWING IMPORTANT CELLS AND
/	ENTRY POINTS IN VISTA:
/
/	NAME		FUNCTION
/
/	COL		CONTAINS BINARY COLUMN POSITION OF CURSOR IN RANGE
/			0-(N-1). NOTE: POSITION IS NOT GUARANTEED FOR ALL
/			POSSIBLE VCM FUNCTIONS (BUT IT IS FOR ALL IMPORTANT
/			ONES).
/
/	ROW		CURRENT POINTER INTO THE ROW TABLE.
/
/	ROWTAB		ADDRESS OF FIRST ROW IN ROW TABLE
/	LASTROW		ADDRESS OF LAST ROW IN ROW TABLE
/	ROWSIZ		COUNT OF NUMBER OF ROWS IN ROW TABLE (1-N)
/	COLSIZ		COUNT OF NUMBER OF COLUMNS ON SCREEN
/	PKBD		POINTER TO CONSOLE INPUT ROUTINE
/	PSCR		POINTER TO CONSOLE OUTPUT ROUTINE
/	XT/XT2		TWO CELLS ON PAGE 0 RESERVED FOR USE BY 'VCM'
/			MODULE. VCM CAN ALLOCATE MORE PAGE 0 STORAGE
/			FROM THE ADDRESS XT2+1 UP TO 177 ON PAGE 0.
/			CAUTION: SPR'S FOR VISTA MAY REQUIRE THE USE OF
/			PAGE 0 CELLS (STARTING BACK FROM 177), SO USE
/			PAGE 0 CELLS ONLY WHEN ABSOLUTELY NECESSARY.
/
/	PRLINE		SUBROUTINE TO OUTPUT A FULL ROW ON THE SCREEN.
/			CAN ONLY BE CALLED FROM VCM IF VCM FILE ITSELF
/			PROTECTS AGAINST A RECURSIVE CALL BY SAVING THE
/			RETURN ADDRESSES IN 'PRLINE' AND 'XTER'.
/
/			THIS ROUTINE WILL BE NEEDED FOR TERMINALS THAT ARE
/			CAPABLE OF PERFORMING INSERT AND DELETE LINE IN LOCAL
/			MODE (SEE VCM52 FOR AN EXAMPLE OF CALLING 'PRLINE')
	TITLE	ASSEMBLY INSTRUCTIONS
/
/	THIS VCM FILE IS TO BE ASSEMBLED WITH THE GLOBAL SYMBOL
/	DICTIONARY FROM VISTA:
/
/	.R PAGE8
/	*VCM,LPT:<VISTA.SD,VCM/I
/
/	OR IF YOU HAVE TO USE PAL8
/
/	.R PAL8
/	*VCM,LPT:<VISTA.GL,VCM
/
/	WHERE FOR PAL8, 'VISTA.GL' IS THE PAGE8 SYMBOL DIRECTORY CONVERTED
/	INTO PAL8 COMPATIBLE FORMAT.
/
LEADIN	EQU	0376		LEAD IN CODE FOR HAZELTINE 1500 (TILDE)
ESC	EQU	0233		ESCAPE CODE
XT3	EQU	XT2+1		SCRATCH CELL
XCOL	EQU	XT3+1		'GUARANTEED' CORRECT SCREEN COLUMN
/
	ORG	KIO		KEYBOARD I/O
	DSEC
	AFIELD	BUF		MAIN ASSEMBLY DATA FIELD
/
/	ALL FOLLOWING ADDRESSES ARE ABSOLUTELY REFERENCED BY VISTA
/	AND CANNOT BE CHANGED UNLESS VISTA ITSELF IS ALTERED.
/
KIO	DC	0		KEYBOARD I/O ENTRY
	JMPI	PXIN		CONTINUE NOW
/
SIO	DC	0		SCREEN I/O ENTRY POINT
	JMPI	PXOUT		CONTINUE
/
VMCMNT	DC	-'/		MINUS ASCII CODE OF COMMENT FIELD CHARACTER
VMTAG	DC	-',		MINUS ASCII CODE OF TAG FIELD DELIMITER
VROWS	DC	27		NUMBER OF ROWS ON VIDEO SCREEN
VCOLS	DC	74		NUMBER OF COLUMNS ON VIDEO SCREEN
VAUCOL	DC	64		STARTING COLUMN FOR AUDIT TRAIL OF VERSION #'S
VSTAT	DC	02000		NO XON/XOFF, CTRL/O ALLOWED
/
/	### END OF FIXED ADDRESS SECTION UTILIZED BY VISTA PROGRAM ###
/
XKIO	JMPI	KIO		HERE TO EXIT FROM 'KIO'
XSIO	JMPI	SIO		HERE TO EXIT FROM 'SIO'
PXIN	DC	XIN		POINTER TO 'XIN'
PXOUT	DC	XOUT		POINTER TO 'XOUT'
	TITLE	KEYBOARD LEADIN TRANSLATION TABLE
/
/ VISTA INTERNAL CODE FOR TWO-CHARACTER SEQUENCES WHERE FIRST CHARACTER
/ IS ESCAPE, AND SECOND CHARACTER IS A DECIMAL DIGIT.
/
ESCDIG	DC	Y:QUIT		0	RETURN TO OS/8
	DC	Y:ROWINS	1	INSERT LINE			/01.16
	DC	Y:TRANSP	2	TRANSPARENT ENTRY
	DC	Y:DOSCRN	3	RESTORE SCREEN
	DC	Y:TABL		4	TAB LEFT
	DC	Y:UNMKROW	5	UNMARK LINE
	DC	Y:DISMOD	6	DISPLAY MODIFIED LINES
	DC	0		7	(UNUSED)
	DC	Y:TRUNCF	8	TRUNCATE FILE
	DC	Y:DELSCR	9	DELETE SCREEN
/ 									/01.16
/ VISTA INTERNAL CODE FOR TWO-CHARACTER SEQUENCE OF ESCAPE AND THEN	/01.16
/ AND ALPHABETIC CHARACTER						/01.16
/ 									/01.16
ESCALPH	DC	Y:NEWCMD	A	ENTER COMMAND MODE		/01.16
	DC	Y:SCRLUP	B	SCROLL UP			/01.16
	DC	Y:SCRLDN	C	SCROLL DOWN			/01.16
	DC	Y:PAGEUP	D	PAGE UP				/01.16
	DC	Y:PAGEDN	E	PAGE DOWN			/01.16
	DC	Y:INSBLK	F	INSERT BLOCK			/01.16
	DC	Y:PICKUP	G	PICKUP TEXT			/01.16
	DC	Y:PUTDN		H	PUTDOWN				/01.16
	DC	Y:TOFC		I	TOP OF FILE			/01.16
	DC	Y:BOFC		J	BOTTOM OF FILE			/01.16
/
/	VISTA INTERNAL CODE FOR ALL CONTROL CHARACTERS POSSIBLE ON THE
/	KEYBOARD.
/									/01.16
ITRAN	DC	0		CTRL/NULL
	DC	Y:WLEFT		CTRL/A	WORD LEFT
	DC	Y:MKROW 	CTRL/B	MARK LINES
	DC	Y:CDOWN		CTRL/C	CURSOR DOWN
	DC	Y:HOME		CTRL/D	HOME CURSOR
	DC	Y:CUP 		CTRL/E	CURSOR UP
 	DC	Y:CRIGHT	CTRL/F	CURSOR RIGHT
	DC	Y:WRIGHT 	CTRL/G	WORD RIGHT
	DC	Y:BKDEL		CTRL/H	BACKSPACE DELETE
	DC	Y:TABR		CTRL/I	TAB RIGHT
	DC	Y:INSTOG	CTRL/J	INSERT CHARACTER TOGGLE
	DC	Y:DELWD		CTRL/K	DELETE WORD
	DC	Y:DELEWD	CTRL/L	DELETE TO END OF WORD
	DC	Y:RETURN	CTRL/M	RETURN CODE
	DC	Y:DOSCRN	CTRL/N	RESTORE SCREEN
	DC	0		CTRL/O	(RESERVED FOR SCREEN BLANKING
	DC	Y:CASE		CTRL/P	INVERT CASE OF WORD
	DC	Y:SEARCH	CTRL/Q	SEARCH
	DC	Y:RCONT		CTRL/R	CONTINUOUS REPLACE
	DC	Y:CLEFT		CTRL/S	CURSOR LEFT
	DC	Y:RSTEP		CTRL/T	STEP REPLACEMENT
	DC	Y:DLETLN	CTRL/U	DELETE LINE
	DC	Y:CEOL  	CTRL/V	CURSOR TO END OF LINE
	DC	Y:AWAY		CTRL/W	CURSOR TO AWAY POSITION
	DC	Y:CSTART	CTRL/X	CURSOR TO START OF LINE
	DC	Y:CNEXTL	CTRL/Y	CURSOR TO START OF NEXT LINE
	DC	Y:XEDIT		CTRL/Z	CLOSE FILE
	DC	0		CTRL/[
	DC	0		CTRL/\
	DC	0		CTRL/]
	DC	0		CTRL/^
	DC	0		CTRL/_
	TITLE	SCREEN TRANSLATION TABLE
/
/	DISPATCH TABLE FOR OUTPUT FUNCTION CODES
/
XTAB	DC	Z:POS		0 POSITION CURSOR
	DC	Z:INIT		1 INITIALIZE SCREEN
	DC	Z:SPAC		2 PAD CODE FOR TABS
	DC	Z:CRLF		3 CR/LF TYPE SEQUENCE
	DC	Z:EOL		4 ERASE TO END OF LINE
	DC	Z:CLSC		5 CLEAR SCREEN AND HOME CURSOR
	DC	Z:INS		6 INSERT LINE
	DC	Z:DEL		7 DELETE LINE
	DC	Z:BEL		8 RING BELL
	DC	Z:BKSP		9 BACKSPACE
	DC	Z:SPV1		10 SPECIAL VIDEO MODE 1
	DC	Z:SPV2		11 SPECIAL VIDEO MODE 2
	DC	Z:NMV		12 NORMAL VIDEO MODE
	DC	Z:END		13 NO-CRLF AT END OF LINE GRAPHIC
	DC	Z:RTN		14 RETURN VDT TO INITIAL STATE
	DC	Z:CTRL		15 CONTROL CODE-NON-DISPLAYABLE
	TITLE	TRANSLATION ROUTINES
/
	ISEC	0
/
/	ENTER HERE TO GET NEXT CHARACTER FROM CONSOLE TERMINAL.
/	ALL CHARACTERS ARE RETURNED IMMEDIATELY AND DIRECTLY
/	EXCEPT FOR THE ESCAPE/CONTROL CODES WHICH ARE USED TO IMPLEMENT
/	ALL FUNCTIONS.
/
XIN	CLA			(IN CASE IGNORING ESCAPE SEQUENCE)
	JMSI	PKBD		GET CHARACTER FROM KEYBOARD
	TAD	=-ESC		TEST FOR ESCAPE CODE
	SNA			SKIP IF NOT
	JMP	0F		HANDLE ESCAPE CODE
	TAD	=ESC-0240	TEST FOR CONTROL CODE
	SPA			SKIP IF NOT CONTROL CODE
	JMP	1F		ELSE HANDLE CONTROL CODE
	TAD	=0240		RESTORE NORMAL CHARACTER
	JMP	XKIO		RETURN DIRECTLY TO VISTA
/
/	HERE ON ESCAPE CODE.
/	NEXT CHARACTER MUST BE:
/		A-J (UPPER/LOWER CASE)					/01.16
/		DIGIT FROM 0-9
/
0H	JMSI	PKBD		READ CHARACTER AFTER ESCAPE CODE
	TAD	=-'9-1		TEST FOR DIGIT FROM 0-9			/01.16
	CLL			...
	TAD	='9-'0+1	...
	SZL			SKIP IF NOT A DIGIT FROM 0-9		/01.16
	JMP	DODIG		HANDLE ESCAPE/ DIGIT			/01.16
	TAD	='0		RESTORE CHARACTER			/01.16
	AND	=040.XO.-1	REMOVE POSSIBLE UPPER/ LOWER CASE BIT	/01.16
	TAD	=-'J-1		TEST FOR A-J				/01.16
	CLL			...					/01.16
	TAD	='J-'A+1	...					/01.16
	SNL			SKIP IF A-J HERE			/01.16
	JMP	XIN		IGNORE INVALID ESCAPE SEQUENCE		/01.16
/ 									/01.16
	TAD	=ESCALPH-ESCDIG	INDEX ALPHA TABLE			/01.16
DODIG	TAD	=ESCDIG-(ITRAN+040) INDEX TABLE				/01.16
/
/	HERE ON CONTROL CODE.
/
1H	TAD	=ITRAN+040	...
	DCA	XT		...
	CDF	%*
	TADI	XT		LOAD VISTA INTERNAL CODE
	CDF	BUF		RESET TO MAIN BUFFER FIELD
	SZA			IS THIS AN UNDEFINED CODE?
	JMP	XKIO		NO: SO RETURN IT IN THE AC
	JMP	XIN		YES: SO STRIP COMPLETELY
	TITLE	VCM OUTPUT SECTION					/01.16
/
/	ENTER HERE WITH CHARACTER TO BE OUTPUT TO THE SCREEN
/
XOUT	DCA	XT		SAVE CHARACTER FOR A MOMENT
	TAD	XT		REGET CHARACTER
	TAD	=-0200		LOWEST ASCII CODE
	SPA			SKIP IF DISPLAYABLE CODE
	JMP	1F		ELSE OFF FOR FUNCTION CODE
	TAD	=0200		NORMAL CODE: RESTORE IT
	INC	XCOL		COUNT COLUMN POSITION ON SCREEN
CHOUT	JMSI	PSCR		OUTPUT BACK TO SCREEN
/
/ HERE TO RETURN TERMINAL TO NORMAL MODE BEFORE EXITING VISTA
/
Z:RTN	JMP	XNULL		NOTHING FOR RETURNING TERMINAL
/
/ COME HERE FOR INITIALIZATION OF THE TERMINAL
/
Z:INIT	DCA	XCOL		MARK AT COLUMN 0
	JMP	XNULL		ALL DONE HERE
/
/ COME HERE TO IGNORE CHARACTER
/
XNULL	JMP	XSIO		ALL DONE HERE
/
/ HERE FOR VIDEO MODES. USE BACKGROUND FOR VIDEO ENHANCEMENT
/
Z:SPV1	NOP			(SAME THING FOR BOTH VIDEO MODES)
Z:SPV2	TAD	='Y-'O		USE BACKGROUND FOR SPECIAL VIDEO
Z:NMV	TAD	='O		SET FOREGROUND FOR NORMAL VIDEO
ESCX	JMS	DOESC		
	JMP	XSIO		ALL DONE HERE
/	
/	HERE ON END OF LINE CODE- MUST DISPLAY SOME KIND OF SPECIAL
/	CHARACTER ON SCREEN.
/
Z:END	TAD	='_-'@		CHARQACTER FOR END OF LINE
Z:CTRL	TAD	='@		CHARACTER FOR CONTROL CHARACTER
	INC	XCOL		ACCOUNT FOR THE CHARACTER
	JMP	CHOUT		...
/
/	HERE ON FUNCTION CODE: INDEX DISPATCH TABLE
/
1H	TAD	=XTAB+0200	INDEX DISPATCH TABLE
	DCA	XT2		...
	CDF	%*		TO CURRENT FIELD
	TADI	XT2		GET ADDRESS
	CDF	BUF		BACK TO BUFFER FIELD
	DCA	XT2		...
	JMPI	XT2		PASS CONTROL NOW
	EJECT
/
/	HERE FOR BACKSPACE/BELL/TAB AND PAD FUNCTIONS
/
Z:BEL	TAD	=0207		CONTROL/G DOES BELL FUNCTION
	JMP	CHOUT
/
Z:BKSP	LDI	-1		BACKSPACE DECREMENTS COLUMN
	TAD	XCOL		...
	DCA	XCOL		...
	TAD	=0210		CONTROL/H DOES BACKSPACE FUNCTION
	JMP	CHOUT		...
/
Z:SPAC	TAD	=' 		TAB/PAD CODE BECOMES A SPACE CODE
	INC	XCOL		ACCOUNT FOR COLUMN SHIFT
	JMP	CHOUT		...
/
/ HERE FOR ERASE TO END OF LINE. SINCE THERE IS NO NATIVE FUNCTION ON THE
/ HAZELTINE TERMINAL, WE WILL HAVE TO GENERATE SPACES TO THE END OF THE
/ CURRENT LINE.								/01.16
/ 									/01.16
/ NOTE:		VERSION 01.09 OF VISTA DOES NOT OPTIMIZE THE ERASE TO	/01.16
/ 		END OF LINE FUNCTION. IN PARTICULAR, THE ROW AND COLUMN	/01.16
/ 		IN 'ROW' AND 'COL' ARE NOT GUARANTEED TO MATCH THE	/01.16
/ 		SCREEN AT THE TIME THE 'EOL' FUNCTION IS ISSUED. BEST	/01.16
/ 		BET WITH HAZELTINE THEREFORE IS TO ISSUE SPACES TO THE	/01.16
/ 		END OF THE SCREEN (ENSURES ALL CHARACTERS REMOVED) AND	/01.16
/ 		THEN FOLLOW WITH BACKSPACES TO RESTORE CURSOR POSITION.	/01.16
/ 		(NOT IDEAL, BUT AT 9600 BAUD ITS ACCEPTABLE)		/01.16
/
Z:EOL	TADX	VCOLS		GET FULL COLUMN WIDTH
	CMA IAC			SUBTRACT FROM
	TAD	XCOL		CORRECT SCREEN COLUMN POSITION
	DCA	XT		SAVE COUNT
	TAD	XT		COPY COUNT
	DCA	XT2		...
	JMP	4F		START AT END OF LOOP IN CASE NULL
/
/ LOOP HERE GENERATING SPACE CODES.
/
3H	TAD	=' 		GENERATE A SINGLE SPACE
	JMSI	PSCR		...
4H	ISZ	XT		MORE TO GENERATE?
	JMP	3B		YES: SO LOOP ON IT
	JMP	6F		CONTINUE INTO 2ND LOOP NOW
/
5H	TAD	=0210		DO BACKSPACE FUNCTION
	JMSI	PSCR		...
6H	ISZ	XT2		MORE TO GO?
	JMP	5B		YES: CONTINUE
	JMP	XSIO		ALL DONE HERE
/
/	DELETE LINE/INSERT LINE AND CLEAR SCREEN.
/
Z:CLSC	TAD	='\-'Z		DO LEADIN/CTRL-\ FOR CLEAR SCREEN
Z:INS	TAD	='Z-'S		LEADIN/CTRL-Z INSERTS LINE
Z:DEL	TAD	='S-64		LEADIN/CTRL-S DELETES LINE
	JMS	DOESC		...
	DCA	XCOL		ALL FUNCTIONS RESET COLUMN TO 0
/
/ MERGE HERE FROM POSITION CURSOR COMMAND FOR TIMING DELAY
/
HDELAY	TAD	=-8		FOLLOW WITH 8 NULLS FOR TIMING
	DCA	XT		...
1H	TAD	=0377		USE DELETE FOR NULL CODE
	JMSI	PSCR		...
	ISZ	XT		MORE NULLS?
	JMP	1B		YES: DO THEM
	JMP	XSIO		NO: ALL DONE HERE
/
/	OUTPUT LEADIN SEQUENCE, CHAR IN AC
/
DOESC	SUB
	DCA	XT		SAVE CHARACTER
	TAD	=LEADIN		OUTPUT LEADIN CODE
	JMSI	PSCR		...
	TAD	XT		REGET CHARACTER
	JMSI	PSCR		...
	RET	DOESC		ALL DONE HERE
/
/	HERE FOR CR/LF ON SCREEN.
/
Z:CRLF	TAD	=CR		CARRIAGE RETURN
	JMSI	PSCR		...
	DCA	XCOL		RESET COLUMN TO 0
	TAD	=LF		LINE FEED
	JMP	CHOUT		...
	EJECT
/
/	HERE FOR POSITION CURSOR COMMAND. IN THIS CASE, WE POSITION
/	TO THE ROW AND COLUMN SPECIFIED BY 'ROW' AND 'COL'
/
/	HAZELTINE TERMINAL REQUIRES:
/
/		LEADIN	CTRL/Q	COL	ROW	(THEN 5-6MSEC DELAY)
/
Z:POS	TAD	COL		SET FOR VISTA COLUMN
	DCA	XCOL		AS ACTUAL COLUMN
Z:POS2	TAD	ROWTAB		START OF ROW TABLE
	CMA IAC			NEGATE AND SUBTRACT FROM
	TAD	ROW		CURRENT ROW POSITION
	TAD	=0200		BUILD ASCII CODE FOR LINE POSITION
	DCA	XT3		SAVE FOR A MOMENT
	TAD	='Q-64		START OF POSITIONING SEQUENCE
	JMS	DOESC		START THE SEQUENCE
	TAD	XCOL		GET THE BINARY COLUMN POSITION
	TAD	=0200		BUILD ASCII CODE FOR COLUMN
	JMSI	PSCR		OUTPUT THAT
	TAD	XT3		GET ROW POSITION
	JMSI	PSCR		OUTPUT THAT
	JMP	HDELAY		END UP NOW WITH DELAY LOOP