mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-01 17:26:38 +00:00
745 lines
18 KiB
Plaintext
745 lines
18 KiB
Plaintext
TITLE TRMTYP Program to query a terminal for the type.
|
||
SUBTTL written by David Weaver 1/15/82
|
||
|
||
TOPS10==-1
|
||
|
||
TWOSEG
|
||
|
||
IFN TOPS10 <
|
||
SEARCH UUOSYM
|
||
IF1 < PRINTX [Assembling TRMTYP for TOPS10]>
|
||
>
|
||
IFE TOPS10 <
|
||
SEARCH MONSYM
|
||
IF1 < PRINTX [Assembling TRMTYP for TOPS20]>
|
||
>
|
||
SUBTTL Edit History
|
||
|
||
TRMWHO==0 ;WHO LAST EDITED (0 ORIGINAL AUTHOR)
|
||
TRMMAJ==1 ;MAJOR VERSION NUMBER
|
||
TRMMIN==0 ;MINOR VERSION NUMBER
|
||
TRMEDT==11 ;EDIT LEVEL
|
||
|
||
;Edit History:
|
||
;
|
||
; 1 Set the wait time for TOPS20 using the 1 min load average.
|
||
; 2 Set the wait time for TOPS10 differently for PTY's.
|
||
; 3 Add FL.VID to signify video terminal.
|
||
; 4 Fix up terminal types so VT180 and VT100 with printer port
|
||
; are displayed properly.
|
||
; 5 Set VT100 with printer port and AVO as VT102 instead of VT100.
|
||
; 6 Revoke edit 5 until more cusps now about VT102's.
|
||
; 7 Save and restore the state of PAUSE ON END-OF-PAGE and don't
|
||
; mess up the FULL/HALFDUPLEX setting on TOPS20.
|
||
; 10 Make sure NO RAISE is set.
|
||
; 11 Make PTY's read the controlling terminal's type and if batch,
|
||
; just say batch.
|
||
;
|
||
IFE TOPS10 <
|
||
RELOC 0
|
||
|
||
ENTVEC: JRST START
|
||
JRST START
|
||
BYTE (3)TRMWHO (9)TRMMAJ (6)TRMMIN (18)TRMEDT
|
||
ENTLEN==.-ENTVEC
|
||
>
|
||
IFN TOPS10 <
|
||
LOC 134
|
||
EXP START
|
||
LOC 137
|
||
BYTE (3)TRMWHO (9)TRMMAJ (6)TRMMIN (18)TRMEDT
|
||
RELOC 0
|
||
>
|
||
|
||
SUBTTL Definitions and impure storage
|
||
|
||
T1=1
|
||
T2=2
|
||
T3=3
|
||
T4=4
|
||
A=5
|
||
B=6
|
||
C=7
|
||
FL=15
|
||
SP=16
|
||
P=17
|
||
|
||
;FLAGS (LEFT HALF OF FL)
|
||
FL.ANS==400000 ;ANSI MODE TERMINAL
|
||
FL.DEC==200000 ;DEC MODE TERMINAL
|
||
FL.VID==100000 ;VIDEO TERMINAL (CHECK WIDTH IF ANSI)
|
||
FL.NET==040000 ;LINE IS NETWORK LINK
|
||
FL.PTY==020000 ;LINE IS ON A PTY
|
||
FL.BAT==010000 ;LINE IS CONTROLLED BY BATCH
|
||
|
||
STKLEN==20
|
||
STACK: BLOCK STKLEN
|
||
|
||
TRMSAV: BLOCK 1 ;SOME TERMINAL CHARACTERISTICS TO SAVE
|
||
; FLAGS (RH)
|
||
TR.PAG=400000 ;PAUSE ON END-OF-PAGE
|
||
|
||
IFN TOPS10,<
|
||
TTYCHN==1 ;CHANNEL FOR TERMINAL
|
||
|
||
DEVBLK: EXP .IOPIM ;USE PACKED IMAGE MODE
|
||
SIXBIT /TTY/
|
||
XWD 0,0
|
||
|
||
TRMFNC: BLOCK 1 ;BLOCK FOR TRMOP FUNCTIONS
|
||
TRMUDX: BLOCK 1
|
||
TRMARG: BLOCK 1
|
||
|
||
UNKTYP: SIXBIT /TTY/ ;TOPS10 UNKNOWN TERMINAL TYPE
|
||
>
|
||
IFE TOPS10,<
|
||
DEVSTR: ASCIZ /TTY:/
|
||
BLOCK 1
|
||
|
||
DEVJFN: BLOCK 1 ;JFN FOR TERMINAL
|
||
|
||
UNKTYP: EXP .TTDEF ;TOPS20 UNKNOWN TERMINAL TYPE
|
||
|
||
JOBBLK: BLOCK .JIBAT+1 ;BLOCK TO GET JOB INFO
|
||
JOBLEN==.-JOBBLK
|
||
|
||
PTYLIN: BLOCK 1 ;LINE NUMBER OF FIRST PTY
|
||
CTYLIN: BLOCK 1 ;LINE NUMBER OF CTY
|
||
>
|
||
BYTSIZ==^D7
|
||
TTYSIZ==^D132
|
||
TTYBUF: BLOCK <TTYSIZ/BYTSIZ>+1
|
||
|
||
TERTYP: BLOCK 1
|
||
|
||
IFE TOPS10,<
|
||
LDAFCT==^D200 ;FACTOR FOR MULTIPLYING LD AV BY FOR SLPTIM
|
||
NETTIM==^D3000 ;WAIT 3.0 SECONDS ON A NETWORK LINE
|
||
>
|
||
IFN TOPS10,<
|
||
WAITIM==^D1100 ;WAIT 1.1 SECONDS (GOES INTO SLPTIM)
|
||
NETTIM==^D3000 ;WAIT 3.0 SECONDS ON A NETWORK LINE
|
||
>
|
||
SLPTIM: BLOCK 1 ;TIME TO SLEEP
|
||
|
||
SUBTTL Main program
|
||
|
||
RELOC 400000
|
||
|
||
START: RESET
|
||
MOVE P,[IOWD STKLEN,STACK]
|
||
SETZ FL, ;CLEAR ALL FLAGS
|
||
PUSHJ P,OPNDEV ;GO OPEN THE TERMINAL
|
||
PUSHJ P,CLRIBF ;CLEAR INPUT BUFFER
|
||
PUSHJ P,SETSLP ;SET THE SLEEP TIME
|
||
MOVEI T1,[ASCIZ/[Terminal type is /]
|
||
PUSHJ P,STRSND ;Output the MSG
|
||
TLNN FL,FL.BAT ;BATCH?
|
||
JRST PTYCHK
|
||
MOVEI T1,[ASCIZ/BATCH/]
|
||
PUSHJ P,STRSND
|
||
JRST FINCRL
|
||
PTYCHK: TLNN FL,FL.PTY ;PTY?
|
||
JRST DECDNT
|
||
MOVEI T1,[ASCIZ/PTY/]
|
||
PUSHJ P,STRSND
|
||
PUSHJ P,PTYTYP ;SET PTY SAME AS CONTROLLING TERMINAL
|
||
JRST FINCRL
|
||
DECDNT: MOVEI T1,[BYTE (7)33,"Z",0]
|
||
PUSHJ P,STRSND ;SEND IT
|
||
PUSHJ P,WAITO ;WAIT FOR OUTPUT TO COMPLETE
|
||
PUSHJ P,WAIT
|
||
PUSHJ P,STRGET ;GET THE RESPONSE
|
||
PUSHJ P,CHKTYP ;AND CHECK THE TYPE
|
||
JRST ANSI ;IF WE FAILED, TRY ANSI
|
||
TLNE FL,FL.VID ;VIDEO TERMINAL?
|
||
TLNN FL,FL.ANS ;WAS IT AN ANSI SEQUENCE
|
||
JRST FINISH ; NO, GO FINISH UP
|
||
JRST ANSWID ;YES, FIGURE OUT TERMINAL WIDTH
|
||
ANSI: MOVEI T1,[BYTE (7)33,"[","0","c",0]
|
||
PUSHJ P,STRSND ;SEND IT
|
||
PUSHJ P,WAITO ;WAIT FOR OUTPUT TO COMPLETE
|
||
PUSHJ P,WAIT
|
||
PUSHJ P,STRGET ;GET THE RESPONSE
|
||
PUSHJ P,CHKTYP ;AND CHECK THE TYPE
|
||
PUSHJ P,TRMUNK ;SAY "UNKNOWN"
|
||
TLNN FL,FL.ANS ;ANSI MODE?
|
||
JRST FINISH ;NO, DONE
|
||
ANSWID: MOVEI T1,[BYTE (7)33,"7",33,"[","1",";","1","3","2","H",0]
|
||
PUSHJ P,STRSND ;SEND IT
|
||
MOVEI T1,[BYTE (7)33,"[","6","n",33,"8",0]
|
||
PUSHJ P,STRSND
|
||
PUSHJ P,WAITO ;WAIT FOR OUTPUT TO COMPLETE
|
||
PUSHJ P,WAIT
|
||
PUSHJ P,STRGET ;GET THE RESPONSE
|
||
PUSHJ P,CHKWID ;GET AND SET TERMINAL WIDTH
|
||
JFCL ;IGNORE FAILURE
|
||
FINISH: MOVEI T1,[BYTE (7)33,"\",0]
|
||
PUSHJ P,STRSND ;SEND IT
|
||
FINCRL: MOVEI T1,[BYTE (7)"]",15,12,0]
|
||
PUSHJ P,STRSND
|
||
PUSHJ P,CLRIBF ;CLEAR INPUT BUFFER
|
||
PUSHJ P,CLSDEV ;CLOSE TERMINAL
|
||
PUSHJ P,STOP
|
||
JRST .-1
|
||
|
||
SUBTTL Common subroutines
|
||
|
||
STRGET: MOVE A,[POINT 7,TTYBUF,-1]
|
||
CHRLUP: PUSHJ P,CHRGET ;GET A CHAR
|
||
JRST CHRLP1 ; NO INPUT
|
||
IDPB T2,A
|
||
JRST CHRLUP
|
||
CHRLP1: SETZ T2, ;TERMINATE WITH A <NUL>
|
||
IDPB T2,A
|
||
POPJ P,
|
||
|
||
CHKWID: MOVE A,[POINT 7,TTYBUF,-1]
|
||
ILDB T2,A ;GET A CHAR
|
||
CAIE T2,33 ;ESC?
|
||
JRST CPOPJ ;NO, RETURN
|
||
ILDB T2,A ;GET NEXT
|
||
CAIE T2,"[" ;ANSI?
|
||
JRST CPOPJ ;NO
|
||
PUSHJ P,ANSNUM ;GET THE ANSI NUMBER
|
||
JRST CPOPJ ;INVALID
|
||
PUSHJ P,ANSNUM ;GET THE ANSI NUMBER
|
||
JRST CPOPJ ;INVALID
|
||
LDB T2,A ;GET LAST CHAR
|
||
CAIE T2,"R" ;SHOULD BE CURSOR POSITION
|
||
JRST CPOPJ ;ISN'T, DON'T SET WIDTH
|
||
PUSHJ P,SETWID ;GO SET THE WIDTH OF TERMINAL
|
||
JRST CPOPJ1
|
||
|
||
CHKTYP: MOVE A,[POINT 7,TTYBUF,-1]
|
||
ILDB T2,A ;GET A CHAR
|
||
CAIE T2,33 ;ESC?
|
||
JRST CPOPJ ;NO, RETURN
|
||
ILDB T2,A ;GET NEXT
|
||
CAIE T2,"[" ;ANSI?
|
||
JRST NOANSI ;NO
|
||
ILDB T2,A ;GET NEXT
|
||
CAIE T2,"?" ;BETTER BE THIS
|
||
JRST CPOPJ ;NOPE, DON'T KNOW WHAT TO CALL THIS
|
||
PUSHJ P,ANSNUM ;GET THE ANSI NUMBER
|
||
JRST CPOPJ ;INVALID
|
||
MOVEI T2,TBANSI ;GET TABLE TO SEARCH
|
||
PUSHJ P,SRCTBL ;TRY TO FIND INDEX
|
||
JRST CPOPJ ;OUT OF RANGE
|
||
MOVEM T2,TERTYP ;SAVE TYPE INDEX
|
||
MOVE C,TYANSI(T2) ;GET TYPE NUMBER/NAME TO SET
|
||
MOVE B,TBANSI(T2) ;GET TERMINAL TYPE FROM TABLE
|
||
SKIPE T1,DSANSI(T2) ;GET DISPATCH ADDRESS
|
||
PUSHJ P,(T1) ; GO DO IT
|
||
HLRZ T1,B ;GET STRING ADDRESS
|
||
PUSHJ P,STRSND ;AND OUTPUT
|
||
PUSHJ P,SETTYP ;SET TERMINAL TYPE
|
||
TLO FL,FL.ANS ;FLAG ANSI
|
||
CPOPJ1: AOS (P) ;GIVE SKIP RETURN
|
||
CPOPJ: POPJ P, ;AND RETURN
|
||
|
||
NOANSI: CAIE T2,"/" ;DEC MODE?
|
||
JRST CPOPJ ;NO, UNKNOWN
|
||
ILDB T1,A ;GET NEXT CHARACTER
|
||
ANDI T1,177 ;USE ONLY 7 BITS
|
||
MOVEI T2,TBDEC ;SEARCH DEC TERMINAL TYPES
|
||
PUSHJ P,SRCTBL
|
||
JRST CPOPJ ;
|
||
MOVE C,TYDEC(T2) ;GET TYPE NUMBER/NAME TO SET
|
||
MOVE B,TBDEC(T2) ;
|
||
SKIPE T1,DSDEC(T2) ;GET DISPATCH ADDRESS
|
||
PUSHJ P,(T1) ; GO DO IT
|
||
HLRZ T1,B ;GET TERMINAL STRING
|
||
PUSHJ P,STRSND ; AND OUTPUT IT
|
||
PUSHJ P,SETTYP ;SET TERMINAL TYPE
|
||
TLO FL,FL.DEC!FL.VID ;FLAG DEC VIDEO TERMINAL
|
||
JRST CPOPJ1 ;GIVE GOOD RETURN
|
||
|
||
;ROUTINE TO SEARCH A TABLE FOR AN ENTRY
|
||
;
|
||
; T1/ENTRY TO FIND
|
||
; T2/TABLE ADDRESS (TABLE MUST END WITH 0)
|
||
;
|
||
; PUSHJ P,SRCTBL
|
||
; <HERE IF ENTRY NOT FOUND>
|
||
; <HERE ON SUCCESS>
|
||
;
|
||
; T2/TABLE INDEX
|
||
;
|
||
SRCTBL: SETZ T4,
|
||
SRCTB1: SKIPN T3,(T2) ;GET CURRENT ENTRY
|
||
JRST CPOPJ ; END OF TABLE, NO SUCH ENTRY
|
||
HRRZS T3 ;ONLY RIGHT HALF
|
||
AOS T2 ;INCREMENT
|
||
CAME T3,T1 ;DID WE MATCH?
|
||
AOJA T4,SRCTB1 ;NO, KEEP LOOKING
|
||
MOVE T2,T4 ;COPY INDEX INTO T2
|
||
JRST CPOPJ1
|
||
|
||
SUBTTL Terminal specific routines
|
||
|
||
TRMUNK: MOVE C,UNKTYP ;GET UNKNOWN NUMBER/NAME
|
||
PUSHJ P,SETTYP ;SET IT
|
||
MOVEI T1,[ASCIZ/Unknown/]
|
||
PUSHJ P,STRSND ;OUTPUT IT
|
||
POPJ P,
|
||
|
||
TLA34: PUSHJ P,ANSNUM ;GET NEXT PARAMETER
|
||
POPJ P, ;NOT VALID
|
||
MOVEI T2,TBLA34 ;GET TABLE TO SEARCH
|
||
PUSHJ P,SRCTBL ;TRY TO FIND INDEX
|
||
POPJ P, ;OUT OF RANGE
|
||
MOVE C,TYLA34(T2) ;GET TYPE NUMBER/NAME TO SET
|
||
MOVE B,TBLA34(T2) ;GET TERMINAL TYPE FROM TABLE
|
||
SKIPE T1,DSLA34(T2) ;GET DISPATCH ADDRESS
|
||
PUSHJ P,(T2) ; GO DO IT
|
||
POPJ P, ;NO, RETURN
|
||
|
||
TVT125: PUSHJ P,ANSNUM ;GET NEXT PARAMETER
|
||
POPJ P, ;NOT VALID
|
||
MOVEI T2,TBT125 ;GET TABLE TO SEARCH
|
||
PUSHJ P,SRCTBL ;TRY TO FIND INDEX
|
||
POPJ P, ;OUT OF RANGE
|
||
MOVE C,TYT125(T2) ;GET TYPE NUMBER/NAME TO SET
|
||
MOVE B,TBT125(T2) ;GET TERMINAL TYPE FROM TABLE
|
||
SKIPE T1,DST125(T2) ;GET DISPATCH ADDRESS
|
||
PUSHJ P,(T2) ; GO DO IT
|
||
JRST TVTVID ;RETURN
|
||
|
||
TVT132: PUSHJ P,ANSNUM ;GET NEXT PARAMETER
|
||
POPJ P, ;NOT VALID
|
||
MOVEI T2,TBT132 ;GET TABLE TO SEARCH
|
||
PUSHJ P,SRCTBL ;TRY TO FIND INDEX
|
||
POPJ P, ;OUT OF RANGE
|
||
MOVE C,TYT132(T2) ;GET TYPE NUMBER/NAME TO SET
|
||
MOVE B,TBT132(T2) ;GET TERMINAL TYPE FROM TABLE
|
||
SKIPE T1,DST132(T2) ;GET DISPATCH ADDRESS
|
||
PUSHJ P,(T2) ; GO DO IT
|
||
JRST TVTVID ;RETURN
|
||
|
||
TVT100: PUSHJ P,ANSNUM ;GET NEXT PARAMETER
|
||
POPJ P, ;NOT VALID
|
||
MOVEI T2,TBT100 ;GET TABLE TO SEARCH
|
||
PUSHJ P,SRCTBL ;TRY TO FIND INDEX
|
||
POPJ P, ;OUT OF RANGE
|
||
MOVE C,TYT100(T2) ;GET TYPE NUMBER/NAME TO SET
|
||
MOVE B,TBT100(T2) ;GET TERMINAL TYPE FROM TABLE
|
||
SKIPE T1,DST100(T2) ;GET DISPATCH ADDRESS
|
||
PUSHJ P,(T2) ; GO DO IT
|
||
TVTVID: TLO FL,FL.VID
|
||
POPJ P, ;RETURN
|
||
|
||
;RETURNS ANSI NUMBER IN T1
|
||
ANSNUM: SETZ T1, ;ZERO
|
||
ANSLUP: ILDB T2,A ;GET NEXT CHARACTER
|
||
CAIN T2,";" ;ANSI TERMINATOR?
|
||
JRST CPOPJ1 ; YES, SO GIVE A <SKIP>
|
||
SKIPN T2 ;<NUL> IS INVALID
|
||
POPJ P, ; THEN DONE
|
||
CAIL T2,"0" ;CHECK FOR INVALID NUMBER
|
||
CAILE T2,"9" ;
|
||
JRST CPOPJ1 ;INVALID, SO TERMINATE
|
||
IMULI T1,^D10 ;SET TO NEXT DIGIT
|
||
SUBI T2,"0" ;MAKE DECIMAL
|
||
ADD T1,T2 ;AND ADD TO SUM
|
||
JRST ANSLUP ;AND DO THE REST
|
||
|
||
SUBTTL TOPS20 dependent routines
|
||
|
||
IFE TOPS10,<
|
||
OPNDEV: MOVE T1,[GJ%SHT] ;USE SHORT FORM
|
||
HRROI T2,DEVSTR ;POINT TO DEVICE
|
||
GTJFN% ;GET JFN
|
||
ERJMP JSYERR ;GO OUTPUT ERROR
|
||
MOVEM T1,DEVJFN ;STORE JFN
|
||
MOVE T2,[<BYTE (6)BYTSIZ(4).GSIMG(8)0(18)0>!OF%RD!OF%WR]
|
||
OPENF%
|
||
ERJMP JSYERR
|
||
MOVE T1,[SIXBIT/PTYPAR/]
|
||
SYSGT% ;GET LINE NUMBER OF FIRST PTY
|
||
HRRZM T1,PTYLIN ;SAVE FOR LATER
|
||
HRROI T1,[ASCIZ/CTY/]
|
||
STDEV% ;GET DEVICE DESIGNATOR FOR CTY
|
||
ERJMP JSYERR
|
||
HRRZM T2,CTYLIN ;SAVE FOR LATER
|
||
SETO T1, ;GET OUR JOB INFO
|
||
MOVE T2,[XWD -JOBLEN,JOBBLK]
|
||
MOVEI T3,.JIJNO ;START WITH JOB NUMBER
|
||
GETJI%
|
||
ERJMP JSYERR
|
||
SKIPGE JOBBLK+.JIBAT ;BATCH?
|
||
TLO FL,FL.BAT ; YES, FLAG IT
|
||
MOVE T1,JOBBLK+.JITNO ;GET LINE NUMBER
|
||
CAMLE T1,CTYLIN ;GREATER THAN CTY?
|
||
TLO FL,FL.NET ; YES, COULD BE NETWORK LINE
|
||
CAML T1,PTYLIN ;PTY?
|
||
TLO FL,FL.PTY ; YES, FLAG IT
|
||
TLNE FL,FL.PTY ;PTY?
|
||
TLZ FL,FL.NET ; YES, NO NETWORK
|
||
POPJ P, ;RETURN
|
||
|
||
SETSLP: MOVE T1,[SIXBIT/HQLAV/] ;GET 1 MINUTE LOAD AVERAGE
|
||
SYSGT%
|
||
ERJMP JSYERR
|
||
MOVEI T3,^D4 ;ON THE OFF CHANCE THE FIXR OVERFLOWS
|
||
FIXR T3,T1 ;MAKE IT AN INTEGER
|
||
ADDI T3,1 ;ASSURE NON-ZERO
|
||
IMULI T3,LDAFCT ;MULTIPLY BY LOAD AVE FACTOR
|
||
TLNN FL,FL.NET ;NETWORK LINE?
|
||
JRST SETSL1 ;NO, SET WHAT WE CALCULATED
|
||
CAIG T3,NETTIM ;IF LOAD AVE MAKES GREATER USE THAT
|
||
MOVEI T3,NETTIM ;OTHERWISE SET THE NETTIM
|
||
SETSL1: MOVEM T3,SLPTIM ;
|
||
POPJ P,
|
||
|
||
WAIT: MOVE T1,SLPTIM ;SLEEP A WHILE
|
||
DISMS%
|
||
ERJMP JSYERR
|
||
POPJ P,
|
||
|
||
WAITO: MOVE T1,DEVJFN ;GET THE JFN
|
||
DOBE%
|
||
POPJ P,
|
||
|
||
STRSND: HRRO T2,T1
|
||
MOVE T1,DEVJFN ;GET THE JFN
|
||
SETZ T3,T4
|
||
SOUT%
|
||
ERJMP JSYERR
|
||
POPJ P,
|
||
|
||
CHRGET: MOVE T1,DEVJFN ;GET JFN
|
||
SIBE% ;ANY INPUT?
|
||
SKIPA
|
||
POPJ P,
|
||
BIN%
|
||
ERJMP JSYERR
|
||
AOS (P) ;GIVE SKIP RETURN
|
||
POPJ P,
|
||
|
||
CLRIBF: MOVE T1,DEVJFN ;GET JFN
|
||
CFIBF% ;CLEAR INPUT BUFFER
|
||
POPJ P,
|
||
|
||
PTYTYP: POPJ P, ;JUST RETURN (TYPE ALREADY SET BY TOPS20
|
||
|
||
SETTYP: MOVE T1,DEVJFN ;GET JFN
|
||
MOVEI T2,.MORXO
|
||
MTOPR% ;DISABLE PAUSE AT END OF PAGE
|
||
ERJMP JSYERR
|
||
MOVE T4,TRMSAV ;GET SAVED STATES WORD
|
||
CAIE T3,.MOONX ;WAS IT SET?
|
||
TRZA T4,TR.PAG ; NO, CLEAR IT
|
||
TRO T4,TR.PAG ;YES, SET IT
|
||
MOVEM T4,TRMSAV ;SAVE FOR LATER
|
||
RFMOD% ;GET CURRENT MODE WORD
|
||
TRZ T2,TT%LIC ;MAKE SURE RAISE IS CLEAR
|
||
STPAR% ;SAVE IT
|
||
ERJMP JSYERR
|
||
MOVE T2,C ;GET TYPE
|
||
STTYP% ;SET IT
|
||
MOVEI T2,.MOXOF
|
||
MOVEI T3,TR.PAG ;WAS PAUSE AT END OF PAGE SET?
|
||
TDNN T3,TRMSAV ;
|
||
SKIPA T3,[.MOOFF] ; NO, CLEAR IT
|
||
MOVEI T3,.MOONX ;YES, SET IT
|
||
MTOPR% ;DISABLE PAUSE AT END OF PAGE
|
||
ERJMP JSYERR
|
||
POPJ P,
|
||
|
||
SETWID: MOVE T3,T1 ;COPY WIDTH
|
||
MOVE T1,DEVJFN ;GET JFN
|
||
MOVEI T2,.MOSLW ;SET WIDTH
|
||
MTOPR%
|
||
ERJMP JSYERR
|
||
POPJ P,
|
||
|
||
CLSDEV: SETO T1,
|
||
CLOSF%
|
||
ERJMP JSYERR
|
||
POPJ P,
|
||
|
||
STOP: HALTF% ;STOP
|
||
JRST .-1
|
||
|
||
JSYERR: HRROI T1,CRLFQ ;OUTPUT <CRLF>?
|
||
PSOUT%
|
||
MOVEI T1,.PRIOU ;USE PRIMARY OUTPUT DEVICE
|
||
MOVE T2,[.FHSLF,,-1] ;OUTPUT MESSAGES FOR THIS PROCESS
|
||
SETZB T3,T4
|
||
ERSTR% ;OUTPUT THE ERROR STRING
|
||
JFCL
|
||
JFCL
|
||
SETO T1, ;CLOSE ALL JFNS
|
||
CLOSF%
|
||
JFCL ;IGNORE ERROR
|
||
HALTF
|
||
JRST .-1 ;DON'T ALLOW CONTINUES
|
||
|
||
>;END IFE TOPS10
|
||
|
||
SUBTTL TOPS10 dependent routines
|
||
|
||
IFN TOPS10,<
|
||
|
||
OPNDEV: OPEN TTYCHN,DEVBLK ;OPEN THE TERMINAL
|
||
JSP SP,UUOERR
|
||
MOVEI T1,TTYCHN ;GET UDX
|
||
IONDX. T1,
|
||
JSP SP,UUOERR
|
||
MOVEM T1,TRMUDX ;STORE FOR TRMOP.
|
||
MOVNI T1,1 ;GET OUR CONTROLLING JOB NUMBER
|
||
CTLJOB T1, ;TO SEE IF WE ARE ON A PTY
|
||
JSP SP,UUOERR
|
||
SKIPL T1 ;PTY?
|
||
TLO FL,FL.PTY ;YES
|
||
MOVE T1,[XWD -1,.GTOBI]
|
||
GETTAB T1, ;GET BATCH PARAMETERS
|
||
JSP SP,UUOERR
|
||
MOVE T2,[OB.BSS]
|
||
TDNE T2,T1 ;BATCH STREAM?
|
||
TLO FL,FL.BAT ;YES, FLAG BATCH
|
||
POPJ P,
|
||
|
||
SETSLP: MOVEI T2,NETTIM ;SET NETWORK SLEEP TIME
|
||
TLNN FL,FL.NET ;NETWORK LINE?
|
||
MOVEI T1,WAITIM ;NO, SET TTY SLEEP TIME
|
||
MOVEM T1,SLPTIM ;
|
||
POPJ P,
|
||
|
||
WAIT: MOVE T1,SLPTIM
|
||
HIBER T1, ;HIBER FOR SLPTIM
|
||
JSP SP,UUOERR
|
||
POPJ P,
|
||
|
||
WAITO: MOVEI T1,.TOSOP ;WAIT FOR OUTPUT BUFFER TO CLEAR
|
||
MOVEM T1,TRMFNC
|
||
MOVE T1,[XWD 2,TRMFNC]
|
||
TRMOP. T1,
|
||
POPJ P,
|
||
JRST WAITO
|
||
|
||
STRSND: MOVEM T1,TRMARG ;OUTPUT THE STRING
|
||
MOVEI T1,.TOOUS
|
||
MOVEM T1,TRMFNC
|
||
MOVE T1,[XWD 3,TRMFNC]
|
||
TRMOP. T1,
|
||
JSP SP,UUOERR
|
||
POPJ P,
|
||
|
||
;GET CHAR IN T2
|
||
CHRGET: MOVEI T1,.TOSIP ;CHECK FOR INPUT
|
||
MOVEM T1,TRMFNC
|
||
MOVE T1,[XWD 2,TRMFNC]
|
||
TRMOP. T1,
|
||
POPJ P,
|
||
MOVEI T1,.TOISC ;GET A CHAR
|
||
MOVEM T1,TRMFNC
|
||
MOVE T2,[XWD 2,TRMFNC]
|
||
TRMOP. T2,
|
||
JSP SP,UUOERR
|
||
AOS (P) ;<SKIP> RETURN
|
||
POPJ P,
|
||
|
||
CLRIBF: MOVEI T1,.TOCIB ;CLEAR THE INPUT BUFFER
|
||
MOVEM T1,TRMFNC
|
||
MOVE T1,[XWD 2,TRMFNC]
|
||
TRMOP. T1,
|
||
JSP SP,UUOERR
|
||
POPJ P,
|
||
|
||
PTYTYP: MOVNI T1,1 ;GET OUR CONTROLLING JOB NUMBER
|
||
CTLJOB T1, ;TO SEE IF WE ARE ON A PTY
|
||
JSP SP,UUOERR
|
||
TRMNO. T1, ;GET CONTROLLING JOB TERMINAL
|
||
JSP SP,UUOERR
|
||
PUSH P,TRMUDX ;SAVE OLD UDX
|
||
MOVEM T1,TRMUDX ;STORE NEW ONE
|
||
MOVEI T1,.TOTRM ;GET CONTROLLING TERMINAL TYPE
|
||
MOVEM T1,TRMFNC ;
|
||
MOVE C,[XWD 2,TRMFNC]
|
||
TRMOP. C,
|
||
JSP SP,UUOERR
|
||
POP P,TRMUDX ;GET BACK UDX
|
||
|
||
;HERE WITH TERMINAL TYPE IN C
|
||
SETTYP: MOVEM C,TRMARG ;SET THE TERMINAL TYPE
|
||
MOVEI T1,.TOTRM+.TOSET
|
||
MOVEM T1,TRMFNC
|
||
MOVE T1,[XWD 3,TRMFNC]
|
||
TRMOP. T1,
|
||
JSP SP,UUOERR
|
||
POPJ P,
|
||
|
||
SETWID: MOVEM T1,TRMARG ;STORE WIDTH
|
||
MOVEI T1,.TOWID+.TOSET
|
||
MOVEM T1,TRMFNC
|
||
MOVE T1,[XWD 3,TRMFNC]
|
||
TRMOP. T1,
|
||
JSP SP,UUOERR
|
||
POPJ P,
|
||
|
||
CLSDEV: CLOSE TTYCHN, ;CLOSE THE TERMINAL
|
||
POPJ P,
|
||
|
||
STOP: EXIT 1, ;STOP THE JOB
|
||
JRST STOP
|
||
|
||
UUOERR: OUTSTR CRLFQ
|
||
OUTSTR [ASCIZ/UUO returned an ERROR, AC 16 contains the PC/]
|
||
OUTSTR CRLF
|
||
SUBI SP,2 ;ADJUST TO UUO IN ERROR
|
||
MOVE 15,(16) ;GET UUO
|
||
HALT .
|
||
>;END IFN TOPS10
|
||
|
||
SUBTTL Terminal definitions
|
||
|
||
DEFINE TRMLST,<
|
||
TRM ^D01,<VT100 >,.TT100,<VT100>,TVT100
|
||
TRM ^D02,<LA120 >,.TT120,<LA120>,0
|
||
TRM ^D03,<TTY >,.TTDEF,<LA34>,TLA34
|
||
TRM ^D04,<VT100 >,.TT100,<VT132>,TVTVID
|
||
TRM ^D05,<VK100 >,.TTK10,<GIGI(VK100)>,0
|
||
TRM ^D06,<VT102 >,.TT102,<VT102>,TVTVID
|
||
TRM ^D07,<VT100 >,.TT100,<VT131>,TVTVID
|
||
TRM ^D08,<TTY >,.TTDEF,<VT278>,0
|
||
TRM ^D09,<TTY >,.TTDEF,<LQP8F>,0
|
||
TRM ^D10,<LA34 >,.TTDEF,<LA34VA>,TLA34
|
||
TRM ^D11,<LA120 >,.TT120,<LA120(Katakana)>,0
|
||
TRM ^D12,<VT100 >,.TT100,<VT125>,TVT125
|
||
TRM ^D13,<TTY >,.TTDEF,<LQP02>,0
|
||
TRM ^D15,<TTY >,.TTDEF,<LA12>,0
|
||
TRM ^D16,<VT102 >,.TT102,<VT102J(Katakana)>,0
|
||
TRM ^D17,<TTY >,.TTDEF,<CT RO Printer>,0
|
||
TRM ^D18,<TTY >,.TTDEF,<VT80>,0
|
||
TRM ^D19,<TTY >,.TTDEF,<CLATTER>,0
|
||
TRM ^D20,<TTY >,.TTDEF,<LA80>,0
|
||
TRM ^D21,<TTY >,.TTDEF,<CT>,0
|
||
TRM ^D22,<VT100 >,.TT100,<CT(VT100)>,0
|
||
TRM ^D22,<TTY >,.TTDEF,<CT(VT200)>,0
|
||
TRM 0,0,0,0,-1
|
||
>
|
||
DEFINE TRMLS1,<
|
||
TRM ^D00,<VT100 >,.TT100,<VT100>,0 ;BASE VT100
|
||
TRM ^D01,<VT100 >,.TT100,<VT180>,0 ;VT180
|
||
TRM ^D02,<VT100 >,.TT100,<VT100(AVO)>,0 ;VT100 WITH AVO
|
||
TRM ^D03,<VT100 >,.TT100,<VT180(AVO)>,0 ;VT180 WITH AVO
|
||
TRM ^D04,<VT100 >,.TT100,<VT125>,0 ;VT125
|
||
TRM ^D05,<VT100 >,.TT100,<VT185>,0
|
||
TRM ^D06,<VT100 >,.TT100,<VT125(AVO)>,0
|
||
TRM ^D07,<VT100 >,.TT100,<VT185(AVO)>,0
|
||
TRM ^D08,<VT100 >,.TT100,<VT100(PRT)>,0 ;PRINTER PORT
|
||
TRM ^D09,<VT100 >,.TT100,<VT100(PRT)>,0
|
||
TRM ^D10,<VT100 >,.TT100,<VT100(PRT+AVO)>,0
|
||
TRM ^D11,<VT100 >,.TT100,<VT100(PRT+AVO)>,0
|
||
TRM ^D12,<VT100 >,.TT100,<VT125(PRT)>,0
|
||
TRM ^D13,<VT100 >,.TT100,<VT125(PRT)>,0
|
||
TRM ^D14,<VT100 >,.TT100,<VT125(PRT+AVO)>,0
|
||
TRM ^D15,<VT100 >,.TT100,<VT125(PRT+AVO)>,0
|
||
TRM 0,0,0,0,-1
|
||
>
|
||
DEFINE TRMLS2,<
|
||
TRM ^D11,<VT100 >,.TT100,<VT132(PRT+AVO+STP)>,0
|
||
TRM ^D15,<VT100 >,.TT100,<VT132(GPO+PRT+AVO+STP)>,0
|
||
TRM 0,0,0,0,-1
|
||
>
|
||
DEFINE TRMLS4,<
|
||
TRM ^D04,<VT100 >,.TT100,<VT125>,0 ;VT125
|
||
TRM ^D05,<VT100 >,.TT100,<VT125(STP)>,0
|
||
TRM ^D06,<VT100 >,.TT100,<VT125(AVO)>,0
|
||
TRM ^D07,<VT100 >,.TT100,<VT125(AVO+STP)>,0
|
||
TRM 0,0,0,0,-1
|
||
>
|
||
DEFINE TRMLS3,<
|
||
TRM ^D00,<LA34 >,.TTDEF,<>,0
|
||
TRM ^D01,<LA34 >,.TTDEF,<(Extended)>,0
|
||
TRM ^D02,<LA34 >,.TTDEF,<(Katakana)>,0
|
||
TRM ^D03,<LA34 >,.TTDEF,<(Katakana+Extended)>,0
|
||
TRM 0,0,0,0,-1
|
||
>
|
||
DEFINE DECLST,<
|
||
TRM <A>,<VT50>,.TTV50,<VT50>,0
|
||
TRM <B>,<VT50>,.TTV50,<VT50>,0
|
||
TRM <C>,<VT52>,.TTV52,<VT55>,0
|
||
TRM <E>,<VT52>,.TTV52,<VT55(VT52)>,0
|
||
TRM <H>,<VT52>,.TTV52,<VT52H>,0
|
||
TRM <J>,<VT52>,.TTV52,<VT52H(COP)>,0
|
||
TRM <K>,<VT52>,.TTV52,<VT52>,0
|
||
TRM <L>,<VT52>,.TTV52,<VT52(COP)>,0
|
||
TRM <M>,<VT52>,.TTV52,<VT52(PRT)>,0
|
||
TRM <Z>,<VT52>,.TTV52,<VT100(VT52)>,0
|
||
TRM <`>,<VT52>,.TTV52,<VT61(VT52)>,0
|
||
TRM <a>,<VT52>,.TTV52,<VT61(VT52)(COP)>,0
|
||
TRM <b>,<VT52>,.TTV52,<VT61(VT52)(PRT)>,0
|
||
TRM <c>,<VT52>,.TTV52,<VT61(VT52)(PRT+COP)>,0
|
||
TRM <#>,<VT52>,.TTV52,<VT71t(VT52)>,0
|
||
TRM 0,0,0,0,-1
|
||
>
|
||
DEFINE TRM (RESP,T10NAM,T20NUM,DESC,ROUTINE),<
|
||
IFE ROUTINE+1,<
|
||
EXP 0 ;END TABLE IF ROUTINE = -1
|
||
>
|
||
IFN ROUTINE+1,<
|
||
XWD [ASCIZ/DESC/],RESP
|
||
>
|
||
>
|
||
TBANSI: TRMLST
|
||
TBT100: TRMLS1
|
||
TBT125: TRMLS4
|
||
TBT132: TRMLS2
|
||
TBLA34: TRMLS3
|
||
|
||
DEFINE TRM (RESP,T10NAM,T20NUM,DESC,ROUTINE),<
|
||
IFE ROUTINE+1,<
|
||
EXP 0 ;END TABLE IF ROUTINE = -1
|
||
>
|
||
IFN ROUTINE+1,<
|
||
XWD [ASCIZ/DESC/],"RESP"
|
||
>
|
||
>
|
||
|
||
TBDEC: DECLST
|
||
|
||
DEFINE TRM (RESP,T10NAM,T20NUM,DESC,ROUTINE),<
|
||
XWD 0,ROUTINE
|
||
>
|
||
DSANSI: TRMLST
|
||
DST100: TRMLS1
|
||
DST125: TRMLS4
|
||
DST132: TRMLS2
|
||
DSLA34: TRMLS3
|
||
DSDEC: DECLST
|
||
|
||
DEFINE TRM (RESP,T10NAM,T20NUM,DESC,ROUTINE),<
|
||
IFE TOPS10,<
|
||
XWD 0,T20NUM
|
||
>
|
||
IFN TOPS10,<
|
||
SIXBIT /T10NAM/
|
||
>
|
||
>
|
||
|
||
TYANSI: TRMLST
|
||
TYT100: TRMLS1
|
||
TYT125: TRMLS4
|
||
TYT132: TRMLS2
|
||
TYLA34: TRMLS3
|
||
TYDEC: DECLST
|
||
|
||
SUBTTL Miscellaneous literal storage
|
||
|
||
CRLFQ: BYTE (7)15,12,"?",0
|
||
CRLF: BYTE (7)15,12,0
|
||
|
||
LITRL: ;LITERALS START HERE
|
||
|
||
IFN TOPS10,<
|
||
END START
|
||
>
|
||
IFE TOPS10,<
|
||
END <ENTLEN,,ENTVEC>
|
||
>
|
||
|
||
|
||
|