;***************************************************************************; ; ; ; NEWTRM ; ; Allow user to change terminal driver ; ; ; ;***************************************************************************; ;Copyright (C) 1988 UltraSoft Corporation. All Rights Reserved. ; ;Written by: David Pallmann ; ;2.0(100) 17-Apr-88 created. /DFP ;2.0(101) 21-Apr-88 correct bug with terminals lacking a statu line. /DFP VMAJOR=2 VMINOR=0 VEDIT=101. SEARCH SYS SEARCH SYSSYM SEARCH TRM MEM=A5 .OFINI .OFDEF DRIVER,4 ; driver name (2 RAD50 words) .OFDEF BUFFER,10. ; ASCII buffer .OFDEF TRMFLG,TC.SIZ ; terminal characteristics .OFSIZ MEMSIZ DEFINE DEPACK ADDR SAVE A1,A2 LEA A1,ADDR SUB #8.,SP MOV SP,A2 UNPACK UNPACK CLRB @A2 TTYL @SP ADD #8.,SP REST A1,A2 ENDM DEFINE CRT CODE MOVW #-1_8.+^D,D1 TCRT ENDM DEFINE MOVWL SRC,DST CLR D7 MOVW SRC,D7 MOV D7,DST ENDM DEFINE BIT SRC,DST MOV DST,D7 AND SRC,D7 ENDM START: PHDR -2,,PH$REE!PH$REU GETIMP MEMSIZ,MEM JOBIDX A4 MOV JOBTRM(A4),A3 ;****************************************** ;* Set image mode and turn off echoplex * ;****************************************** TERM: ANDW #^C,T.STS(A3) ORW #T$IMI!T$ECS,T.STS(A3) ;******************************************* ;* Check for driver name on command line * ;******************************************* CMDLIN: BYP LIN JEQ CURR LEA A1,DRIVER(MEM) PACK PACK JMP SEARCH ;********************************** ;* Show current terminal driver * ;********************************** CURR: TYPESP Current terminal driver is MOV T.TDV(A3),A1 SUB #4,A1 LEA A2,BUFFER(MEM) UNPACK UNPACK 10$: CMMB -(A2),#40 BEQ 10$ CLRB 1(A2) TTYL BUFFER(MEM) TYPE <. > CHANGE: TYPESP Do you wish to change it? KBD EXIT UCS CMPB D1,#33 JEQ ABORT CMPB D1,#'N BEQ 10$ CMPB D1,#'Y BEQ 20$ TTYI BYTE 7,0 CRLF JMP CURR 10$: TYPECR No JMP EXIT 20$: TYPECR Yes QUERY: TYPESP Do you want to see a list of available drivers? KBD EXIT UCS CMPB D1,#33 JEQ ABORT CMPB D1,#'N BEQ 10$ CMPB D1,#'Y BEQ 20$ TTYI BYTE 7,0 CRLF BR QUERY 10$: TYPECR No CRLF JMP SELECT 20$: TYPECR Yes CRLF ;**************************** ;* List available drivers * ;**************************** LIST: TYPECR The following terminal drivers are available: MOV TRMTDC,A0 L1: CRLF TAB MOV #6,D0 L2: DEPACK 4(A0) TST @A0 BEQ L3 MOV @A0,A0 TAB SOB D0,L2 BR L1 L3: CMP D0,#6 BEQ L4 CRLF L4: CRLF ;********************************************* ;* Prompt user to select a terminal driver * ;********************************************* SELECT: TYPESP Enter driver name: LEA A2,BUFFER(MEM) CLR D2 SELCHR: KBD EXIT CMPB D1,#40 BLO SELCTL CMPB D1,#'~ BHI SELCTL SELTXT: CMPB D2,#6 BHIS SELCHR TTY MOVB D1,(A2)+ INCB D2 BR SELCHR SELCTL: CMPB D1,#33 JEQ ABORT CMPB D1,#'M-'@ BEQ SELRTN CMPB D1,#177 BEQ SELDEL BR SELCHR SELDEL: TSTB D2 BEQ SELCHR TTYI BYTE 10,40,10,0 EVEN DEC A2 DECB D2 BR SELCHR SELRTN: CRLF CLRB @A2 LEA A1,DRIVER(MEM) LEA A2,BUFFER(MEM) PACK PACK CRLF ;******************************************************* ;* Search terminal driver chain for specified driver * ;******************************************************* SEARCH: MOV TRMTDC,A0 10$: CMM 4(A0),DRIVER(MEM) BEQ SWITCH TST @A0 BEQ 20$ MOV @A0,A0 BR 10$ 20$: TYPECR No such terminal driver. CRLF JMP QUERY ;******************************* ;* Affix new terminal driver * ;******************************* SWITCH: ADD #10,A0 MOV A0,T.TDV(A3) ;******************************** ;* Initialize terminal driver * ;******************************** INIT: SAVE A0-A6,D0-D7 MOV A3,A5 CALL TD.INI(A0) ; call terminal driver init routine REST A0-A6,D0-D7 TRMCHR TRMFLG(MEM) ;******************************************************** ;* Clear screen, top status line, and unlock keyboard * ;******************************************************** CLEAR: CRT 0 ; clear screen CRT 8 ; unlock keyboard BIT #TD$STS,TRMFLG(MEM) ; status lines? BEQ 30$ ; no [101] MOVWL TRMFLG+TC.TSL(MEM),D0 ; get size of top status line BEQ 30$ ; zero CRT 63 ; select top status line TYPESP ; start at far left position MOVB #40,D1 ; load space DECB D0 ; decrement count by one BEQ 20$ ; went to zero 10$: TTY ; output space SOB D0,10$ ; loop MOVB #25.,D1 TTY 20$: CRT 129 ; end status line 30$: ;**************************************************** ;* Confirm terminal driver change by echoing name * ;**************************************************** CONFRM: CRT 11 TYPESP Terminal driver changed to CRT 12 DEPACK DRIVER(MEM) CRLF EXIT: EXIT ABORT: TYPECR Aborted. EXIT END .