;-*-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 CAMN C,[SIXBIT /6FIX/] JRST 6FIXR 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" 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: MOVE E,[SQUOZE 0,TT11P] .EVAL E, 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 \EA SIU DRJNFCKTZLWHYPQOBGMXV ! -'+, ( ?&:.\ NOSHFT: ASCII \ea siu drjnfcktzlwhypqobgmxv 3 $ 87'-4, 5) 2609;.1\ DPK==604 ;ROUTINE TO REINITIALIZE DATAPOINT KLUDGE ..D604==0 DPKI: PUSHJ P,INITST ;GET SYSTEM SYMBOLS MOVSI A,(SETZ) .IOTLSR A, CONO DPK,400070 ;CLEAR DPK, CLEAR PIA MOVE A,DPKBAS HRLI A,4 DATAO DPK,A ;LOAD BASE REGISTER MOVEI B,0 ;DPK LINE # MOVE C,NFDPTY ;ITS LINE # MOVN A,NDPTYS HRL C,A DPKI1: MOVE A,TTYTYP ADDI A,(C) HRLI A,A MOVSS A .GETLOC A, LDB D,[$TTOSP,,A] ;OUT SPEED MOVE D,DPSP(D) ;TRANSLATE TO DPK CODE LSH D,9 DPB B,[140400,,D] ;LINE# CONO DPK,500(D) ;LOAD OUT SPEED LDB D,[$TTISP,,A] ;IN SPEED MOVE D,DPSP(D) LSH D,9 DPB B,[140400,,D] CONO DPK,700(D) ;LOAD IN SPEED AOS B AOBJN C,DPKI1 CONO DPK,@TTYCHN ;DPK READY, ALLOW INTERRUPTS SETZ A, .IOTLSR A, MOVEI B,[ASCIZ/ DPK RE-INITIALIZED/] PUSHJ P,QEXPL2 JRST BLUP CTEST: .SUSET [.RUNAME,,XUNAME] PUSHJ P,RAN7 IRPC X,,0123456 DPB A,[270400,,CDPB!X] TERMIN CDPB0: .STATUS .,B ANDI B,77 SKIPN B JRST CTEST2 ;CH NOT OPEN CAIE B,61 JRST CTEST ;CH PROBABLY BEING USED TO LOCK TTY CDPB1: .UCLOSE ., CTEST2: .GENSYM B, MOVEM B,XJNAME CDPB2: .OPEN .,XDEV JRST CTEST CDPB3: .USET .,[.SMEMT,,[PRGLEN*2000]] MOVE B,[-PRGLEN*2000,,0] CDPB6: .IOT .,B PUSHJ P,RAN7 MOVEI B,CCORE SKIPN A MOVEI B,CTEST CDPB4: .USET .,[.SUPC,,B] CDPB5: .USET .,[.SUSTP,,[0]] PUSHJ P,RAN17 .SLEEP 1, JRST CTEST XDEV: 3,,(SIXBIT /USR/) XUNAME: 0 XJNAME: 0 CCORE: PUSHJ P,RAN17 .CORE PRGLEN(A) SOJA A,.-1 PUSHJ P,RAN17 .SLEEP 1, JRST CCORE RAN17: SKIPA C,[17] RAN7: MOVEI C,7 RAND: .RDTIME A, XOR A,RANDN FMPB A,RANDN AND A,C POPJ P, RANDN: 3.14159 TITYOT: MOVEI A,TYOC DITYOT: DPB A,[270400,,IOINST] ITYOUT: HRLI C,440600 ITYOT2: ILDB D,C CAIN D,'! POPJ P, CAIN D,'? JRST ITYCRR ADDI D,40 IOINST: .IOT .,D JRST ITYOT2 ITYCRR: PUSHJ P,CRRF JRST ITYOT2 TTYSTA: DPB A,[270400,,.+1] .STATUS .,B ANDI B,77 POPJ P, CRRF: MOVEI D,15 XCT IOINST MOVEI D,12 XCT IOINST POPJ P, TCRR: .IOT TYOC,[15] .IOT TYOC,[12] POPJ P, RCAARG: MOVE E,TNUM MOVEM E,FOBY JRST RCAVI1 RCAVIC: PUSHJ P,AITEST JRST QLUP SKIPE TNUM JRST RCAARG RCAVI1: MOVE E,LIT+7 SETZ F, .CORE 13 .LOSE 1000 .CALL LIT .LOSE 1000 JUMPA G,CPL24 MOVSI E,760264 SETZ F, CPL: MOVEI H,674 MOVEI E,400000 MOVEI F,24424 HRLI E,-22 MOVE (E) MOVEM (F) AOS F AOBJN E,CPL+4 SUBI F,44 SOJG H,CPL+3 JUMPA F,CPL16 .LOSE 1000 .CORE 2 .LOSE 1000 JRST QLUP CPL16: MOVSI E,5000 HRRI E,400000 BLT E,417467 .OPEN LIT+10 JUMPA E,CPL+13 JUMPA E,CPL+14 CPL24: SKIPGE E,FOBY .SUSET FOBY+1 .CALL FOBY+2 .LOSE 1000 LSH F,24 TLO F,36000 .SUSET FOBY+7 JUMPA E,RCAVI1+7 JUMPA E,RCAVI1+10 LIT: SETZ SIXBIT /CORBLK/ MOVEI 110000 MOVEI -1 MOVE E MOVEI -2 SETZ F -10,,200 20004,,646471 0 FOBY: -1 .RCNSL,,E SETZ SIXBIT /TVWHER/ MOVEI 400000(E) MOVEM E SETZM F .STVCREG,,F 0 VTFIXR: .CALL [ SETZ ;FIX A VT52 IN ALTERNATE CHAR SET MODE. SIXBIT /OPEN/ [%TJSIO+.UIO,,TYOC] ;OPEN TTY FOR SUPERIMAGE OUTPUT SETZ [SIXBIT /TTY/]] .LOSE %LSSYS .IOT TYOC,["] .IOT TYOC,["G] ;Normal char set .IOT TYOC,["] .IOT TYOC,["\] ;not hold-screen mode. .BREAK 16,160000 6FIXR: MOVE E,[SQUOZE 0,PDP6UP] ;BRING UP PDP-6 .EVAL E, .VALUE [ASCIZ /:ITS NOT CONFIGURED WITH PDP-6./] HRLI E,[-1] .SETLOC E, .BREAK 16,160000 PAT: PATCH: BLOCK 40 EPATCH: -1 TNUM: 0 TTY: SIXBIT / TTY.LOCK..LOCK./ TY.: 5,,(SIXBIT /T00/) SIXBIT /.LOCK./ RUNAME: BLOCK 1 SIXBIT /?!/ CHARAY: -MXCH-1,,0 BLOCK MXCH+1 PDL: BLOCK 20 CONSTANTS VARIABLES NPATCH: BLOCK 20 PRGLEN==<.+1777>/2000 ;NUMBER OF 1K BLOCKS END BEG