Google
 

Trailing-Edge - PDP-10 Archives - steco_19840320_1er_E35 - 10,5676/teco/newsrc/techzl.mac
There are 3 other files named techzl.mac in the archive. Click here to see a list.
	SUBTTL	Introduction

; Copyright (c) 1980 Stevens Institute of Technology, Hoboken, New Jersey
; 07030.

; This software may be used and copied provided that this copyright notice
;is included, and provided that copies of all modifications are sent to:
;
;	TECO Project
;	Computer Center
;	Stevens Institute of Technology
;	Castle Point Station
;	Hoboken, New Jersey    07030
;
;
; The information in this software is subject to change without notice
; and should not be construed as a commitment by Stevens Institute of
; Technology.

  ; Search needed universals

	SEARCH	TECUNV		; TECO universal file

  ; Generate the prologue


	TECVER==200		; Major version number
	TECMIN==1		; Minor version number
	TECEDT==1126		; Edit level
	TECWHO==0		; Last editor


	PROLOGUE(HZL,<TECO Hazeltine terminal support>)	; Generate the TITLE and other stuff

	$CODE			; Put into code PSECT
	SUBTTL	Table of Contents

;+
;.pag.lit

;		Table of Contents for TECHZL - Hazeltine terminal support
;
;
;			   Section			      Page
;   1. Introduction . . . . . . . . . . . . . . . . . . . . .    1
;   2. Table of Contents. . . . . . . . . . . . . . . . . . .    2
;   3. Revision History . . . . . . . . . . . . . . . . . . .    3
;   4. Tables
;        4.1.   H-1200. . . . . . . . . . . . . . . . . . . .    5
;        4.2.   H-1500. . . . . . . . . . . . . . . . . . . .    6
;        4.3.   H-2000. . . . . . . . . . . . . . . . . . . .    7
;        4.4.   Hazeltine MOD-1 . . . . . . . . . . . . . . .    8
;   5. Support routines
;        5.1.   Hazeltine MOD-1
;             5.1.1.     XY positioning . . . . . . . . . . .    9
;             5.1.2.     Delete a line feed . . . . . . . . .   10
;             5.1.3.     Delete N lines . . . . . . . . . . .   11
;             5.1.4.     Insert N lines . . . . . . . . . . .   12
;             5.1.5.     Move cost calculation. . . . . . . .   13
;        5.2.   H-1200
;             5.2.1.     Delete a line feed . . . . . . . . .   14
;        5.3.   H1500
;             5.3.1.     XY positioning . . . . . . . . . . .   15
;             5.3.2.     Control U. . . . . . . . . . . . . .   16
;             5.3.3.     Delete a line feed . . . . . . . . .   17
;             5.3.4.     Delete a vertical tab. . . . . . . .   18
;             5.3.5.     Delete a form feed . . . . . . . . .   19
;        5.4.   H2000
;             5.4.1.     XY positioning . . . . . . . . . . .   20
;             5.4.2.     Control U. . . . . . . . . . . . . .   21
;        5.5.   MOD-1
;             5.5.1.     XY positioning . . . . . . . . . . .   22
;             5.5.2.     Control U. . . . . . . . . . . . . .   23
;   6. Low segment. . . . . . . . . . . . . . . . . . . . . .   24
;   7. End of TECHZL. . . . . . . . . . . . . . . . . . . . .   25

;.end lit.pag
;-
	SUBTTL	Revision History
COMMENT	|

1000	Start of this version

1046	By: Nick Bush		On: 16-October-1980
	Add support for Hazeltine 1420 terminal.
	Modules: TECHZL,TECTBL

1051	By: Robert McQueen		On: 12-November-1980
	1420 support needed the delete to end of line routine and the control
	U processing.
	Modules: TECHZL

1056	By: Nick Bush		On: 21-November-1980
	Add routines for Tektronix 4025.
	Also fix an off by one case with Hazeltine 1420's.
	Modules: TECHZL,TECTEK,TECDUM

Start of Version 200A(1126)
|
; Macro to define a word of five characters

	DEFINE	TB(A<.CHNUL>,B<.CHNUL>,C<.CHNUL>,D<.CHNUL>,E<.CHNUL>)
