.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 ; ; MODIFIED 04-DEC-79 BMB ; .SBTTL CONTROL STRINGS ; ; THE FOLLOWING ARE DESCRIPTORS AND CONTROL STRINGS TO HANDLE CRT STYLE ; RUBOUTS. ; ; 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 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 ; ; DEFAULT STRING FOR CRT LINE ERASE ; ELIN: .BYTE 82.,CR .NLIST ME .REPT 80. .BYTE SPACE .ENDR .LIST ME .BYTE CR ; ; DEFAULT STRING FOR CRT VERTICAL MOVEMENT ERASE ; LFSEQ: .BYTE 1,LF .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 $CUP,R3 ; GET CURSOR UP DESCRIPTOR BNE 15$ ; IF NE, DEFINED MOV #LFSEQ,R3 ; ELSE PICK UP DEFAULT STRING 15$: 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 BLT 45$ ; IF GE, CAN DO IT MOV ETYPE(R5),-(SP) ; SAVE TYPEOUT INDICATOR BR 70$ ; GO EXECUTE SEQUENCE 45$: 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 $ELIN,R3 ; GET CONTROL STRING DESCRIPTOR BNE PRISEQ ;IF NE, DEFINED MOV #ELIN,R3 ;ELSE GET DEFAULT STRING ; ; SUBROUTINE TO OUTPUT A CONTROL STRING. R3 = BASE DESCRIPTOR ADDRESS ; PRISEQ: MOV ETYPE(R5),-(SP) ;SAVE TYPEOUT INDICATOR BIS #ET.IMG,ETYPE(R5) ;SETIMAGE MODE TYPEOUT MOVB (R3)+,R4 ;PICK UP STRING LENGTH 70$: MOVB (R3)+,R0 ; PICK UP EACH CHARACTER CALL TYPEBF ; AND OUTPUT IT SOB R4,70$ CALL TYPEBC ; FLUSH THE TYPE OUT BUFFER MOV (SP)+,ETYPE(R5) ;RESTORE TYPROUT INDICATOR 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