;*************************** AMUS Program Label ******************************
; Filename: GENERC.M68 Date: 10/9/92
; Category: TDV Hash Code: 443-553-001-420 Version:
; Initials: BOB/AM Name: Bob Rubendunst
; Company: Soft Machines Telephone #: 2173517199
; Related Files: SYS, SYSSYM & TRM.UNV files (supplied by O/S)
; Min. Op. Sys.: AMOSL Expertise Level: INT
; Special:
; Description: THIS IS THE DRIVER TO USE WHEN ACCESSING AM VIA COMM PROGRAM
; WITH GENERIC TERMINAL EMULATION (DYALOG, AUTOLOG, TALKTO, VERSICOMM)
;
;*****************************************************************************
;**************************************************************************;
; ;
; GENERIC TERMINAL TERMINAL DRIVER ;
; ;
;**************************************************************************;
; (C) 1982 Soft Machines.
; written 1/3/83 rpr
; updated 9/29/83 to include traditional echo routines & 1.1 compatible.
; deleted TD$MLT from TDVTYP 6/5/85
; added test for DELeted control characters 8/24/85 rpr
; added code for TRMCHR 7/2/92
; deleted code for TRMCHR, left the return for errant programs with call TCH
; when TD$NEW is set, rather than using TD$TCH. 10/9/92 rpr
; Terminal Driver Communications Area
GENERC: WORD TD$NEW ; terminal attributes
; don't support TCH - we don't what features the remote terminal has, so
; we pass the buck and let the application decide what to do. Since it has
; some context, it can guess better than we can.
RTN ; input Routine
BR OUTPUT ; output Routine
BR ECHO ; echo Routine
BR CRT ; tcrt routine
RTN ; init routine
WORD 0 ; impure size
BYTE 24.,80. ; row/column sizes (164 ^O MAX FOR 4.5 VUE)
LWORD TDVTYP ; special functions
RTN ; fake TCH routine just in case
OUTPUT: LCC #0 ; output in image mode always
RTN
; Special CRT function calls handled here. GENERIC format is a form
; of pass-the-buck, the special call passes the D1 value to the remote
; computer with a prefix of 233 octal.
CRT: TTYI
BYTE 233,0 ; send generic function leadin
RORW D1,#8.
TTY ; the row or high 8 function
RORW D1,#8.
TTY ; the column or low 8 function bits
RTN ; done. let DYALOG process TCRT
; remotely.
;********************
;* ECHO *
;********************
;SPECIAL ECHO PROCESSING IS PERFORMED HERE
;RUBOUTS WILL BACKSPACE AND ERASE THE PREVIOUS CHARACTER
;CONTROL-U WILL ERASE THE ENTIRE LINE BY BACKSPACING AND ERASING
ECHO: CMPB D1,#25 ;CONTROL-U
BEQ CTRLU
CMPB D1,#177 ;RUBOUT
BNE ECHX
;RUBOUTS ARE HANDLED BY THE OLD BACKSPACE-AND-ERASE GAME
;SPECIAL HANDLING MUST BE PERFORMED IF WE ARE RUBBING OUT A TAB
;D6 CONTAINS THE CHARACTER BEING RUBBED OUT
RUBOUT:
CMPB D6,#11 ;WAS IT A TAB?
BEQ RBTB ; YES
CMPB D6,#40 ; other control character?
BLO RBX
;RUBOUT WAS OF A PRINTABLE CHARACTER - QUEUE UP THE BACKSPACE SEQUENCE
KRTG: MOV #3,D3 ;SET CHARACTER COUNT
LEA A6,ERUB ;SET BUFFER ADDRESS
MOV A6,D1 ; INTO D1
TRMBFQ ;QUEUE THE BACKSPACE SEQUENCE
RBX: RTN
;RUBOUT WAS OF A TAB - WE MUST CALCULATE HOW BIG THE TAB WAS AND BACKUP OVER IT
RBTB: CLR D3 ;PRECLEAR D3
MOVW T.POB(A5),D3 ;SET BEGINNING POSITION COUNT
MOV T.ICC(A5),D2 ;SET INPUT CHARACTER COUNT
MOV T.IBF(A5),A6 ;SET INPUT BUFFER BASE
KRTS: DEC D2 ;DONE WITH SCAN?
BMI KRTQ ; YES
MOVB (A6)+,D1 ;SCAN FORWARD CALCULATING POSITION
CMPB D1,#172 ; non-printable ?
BHI KRTS ; yes
CMPB D1,#40 ; non-control ?
BHI KRTI ; yes
; handle control characters
CMPB D1,#11 ; TAB
BEQ KRTT
CMPB D1,#15 ; CR
BEQ KRTC
CMPB D1,#33 ; ALTMODE
BNE KRTS
KRTI: INC D3 ;INCREMENT POSITION FOR ONE CHARACTER
BR KRTS
KRTT: ADD #10,D3 ;ADJUST POSITION FOR TAB
AND #^C7,D3
BR KRTS
KRTC: CLR D3 ;CLEAR POSITION FOR CR
BR KRTS
KRTQ: COM D3 ;CALCULATE NECESSARY BACKSPACES
AND #7,D3
INC D3
MOV #10,D1 ;SET IMMEDIATE BACKSPACE CHARACTER
TRMBFQ ;QUEUE THE BACKSPACES
ECHX: RTN
;ECHO A CONTROL-U BY ERASING THE ENTIRE LINE
CTRLU: TST D6 ;NO ACTION IF NOTHING TO ERASE
BEQ CTUX
CLR D3 ;PRECLEAR D3
MOVW T.POO(A5),D3 ;CALCULATE BACKSPACE NUMBER TO ERASE THE LINE
SUBW T.POB(A5),D3
BEQ ECHX
CMP D3,T.ILS(A5) ;INSURE NOT GREATER THAN TERMINAL WIDTH
BLOS CLUA
MOV T.ILS(A5),D3
CLUA: MOV #10,D1 ;QUEUE UP BACKSPACES
TRMBFQ
ASL D1,#2 ;QUEUE UP SPACES
TRMBFQ
MOV #10,D1 ;QUEUE UP BACKSPACES
TRMBFQ
CTUX: RTN