;  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