<	BYTE	(7)A,B,C,D,E>

	SUBTTL	Tables -- H-1200


	CRTINI	VHZL1
	CRTENT	BCK,<TB(.CHCNH)>
	CRTENT	DBS,<TB(.CHCNP,.CHCNH)>
	CRTENT	DLF,<PUSHJ P,H12DLF>
	CRTENT	DVT,<PUSHJ P,H12DLF>
	CRTENT	DFF,<PUSHJ P,H12DLF>
	CRTENT	CRB,<TB(.CHCNH)>
	CRTEND
	SUBTTL	Tables -- Hazeltine 1420

CRTINI	VHZ14
 CRTENT	WID,^D79		; Number characters wide
 CRTENT	LIN,^D24		; Number of lines long
 CRTENT	BCK,<TB(.CHBS)>
 CRTENT	SPC,<TB(.CHDLE)>	; Move one space
 CRTENT	DBS,<TB(" ",.CHBS)>	; Destructive backspace
 CRTENT	DLF,<PUSHJ P,H14DLF>	; Routine to delete a line feed
 CRTENT	CRB,<TB(.CHBS)>		; Cancel a rubout
 CRTENT	DEL,<PUSHJ P,H14DEL>	; Delete to end of line
 CRTENT	CTU,<PUSHJ P,H14CTU>	; Control U processing
 CRTENT	ERS,<TB(.CHESC,.CHFS)>	; Erase the screen
 CRTENT DLL,<PUSHJ P,H14DLL>	; Routine to delete n lines
 CRTENT	INL,<PUSHJ P,H14INL>	; Routine to insert n lines
 CRTENT	XYP,<PUSHJ P,H14XY>	; Do XY positioning
 CRTENT	CIL,<MOVX T1,<INSVL.(2,CS$CST)>!<INSVL.($OPICH,CS$OPR)>> ; Cost to insert a line
 CRTENT	CDL,<MOVX T1,<INSVL.(2,CS$CST)>!<INSVL.($OPDCH,CS$OPR)>> ; Cost to delete a line
 CRTENT	CPP,<PUSHJ P,H14CPP>	; Cost to move from point A to B
CRTEND
	SUBTTL	Tables -- H-1500

	CRTINI	VHZL5
	CRTENT	BCK,<TB(.CHCNH)>
	CRTENT	SPC,<TB(" ")>
	CRTENT	DBS,<TB(" ",.CHCNH)>
	CRTENT	DLF,<PUSHJ P,H15DLF>
	CRTENT	DVT,<PUSHJ P,H15DVT>
	CRTENT	DFF,<PUSHJ P,H15DFF>
	CRTENT	CRB,<TB(.CHCNH)>
	CRTENT	CTU,<PUSHJ P,H15CTU>
	CRTEND
	SUBTTL	Tables -- H-2000

	CRTINI	VHZL2
	CRTENT	BCK,<TB(.CHCNH)>
	CRTENT	SPC,<TB(" ")>
	CRTENT	DBS,<TB(" ",.CHCNH)>
	CRTENT	CRB,<TB(.CHCNH)>
	CRTENT	CTU,<PUSHJ P,H20CTU>
	CRTEND
	SUBTTL	Tables -- Hazeltine MOD-1

CRTINI	VHM1
 CRTENT	WID,^D79		; Number characters wide
 CRTENT	LIN,^D24		; Number of lines long
 CRTENT	BCK,<TB(.CHCNH)>
 CRTENT	SPC,<TB(.CHCNP)>	; Move one space
 CRTENT	DBS,<TB(" ",.CHCNH)>	; Destructive backspace
 CRTENT	DLF,<PUSHJ P,HM1DLF>	; Routine to delete a line feed
 CRTENT	CRB,<TB(.CHCNH)>	; Cancel a rubout
 CRTENT	ERS,<TB("~",.CHCBS)>	; Erase the screen
 CRTENT DLL,<PUSHJ P,HM1DLL>	; Routine to delete n lines
 CRTENT	INL,<PUSHJ P,HM1INL>	; Routine to insert n lines
 CRTENT	XYP,<PUSHJ P,HM1XY>	; Do XY positioning
 CRTENT	CIL,<MOVX T1,<INSVL.(2,CS$CST)>!<INSVL.($OPICH,CS$OPR)>> ; Cost to insert a line
 CRTENT	CDL,<MOVX T1,<INSVL.(2,CS$CST)>!<INSVL.($OPDCH,CS$OPR)>> ; Cost to delete a line
 CRTENT	CPP,<PUSHJ P,HM1CPP>	; Cost to move from point A to B
CRTEND
	SUBTTL	Support routines -- Hazeltine MOD-1 -- XY positioning

