1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-18 13:37:10 +00:00
Files
PDP-10.its/src/sysen1/trees.32
2018-11-20 16:39:25 +01:00

379 lines
6.2 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE TREES -- P. D. LEBLING (PDL)
A=1
B=2
C=3
D=4
E=5
F=6
G=7
U=16 ;user ptr into system
P=17
; mode bits
TYOC==2
PDL: BLOCK 40
SNM: 0
MASK: -1
COMMND: BLOCK 10.
START: MOVE P,[-40,,PDL]
.OPEN TYOC,[SIXBIT / !TTYXXXXXXYYYYYY/]
.VALUE
.BREAK 12,[5,,COMMND]
SKIPN COMMND ; none there?
JRST DEFSNM
;parse jcl
MOVE A,[440700,,COMMND]
MOVE B,[440600,,SNM]
MOVE C,[440600,,MASK]
SETOM MASK
SETZM SNM
MOVEI D,0
LOOP: ILDB 0,A
CAILE 0,40
CAIL D,6
JRST DONE
ADDI D,1
CAIE 0,"*
JRST NOTSTR
MOVEI 0,0
IDPB 0,B
IDPB 0,C
JRST LOOP
NOTSTR: IBP C
SUBI 0,40
CAIL 0,100
JRST .-2
IDPB 0,B
JRST LOOP
DONE: CAIE D,1
JRST SYSTEM
SKIPG MASK ;means was a *
JRST SYSTEM
SETZM SNM
SETZM MASK
JRST SYSTEM
DEFSNM: .SUSET [.RXUNA,,SNM] ;default is user himself
SYSTEM: PUSHJ P,INIT ;init symbols and map system
MOVE U,L
LSH U,1 ;skip sys and core jobs
SYSLUP: SKIPE A,@XUNAME
SKIPL @SUPPRO ;skip if top level job
JRST SYSNXT ;not top-level job
SKIPN @UNAME
JRST SYSNXT ;job gone
AND A,MASK
CAME A,SNM ;matches mask?
JRST SYSNXT ;no
TTYL: MOVE B,@JNAME ;job name
SKIPL @APRC
CAME B,[SIXBIT /TELSER/] ;telser is dull unless disowned
SKIPA
JRST SYSNXT
MOVE B,@UTMPTR ;resource word
SUB B,USRRCE
CAML B,NCT ;skip if console
JRST [SUB B,NCT
SUBI B,2
JRST .+1] ;otherwise sys or disowned
CAMN B,[-2]
OASC [ASCIZ / /] ;disowned tree
CAMN B,[-1]
OASC [ASCIZ /SYS /] ;system tree
JUMPL B,UJ
UTTY: OASCI "T ;tty num
CAIGE B,10
OASCI "0
OOCT B
OASCI "
UJ: OSIXS @UNAME ;uname of top job
OASC [ASCIZ / /]
OSIXS @JNAME ;jname of top job
SKIPE @USTP
SKIPL @APRC ;stopped and disowned?
SKIPA
JRST [OASC [ASCIZ / (Detached)/]
JRST UCR]
SKIPGE @APRC ;just disowned?
OASC [ASCIZ / (Disowned)/]
UCR: OASCR [0]
SYSNXT: ADD U,L ;next job
CAMGE U,@USRHI
JRST SYSLUP
QUIT: .BREAK 16,140000 ;exit
; ================================================================
; uuo handler (typeout uuos)
; ================================================================
ZZZ==.
LOC 40
0
JSR UUOH
LOC ZZZ
UUOCT==0
UUOTAB: JRST ILUUO
IRPS X,,[DEC BPTR OCT CTLP ASCC SIX ASC ASCI ASCR SIXS HPOS ALIGN SIGN]
UUOCT==UUOCT+1
O!X=UUOCT_27.
JRST UO!X
TERMIN
IFG UUOCT-37, PRINTC /---TOO MANY UUO'S---/
UUOMAX==.-UUOTAB
UUOD: 0 ; contents of UUO eff addr.
UUOE: 0 ; UUO effad.
UUOH: 0
PUSH P,A
PUSH P,B
PUSH P,C
PUSH P,D
MOVEI @40 ; get eff addr. of uuo
MOVEM UUOE
MOVE @0
MOVEM UUOD ; contents of eff adr
MOVE B,UUOE ; eff adr
LDB A,[270400,,40] ; get uuo ac,
LDB C,[330600,,40] ; op code
CAIL C,UUOMAX
MOVEI C,0 ; grt=>illegal
JRST @UUOTAB(C) ; go to proper rout
UUORET: POP P,D
POP P,C
POP P,B
POP P,A ; restore ac's
JRST 2,@UUOH
ILUUO: .VALUE [ASCIZ /:ILLEGAL UUO/]
UOBPTR: MOVEI C,0
MOVE B,UUOD
JRST UOASC1
UOASCR: SKIPA C,[^M] ; cr for end of type
UOASC: MOVEI C,0 ; no cr
HRLI B,440700 ; make ascii pointer
UOASC1: ILDB A,B ; get char
JUMPE A,.+3 ; finish?
PUSHJ P,IOTA
JRST .-3 ; and get another
SKIPE A,C ; get saved cr?
PUSHJ P,IOTA
JRST UUORET
UOASCC: HRLI B,440700 ; make ascii pointer
UOAS1C: ILDB A,B ; get char
CAIN A,^C
JRST UUORET
PUSHJ P,IOTA
JRST UOAS1C ; and get another
UOCTLP: MOVEI A,^P
PUSHJ P,IOTA1
UOASCI: MOVE A,B ; prt ascii immediate
PUSHJ P,IOTA
JRST UUORET
UOSIX: MOVE B,UUOD
USXOOP: JUMPE B,UUORET
LDB A,[360600,,B]
ADDI A,40
PUSHJ P,IOTA
LSH B,6
JRST USXOOP
UOSIXS: MOVE A,[440600,,UUOD]
USLOOP: ILDB C,A
ADDI C,40
PUSHJ P,IOTC
TLNE A,770000
JRST USLOOP
JRST UUORET
UOHPOS: SUB B,HPOS
SKIPG B
MOVEI B,1 ; always at least one space
UOHPO1: MOVEI A,40
PUSHJ P,IOTA
SOJG B,UOHPO1
JRST UUORET
POWER: 0 ? 1 ? 10. ? 100. ? 1000. ? 10000. ? 100000. ? 1000000.
UOSIGN: MOVM D,UUOD
ANDI A,7
MOVE A,POWER-1(A)
MOVEI C,40
UOSIG1: CAMLE A,D
PUSHJ P,IOTC
IDIVI A,10.
CAIE A,1
JRST UOSIG1
MOVEI A,"+
SKIPGE UUOD
MOVEI A,"-
SKIPN UUOD
MOVEI A,"
PUSHJ P,IOTA
SETZ A,
JRST UODEC
UOALIG: MOVE D,UUOD
ANDI A,7
MOVE A,POWER(A)
MOVEI C,40
UOALI1: CAMLE A,D
PUSHJ P,IOTC
IDIVI A,10.
CAIE A,1
JRST UOALI1
SETZ A,
UODEC: SKIPA C,[10.] ; get base for decimal
UOOCT: MOVEI C,8. ; octal base
MOVE B,UUOD ; get actual word to prt
JRST .+3 ; join code
UODECI: SKIPA C,[10.] ; decimal
UOOCTI: MOVEI C,8.
MOVEM C,BASE'
SKIPN A
HRREI A,-1 ; a=digit count
PUSHJ P,UONUM ; print numbr
JRST UUORET
UONUM: IDIV B,BASE
HRLM C,(P) ; save digit
SOJE A,UONUM1 ; done if 0
SKIPG A ; + => more
SKIPE B ; - => b=0 => done
PUSHJ P,UONUM ; else more
UONUM1: HLRZ C,(P) ; retreive digits
ADDI C,"0 ; make to ascii
CAILE C,"9 ; is it good dig
ADDI C,"A-"9-1 ; make hex digit
PUSHJ P,IOTC
POPJ P, ; ret
IOTC: PUSH P,A
MOVE A,C
PUSHJ P,IOTA
POP P,A
POPJ P,
HPOS: 0 ; line pos
IOTA: CAIN A,^P
JRST [.IOT TYOC,["^]
ADDI A,100
JRST IOTA1]
CAIN A,^J
POPJ P,
IOTA1: .IOT TYOC,A
CAIE A,^M
JRST IOTTAB
SKIPE SCRFLG'
.IOT TYOC,[^J]
SETZM HPOS
POPJ P,
; update line pos
IOTTAB: CAIN A,^I
JRST [MOVE A,HPOS
ADDI A,10
ANDI A,7770
MOVEM A,HPOS
POPJ P,]
AOS HPOS
POPJ P,
INIT: MOVE A,[-200,,200]
MOVEI B,0
.CALL [SETZ
SIXBIT /CORBLK/
MOVEI %CBRED
MOVEI %JSELF
A
MOVEI %JSABS
SETZ B]
.LOSE 1000
MOVE A,USRVAR
USRLOP: MOVE B,(A)
.EVAL B,
.VALUE
ADDI B,400000
HRLI B,U
MOVEM B,1(A)
ADD A,[2,,2]
JUMPL A,USRLOP
MOVE A,SYSLOC
SYSLOP: MOVE B,(A)
.EVAL B,
.VALUE
ADDI B,400000
MOVEM B,1(A)
ADD A,[2,,2]
JUMPL A,SYSLOP
MOVE A,SYSCON
SYSCLP: MOVE B,(A)
.EVAL B,
.VALUE
MOVEM B,1(A)
ADD A,[2,,2]
JUMPL A,SYSCLP
POPJ P,
; TABLES FOR EVAL
; GROUP 1: VALUE SAVED HAS U IN LH, 400000 ADDED.
USRTAB: SQUOZE 0,APRC
APRC: 0
SQUOZE 0,USTP
USTP: 0
SQUOZE 0,UNAME
UNAME: 0
SQUOZE 0,XUNAME
XUNAME: 0
SQUOZE 0,XJNAME
XJNAME: 0
SQUOZE 0,JNAME
JNAME: 0
SQUOZE 0,SUPPRO
SUPPRO: 0 ; SUPERIOR PROCESS
SQUOZE 0,UTMPTR
UTMPTR: 0
USRVAR: USRTAB-.,,USRTAB
; GROUP 2: VALUE SAVED HAS 400000 ADDED. REFERS TO ABSOLUTE LOCATIONS IN SYSTEM
SYSTAB: SQUOZE 0,USRHI
USRHI: 0
SYSLOC: SYSTAB-.,,SYSTAB
; GROUP 3: LOCATION-INDEPENDENT VALUES
SYSCTB: SQUOZE 0,L
L: 0
SQUOZE 0,NCT
NCT: 0
SQUOZE 0,USRRCE
USRRCE: 0
SYSCON: SYSCTB-.,,SYSCTB
END START