mirror of
https://github.com/PDP-10/its.git
synced 2026-01-17 08:43:21 +00:00
1218 lines
23 KiB
Plaintext
Executable File
1218 lines
23 KiB
Plaintext
Executable File
;-*-midas-*-
|
||
|
||
IF1,EXPUNG TTY
|
||
|
||
TITLE LOCK
|
||
|
||
IFNDEF HSNCTL, HSNCTL==1 ;1 means people with GUESTn directories can't
|
||
;lock, down, or net, or gun or detach anyone but
|
||
;themselves
|
||
IFNDEF GUNCTL, GUNCTL==1 ;1 means users who do not have directories
|
||
; may not gun or detach anyone but themselves.
|
||
IFNDEF SPYCTL, SPYCTL==1 ;1 means users on STYs cannot SPY.
|
||
IFNDEF REMCTL, REMCTL==0 ;1 means sty ttys cannot lock, down, or net.
|
||
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
D1=5
|
||
E=6
|
||
F=7
|
||
U=10
|
||
J=11
|
||
G=12
|
||
H=13
|
||
P=17
|
||
|
||
;CHANNELS 0 UPWARD USED FOR LOCK AND CTEST
|
||
MXCH==12 ;MAX FREE CH
|
||
GUNC==13 ;USED TO OPEN JOB TO BE GUNNED.
|
||
RTYO==14
|
||
RTYI==15
|
||
TYIC==16
|
||
TYOC==17
|
||
|
||
DEFINE TYICI X
|
||
.IOT TYIC,X ;NOW THAT CONVERT TO UPPER CASE MODE IS GONE,
|
||
CAIN X,177 ; THIS IS THE QUICKEST FIX
|
||
ADDI X,40 ;NOTE THAT X MUST BE AN ACCUMULATOR
|
||
CAIL X,140
|
||
SUBI X,40
|
||
TERMIN
|
||
|
||
SNGEC==2
|
||
|
||
LOC 42
|
||
JSR TSINT
|
||
|
||
LOC 100
|
||
STY: 0
|
||
BEG: MOVEI P,PDL
|
||
.SUSET [.RXJNAME,,C]
|
||
CAMN C,[SIXBIT /VTFIX/]
|
||
JRST VTFIXR
|
||
PUSHJ P,REGIO
|
||
MOVEI C,INMESG
|
||
PUSHJ P,TITYOT
|
||
.SUSET [.RUNAME,,RUNAME]
|
||
.SUSET [.SMASK,,[1]]
|
||
.SUSET [.SPICL,,[-1]]
|
||
.CALL [SETZ ? SIXBIT /STYGET/ ? MOVEI TYIC ? SETZM STY]
|
||
.LOSE 1000
|
||
JRST BLUP
|
||
|
||
|
||
;THESE ARE THE I.T.S. SYMBOLS NEEDED BY THE "SPEED" COMMAND.
|
||
;THIS ARRAY'S EVEN WORDS HAVE THE SYMBOL NAMES; THE ODD ONES GET THE VALUES.
|
||
;THE SYMBOL "FOO" IN LOCK WILL POINT TO THE WORD WHICH WILL CONTAIN
|
||
;"FOO"'S VALUE IN I.T.S.
|
||
|
||
;IF ANY SYMBOLS ARE ADDED, REMEMBER TO MODIFY AI:SYSTEM;EVSYMS >
|
||
|
||
SYMST: IRPS X,,NFDPTY NNTYS NCT TTYTYP DPKBAS TTYCHN NDPTYS
|
||
SQUOZE 0,X
|
||
X: 0
|
||
TERMIN
|
||
0
|
||
|
||
|
||
TSINT: 0
|
||
0
|
||
PUSH P,A
|
||
MOVE A,TSINT
|
||
CAIE A,1
|
||
JRST INTAR
|
||
MOVEI A,TYIC
|
||
.ITYIC A,
|
||
JRST INTAR
|
||
CAIN A,7 ;^G
|
||
JRST QUIT
|
||
CAIN A,14 ;^L, DO THE RIGHT THING.
|
||
JRST FORMF
|
||
INTAR: POP P,A
|
||
.DISMISS TSINT+1
|
||
|
||
|
||
QUIT: .RESET TYOC,
|
||
SKIPN CHARF ;INSIDE "O" LOOP
|
||
JRST QUIT1
|
||
XCT FCHRL1 ;SO GET THE FULL-CHAR-SET-CHARACTER
|
||
.VALUE
|
||
PUSHJ P,OCTPNT ;AND PRINT IT, BUT THEN QUIT
|
||
QUIT1: .RESET TYIC,
|
||
SETZM CHARF
|
||
SETZM KILLF
|
||
.DISMI [BLUPR]
|
||
|
||
FORMF: SKIPN KILLF ;KILL routine wants to see ^Ls ugh bletch
|
||
SKIPE CHARF ;so does FCO routine
|
||
JRST INTAR
|
||
.IOT TYIC,A ;FLUSH THE RANDOM ^L
|
||
JRST INTAR
|
||
|
||
REVIVE: MOVEI B,[ASCIZ /
|
||
REVIVE SYSTEM?/]
|
||
PUSHJ P,QHACK
|
||
.REVIVE
|
||
.OPEN GUNC,DWNMAL ;IF SYS;DOWN MAIL EXISTS,
|
||
JRST BLUP
|
||
.CLOSE GUNC, ;GIVE USER OPTION OF FLUSHING IT.
|
||
MOVEI B,[ASCIZ /
|
||
DELETE SYS;DOWN MAIL?
|
||
/]
|
||
PUSHJ P,QEXPL2
|
||
TYICI B
|
||
CAIE B,"Y+40
|
||
CAIN B,"Y
|
||
.FDELE DWNMAL
|
||
JFCL
|
||
JRST BLUP
|
||
|
||
PVAL: .VALUE [ASCIZ /:VK /]
|
||
BEGLUP: MOVEI P,PDL
|
||
BLUPR: PUSHJ P,REGIO
|
||
BLUP: .CLOSE GUNC,
|
||
PUSHJ P,TCRR
|
||
.IOT TYOC,["_]
|
||
SETZB D,TNUM
|
||
MOVE E,[440600,,D]
|
||
PUSHJ P,GNUM
|
||
JRST NOTNUM
|
||
GNUM: SETZM TNUM
|
||
GNUM1: TYICI A
|
||
CAIL A,"0
|
||
CAILE A,"9
|
||
POPJ P,
|
||
MOVEI B,10
|
||
IMUL B,TNUM
|
||
ADDI B,-"0(A)
|
||
MOVEM B,TNUM
|
||
JRST GNUM1
|
||
|
||
INITST: MOVEI A,SYMST
|
||
INITS1: SKIPN B,(A)
|
||
POPJ P,
|
||
SKIPE 1(A)
|
||
AOJA A,[AOJA A,INITS1]
|
||
.EVAL B,
|
||
SETZ B, ;Don't be nhappy on MC where DPKBAS is undefined.
|
||
MOVEM B,1(A)
|
||
AOJA A,[AOJA A,INITS1]
|
||
|
||
REGIO: MOVEI A,21 ;REGULAR I/O
|
||
HRLM A,TTY
|
||
.OPEN TYOC,TTY
|
||
.VALUE
|
||
MOVEI A,30
|
||
HRLM A,TTY
|
||
.OPEN TYIC,TTY
|
||
.VALUE
|
||
POPJ P,
|
||
|
||
;; Skip if this person's HSNAME is not a GUESTn directory
|
||
IFN HSNCTL,[
|
||
HSNCHK: PUSH P,A
|
||
.SUSET [.RHSNAME,,A] ;Let's see if this is a tourist
|
||
TRZ A,77 ;Ignore low digit
|
||
CAME A,[SIXBIT /GUEST/]
|
||
AOS -1(P)
|
||
POP P,A
|
||
POPJ P,
|
||
];IFN HSNCTL
|
||
PLS:
|
||
IFN REMCTL,[
|
||
SKIPE STY ;prevents sty terminals from locking
|
||
JRST BLUP
|
||
];IFN REMCTL,
|
||
IFN HSNCTL,[
|
||
PUSHJ P,HSNCHK
|
||
JRST BLUP
|
||
];IFN HSNCTL,
|
||
MOVE B,TNUM
|
||
MOVE A,CHARAY
|
||
SKIPE CHARAY+1(A)
|
||
AOBJN A,.-1
|
||
JUMPGE A,QLUP
|
||
MOVEM B,CHARAY+1(A)
|
||
DPB A,[270400,,PLS.]
|
||
DPB B,[300,,TY.]
|
||
LDB B,[30300,,B]
|
||
DPB B,[060300,,TY.]
|
||
PLS.: .OPEN .,TY.
|
||
JRST LUP9
|
||
.IOT TYOC,["W]
|
||
MOVEI C,[SIXBIT \THIS CONSOLE LOCKED BY !\]
|
||
PUSHJ P,DITYOT
|
||
MOVEI C,RUNAME
|
||
PUSHJ P,ITYOUT
|
||
JRST BLUP
|
||
|
||
INMESG: SIXBIT / LOCK./
|
||
.FNAM2+'!
|
||
|
||
FLUSH: MOVE B,TNUM
|
||
MOVE A,CHARAY
|
||
CAME B,CHARAY+1(A)
|
||
AOBJN A,.-1
|
||
JUMPGE A,QLUP
|
||
SETZM CHARAY+1(A)
|
||
PUSHJ P,TTYSTA
|
||
SKIPN B
|
||
JRST QLUP
|
||
.IOT TYOC,["*]
|
||
DPB A,[270400,,.+1]
|
||
.CLOSE .,
|
||
JRST BLUP
|
||
|
||
LFTAR: PUSHJ P,IMOUT
|
||
.IOT TYOC,TNUM
|
||
JRST BEGLUP
|
||
|
||
|
||
DETACH: SETOM GUNDET ;-1 FOR DETACH.
|
||
SETZM TGUNFL
|
||
JRST DETAC0
|
||
|
||
GUN: SETZM GUNDET ;0 FOR GUN.
|
||
SETZM TGUNFL
|
||
JRST DETAC0
|
||
|
||
TGUN: SETZM GUNDET
|
||
SETOM TGUNFL
|
||
DETAC0: SKIPGE B,TNUM
|
||
JRST QLUP
|
||
JUMPE B,GUN1
|
||
PUSHJ P,USER
|
||
JRST QLUP
|
||
JUMPE U,QLUP
|
||
MOVEM U,USTORE
|
||
MOVEM J,JSTORE
|
||
PUSHJ P,TCRR
|
||
MOVE C,GUNDET
|
||
MOVE C,[[SIXBIT \DETACH !\]
|
||
[SIXBIT \GUN DOWN !\]
|
||
]+1(C)
|
||
PUSHJ P,ITYOUT
|
||
MOVEI C,USTORE
|
||
PUSHJ P,ITYOUT
|
||
MOVEI C,JSTORE
|
||
PUSHJ P,ITYOUT
|
||
.IOT TYOC,["?]
|
||
PUSHJ P,QHACK1
|
||
MOVEM B,UGUNU
|
||
JRST GUNACT
|
||
|
||
USER: .CALL [ SETZ ? SIXBIT/OPEN/
|
||
[10,,GUNC] ;INSIST FOREIGN USER CHANNEL.
|
||
['USR,,]
|
||
1000,,400000(B) ;OPEN JOB BY NUMBER.
|
||
SETZ [0]]
|
||
POPJ P,
|
||
.USET GUNC,[.RUNAME,,U]
|
||
.USET GUNC,[.RJNAME,,J]
|
||
POPJ1: AOS (P)
|
||
POPJ P,
|
||
|
||
GUN1: MOVEI B,[ASCIZ \
|
||
UNAME=\]
|
||
PUSHJ P,QEXPL2
|
||
PUSHJ P,6NAMEG
|
||
JUMPE E,QLUP ;NULL UNAME EQUIVALENT TO SELF IN .OPEN - WHAT A LOSS!
|
||
;"GUN<CR>" WOULD SUICIDE IF THIS INSN DIDN'T PREVENT IT.
|
||
MOVE F,[SIXBIT \HACTRN\]
|
||
JUMPN C,GUN3
|
||
MOVE F,E
|
||
MOVEI B,[ASCIZ \
|
||
JNAME=\]
|
||
PUSHJ P,QEXPL2
|
||
PUSHJ P,6NAMEG
|
||
EXCH E,F
|
||
GUN3: MOVE D1,[10,,'USR]
|
||
MOVEM E,USTORE
|
||
MOVEM F,JSTORE
|
||
.OPEN GUNC,D1
|
||
JRST QLUP
|
||
.USET GUNC,[.RUIND,,UGUNU]
|
||
JRST GUNACT
|
||
|
||
UGUNU: 0
|
||
USTORE: 0
|
||
SIXBIT \ !\
|
||
JSTORE: 0
|
||
SIXBIT \!\
|
||
|
||
6NAMEG: MOVE D,[440600,,E]
|
||
MOVEI E,0
|
||
6NAME1: TYICI C
|
||
SUBI C,40
|
||
CAIL C,100
|
||
JRST QLUP
|
||
JUMPLE C,CPOPJ
|
||
TLNE D,770000
|
||
IDPB C,D
|
||
JRST 6NAME1
|
||
|
||
;Now that we know who we are supposed to gun or detach, decide whether it is ok.
|
||
GUNACT:
|
||
IFN GUNCTL,[
|
||
.SUSET [.RXUNAME,,B] ;Validate the XUNAME somewhat
|
||
CAMN B,[SIXBIT /GUEST/]
|
||
JRST GUNCT5 ;GUEST can never gun anyone (except another guest)
|
||
.SUSET [.RUNAME,,D]
|
||
hlrz c,d ;get the first 3 characters in C
|
||
cain c,(sixbit /SYS/) ;is this some system directory?
|
||
jrst gunct5 ; yes, what is this foolishness?
|
||
GUNCT1: CAMN B,D ;Characters that differ must be digits in UNAME
|
||
JRST GUNCT3
|
||
SETZB A,C
|
||
LSHC A,6
|
||
LSHC C,6
|
||
CAMN A,C
|
||
JRST GUNCT1
|
||
CAIL C,'0
|
||
CAILE C,'9
|
||
CAIA ;Differs by other than trailing digit, flush
|
||
JRST GUNCT1
|
||
.SUSET [.RUNAME,,A]
|
||
CAIA
|
||
GUNCT3: .SUSET [.RXUNAME,,A]
|
||
.suset [.rhsname,,c]
|
||
came a,c ;do we have a directory?
|
||
jrst gunct5 ; no, don't permit it unless self
|
||
push p,a ;save so we can do some hacking
|
||
.suset [.runame,,c] ;look at who we REALLY are
|
||
trz a,77 ;we ignore the last char, maybe FOOBA0
|
||
trz c,77 ;in both of them, since may be FOOBAR
|
||
gunctx: lsh c,-1 ;shift right one
|
||
lsh a,-1 ;do it to both of them
|
||
trnn a,1 ;is the UNAME right-justified yet?
|
||
jrst gunctx ; no, keep looking
|
||
;;we now have flushed all the added bits of FOO0, they should be EQUAL
|
||
came a,c ;did we win?
|
||
jrst [pop p,a ? jrst gunct5] ;no, don't let him do it unless self
|
||
pop p,a
|
||
.CLOSE GUNC,
|
||
JRST GUNCT4
|
||
;Compare A with xuname of job to be gunned
|
||
GUNCT5: MOVE B,UGUNU
|
||
.CALL [ SETZ ? SIXBIT/USRVAR/ ? MOVEI %JSNUM(B)
|
||
['XUNAME] ? SETZM B]
|
||
JRST DETAC0 ;Job vanished
|
||
CAMN A,B
|
||
JRST GUNCT6 ;it you, go ahead and do it.
|
||
MOVEI B,[ASCIZ/
|
||
You aren't allowed to GUN or DETACH anyone but yourself./]
|
||
PUSHJ P,QEXPL2
|
||
JRST BLUP
|
||
|
||
GUNCT4:
|
||
];IFN GUNCTL
|
||
IFN 0,[
|
||
SKIPE STY
|
||
JRST BLUP ;prevents sty terminals from gunning/detaching
|
||
]
|
||
IFN HSNCTL,[
|
||
PUSHJ P,HSNCHK ;Is this a GUESTn loser?
|
||
CAIA
|
||
JRST GUNCT6
|
||
;can't do it except to yourself.
|
||
.suset [.rxuname,,a]
|
||
MOVE B,UGUNU
|
||
.CALL [ SETZ ? SIXBIT/USRVAR/ ? MOVEI %JSNUM(B)
|
||
['XUNAME] ? SETZM B]
|
||
JRST DETAC0 ;Job vanished
|
||
CAMN A,B
|
||
JRST GUNCT6 ;it you, go ahead and do it.
|
||
movei b,[ASCIZ/
|
||
You aren't allowed to GUN or DETACH anyone but yourself./]
|
||
PUSHJ P,QEXPL2
|
||
JRST BLUP
|
||
];IFN HSNCTL
|
||
GUNCT6: MOVE B,UGUNU
|
||
PUSHJ P,USER ;Make sure job is still there with same name
|
||
JRST QLUP
|
||
CAMN U,USTORE
|
||
CAME J,JSTORE
|
||
JRST DETAC0 ;Not there, try over
|
||
.CALL [ SETZ ? SIXBIT/USRVAR/ ? MOVEI %JSNUM(B)
|
||
[SIXBIT/CNSL/] ? SETZM C]
|
||
JRST DETAC0 ;Job vanished
|
||
.CALL [ SETZ ? SIXBIT/USRVAR/ ? MOVEI %JSNUM(B)
|
||
[SIXBIT/JNAME/] ? SETZM A]
|
||
JRST DETAC0
|
||
CAME A,[SIXBIT /HACTRN/]
|
||
SETO C, ;We want no message on the terminal unless job was a HACTRN.
|
||
SKIPE GUNDET
|
||
JRST DETAC1
|
||
.GUN B,
|
||
JRST QLUP
|
||
JRST GUNMSG
|
||
|
||
DETAC1: .CALL [SETZ? 'DETACH ? SETZI 400000(B)]
|
||
JRST QLUP
|
||
;Now print message on terminal of the job that was gunned.
|
||
GUNMSG: JUMPL C,BLUP ;BUT ONLY IF IT HAD ONE.
|
||
MOVEI B,10.
|
||
GUNMS1: MOVEI A,30. ;GIVE IT TIME TO BECOME FREE
|
||
.SLEEP A,
|
||
MOVE A,[.UAO,,'T00]
|
||
DPB C,[0300,,A]
|
||
LSH C,-3
|
||
DPB C,[060300,,A] ;RH(A) NOW HAS TNN, FOR PROPER TTY NUMBER.
|
||
.OPEN GUNC,A
|
||
JRST [ SOJG B,GUNMS1 ;KEEP WAITING FOR TTY TO BE FREE, UP TO 10 SECONDS.
|
||
JRST BLUP]
|
||
MOVEI A,[ASCIZ/You have just been /]
|
||
PUSHJ P,GUNASC
|
||
MOVEI A,[ASCIZ/logged out/]
|
||
SKIPE GUNDET
|
||
MOVEI A,[ASCIZ/detached/]
|
||
PUSHJ P,GUNASC
|
||
MOVEI A,[ASCIZ/ by /]
|
||
PUSHJ P,GUNASC
|
||
.SUSET [.RXUNAM,,A]
|
||
PUSHJ P,GUNSIX
|
||
SKIPN TGUNFL
|
||
JRST [ .IOT GUNC,[".]
|
||
.CLOSE GUNC,
|
||
JRST BLUP]
|
||
MOVEI A,[ASCIZ/
|
||
because you did not log out when you were asked to.
|
||
Tourists should always log out when legitimate users ask.
|
||
Please don't log in again until the system is less loaded./]
|
||
PUSHJ P,GUNASC
|
||
.CLOSE GUNC,
|
||
JRST BLUP
|
||
|
||
;OUTPUT ASCIZ STRING <- A TO GUNC.
|
||
GUNASC: HRLI A,440700
|
||
GUNAS1: ILDB B,A
|
||
JUMPE B,CPOPJ
|
||
.IOT GUNC,B
|
||
JRST GUNAS1
|
||
|
||
;OUTPUT SIXBIT WORD IN B TO GUNC.
|
||
GUNSIX: JUMPE A,CPOPJ
|
||
SETZ B,
|
||
ROTC A,6
|
||
ADDI B,40
|
||
.IOT GUNC,B
|
||
JRST GUNSIX
|
||
|
||
TGUNFL: 0 ;NONZERO FOR TGUN COMMAND, AS OPPOSED TO GUN OR DETACH.
|
||
GUNDET: 0 ;NONZERO FOR DETACH, ZERO FOR GUN OR TGUN.
|
||
|
||
NOTNUM: CAIE A,177
|
||
CAIN A,15
|
||
JRST BLUP
|
||
NOTNM2: SUBI A,40
|
||
JUMPLE A,QLUP
|
||
TLNE E,770000
|
||
IDPB A,E
|
||
MOVSI F,-CTABL
|
||
CAME D,COMTAB(F)
|
||
AOBJN F,.-1
|
||
JUMPG F,CLUP
|
||
HRRZ F,COMT2(F)
|
||
JRST (F)
|
||
|
||
CLUP: TYICI A
|
||
CAIN A,177
|
||
JRST QLUP
|
||
JRST NOTNM2
|
||
|
||
QEXPL: MOVSI F,-CTABL
|
||
QEXPLL: HLRZ B,COMT2(F)
|
||
JUMPE B,QEXPLE
|
||
MOVE A,COMTAB(F)
|
||
MOVEM A,QMESST
|
||
MOVE A,[440600,,QMESST]
|
||
PUSHJ P,TCRR
|
||
QEXP2L: ILDB C,A
|
||
ADDI C,40
|
||
CAIE C,40
|
||
.IOT TYOC,C
|
||
CAIE C,40
|
||
JRST QEXP2L
|
||
MOVEI C,^I
|
||
.IOT TYOC,C
|
||
PUSHJ P,QEXPL2
|
||
QEXPLE: AOBJN F,QEXPLL
|
||
JRST BEGLUP
|
||
|
||
QMESST: 0
|
||
0 ;TERM
|
||
|
||
COMTAB: '+_36
|
||
'-_36
|
||
'"_36
|
||
'__36
|
||
SIXBIT /DETACH/
|
||
SIXBIT /DOWN/
|
||
SIXBIT /DPK/
|
||
SIXBIT /FCO/
|
||
SIXBIT /FLASH/
|
||
SIXBIT /GUN/
|
||
SIXBIT /I37/
|
||
SIXBIT /ISPY/
|
||
SIXBIT /KILL/
|
||
SIXBIT /NET/
|
||
'O_36
|
||
'P_36
|
||
'Q_36
|
||
SIXBIT /RCAVIC/
|
||
SIXBIT /REVIVE/
|
||
SIXBIT /SPEED/
|
||
SIXBIT /SPY/
|
||
SIXBIT /SYS/
|
||
SIXBIT /TEST/
|
||
SIXBIT /TGUN/
|
||
SIXBIT /TPL/
|
||
SIXBIT /TVQPY/
|
||
SIXBIT /UCLEAR/
|
||
'?_36
|
||
CTABL==.-COMTAB
|
||
COMT2: [ASCIZ /Lock TTY (precede by #)/],,PLS
|
||
[ASCIZ /Unlock TTY (")/],,FLUSH ;-
|
||
[ASCIZ /Output next character in octal/],,1CHAR
|
||
[ASCIZ /Type character with ASCII value # (")/],,LFTAR
|
||
[ASCIZ /Detach job # from its TTY (")/],,DETACH
|
||
[ASCIZ /System down in # minutes (")/],,KILL
|
||
[ASCIZ /Reinitialize DataPoint Kludge/],,DPKI
|
||
[ASCIZ /Echo characters in octal, with control, meta bits/],,FCHAR
|
||
FLASH ;LEFT OVER FROM AP LINE DAYS, UNUSED.
|
||
[ASCIZ /Kill user with index # (")/],,GUN
|
||
[ASCIZ /Initialize Model 37 Teletype/],,I37
|
||
[ASCIZ /Like SPY, but types out in image mode/],,ISPY
|
||
KILL ;SAME AS DOWN. NOT DOCUMENTED, DESPITE POEMS.
|
||
[ASCIZ /Reinitialize ARPANET interface/],,NET
|
||
[ASCIZ /Echo characters in octal/],,CHAR ;O
|
||
[ASCIZ /Return to DDT without killing LOCK/],,PVAL
|
||
[ASCIZ /Return to DDT killing LOCK/],,[.LOGOUT?.BREAK 16,160000] ;Q
|
||
RCAVIC ;IF YOU DUNNO WHAT IT IS, DON'T USE IT.
|
||
[ASCIZ /Cancel DOWN command, system will stay up (maybe)/],,REVIVE
|
||
[ASCIZ /Change Datapoint linespeed (precede by line #)/],,SPEED
|
||
[ASCIZ /Look at input from TTY (precede by TTY #)/],,SPY
|
||
[ASCIZ /Change system checker status/],,SYSJ
|
||
[ASCIZ /Test core job (casual use NOT recommended)/],,CTEST
|
||
[ASCIZ /Gun Tourist who has been asked to log out/],,TGUN
|
||
[ASCIZ /Delete top item on TPL stack/],,SYSL ;TPL
|
||
[ASCIZ /Change state of TV hardcopy device/],,TVQPY
|
||
[ASCIZ /Initialize microtape directory/],,UCLR
|
||
[ASCIZ /List commands/],,QEXPL
|
||
IFN .-COMT2-CTABL,[PRINT /LOSS AT COMTAB
|
||
/]
|
||
|
||
LUP9: .IOT TYOC,["L]
|
||
JRST BLUP
|
||
|
||
QLUP: .IOT TYOC,["?]
|
||
JRST BEGLUP
|
||
|
||
KILL:
|
||
IFN REMCTL,[
|
||
SKIPE STY ;prevents sty terminals from killing.
|
||
JRST BLUP
|
||
]
|
||
IFN HSNCTL,[
|
||
PUSHJ P,HSNCHK
|
||
JRST BLUP
|
||
]
|
||
MOVE B,TNUM
|
||
CAIGE B,5.
|
||
JRST QLUP
|
||
MOVEI B,[ASCIZ /
|
||
DO YOU REALLY WANT THE SYSTEM TO GO DOWN?
|
||
/]
|
||
PUSHJ P,QHACK
|
||
.OPEN GUNC,DWNMAL ;DOES SYS;DOWN MAIL EXIST?
|
||
JRST KILL4 ;NO, SHOULD CREATE ONE.
|
||
.CLOSE GUNC, ;YES, GIVE OPTION OF LEAVING OLD ONE.
|
||
MOVEI B,[ASCIZ /
|
||
REPLACE SYS;DOWN MAIL?
|
||
/]
|
||
PUSHJ P,QEXPL2
|
||
TYICI B
|
||
CAIE B,"Y+40 ;IF USER ANSWERS NO, GO TO KILL1.
|
||
CAIN B,"Y
|
||
JRST KILL4
|
||
JRST KILL1
|
||
|
||
KILL4: .OPEN GUNC,[.UAO,,'SYS ? SIXBIT/DOWN/ ? SIXBIT/MAIL/]
|
||
.LOSE 1400
|
||
MOVEI B,[ASCIZ/
|
||
PLEASE ENTER A BRIEF MESSAGE TO USERS, ENDED BY ^C
|
||
/]
|
||
PUSHJ P,QEXPL2
|
||
MOVE B,MBUFPT
|
||
SETOM KILLF' ;kludgey flag for FORMF routine
|
||
KILL0: .IOT TYIC,A
|
||
CAIE A,177
|
||
JRST KILL5
|
||
CAMN B,MBUFPT ;RUBOUT
|
||
JRST KILL0
|
||
LDB A,B
|
||
.IOT TYOC,A
|
||
ADD B,[070000,,]
|
||
JUMPGE B,KILL0
|
||
SUB B,[430000,,1]
|
||
JRST KILL0
|
||
|
||
KILL5: CAIE A,14
|
||
JRST KILL2
|
||
PUSHJ P,TCRR
|
||
MOVE C,MBUFPT ;^L RETYPE
|
||
KILL6: CAMN C,B
|
||
JRST KILL0
|
||
ILDB A,C
|
||
.IOT TYOC,A
|
||
JRST KILL6
|
||
|
||
KILL2: IDPB A,B
|
||
CAIN A,15
|
||
JRST [ .IOT TYOC,A
|
||
MOVEI A,12
|
||
.IOT TYOC,A
|
||
JRST KILL2 ]
|
||
CAIE A,^C
|
||
JRST KILL0
|
||
SETZM KILLF
|
||
MOVE C,MBUFPT
|
||
KILL3: ILDB A,C
|
||
.IOT GUNC,A
|
||
CAME B,C
|
||
JRST KILL3
|
||
.CLOSE GUNC,
|
||
KILL1: MOVE B,TNUM
|
||
IMULI B,60.*30.
|
||
.SHUTDN B,
|
||
JRST QLUP
|
||
JRST BLUP
|
||
|
||
;FOR CHECKING SYS;DOWN MAIL'S EXISTENCE, OR DELETING IT.
|
||
DWNMAL: SIXBIT / SYSDOWN MAIL/
|
||
0
|
||
0
|
||
|
||
MBUFPT: 010700,,.
|
||
BLOCK 100
|
||
|
||
QHACK: PUSHJ P,QEXPL2
|
||
.LISTEN
|
||
.RESET TYIC,
|
||
QHACK1: TYICI C
|
||
CAIN C,"N
|
||
JRST BEGLUP
|
||
CAIE C,"Y
|
||
JRST QLUP
|
||
MOVE B,TNUM ;BARF^BARF
|
||
POPJ P,
|
||
|
||
|
||
AITEST: .CALL [SETZ
|
||
SIXBIT /SSTATU/
|
||
REPEAT 5,[2000,,A ? ] ;WE DON'T WANT ALL THIS CRAP,
|
||
402000,,A] ;JUST THE MACHINE NAME.
|
||
.LOSE 1000
|
||
CAMN A,[SIXBIT /AI/]
|
||
AOS (P) ;SKIPS IF RUN ON AI.
|
||
POPJ P,
|
||
|
||
TVQPY: PUSHJ P,AITEST
|
||
JRST TVLUZ
|
||
.CALL [ SETZ
|
||
SIXBIT /T11MP/
|
||
1000,,200 ;LOW CORE ON 11=>PAGE 200 ON 10.
|
||
SETZ [600000,,001777]]
|
||
.LOSE 1000
|
||
.CALL [ SETZ
|
||
SIXBIT /T11MP/
|
||
1000,,201
|
||
SETZ [600004,,001777]]
|
||
.LOSE 1000
|
||
.CALL [ SETZ
|
||
SIXBIT /T11MP/
|
||
1000,,202
|
||
SETZ [600010,,001777]]
|
||
.LOSE 1000
|
||
.CALL [ SETZ
|
||
SIXBIT /T11MP/
|
||
1000,,203
|
||
SETZ [600014,,001777]]
|
||
.LOSE 1000
|
||
.CALL [ SETZ
|
||
SIXBIT /T11MP/
|
||
1000,,204
|
||
SETZ [600020,,001777]]
|
||
.LOSE 1000
|
||
.CALL [ SETZ
|
||
SIXBIT /T11MP/
|
||
1000,,205
|
||
SETZ [600024,,001777]] ;ALL MAPPED IN.
|
||
.LOSE 1000
|
||
MOVE E,400010 ;THESE ARE TV-11 WORDS 40-42, 42 HAS PTR TO PTR AREA.
|
||
LSH E,-6 ;MOVE (CONTENTS OF TV LOC 42)/4 TO LOW ORDER BITS.
|
||
ANDI E,37777 ;MASK OUT OTHER LOCATIONS.
|
||
ADDI E,400004 ;NOW A HAS ADDRESS OF QPYSWT,,0
|
||
MOVE F,E ;SAVE THE ADDRESS FOR LATER.
|
||
MOVE E,(E) ;AND NOW HAS QPYSWT,,0
|
||
LSH E,-24 ;MOVE IT TO THE RIGHT BITS,
|
||
CAIN E,177777 ;IF IT'S -1, QPY IS DOWN
|
||
JRST QPDOWN
|
||
MOVEI B,[ASCIZ / IS UP. DO YOU WANT TO BRING IT DOWN? /]
|
||
PUSHJ P,QHACK
|
||
HRLZI E,777774 ;SET QPYSWT TO -1
|
||
QPZAP: MOVEM E,(F)
|
||
.CORE 2
|
||
.LOSE 1000
|
||
JRST BLUP
|
||
|
||
QPDOWN: MOVEI B,[ASCIZ / IS DOWN. DO YOU WANT TO BRING IT UP? /]
|
||
PUSHJ P,QHACK
|
||
SETZI E,
|
||
JRST QPZAP
|
||
|
||
|
||
|
||
|
||
TVLUZ: MOVEI C,[SIXBIT / SORRY, THIS MACHINE DOES NOT HAVE TV'S TO FIX.!/]
|
||
PUSHJ P,TITYOT
|
||
JRST BLUP
|
||
|
||
NET:
|
||
IFN REMCTL,[
|
||
SKIPE STY ;prevents sty terminals from restarting net.
|
||
JRST BLUP
|
||
];IFN REMCTL,
|
||
IFN HSNCTL,[
|
||
PUSHJ P,HSNCHK
|
||
JRST BLUP
|
||
]IFN HSNCTL,
|
||
MOVEI B,[ASCIZ / DO YOU REALLY WANT TO BRING DOWN THE NET? /]
|
||
PUSHJ P,QHACK ;ACCEPT ONLY Y FOR AN ANSWER.
|
||
RETRY: MOVE E,[SQUOZE 0,SCLNET]
|
||
.EVAL E, ;FIND OUT WHAT BIT TO DIDDLE.
|
||
.VALUE [ASCIZ /:FAILURE TO FIND SYMBOL, FIND A HACKER TO DO IT./]
|
||
MOVE F,[SQUOZE 0,SUPCOR]
|
||
.EVAL F, ;FIND OUT WHAT WORD TO DIDDLE IT IN.
|
||
.VALUE [ASCIZ /:FAILURE TO FIND SYMBOL, FIND A HACKER TO DO IT./]
|
||
HRL F,F
|
||
HRRI F,PTRLOC
|
||
.GETLOC F, ;FINDS CURRENT VALUE OF SUPCOR, PUTS IT IN PLACE FOR IFSET.
|
||
MOVSS E
|
||
IOR E,PTRLOC ;SET THE APPROPRIATE BIT
|
||
MOVEM E,PTRLOC+1;AND PLACE IT FOR IFSET.
|
||
HRRI F,PTRLOC
|
||
MOVSS F
|
||
.IFSET F, ;SET THE BIT, CAUSING ARPANET TO BE RESET.
|
||
JRST RETRY ;LOCATION CHANGED, WE'LL TRY AGAIN
|
||
JRST BLUP ;DONE, RETURN TO COMMAND READING LOOP.
|
||
|
||
PTRLOC: 0 ;CONTAINS TEST WORD FOR .IFSET
|
||
0 ;CONTAINS NEW VALUE FOR .IFSET
|
||
|
||
|
||
SYSL: MOVEI F,2
|
||
.SUPSET F,
|
||
JRST BLUP
|
||
|
||
SYSJ: MOVEI F,1
|
||
.SUPSET F,
|
||
MOVEI C,[SIXBIT /SYS CHECKER !/]
|
||
PUSHJ P,TITYOT
|
||
MOVEI C,[SIXBIT /UN!/]
|
||
TRNE F,1
|
||
PUSHJ P,ITYOUT
|
||
MOVEI C,[SIXBIT /BLOCKED?!/]
|
||
PUSHJ P,ITYOUT
|
||
JRST BLUP
|
||
|
||
QEXPL2: HRLI B,440700
|
||
QEXPL3: ILDB A,B
|
||
JUMPE A,CPOPJ
|
||
.IOT TYOC,A
|
||
JRST QEXPL3
|
||
|
||
SPEED: PUSHJ P,INITST
|
||
SKIPN B,TNUM
|
||
.SUSET [.RTTY,,B]
|
||
MOVE D,TTYTYP
|
||
ADD D,B
|
||
MOVSS D
|
||
HRRI D,E
|
||
.GETLOC D,
|
||
SUB B,NFDPTY
|
||
SKIPL B
|
||
CAMLE B,NNTYS
|
||
JRST QLUP
|
||
DPB B,[140400,,SSC1]
|
||
DPB B,[140400,,SSC2]
|
||
MOVEI B,[ASCIZ / INPUT SPEED=/]
|
||
PUSHJ P,GSPD
|
||
JRST QLUP
|
||
MOVE J,B
|
||
DPB B,[$TTISP,,E]
|
||
MOVE B,DPSP(B)
|
||
DPB B,[110300,,SSC1]
|
||
MOVEI B,[ASCIZ / OUTPUT SPEED=/]
|
||
PUSHJ P,GSPD
|
||
JRST QLUP
|
||
MOVE U,B
|
||
DPB B,[$TTOSP,,E]
|
||
MOVE B,DPSP(B)
|
||
DPB B,[110300,,SSC2]
|
||
MOVNI B,1000
|
||
.IOTLSR B,
|
||
SPELUP: SKIPL J
|
||
SSC1: CONO 604,703 ;+.&77000
|
||
SKIPL U
|
||
SSC2: CONO 604,503 ;+.&77000
|
||
AOJL B,SPELUP
|
||
.IOTLSR B,
|
||
MOVSS D
|
||
.SETLOC D, ;UPDATE TTYTYP TABLE
|
||
JRST BLUP
|
||
|
||
GSPD: PUSHJ P,QEXPL2
|
||
PUSHJ P,GNUM
|
||
JUMPE B,GSPD1
|
||
MOVE C,[-LSPTBL,,0]
|
||
CAME B,SPTBL(C)
|
||
AOBJN C,.-1
|
||
HRRZ B,C
|
||
JUMPL C,GSPD2
|
||
POPJ P,
|
||
GSPD1: SETOM B
|
||
GSPD2: AOS (P)
|
||
POPJ P,
|
||
|
||
;SYSTEM BAUD RATES
|
||
SPTBL: 134 ;SYSTEM USES THIS FOR UNKNOWN, PUT 134 HERE SO CAN SET DPK TO 134
|
||
600 ? 110 ? 150
|
||
300 ? 1200 ? 1800 ? 2400
|
||
4800 ? 9600 ? 25000 ? 40000
|
||
50000 ? 80000
|
||
LSPTBL==.-SPTBL
|
||
|
||
;DATA POINT CODE INDEXED BY SYSTEM BAUD RATE CODE
|
||
DPSP: 0 ;134
|
||
1 ;600
|
||
2 ;110
|
||
3 ;150
|
||
4 ;300
|
||
5 ;1200
|
||
5 ;1800 *
|
||
6 ;2400
|
||
7 ;4800
|
||
REPEAT 20-<.-DPSP>, 7 ;FAST *
|
||
|
||
ISPY:
|
||
IFN SPYCTL,[
|
||
SKIPE STY ;prevents sty terminals from input spying
|
||
JRST BLUP
|
||
]
|
||
PUSHJ P,IMOUT
|
||
SPY:
|
||
IFN SPYCTL,[
|
||
SKIPE STY ;prevents sty terminals from input spying
|
||
JRST BLUP
|
||
]
|
||
PUSHJ P,INITST
|
||
SKIPL B,TNUM
|
||
CAMLE B,NCT
|
||
JRST QLUP
|
||
MOVEM B,SPYS+1
|
||
.OPEN RTYI,SPYS
|
||
JRST QLUP
|
||
SPYLP: .IOT RTYI,A
|
||
.CALL [ SETZ ? 'IOT,,
|
||
1000,,TYOC ;CHANNEL
|
||
A ;IOT OUT OF A
|
||
405000,,%TJDIS] ;DON'T USE DISPLAY MODE.
|
||
.VALUE
|
||
JRST SPYLP
|
||
SPYS: SIXBIT / SPY/
|
||
WHO: 0
|
||
|
||
;SET TO IMAGE MODE OUTPUT
|
||
IMOUT: MOVEI B,5
|
||
HRLM B,TTY
|
||
.OPEN TYOC,TTY
|
||
.VALUE
|
||
POPJ P,
|
||
|
||
IMIN: MOVEI B,4
|
||
HRLM B,TTY
|
||
.OPEN TYIC,TTY
|
||
.VALUE
|
||
POPJ P,
|
||
|
||
I37: PUSHJ P,IMOUT
|
||
.RESET TYOC,
|
||
.IOT TYOC,["]
|
||
.IOT TYOC,["F]
|
||
.IOT TYOC,["]
|
||
.IOT TYOC,[":]
|
||
MOVEI A,15. ;CHOMP
|
||
.SLEEP A,
|
||
JRST BEGLUP
|
||
|
||
1CHAR: PUSHJ P,IMIN
|
||
.IOT TYIC,A
|
||
PUSHJ P,TCRR
|
||
PUSHJ P,OCTPNT
|
||
JRST BEGLUP
|
||
|
||
CHAR: PUSHJ P,IMIN
|
||
SETOM CHARF' ;FLAG FOR QUIT TO KNOW
|
||
CHARL: PUSHJ P,TCRR
|
||
.IOT TYIC,A
|
||
PUSHJ P,OCTPNT
|
||
JRST CHARL
|
||
|
||
FCHAR: PUSHJ P,IMIN
|
||
SETOM CHARF
|
||
FCHARL: PUSHJ P,TCRR
|
||
FCHRL1: .CALL [ SETZ ? SIXBIT/IOT/ ? MOVEI TYIC ? 5000,,%TIFUL ? SETZ A]
|
||
.VALUE
|
||
PUSHJ P,OCTPNT
|
||
JRST FCHARL
|
||
|
||
OCTPNT: IDIVI A,8
|
||
HRLM B,(P)
|
||
SKIPE A
|
||
PUSHJ P,OCTPNT
|
||
HLRZ A,(P)
|
||
ADDI A,"0
|
||
.IOT TYOC,A
|
||
CPOPJ: POPJ P,
|
||
|
||
UCLR: MOVE B,TNUM ;SIGH
|
||
DPB B,[260300,,TAPNO]
|
||
MOVEI B,UCLMES
|
||
PUSHJ P,QHACK
|
||
.ASSIGN B,
|
||
JRST QLUP
|
||
.UINIT B,
|
||
JRST QLUP
|
||
JRST BLUP
|
||
UCLMES: ASCII /
|
||
ZAP TAPE/
|
||
TAPNO: ASCIZ / 0?
|
||
/
|
||
|
||
FLASH: .OPEN RTYI,SPYF ;MORE THAN ONE AT A TIME
|
||
JRST QLUP ;FAILED, BOMB OUT
|
||
MOVEI D,100 ;INITIALIZE TO EXPECT UNSHIFTED CHARS
|
||
FLLUP: .IOT RTYI,A ;GET A CHAR FROM THE AP LINE
|
||
ANDI A,77 ;MASK IT TO 6 BITS
|
||
CAIN A,33 ;IS IT "SHIFT"
|
||
MOVEI D,0 ;SET SHIFT FLAG OFFSET
|
||
CAIN A,37 ;IS IT "UNSHIFT"
|
||
MOVEI D,100 ;SET UNSHIFT FLAG OFFSET
|
||
ADD A,D ;ADD THE FLAG OFFSET TO THE CHAR
|
||
IDIVI A,5 ;SELECT THE WORD AND BYTE
|
||
LDB A,BYTAB(B) ;GET THE ASCII CHAR FROM THERE
|
||
JUMPE A,FLLUP ;IF IT'S ZERO, IGNORE AND GET NEXT
|
||
.IOT TYOC,A ;IF IT'S NOT, TYPE IT
|
||
JRST FLLUP ;GET THE NEXT ONE
|
||
|
||
SPYF: SIXBIT / SPY/
|
||
10 ;TTY NUMBER
|
||
|
||
|
||
BYTAB: 350700,,SHIFT(A) ;LEFTMOST CHAR OF 5
|
||
260700,,SHIFT(A)
|
||
170700,,SHIFT(A)
|
||
100700,,SHIFT(A)
|
||
010700,,SHIFT(A) ;RIGHTMOST
|
||
|
||
SHIFT: ASCII \ |