mirror of
https://github.com/PDP-10/its.git
synced 2026-02-16 12:53:06 +00:00
346 lines
5.6 KiB
Groff
346 lines
5.6 KiB
Groff
TITLE TTY OUTPUT SPY
|
||
|
||
.MLLIT==1
|
||
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
N=5
|
||
OBP=6
|
||
CH=7
|
||
P=17
|
||
|
||
TTYO=10
|
||
TTYI=11
|
||
DIRI=12
|
||
|
||
DEFINE UTYI AC
|
||
CAMN OBP,@TOOP
|
||
.HANG
|
||
CAMN OBP,@TOBEP
|
||
JRST [ MOVE OBP,@TOBBP
|
||
JRST .-3]
|
||
ILDB AC,OBP
|
||
ANDI AC,377
|
||
TERMIN
|
||
|
||
DEFINE SYSCAL A,B
|
||
.CALL [SETZ ? SIXBIT \A\ ? B ((SETZ)) ]
|
||
TERMIN
|
||
|
||
GO:
|
||
|
||
LOC 42
|
||
JSR TSINT
|
||
LOC GO
|
||
MOVEI P,PDL
|
||
.SUSET [.RSNAME,,SNAME]
|
||
.CALL [SETZ
|
||
SIXBIT /OPEN/
|
||
MOVSI .UAO
|
||
MOVEI TTYO
|
||
[SIXBIT /DSK/]
|
||
[SIXBIT /DIRT/]
|
||
[SIXBIT />/]
|
||
SETZ SNAME]
|
||
.VALUE
|
||
SKIPE RUNFLG
|
||
JRST SETDON
|
||
SETOM RUNFLG
|
||
MOVE A,[-NSYMS,,SYMS]
|
||
SYMLP: MOVE B,(A)
|
||
.EVAL B,
|
||
.VALUE
|
||
MOVEM B,(A)
|
||
AOBJN A,SYMLP
|
||
MOVE A,SYSCN
|
||
MOVEI B,1
|
||
PUSHJ P,MAKPAG
|
||
MOVE A,TOIP ;MAKE SURE WE HAVE THE PAGES THE BUFFER POINTERS ARE IN
|
||
MOVE B,NCT
|
||
PUSHJ P,MAKPAG
|
||
MOVE A,TOOP
|
||
PUSHJ P,MAKPAG
|
||
MOVE A,TOBEP
|
||
PUSHJ P,MAKPAG
|
||
MOVE A,TOBBP
|
||
PUSHJ P,MAKPAG
|
||
SETDON:
|
||
GO1: .SUSET [.SMASK,,[%PIIOC+%PITYI]]
|
||
SETZM VPOS
|
||
SETZM JCL
|
||
MOVE A,[JCL,,JCL+1]
|
||
BLT A,JCL+20
|
||
.BREAK 12,[5,,JCL]
|
||
SKIPN JCL
|
||
JRST [ SKIPE DEBUG
|
||
.VALUE
|
||
.VALUE [ASCIZ \:USE JCLKILL \]]
|
||
.VALUE [ASCIZ /:GENJOB
|
||
:PROCED
|
||
/]
|
||
PUSHJ P,GETNUM
|
||
ANDI N,77
|
||
MOVSI A,N
|
||
IORM A,TOIP ;SET UP INDEX FIELD FOR INDIRECTION
|
||
IORM A,TOOP
|
||
IORM A,TOBEP
|
||
IORM A,TOBBP
|
||
MOVE A,@TOBBP
|
||
MOVE B,@TOBEP
|
||
SUB B,A
|
||
PUSHJ P,MAKPAG ;MAKE SURE WE HAVE THE PAGE(S) THE BUFFER ITSELF IS IN
|
||
.IOT TTYO,[^P] ;BOY, IF WE'RE NOT A DISPLAY TERMINAL,
|
||
.IOT TTYO,["C] ; WILL WE LOSE!
|
||
MOVE A,TOIP
|
||
MOVE B,FTCTYP ;TV'S HAVE NO INFO IN TOOP, SO MUST USE TOIP.
|
||
CAIN B,%TNTV
|
||
MOVEM A,TOOP
|
||
MOVE OBP,@TOOP ;HAVE TO START SOMEWHERE
|
||
CAMN OBP,@TOBEP
|
||
MOVE OBP,@TOBBP
|
||
IBP OBP
|
||
LPE:
|
||
LP: UTYI A
|
||
TRZE A,%TXDIS
|
||
JRST TYPD ;DISPLAY OR CURSOR POS, DISPATCH
|
||
.IOT TTYO,A
|
||
JRST LP
|
||
|
||
TYPD: CAIL A,TYPDMX
|
||
JRST LPE
|
||
JRST @TYPDTB(A)
|
||
DTB::
|
||
TYPDTB: TYMOV ;MOVE CURSOR
|
||
TYMOV1 ;DUMMY FOR ABOVE
|
||
TYEEOF ;CLEAR EOF
|
||
TYEEOL ;CLEAR EOL
|
||
TYDELF ;DELETE FWD
|
||
LPE ;TERMINET MOTOR ON
|
||
LPE ; " " OFF
|
||
TYECRL ;CRLF TO DATAPOINTS & IMLACS
|
||
LPE ;"NOP FOR SUPERDUPER IMAGE MODE"
|
||
TYEBS ;BS
|
||
TYELF ;LF
|
||
TYECRL ;CARRET
|
||
LPE ;OUTPUT RESET
|
||
LPE ;QUOTE
|
||
TYEFS ;FWD SPACE
|
||
TYMOV1 ;MOVE CURSOR NEW STYLE
|
||
TYECLR ;CLEAR SCREEN
|
||
TYPDMX==.-TYPDTB
|
||
|
||
TYMOV: UTYI C ;OLD VPOS
|
||
UTYI B ;OLD HPOS OR 201
|
||
UTYI A ;NEW VPOS
|
||
UTYI B ;NEW HPOS
|
||
SKIPE FTCTYP
|
||
JRST TYMOV0
|
||
SUB A,C
|
||
ADD A,VPOS
|
||
EXCH A,B
|
||
IDIV B,VSZ
|
||
MOVE B,C
|
||
EXCH A,B
|
||
TYMOV0: MOVEM A,VPOS
|
||
MOVEI A,10(A)
|
||
MOVEI B,10(B)
|
||
.IOT TTYO,[^P]
|
||
.IOT TTYO,["V]
|
||
.IOT TTYO,A
|
||
.IOT TTYO,[^P]
|
||
.IOT TTYO,["H]
|
||
.IOT TTYO,B
|
||
JRST LPE
|
||
TYMOV1: UTYI A ;NEW VPOS
|
||
UTYI B ;NEW HPOS
|
||
SKIPE FTCTYP
|
||
JRST TYMOV0
|
||
EXCH A,B
|
||
IDIV B,VSZ
|
||
MOVE B,C
|
||
EXCH A,B
|
||
JRST TYMOV0
|
||
|
||
TYEFS: MOVEI A,"F
|
||
JRST PTYO
|
||
|
||
TYECLR: MOVEI A,"C
|
||
JRST PTYO
|
||
|
||
TYEEOF: MOVEI A,"E
|
||
PTYO: .IOT TTYO,[^P]
|
||
.IOT TTYO,A
|
||
JRST LPE
|
||
TYDELF: MOVEI A,"F
|
||
JRST PTYO
|
||
TYEEOL: MOVEI A,"L
|
||
JRST PTYO
|
||
TYECRL: .IOT TTYO,[^M]
|
||
JRST LPE
|
||
TYEBS: .IOT TTYO,[^H]
|
||
JRST LPE
|
||
TYELF: .IOT TTYO,[^J]
|
||
AOS VPOS
|
||
JRST LPE
|
||
|
||
|
||
GETNUM: MOVE C,[440700,,JCL] ;TRY OCTAL FIRST
|
||
SETZ N,
|
||
GETNLP: ILDB A,C
|
||
CAIN A,^M
|
||
POPJ P,
|
||
CAIG A,"7
|
||
CAIGE A,"0
|
||
JRST NAM ;MUST BE A UNAME
|
||
SUBI A,"0
|
||
LSH N,3
|
||
IORI N,(A)
|
||
JRST GETNLP
|
||
|
||
NAM: MOVNI D,6 ;SET UP FOR 6 CHARS, INCL SPACES IF NECESS
|
||
MOVE C,[440700,,JCL]
|
||
NAM1: ILDB A,C
|
||
CAIN A,^M
|
||
JRST NAM2
|
||
CAIN A,40
|
||
JRST NAM2
|
||
CAIL A,140
|
||
SUBI A,40
|
||
DPB A,C
|
||
AOJL D,NAM1
|
||
JRST DIR1
|
||
NAM2: MOVEI A,40
|
||
DPB A,C
|
||
AOJGE D,DIR1
|
||
IDPB A,C
|
||
AOJL D,.-1
|
||
|
||
DIR1: MOVE D,JCL
|
||
CAMN D,[ASCII /SYS /]
|
||
JRST [ SKIPL N,@SYSCN
|
||
POPJ P,
|
||
JRST .+1]
|
||
.OPEN DIRI,[0,,SIXBIT / TTY.FILE.(DIR)/]
|
||
.VALUE
|
||
MOVNI B,2
|
||
DIRLP1: .IOT DIRI,A
|
||
CAIE A,^J
|
||
JRST DIRLP1
|
||
AOJL B,DIRLP1
|
||
DIRLP2: MOVNI D,6 ;NO. CHARS IN UNAME
|
||
MOVE C,[440700,,JCL]
|
||
.IOT DIRI,A ;"T" AT START OF LINE
|
||
CAIN A,"D
|
||
JRST FLSLIN
|
||
CAIE A,"T
|
||
JRST [ SKIPE DEBUG
|
||
.VALUE
|
||
.VALUE [ASCIZ \:NOT LOGGED IN?KILL \]]
|
||
.IOT DIRI,TMN
|
||
.IOT DIRI,TMN+1
|
||
.IOT DIRI,A ;SPACE
|
||
DIRLP3: .IOT DIRI,A ;1ST CHAR OF UNAME
|
||
ILDB B,C
|
||
CAIE B,(A)
|
||
JRST FLSLIN ;NOT ON THIS LINE OF THE DIR
|
||
AOJL D,DIRLP3
|
||
MOVE N,TMN ;WE FOUND HIM
|
||
SUBI N,"0
|
||
LSH N,3
|
||
MOVE A,TMN+1
|
||
SUBI A,"0
|
||
ADDI N,(A)
|
||
.CLOSE DIRI,
|
||
POPJ P,
|
||
FLSLIN: .IOT DIRI,A
|
||
CAIE A,^J
|
||
JRST FLSLIN
|
||
JRST DIRLP2
|
||
|
||
7TYPE: HRLI A,440700
|
||
7TYLP: ILDB B,A
|
||
JUMPE B,CPOPJ
|
||
.IOT TTYO,B
|
||
JRST 7TYLP
|
||
CPOPJ: POPJ P,
|
||
|
||
;GET THE SAME PAGE THE SYS JOB HAS IN ITS PAGE WHOSE ADDRESS IS IN A, # WORDS IN B
|
||
MAKPAG: ANDI A,-1
|
||
PUSH P,A
|
||
ASH A,-10.
|
||
MOVEM A,CBLK1 ;GET FIRST PAGE
|
||
.CALL CBLK
|
||
.VALUE
|
||
POP P,A
|
||
ADDI A,-1(B) ;ADDRESS OF LAST WORD
|
||
ASH A,-10.
|
||
CAMN A,CBLK1
|
||
POPJ P,
|
||
MOVEM A,CBLK1
|
||
.CALL CBLK ;CROSSES PAGE BOUNDARY, GET SECOND PAGE
|
||
.VALUE
|
||
POPJ P,
|
||
|
||
TSINT: 0
|
||
0
|
||
EXCH A,TSINT
|
||
TSIN1: TRZE A,%PIIOC ;TYPICALLY ILLEGAL CHAR AFTER ^P
|
||
JRST [ AOS TSINT+1 ;SO FORGET IT
|
||
JRST INTRET]
|
||
TRZE A,%PITYI
|
||
JRST [ MOVEI CH,TTYI
|
||
.ITYIC CH,
|
||
JRST INTRET
|
||
CAIE CH,^Z
|
||
JRST VALRT
|
||
JRST INTRET]
|
||
.VALUE [ASCIZ \:UNKNOWN INTERRUPT?î\]
|
||
INTRET: JUMPN A,TSIN1
|
||
MOVE A,TSINT
|
||
.DISMIS TSINT+1
|
||
|
||
VALRT: CAIN CH,40
|
||
.IOT TTYI,CH ; EAT UP SPACE
|
||
CAIN CH,^L
|
||
JRST VAL1
|
||
.IOT TTYO,[^M]
|
||
JRST BYEBYE
|
||
VAL1: .IOT TTYI,CH ; EAT UP ^L
|
||
.IOT TTYO,[^P]
|
||
.IOT TTYO,["C]
|
||
BYEBYE: .BREAK 16,160000
|
||
|
||
|
||
CBLK: SETZ
|
||
SIXBIT \CORBLK\
|
||
1000,,210000 ;READ ACCESS, FAIL IF CAN'T
|
||
[-1] ;PUT PAGE IN SELF
|
||
CBLK1
|
||
SETZI 400000 ;GET FROM SYS JOB
|
||
CBLK1: 0 ;GETS -#PAGES,,PAGE # TO START
|
||
|
||
JCL: BLOCK 20
|
||
TMN: 0 ? 0 ;HOLDS 2 DIGIT TTY NO. FOR DIRI
|
||
SNAME: 0
|
||
LTCTYP: 0 ;LOCAL TCTYP
|
||
FTCTYP: 0 ;FOREIGN TCTYP
|
||
VSZ: 0 ;LOCAL VERTICAL SCREEN SIZE
|
||
HSZ: 0 ; " HORIZONTAL " "
|
||
VPOS: 0 ;CURRENT (HOPEFULLY) LOCAL VERTICAL CURSOR POS
|
||
RUNFLG: 0 ;NONZERO IF SETUP DONE ALREADY
|
||
DEBUG: -1 ;-1 => INHIBIT :KILLS.
|
||
SYMS:
|
||
IRPS X,,[NCT TOBEP TOBBP TOIP TOOP SYSCN]
|
||
X: SQUOZE 0,X
|
||
TERMIN
|
||
NSYMS==.-SYMS
|
||
CONSTA ? VARIAB
|
||
LPDL==20
|
||
PDL: BLOCK 20
|
||
PATCH": BLOCK 100
|
||
|
||
END GO
|
||
|
||
|