;**************************************************************************; ; ; ; SOROC TERMINAL UNIT ROUTINE ; ; ; ;**************************************************************************; ; ASL-02011-00 ; NOTICE ; ;All rights reserved. This software is the property of Alpha Microsystems ;and the material contained herein is the proprietary property and trade ;secrets of Alpha Microsystems, embodying substantial creative efforts and ;confidential information, ideas and expressions, no part of which may be ;reproduced or transmitted in any form or by any means, electronic, ;mechanical, or otherwise, including photocopying or input into any ;information storage or retrieval system without the express written ;permission of Alpha Microsystems. ; ;CAUTION: Unauthorized distribution or reproduction of this material may ;subject you to legal action. ; ;Copyright (C) 1982 - Alpha Microsystems ; ;Edit History: ; ;[100] 3 May 1982 ; Move cursor TCRT calls to correspond to new standard. /RBC ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; MODIFIED TO SOLVE TYPE-AHEAD PROBLEM ON 03/01/83 ; ; BY: Robert C. Strunk ; ; Software Systems Consulting Incorporated ; ; 2701 Spring Grove Av, Cincinnati, OH 45225 ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; SEARCH SYS SEARCH SYSSYM SEARCH TRM OBJNAM IQ120.TDV CTRL = ^C<^B1_6> ;CONTROL CHAR MASK BIT7 = ^B1_7 ;BIT-7 ESC = <'[&CTRL>!BIT7 ;ESCAPE ;******************** ;* SOROC * ;******************** ;TERMINAL DRIVER COMMUNICATIONS AREA SOROC: WORD 2000 ; terminal attributes RTN ; input routine RTN ; output routine BR ECHO ; echo routine BR JMPCRT ; crt control RTN ; no INIT routine yet WORD 6 ; impure area FOR CURSOR POSITIONING BYTE 24.,80. ; SCREENSIZE LWORD 1400 ; terminal has: ; erase to end of screen ; erase to end of line JMPCRT: JMP CRT ; go handle TCRT codes ;******************** ;* 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 ;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 RTN ERUB: BYTE 10,40,10,0 ;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,#11 ; TAB BEQ KRTT CMPB D1,#15 ; CR BEQ KRTC CMPB D1,#33 ; ALTMODE BEQ KRTI CMPB D1,#40 ; CONTROL-CHAR BLO KRTS CMPB D1,#172 BHI 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 ;******************** ;* CRT * ;******************** ;SPECIAL CRT CONTROL PROCESSING ;D1 CONTAINS THE CONTROL CODE FOR X,T POSITIONING OR SPECIAL COMMANDS ;IF D1 IS POSITIVE WE HAVE SCREEN POSITIONING (ROW IN HI BYTE, COL IN LO BYTE) ;IF D1 IS NEGATIVE WE HAVE THE SPECIAL COMMAND IN THE LOW BYTE CRT: SAVE A2,D3 ;SAVE TBUF'S REGISTERS MOVW JOBCMS(A0),D3 ;TEST COMMAND FILE PROCESSING ANDW #C.TRC,D3 ;IS TRACE MODE ON? BNE CRTT ;BRANCH IF SO MOVW JOBCMS(A0),D3 ;TEST COMMAND FILE PROCESSING ANDW #C.SIL,D3 ;IS OUTPUT SILENCED? BNE CRTX ;BRANCH IF IT IS CRTT: TSTW D1 ;IS IT CURSOR POSITION? BMI CRTS ; NO ;CURSOR POSITIONING - D1 CONTAINS X,Y COORDINATES MOV T.IMP(A5),A2 ;PICKUP IMPURE AREA MOV CURP,@A2 ;PLACE PREFIX FOR CURSOR POSITIONING ADDW #^H1F1F,D1 ;COMPUTE POSITION OFFSETS RORW D1,#8. ;SWAP ROW AND COLUMN NUMBERS MOVW D1,4(A2) ;SEND ROW AND COLUMN (IN ORDER) ADDW #1,A2 ;PASS OVER THE FIRST NULL BR CRTO CURP: BYTE 0,4,ESC,'= ;PREFIX FOR CURSOR POSITIONING ;SPECIAL COMMANDS - D1 CONTAINS THE COMMAND CODE IN THE LOW BYTE CRTS: AND #^H0FF,D1 ;STRIP THE HIGH BYTE ;COMMAND PROCESSING PER DIRECTOR TABLES CRTU: ASL D1 ; DOUBLE THE CODE (word offset). CMPW D1,#CRCB-CRCA ;CHECK FOR VALID CODE BHI CRTX ; AND BYPASS IF BAD LEA A2,CRCA ;INDEX THE TABLE ADDW D1,A2 ;ADD COMMAND CODE MOVW @A2,D1 ;PICK UP DATA FIELD OFFSET ADD D1,A2 ;MAKE ABSOLUTE DATA ADDRESS ;SEE IF WE CAN ARRANGE TO HAVE THE WHOLE STRING OUTPUT UN-INTERRUPTED CRTO: MOV T.OBS(A5),D1 ;PICKUP TOTAL BUFFER SIZE SUB T.OBX(A5),D1 ;SUB CURR BUFF CNT TO GET # CHAR POS LEFT CLR D3 ;PREPARE TO MOVB (A2)+,D3 ; PICKUP LENGTH OF DATA BEQ CRTX ;BRANCH IF NOTHING TO OUTPUT CMP D1,D3 ;ENOUGH ROOM FOR WHOLE STRING? BGE CRTM ;BRANCH IF SO SVLOK ;PREVENT (I/O) INTERRUPTS TST T.OBX(A5) ;WE WANT AN EMPTY BUFFER BEQ CRTW ;BRANCH IF IT'S EMPTY NOW JWAIT J.TOW ;WAIT HERE FOR EMPTY BUFFER CRTW: SVUNLK ;ALLOW INTERRUPTS ;ACTUALLY DISPOSE OF CHARACTER STRING TO OUTPUT BUFFER CRTM: PUSH A2 ;SAVE ADDR OF OUTPUT FIELD TBUF ;PRINT THE DATA FIELD POP A2 ;RESTORE ADDR OF OUTPUT FIELD CMPB 1(A2),#100 ;SLEEP IF LONG COMMAND (E.G. ERASE) BLOS CRTX LEA A2,CRTNUL ;POINT TO PAD CHARACTERS CLR D3 ;PREPARE TO MOVB (A2)+,D3 ; PICKUP LENGTH OF DATA TBUF ;STALL THE PROGRAM A WHILE CRTX: REST A2,D3 ;RESTORE TBUF'S REGISTERS RTN ;Null characters for long commands CRTNUL: BYTE 11.,BIT7,BIT7,BIT7,BIT7,BIT7,BIT7,BIT7,BIT7,BIT7,BIT7,BIT7 EVEN ;BYTE OFFSET AND DATA TABLES FOLLOW FOR ALL COMMANDS CRCA: WORD C0-.,C1-.,C2-.,C3-.,C4-.,C5-.,C6-.,C7-.,C8-. WORD C9-.,C10-.,C11-.,C12-.,C13-.,C14-. CRCB: C0: BYTE 2,ESC,<'*&CTRL>!BIT7 ;ERASE SCREEN C1: BYTE 2,'^&CTRL,BIT7 ;CURSOR HOME C2: BYTE 1,<'M&CTRL>!BIT7 ;CURSOR RETURN C3: BYTE 1,'K&CTRL ;CURSOR UP C4: BYTE 1,'J&CTRL ;CURSOR DOWN C5: BYTE 1,'H&CTRL ;CURSOR LEFT C6: BYTE 1,'L&CTRL ;CURSOR RIGHT C7: BYTE 2,ESC,'# ;LOCK KEYBOARD C8: BYTE 2,ESC,'" ;UNLOCK KEYBOARD C9: BYTE 2,ESC,'T ;ERASE TO END OF LINE C10: BYTE 2,ESC,'Y ;ERASE TO END OF SCREEN C11: BYTE 2,ESC,') ;PROTECT FIELD (WRT LOW ON) C12: BYTE 2,ESC,'( ;UNPROTECT FIELD (WRT LOW OFF) C13: BYTE 2,ESC,'& ;PROTECT MODE ON (LOW INTENS CHAR PROTECTED) C14: BYTE 2,ESC,'' ;PROTECT MODE OFF (NOTHING PROTECTED) EVEN END .