;+
;.HL HM1XY
;This routine will do the positioning for the Hazeltine MOD-1 terminal.
;.literal
;
; Usage:
;	MOVE	X,X.postion
;	MOVE	Y,Y.postion
;	MOVE	CRT,CRT.block.index
;	PUSHJ	P,@$CRXYP(CRT)
;	(Return)
;
;.end literal
;-

HM1XY:	DMOVE	T1,CURPOS	; Get the current position
	DMOVEM	X,CURPOS	; Save the current position
	SUB	T1+$OFSX,X	; Determine if it is an up/down/right/left by one
	SUB	T1+$OFSY,Y	;  movement
	SKIPE	T1+$OFSX	; Is the X zero ?
	 SKIPN	T1+$OFSY	; Or the Y ?
	  SKIPA			; Yes - Handle differently
	JRST	HM1XYA		; No - Handle normally
	SKIPN	T1+$OFSY	; No change in the Y offset ?
	 JUMPE	X,HM1XYC	; Yes - Only need a CR
	MOVM	T3,T1+$OFSX	; Get the X offset
	SOJE	T3,HM1XYX	; Just X by one
	MOVM	T3,T1+$OFSY	; Get the Y offset
	SOJE	T3,HM1XYY	; Just the Y by one
HM1XYA:	SKIPN	X		; Is this non-zero ?
	 JUMPE	Y,HM1XYH	; Just home it
	ADDX	X," "		; Convert to a position
	ADDX	Y," "		; Convert to a position
	MOVEI	T1,[$STRING(<~_Q^8/Y/^8/X/>)]
	PJRST	SC$STR		; Output the string

; Here to just home the cursor

HM1XYH:	MOVX	T1,<BYTE(7)"~",.CHCNR> ; Get the home string
	PJRST	SC$STR		; And output it

; Here to just output a CR

HM1XYC:	$SAVE	<CH>		; Save the current character
	MOVX	CH,.CHCRT	; Just output a CR
	PJRST	SC$IMG		; . . .

; Here to move in the X direction by one

HM1XYX:	$SAVE	<CH>		; Save Ch
	SKIPG	T1+$OFSX	; Is this negative ?
	 SKIPA	CH,[EXP .CHCNP]	; No - To the right
	  MOVX	CH,.CHCNH	; Yes, To the left
	PJRST	SC$IMG		; Output the string

; Here to move in the Y direction by one

HM1XYY:	SKIPL	T1+$OFSY	; Is this negative ?
	 SKIPA	T1,[BYTE(7)"~",.CHFFD] ; No - Move up
	  MOVX	T1,<BYTE(7).CHLFD> ; Yes, move down
	PJRST	SC$STR		; Output the string
	SUBTTL	Support routines --Hazeltine MOD-1 -- Delete a line feed

;+
;.HL1 HM1DLF
;This routine will send the character string to delete a line feed.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,@$CRDLF(CRT)
;	(Return)
;.end literal
;-

HM1DLF:	MOVX	T1,<BYTE(7)"~",.CHFFD> ; Get the string
	PJRST	SC$STR		; Output the string

	SUBTTL	Support routines -- Hazeltine MOD-1 -- Delete N lines

;+
;.HL1 HM1DLL
;This routine will cause N lines to be deleted from the screen.  It is
;called with a repeat count.
;.literal
;
; Usage:
;	MOVEI	T1,Repeat.count
;	MOVEI	CRT,CRT.block.address
;	XCT	$CRDLL(CRT)
;	(Return)
;
;.end literal
;-

HM1DLL:	$SAVE	<P1>		; Save a register
	MOVE	P1,T1		; Copy the repeat count
HM1DL0:	MOVX	T1,<BYTE (7)"~",.CHCNS> ; Get the string to send
	PUSHJ	P,SC$STR	; Output the string
	SOJG	P1,HM1DL0	; Loop for all lines
	POPJ	P,		; Return to the caller
	SUBTTL	Support routines --Hazeltine MOD-1 -- Insert N lines

;+
;.HL1 HM1INL
;This routine will cause N lines to be inserted on the screen.  It is
;called with a repeat count.
;.literal
;
; Usage:
;	MOVEI	T1,Repeat.count
;	MOVEI	CRT,CRT.block.address
;	XCT	$CRINL(CRT)
;	(Return)
;
;.end literal
;-

HM1INL:	$SAVE	<P1>		; Save a register
	MOVE	P1,T1		; Copy the repeat count into the register
