;***************************************************************************; ; ; ; 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.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 .