diff --git a/src/syseng/lock.154 b/src/syseng/lock.154 new file mode 100755 index 00000000..7d493b91 --- /dev/null +++ b/src/syseng/lock.154 @@ -0,0 +1,1217 @@ +;-*-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" 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 \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 + + +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