HM1IN0:	MOVX	T1,<BYTE (7)"~",.CHCNZ> ; Get the string for insert line
	PUSHJ	P,SC$STR	; Output the string
	SOJG	P1,HM1IN0	; Loop
	POPJ	P,		; Return
	SUBTTL	Support routines -- Hazeltine MOD-1 -- Move cost calculation

;+
;.hl 1 HM1CPP
; This routine will return the cost of moving the cursor from
;one point to another.
;.b.lit
;
; Usage:
;	MOVE	T1,[XWD X pos,Y pos] ; Source position
;	MOVE	T2,[XWD X pos,Y pos]
;	MOVE	CRT,CRTTYP
;	XCT	$CRCPP(CRT)
;	 (return, T1= cost in characters)
;
;.end literal
;-

HM1CPP:	MOVE	T3,T2		; Get a copy of where we are moving to
	XOR	T3,T1		; Xor together
	JUMPE	T3,.RET0	; Zero if no movement
	TXNN	T3,LH.ALF	; Same X position line ?
	 JRST	HM1CPY		; Yes - Check more
	TXNN	T3,RH.ALF	; Same Y position ?
	 JRST	HM1CPX		; Yes - Check more
	JUMPE	T1,.RET2	; If moving home return cost of one
HM1CPA:	MOVX	T1,4		; Have to type four characters
	POPJ	P,		; Return

; Here if possible same column movement

HM1CPY:	MOVEI	T2,(T2)		; Get just the Y position
	SUBI	T2,(T1)		; Determine if just one line movement
	MOVM	T1,T2		; . . .
	SOJG	T1,HM1CPA	; More than one - use four
	JUMPL	T2,.RET2	; Upwards costs two chars
	JRST	.RET1		; Else return one

; Here if possible same line movement

HM1CPX:	HLRZ	T2,T2		; Get just the X position
	JUMPE	T2,.RET1	; If moving to the beginning of the line
				;  then return one
	HLRZ	T1,T1		; See if moving only one position
	SUBI	T1,T2		; . . .
	MOVM	T2,T1		; Get the magntude
	SOJG	T2,HM1CPA	; If more than one - return four
	JRST	.RET1		; Else return one
	SUBTTL	Support routines -- Hazeltine 1420 -- XY positioning

;+
;.HL H14XY
;This routine will do the positioning for the Hazeltine 1420 terminal.
;.literal
;
; Usage:
;	MOVE	X,X.postion
;	MOVE	Y,Y.postion
;	MOVE	CRT,CRT.block.index
;	PUSHJ	P,@$CRXYP(CRT)
;	(Return)
;
;.end literal
;-

H14XY:	DMOVE	T1,CURPOS	; Get the current position
	DMOVEM	X,CURPOS	; Save the current position
	SUB	T1+$OFSX,X	; Determine if it is an up/down/right/left by one
	SUB	T1+$OFSY,Y	;  movement
	SKIPE	T1+$OFSX	; Is the X zero ?
	 SKIPN	T1+$OFSY	; Or the Y ?
	  SKIPA			; Yes - Handle differently
	JRST	H14XYA		; No - Handle normally
	SKIPN	T1+$OFSY	; No change in the Y offset ?
	 JUMPE	X,H14XYC	; Yes - Only need a CR
	MOVM	T3,T1+$OFSX	; Get the X offset
	SOJE	T3,H14XYX	; Just X by one
	MOVM	T3,T1+$OFSY	; Get the Y offset
	SOJE	T3,H14XYY	; Just the Y by one
H14XYA:	SKIPN	X		; Is this non-zero ?
	 JUMPE	Y,H14XYH	; Just home it
	ADDX	X,"`"		; Convert to a position
	CAXL	X,.CHDEL	; Did it overflow the character set?
	 SUBI	X,<.CHDEL-" ">+1 ; Yes, get it back into the correct range
	ADDX	Y," "		; Convert to a position
	MOVEI	T1,[$STRING(<_Q^8/X/^8/Y/>)]
	PJRST	SC$STR		; Output the string

; Here to just home the cursor

H14XYH:	MOVX	T1,<BYTE(7).CHESC,.CHDC2> ; Get the home string
	PJRST	SC$STR		; And output it

; Here to just output a CR

H14XYC:	$SAVE	<CH>		; Save the current character
	MOVX	CH,.CHCRT	; Just output a CR
	PJRST	SC$IMG		; . . .

; Here to move in the X direction by one

