;***************************************************************************;
; ;
; UltraStat 3.x ;
; TERMINAL STATUS SCREEN ;
; ;
;***************************************************************************;
;Copyright (C) 1988 UltraSoft Corporation. All Rights Reserved.
;
;Written by: David Pallmann
;
;All edit history for USTAT is in USYM.M68.
ASMMSG "== UltraStat 3.x (TERMINAL) =="
AUTOEXTERN
;--- Include files
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
COPY DSKINF.CPY
COPY USYM/L
;--- Terminal Scanning Loop
TERM.SCAN::
MOV TRMDFC,A0 ; point to base of job table
LEA TIB,TM.TBL(MEM)
MOVB JOB.ROW(MEM),ROW(MEM) ; set starting job row
CLRB JOB.UPDATE(MEM) ; clear new arrow row
CLRW TRM.COUNT(MEM)
TERM.BYPASS:
MOVWL JOB.OFFSET(MEM),D0
BEQ TERM.LOOP
10$: TST @A0
JEQ HEADER.SCAN
INCW TRM.COUNT(MEM)
MOV @A0,A0
ADD #TM.SIZ,TIB
SOB D0,10$
TERM.LOOP:
KEY GET.COMMAND
BIT #F$UPDATE,FLAGS(MEM)
BEQ 10$
OR #TM$NEW,TM.FLG(TIB)
10$: LEA TCB,10(A0)
;--- Handle a terminal
UPDATE.TERM:
CALL TERM.NAME
KEY 10$
CALL TERM.JOB
KEY 10$
CALL TERM.IDV
KEY 10$
CALL TERM.TDV
KEY 10$
CALL TERM.PORT
KEY 10$
CALL TERM.SPEED
KEY 10$
CALL TERM.BUFFER
AND #^C<TM$NEW>,TM.FLG(TIB)
10$: CALL ARROW
TERM.NEXT::
INCW TRM.COUNT(MEM)
TST @A0
JEQ SNOOZE
ADD #TM.SIZ,TIB
MOV @A0,A0
INCB ROW(MEM) ; increment display row
CMMB ROW(MEM),LAST.ROW(MEM) ; end of page?
JLOS TERM.LOOP ; no - on to next terminal
JMP SNOOZE
;--- Update terminal name
TERM.NAME:
MOV -4(TCB),D0
BIT #TM$NEW,TM.FLG(TIB) ; forced update?
BNE 10$ ; yes
CMM D0,TM.NAM(TIB) ; did name change?
REQ ; no
10$: MOV D0,TM.NAM(TIB)
CURSOR ROW(MEM),#2
HIGH
OUTNAM TM.NAM(TIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
TERM.JOB:
CLR D0
TST T.JLK(TCB)
BEQ 10$
MOV T.JLK(TCB),A6
MOV JOBNAM(A6),D0
10$: BIT #TM$NEW,TM.FLG(TIB) ; forced update?
BNE 20$ ; yes
CMM D0,TM.JOB(TIB) ; did job name change?
REQ ; no
20$: MOV D0,TM.JOB(TIB)
CURSOR ROW(MEM),#9.
HIGH
OUTNAM TM.JOB(TIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
TERM.IDV:
MOV T.IDV(TCB),A6
MOV -4(A6),D0
BIT #TM$NEW,TM.FLG(TIB) ; forced update?
BNE 10$ ; yes
CMM D0,TM.IDV(TIB) ; did IDV change?
REQ ; no
10$: MOV D0,TM.IDV(TIB)
CURSOR ROW(MEM),#16.
HIGH
OUTNAM TM.IDV(TIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
TERM.TDV:
MOV T.TDV(TCB),A6
MOV -4(A6),D0
BIT #TM$NEW,TM.FLG(TIB) ; forced update?
BNE 10$ ; yes
CMM D0,TM.TDV(TIB) ; did IDV change?
REQ ; no
10$: MOV D0,TM.TDV(TIB)
CURSOR ROW(MEM),#23.
HIGH
OUTNAM TM.TDV(TIB)
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- Update terminal port number
TERM.PORT:
MOV T.IHM(TCB),D0
BIT #TM$NEW,TM.FLG(TIB)
BNE 10$
CMM D0,TM.PRT(TIB)
REQ
10$: MOV D0,TM.PRT(TIB)
CURSOR ROW(MEM),#30.
HIGH
MOV D0,D1
DCVT 4,OT$TRM!OT$ZER
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- Update terminal speed (baud rate)
TERM.SPEED:
MOVWL T.BAU(TCB),D0
MOV D0,D2
LEA A1,BAUD1
LEA A2,BAUD2-4
10$: TSTW @A1
BEQ 20$
ADD #4,A2
CMMW (A1)+,D0
BNE 10$
MOV @A2,D2
20$: BIT #TM$NEW,TM.FLG(TIB)
BNE 30$
CMMW D0,TM.BAD(TIB)
REQ
30$: MOVW D0,TM.BAD(TIB)
CURSOR ROW(MEM),#35.
HIGH
MOV D2,D1
DCVT 5,OT$TRM!OT$ZER
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- Update terminal input line buffer
TERM.BUFFER:
MOV T.ILB(TCB),A1
LEA A2,TEMP(MEM)
MOV #30.,D2 ; [108]
10$: MOVB (A1)+,D1
BEQ 20$
CMPB D1,#CR
BEQ 20$
CMPB D1,#LF
BEQ 20$
CMPB D1,#40 ; printable? [117]
BLO 10$ ; no [117]
CMPB D1,#'~ ; printable? [117]
BHI 10$ ; no [117]
MOVB D1,(A2)+
SOB D2,10$
BR 30$
20$: CLRB (A2)+
SOB D0,20$
30$: CLRB @A2
BIT #TM$NEW,TM.FLG(TIB)
BNE 40$
CMPSTR TEMP(MEM),TM.ILB(TIB)
REQ
40$: MOVSTR TEMP(MEM),TM.ILB(TIB)
CURSOR ROW(MEM),#41.
HIGH
TTYL TM.ILB(TIB)
CLREOL
MOVB ROW(MEM),JOB.UPDATE(MEM)
RTN
;--- table of baud rate codes and assocated rates
BAUD1: WORD 1
WORD 2
WORD 3
WORD 4
WORD 5
WORD 6
WORD 7
WORD 10
WORD 11
WORD 12
WORD 13
WORD 14
WORD 15
WORD 16
WORD 17 ; 9600
WORD 20 ; 19.2K
WORD 21 ; 38.4K [111]
WORD 22 ; 57.6K [111]
WORD 23 ; 76.8K [111]
WORD 0
BAUD2: LWORD 50.
LWORD 75.
LWORD 110.
LWORD 150.
LWORD 200.
LWORD 300.
LWORD 600.
LWORD 1200.
LWORD 1800.
LWORD 2000.
LWORD 2400.
LWORD 3600.
LWORD 4800.
LWORD 7200.
LWORD 9600.
LWORD 19200.
LWORD 38400.
LWORD 57600.
LWORD 76800.
END