Trailing-Edge
-
PDP-10 Archives
-
bb-d549g-sb
-
initia.mac
There are 10 other files named initia.mac in the archive. Click here to see a list.
SUBTTL AUTHOR:P.CONKLIN /PMW/JNG/WLH/KPY/WCL/GMU/CDO
; OLD AUTHOR INITIALS:/RCC/DAL/PFC
;***COPYRIGHT (C) 1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980
; DIGITAL EQUIPMENT CORP., MAYNARD, MASS.***
INTWHO==0 ; LAST MODIFIER
INTVER==7 ; MAJOR VERSION
INTMIN==1 ; MINOR VERSION
INTEDT==174 ; EDIT LEVEL
SALL ; CLEAN ASSEMBLY LISTINGS
SEARCH JOBDAT,MACTEN,UUOSYM
TITLE. (INT,INITIA,SYSTEM START-UP PROGRAM)
INTTTL
INTPTX
; JOB DATA AREA
INT137
; SHOW VERSIONS OF UNIVERSAL FILES
%%JOBD==%%JOBD ; SHOW VERSION OF JOBDAT
%%MACT==%%MACT ; VERSION OF MACTEN
.REQUEST REL:HELPER ; USES HELPER [10(146)]
;ASSEMBLY INSTRUCTIONS:
; .LOAD INITIA
;ASSEMBLY PARAMETERS
ND L$PDL,20 ;LENGTH OF PUSH-DOWN LIST
ND L$TTBF,^D100 ;SIZE OF TTY OUTPUT BUFFER IN WORDS
ND N$HSGF,^D50 ;NUMBER OF FILES WHICH CAN BE REMEMBERED
ND N$STRS,^D36 ;NUMBER OF STRUCTURES IN S/L (MAX)
SUBTTL TABLE OF CONTENTS
; TABLE OF CONTENTS FOR INITIA
;
;
; SECTION PAGE
; 1. TABLE OF CONTENTS......................................... 2
; 2. REVISION HISTORY.......................................... 3
; 3. DEFINITIONS............................................... 6
; 4. INITIALIZATION............................................ 8
; 5. CODE TO HANDLE SPECIAL STARTUP CONDITIONS................. 10
; 6. MAIN PROGRAM
; 6.1 HANDLE COMMAND SCANNING AND DISPATCH.............. 12
; 7. HANDLE COMMAND LINE....................................... 16
; 8. SUBROUTINE TO IDENTIFY AND SAVE COMMAND................... 20
; 9. DEFINE SYSTEMS WHICH NEED SPECIAL SET-UP.................. 21
; 10. SYSTEM TABLES............................................. 22
; 11. STANDARD COMMAND TABLES................................... 23
; 12. ROUTINES FOR VARIOUS COMMANDS............................. 25
; 13. NO COMMAND HANDLER........................................ 25
; 14. RCV/XMT SPEED COMMAND HANDLER............................. 25
; 15. PAGE COMMAND HANDLER...................................... 26
; 16. DIAL COMMAND HANDLER...................................... 26
; 17. ROUTINE TO SETUP TTY...................................... 27
; 18. ROUTINE TO SETUP TTY "TYPE"............................... 29
; 19. TTY CONTROL LIST ROUTINE.................................. 30
; 20. ROUTINE TO KJOB IF SYSTEM GOING DOWN...................... 31
; 21. SPECIAL PROCESSORS........................................ 32
; 22. FILEX PROCESSOR........................................... 32
; 23. OMOUNT PROCESSOR.......................................... 32
; 24. DAEMON PROCESSOR.......................................... 32
; 25. CHKPNT PROCESSOR.......................................... 32
; 26. OPSER PROCESSOR........................................... 32
; 27. PRINTR PROCESSOR.......................................... 32
; 28. SYSDPY PROCESSOR.......................................... 32
; 29. LOGIN TO 1,2 AND RUN CUSP NAMED IN T4..................... 33
; 30. START UP CUSP NAMED IN T2................................. 33
; 31. KILL JOB ROUTINE.......................................... 34
; 32. SUBROUTINE TO LIST STRUCTURE NOTES........................ 35
; 33. HELP ROUTINE.............................................. 35
; 34. SUBROUTINES TO LIST SYSTEM,BATCH AND TEXT NOTICES......... 36
; 35. SUBROUTINE TO TYPE TTY SETTINGS........................... 38
; 36. ROUTINE TO TYPE PAGE:N OR NOPAGE.......................... 39
; 37. ROUTINE TO FORMAT SPEED................................... 39
; 38. ROUTINE TO TYPE TYPE:XXXXXX............................... 39
; 39. ROUTINE TO FORMAT DECIMAL................................. 39
; 40. ROUTINE TO FORMAT BIT VALUES.............................. 39
; 41. TTY SETUP PROCESSORS...................................... 40
; 42. TERMINET ROUTINE.......................................... 40
; 43. INPUT ROUTINES............................................ 41
; 44. TABLE SEARCH ROUTINE...................................... 41
; 45. SKIP TO VALUE ROUTINE..................................... 42
; 46. DECIMAL READ ROUTINE...................................... 42
; 47. OCTAL READ ROUTINE........................................ 42
; 48. SIXBIT NAME ROUTINE (GETSIX).............................. 43
; 49. TTY EXPANSION ROUTINE (XPNTTY)............................ 44
; 50. CVTSIX.................................................... 45
; 51. SIXBIT WORD ROUTINE (GETWRD).............................. 46
; 52. CHARACTER ROUTINE (GETCHA)................................ 47
; 53. SUBROUTINE TO READ FROM COMMAND TTY....................... 47
; 54. COMMAND LINE PROCESSOR.................................... 48
; 55. SUBROUTINE TO TYPE CONTENTS OF FILE....................... 48
; 56. SUBROUTINE TO READ FROM FILE.............................. 54
; 57. SUBROUTINES............................................... 55
; 58. SUBROUTINE TO LOGIN A JOB................................. 55
; 59. SUBROUTINE TO TYPE SIGN ON MESSAGE........................ 60
; 60. SUBROUTINE TO TYPE KSYS MESSAGE........................... 62
; 61. ERROR HANDLERS............................................ 63
; 62. TYPEOUT ROUTINES.......................................... 63
; 63. GTNTN. ROUTINE............................................ 66
; 64. SPECIAL TTY SETUP SEQUENCES............................... 66
; 65. STORAGE AREA.............................................. 67
SUBTTL REVISION HISTORY
;%3 OCT, 71
;40 UPDATE DEC APR TABLES
;41 (10-11146) CORRECT FILEX PPN
;42 CONVERT TO C AND MAKE REENTRANT
;43 ADD APR S/N TO SIGNON MESSAGE
;44 HANDLE CASE OF .HELLO (TTY DATASET ANSWER)
;45 CHANGE TERMINET OPTION TO COMMAND LINE
;46 ADD STRUCTURE COMMAND TO COMMAND LINE
;47 LOOK AT FILE SYS:TTY.INI. LINES ARE ALL, OTHER, TTYX,TTYX-Y
;50 ADD ALL TRMOP'S FROM TTY.INI
;51 ADD HELP
;52 ADD KSYS OPTION
;53 ADD JOB # AND USER NAME IF LOGGED IN
;54 ADD ".LOGIN A,B" WHEN LOGGING IN
;55 ADD NOTICE OPTION
;56 ADD TTY OPTION
;57 GET REAL S/L IF POSSIBLE
;60 IMPLEMENT DIAL OPTION
;61 ALLOW CONTINUATION IN FILE TTY.INI AND COMMENTS ON
; ALL COMMANDS
;62 ENSURE . IS ALWAYS TYPED JUST ONCE AT EXIT
;63 USE C AS A UNIVERSAL
;64 ADD NONAME
;65 ADD NORUN
;66 ADD NOSETTTY
;67 IF LOGGED IN, ALSO USE SWITCH.INI
;70 ALLOW TT: FOR TTY:
;71 DEFAULT TO NOSETTTY IF LOGGED IN
;72 SEPARATE USER SETTABLE TTY STUFF IN TTY TYPEOUT
;73 FIX BUGS REPORTED IN QAR-1563 (WPI)
;74 ALLOW () IN .INI OPTIONS
;%4(74) JUNE, 1974
;75 HAVE INITIA REMEMBER TTY.INI AND STR.TXT IN HISEG
;76 CHANGE ALL OUTCHR UUO'S TO SUBROUTINE CALLS AND DO
; BUFFERED TTY OUTPUT FOR SPEED
;77 ADD RTCOMPAT TO LIST OF TTY SWITCHES
;100 USE NON-BLOCKING TTY I/O TO AVOID GETTING HUNG IN 'TO'
; STATE.
;101 (10-13,784) GET JOB NUMBER CORRECTLY IF JOBSTS FAILS
;102 (10-13,784) ADD OPTION FOR DAEMON
;103 OUTPUT "OR ATTACH" ONLY IF SOME DETACHED JOBS
;104 (SER 922) DON'T PRINT SPEED:0
;105 (10-13,595) REMOVE INICER MESSAGE ON NULL COMMAND
;106 (10-14,000) FIX BUG WHICH MISSED OTHER IN SWITCH.INI
;107 SUPPRESS "PLEASE LOGIN" IF SCHED 7
;110 (CER S70-725) WHEN LISTING USER NAME, ALSO GIVE PPN
;111 HANDLE UP TO 36 STRS IN S/L
;112 SET DEFAULT PHY & VIRT LIMITS TO 1000P
;113 REMOVE KSYS CALL OF KJOB (OPSER 5A DOES IT)
;114 DON'T LOGIN [1,2] UNLESS LOCAL TERMINAL
;115 PREVENT LOOP IF UNMATCHED '(' IN TTY.INI OR SWITCH.INI
;116 IMPLEMENT BATCH KEYWORD
;117 FIX HILOOK BUG
;120 IMPLEMENT TEXT KEYWORD
;121 BE SUSPICIOUS OF DEAD HI-SEG INTERLOCKS -- SLOWS SYS START UP
;122 ADD SYSV52 AND SYSV61 [TTY.INI COMMANDS--SYSVFT AND SYSVSO]
;123 FIX PROBLEM WITH CORE UUO FAILURE
;124 DON'T GIVE ALL PRIVILEGES TO REMOTE OPR
;125 UNKNOWN.
;126 CHANGES TO IMPLEMENT 'DETECT XXXX' FOR SPEED
; DEPENDENT SETUP OF DIAL-UP LINES, 'LINSPD' FOR LINES
; RUNNING AT SPECIFIED BAUD, AND 'OTHSPD' FOR LINES
; NOT AT THE SPECIFIED BAUD.
;127 ADD NETWORK CAPABILITIES FOR DIRECT ACCESS TO PHYSICAL TTY'S
;130 MERGE EDITS 126-127.
;131-132 CLEAN UP LISTING.
;133 CLEAR EOF BIT BEFORE READING ACCOUNTING FILE.
;134 FIX BUG IN NTKSYS ROUTINE..USED WRONG
; UUO TO GET STATION STATUS.
;135 FIX BUG THAT SETUP NETWORK LINES IMPROPERLY.
;136 INSTALL CONTROL-C INTERCEPT SO HIGH SEGMENT DOESN'T
; GET LEFT IN AN INTERLOCKED STATE.
;137 DON'T TYPE NETWORK STUFF UNLESS WERE ON A NODE,
; QAR#631.
; FIX CTY BUG IN XPNTTY ROUTINE.
; USE TITLE. MACRO FROM MODUNV.UNV.
;140 MINOR FIXUPS...QAR'S 10-00671 & 10-00681
;141 MAKE SURE THAT NO LINE, LOCAL OPR OR NOT, GETS TO
; BE A REMOTE OPR, IF IT'S ON NODE 0.
;142 1) EDIT 136 ALLOWS CONTROL-C INTERCEPT TO HAPPEN FOR ALL
; JOBS RUNNING AT SYSTEM STARTUP TIME....DON'T DO THAT.
; TURN THE INTERCEPT OFF AGAIN AS SOON AS WE FIND OUT
; THAT WE'RE GOING TO WAIT FOR SOMEONE ELSE TO DO THE
; DIRTY WORK!
; 2) PURGE REMOTE STATION STUFF..RUNNING OF REMLOD ETC.
; AND CHANGE CODE FOR CENTRAL OPR TO GET CENTRAL OPR AND
; NOT LOCAL OPR.
;143 CLEAN UP LISTING. REMOVE VRSN. MACRO.
;144 FIX FAULTY COMPARE AT NOTFND ROUTINE. CAUSED REMOTE
; STATION OPR TERMINAL NOT TO COME UP.
;145 MAKE 144 WORK. CHANGE TO VERSION 7 FOR DISTRIBUTION.
; CHANGE KEYWORD "BLANK" TO "BLANKS" IN STANDARD COMMAND TABLES.
;146 1) FIX TO HANDLE TTY0 AT CENTRAL SITE.
; 2) GET HELPER.REL FROM REL: RATHER THAN DSK: IN ".REQUEST"
; PSEUDO-OP.
; 3) ELIMINATE REFERENCE TO MODUNV.UNV FILE.
; MACROS DEFINED IN MACTEN.UNV.
;147 (WEM) MAKE 'TTY.INI' AND 'AUXACC.SYS' LOOKUPS PHYSICAL
; ONLY.
;150 (WEM) MAKE INITIA USE THE HIBER AND WAKE UUO'S IN ORDER
; TO LESSEN THE AMOUNT OF TIME IT SPENDS WAITING ON
; THE HIGH-SEGMENT INTERLOCK.
;151 (KPY) FIX SOME BUGS INTRODUCED WITH EDIT 150
; AND REMOVE SOME EXTRANEOUS CODE.
;152 MAKE IT SKIP TABS PRECEDING COMMAND
;153 INCLUDE SKIPPING OF TABS WITHIN COMMAND LINE
;154 FIX RESCANNING OF COMMENT AT END OF LINE
;155 REMOVE CHECK IF TTY# EQUALS PHYSICAL LINE #
; (HISTORICAL REASONS ONLY) THUS PRINT MESSAGE
; "CONNECTED TO NODE" IN ANY CASE.
;156 ADD CODING FOR SETTING/REPORTING TERMINAL TYPE
;157 MAKE TERMINAL TYPE COMPATIBLE WITH "NO" CONSTRUCTION
;160 MORE ON "NO" CONSTRUCTION FOR TERMINAL TYPE
;161 MAKE TERMINAL TYPE SETTING SAME AS OTHER TTY SETUP FEATURES
;162 MAKE CHANGE FOR NEW TRMOP. WHICH RETURNS TERMINAL TYPE
; IN SIXBIT
;163 ADD LOCATE:NN COMMAND WHICH WILL LOCATE USER TO NODE
; SPECIFIED. OR IN THE ABSENCE OF A LOCATE COMMAND, LOCATE TO
; THE CENTRAL SITE IF HE IS BEING LOGGED IN ON A NODE WITHOUT
; AN LPT
;164 CHANGE ORDER OF TRMOP.S, DO TYPE BEFORE PAGESIZE
; (IN DOTTYT: .TOTRM BEFORE .TOPSZ)
;165 ON A FORCED RUN OF INITIA AT SYSTEM STARTUP, ONLY ONE COPY OF
; INITIA WAS RUNNING AT A TIME. THIS IS ONLY NEEDED WHEN THE
; FIRST ONE TO RUN IS READING THE FILES INTO THE HIGH SEG.
; AFTER THIS IS DONE, ALLOW ALL OTHER COPIES TO RUN CONCURRENTLY.
; ALSO DO SOME PERFORMANCE WORK TO MAKE INITIA RUN FASTER AT
; SYSTEM STARTUP.
;166 ADD GALOPR COMMAND IN TTY.INI TO GIVE CCL RUN TO GALAXY OPR
;167 PUSH THE CONTENTS OF SYS:SYSJOB.INI DOWN FRCLIN DURING SYSTEM STARTUP
;170 DO SETUUO TO SETUP OPR PRIVILEGES BEFORE LOGGING IN
; SET ONLY REMOTE OPR PRIV IF LOGGING IN A REMOTE OPR
;171 MORE OF EDIT 165
;172 RE-FORMAT OUTPUT OF TTY CHARACTERISTICS
;173 FIX BUG WHICH ALLOWED "INITIA SETTTY NO REMOTE" IN SWITCH.INI
; TO ACTUALLY SET THE LINE NO REMOTE
;174 ACCEPT "DEFER" IN TTY.INI/SWITCH.INI FOR DEFERED ECHOING
; REPORT SAME IN TYPTTY.
SUBTTL DEFINITIONS
;AC NAMES
F=0 ;FLAGS
T1=1 ;TEMPORARIES
T2=2
T3=3
T4=4
T5=5
T6=6
T7=7
T8=10
I=11 ;INDEX INTO HISEG TABLES
OC=12 ;TEMP FOR TTYSTR LUUO
WD=13 ;LAST INPUT WORD
CH=14 ;LAST INPUT CHARACTER
BP=15 ;BOMB OUT PC
ME=16 ;TTY NAME OF THIS TTY
P=17 ;PUSHJ-DOWN LIST POINTER
;INPUT/OUTPUT CHANNELS
IO==0 ;USED FOR TEMP FILES
TI==1 ;TTY.INI
TTY==2 ;TTY OUTPUT
;FLAG BITS
F.LOGI==1B0 ;LOGGED IN
F.LOGX==1B1 ;OK IF ALREADY LOGGED IN
F.CCL==1B2 ;FORCE CCL STARTING POINT
F.NOHD==1B3 ;SUPPRESS HEADER TYPEOUT
F.PRIV==1B4 ;GIVE JOB ALL PRIVILEGES
F.CCLC==1B5 ;CALLED FROM CCL MODE
F.REMO==1B6 ;REMOTE OPR
F.ANSW==1B8 ;JUST ANSWERED TTY MODEM
F.ICMD==1B9 ;INITIA COMMAND
F.ECMD==1B10 ;END OF COMMAND LINE
F.EOF==1B11 ;END OF FILE
F.NO==1B12 ;NO XXX
F.CERR==1B13 ;COMMAND ERROR
F.BIN==1B14 ;READ IN BINARY
F.ALIN==1B15 ;SOME LINE FOUND IN TTY.INI
F.RTTY==1B16 ;RESCANNED TTY, BUT NOT REEATEN ALL YET
F.TSOL==1B17 ;TYPED SOMETHING ON THIS LINE
F.PARN==1B18 ;PAREN LIST OF TTYS
F.PHYS==1B19 ;RUN JOB VIA PHYSICAL RUN
F.NJBS==1B20 ;SET IF NO JOBSTS UUO
;USEFUL OPDEFS
OPDEF BOMB$ [JSP BP,E$$BMB] ;DEBUGGING AID--PERMANENT FEATURE
;FOR LUUOS, IF AC1 IS ON, POPJ AFTER DOING LUUO
OPDEF TTYOUT [1B8] ;IMMEDIATE MODE OUTCHR LUUO
OPDEF TTYSTR [2B8] ;OUTSTR LUUO
TWOSEG
RELOC 400000
SUBTTL INITIALIZATION
INITIA: TDZA F,F ;ALLOW FOR CCL ENTRY
MOVX F,F.NOHD!F.CCLC ;IF CCL CALL, SUPPRESS HEADER
RESET ;CLEAR THE WORLD
SETZB 1,ZER ;CLEAR OUT STORAGE
MOVE P,[ZER,,ZER+1]
BLT P,EZER
MOVE P,[1,,2]
BLT P,P
MOVE P,[IOWD L$PDL,PDL] ;INITIALIZE PUSH-DOWN LIST
OPEN TTY,[UU.AIO+.IOASC
SIXBIT /TTY/
XWD TTYOBF,0]
JRST LOGOF$ ;CAN NOT FIX THIS
MOVE T1,[BF.VBR+TTYBUF+1] ;SETUP BUFFER HEADER
MOVEM T1,TTYOBF ; TO POINT TO OUR
MOVE T1,[POINT 7,0,35] ; OVERSIZED TTY
MOVEM T1,TTYPNT ; BUFFER
MOVE T1,[L$TTBF+1,,TTYBUF+1]
MOVEM T1,TTYBUF+1 ;STORE POINTER IN BUFFER
MOVE T1,[PUSHJ P,LUUO] ;SET UP LOCATION 41
MOVEM T1,.JB41
MOVSI T1,'CTY' ; GET NODE,LINE FOR CENTRAL STATION
PUSHJ P,GTNTN$
MOVEM T1,NL.CTY
; NOW GET THE SIXBIT TTY NAME FOR THE CTY
TLZ T1,-1 ; CLEAR OUT THE NODE
PUSHJ P,CVTSIX ; CONVERT TO SIXBIT
LSH T1,-^D18 ; SHIFT NUMBER INTO RIGHT HALF
HRLI T1,'TTY' ; PLANT TTY
MOVEM T1,CTYTTY ; AND STORE AWAY FOR LATER
MOVE T1,['OPR0 '] ; GET NODE,LINE FOR CENTRAL OPR
PUSHJ P,GTNTN$
MOVEM T1,NL.OPR
GETLIN ME,0
MOVE T1,ME
PUSHJ P,GTNTN$
MOVEM T1,NL.ME
LSH T1,-^D18 ; SHIFT NODE TO RIGHT HALF
PUSHJ P,CVTSIX ; CONVERT TO SIXBIT-LEFT JUSTIFIED
MOVEM T1,MYNNUM ; SAVE SIXBIT NODE NUMBER
LSH T1,-^D18 ; SHIFT RESULT TO RIGHT HALF
HRLI T1,'OPR'
PUSHJ P,GTNTN$ ; GET OUR, POSSIBLY LOCAL, OPR
MOVEM T1,NL.LOP
MOVE T2,[2,,T3] ; NODE. UUO ARGUMENT POINTER
MOVEI T3,2 ; COUNT
HLRZ T4,NL.ME ; MY NODE
NODE. T2,0
MOVE T2,['CENTRA']
MOVEM T2,MYNNAM ; SAVE SIXBIT NODE NAME
MOVX T1,%CNSER ;GET APR
GETTAB T1, ; SERIAL
MOVEI T1,0 ; NUMBER
MOVEM T1,APRSN ;SAVE FOR LATER
GETPPN T1, ;GET THIS JOB'S PPN
JFCL ;(IN CASE OF JACCT)
MOVEM T1,MYPPN ;SAVE FOR LATER USE
PJOB T2, ;GET THIS JOB'S NUMBER
MOVEM T2,JOBN ;SAVE FOR LATER
IDIVI T2,^D36 ;COMPUTE WORD AND POSITION FOR MY JOB
MOVSI T1,(1B0) ;IN "JOB WAITING FOR HIGHSEG LOCK" TABLE
MOVNS T3 ;TO SPEED UP SYSTEM STARTUP
LSH T1,(T3) ;BY ONLY WAKING UP THE JOBS ACTUALLY
MOVEM T1,MYBIT ;WAITING, THIS PREVENTS LOTS OF
ADDI T2,JOBWAT ;JOBS FIGHTING FOR THE INTERLOCK
MOVEM T2,MYWRD
MOVN T2,JOBN ;COMPLEMENT FOR UUO
JOBSTS T2, ;GET THIS JOB'S STATUS
JRST [TXO F,F.NJBS ;INDICATE JOBSTS FAILED
MOVX T2,%LDHLP ;CAN'T TELL--GET
GETTAB T2, ;HELP PPN (UNLOGGED JOB)
MOVE T2,[2,,5] ; FROM SYSTEM
CAME T2,MYPPN ;SEE IF SAME
TXO F,F.LOGI ;NO--MUST BE LOGGED IN
JRST INIT.1] ;AND PROCEED
TXNE T2,JB.ULI ;SEE IF LOGGED IN YET
TXO F,F.LOGI ;YES. REMEMBER THAT
INIT.1: MOVX T1,%LDSYS ;GET SYS:
GETTAB T1, ; PPN
MOVE T1,[1,,4] ;(DEFAULT)
MOVEM T1,SYSPPN ;SAVE FOR LATER
MOVX T1,%LDFFA ;GET [1,2]
GETTAB T1, ;PPN
MOVE T1,[1,,2] ;(DEFAULT)
MOVEM T1,FFAPPN ;SAVE FOR LATER
MOVE T1,JOBN ;GET JOB NUMBER
TRMNO. T1, ;GET TTY INDEX
MOVEI T1,0 ;BAD NEWS
MOVEM T1,TERNUM ;SAVE FOR LATER
; GET OUR SPEED AND SAVE IT FOR LATER
MOVE T2,T1 ; PUT OUR LINE NUMBER IN T2
MOVEI T1,.TORSP ; GET RECEIVE SPEED
MOVE T3,[2,,T1]
TRMOP. T3,
SETO T3, ; IF FAILS, USE ONES
MOVEM T3,MYSPD
SUBTTL CODE TO HANDLE SPECIAL STARTUP CONDITIONS
;HERE TO SEE IF THIS IS DUE TO A SYSTEM GOING DOWN OPERATION
;THE IDEA IS THAT INITIA WILL HAVE BEEN INVOKED BY OPSER
;OVER A PTY IN ORDER TO CALL KJOB IN A DETACHED FASHION
REPEAT 0,< ;NO LONGER NEEDED (SINCE OPSER V.5A)
MOVX T1,%NSKTM ;GET THE KSYS COUNTER
GETTAB T1, ; FROM THE MONITOR
JRST NTKSYS ;IF NOT, MUST BE PRE-KSYS
JUMPGE T1,NTKSYS ;SEE IF BEYOND SHUT DOWN
SETOM T1 ;YES--SEE IF WE ARE A SUBJOB
CTLJOB T1, ; BY SEEING IF WE ARE CONTROLLED
JRST NTKSYS ;NOT KSYS IF NO SUCH UUO
TLNE ME,-1 ;SEE IF DETACHED
JUMPL T1,NTKSYS ;JUMP IF ATTACHED TO REAL TTY
JRST KSYS ;KILL OFF IF DET. OR CONTROLLED
>; END REPEAT 0
NTKSYS: MOVE T1,NL.ME ; GET OUR NODE/LINE
TLNN T1,-1 ; NODE ZERO?
JRST NOTREM ; YES, CAN'T BE REMOTE OPR THEN
CAMN T1,NL.LOP ; AM I A REMOTE OPR?
CAMN T1,NL.OPR ; ..
JRST NOTREM ; NO
TXO F,F.REMO ; YES, FLAG AS A REMOTE OPERATOR
;HERE TO SEE IF CALLED FROM FORCED .HELLO COMMAND OR
;IF NORMAL COMMAND WITH ARGUMENTS.
NOTREM: TLNE ME,-1 ;SEE IF DETACHED
TXNE F,F.CCLC ;OR IF CCL CALL
JRST INIC.6 ;RIGHT--NO RESCAN
;HERE TO SEE IF WE HAVE COMMANDS ON LINE
MOVEI T1,TTYIN ;SET FOR TTY INPUT
MOVEM T1,GETCH ; IN CHARACTER GETTER
RESCAN 1 ;RETRY LINE
SKPINC ;SEE IF SOMETHING THERE
JRST INIC.3 ;NOTHING--CHECK FOR FORCED CALL
TXO F,F.RTTY ;INDICATE COMMITMENT TO REEAT LINE
PUSHJ P,GETWRD ;SEE IF INITIA
CAIN CH,":" ;SEE IF DEVICE
JRST .-2 ;YES--TRY AGAIN
XOR WD,['INITIA'] ;SEE IF INITIA COMMAND
TDNN WD,T1 ; OR ABBREVIATION
JRST INIC.2 ;YES--GO SET FLAG
INIC.1: CAIN CH,"(" ;SEE IF THIS FORM
JRST INIC.2 ;YES--FLAG COMMAND
PUSHJ P,GETWRD ;NO--MOVE ON FOR (...) FORM
TXNE F,F.ECMD!F.EOF ;SEE IF END OF LINE YET
JRST INIC.6 ;YES--GIVE UP
JRST INIC.1 ;NO--LOOP ONWARDS
INIC.2: TXO F,F.ICMD ;SET COMMAND FLAG
JRST INIC.6 ;AND PROCEED
;HERE IF NO COMMAND IN INPUT BUFFER.
INIC.3: ;COULD CHECK FOR .HELLO HERE
TXNN F,F.LOGI ;SEE IF LOGGED IN
TXOA F,F.ANSW ;NO--INDICATE ANSWER MODE
JRST INIC.6 ;YES, GO DO NORMAL COMMAND STUFF
;HERE TO FIND SYS:SYSJOB.INI AND FORCE IT IF WE ARE ON FRCLIN
MOVX T1,%CNFLN ;GET LINE NUMBER OF THE SYSTEM LDB
GETTAB T1, ;GET IT
JRST INIC.6 ;MUST BE PRE-7.01
TXO T1,.UXTRM ;MAKE INTO A UDX
CAME T1,TERNUM ;ARE WE FORCED ON THE RIGHT LINE
JRST INIC.6 ;NO, GO DO NORMAL INITIA
MOVSI T5,(UU.PHS) ;PHYSICAL ONLY SYS
MOVSI T6,'SYS'
MOVEI T7,IBF ;THE INPUT BUFFER
MOVE T1,[SIXBIT/SYSJOB/]
MOVSI T2,'INI' ;THE FILE TO READ
SETZB T3,T4 ;REST OF THE LOOKUP BLOCK
SETZM LOWPTR ;IN CASE JUNK THERE
PUSHJ P,HILOOK ;FIND/COPY THE FILE
JRST INIC.5 ;NO FILE
MOVX T2,.TOTYP ;FUNCTION TO STICK STUFF INTO INPUT BUFFER
MOVE T3,TERNUM ;FOR OUR LINENUMBER
MOVEI T4,T5 ;REST OF THE TRMOP. BLOCK
INIC.4: ILDB T5,LOWPTR ;GET A CHARACTER FROM THE FILE
JUMPE T5,INIC.5 ;DONE WITH THE FILE
LSH T5,^D29 ;DO THIS ONE CHARACTER AT A TIME (I KNOW ITS SLOW)
MOVE T1,[3,,T2] ;POINT TO TRMOP. ARGS
TRMOP. T1, ;STUFF THE CHARACTER
JRST INIC.5 ;GIVE UP IF IT FAILS
JRST INIC.4 ;GO BACK AND GET ANOTHER
INIC.5: SETZM LOWPTR ;CLEAR THE BYTE POINTER
RELEAS TI, ;AND RETURN THE CHANNEL
; JRST INIC.6 ;AND RESUME WITH NORMAL INITIA
SUBTTL MAIN PROGRAM--HANDLE COMMAND SCANNING AND DISPATCH
;HERE WHEN DONE WITH COMMAND ANALYSIS AND READY TO ISSUE
;THE SYSTEM SIGNON MESSAGE
INIC.6: SETZM GETCH ;CLEAR CHARACTER GETTER
;HERE TO LOOK FOR FILE SYS:TTY.INI
MOVSI T5,(UU.PHS) ;ASCII MODE, PHYSICAL ONLY.
MOVSI T6,'SYS' ;DEVICE SYS:
MOVEI T7,IBF ;POINT TO BUFFER HEADER
MOVSI T1,'TTY' ;FILE NAMED
MOVSI T2,'INI' ; TTY.INI[-]
SETZB T3,T4 ; ..
PUSHJ P,HILOOK ;LOOK IN HISEG OR ON DSK:
JRST TYIN.2 ;IGNORE FILE IF MISSING
MOVEI T1,FILINC ;SET FOR FILE INPUT
MOVEM T1,GETCH ; FOR CHARACTER GRABBER
TXZ F,F.ECMD!F.EOF!F.ALIN ;CLEAR SCANNING FLAGS
;HERE TO LOOP OVER LINES IN FILE TO FIND ONE FOR THIS TTY
TYIN.1: PUSHJ P,FILELC ;CONDITIONALLY DO THIS LINE
JUMPGE CH,TYIN.1 ;UNLESS EOF, LOOP THROUGH FILE
SETZM GETCH ;CLEAR CHARACTER GETTER
SETZM LOWPTR ;CLEAR PTR TO HISEG
TYIN.2: RELEAS TI, ;RELEASE FILE
;HERE TO LOOK FOR ENTRY IN DSK:SWITCH.INI[,]/PHY IF LOGGED IN
TXNN F,F.LOGI ;SEE IF LOGGED IN
JRST SWIN.3 ;NO--SKIP SWITCH.INI
MOVX T1,UU.PHS ;YES--SET /PHYSICAL
MOVSI T2,'DSK' ;DSK:
MOVEI T3,IBF ;BUFFER HEADER
OPEN TI,T1 ;OPEN
JRST SWIN.3 ;IGNORE IF CAN'T OPEN
MOVE T1,['SWITCH'] ;FILE
MOVSI T2,'INI' ; SWITCH.INI
MOVEI T3,0 ; ..
MOVE T4,MYPPN ; [,]
LOOKUP TI,T1 ;GET FILE
JRST SWIN.3 ;IGNORE IF NOT THERE
MOVEI T1,FILINC ;SET FOR FILE INPUT
MOVEM T1,GETCH ; FOR CHARACTER GRABBER
TXZ F,F.ECMD!F.EOF!F.ALIN ;CLEAR SCANNING FLAGS
;HERE TO LOOP OVER LINES IN FILE TO FIND ONE FOR INITIA THIS TTY
SWIN.1: PUSHJ P,GETWRD ;GET FIRST WORD OF LINE
CAME WD,['INITIA'] ;SEE IF FOR INITIA
JRST [PUSHJ P,FILELS ;NO--SKIP LINE
JRST SWIN.2] ;AND FINISH LINE
CAIE CH,":" ;YES--SEE IF OPTION
JRST [PUSHJ P,FILELN ;NO--ASSUME ALL
JRST SWIN.2] ;AND FINISH LINE
PUSHJ P,FILELC ;YES--DO IF THIS TTY
SWIN.2: JUMPGE CH,SWIN.1 ;LOOP TO EOF
SETZM GETCH ;CLEAR CHARACTER GRABBER
SWIN.3: RELEAS TI, ;FREE CHANNEL
;HERE TO LOOK FOR THIS PROCESSOR S/N IN TABLE
PUSHJ P,DOCMD ;GO HANDLE COMMAND LINE
PUSHJ P,DOTTYS ;GO DO TTY SETUP
SKIPE T1,JUMPPR ;SEE IF PROCESSOR SET
JRST (T1) ;YES--GO DO THAT
MOVE T1,APRSN ;GET APR S/N
MOVSI T2,-APRTBL ;INITIALIZE FOR SEARCH ON APR S/N
CAME T1,APRTAB(T2) ;TEST FOR MATCH
AOBJN T2,.-1 ;NO--LOOP UNTIL DONE
;IF NOT FOUND, USE CATCHALL SET
;HERE TO LOOK THROUGH SPECIAL PROCESSING TABLE
HRRZ T3,APRTBV(T2) ;GET ADDRESS OF JUMP TABLE
HLRZ T2,APRTBV(T2) ;GET ADDRESS OF NAME TABLE
HRLI T2,T1 ;ADD INDEXING
HRLI T3,T1 ; ..
MOVSI T1,-SPTABL ;INITIALIZE FOR SEARCH ON NAME
TTYS.1: SKIPN T4,@T2 ;FETCH TTY NAME, CHECK FOR END
JRST NOTFND ;END OF TABLE
CAME ME,T4 ;TEST FOR MATCH
AOBJN T1,TTYS.1 ;NO--LOOP UNTIL DONE
JUMPGE T1,NOTFND ;YES--IF NOT FOUND, GIVE UP
HLRZ T2,@T3 ;SEE IF ANY TTY SET-UP NEEDED
SKIPE T2 ;NO--SKIP
PUSHJ P,(T2) ;YES--SEND IT VIA SPECIAL ROUTINES
HRRZ T2,@T3 ;GET SPECIAL PROCESSOR
JUMPN T2,(T2) ;GO TO IT IF NEEDED
;HERE IF NO SPECIAL PROCESSING REQUESTED IN TABLES
;SEE IF DEVICE OPR:, IF SO, BRING UP OPSER IN CCL MODE.
;THIS WILL CAUSE OPSER TO READ THE AUTO FILE AUTOMATICALLY.
NOTFND: MOVX T1,%CNOPR ;GET NAME OF
GETTAB T1, ; DEVICE OPR:
JRST GEN ; IGNORE IF UNKNOWN
TXNN F,F.REMO ;YES--SEE IF REMOTE OPR
CAMN T1,ME ;NO--SEE IF LOCAL OPR
JRST OPSER1 ;YES--GO DO OPSER CCL
;HERE FOR NON-INTERESTING TERMINAL
GEN: MOVX T1,%CNSTS ;GET SYSTEM STATES
GETTAB T1, ; FROM MONITOR
MOVEI T1,0 ;(ASSUME OK)
TXNN T1,ST%BON!ST%NRL!ST%NLG ;IF LOGIN ALLOWED,
TXNN F,F.ANSW ;SEE IF FORCED COMMAND
JRST GEN.4 ;NO--JUST FINISH UP
TTYSTR [ASCIZ \Please LOGIN\]
TXNE F,F.NJBS ;SEE IF JOBSTS WORKED
JRST GEN.2 ;NO--SKIP THIS LOGIC
MOVEI T1,1 ;YES--START AT JOB 1
GEN.1: MOVE T2,T1 ;GET THIS JOB NUMBER
TRMNO. T2, ;GET ITS TERMINAL
JRST [JUMPN T2,GEN.2 ;FAILED--IF NO ANSWER, GIVE UP
MOVN T2,T1 ;GET JOB
JOBSTS T2, ;GET ITS STATUS
JRST GEN.3 ;OK IF NONE
HRLZ T3,T1 ;GET JOB NUMBER
HRRI T3,.GTPPN ;GET ITS PPN
GETTAB T3, ;(FROM MONITOR)
MOVEI T3,0 ; ..
CAME T3,FFAPPN ;UNLESS [1,2],
JUMPL T2,GEN.2 ; IF DETACHED, ISSUE MESSAGE
JRST .+1] ;ELSE, CONTINUE LOOP
AOJA T1,GEN.1 ;LOOP
GEN.2: TTYSTR [ASCIZ / or ATTACH/]
GEN.3: TTYSTR CRLFM
GEN.4: JRST KILJOB ;JUST TYPE SYSTEM START-UP MESSAGE
; AND RETURN TO MONITOR
SUBTTL HANDLE COMMAND LINE
;SUBROUTINE TO HANDLE COMMAND LINE
DOCMD: TXNE F,F.RTTY ;IF NO COMMAND LEFT, RETURN
TXNN F,F.ICMD ;SEE IF COMMAND
CPOPJ: POPJ P, ;NO--GIVE UP
MOVEI T1,TTYIN ;SET FOR TTY
MOVEM T1,GETCH ; IN CHARACTER GRABBER
MOVEI CH,0 ;CLEAR CHARACTER GRABBER
TXZ F,F.ECMD!F.EOF!F.ALIN ;CLEAR SCANNING FLAGS
DOCM.1: TXNN F,F.ECMD!F.EOF ;SEE IF END OF COMMAND
CAIN CH,")" ;SEE IF END OF COMMAND YET
JRST DOCM.3 ;YES--ALL DONE
PUSHJ P,GETWRD ;GET NEXT COMMAND WORD
JUMPE WD,DOCM.2 ;LOOP IF NULL
MOVE T2,[IOWD CMDLL,CMDT] ;POINT TO POSSIBILITIES
PUSHJ P,FNDCMD ;FIND AND STORE COMMAND
INTERR (CER,Command Error,<JRST KILJOB>)
DOCM.2: CAIN CH,"-" ;SEE IF -XYZ
PUSHJ P,NO$ ;YES--SET NOXYZ
TXZN F,F.CERR ;SEE IF ERROR
JRST DOCM.1 ;NO--LOOP
;HERE AT END OF COMMAND--CLEAN UP LINE
DOCM.3: TXZE F,F.ECMD!F.EOF ;SEE IF END OF LINE
JRST DOCM.4 ;YES--RETURN
PUSHJ P,GETWRD ;NO--GET NEXT WORD
JRST DOCM.3 ;LOOP UNTIL DONE
DOCM.4: SETZM GETCH ;CLEAR CHARACTER GRABBER
POPJ P, ;RETURN
;ROUTINES TO HANDLE A LINE IN A FILE
;FILELC--CONDITIONAL BASED ON FIRST WORD BEING THIS TTY
;FILELN--ALWAYS
;FILELS--NEVER
;ALL RETURN AT END OF LINE
FILELC: HLL T8,NL.ME ;GET OUR NODE NUMBER
HRR T8,TERNUM ;AND THE 10'S TTY NUMBER
TXZ T8,.UXTRM ;CLEAR OUT 200000 BIT
TXZ F,F.PARN ;CLEAR PAREN INDICATOR
FILE.1: PUSHJ P,GETSIX ;GET NAME OR NODE NUMBER
CAMN WD,['OTHER '] ;SEE IF OTHER
TXNE F,F.ALIN ;YES--SEE IF NOTHING YET
CAMN WD,['ALL '] ;SEE IF FOR THIS TTY
JRST FILELN ;ALL--GO DO IT
; CHECK FOR A FEW MORE
CAMN WD,['DETECT'] ; SEE IF FOR DETECTION
JRST FILDET
CAMN WD,['LINSPD'] ; SEE IF ALL SUCH SPEEDS
JRST FILASP
CAMN WD,['OTHSPD'] ; SEE IF OTHER SUCH SPEEDS
JRST FILOSP
CAIE CH,"_" ;CHECK FOR A NODE NAME
JRST FILE.2
MOVE T8,NL.ME ;GET OUR NODE # AND RELATIVE LINE #
CAME WD,MYNNUM ;SAME AS MY OCTAL NODE NUMBER?
CAMN WD,MYNNAM ; OR MY NODE NAME?
JRST FILE.1 ;YES, SO PROCESS THIS LINE
JRST FILELS ;NO, WE ENCOUNTER A BUMMER
FILE.2: JUMPE WD,[CAIN CH,"(" ;IF NULL, SEE IF LIST [10(146)]
TXOE F,F.PARN ;YES--SET PAREN FLAG
JRST FILELS ;NO--SKIP THIS LINE
JRST FILE.1] ;YES--LOOP FOR TTY
PUSHJ P,XPNTTY ;FORMAT THE TTY NAME
PUSHJ P,CVTBIN ;MAKE BINARY IN THE RIGHT HALF
HLL WD,NL.ME ;GET OUR NODE NUMBER
CAIE CH,"-" ;SEE IF TTYX-Y MODE
JRST FILE.3 ;NO--GO SEE IF SINGLE
MOVE T7,WD ;SAVE FIRST COMPONENT
PUSHJ P,GETSIX ;GET NEXT HALF
JUMPG WD,[HLRZS WD ;IF DIGITS, MOVE RIGHT
HRLI WD,'TTY' ;MERGE IN LEFT HALF (TTY)
JRST .+1] ;AND PROCEED
PUSHJ P,XPNTTY ;EXPAND TT: TO TTY:
PUSHJ P,CVTBIN ;BINARY RIGHT HALF
HLL WD,T7 ;INSERT THE NODE NUMBER
CAMLE T7,WD ;SEE IF
EXCH T7,WD ; IN ORDER (ELSE, SWAP)
CAMG T7,T8 ;SEE HOW WE
CAMGE WD,T8 ;COMPARE
JRST FILE.5 ;NO--SKIP THIS ONE
JRST FILE.4 ;YES--DO IT
FILE.3: CAME WD,T8 ;SINGLE--SEE IF US
JRST FILE.5 ;NO--PROCEED
FILE.4: TXO F,F.ALIN ;YES--INDICATE SOMETHING
JRST FILELN ;DO THIS LINE
FILE.5: CAIN CH,"," ;TEST IF LIST
TXNN F,F.PARN ; INSIDE PARENS
JRST FILELS ;NO--SKIP LINE
JRST FILE.1 ;YES--GO TRY ANOTHER SHOT
FILELN: TXZE F,F.PARN ;DO COMMAND--SEE IF IN LIST
JRST [CAIN CH,")" ;YES--SEE IF DONE YET
JRST .+1 ;YES--PROCEED
PUSHJ P,GETSIX ;NO--GET ANOTHER WORD
CAIN CH,.CHLFD ;CHECK FOR END-OF-LINE
JRST FILE.6 ;FOUND IT, STOP LOSING SEARCH
JUMPE CH,FILE.6 ;STOP ON END-OF-FILE TOO
JRST .] ;AND LOOP
PUSHJ P,DOFILE ;DO THIS COMMAND
FILELS: JUMPLE CH,FILE.7 ;IF END OF FILE, SKIP ON
CAIN CH,.CHLFD ;IF END OF LINE,
JRST FILE.7 ; SKIP ON
PUSHJ P,GETWRD ;ELSE, SKIP THIS LINE
JRST FILELS ; AND LOOP
;HERE WHEN TIME TO PROCEED ON THROUGH FILE
FILE.6: PUSHJ P,ERRFCR ;UNMATCHED LEFT PAREN -- COMPLAIN
FILE.7: TXZ F,F.ECMD ;CLEAR END OF COMMAND LINE
TXZ F,F.PARN ;CLEAR PAREN INDICATOR
POPJ P, ;RETURN
; ROUTINES TO SCAN LINES BASED ON SPEEDS
SCNSPD: ; SCAN OFF THE SPEED PART
PUSHJ P,SKIPTV ;SKIP TO VALUE
PUSHJ P,GETSIX ;GET SIXBIT WORD
MOVE T2,[IOWD SPEEDL,SPEEDT]
PUSHJ P,FNDWRD ;FIND SPEED
SKIPA ; TRY SPEED UNKNOWN
POPJ P, ;RETURN
MOVNI T2,2 ; USE -2 FOR ERROR, -1 FOR UNKNOWN
MOVE T3,['UNKNOW'] ; SEE IF UNKNOWN
AND T3,T1 ; GET TO RIGHT LENGTH
CAMN WD,T3 ; SEE IF SAME
SETO T2, ; YES, USE -1
POPJ P,
FILASP: PUSHJ P,SCNSPD ; GET THE SPEED INDICATED
CAME T2,MYSPD ; SAME AS MINE?
JRST FILE.5 ; NO, TRY ANOTHER LINE
JRST FILE.4 ; YES, DO THIS LINE
FILOSP: PUSHJ P,SCNSPD ; GET THE SPEED
CAMN T2,MYSPD ; SAME AS MINE?
JRST FILE.5 ; YES, TRY ANOTHER
JRST FILE.4 ; NO, SO DO THIS ONE
FILDET: PUSHJ P,SCNSPD ; GET SPEED
CAME T2,MYSPD ; SAME AS MINE?
JRST FILE.5 ; NO
TXNN F,F.ANSW ; ARE WE DOING .HELLO?
JRST FILE.5 ; NO
JRST FILE.4 ; YES
;SUBROUTINE TO HANDLE LINE OF COMMAND FILE
;CALLED AFTER FIRST WORD OF LINE IS FOR US
DOFILE: TXNE F,F.ECMD!F.EOF ;SEE IF END OF COMMAND
POPJ P, ;YES--RETURN
PUSHJ P,GETWRD ;GET NEXT WORD
JUMPE WD,DOFI.1 ;IF NULL, IGNORE IT
MOVE T2,[IOWD CMDL,CMDT] ;FULL COMMAND TABLE
PUSHJ P,FNDCMD ;FIND AND STORE COMMAND
JRST ERRFCR ;ERROR IF MISSING
DOFI.1: CAIN CH,"-" ;SEE IF - XYZ
PUSHJ P,NO$ ;YES--SET NOXYZ
TXZN F,F.CERR ;SEE IF ERROR
JRST DOFILE ;NO--LOOP
ERRFCR: INTWRN (FCR,File command error)
OUTSTR [ASCIZ /
/]
POPJ P,0
SUBTTL SUBROUTINE TO IDENTIFY AND SAVE COMMAND
;CALL: MOVE T2,[IOWD LENGTH,LIST]
; PUSHJ P,FNDCMD
;NON-SKIP RETURN IF ERROR
;SKIP RETURN IF DONE
;VALUES CAN BE SEPARATED BY
FNDCMD: MOVE T7,T2 ;SAVE A COPY OF LIST
FNDC.1: PUSHJ P,FNDWRD ;LOOK WD UP IN TABLE
JRST [XOR WD,['NO ']
TLNE WD,777700 ;SEE IF NOXYZ
POPJ P, ;NO--ERROR
PUSHJ P,NO$ ;YES--SET FLAG
LSH T1,^D12 ;ADJUST MASK
LSH WD,^D12 ;ADJUST REST OF WORD
MOVE T2,T7 ;RESTORE LIST OF WORDS
JRST FNDC.1] ;AND TRY AGAIN
SKIPGE T1,CMDP(T2) ;GET PROCESSOR
HRRZM T1,JUMPPR ;IF -1,,ADDR, GIVES FINAL ROUTINE
TXNE F,F.NO ;SEE IF NO XXX
JUMPL T1,CPOPJ ;IF ROUTINE, ERROR
HLRE T2,T1 ;GET POSSIBLE VALUE
JUMPLE T2,FNDC.2 ;IF JUMP/ROUTINE, GO HANDLE
TXZE F,F.NO ;SEE IF NO XXX
TRC T2,3 ;YES--INTERCHANGE 1-2
CAIE T2,1 ;SEE IF YES
CAIN T2,2 ;SEE IF NO
MOVEM T2,(T1) ;YES--STORE VALUE
CAIG T2,3 ;SEE IF BIT VALUE
JRST CPOPJ1 ;YES--ALL OK
CAIE T2,4 ;SEE IF DECIMAL VALUE
POPJ P, ;NO--MUST BE ERROR
PUSH P,T1 ;SAVE LOCATION
PUSHJ P,SKIPTV ;SKIP TO VALUE
PUSHJ P,GETDEC ;GET DECIMAL VALUE
POP P,T2 ;RESTORE LOCATION
HRROM T1,(T2) ;STORE VALUE
JRST CPOPJ1 ;GIVE GOOD RETURN
FNDC.2: TLNN T1,-1 ;SEE IF 0,,ADDR
PUSHJ P,(T1) ; CALL ROUTINE
TXZE F,F.CERR ;SEE IF COMMAND ERROR
POPJ P, ;YES--GIVE ERROR
JRST CPOPJ1 ;NO--GIVE SUCCESS
SUBTTL DEFINE SYSTEMS WHICH NEED SPECIAL SET-UP
DEFINE APRS,<
X 546
;OTHERS MAY BE ADDED--EACH REQUIRES A SP MACRO
>
;DEFINE TABLE OF APR S/N TO PROCESS
DEFINE X(A),<
XLIST
EXP A
LIST
>
RADIX 10
APRTAB: APRS
APRTBL==.-APRTAB
RADIX 8
;DEFINE LIST OF TTY NAME TABLE AND PROCESSING TABLE
DEFINE X(A),<
XLIST
XWD TT'A,JJ'A
LIST
>
APRTBV: APRS
XWD TTXXX,JJXXX ;CATCHALL
SUBTTL SYSTEM TABLES
;SYSTEM 546 TABLES
DEFINE SP546,<
>
;CATCHALL TABLES FOR UNRECOGNIZED SYSTEMS
DEFINE SPXXX,<
>
;PEEL OUT THE TTY NAMES
T.==0
DEFINE X(A),<
XLIST
TT'A: SP'A
0
IFG .-TT'A-T.,<T.==.-TT'A>
LIST
>
DEFINE Y(A,B,C),<EXP SIXBIT /A/>
APRS
X XXX
SPTABL==T. ;SAFETY FACTOR FOR LOOP
;PEEL OUT JUMP TABLES
DEFINE X(A),< XLIST
JJ'A: SP'A
LIST>
DEFINE Y(A,B,C),<XWD C,B>
APRS
X XXX
SUBTTL STANDARD COMMAND TABLES
;FOR EACH KEYWORD, DEFINE LOCATION OF
;PROCESSOR AND WHETHER OR NOT COMMAND CAN GIVE
;W KEY,PROCESSOR,X,Y
; X=C IF COMMAND ALLOWED
; Y=J IF CALLED WITH JRST
; B IF SET A BIT
; I IF INVERT (OFF) A BIT
; D IF DECIMAL NUMBER
DEFINE CMDLST(J,B,I,D),<
W ALTMODE,ALT,,I
W AUTOMATIC,OPSER1,,J
W BATCH,FLBAT,C,B
W BLANKS,BLANK,,I
W CHKPNT,CHKPNT,,J
W CRASH,FILEX,,J
W CRLF,CRLF,,I
W DAEMON,DAEMON,,J
W DEBREAK,DEBR,,B
W DEFER,ECHDEF,,B
W DIALOUT,DIAL$,,
W DISPLAY,DISP,,B
W ECHO,ECHO,,I
W ELEMENT,ELEM,,D
W FILL,FILL,,D
W FORM,FORM,,B
W GAG,GAG,,I
W GALOPR,GALOPR,,J
W H,HELP,C,
W HDX,HDX,,B
W HELP,HELP,C,
W KSYS,FLKSYS,C,B
W LC,LC,,I
W LOCATE,LOCAT,,D
W NAME,FLNAME,C,I
W NO,NO$,C,
W NORUN,GEN,C,J
W NOTICE,FLNOTC,C,B
W OMOUNT,OMOUNT,,J
W OPSER,OPSER,,J
W PAGE,PAGCMD,,
W RCVSPEED,RCV$,,
W REMOTE,REM,,B
W RTCOMPATABILITY,RTCOMP,,B
W SETTTY,FLSET,C,I
W SLAVE,SLAVE,,B
W SPEED,SPEED$,,
W STRUCTURES,FLSTR,C,B
W SYSDLT,SYSDLT,,J
W SYSDPA,SYSDPA,,J
W SYSDPB,SYSDPB,,J
W SYSDPY,SYSDPY,,J
W SYSHZL,SYSHZL,,J
W SYSVFT,SYSV52,,J
W SYSVSO,SYSV61,,J
W TABS,TAB,,B
W TAPE,TAPE,,B
W TERMINET,TRMNET,C,
W TEXT,FLTEXT,C,B
W TIDY,TIDY,,B
W TTY,FLTTY,C,B
W TYPE,TYPE$,,
W UC,LC,,B
W UN,NO$,C,
W WIDTH,WIDTH,,D
W XMTSPEED,XMT$,,
>
XALL
DEFINE W($KEY,$PROC,$COM,$JUMP),<
IFIDN <$COM><C>,<
EXP <SIXBIT /$KEY/> ; $KEY
>>
;TABLE OF COMMAND NAMES
CMDT: CMDLST (-1,1,2,4)
CMDLL==.-CMDT
DEFINE W($KEY,$PROC,$COM,$JUMP),<
IFDIF <$COM><C>,<
EXP <SIXBIT /$KEY/> ; $KEY
>>
CMDLST (-1,1,2,4)
CMDL==.-CMDT
DEFINE W($KEY,$PROC,$COM,$JUMP),<
IFIDN <$COM><C>,<
XWD $JUMP,$PROC ; $KEY
>>
;LIST OF PROCESSORS
CMDP: CMDLST (-1,1,2,4)
DEFINE W($KEY,$PROC,$COM,$JUMP),<
IFDIF <$COM><C>,<
XWD $JUMP,$PROC ;$KEY
>>
CMDLST (-1,1,2,4)
SALL
SUBTTL ROUTINES FOR VARIOUS COMMANDS
SUBTTL NO COMMAND HANDLER
NO$: TXOE F,F.NO ;SET NO FLAG
TXO F,F.CERR ;IF ON, ERROR
POPJ P, ;RETURN
SUBTTL RCV/XMT SPEED COMMAND HANDLER
SPEED$: MOVEI T7,3 ;BOTH SPEEDS
JRST SPEED ;GO HANDLE
RCV$: MOVEI T7,2 ;REC SPEED
JRST SPEED ;GO HANDLE
XMT$: MOVEI T7,1 ;XMT SPEED
SPEED: PUSHJ P,SKIPTV ;SKIP TO VALUE
PUSHJ P,GETSIX ;GET SIXBIT WORD
MOVE T2,[IOWD SPEEDL,SPEEDT]
PUSHJ P,FNDWRD ;FIND SPEED
TXO F,F.CERR ;ERROR IF UNKNOWN
TXZE F,F.NO ;SEE IF NO
TXO F,F.CERR ;YES--COMMAND ERROR
TRNE T7,2 ;SEE IF RCV
HRROM T2,RCV ;YES
TRNE T7,1 ;SEE IF XMT
HRROM T2,XMT ;YES
TRNE T7,2 ; IF RECEIVE SPEED
HRRZM T2,MYSPD ; CHANGE MYSPEED
POPJ P, ;RETURN
SPEEDT: SIXBIT /0/
SIXBIT /50/
SIXBIT /75/
SIXBIT /110/
SIXBIT /134/
SIXBIT /150/
SIXBIT /200/
SIXBIT /300/
SIXBIT /600/
SIXBIT /1200/
SIXBIT /1800/
SIXBIT /2400/
SIXBIT /4800/
SIXBIT /9600/
SIXBIT /EXTA/
SIXBIT /EXTB/
SPEEDL==.-SPEEDT
SUBTTL PAGE COMMAND HANDLER
PAGCMD: PUSHJ P,SKIPTV ;SKIP TO VALUE IF ANY
CAIN CH,":" ;SEE IF VALUE
JRST PAGCM1 ;YES--SETTING NUMBER
CAIL CH,"0" ;OR
CAILE CH,"9" ; DECIMAL
JRST PAGCM2 ;NO--MUST JUST BE ON/OFF
PAGCM1: TXZE F,F.NO ;NUMBER
TXO F,F.CERR ;NO IS ERROR
PUSHJ P,GETDEC ;GET DECIMAL PAGE COUNT
HRROM T1,PAGE ;SET PAGE NUMBER
PAGCM2: TXZE F,F.NO ;ON/OFF--SEE IF OFF
TDZA T1,T1 ;NO SO OFF
MOVEI T1,1 ;ELSE ON
HRROM T1,PAGEON ;SET FOR PAGE FLAG
POPJ P, ;RETURN
SUBTTL DIAL COMMAND HANDLER
DIAL$: PUSHJ P,SKIPTV ;SKIP TO VALUE
SETOM DIAL ;FILL WITH MARKERS
SETOM DIAL+1 ;..
MOVE T7,[POINT 4,DIAL]
MOVEI T6,^D18 ;PROTECTIVE COUNT
DIAL.1: PUSHJ P,GETCHA ;GET NEXT DIGIT
CAIE CH," " ;SEE IF TAB
CAIN CH," " ; OR SPACE
JRST DIAL.1 ;YES--DISCARD
CAIN CH,"-" ;SEE IF SEPARATOR
JRST DIAL.1 ;YES--DISCARD
CAIE CH,"(" ;SEE IF
CAIN CH,")" ; AREA CODE SEPARATOR
JRST DIAL.1 ;YES--DISCARD
CAIN CH,"*" ;SEE IF DELAY MARKER
JRST [MOVEI CH,16 ;YES--INDICATE THAT
JRST DIAL.2] ;AND STORE
CAIL CH,"0" ;SEE IF
CAILE CH,"9" ; DIGIT
POPJ P, ;NO--MUST BE END
DIAL.2: IDPB CH,T7 ;STORE DIGIT
SOJG T6,DIAL.1 ;SEE IF OVERFLOW
TXO F,F.CERR ;YES--SET ERROR
SETZM DIAL ;AND CLEAR
SETZM DIAL+1 ; RESULT
POPJ P, ;RETURN
SUBTTL ROUTINE TO SETUP TTY
DOTTYS: SKIPN T1,FLSET ;SEE IF
TXNN F,F.LOGI ; (IF DIDN'T SAY, AND LOGGED IN, ASSUME NO)
TRNE T1,1 ; USER SAID NOSETTTY
JRST DOTT.2 ;RIGHT--SKIP THIS
MOVE T1,FFAPPN ;GET [1,2]
CHGPPN T1, ;CHANGE TO IT FOR
JFCL ; PRIVILEGED TRMOP.S
MOVSI T7,-DOTTYU ;SET LOOP LENGTH
TXNE F,F.LOGI ;JOB LOGGED IN
MOVSI T7,-DOTTLG ;YES, DON'T ALLOW SPECIAL THINGS FROM TTY.INI
DOTT.1: MOVE T1,[3,,T2] ;POINTER FOR TRMOP
HLRZ T2,DOTTYT(T7) ;GET TRMOP FUNCTION
CAIL T2,1000 ;SEE IF READ TRMOP.
ADDI T2,.TOSET ;YES--CHANGE TO SET
MOVE T3,TERNUM ;GET TERMINAL NUMBER
HRRZ T5,DOTTYT(T7) ;GET POINTER TO VALUE
HLRZ T4,DOTTYT(T7) ;GET TRMOP FUNCTION
CAIN T4,.TOTRM ;IS IT .TOTRM?
SKIPA T4,(T5) ;YES--GET FULL WORD
HRRZ T4,(T5) ;GET VALUE IF ANY
SKIPE (T5) ;UNLESS NULL,
TRMOP. T1, ; SET VALUE
JFCL ;IGNORE ERRORS
AOBJN T7,DOTT.1 ;LOOP FOR ALL FUNCTIONS
MOVE T1,MYPPN ;RECOVER ORIGINAL PPN
CHGPPN T1, ;CHANGE BACK TO IT
JFCL ;(IGNORE IF CAN'T)
MOVE T1,[4,,T2] ;POINTER FOR TRMOP
MOVEI T2,.TODSC ;INDICATE CALL
MOVE T3,TERNUM ;GET OUR NUMBER
MOVE T4,DIAL ;GET FIRST HALF OF NUMBER
SKIPE T5,DIAL+1 ;IF SET,
TRMOP. T1, ; MAKE CALL
JFCL ;IGNORE ERRORS
DOTT.2: PUSHJ P,SIGNON ;ISSUE SIGNON MESSAGE
MOVE T1,FLKSYS ;SEE IF
TRNE T1,1 ; USER WANTS KSYS
PUSHJ P,TYKSYS ;YES--ISSUE IT
MOVE T1,FLTEXT
TRNE T1,1
PUSHJ P,TEXT
MOVE T1,FLBAT ;SEE IF BAT
TRNE T1,1
PUSHJ P,BATCH
MOVE T1,FLSTR ;SEE IF STRUCT
TRNE T1,1 ; ..
PUSHJ P,STRUCT ;YES--TYPE STRUCTURE NOTES
MOVE T1,FLTTY ;GET TTY FLAG
TRNE T1,1 ;SEE IF SET
PUSHJ P,TYPTTY ;YES--TYPE TTY SETTINGS
MOVE T1,FLNOTC ;GET NOTICE FLAG
TRNE T1,1 ;SEE IF SET
PUSHJ P,NOTICE ;YES--TYPE NOTICE.TXT
POPJ P, ;RETURN
SUBTTL ROUTINE TO SETUP TTY "TYPE"
TYPE$: TXZE F,F.NO ;TEST AND ZERO NO BIT
JRST [SETZ WD, ;BIT ON--CLEAR WD
JRST TYPE$1] ;AND WRAPUP
PUSHJ P,SKIPTV ;SKIP TO VALUE
PUSHJ P,GETSIX ;GET TERMINAL NAME
JUMPN WD,TYPE$1 ;WAS ANYTHING SPECIFIED?
INTWRN (NTS,No type specified)
POPJ P, ;OK RETURN
TYPE$1: MOVEM WD,TYPE ;STORE TERMINAL TYPE
POPJ P, ;OK RETURN
SUBTTL TTY CONTROL LIST ROUTINE
;FORMAT IS XWD TRMOP.,VALUE
DOTTYT:
.TOELE,,ELEM ;TTY ELEMENT
.TOTRM,,TYPE ;TTY TYPE:XXXXXX
.TOLCT,,LC ;TTY LC
.TOTAB,,TAB ;TTY TAB
.TOFRM,,FORM ;TTY FORM
.TOLCP,,ECHO ;TTY NO ECHO
.TODEM,,ECHDEF ;TTY DEFER
.TONFC,,CRLF ;TTY NO CRLF
.TOWID,,WIDTH ;TTY WIDTH:N
.TOSND,,GAG ;TTY NO GAG
.TODIS,,DISP ;TTY DISPLAY
.TOFLC,,FILL ;TTY FILL:N
.TOTAP,,TAPE ;TTY TAPE
.TOPAG,,PAGEON ;TTY PAGE
.TOPSZ,,PAGE ;TTY PAGE:N
.TOBLK,,BLANK ;TTY NO BLANKS
.TOALT,,ALT ;TTY ALT
.TORSP,,RCV ;TTY RCV:XX
.TOTSP,,XMT ;TTY XMT:XX
.TODBK,,DEBR ;TTY DEBREAK
.TOTDY,,TIDY ;TTY TIDY
.TORTC,,RTCOMP ;TTY RTCOMP
DOTTLG==.-DOTTYT
;THE FOLLOWING ARE NOT SETTABLE BY THE USER, FOR TYPEOUT ONLY, AND MUST BE LAST
.TOSLV,,SLAVE ;TTY SLAVE
.TOHLF,,HDX ;TTY HDX (HALF-DUPLEX)
.TORMT,,REM ;TTY REMOTE (NOT LOCAL)
DOTTYU==.-DOTTYT
SUBTTL ROUTINE TO KJOB IF SYSTEM GOING DOWN
REPEAT 0,< ;NO LONGER NEEDED
KSYS: MOVE T1,[3,,['KJO',,0
IOWD KSYSL,KSYSC]]
TMPCOR T1, ;WRITE KJOB COMMAND TO TMPCOR
JRST .+2 ;CAN'T--TRY DISK
JRST KJOB1 ;DID--CALL KJOB AT CCL ENTRY
;HERE WHEN CAN'T DO IT IN TMPCOR--TRY THE DISK
OPEN IO,DSKOPN ;OPEN DISK CHANNEL
BOMB$ ;GIVE UP IF CAN'T
MOVE T1,JOBN ;GET FILE NAME
MOVEI T4,3 ;BY TIME-HONORED NAME MAKER
KSYSFN: IDIVI T1,^D10 ;GET NEXT DIGIT
ADDI T2,'0' ;CONVERT TO SIXBIT
LSHC T2,-6 ;CONCATENATE WITH ANSWER
SOJG T4,KSYSFN ;LOOP UNTIL DONE WITH 3 DIGITS
HRRI T3,'KJO' ;APPEND FILE CODE
MOVSI T4,'TMP' ;GET EXTENSION
SETZB T5,T6 ;CLEAR DIRECTORY
ENTER IO,T3 ;MAKE FILE
BOMB$ ;GIVE UP IF ILLEGAL
OUTPUT IO,[IOWD KSYSL,KSYSC
0]
RELEASE IO, ;COMPLETE OPERATION
;HERE WHEN CCL FILE WRITTEN AND TIME TO CALL KJOB
KJOB1: MOVE T2,[SIXBIT /KJOB/] ;GET CUSP NAME
JRST CUSP1 ;RUN IT AT CCL ENTRY
DSKOPN: 1B0+17 ;PHYSICAL DISK OPEN
'DSK '
0
KSYSC: ASCIZ \KJOB KSYS.LOG=/W/B
\
KSYSL==.-KSYSC
>; END REPEAT 0
SUBTTL SPECIAL PROCESSORS
;HERE TO START UP FILEX UNDER [10,1] TO SAVE CRASH
SUBTTL FILEX PROCESSOR
FILEX: MOVX T2,%LDCRP ;GET NUMBER OF CRASH STORAGE AREA
GETTAB T2, ;FROM THE MONITOR
MOVE T2,[10,,1] ;(FOR PRE 5.3)
TLNE T2,777760 ;HACK TO GET AROUND 5.2 BUG
MOVE T2,[10,,1] ;WHICH GAVE JUNK IN 16,,16
MOVE T4,[SIXBIT /FILEX/] ;GET CUSP NAME
JRST LOGCSP ;GO LOGIN AND RUN CUSP
SUBTTL OMOUNT PROCESSOR
OMOUNT: MOVE T4,[SIXBIT /OMOUNT/] ;GET CUSP NAME
JRST CUSP12 ;GO LOGIN AND RUN IT
SUBTTL DAEMON PROCESSOR
DAEMON: MOVE T4,[SIXBIT /DAEMON/] ;GET THE CUSP NAME
JRST CUSP12 ;GO LOGIN AND RUN IT
SUBTTL CHKPNT PROCESSOR
CHKPNT: MOVE T4,[SIXBIT /CHKPNT/] ;GET THE CUSP NAME
JRST CUSP12 ;GO LOGIN AND RUN IT
SUBTTL OPSER PROCESSOR
OPSER1: TXO F,F.CCL ;FORCE CCL ENTRY POINT
OPSER: MOVE T4,[SIXBIT /OPSER/] ;GET CUSP NAME
JRST CUSP12 ;LOGIN AND RUN IT
SUBTTL PRINTR PROCESSOR
PRINTR: MOVE T4,[SIXBIT /PRINTR/] ;GET THE CUSP NAME
JRST CUSP12 ;AND LOGIN AND START IT
SUBTTL GALOPR PROCESSOR
GALOPR: TXO F,F.CCL ;FORCE CCL RUN
MOVSI T4,'OPR' ;NAME OF PROGRAM
JRST CUSP12 ;LOGIN AND START IT
SUBTTL SYSDPY PROCESSOR
SYSDLT: SKIPA T4,[SIXBIT /SYSDLT/] ;DELTA DATATERM
SYSHZL: MOVE T4,[SIXBIT /SYSHZL/] ;HAZELTINE 2000
JRST SYSDPX ;GO DO IT
SYSDPA: SKIPA T4,[SIXBIT /SYSDPA/] ;VT05A
SYSDPB: MOVE T4,[SIXBIT /SYSDPB/] ;VT05B
JRST SYSDPX
SYSV52: SKIPA T4,[SIXBIT /SYSV52/] ;VT52
SYSV61: MOVE T4,[SIXBIT /SYSV61/] ;VT61
JRST SYSDPX
SYSDPY: MOVE T4,[SIXBIT /SYSDPY/] ;VT06
SYSDPX: TXO F,F.LOGX ;FLAG OK TO RUN UNDER ANY NUMBER
SUBTTL LOGIN TO 1,2 AND RUN CUSP NAMED IN T4
CUSP12: PUSH P,T4 ;SAVE T4
PUSHJ P,LOGI12 ;LOG INTO 1,2 TO DISPLAY PRIVILEGED INFORMATION
JRST CUSPXX ;GO FINISH RUNNING CUSP
;HERE TO DO ARBITRARY LOGIN TO (T2) AND RUN CUSP IN (T4)
LOGCSP: PUSH P,T4 ;SAVE COPY OF CUSP NAME
PUSHJ P,LOGIN$ ;GO DO LOGIN
CUSPXX: POP P,T2 ;RESTORE T2
SUBTTL START UP CUSP NAMED IN T2
CUSP: PUSH P,T2 ;SAVE NAME
TTYSTR [ASCIZ /.R /]
PUSHJ P,TYPSIX ;TYPE NAME
TTYSTR CRLFM
POP P,T2 ;RECOVER NAME
TXNN F,F.CCL ;SEE IF FORCED CCL ENTRY POINT
TLZA T1,-1 ;CLEAR RUN OFFSET
CUSP1: MOVSI T1,1 ;SET RUN OFFSET FOR CCL ENTRY
MOVEM T2,RUNBLK+1 ;SAVE CUSP NAME
MOVSI T2,(SIXBIT /SYS/) ;GET CUSPS FROM SYS
MOVEM T2,RUNBLK ;SAVE DEVICE
HRRI T1,RUNBLK ;SET POINTER FOR RUN UUO
MOVEM F,SAVEF ;SAVE FLAGS FOR LATER
PUSHJ P,TTYPBF ;DUMP TTY BUFFER
MOVE T2,[RUN T1,] ;GET RUN UUO
TXNE F,F.PHYS ;SEE IF PHYSICAL NEEDED
TXO T2,UU.PHY ;YES--SET IT
XCT T2 ;GO RUN THE CUSP
MOVE P,[IOWD L$PDL,PDL] ;IN CASE OF FAILURE--LOGOUT
MOVEI ME,0 ;CLEAR GARBAGE
MOVE F,SAVEF ;RESTORE FLAGS
INTERR (NFD,,<JRST .+1>)
MOVE T2,RUNBLK+1 ;GET CUSP NAME
PUSHJ P,TYPSIX ;TYPE IT OUT
TTYSTR [ASCIZ / not found
/]
SUBTTL KILL JOB ROUTINE
KILJOB: TXNE F,F.RTTY ;SEE IF STILL SOME TO REEAT
PUSHJ P,TTYIND ;YES--EAT IT UP
TXNN F,F.LOGI ;SEE IF LOGGED IN
TTYSTR [ASCIZ /
./] ;NO--GIVE CONVENTIONAL DOT
LOGOF$: PUSHJ P,TTYPBF ;EMPTY TTY BUFFER
LOGO1$: LOGOUT 1, ;EXIT WITH JUST A DOT
LOGOU$: LOGOUT ;DESTROY THE JOB
SUBTTL SUBROUTINE TO LIST STRUCTURE NOTES
STRUCT: MOVEI T7,0 ;PRESET FOR SYSSTR
MOVE T6,.JBFF ;SAVE FREE CORE
STRUCL: MOVEM T6,.JBFF ;RESTORE FREE CORE
SYSSTR T7, ;GET NEXT STR IN SYSTEM
POPJ P, ;GIVE UP IF NOT LEVEL-D
JUMPE T7,CPOPJ ;RETURN WHEN DONE
PUSH P,T6 ;SAVE TWO AC'S
PUSH P,T7 ; ..
MOVX T5,UU.PHS ;ACCESS /PHYSICAL
MOVE T6,T7 ;GET STR NAME
MOVEI T7,IBF ;POINT TO INPUT BUFFER HEADER
MOVSI T1,'STR' ;PREPARE
MOVSI T2,'TXT' ; FILE
MOVEI T3,0 ; STR.TXT[1,4]
MOVE T4,SYSPPN ; ON EACH STRUCTURE
PUSHJ P,HILOOK ;LOOKUP FILE ON DISK OR HISEG
JRST STRUCO ;IGNORE IF MISSING OR SCREWY
MOVE T2,(P) ;GET STR NAME
PUSHJ P,TYPSIX ;TYPE IT
TTYSTR [ASCIZ /: /]
PUSHJ P,TYPFIL ;GO TYPE FILE
STRUCO: POP P,T7 ;RESTORE STR NAME
POP P,T6 ;RESTORE .JBFF
SETZM LOWPTR ;FORGET ABOUT FILE
RELEAS TI, ;RELEASE CHANNEL
HLLZS .JBINT ;CLEAR INTERCEPT
TXZ F,F.EOF ;CLEAR EOF FLAG
JRST STRUCL ;LOOP FOR NEXT STR
SUBTTL HELP ROUTINE
HELP: MOVE T1,['INITIA']
PUSHJ P,.HELPR## ;GO GIVE HELP
JRST KILJOB ;GO KILL JOB
SUBTTL SUBROUTINES TO LIST SYSTEM,BATCH AND TEXT NOTICES
;ROUTINE TO TYPE OUT INITIA.TXT FROM SYS:
TEXT: MOVEI T5,0 ;READ IN ASCII MODE
MOVSI T6,'SYS' ;SYS:
MOVEI T7,IBF ;INPUT BUFFER
MOVE T1,['INITIA'] ;LOOKUP
MOVSI T2,'TXT' ; FILE
SETZB T3,T4 ; SYS:INITIA.TXT[-]
PUSHJ P,HILOOK ;FIND FILE IN HISEG
POPJ P, ;GIVE UP IF NO FILE
PUSHJ P,TYPFIL ;TYPE CONTENTS OF FILE
SETZM LOWPTR ;FORGET FILE
RELEAS TI, ;RELEASE CHANNEL
TXZ F,F.EOF ;CLEAR EOF INDICATOR
POPJ P, ;RETURN
NOTICE: MOVEI T5,0 ;READ IN ASCII MODE
MOVSI T6,'SYS' ;SYS:
MOVEI T7,IBF ;INPUT BUFFER
MOVE T1,['NOTICE'] ;LOOKUP
MOVSI T2,'TXT' ; FILE
SETZB T3,T4 ; SYS:NOTICE.TXT[-]
PUSHJ P,HILOOK ;FIND FILE IN HISEG
POPJ P, ;GIVE UP IF NO FILE
PUSHJ P,TYPFIL ;TYPE CONTENTS OF FILE
SETZM LOWPTR ;FORGET FILE
RELEAS TI, ;RELEASE CHANNEL
TXZ F,F.EOF ;CLEAR EOF INDICATOR
POPJ P, ;RETURN
;ROUTINE TO LIST CURRENT BATCH SYSTEM (IF ANY)
BATCH: MOVE T1,[%SIQSR] ;GALAXY TEST
GETTAB T1,
SKIPA ;FAIL GETTAB JUST CHECK BATCON, LPTSPL
JUMPN T1,BATGAL ;NON-0, TYPE "GALAXY"
MOVE T7,[%CNLMX] ;NOT GALAXY, GET LOGMAX FOR NAME SEARCH
GETTAB T7, ;INTO T7
POPJ P, ;FAIL? FORGET THE WHOLE THING
MOVEI T1,.GTPRG ;PROGRAM NAME TABLE
SETZM T2 ;COUNTER
SETZM T4
BAT1: MOVEI T3,.GTPRG ;PROGRAM-NAME TABLE TABLE NUMBER
AOS T2 ;COUNT TO NEXT JOB
HRL T3,T2 ;USE AS INDEX INTO TABLE
GETTAB T3, ;GET PROGRAM NAME
JFCL ;QUITE POSSIBLE NOT ACTIVE JOB NUMBER
CAMN T3,[SIXBIT /LPTSPL/]
JRST LPSET ;LPTSPL RUNNING, REMEMBER IT
CAMN T3,[SIXBIT /BATCON/]
JRST BATSET ;BATCON RUNNING, REMEMBER IT
BAT2: CAME T2,T7 ;DONE?
JRST BAT1 ;NO, CHECK NEXT
SKIPN T4 ;BATCON IOR LPTSPL?
JRST BATNO ;NO, "NO BATCH SUPPORT"
CAIN T4,3 ;BOTH OF THEM?
JRST BATBOT ;YES, "MPB SPOOLING AND BATCH"
CAIN T4,1 ;JUST LPTSPL?
JRST BATSPL ;YES, "MPB SPOOLING SYSTEM"
POPJ P, ;NO, BATCON ALONE IS MEANINGLESS
LPSET: TROA T4,1 ;SET LPTSPL BIT
BATSET: TRO T4,2 ;SET BATCON BIT
CAIN T4,3 ;GOT BOTH?
JRST BATBOT ;YES, TYPE AND QUIT
JRST BAT2 ;NO, CONTINUE
BATNO: TTYSTR [ASCIZ / NO BATCH SUPPORT/]
TTYSTR 1,CRLFM
BATGAL: TTYSTR [ASCIZ / GALAXY SPOOLING AND BATCH SYSTEM/]
TTYSTR 1,CRLFM
BATBOT: TTYSTR [ASCIZ / MPB SPOOLING AND BATCH SYSTEM/]
TTYSTR 1,CRLFM
BATSPL: TTYSTR [ASCIZ / MPB SPOOLING SYSTEM/]
TTYSTR 1,CRLFM
SUBTTL SUBROUTINE TO TYPE TTY SETTINGS
TYPTTY:
TYPT.1: MOVSI T7,-DOTTYU ;LOOP OF TTY SETUP TABLE
SETZB WD,CHRSOU ;CLEAR NUMBER OF THINGS TYPED
TYPT.2: MOVE T1,[2,,T2] ;ARG POINTER
HLRZ T2,DOTTYT(T7) ;GET FUNCTION
CAIGE T2,1000 ;SEE IF READ FUNCTION
JRST TYPT.6 ;NO--IGNORE IT
HRRZ T6,DOTTYT(T7) ;GET STORAGE
MOVSI T5,-TYPTTU ;LOOP OVER SPECIAL FORMATTERS
TYPT.3: HRRZ T4,TYPTTT(T5) ;GET ITS STORAGE
CAME T4,T6 ;SEE IF SAME
AOBJN T5,TYPT.3 ;NO--LOOP
MOVE T6,TYPTTW(T5) ;YES OR END--GET NAME
HLR T5,TYPTTT(T5) ;GET ADDRESS OF FORMATTER
JUMPL T5,TYPT.5 ;IF FOUND, GO DO IT
HRRZ T6,DOTTYT(T7) ;RESTORE MATCHING VALUE
MOVSI T5,-CMDL ;ELSE LOOP OVER COMMAND TABLE
TYPT.4: HRRZ T4,CMDP(T5) ;GET ITS STORAGE
CAME T4,T6 ;SEE IF SAME
AOBJN T5,TYPT.4 ;NO--LOOP
JUMPG T5,TYPT.6 ;IGNORE IF NOT IN EITHER TABLE
MOVE T6,CMDT(T5) ;GET NAME
HLRE T5,CMDP(T5) ;GET FORMAT INDICATOR
JUMPLE T5,TYPT.6 ;IF SPECIAL ROUTINE, IGNORE
CAIL T5,3 ;SEE IF 4
MOVEI T5,3 ;YES--MERGE INTO SEQUENCE
MOVE T5,[TYPBON ;1=BIT ON
TYPBOF ;2=BIT OFF
TYPVAL]-1(T5) ;3/4=DECIMAL VALUE
;HERE WHEN STYLE IDENTIFIED
TYPT.5: MOVE T3,TERNUM ;GET TTY NUMBER
TRMOP. T1, ;READ VALUE
JRST TYPT.6 ;IGNORE IF ERROR
PUSHJ P,(T5) ;FORMAT OUTPUT
SKIPN T1,CHRSOU ;GET CHARACTERS TYPED
JRST TYPT.6 ;NO OUTPUT THIS TIME
AOS WD ;NUMBER OF THINGS TYPED
TLC T7,-1 ;THIS IS TO BUM THE TABS AFTER THE LAST ITEM
TLCE T7,-1 ;ONLY WORKS BECAUSE "REMOTE" TYPES SOMETHING
TRNN WD,3 ;DO ONLY 4 PER LINE
JRST [TTYSTR CRLFM ;END THIS LINE
JRST TYPT.6] ;AND GET THE NEXT THING
CAIGE T1,^D8 ;NUMBER OF CHARACTERS TYPED
TTYOUT " " ;SMALL, NEED 2 TABS
TTYOUT " " ;ALIGN NEXT OUTPUT FIELD
TYPT.6: SETZM CHRSOU ;COUNT FRESH
AOBJN T7,TYPT.2 ;LOOP OVER TRMOP TABLE
POPJ P, ;RETURN
TYPTTT: ;TABLE OF SPECIAL FORMATTERS,,VALUE
TYPAGA,,PAGEON
TYPAGB,,PAGE
TYPSPD,,RCV
TYPSPD,,XMT
TYPTYP,,TYPE
TYPECA,,ECHO
TYPECB,,ECHDEF
TYPTTU==.-TYPTTT
TYPTTW: ;TABLE OF NAMES OF ABOVE
SIXBIT /PAGE/
SIXBIT /PAGE/
SIXBIT /RCV/
SIXBIT /XMT/
SIXBIT /TYPE/
SIXBIT /ECHO/
SIXBIT /ECHO/
SUBTTL ROUTINE TO TYPE ECHO:DEFER OF NO ECHO OR JUST ECHO
TYPECA: MOVEM T1,ECHO ;SAVE FOR ECHO:DEFER LOGIC
JUMPN T1,TYPBOF ;TYPE NO ECHO IF SET
POPJ P, ;ELSE WAIT FOR THE NEXT OONE
TYPECB: SKIPE ECHO ;DID WE ALREADY SAY "NO ECHO"
POPJ P, ;YES, THAT'S VERBOSE ENOUGH
JUMPE T1,TYPBOF ;NO, JUST SAY "ECHO" IF NOT DEFERED
TTYSTR 1,[ASCIZ/ECHO:DEFER/] ;OUTPUT IT AND RETURN
SUBTTL ROUTINE TO TYPE PAGE:N OR NOPAGE
TYPAGA: MOVEM T1,PAGEON ;SAVE FOR PAGE:N LOGIC
JUMPE T1,TYPBON ;IF NO PAGE, GO TYPE
POPJ P, ;ELSE, RETURN
TYPAGB: SKIPN PAGEON ;SEE IF NO PAGE
POPJ P, ;YES--RETURN
JUMPE T1,TYPBOF ;NO--IF PAGE:0 TYPE PAGE
JRST TYPVAL ;ELSE, TYPE DECIMAL PAGE
SUBTTL ROUTINE TO FORMAT SPEED
TYPSPD: ANDI T1,17 ;PROTECT AGAINST JUNK
JUMPE T1,CPOPJ ;IGNORE IF ZERO
PUSH P,T1 ;SAVE VALUE
MOVE T2,T6 ;GET NAME
PUSHJ P,TYPSIX ;TYPE IN SIXBIT
TTYSTR [ASCIZ /SPEED:/]
POP P,T1 ;RECOVER SPEED INDEX
MOVE T2,SPEEDT(T1) ;GET SPEED
PJRST TYPSIX ;TYPE IN SIXBIT
SUBTTL ROUTINE TO TYPE TYPE:XXXXXX
TYPTYP: MOVE T2,T1 ;PUT TYPE IN T2
TTYSTR [ASCIZ /TYPE:/]
PJRST TYPSIX ;TYPE IT OUT
SUBTTL ROUTINE TO FORMAT DECIMAL
TYPVAL: PUSH P,T1 ;SAVE VALUE
MOVE T2,T6 ;GET NAME
PUSHJ P,TYPSIX ;TYPE IN SIXBIT
TTYOUT ":" ;SEPARATE FROM VALUE
POP P,T1 ;RESTORE VALUE
PJRST TYPDEC ;TYPE IN DECIMAL
SUBTTL ROUTINE TO FORMAT BIT VALUES
TYPBOF: TRC T1,1 ;VALUE NORMALLY ON SO SWITCH
TYPBON: TRNN T1,1 ;SEE IF SET
TTYSTR [ASCIZ /NO/] ;NO--INDICATE
MOVE T2,T6 ;GET NAME
PJRST TYPSIX ;TYPE IN SIXBIT
SUBTTL TTY SETUP PROCESSORS
;NOTE--ALL MUST PRESERVE T1, T3
SUBTTL TERMINET ROUTINE
;TRMNET -- SETUP TERMINET 300 TABS
TRMNET: MOVEI T2,TRMIMG ;GET SPECIAL TEXT TO SEND
PUSHJ P,SNDIMG ;SEND TO UNIT
SETOM T2 ;FLAG FOR THIS UNIT
GETLCH T2 ;GET LINE CHARACTERISTICS
TXO T2,GL.TAB ;SET TABS FLAG
SETLCH T2 ;SET LINE CHARACTERISTICS
POPJ P, ;RETURN
SUBTTL INPUT ROUTINES
;SUBROUTINE TO FIND A WORD IN A TABLE
;CALL: MOVE WD,WORD IN SIXBIT
; MOVE T1,MASK OF WHAT TYPED
; MOVE T2,[IOWD LEN,TABLE]
; PUSHJ P,FNDWRD
; ERROR RETURN
; FOUND WITH T2=INDEX OF RESULT
;USES T3, T4, T5
SUBTTL TABLE SEARCH ROUTINE
FNDWRD: MOVE T3,T2 ;SAVE POINTER
MOVEI T5,0 ;CLEAR ABBREVIATION POINTER
FNDW.1: MOVE T4,1(T3) ;GET NEXT TRIAL
XOR T4,WD ;COMPARE
JUMPE T4,FNDW.3 ;GOOD MATCH
TDNE T4,T1 ;SEE IF OK AS ABBREVIATION
JRST FNDW.2 ;NOT ABBREVIATION
SKIPE T5 ;SEE IF ABBREVIATION KNOWN
SETOM T5 ;YES--SET FLAG
SKIPN T5 ;SEE IF ANY ABBREVIATION
HRRZ T5,T3 ;SAVE POINTER
FNDW.2: AOBJN T3,FNDW.1 ;LOOP OVER LIST
SKIPG T3,T5 ;RECOVER ABBREVIATION
POPJ P, ;ERROR RETURN IF NONE
FNDW.3: SUBI T3,(T2) ;GET INDEX
MOVEI T2,(T3) ;COPY RESULT
CPOPJ1: AOS (P) ;SUCCESS
POPJ P, ;RETURN
;SUBROUTINE TO SKIP TO VALUE IF ANY
;SKIPS ONE : OR SEVERAL SPACES/TABS
SUBTTL SKIP TO VALUE ROUTINE
SKIPTV: CAIN CH,":" ;SEE IF :
POPJ P, ;YES--OK TO PROCEED
SKTV.1: CAIE CH," " ;SEE IF SPACE
CAIN CH," " ; OR TAB
JRST [PUSHJ P,GETCHA ;YES--SKIP ON
JRST SKTV.1] ;AND LOOP
TXNN F,F.ECMD ;IF END OF LINE NOT REACHED,
HRROM CH,REEAT ;REEAT LAST CHAR
POPJ P, ;RETURN
;ROUTINE TO READ A DECIMAL NUMBER
;RETURNS VALUE IN T1; USES T2
SUBTTL DECIMAL READ ROUTINE
SUBTTL OCTAL READ ROUTINE
GETOCT: SKIPA T2,[10] ; LOAD OCTAL BASE
GETDEC: MOVEI T2,^D10 ; LOAD DECIMAL BASE
MOVEI T1,0 ; CLEAR RESULT
PUSHJ P,GETCHA ;GET LEAD CHARACTER
CAIE CH,"#" ;SEE IF OCTAL FORCER
JRST GTDC.1 ;NO--START ACCUMULATION
MOVEI T2,10 ;YES--CHANGE TO OCTAL RADIX
PUSHJ P,GETCHA ;AND REPLACE FIRST CHARACTER
GTDC.1: CAIL CH,"0" ;SEE IF
CAIL CH,"0"(T2) ; NUMERIC
JRST GTDC.2 ;NO--MUST BE DONE
IMULI T1,(T2) ;YES--ROUND UP
ADDI T1,-"0"(CH) ;INCLUDE THIS DIGIT
PUSHJ P,GETCHA ;GET NEXT CHARACTER
JRST GTDC.1 ;LOOP
GTDC.2: CAIN CH,"." ;SEE IF DECIMAL SUFFIX
PUSHJ P,GETCHA ;YES--SKIP IT
POPJ P, ;RETURN VALUE
;SUBROUTINE TO GET A SIXBIT NAME
;RETURNS SIXBIT NAME IN WD, TERMINATOR IN CH, MASK IN T1
SUBTTL SIXBIT NAME ROUTINE (GETSIX)
GETSIX: SETZB T1,WD ;CLEAR RESULTS
GETSI1: PUSHJ P,GETCHA ;GET NEXT CHARACTER
CAIL CH,"0" ;SEE IF
CAILE CH,"9" ; NUMERIC
SKIPA ;NO
JRST GETSI2 ;YES
CAIL CH,"A" ;SEE IF ALPHA
CAILE CH,"Z"+40 ; ..
JRST GETSI3 ;NO--EXIT
CAILE CH,"Z"
CAIL CH,"A"+40
SKIPA
JRST GETSI3 ;NO--EXIT
TRZ CH,40 ;FORCE UPPER CASE
GETSI2: TLOE T1,(77B5) ;MASK NEXT CHAR ON
JRST GETSI1 ;LOOP
ROT T1,6 ;POSITION MASK
LSH WD,6 ;POSITION SIXBIT NAME
IORI WD,-40(CH) ;INCLUDE NEXT CHAR
JRST GETSI1 ;LOOP FOR MORE
GETSI3: CAIE CH," " ;SEE IF TAB OR
CAIN CH," " ;BLANK SEPARATOR
JUMPE T1,GETSIX ;IF BLANK OR TAB FIELD, SKIP LEADING BLANKS
JUMPE T1,CPOPJ ;RETURN IF NULL
TLNE T1,(77B5) ;SEE IF LEFT ADJUSTED
POPJ P, ;YES--RETURN
LSH T1,6
LSH WD,6
JRST GETSI3
;SUBROUTINE TO CHANGE TTXXX: INTO TTYXXX:
;THIS ALLOWS 2 LETTER GENERIC DEVICE NAMES
;ROUTINE ALSO INSERTS LEADING 0 IN TTY NUMBERS TO SIMPLIFY
;COMPARES
SUBTTL TTY EXPANSION ROUTINE (XPNTTY)
XPNTTY: CAMN WD,[SIXBIT /CTY/]
MOVE WD,CTYTTY ; GET TTY NNN FOR CTY
MOVE T1,WD ; COPY WORD
TLC T1,'TT0' ;TEST TT THEN DIGIT
TRNN T1,77 ;MUST BE LE 5 CHARS
TLNE T1,777770 ;AND THAT FORM
JRST XPNT.1 ;NOT--LEAVE ALONE
MOVE T1,WD ;MAKE ANOTHER COPY
LSHC T1,-^D24 ;IS--SEPARATE GENERIC PART
LSH T1,6 ;MOVE OVER
TRO T1,'Y' ;INCLUDE THE Y
LSHC T1,^D18 ;REJOIN
MOVE WD,T1 ;RESTORE TO NORMAL AC
XPNT.1: TRNN WD,77 ;SEE IF LESS THAN 6 CHARS
TRNN WD,-1 ;SEE IF GREATER THAN 3
POPJ P, ;NO--RETURN
HRRZ T1,WD ;YES--GET RIGHT HALF
TRC T1,'0 ' ;REMOVE DIGIT OFFSET
TRNE T1,7700 ;SEE IF SECOND DIGIT
TRC T1,'0 ' ;YES--REMOVE ITS OFFSET
TRNE T1,707070 ;VERIFY ALL DIGITS
POPJ P, ;NO--LEAVE ALONE
HRRZ T1,WD ;OK--GET CLEAN COPY
SKIPA ;ALL DIGITS
LSH T1,-6 ; ADJUST
TRNN T1,77 ; DIGITS
JRST .-2 ; ..
TRNN T1,770000 ;SEE IF FILL NEEDED
TRO T1,'0 ' ;YES--FILL WITH 0
TRNN T1,7700 ;SEE IF MORE FILL
TRO T1,'0 ' ;YES--AGAIN
HRR WD,T1 ;RETURN TO ANSWER
POPJ P, ;RETURN
SUBTTL CVTSIX
;SUBROUTINE CVTSIX - CONVERT OCTAL NUMBERS IN THE RANGE
; 0-777 TO LEFT-JUSTIFIED SIXBIT. ON ENTRY T1=BINARY, ON
; RETURN T1=SIXBIT VALUE
; NOTE: THIS SUBROUTINE STRIPS TRAILING ZEROS.
CVTSIX: TDZ T1,[-1,,777000] ; CLEAR OUT GARBAGE
MOVE T3,[POINT 6,T1] ; PREPARE BYTE POINTER
CVTLOP: IDIVI T1,10 ; DIVIDE OCTAL
HRLM T2,(P) ; STACK REMAINDER
SKIPE T1 ; QUIT WHEN DONE
PUSHJ P,CVTLOP ; ELSE LOOP
HLRZ T2,(P) ; UNSTACK
TRO T2,20 ; SIXBITIZE
IDPB T2,T3 ; STORE IN LEFT HALF OF T1
POPJ P,0
;SUBROUTINE CVTBIN - CONVERT RIGHT HALF OCTAL TO SIXBIT
;CALL MOVE WD,ARG
; PUSHJ P,CVTBIN
;RETURN CPOPJ
CVTBIN: PUSH P,WD+1
TDZ WD,[XWD -1,707070]
LSHC WD,-3
LSH WD,-3
LSHC WD,-3
LSH WD,-3
LSHC WD,6
POP P,WD+1
POPJ P,
;SUBROUTINE TO GET A SIXBIT WORD
;RETURNS WORD IN WD, TERMINATOR IN CH, MASK IN T1
SUBTTL SIXBIT WORD ROUTINE (GETWRD)
GETWRD: SETZB T1,WD ;CLEAR RESULTS
GETWR1: PUSHJ P,GETCHA ;GET NEXT CHARACTER
CAIL CH,"A" ;SEE IF ALPHA
CAILE CH,"Z"+40 ; ..
JRST GETWR2 ;NO--EXIT
CAILE CH,"Z"
CAIL CH,"A"+40
SKIPA
JRST GETWR2 ;NO--EXIT
TRZ CH,40 ;FORCE UPPER CASE
TLOE T1,(77B5) ;MASK NEXT CHAR ON
JRST GETWR1 ;LOOP
ROT T1,6 ;POSITION MASK
LSH WD,6 ;POSITION WORD
IORI WD,-40(CH) ;INCLUDE NEXT CHAR
JRST GETWR1 ;LOOP FOR MORE
GETWR2: CAIE CH," " ;TAB?
CAIN CH," " ;BLANK SEPARATOR?
JUMPE T1,GETWRD ;YES--IF SPACE OR TAB, SKIP THEM
JUMPE T1,CPOPJ ;RETURN IF NULL
TLNE T1,(77B5) ;SEE IF LEFT ADJUSTED
POPJ P, ;YES--RETURN
LSH T1,6
LSH WD,6
JRST GETWR2
;SUBROUTINE TO GET NEXT CHARACTER
;RETURNS CHARACTER IN CH
SUBTTL CHARACTER ROUTINE (GETCHA)
GETCHA: SKIPE REEAT ;SEE IF REPEATING CHAR
JRST [HRRE CH,REEAT ;REPEAT IT
SETZM REEAT ;ONLY ONCE
POPJ P,] ;RETURN
SETOM CH ;PRESET EOF
TXNE F,F.EOF ;SEE IF EOF ALREADY
POPJ P, ;YES--RETURN
MOVEI CH,.CHLFD ;PRESET EOL
TXNE F,F.ECMD ;SEE IF END ALREADY
POPJ P, ;RETURN IF SO
SKIPE CH,GETCH ;SEE IF INPUT ROUTINE
PUSHJ P,(CH) ;YES--GO READ
TXOA F,F.ECMD ;END OF LINE--SET FLAG
POPJ P, ;ELSE, RETURN
MOVEI CH,0 ;CLEAR CH IF END
POPJ P, ;RETURN
SUBTTL SUBROUTINE TO READ FROM COMMAND TTY
;SKIP RETURNS WITH VALUE IN CH
;NON-SKIPS IF END OF LINE (BREAK)
TTYIN: GETLIN ME, ;GET CURRENT LINE
TLNE ME,-1 ;IF DETACHED, ALL DONE
INCHSL CH ;GET CHARACTER
JRST TTYI.2 ;ALL DONE IF BUFFER EMPTY
JUMPE CH,TTYIN ;IGNORE IF NULL
CAIE CH,.CHCRT ;ALSO IF C.RET.
CAIN CH,.CHDEL ; OR NULL
JRST TTYIN ; IGNORE
CAIE CH,"!" ;SEE IF COMMENT
CAIN CH,";" ; OR OTHER FORM
JRST TTYIND ;YES--GO DISCARD LINE
TTYI.1: CAIE CH,.CHBEL ;IF BELL
CAIN CH,.CHESC ; OR ESCAPE,
JRST TTYI.2 ;IT IS ALL DONE
CAIL CH,.CHLFD ;IF LESS THAN LINE FEED
CAILE CH,.CHFFD ; OR GREATER THAN FORM FEED
JRST CPOPJ1 ; THEN OK
TTYI.2: TXZ F,F.RTTY ;INDICATE SUCCESSFUL REEATING
POPJ P, ;ELSE, ALL DONE
TTYIND: INCHSL CH ;GET CHARACTER TO DISCARD
JRST TTYI.2 ;RETURN IF DONE
PUSHJ P,TTYI.1 ;ANALYZE RESULT
POPJ P, ;RETURN IF EOL
JRST TTYIND ;LOOP UNTIL DONE
SUBTTL COMMAND LINE PROCESSOR
; SUBROUTINE TO INPUT FROM FILE DISCARDING
; COMMENTS AND HANDLING CONTINUATIONS
FILINC: SKIPE CH,FILICH ;SEE IF LEFT OVER CHARACTER
JRST FILI.1 ;YES--REUSE IT
PUSHJ P,FILI.3 ;NO--GET NEXT FROM FILE
POPJ P, ;AT END, RETURN
FILI.1: SETZM FILICH ;CLEAR LEFT OVERS
CAIE CH,"-" ;SEE IF CONTINUATION
JRST CPOPJ1 ;NO--GOOD RETURN
FILI.2: PUSHJ P,FILI.3 ;YES--SKIP ON
JRST FILINC ;IF END, GET CONTINUATION
CAIE CH," " ;IGNORE TRAILING
CAIN CH," " ; SPACES AND TABS
JRST FILI.2 ;LOOP
MOVEM CH,FILICH ;NOT EOL, MUST BE REAL -
MOVEI CH,"-" ;RETURN IT
JRST CPOPJ1 ;SAVING NEXT CHAR FOR LATER ON
;SUBROUTINE TO STRIP COMMENTS
FILI.3: PUSHJ P,FILIN ;GET NEXT CHAR
POPJ P, ;IF EOL, INDICATE THAT
CAIE CH,"!" ;ELSE SEE IF COMMENT
CAIN CH,";" ; OR OLD FORM
SKIPA ;YES
JRST CPOPJ1 ;NO--GOOD RETURN
FILI.4: PUSHJ P,FILIN ;SKIP REST OF LINE
POPJ P, ;GIVE EOL RETURN
JRST FILI.4 ;LOOP
SUBTTL SUBROUTINE TO TYPE CONTENTS OF FILE
TYPFIL: TXO F,F.TSOL ;INDICATE NOT AT START OF LINE
TXZ F,F.ECMD!F.EOF ;INDICATE NOT AT EOF
TYPF.1: PUSHJ P,FILIN ;GET NEXT CHARACTER
JUMPL CH,TYPF.2 ;RETURN AT EOF
CAIN CH,.CHLFD ;IF LINE FEED,
TXZA F,F.TSOL ;AT EOL, CLEAR LINE FULL FLAG
TXOA F,F.TSOL ;NOT EOL, INDICATE SOMETHING TYPED
TTYOUT .CHCRT ; OUTPUT C.RET.
TTYOUT (CH) ;OUTPUT CHARACTER
JRST TYPF.1 ;LOOP UNTIL DONE
TYPF.2: TXZE F,F.TSOL ;SEE IF ANYTHING ON THIS LINE
TTYSTR CRLFM
POPJ P, ;NOW RETURN
;SUBROUTINE TO LOOKUP A FILE (MAYBE IN HISEG)
;CALL WITH:
; T1 THRU T4 SET TO 4-WORD LOOKUP BLOCK
; T5 THRU T7 SET TO OPEN BLOCK
; PUSHJ P,HILOOK
; RETURN HERE IF FILE NOT FOUND
; RETURN HERE IF FILE EXISTS (LOWPTR SET TO BYTE PTR OR 0)
HILOOK: TXNN F,F.ANSW ;IS THIS A FORCED COMMAND?
JRST HILK.7 ;NO--DO THE SLOW THING
PUSHJ P,HIFIND ;IS THIS IN THE HISEG TABLES?
JRST HILK.2 ;NO--GO MEMORIZE THE FILE
HILK.1: SKIPN T1,HS$PTR(I) ;DOES THE FILE EXIST?
POPJ P,0 ;NO--GIVE NON-SKIP RETURN
MOVEM T1,LOWPTR ;REMEMBER BYTE POINTER TO STRING
JRST CPOPJ1 ;GIVE GOOD RETURN
;HERE TO REMEMBER A FILE
HILK.2: PUSHJ P,HILOCK ;INTERLOCK THE HISEG
JRST HILK.7 ;GIVE UP IF CAN'T LOCK
PUSHJ P,HIFIND ;GO FIND THE FILE IN THE HISEG TABLE
; ON THE CHANCE THAT IT SNUCK IT.
SKIPA ;NO--THAT IS WHAT I THOUGHT
JRST HILK.1 ;YES--IT HAS SNUCK IT
MOVE I,JOBN ;GET OUR JOB NUMBER
CAME I,LOKJOB ;DO WE OWN THE INTERLOCK
AOS ITLCNT ;NO, COUNT IT BUT TRY TO CONTINUE
MOVSI I,-N$HSGF ;MAKE AN AOBJN POINTER
HILK.3: SKIPE HS$DEV(I) ;IS THIS SLOT FREE?
AOBJN I,.-1 ;NO--KEEP LOOKING
JUMPGE I,HILK.7 ;TABLE FULL?
PUSH P,T6 ;REMEMBER DEVICE, BUT NOT SO THAT HIFIND
;FINDS IT BEFORE FILE ACTUALLY GETS IN
;(PUT IT IN HS$DEV(I) ON COMPLETION)
SETOM HS$DEV(I) ;RESERVE THIS SLOT
SETZM HS$PTR(I) ;ZERO POINTER
MOVEM T1,HS$FIL(I) ;REMEMBER FILE NAME
MOVEM T2,HS$EXT(I) ;REMEMBER EXTENSION
MOVEM T4,HS$PPN(I) ;REMEMBER PPN
OPEN TI,T5 ;OPEN DEVICE
JRST HILK.8 ;FILE NOT FOUND
LOOKUP TI,T1 ;FIND THE FILE
JRST HILK.8 ;FILE NOT FOUND
;HERE TO COPY FILE INTO THE HISEG
HLRZ T2,.JBHRL ;FIND WHERE IN HIGH SEGMENT
TRO T2,400000 ;PUT IN HIGH-SEG BIT
MOVE T1,HIPTR ;GET POINTER TO STRING
TRNN T1,-1 ;IF NOT SET...
HRRI T1,1(T2) ;...GET FIRST FREE IN HIGH SEG
MOVEM T1,HIPTR ;INITIALIZE IT
MOVEM T1,HS$PTR(I) ;REMEMBER FOR THE FUTURE
TXZ F,F.ECMD!F.EOF ;FLAG NOT AT EOF
HILK.4: HRRZ T1,HIPTR ;GET POINTER TO STRING
ADDI T1,10 ;AVOID USUAL END EFFECTS
HRRZ T2,.JBHRL ;GET SIZE OF HISEG
CAMG T1,T2 ;WILL WE NEED MORE CORE
JRST HILK.5 ;NO--KEEP GOING
HRLZ T1,T1 ;DO A CORE UUO FOR HISEG
CORE T1, ; ..
JRST [AOS CORCNT ;COUNT THE FAILURE FOR DEBUGGING
SETZM HS$DEV(I);FORGET THE FILE
SETZM HS$PTR(I);AND THE POINTER
POP P,T6
SETZM LOWPTR ;FILE NOT FOUND
JRST CPOPJ1] ;BUT STILL SET UP
HILK.5: PUSHJ P,FILIN ;GET A BYTE
JUMPL CH,HILK.6 ;EOF?
IDPB CH,HIPTR ;STORE THE BYTE IN THE HISEG
JRST HILK.4 ;KEEP LOOKING
HILK.6: SETZM CH ;FLAG END OF FILE
IDPB CH,HIPTR ; ..
IDPB CH,HIPTR ; ..
HILK.8: POP P,HS$DEV(I) ;NOW, REMEMBER DEVICE IN TABLE
JRST HILK.1 ;RETURN TO STORE POINTERS
;HERE IF USER IS LOGGED IN -- JUST DO THE LOOKUPS
HILK.7: SETZM LOWPTR ;MAKE SURE WE READ FILE
OPEN TI,T5 ;OPEN THE DEVICE
POPJ P,0 ;FILE NOT FOUND
LOOKUP TI,T1 ;LOOK FOR THE FILE
POPJ P,0 ;FILE NOT FOUND
JRST CPOPJ1 ;FILE SETUP
;SUBROUTINE TO FIND A FILE IN HISEG TBALES
;CALL WITH:
; T1 = FILE NAME
; T2 = EXTENSION
; T4 = PPN
; T6 = DEVICE
; PUSHJ P,HIFIND
; HERE IF NOT IN TABLE
; HERE IF IN TABLE (INDEX IN I)
HIFIND: MOVSI I,-N$HSGF ;AOBJN PTR
HFND.1: CAME T6,HS$DEV(I) ;RIGHT DEVICE
JRST HFND.2 ;NO.
CAME T1,HS$FIL(I) ;RIGHT FILE
JRST HFND.2 ;NO.
CAME T2,HS$EXT(I) ;RIGHT EXTENSION
JRST HFND.2 ;NO
CAMN T4,HS$PPN(I) ;RIGHT PPN
JRST CPOPJ1 ;YES--WE WON
HFND.2: AOBJN I,HFND.1 ;LOOP OVER WHOLE TABLE
POPJ P,0 ;NOT THERE
;SUBROUTINE TO INTERLOCK THE HISEG
;CALL WITH:
; PUSHJ P,HILOCK
; ERROR RETURN IF CAN'T GET HISEG
; RETURN HERE
;NOTE: HISEG IS RELEASED ON POPJ
;
HILOCK: MOVE T8,[[XWD 4,INTLOC
XWD 0,ER.ICC!ER.OFL
0
0],,INTBLK]
BLT T8,INTBLK+3
MOVEI T8,INTBLK ; POINT TO TRAP BLOCK
MOVEM T8,.JBINT ; SET FOR TRAPPING!
TR.SET: MOVEI T8,0 ;CLEAR USER WRITE PROTECT
SETUWP T8, ; ..
JRST [SETZM NOINT
POPJ P,0]
SETOM NOINT ; NOT INTERRUPTABLE
AOSN LOCKWD ;GET THE INTERLOCK
JRST HLCK.2 ;IF THE RESULT IS ZERO WE WON
SETZM NOINT ;DIDN'T GET INTERLOCK, MAKE
; INTERRUPTABLE AGAIN
HLCK.1: MOVE T8,MYBIT ;BIT SAYING WE ARE WAITING FOR THE INTERLOCK
IORM T8,@MYWRD ;LIGHT FOR OWNER TO SEE
MOVEI T8,^D15000 ;SLEEP FOR 15 SECONDS
HIBER T8, ;
JRST [MOVEI T8,10 ;SLEEP 8 SECONDS
SLEEP T8, ;SLEEP IF HIBER NOT IMPLEMENTED
JRST .+1] ;CONTINUE
MOVE T8,MYBIT ;GET BIT AGAIN
ANDCAM T8,@MYWRD ;NOT ACTUALLY WAITING ANYMORE
PUSHJ P,HIFIND ;SEE IF THE FILE IS IN CORE YET
CAIA ;NO, MUST WAIT FOR IT
JRST UNLK.4 ;RETURN WITHOUT INTERLOCK
SETOM NOINT ;LOCK OUT INTS.
AOSN LOCKWD ;OPEN YET??
JRST HLCK.2 ;YES. PROCEED
SETZM NOINT ;STILL LOCKED. BETTER INVESTIGATE THIS...
HLCK.5: PUSH P,LOKJOB ;SAVE A COPY FOR CHECKING
PUSH P,LOKTTY ;GET HIM TOO
HRLZ T8,-1(P) ;POINT TO INTERLOCKER'S JBTSTS
GETTAB T8, ;GET IT
JRST FORCE ;??? FORCE THE LOCK
TLC T8,440000 ;RUN+JNA
TLCE T8,440000 ;BOTH ON?
JRST FORCE ;NO, SOMETHING WRONG
HRLZ T8,-1(P) ;SET UP JOB # AGAIN
HRRI T8,.GTPRG ;LOOK FOR PROGRAM NAME
GETTAB T8, ;GET IT
JRST FORCE ;TOO BAD
CAME T8,['INITIA'] ;RIGHT GUY?
JRST FORCE ;NO, TOO BAD
MOVE T8,(P) ;GET OWNER'S TTY UDX
DEVTYP T8, ;LOOK AT TTY'S PROPERTIES
JRST FORCE ;TOO BAD
LDB T8,[POINTR(T8,TY.JOB)] ;GET JOB # USING IT
CAME T8,-1(P) ;RIGHT GUY?
JRST FORCE ;NO, GOT HIM!!
SUB P,[2,,2] ;RESTORE THE PDL
JRST HLCK.1 ;GOOD LOCK, RETURN
HLCK.2: POP P,T8 ;GET RETURN PC
PUSH P,JOBN ;GET OUR JOB #
POP P,LOKJOB ;STORE FOR OTHERS
PUSH P,TERNUM ;AND OUR LINE
POP P,LOKTTY ;SAVE IT AWAY
PUSHJ P,1(T8) ;SKIP CALL COROUTINE
UNLOCK: SOS (P) ;INDICATE FAILURE
MOVE T8,JOBN ;GET OUR JOB NUMBER
CAME T8,LOKJOB ;WE OWN THE INTERLOCK?
JRST UNLK.4 ;NO
MOVE T8,TERNUM ;GET OUR TTY NUMBER
CAME T8,LOKTTY ;WE OWN IT?
JRST UNLK.4 ;NO
SETZM LOKJOB ;CLEAR OWNER
SETZM LOKTTY ;AND OWNER'S TTY
SETOM LOCKWD ;RESET INTERLOCK
PUSH P,T1 ;SAVE A FEW ACS
PUSH P,T2 ;...
PUSH P,T3 ;...
MOVSI T1,-JBWATL ;NUMBER OFF ENTRIES IN JOBWAT TABLE
SKIPN T2,JOBWAT(T1) ;ANYBODY WAITING HERE
AOBJN T1,.-1 ;NO, LOOK SOME MORE
JUMPGE T1,UNLK.1 ;NOBODY WAITING FOR THE INTERLOCK
JFFO T2,.+1 ;GET WAITERS BIT
MOVEI T2,(T1) ;GET THE WORD NUMBER
IMULI T2,^D36 ;TO A JOB NUMBER
ADDI T2,(T3) ;...
WAKE T2, ;WAKE UP THE JOB
JFCL ;OH WELL
MOVSI T2,(1B0) ;FIGURE OUT THE BIT TO CLEAR
MOVNS T3 ;...
LSH T2,(T3) ;POSITION IT
ANDCAM T2,JOBWAT(T1) ;SO OTHER INITIAS DONT TRIP OVER A STALE JOB
UNLK.1: POP P,T3 ;RESTORE
POP P,T2 ;...
POP P,T1 ;...
UNLK.4: MOVEI T8,1 ;GO AND WRITE PROTECT
SETUWP T8, ; THE HISEGMENT AGAIN
JFCL
SETZM .JBINT ; TURN OFF TRAPPING
SETZM NOINT ; CLEAR NO INTERRUPT WORD
JRST CPOPJ1 ;GIVE SKIP RETURN
;HERE TO FORCE THE LOCK
FORCE: AOS FRCTRY ;COUNT ATTEMPTS TO FORCE THE LOCK
MOVE T8,LOKJOB ;GET CURRENT OWNER OF LOCK
CAME T8,-1(P) ;SAME AS WE CHECKED?
JRST FORCE1 ;NO
MOVE T8,LOKTTY ;GET TTY OF OWNER
CAME T8,0(P) ;SAME AS WE CHECKED?
JRST FORCE1 ;NO
SETZM LOKJOB ;NO OWNER
SETZM LOKTTY ; OR TTY
SETOM LOCKWD ;GIVE UP INTERLOCK
AOS FRCCNT ;COUNT NUMBER OF ACTUAL FORCES
SUB P,[2,,2] ;RESTORE PDL
JRST HLCK.1 ;RE-JOIN THE COMPETITION
FORCE1: SUB P,[2,,2] ;RESTORE THE PDL
JRST HLCK.5 ;CHECK AGAIN
; HERE TO PROCESS CONTROL-C INTERCEPT
INTLOC: MOVEM T1,TEMP1 ; SAVE T1
HLRZ T1,INTBLK+3 ; GET REASON FOR INTERRUPT
CAIN T1,ER.OFL ; DSK OFF LINE?
JRST OFLPRC ; YES, GO PROCESS IT
CAIE T1,ER.ICC ; NO, CONTROL-C INTERRUPT?
HALT ; NO, MY GOD!
SKIPL NOINT ; INTERRUPTABLE?
EXIT ; YES, SO QUIT IF THAT'S WHAT HE WANTS
OUTSTR [ASCIZ /
Interlocked/]
OFLENT: EXCH T1,TEMP1 ; RESTORE T1
PUSH P,INTBLK+2 ; SETUP FOR POPJ RETURN
SETZM INTBLK+2 ; SET FOR ANOTHER TRAP
BADTRP: POPJ P,0 ; RETURN TO SEQUENCE
; HERE ON DSK OFF LINE INTERRUPTS
OFLPRC: MOVEI T1,STRUCO ; GET DESIRED RETURN ADDRESS
MOVEM T1,INTBLK+2 ; AND FUDGE IT
JRST OFLENT ; GO DO THE STANDARD STUFF
SUBTTL SUBROUTINE TO READ FROM FILE
;SKIP RETURNS WITH VALUE IN CH
;NON-SKIPS IF END OF LINE (CH=-1 AT EOF)
FILIN: TXNE F,F.EOF ;SEE IF EOF
JRST FLIN.3 ;YES--REPEAT THAT
ILDB CH,LOWPTR ;GET A BYTE FROM HISEG
JUMPN CH,FLIN.1 ;JUMP IF VALID DATA
SKIPE LOWPTR ;SKIP IF WE NEVER SETUP HISEG
JRST FLIN.3 ;ELSE THIS IS THE EOF MARK
SOSGE IBF+.BFCTR ;COUNT DOWN BYTES
JRST FLIN.2 ;EMPTY--GET NEXT BUFFER
IBP IBF+.BFPTR ;INCREMENT TO NEXT BYTE
TXNE F,F.BIN ;SEE IF BINARY FILE
JRST [LDB CH,IBF+.BFPTR
JRST CPOPJ1] ;IF SO, RETURN WORD
MOVE CH,@IBF+.BFPTR ;GET NEXT WORD
TRNE CH,1 ;SEE IF SEQUENCED
JRST [AOS IBF+.BFPTR ;YES--SKIP 5
MOVNI CH,5 ; MORE CHARS
ADDM CH,IBF+.BFCTR
JRST FILIN] ;AND TRY AGAIN
LDB CH,IBF+.BFPTR ;GET CHARACTER
JUMPE CH,FILIN ;IGNORE NULLS
CAIE CH,.CHCRT ;ALSO C.RET.
CAIN CH,.CHDEL ; AND DELETE
JRST FILIN ;--JUST LOOP FOR NEXT
FLIN.1: CAIL CH,.CHLFD ;IF LESS THAN LINE FEED
CAILE CH,.CHFFD ; OR GT FORM FEED,
JRST CPOPJ1 ; GIVE SKIP RETURN
POPJ P, ;ELSE, GIVE END OF LINE
FLIN.2: IN TI, ;INPUT NEXT BUFFER
JRST FILIN ;LOOP IF OK
STATZ TI,IO.ERR ;SEE IF ERROR BITS
INTERR (IOE,<I/O Error>,<JRST FLIN.3>)
FLIN.3: SETOM CH ;SET FLAG
TXO F,F.EOF ;SET END FLAG
POPJ P, ;RETURN
SUBTTL SUBROUTINES
SUBTTL SUBROUTINE TO LOGIN A JOB
;CALL: T2/ PROJECT,,PROGRAMMER NUMBER
; T4/ "USER" NAME IN SIXBIT
; PUSHJ P,LOGIN$
;RETURNS IF SUCCESSFUL
LOGI12: TXO F,F.PRIV ;FLAG TO GET ALL PRIVILEGES
MOVE T2,FFAPPN ;GET [1,2]
TXNN F,F.REMO ;SEE IF REMOTE OPR
JRST LOGI.1 ;NO--PROCEED
HLRZ T1,NL.ME ;YES--GET STATION NUMBER
HRLI T2,100(T1) ;USE [100+SN,2]
JRST LOGIN$ ;AND GO LOGIN
;HERE IF LOGIN TO [1,2]
LOGI.1: TXNE F,F.LOGI ;SEE IF LOGGED IN
JRST LOGIN$ ;YES--NO SPECIAL TEST
SETOM T3 ;NO--GET MY TTY
GETLCH T3 ; CHARACTERISTICS
TXNE T3,GL.ITY!GL.DSL!GL.REM!GL.RBS ;MAKE SURE LOCAL
JRST KILJOB ;NO--GO EXIT INSTEAD
LOGIN$: TXNN F,F.LOGI ;SEE IF ALREADY LOGGED IN
JRST LOGI.2 ;NO--GO LOG IT IN
TXNN F,F.LOGX ;SEE IF OK TO BE DIFFERENT
CAMN T2,MYPPN ;NO--SEE IF DIFFERENT
POPJ P, ;NO--RETURN
JRST KILJOB ;YES--GO EXIT INSTEAD
LOGI.2: MOVSI T1,.STOPP ;CODE TO SET (NO) OPERATOR PRIVS
HRRI T1,.OBNOP ;SET NO OPERATOR PRIVS BY DEFAULT
TXNE F,F.PRIV ;NEED PRIVS?
HRRI T1,.OBSDP ;YES, MAKE THIS JOB A SYSTEM OPR
TXNE F,F.REMO ;ARE WE BECOMING A REMOTE OPR?
HRRI T1,.OBROP ;YES, ONLY GIVE REMOTE OPR PRIVS
SETUUO T1, ;GIVE THE APPROPRIATE PRIV
JFCL ;OH WELL, WE TRIED!
MOVE T1,[-3,,T2] ;SETUP POINTER FOR UUO
TXNN F,F.PRIV ;SEE IF PRIVILEGES NEEDED
TDZA T3,T3 ;NO--CLEAR THEM
MOVSI T3,-1 ;YES--SET ALL DEC PRIVILEGES.
TXNE F,F.REMO ;UNLESS REMOTE OPR
MOVE T3,[JP.NSP] ;WHO ONLY NEEDS UNSPOOLING
MOVEM T2,REQPPN ;SAVE REQUESTED PPN
LOGIN T1, ;TRY
TTYSTR [ASCIZ /.LOGIN /]
HLRZ T1,REQPPN ;GET PROJECT
PUSHJ P,TYPOCT ;TYPE IN OCTAL
TTYOUT "," ;SEPARATE
HRRZ T1,REQPPN ;GET PROGRAMMER
PUSHJ P,TYPOCT ;TYPE IN OCTAL
TTYSTR CRLFM
;HERE TO LOCATE USER TO NODE SPECIFIED IN /LOCATE:NN OR
;IN THE ABSENCE OF A LOCATE COMMAND, TO THE CENTRAL SITE
;IF HE IS BEING LOGGED IN ON A NODE WITHOUT AN LPT
LOCAT$: SKIPGE T1,LOCAT ;DID USER SPECIFY LOCATE?
JRST LOCAT0 ;YES--LOCATE HIM THERE
LOCAT2: MOVEI T1,.GTLOC ;GETTAB FOR NODE # OF CENTRAL SITE
GETTAB T1, ;GET CENTRAL SITE NODE NUMBER
JRST NOLOC ;MONITOR MUST NOT SUPPORT NETWORKS
HRROI T2,.GTLOC ;THIS JOB'S LOCATION
GETTAB T2, ;GET THAT
JRST NOLOC ;NO NETWORK SOFTWARE
CAMN T1,T2 ;ALREADY LOCATED AT CENTRAL SITE?
JRST NOLOC ;YES, NO POTENTIAL PROBLEMS THEN
MOVEM T2,NODLOC ;STORE THIS JOB'S LOCATION IN NODE BLOCK
MOVEI T2,4 ;LENGTH OF THE ARGUMENT BLOCK
MOVEM T2,NODLEN ;STORE IN NODE UUO ARGUMENT BLOCK
MOVEI T2,.TYLPT ;DEVICE TYPE
MOVEM T2,NODDEV ;STORE THAT IN THE ARGUMENT BLOCK
MOVE T2,[.NDRCI,,NODBLK] ;NODE UUO ARGUMENT
NODE. T2, ;GET NODE CONFIGURATION INFORMATION
JRST NOLOC ;NOT IMPLEMENTED?
HLRZ T2,NODDEV ;NUMBER OF LPT'S AT THIS NODE
JUMPN T2,NOLOC ;JUMP IF THERE ARE SOME
JRST LOCAT1 ;NO LPT'S AT THIS NODE,
;LOCATE JOB AT CENTRAL SITE
LOCAT0: HRRZS T1 ;CLEAR LH
CAIG T1,^D77 ;NODE NUMBER > 77?
JRST LOCAT3 ;NO--CONTINUE
INTWRN (NTL,NODE NUMBER TOO LARGE)
JRST LOCAT2 ;CANNOT LOCATE HIM, SAME AS IF NO SWITCH
LOCAT3: IDIVI T1,^D10 ;CONVERT NODE TO OCTAL
LSH T1,3 ;...
ADD T1,T2 ;...
LOCAT1: LOCATE T1, ;LOCATE USER
OUTSTR [ASCIZ /%INTLUF LOCATE UUO failed.
/]
;HERE TO FIND THE PPN IN SYS:AUXACC.SYS IF POSSIBLE
;IF ANY PROBLEMS, PROCEED ONWARD AND DUPLICATE THE SYS S/L
NOLOC: MOVE T1,[UU.PHS!.IOBIN] ;BINARY MODE, PHYSICAL ONLY.
MOVSI T2,'SYS' ;SYS:
MOVEI T3,IBF ;INPUT BUFFER HEADER
OPEN TI,T1 ;GET DEVICE
JRST STRN.6 ;GIVE UP IF UNAVAILABLE!
MOVE T1,['AUXACC'] ;FILE
MOVSI T2,'SYS' ; NAMED
SETZB T3,T4 ; SYS:AUXACC.SYS[-]
LOOKUP TI,T1 ;GET IT
JRST STRN.6 ;GIVE UP IF MISSING
TXO F,F.BIN ;TELL INPUTTER BINARY
TXZ F,F.EOF ;CLEAR EOF FLAG
PUSHJ P,FILIN ;GET FIRST WORD
JRST STRN.6 ;IF NULL FILE, GIVE UP
JUMPN CH,STRN.6 ;ONLY FORMAT V.0 WORKS
;BACK HERE TO LOOP OVER PPNS IN FILE
STRN.1: PUSHJ P,FILIN ;GET INDICATOR
JRST STRN.6 ;OUR PPN MISSING!
AOJN CH,STRN.6 ;-1 IS FLAG
PUSHJ P,FILIN ;GET SIZE
JRST STRN.6 ;BAD FILE
SOSGE T6,CH ;GET COUNT LESS PPN
JRST STRN.6 ;ERROR IF NEGATIVE SIZE
PUSHJ P,FILIN ;GET PPN
JRST STRN.6 ;BAD FILE
MOVE T1,CH ;GET PPN
XOR T1,REQPPN ;COMPARE TO DESIRED
TRC CH,-1 ;SEE IF FILE IS WILD
TRNN CH,-1 ;TEST WILD
TRZ T1,-1 ;YES--PROGRAMMER ALWAYS MATCHES
JUMPE T1,STRN.3 ;JUMP IF MATCH!!!
;LOOP TO SKIP ENTRY WE WANT TO IGNORE
STRN.2: PUSHJ P,FILIN ;DISCARD
JRST STRN.6 ;(BAD FILE)
SOJG T6,STRN.2 ;UNTIL COUNT EXHAUSTED
JRST STRN.1 ;THEN TRY NEXT PPN
;HERE WHEN ENTRY MATCHES
STRN.3: IDIVI T6,5 ;GET STR COUNT
JUMPN T7,STRN.6 ;ERROR IF NOT MULTIPLE OF 5
MOVEI T7,1 ;START INDEX INTO ANSWER
;LOOP OVER STRS FOR THIS PPN
STRN.4: JUMPE T6,STRN.5 ;EXIT WHEN DONE
CAIGE T7,ENDSTR-STRBLK ;SEE IF OVERFLOW
PUSHJ P,FILIN ;NO--GET NEXT STR
JRST STRN.5 ;EXIT IF EOF (EVEN THO ERROR)
MOVEM CH,STRBLK(T7) ;SAVE STR NAME
SETZM STRBLK+1(T7) ;CLEAR PPN OF THIS STR
PUSHJ P,FILIN ;GET/IGNORE NEXT WORD
JRST STRN.5 ;(ERROR)
PUSHJ P,FILIN ;GET/IGNORE NEXT WORD
JRST STRN.5 ;(ERROR)
PUSHJ P,FILIN ;GET/IGNORE NEXT WORD
JRST STRN.5 ;(ERROR)
PUSHJ P,FILIN ;GET STATUS BIT WORD
JRST STRN.5 ;(ERROR)
MOVEM CH,STRBLK+2(T7) ;SAVE BITS
MOVE T1,[1,,T2] ;POINTER FOR DSKCHR
MOVE T2,STRBLK(T7) ;GET STR NAME
DSKCHR T1, ;GET ITS STATUS
SETOM T1 ;ERROR
TXC T1,<.DCTFS_<ALIGN.(DC.TYP)>>
TXNN T1,<DC.SAF!DC.NNA!DC.TYP> ;MUST BE MULTI-ACCESS
; ,ACCESSIBLE, AND A FILE-STRUCTURE
ADDI T7,3 ;YES--ADVANCE ANSWER POINTER
SOJG T6,STRN.4 ;LOOP OVER ALL STRS THIS PPN
;HERE WHEN A LIST HAS BEEN BUILT IN CORE
STRN.5: RELEAS TI, ;RELEASE INPUT CHANNEL
TXZ F,F.BIN!F.EOF ;CLEAR BINARY INDICATOR AND EOF
MOVE T1,T7 ;POSITION COUNTER
JRST STRN.8 ;PROCEED TO TELL MONITOR
;HERE WHEN CAN'T USE SYS:AUXACC.SYS FOR ANY REASON
STRN.6: RELEAS TI, ;RELEASE INPUT CHANNEL
TXZ F,F.BIN!F.EOF ;CLEAR BINARY INDICATOR AND EOF
;HERE TO COPY THE SYS: SEARCH LIST
SETZM GETSTR ;SET GOBSTR ARGS TO JOB 0
MOVE T1,SYSPPN ;GET [1,4]
MOVEM T1,GETSTR+1 ;SET SYS PPN AS PPN IN QUESTION
SETOM GETSTR+2 ;SET TO START OF LIST
MOVNI T1,2 ;PRESET ANSWER BLOCK
STRN.7: MOVE T3,[5,,GETSTR] ;GET POINTER FOR GOBSTR
ADDI T1,3 ;ADVANCE ANSWER POINTER
CAIGE T1,ENDSTR-STRBLK ;SEE IF FULL
GOBSTR T3, ;NO--GET NEXT STR
JRST STRN.8 ;CAN'T--GO SEE IF CAN SET IT UP
SKIPE T3,GETSTR+2 ;GET STR NAME
CAMN T3,[-1] ;CHECK FOR FENCE
JRST STRN.8 ;YES--GO SEE IF CAN SET IT UP
MOVEM T3,STRBLK(T1) ;OK--STORE STR
MOVE T3,GETSTR+3 ;GET PPN JUST IN CASE IT EVER COUNTS
MOVEM T3,STRBLK+1(T1) ;STORE IN STRUUO BLOCK
MOVE T3,GETSTR+4 ;GET STATUS BITS
MOVEM T3,STRBLK+2(T1) ;STORE IN BLOCK
JRST STRN.7 ;LOOP BACK FOR MORE
STRN.8: SETZM STRBLK ;SET FUNCTION FOR STRUUO
MOVE T3,['DSKB '] ;SET FOR DSKB JUST IN CASE NONE
SKIPN STRBLK+1 ;SEE IF ANY STR SETUP
MOVEM T3,STRBLK+1 ;NO--FILL IN DEFAULT
HRLZI T1,(T1) ;GET LENGTH OF LIST
TLNN T1,-2 ;SEE IF ANYTHING THERE
HRLZI T1,4 ;NO--SET FOR AT LEAST ONE STR
HRRI T1,STRBLK ;POINT TO BLOCK
STRUUO T1, ;TELL MONITOR
JFCL ;WELL--NICE TRY
MOVE T1,[.STUVM,,[1000,,1000]] ;SET PHYS & VIRT LIMITS
SETUUO T1, ; TO ALLOW JOB TO GO VIRTUAL
JFCL ;IGNORE ERROR
POPJ P, ;RETURN IF SUCCESSFUL
SUBTTL SUBROUTINE TO TYPE SIGN ON MESSAGE
;CALL: PUSHJ P,SIGNON
;USES ALL TEMPS
SIGNON: MOVE T1,FLNAME ;SEE IF USER
TRNN T1,1 ; SAID NONAME
TXNE F,F.NOHD ;SEE IF HEADER SUPPRESSED
POPJ P, ;YES--RETURN QUICKLY
TTYSTR CRLFM
MOVSI T7,-5 ;SETUP POINTER TO READ
MOVX T6,%CNFG0 ;SYSTEM HEADER LINE
SIGN.1: MOVE T5,T6 ;MAKE POINTER
GETTAB T5, ;GET THE HEADER
MOVEI T5,0 ;DON'T REALLY CARE IF THIS FAILS
MOVEM T5,T1(T7) ;STORE IN ARRAY
ADD T6,[1,,0] ;ADVANCE INDEX
AOBJN T7,SIGN.1 ;LOOP FOR TITLE
MOVEI T6,0 ;GUARANTEE CLEAN END
TTYSTR T1 ;TYPE HEADER
TTYOUT " " ;SEND A SPACE
MSTIME T4, ;GET TIME OF DAY
IDIVI T4,^D1000 ;CONVERT TO SECONDS
IDIVI T4,^D3600 ;GET HOURS
PUSHJ P,TYPD2 ;TYPE HOURS
MOVE T4,T5 ;RE-POSITION REMAINDER
IDIVI T4,^D60 ;GET MINUTES
PUSHJ P,TYPD2C ;TYPE COLON, MINUTES
MOVE T4,T5 ;GET SECONDS
PUSHJ P,TYPD2C ;TYPE COLON, SECONDS
TTYOUT " " ;SEND A SPACE
MOVE T2,ME ;GET TTY NAME
PUSHJ P,TYPSIX ;TYPE IT
TTYSTR [ASCIZ / system /]
MOVE T1,[%CCSER] ;GET CPU0 SERIAL NUMBER
GETTAB T1, ;...
MOVE T1,APRSN ;USE DEFAULT
MOVNI T7,6*2 ;PRESET FOR 6 CPU'S
SIGN.2: PUSHJ P,TYPDEC ;LIST IN DECIMAL
AOS T1,T7 ;TRY NEXT CPU
ADD T1,[%CCSER+6*2+1] ;GET APR S/N
GETTAB T1, ; FROM MONITOR
MOVEI T1,0 ;STOP IF NO CPU
JUMPLE T1,SIGN.3 ;END LOOP IF JUNK
TTYOUT "/" ;SEPARATE
AOJL T7,SIGN.2 ;LOOP UNTIL DONE
SIGN.3: TTYSTR [ASCIZ /
Connected to Node /]
MOVE T2,MYNNAM ; GET SIXBIT NODE NAME
PUSHJ P,TYPSIX ; TYPE NODE NAME
TTYSTR [ASCIZ /(/]
HLRZ T1,NL.ME ; GET NODE NUMBER
PUSHJ P,TYPOCT
TTYSTR [ASCIZ /) Line # /]
HRRZ T1,NL.ME
PUSHJ P,TYPOCT
SIGN3A: TTYSTR CRLFM
TXNN F,F.LOGI ;SEE IF LOGGED IN
POPJ P, ;NO--ALL DONE
TTYSTR [ASCIZ /Job /]
MOVE T1,JOBN ;GET JOB NUMBER
PUSHJ P,TYPDEC ;TYPE IN DECIMAL
HRROI T2,.GTNM1 ;GET USER'S NAME
GETTAB T2, ; FROM MONITOR
JRST SIGN.4 ;IGNORE IF UNAVAILABLE
JUMPE T2,SIGN.4 ;OR MISSING
TTYSTR [ASCIZ / User /]
PUSHJ P,TYPSX6 ;TYPE SIX CHARACTERS
HRROI T2,.GTNM2 ;GET 2ND HALF OF NAME
GETTAB T2, ; FROM MONITOR
MOVEI T2,0 ;(IMPOSSIBLE)
PUSHJ P,TYPSIX ;TYPE IN SIXBIT AND RETURN
TTYSTR [ASCIZ / [/] ;THEN ISSUE PPN
HLRZ T1,MYPPN ;GET MY PROJECT
PUSHJ P,TYPOCT ;ISSUE IN OCTAL
TTYOUT "," ;SEPARATE WITH COMMA
HRRZ T1,MYPPN ;GET MY PROGRAMMER
PUSHJ P,TYPOCT ;ISSUE IN OCTAL
TTYOUT "]" ;END PPN
SIGN.4: TTYSTR 1,CRLFM
SUBTTL SUBROUTINE TO TYPE KSYS MESSAGE
;CALL: PUSHJ P,TYKSYS
;USES ALL TEMPS
TYKSYS: MOVX T1,%NSKTM ;GET TIME TO GO
GETTAB T1, ; FROM MONITOR
POPJ P, ;RETURN IF NOT IMPLEMENTED
SKIPE T1 ;SEE IF SET
CAIL T1,^D24*^D60 ; AND LESS THAN 24 HRS.
POPJ P, ;NO--RETURN
JUMPL T1,TYKS.2 ;SEE IF ALREADY DOWN
TTYSTR [ASCIZ /Timesharing will cease in /]
PUSH P,T1 ;SAVE TIME
IDIVI T1,^D60 ;GET HOURS
JUMPE T1,TYKS.1 ;JUMP IF LT 1 HOUR
PUSHJ P,TYPDEC ;TYPE IN DECIMAL
TTYSTR [ASCIZ / hours /]
TYKS.1: MOVE T1,(P) ;GET TIME AGAIN
IDIVI T1,^D60 ;GET MINUTES
MOVE T1,T2 ; INTO RIGHT AC
PUSHJ P,TYPDEC ;TYPE IN DECIMAL
TTYSTR [ASCIZ / minutes, at /]
MSTIME T1, ;GET TIME OF DAY
IDIVI T1,^D60000 ;GET MINUTES OF DAY
POP P,T2 ;RESTORE KSYS TIMER
ADD T1,T2 ;FIND TIME OF DAY
CAIL T1,^D24*^D60 ;SEE IF TOMORROW
SUBI T1,^D24*^D60 ;YES--CORRECT TIME
IDIVI T1,^D60 ;GET HOURS
PUSH P,T2 ;SAVE MINUTES
MOVE T4,T1 ;POSITION HOURS
PUSHJ P,TYPD2 ;TYPE HOURS AS TWO DIGITS
POP P,T4 ;RESTORE MINUTES
PUSHJ P,TYPD2C ;TYPE AS :TWO DIGITS
JRST TYKS.3 ;AND FINISH LINE
;HERE IF KSYS TIMER ALREADY RUN OUT
TYKS.2: TTYSTR [ASCIZ /Timesharing is over/]
TYKS.3: TTYSTR 1,[ASCIZ /.
/]
SUBTTL ERROR HANDLERS
;HERE IF LOGICAL INCONSISTENCY IN PROGRAM--NOTE BP=ADDR. OF PROBLEM
E$$BMB: INTERR (BMB,<Bomb out >,<JRST .+1>)
MOVEI T1,(BP) ;GET ADDRESS
SUBI T1,INITIA+1 ;CONVERT TO RELATIVE
PUSHJ P,TYPOCT ;ISSUE IN OCTAL
EBMB.1: OUTSTR CRLFM ;END LINE
SUBI BP,INITIA+1 ;SUBTRACT RELOCATION AND PC INCREMENT
LIGHTS BP, ;FOR DEBUGGING, SEND TO LIGHTS
JRST KILJOB ;GO KILL OFF JOB
SUBTTL TYPEOUT ROUTINES
;SUBROUTINE TO TYPE TWO DECIMAL DIGITS
;WARNING--THIS DOES NOT HANDLE NEGATIVE NUMBERS OR NUMBERS
; GREATER THAN 99.
;CALL: MOVE T4,NUMBER
; PUSHJ P,TYPD2
;USES T1, T2
TYPD2C: TTYOUT ":"
TYPD2: MOVE T1,T4 ;GET NUMBER
IDIVI T1,^D10 ;GET TENS
TTYOUT "0"(T1) ;TYPE IT
TTYOUT 1,"0"(T2) ;TYPE IT AND RETURN
;SUBROUTINE TO TYPE A DECIMAL/OCTAL NUMBER
;CALL: MOVE T1,NUMBER
; PUSHJ P,TYPDEC/OCT
;USES T1,T2,T3
TYPOCT: SKIPA T3,[10] ;SET OCTAL RADIX
TYPDEC: MOVEI T3,^D10 ;SET DECIMAL RADIX
TYPRAD: SKIPGE T1 ;IF NEGATIVE,
TTYOUT "-" ; ISSUE MINUS
TYPR.1: IDIVI T1,(T3) ;GET LOWEST DIGIT
MOVMS T2 ;GET POSITIVE OF REMAINDER
HRLM T2,(P) ;STACK IT
SKIPE T1 ;UNLESS DONE
PUSHJ P,TYPR.1 ; TRY AGAIN
HLRZ T1,(P) ;GET TOP DIGIT
TTYOUT 1,"0"(T1) ;OUTPUT IT AND RETURN
;SUBROUTINE TO TYPE 6 SIXBIT CHARACTERS
;CALL: MOVE T2,WORD
; PUSHJ P,TYPSX6
;USES T1, T2, T3
TYPSX6: MOVEI T3,6 ;SET COUNT
TYPS.1: MOVEI T1,0 ;CLEAR NEXT CHARACTER
LSHC T1,6 ;GET NEXT CHAR
TTYOUT 40(T1) ;TYPE IT
SOJG T3,TYPS.1 ;LOOP UNTIL COUNT DONE
POPJ P, ;THEN RETURN
;SUBROUTINE TO TYPE A SIXBIT WORD
;CALL: MOVE T2,WORD
; PUSHJ P,TYPSIX
;USES T1, T2
TYPSIX: MOVEI T1,0 ;CLEAR NEXT CHAR
LSHC T1,6 ;GET NEXT CHAR
TTYOUT 40(T1) ;TYPE IT
JUMPN T2,TYPSIX ;LOOP UNTIL ALL DONE
POPJ P, ;THEN RETURN
;SUBROUTINE TO TYPE AN ASCII STRING IN IMAGE MODE
;CALL: MOVEI T2,STRING POINTER
; PUSHJ P,SNDIMG
; RETURN
;USES T2, T6, T7
SNDIMG: HRLI T2,(POINT 7,) ;TURN INTO BYTE POINTER
SNDI.1: ILDB T7,T2 ;GET NEXT CHARACTER
JUMPE T7,CPOPJ ;RETURN IF NULL
;THE FOLLOWING COMES FROM 5.04 UUOCON(PEVEN8)
MOVEI T6,(T7) ;MAKE A COPY OF BYTE
LSH T6,-4 ;FOLD INTO LOW 4 BITS
XORI T6,(T7) ; ..
TRCE T6,14 ;CHECK BITS
TRNN T6,14 ; 32 AND 33
TRC T7,200 ;IF EVEN, COMPLIMENT RESULT
TRCE T6,3 ;CHECK BITS
TRNN T6,3 ; 34 AND 35
TRC T7,200 ;IF EVEN, COMPLEMENT RESULT
IONEOU T7 ;SEND OUT VIA IMAGE MODE
JRST SNDI.1 ;LOOP BACK FOR MORE
;THIS IS THE LUUO HANDLER
;IT SCRATCHES OC AND PRESERVES ALL OTHERS
LUUO: MOVE OC,.JBUUO ;GET UUO
TLNE OC,(Z 1,0) ;AC1 ON IN LUUO
POP P,(P) ;YES, REMOVE CALL
LSH OC,-^D27 ;ISOLATE OPCODE
CAIN OC,1 ;IS IT TTYOUT
JRST $TTOUT ;YES--GO PROCESS IT
;HERE ON A TTYSTR LUUO
MOVSI OC,(POINT 7,) ;SETUP BYTE POINTER
HLLM OC,.JBUUO ; IN LOW CORE
$TTSTR: ILDB OC,.JBUUO ;GET A BYTE
JUMPE OC,CPOPJ ;RETURN ON NULL
PUSHJ P,LUUO.1 ;TYPE IT
JRST $TTSTR ;LOOP OVER STRING
;HERE ON A TTYOUT LUUO
;WARNING--THIS IS IMMEDIATE MODE, UNLIKE OUTCHR
$TTOUT: HRRZ OC,.JBUUO ;GET THE BYTE
LUUO.1: SOSG TTYCNT ;COUNT DOWN SPACE IN BUFFER
PUSHJ P,TTYPBF ;WRITE THE DATA
IDPB OC,TTYPNT ;STORE THE BYTE
AOS CHRSOU ;COUNT CHARACTERS FOR TYPTTY
POPJ P, ;RETURN
;SUBROUTINE TO DUMP THE TTY OUTPUT BUFFER
TTYPBF: OUT TTY, ;DO THE OUTPUT
POPJ P, ;ALL IS OK
STATZ TTY,IO.ERR ;ANY ERRORS?
JRST LOGO1$ ;YES--SEEMS SORT OF BAD
PUSH P,T1 ;SAVE AN AC
PUSH P,[EXP ^D10] ;NUMBER OF MINUTES TO WAIT
TTYP.1: MOVE T1,[HB.RIO+^D6000]
HIBER T1,
JRST LOGO1$ ;MUST WORK
OUT TTY, ;TRY AGAIN
JRST TTYP.2 ;WE ARE DONE
SOSLE (P) ;KEEP WAITING
JRST TTYP.1 ;YES--WAIT
CLRBFO ;NO--BOMB OUT
JRST LOGO1$ ;GO LOGOUT
TTYP.2: POP P,T1
POP P,T1
POPJ P,
SUBTTL GTNTN. ROUTINE
; SUBROUTINE TO GET NODE,,LINE# FOR DEVICE SPECIFIED IN T1 IN T1
GTNTN$: GTNTN. T1,0 ; TRY DIRECTLY
SKIPA ; NOW THE HARD WAY
POPJ P,0 ; RETURN
PUSH P,T1 ; SAVE DEVICE NAME
IONDX. T1,0 ; GET THE LINE # + 200000
SETZ T1,0 ; NICE TRY
TXZ T1,.UXTRM ; CLEAR BIT 1
EXCH T1,(P) ; GET DEVICE AGAIN IN T1
WHERE T1,0 ; GET THE NODE NUMBER
SETZ T1,0 ; NICE TRY
HRLM T1,(P)
POP P,T1
POPJ P,0 ; RETURN
SUBTTL SPECIAL TTY SETUP SEQUENCES
;TERMINET 300--SET TABS AT 4,12,... (4 IS THEN C.RET.POINT)
TRMIMG: BYTE (7)15,12,33,62,177,177,15,40,40,40,33,61,40,40,40,40,40,40,40,40,33,61,40,40,40,40,40,40,40,40,33,61,40,40,40,40,40,40,40,40,33,61,40,40,40,40,40,40,40,40,33,61,40,40,40,40,40,40,40,40,33,61,40,40,40,40,40,40,40,40,33,61,40,40,40,40,40,40,40,40,33,61,40,40,40,40,40,40,40,40,33,61,15,0
SUBTTL STORAGE AREA
;STORAGE AREA
XLIST ;LITERALS
LIT
LIST
CRLFM: ASCIZ /
/
;TABLES SHARED AMONG ALL COPIES OF INITIA
LOCKWD: EXP -1 ;INTERLOCK FOR HISEG
LOKJOB: BLOCK 1 ;JOB # THAT HAS INTERLOCK
LOKTTY: BLOCK 1 ;ABOVE JOB'S TTY LINE
FRCTRY: BLOCK 1 ;NUMBER OF TIMES WE GOT TO FORCE
FRCCNT: BLOCK 1 ;NUMBER OF TIMES THAT WE ACTUALLY FORCED THE LOCK
ITLCNT: BLOCK 1 ;NUMBER OF TIMES WE THOUGHT WE HAD
;THE HIGH-SEG INTERLOCK BUT WE DIDN'T
CORCNT: BLOCK 1 ;NUMBER OF TIMES THE CORE UUO TO
;INCREASE THE HIGH-SEG FAILED
JOBWAT: BLOCK <^D512+^D35>/^D36 ;BIT TABLE FOR JOBS WAITING FOR THE INTERLOCK
JBWATL==.-JOBWAT ;NUMBER OF ENTRIES IN THE TABLE
HIPTR: POINT 7,0 ;BYTE POINTER TO TEXT STORAGE
HS$DEV: BLOCK N$HSGF ;DEVICE NAMES
HS$FIL: BLOCK N$HSGF ;FILE NAMES
HS$EXT: BLOCK N$HSGF ;EXTENSIONS
HS$PPN: BLOCK N$HSGF ;PPN'S
HS$PTR: BLOCK N$HSGF ;BYTE POINTER TO CONTENTS OF
; THE FILE. IF THIS WORD IS 0
; THE FILE DOES NOT EXIST
RELOC
ZER:! ;START OF AREA TO ZERO ON RESTART
PDL: BLOCK L$PDL+1 ;PUSH-DOWN LIST
GETCH: BLOCK 1 ;ADDRESS OF TTY INPUT ROUTINE IF ANY
REEAT: BLOCK 1 ;CHARACTER TO REEAT
FILICH: BLOCK 1 ;REUSABLE CHARACTER IN STRIPPER
JUMPPR: BLOCK 1 ;ADDRESS OF SPECIAL STARTUP ROUTINE
SYSPPN: BLOCK 1 ;PPN OF SYS:
MYPPN: BLOCK 1 ;PPN OF THIS JOB
TERNUM: BLOCK 1 ;INDEX OF THIS TTY
MYNNAM: BLOCK 1 ;SIXBIT NODE NAME
MYNNUM: BLOCK 1 ;SIXBIT NODE NUMBER
JOBN: BLOCK 1 ;OUR JOB NUMBER
MYBIT: BLOCK 1 ;BIT FOR THIS JOB IN JOBWAT TABLE
MYWRD: BLOCK 1 ;ADDRESS OF THE WORD CONTAING THE BIT
MYSPD: BLOCK 1 ;MY RECEIVE SPEED AS DETECTED
FFAPPN: BLOCK 1 ;PPN OF [1,2]
REQPPN: BLOCK 1 ;REQUESTED PPN
; SYMBOLIC LOCATIONS OF THE FORM "NL.???" STORE VALUES IN THE FORM
; XWD NODE,LINE
NL.CTY: BLOCK 1 ; CENTRAL STATION (CTY)
NL.OPR: BLOCK 1 ; CENTRAL OPR
NL.LOP: BLOCK 1 ; OUR LOCAL OPR
NL.ME: BLOCK 1 ; OUR LOCATION
CTYTTY: BLOCK 1 ; SIXBIT TTY NAME FOR CTY
APRSN: BLOCK 1 ;APR SERIAL NUMBER
IBF: BLOCK 3 ;BUFFER HEADER BLOCK
RUNBLK: BLOCK 6 ;RUN UUO PARAMETERS
INTBLK: BLOCK 4 ;INTERCEPT BLOCK
TEMP1: BLOCK 1 ; TEMPORARY STORAGE FOR INTERCEPT
NOINT: BLOCK 1 ; IF NEGATIVE DON'T INTERRUPT
SAVEF: BLOCK 1 ;PLACE TO HOLD F
FLKSYS: BLOCK 1 ;FLAG TO TYPE KSYS TIME
FLNAME: BLOCK 1 ;FLAG NONAME (SUPPRESS HEADER LINE)
FLSET: BLOCK 1 ;FLAG NOSETTTY (SUPRESS TTY SETUP)
FLSTR: BLOCK 1 ;FLAG TO DO STRUCTURE NOTES
FLTEXT: BLOCK 1 ;FLAG TO PRINT TEXT MSG
FLBAT: BLOCK 1 ;FLAG TO DO BATCH SYSTEM TEXT
FLNOTC: BLOCK 1 ;FLAG TO TYPE NOTICE.TXT
FLTTY: BLOCK 1 ;FLAG TO TYPE TTY SETTINGS
DIAL: BLOCK 2 ;NUMBER TO DIAL
LOCAT: BLOCK 1 ; LOCATE USER
NODBLK: ;START OF NODE. UUO ARGUMENT BLOCK
NODLEN: BLOCK 1 ;LENGTH OF NODE UUO ARGUMENT BLOCK
NODLOC: BLOCK 1 ;NODE NUMBER
BLOCK 1 ;RESERVED ARGUMENT
NODDEV: BLOCK 1 ;NUMBER OF DEVICES,,DEVICE TYPE
ELEM: BLOCK 1 ;TTY ELEMENT
LC: BLOCK 1 ;TTY LC
SLAVE: BLOCK 1 ;TTY SLAVE
TAB: BLOCK 1 ;TTY TAB
FORM: BLOCK 1 ;TTY FORM
ECHO: BLOCK 1 ;TTY ECHO
ECHDEF: BLOCK 1 ;TTY DEFER
CRLF: BLOCK 1 ;TTY CRLF
WIDTH: BLOCK 1 ;TTY WIDTH
GAG: BLOCK 1 ;TTY GAG
HDX: BLOCK 1 ;TTY HDX
REM: BLOCK 1 ;TTY REMOTE
DISP: BLOCK 1 ;TTY DISPLAY
FILL: BLOCK 1 ;TTY FILL
TAPE: BLOCK 1 ;TTY TAPE
PAGEON: BLOCK 1 ;TTY PAGE
PAGE: BLOCK 1 ;TTY PAGE:N
BLANK: BLOCK 1 ;TTY BLANK
ALT: BLOCK 1 ;TTY ALT
RCV: BLOCK 1 ;TTY RCVSPEED
XMT: BLOCK 1 ;TTY XMTSPEED
DEBR: BLOCK 1 ;TTY DEBREAK
TIDY: BLOCK 1 ;TTY TIDY
RTCOMP: BLOCK 1 ;TTY RTCOMP
TYPE: BLOCK 1 ;TTY TYPE
LOWPTR: BLOCK 1 ;POINTER TO HISEG TEXT
CHRSOU: BLOCK 1 ;COUNT OF CHARACTERS OUTPUT FOR TYPTTY
TTYOBF: BLOCK 1 ;TTY OUTPUT RUNG HEADER
TTYPNT: BLOCK 1 ;TTY OUTPUT BYTE POINTER
TTYCNT: BLOCK 1 ;TTY OUTPUT BYTE COUNT
TTYBUF: BLOCK L$TTBF+3 ;SIZE OF OUTPUT BUFFER
GETSTR: BLOCK 5 ;ARGUMENT BLOCK FOR GOBSTR UUO
STRBLK: BLOCK 1+3*N$STRS ;ARGUMENT BLOCK FOR STRUUO
ENDSTR==.
EZER==.-1
END INITIA