H14XYX:	$SAVE	<CH>		; Save Ch
	SKIPG	T1+$OFSX	; Is this negative ?
	 SKIPA	CH,[EXP .CHDLE]	; No - To the right
	  MOVX	CH,.CHBS	; Yes, To the left
	PJRST	SC$IMG		; Output the string

; Here to move in the Y direction by one

H14XYY:	SKIPL	T1+$OFSY	; Is this negative ?
	 SKIPA	T1,[BYTE(7).CHESC,.CHFF] ; No - Move up
	  MOVX	T1,<BYTE(7).CHLFD> ; Yes, move down
	PJRST	SC$STR		; Output the string
	SUBTTL	Support routines -- Hazeltine 1420 -- Control U processing

;+
;.hl1 H14CTU
;This routine will process the control U.  It will send the escape followed
;by a control O(.CHCNO)
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	XCT	$CRCTU(CRT)
;	(return)
;
;.end literal
;-

H14CTU:	MOVX	T1,<BYTE(7).CHCRT,.CHESC,.CHCNO> ; Get the string to output
	PUSHJ	P,SC$STR		; Output the string
	MOVEI	CH,.CHCRT		; Output the cr
	PJRST	T$OCHR			; Output it
	SUBTTL	Support routines -- Hazeltine 1420 -- Delete to end of line

;+
;.hl1 H14DEL
;This routine will delete to the end of line.
;.literal
;
;	MOVE	CRT,CRT.block.address
;	XCT	$CRDEL(CRT)
;	(Return)
;
;.end literal
;-

H14DEL:	MOVX	T1,<BYTE (7).CHESC,.CHCNO> ; Get the string
	PJRST	SC$STR			; Output the string
	SUBTTL	Support routines --Hazeltine 1420 -- Delete a line feed

;+
;.HL1 H14DLF
;This routine will send the character string to delete a line feed.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,@$CRDLF(CRT)
;	(Return)
;.end literal
;-

H14DLF:	MOVX	T1,<BYTE(7).CHESC,.CHFF> ; Get the string
	PJRST	SC$STR		; Output the string

	SUBTTL	Support routines -- Hazeltine 1420 -- Delete N lines

;+
;.HL1 H14DLL
;This routine will cause N lines to be deleted from the screen.  It is
;called with a repeat count.
;.literal
;
; Usage:
;	MOVEI	T1,Repeat.count
;	MOVEI	CRT,CRT.block.address
;	XCT	$CRDLL(CRT)
;	(Return)
;
;.end literal
;-

H14DLL:	$SAVE	<P1>		; Save a register
	MOVE	P1,T1		; Copy the repeat count
H14DL0:	MOVX	T1,<BYTE (7).CHESC,.CHDC3> ; Get the string to send
	PUSHJ	P,SC$STR	; Output the string
	SOJG	P1,H14DL0	; Loop for all lines
	POPJ	P,		; Return to the caller
	SUBTTL	Support routines -- Hazeltine 1420 -- Insert N lines

;+
;.HL1 H14INL
;This routine will cause N lines to be inserted on the screen.  It is
;called with a repeat count.
;.literal
;
; Usage:
;	MOVEI	T1,Repeat.count
;	MOVEI	CRT,CRT.block.address
;	XCT	$CRINL(CRT)
;	(Return)
;
;.end literal
;-

H14INL:	$SAVE	<P1>		; Save a register
	MOVE	P1,T1		; Copy the repeat count into the register
H14IN0:	MOVX	T1,<BYTE (7).CHESC,.CHSUB> ; Get the string for insert line
	PUSHJ	P,SC$STR	; Output the string
	SOJG	P1,H14IN0	; Loop
	POPJ	P,		; Return
	SUBTTL	Support routines -- Hazeltine 1420 -- Move cost calculation

;+
;.hl 1 H14CPP
; This routine will return the cost of moving the cursor from
;one point to another.
;.b.lit
;
; Usage:
;	MOVE	T1,[XWD X pos,Y pos] ; Source position
;	MOVE	T2,[XWD X pos,Y pos]
;	MOVE	CRT,CRTTYP
;	XCT	$CRCPP(CRT)
;	 (return, T1= cost in characters)
;
;.end literal
;-

H14CPP==HM1CPP		; Use same routine as MOD-1
	SUBTTL	Support routines -- H-1200 -- Delete a line feed

;+
;.HL1 H12DLF
;This routine will send the character string to delete a line feed.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,@$CRDLF(CRT)
;	(Return)
;.end literal
;-

