.TITLE RUBOUT - RUBOUT AND CTRL U PROCESSING FOR TECOIO .IDENT "X0204" ; ; COPYRIGHT (C) 1976 BY DIGITAL EQUIPMENT CORPORATION, ; MAYNARD, MASSACHUSETTS ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE IN- ; CLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH ; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE ; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DIGITAL. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITH- ; OUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ; DIGITAL EQUIPMENT CORPORATION. ; ; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR ; THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS ; NOT SUPPLIED BY DIGITAL. ; ; ANDREW C. GOLDSTEIN 25-MAR-77 10:46 .SBTTL CONTROL STRINGS ; ; THE FOLLOWING ARE DESCRIPTORS AND CONTROL STRINGS TO HANDLE CRT STYLE ; RUBOUTS. THEY APPEAR IN PAIRS FOR VT5X AND VT05 TYPE TERMINALS. WE TELL ; THE DIFFERENCE BY THE FACT THAT THE LINE WIDTH ON A VT05 IS 72 CHARACTERS ; AND IS 80 ON VT5X. ; ; NOTE THAT MANY OF THE CHARACTERS HAVE THE 200 BIT SET. THIS INHIBITS THE ; OUTPUT FILTERING IMPOSED BY THE TTY DRIVER. THE PRESENCE AND ABSENCE OF ; THIS BIT IN THE VARIOUS CHARACTERS IS CRITICAL TO KEEP THE TTY DRIVER'S ; TAB STOPS IN SYNC. ; .PSECT PURE,RO,D .ENABL LSB EEOL: .WORD 3,10$ ; ERASE TO END OF LINE .WORD 4,20$ CURSUP: .WORD 2,30$ ; CURSOR UP .WORD 5,40$ 10$: .BYTE 015,233,'K+200 ; EEOL - VT5X: 20$: .BYTE 015,236,000,000 ; EEOL - VT05: 30$: .BYTE 233,'A+200 ; CURSUP - VT5X: 40$: .BYTE 232,000,000,000,000 ; CURSUP - VT05: NORMAL: .BYTE 210,240,010,210,240,010 ; NORMAL SEQUENCE - , APPEARING ; TWICE TO DO 2 CHARACTER POSITIONS ; ; CHARACTER COMPARE TABLE ; CHRTAB: .BYTE SPACE,AM,CR,BS,LF,VT,FF .EVEN .DSABL LSB .SBTTL RUBOUT ROUTINE ;+ ; ; *** - DELCHR DELETE CHARACTER FROM TERMINAL LINE ; ; THIS ROUTINE PROCESSES A RUBOUT TYPED BY THE USER. IN NORMAL MODE, THE ; LAST CHARACTER IN THE LINE IS SIMPLY ECHOED. IN CRT MODE, THE CHARACTER IS ; MADE TO DISAPPEAR. MOST CHARACTERS ARE DELETED BY THE BACKSPACE-SPACE- ; BACKSPACE SEQUENCE. TABS ARE DONE BY ERASING AND RETYPING THE LINE. VERTICAL ; MOTION CHARACTERS ARE HANDLED WITH CURSOR UP COMMANDS. ; ; INPUTS: ; ; R0 = CHARACTER TO DELETE ; ; OUTPUTS: ; ; R0 - R4 CLOBBERED ; ;- .PSECT CODE,RO,I .ENABL LSB DELCHR:: BIT #ET.CRT,ETYPE(R5) ; CHECK IF CRT MODE BEQ 80$ ; BRANCH IF NOT MOV #NORMAL,R3 ; GET NORMAL RUBOUT STRING MOV #3,R4 ; AND COUNT TO DO ONE CHARACTER MOV #CHRTAB,R2 ; POINT TO CHARACTER TABLE CMPB R0,(R2)+ ; IF THE CHAR IS A NORMAL GRAPHIC BHIS 20$ ; THAT'S IT CMPB R0,(R2)+ ; IF ALT MODE BEQ 20$ ; ALSO SINGLE CHARACTER ASL R4 ; ASSUME DOUBLE CHARACTER SEQUENCE CMPB R0,(R2)+ ; SEE IF CURSOR MOTION CHARACTER BHI 20$ ; HI MEANS NOT CMPB R0,(R2)+ ; BLO 20$ ; AND LO MEANS NOT MOV #1,R1 ; HANDLE VERTICAL MOTION - ASSUME 1 CMPB R0,(R2)+ ; CHECK FOR LINE FEED BEQ 10$ ; YES - UP ONE LINE MOV #4,R1 ; ASSUME 4 LINES FOR VERTICAL TAB CMPB R0,(R2)+ ; BEQ 10$ ; BRANCH IF YES ASL R1 ; ASSUME 8 LINES FOR FORM FEED CMPB R0,(R2)+ ; IF NONE OF THE ABOVE BNE 50$ ; REPRINT THE LINE ; ; TO HERE TO DO CURSOR UP SEQUENCES ; 10$: MOV #CURSUP,R3 ; GET CURSOR UP DESCRIPTOR CALL PRISEQ ; OUTPUT ONE CURSOR UP SOB R1,10$ ; LOOP FOR NUMBER OF LINES RETURN ; ; TO HERE TO BACKSPACE AND ERASE A CHARACTER OR TWO ; 20$: CMP TABCNT,TTLNSZ ; SEE IF WE ARE AT THE EDGE OF THE SCREEN BEQ 50$ ; BRANCH IF YES - REPRINT LINE CMP R4,#3 ; SEE IF ERASING 1 OR 2 CHARS BLE 40$ DEC TABCNT ; COUNT OFF RIGHT NUMBER 40$: DEC TABCNT ; OF CHARACTERS BGE 70$ ; OUTPUT THE SEQUENCE CALL ERASE ; WE ARE RUBBING OUT OVER A LINE WRAP MOV #1,R1 ; SO MOVE UP ONE LINE CALL 10$ ; AND REPRINT IT ; ; TO HERE TO REPRINT A LINE ; 50$: CALL ERASE ; ERASE THE LINE JMP PRTLIN ; REPRINT THE LINE ; ; SUBROUTINE TO JUST ERASE THE CURRENT LINE ; ERASE: CLR TABCNT ; SHOW LINE EMPTY MOV #EEOL,R3 ; GET CONTROL STRING DESCRIPTOR ; ; SUBROUTINE TO OUTPUT A CONTROL STRING. R3 = BASE DESCRIPTOR ADDRESS ; PRISEQ: CMP TTLNSZ,#72. ; LOOK AT THE TERMINAL LINE SIZE BHI 60$ ; OVER 72 BYTES IS VT5X CMP (R3)+,(R3)+ ; LESS IS VT05 60$: MOV (R3)+,R4 ; GET BYTE COUNT MOV (R3)+,R3 ; AND STRING ADDRESS 70$: MOVB (R3)+,R0 ; PICK UP EACH CHARACTER CALL PUT ; AND OUTPUT IT SOB R4,70$ CALL TYOUT ; FLUSH THE TYPE OUT BUFFER RETURN 80$: JMP TYPE ; TYPE A CHARACTER .DSABL LSB .SBTTL CONTROL U ROUTINE ;+ ; ; *** - DELLIN PROCESS CONTROL U CHARACTER ; ; THIS ROUTINE HANDLES THE CONTROL U CHARACTER. NORMAL MODE MEANS JUST ECHOING ; CRLF. CRT MODE ERASES THE CURRENT LINE. ; ; INPUTS: ; ; NONE ; ; OUTPUTS: ; ; R0 - R4 CLOBBERED ; ;- DELLIN:: BIT #ET.CRT,ETYPE(R5) ; CHECK FOR CRT MODE BNE ERASE ; YES - USE COMMON CODE ABOVE JMP CRLF ; OUTPUT CRLF WITH TECO ROUTINE .END