;****************************************************************
;*                                                              *
;*            FREEDOM 200 SuperVUE TERMINAL TABLE               *
;*                                                              *
;*                            by                                *
;*                                                              *
;*        ULTRASCIENCE DIVISION OF GIBBS LABORATORIES           *
;*                                                              *
;*              Copyright Ultrascience 1985 (C)                 *
;*                                                              *
;*           1824 WILMETTE AVE, WILMETTE, IL 60091              *
;*                                                              *
;*                       312/256-0080                           *
;*                                                              *
;*              REV. 5.1   LAST UPDATE 01/26/85                 *
;*                                                              *
;****************************************************************
;
; IMPORTANT MESSAGE:
;
; THIS PROGRAM OR ANY PART OF THIS PROGRAM MAY NOT BE COPIED FOR
; PROFIT BY ANYONE OTHER THAN ULTRASCIENCE.    ANYONE WISHING TO
; USE THE PROGRAM MAY DO SO AT NO CHARGE,  PROVIDED  THEY NOTIFY
; ULTRASCIENCE THAT THEY ARE USING THE PROGRAM AND AGREE TO SEND
; INFORMATION ABOUT BUGS OR IMPROVEMENTS TO ULTRASCIENCE.   THIS
; BUG AND IMPROVEMENT INFORMATION WILL BE AVAILABLE TO ALL USERS
; OF THE PROGRAM.
;
;
;  NOTE: The FRE200.SVX generated from assembling this file must be placed
;        in DVR: (DSK0:[1,6]) otherwise SuperVue cannot find it. This file
;        will only work if the FRE200.TDV is version 5.1 or later.
;
;
;  Edit history:
;
;    01-june-84
;       conversion table modified for more logical lay-out.
;
       OBJNAM  FRE200.SVX

       SEARCH  SYS
       SEARCH  TRM

; entry points (jump table)

       BR      FKPROC                  ; function key processing
       BR      FKOPEN                  ; called on SuperVUE entry
       BR      FKCLSE                  ; called on SuperVUE exit

; Function key enable (set translation flag for driver and disable XON/XOFF)
FKOPEN: JOBIDX                          ; index our job
       MOV     JOBTRM(A6),A6           ; get terminal definition pointer
       ORW     #T$XLT,@A6              ; set translation flag
       TTYI                            ; disable XON/XOFF
       BYTE    'N-100,0                ;         handshaking
       RTN                             ; get back to SuperVue

; Reset translation flag and enable XON/XOFF when SuperVue is done.
FKCLSE: JOBIDX                          ; index our job
       MOV     JOBTRM(A6),A6           ; get terminal definition area
       ANDW    #^CT$XLT,@A6            ; clear translation flag
       TTYI                            ; re-enable XON/XOFF
       BYTE    'O-100,0                ;           handshaking
       RTN                             ; back to SuperVue for exit

; on entry
;       D0, D2, D3, D4, D5 and A5 must be preserved
;       A4 points to impure memory
;       A3 points to a routine which inputs one byte from keyboard into D1

; on exit
;       D1 contains input character (possibly translated)

FKPROC: TST     @A4                     ; do we have char waiting for output?
       BEQ     KBDIT                   ; no, get fresh one from keyboard
       MOV     @A4,A1                  ; yes, get pointer
       TSTB    @A1                     ; end of string?
       BEQ     KBDIT                   ; yes, start fresh from keyboard
       MOVB    (A1)+,D1                ; pick up the character
       JMP     UPDPTR                  ; update string pointer

KBDIT:  CALL    @A3                     ; input a byte
       CMPB    D1,#']-100              ; dummy character ?
       BNE     TBLOAD                  ; no, go process valid character
       CLR     D1                      ; kill character
       CLR     @A4                     ; clear out string pointer
       RTN                             ; get back to SuperVue

TBLOAD: LEA     A1,FCXLT                ; index translation table
FLP:    TSTB    @A1                     ; end of table ?
       BEQ     KBDIT                   ; yes, unused function so get another
       CMPB    D1,(A1)+                ; have we found a match ?
       BEQ     XLAT                    ; yes, go do translation
CHKLP:  TSTB    (A1)+                   ;   skip this function
       BNE     CHKLP                   ;      " "   "
       BR      FLP                     ; check next table entry for match

XLAT:   MOVB    (A1)+,D1                ; pick up a translated byte
UPDPTR: MOV     A1,@A4                  ; save updated index to xlat string
       RTN                             ; get back to SuperVue

; TRANSLATION TABLE

FCXLT:
; Pre-labeled keys
       BYTE    321,'F-100,0            ; insert character
       BYTE    327,'D-100,0            ; delete character
       BYTE    305,'B-100,0            ; insert line
       BYTE    322,'Z-100,0            ; delete line
       BYTE    361,'Q-100,0            ; toggle insert char. mode
       BYTE    324,'V-100,0            ; CLR EOL delete word
       BYTE    331,'Y-100,0            ; CLR EOP erase to end of line
       BYTE    311,'S-100,'O-100,0     ; BACKTAB (recall text)
       BYTE    320,'S-100,33,'P,'R,'I,'N,'T,15,0; PRINT (print text)
       BYTE    314,'S-100,33,'P,'R,'I,'N,'T,'?,15,0; Shift PRINT (spooler status)
; Function keys
       BYTE    200,33,0                ; (F1)         Escape
       BYTE    240,33,0                ; (SHIFT F1)   Escape
       BYTE    201,'S-100,'F-100,0     ; (F2)         Reformat
       BYTE    241,'S-100,'.,0         ; (SHIFT F2)   Ruler
       BYTE    202,'S-100,'P-100,0     ; (F3)         Clear Block
       BYTE    242,'S-100,'Z-100,0     ; (SHIFT F3)   Delete Block
       BYTE    203,'S-100,'G-100,0     ; (F4)         Move Block
       BYTE    243,'S-100,'D-100,0     ; (SHIFT F4)   Copy Block
       BYTE    204,'X-100,0            ; (F5)         Next Match
       BYTE    244,'P-100,'P-100,0     ; (SHIFT F5)   Mark
       BYTE    205,'O-100,0            ; (F6)         Concatenate Line
       BYTE    245,'S-100,'C-100,0     ; (SHIFT F6)   Center Line
       BYTE    206,'E-100,0            ; (F7)         Page Last
       BYTE    246,'S-100,'S-100,0     ; (SHIFT F7)   Page Center
       BYTE    207,'T-100,0            ; (F8)         Page Next
       BYTE    247,'R-100,0            ; (SHIFT F8)   Page Previous
       BYTE    210,'N-100,0            ; (F9)         End of Line
       BYTE    250,'U-100,0            ; (SHIFT F9)   Beggining of line
       BYTE    211,'W-100,0            ; (F10)        Next Word
       BYTE    251,'A-100,0            ; (SHIFT F10)  Previous Word

       EVEN
       BYTE    0               ; function table terminator

       END