H12DLF:	MOVX	CH,.CHLFD	; Get a line feed
	PJRST	T$OCHR		; And output it
	SUBTTL	Support routines -- H1500 -- XY positioning

;+
;.HL H15XY
;This routine will do the positioning for the H-1500 terminal.
;.literal
;
; Usage:
;	MOVE	X,X.postion
;	MOVE	Y,Y.postion
;	MOVE	CRT,CRT.block.index
;	PUSHJ	P,@$CRXYP(CRT)
;	(Return)
;
;.end literal
;-
	SUBTTL	Support routines -- H1500 -- Control U

;+
;.HL1 H15CTU
;This routine will process the control U in the command parser.  It
;may be called without CRT being set up.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,@$CRCTU(CRT)
;	(Return)
;
;.end literal
;-

H15CTU:	MOVX	T1,<BYTE (7).CHCRT,.CHAL2,.CHCNO> ; Get the string
	PUSHJ	P,SC$STR	; Output the string
	MOVX	CH,.CHCRT	; Get the ending character
	PJRST	T$OCHR		; Output the last character
	SUBTTL	Support routines -- H1500 -- Delete a line feed

;+
;.HL1 H15DLF
;This routine will send the character string to delete a line feed.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,@$CRDLF(CRT)
;	(Return)
;.end literal
;-

H15DLF:	MOVX	T1,<BYTE(7).CHAL2,.CHFFD> ; Get the string to do the delete
	PJRST	SC$STR		; And output it
	SUBTTL	Support routines -- H1500 -- Delete a vertical tab

;+
;.HL1 H15DVT
;This routine will send the character string to delete a vertical tab.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,@$CRDVT(CRT)
;	(Return)
;
;.end literal
;-


H15DVT:	$SAVE	<P1>		; Save P1
	MOVX	P1,4		; Get the repeat count

H15D.0:	PUSHJ	P,H15DLF	; Delete the line feed
	SOJG	P1,H15D.0	; Loop until done
	POPJ	P,		; And return
	SUBTTL	Support routines -- H1500 -- Delete a form feed

;+
;.HL1 H15DFF
;This routine will send the character string to delete a form feed.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,$CRDFF(CRT)
;	(Return)
;
;.end literal
;-

H15DFF:	$SAVE	<P1>		; Save P1
	MOVX	P1,^D8		; Get the repeat count
	PJRST	H15D.0		; And delete the line feeds
	SUBTTL	Support routines -- H2000 -- XY positioning

;+
;.HL H20XY
;This routine will do the positioning for the H-2000 terminal.
;.literal
;
; Usage:
;	MOVE	X,X.postion
;	MOVE	Y,Y.postion
;	MOVE	CRT,CRT.block.index
;	PUSHJ	P,@$CRXYP(CRT)
;	(Return)
;
;.end literal
;-
	SUBTTL	Support routines -- H2000 -- Control U

;+
;.HL1 H20CTU
;This routine will process the control U in the command parser.  It
;may be called without CRT being set up.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,@$CRCTU(CRT)
;	(Return)
;
;.end literal
;-

H20CTU:	MOVX	T1,<BYTE (7),.CHAL2,.CHCNS,.CHDEL>
	PUSHJ	P,SC$STR	; Output the string
	MOVX	T1,.CHCRT	; Output the CR
	PJRST	T$OCHR		; Output the last character
	SUBTTL	Support routines -- MOD-1 -- XY positioning

;+
;.HL MD1XY
;This routine will do the positioning for the MOD-1 terminal.
;.literal
;
; Usage:
;	MOVE	X,X.postion
;	MOVE	Y,Y.postion
;	MOVE	CRT,CRT.block.index
;	PUSHJ	P,@$CRXYP(CRT)
;	(Return)
;
;.end literal
;-

MD1XY:	POPJ	P,		; Return
	SUBTTL	Support routines -- MOD-1 -- Control U

;+
;.HL1 MD1CTU
;This routine will process the control U in the command parser.  It
;may be called without CRT being set up.
;.literal
;
; Usage:
;	MOVE	CRT,CRT.block.address
;	PUSHJ	P,@$CRCTU(CRT)
;	(Return)
;
;.end literal
;-

MD1CTU:	POPJ	P,		; Reurn
	SUBTTL	Low segment

	$IMPURE			; Put in correct place

HZLBEG:!

	LOWVER(HZL,<.-HZLBEG>); Define the version number
	SUBTTL	End of TECHZL

	END			; End of TECHZL