;  MODULE:  VFILERSC
;  AUTHOR:  RICHARD CONN
;  VERSION:  1.0
;  DATE:  18 July 83
;  PREVIOUS VERSIONS:  None
;  NOTE:  This is the patch file for VFILER.  It allows the user to install
;	his terminal-specific function routines.  This file is to be assembled
;	by the user and integrated into VFILER.COM via DDT.  Once complete,
;	VFILER must be installed further via GENINS.
;

;
;  An entry point to send the character in A to the screen is provided at
;  location 300H in VFILER.  No registers are affected by calling the
;  routine at this address.
;
TYPE	EQU	300H

;
;  Special ASCII Characters Used
;
ESC	EQU	1BH
CTRLZ	EQU	'Z'-'@'
UP	EQU	'K'-'@'		; user-defined cursor up
DOWN	EQU	'V'-'@'		; user-defined cursor down
RIGHT	EQU	'L'-'@'		; user-defined cursor right
LEFT	EQU	'H'-'@'		; user-defined cursor left
SCR$FOR	EQU	'F'-'@'		; user-defined screen forward
SCR$BAC	EQU	'A'-'@'		; user-defined screen backward

;
;  The following JUMP Table MUST be located at 200H in VFILER.  This accesses
;  the required routines.
;
	ORG	200H		; base page for screen routines
	JMP	CLS		; clear screen on CRT
	JMP	GOTOXY		; position cursor at row/col
	JMP	EREOL		; erase to end of line

;
;  The following table is copied by VFILER on startup to define the special
;  characters generated by arrow keys on the user's terminal for cursor
;  movement.  This table is for the TVI 950.  If you do not wish to set
;  additional definitions, set all of these values to '@'.
;
	DB	UP,DOWN,RIGHT,LEFT	;cursor up, down, right, left
	DB	SCR$FOR,SCR$BAC		;screen forward, backward

;
; Screen Routines (for TVI 950)
;   The following are sample routines implemented for the TVI 950.
;   NO REGISTERS are to be affected by these routines except for the PSW.
;   The GOTOXY routine is the only one which receives passed parameters.
; HL is used to pass them, and the value range is 1-24 for H and 1-80 for L.
;

;  clear screen
CLS:
	MVI	A,CTRLZ		;clear screen
	JMP	TYPE

;  position cursor (H=row, L=col) where 1,1=upper left
GOTOXY:
	MVI	A,ESC		;ESCape
	CALL	TYPE
	MVI	A,'='
	CALL	TYPE
	MOV	A,H		;row
	ADI	' '
	CALL	TYPE
	MOV	A,L		;column
	ADI	' '
	JMP	TYPE

;  erase to end of line (output 50 spaces if you don't have this function)
EREOL:
	MVI	A,ESC		;ESCape
	CALL	TYPE
	MVI	A,'T'
	JMP	TYPE

	END
