;*************************** 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 SEARCH SYS SEARCH SYSSYM SEARCH TRM OBJNAM GENERC.TDV ;******************** ;* GENERC * ;******************** TDVTYP=TD$EOL!TD$EOS!TD$LID!TD$SPL!TD$STS ; 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 ERUB: BYTE 10,40,10 END .