.TITLE *** BDRES -- BATCH RESIDENT SECTION / / COPYRIGHT (C) 1976 / DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY / ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH / THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS / SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- / VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON / EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO / THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE / SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE / WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- / MITMENT BY DIGITIAL EQUIPMENT CORPORATION. / / DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY / OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. / .TITLE DESCRIPTION AND EDIT HISTORY / / BDRES / / BDRES CONTAINS SUBROUTINES AND BUFFER OR DATA AREAS USED / BY THE VARIOUS BATCH OVERLAYS, PLUS SOME FIRST TIME INIT- / IALIZATION CODE. FOR FURTHER INFORMATION SEE THE OVERLAYS / THEMSELVES. / / / 100 20-AUG-76 (EAG) MULTIACCESS BATCH INITIAL / VERSION. / / 101 2-SEP-76 (EAG) MODIFY ECHOWT SO THAT LISTING /(101) / ERRORS WON'T ABORT JOB... /(101) / OR END.... /(101) / .TITLE CONDITIONAL ASSEMBLY PARAMETERS / / NOTE THAT THIS, THE RESIDENT SECTION, IS THE ONLY PORTION / OF THE BATCH HANDLER WHICH HAS ASSEMBLY PARAMETERS. ALL / THE OVERLAYS REFERENCE THIS SECTION WHEN THEY MUST UTILIZE / AN ASSEMBLY PARAMETER. / / / THE FOLLOWING THREE PARAMETERS DETERMINE THE LUNS WHICH / WILL BE USED BY THE BATCH HANDLER. / / OPRLUN SHOULD BE OPERATOR TTY / / JOBLUN USED TO READ JOB INPUT FILE / / LSTLUN USED TO OUTPUT JOB LISTING / / BEFORE INVOKING THE BATCH HANDLER, THE USER/OPERATOR MUST / ENSURE THAT OPRLUN IS ASSIGNED TO THE OPERATOR TTY AND / THAT JOBLUN AND LSTLUN ARE BOTH ASSIGNED TO NONE. THE / BATCH HANDLER ASSIGNS APPROPRIATE DEVICES TO JOBLUN AND / LSTLUN ITSELF. / .IFUND OPRLUN OPRLUN=3 .ENDC .IFUND JOBLUN JOBLUN=6 / = 6 DECIMAL. .ENDC .IFUND LSTLUN LSTLUN=7 / = 7 DECIMAL. .ENDC / / THE ASSEMBLY PARAMETER "DFTIME" SPECIFIES THE DEFAULT TIME / LIMIT (IN MINUTES). IF ZERO IS SPECIFIED AS A JOB'S TIME / ESTIMATE/LIMIT, THE DEFAULT TIME LIMIT WILL BE USED INSTEAD. / NOTE THAT IT IS FEASIBLE TO HAVE ...OPR MODIFY THE DEFAULT / TIME LIMIT, ALTHOUGH SUCH AN OPTION HAS NOT BEEN IMPLEMENTED. / IT WOULD MERELY CHANGE LOCATION DEFTIM IN THE BATCH CONTROL / VECTOR. / .IFUND DFTIME DFTIME=4 .ENDC / / THE PARAMETERS "ACCTDEV" AND "ACCTUFD" DETERMINE THE DEVICE, / UNIT, AND UFD IN WHICH THE BATCH ACCOUNTING FILE RESIDES. / "ACCTUFD" MAY BE SET TO THE UFD NAME, IN .SIXBT, IN WHICH / THE ACCOUNTING FILE SHOULD BE FOUND. IF LEFT UNDEFINED, / IT DEFAULTS TO . "ACCTDEV" MAY BE SET TO THE DEVICE / NAME AND UNIT NUMBER IN THE FOLLOWING FORMAT: TWO LETTER / DEVICE NAME IN THE HIGH 12 BITS (IN .SIXBT), UNIT NUMBER / IN LOW 6 BITS (IN BINARY). IF LEFT UNDEFINED, IT DEFAULTS / TO THE SYSTEM DISK, UNIT ZERO. / / NOTE: THE DEFAULT FOR "ACCTDEV" IS HANDLED VIA CONDITIONAL / ASSEMBLY IN THE BDRES INITIALIZATION CODE. / .IFUND ACCTUFD ACCTUFD=222330 / .SIXBT "RSX" .ENDC .TITLE MISCELLANEOUS ASSEMBLY CONSTANTS & MACROS LINLEN=52 / LENGTH OF INPUT AND LISTING / BUFFERS IN WORD PAIRS. 52 / (42 DECIMAL WORD PAIRS OR / 84 WORDS) IS ENOUGH FOR / 132 CHARACTER INPUT LINES / (IOPS ASCII) AND 80 / CHARACTER ERROR MESSAGES / (IMAGE ASCII). / / INDIRECT-INDEXED INSTRUCTION MNEMONICS: / LACIX=LAC* X ANDIX=AND* X / / SPECIAL INSTRUCTIONS: / .INH=705522 / INHIBIT INTERRUPTS. .ENB=705521 / ENABLE INTERRUPTS. / / MACRO TO WAIT FOR NEXT SIGNIFICANT EVENT / .DEFIN WAIT CAL (05) .ENDM / / MACRO TO DEFINE A TEXT BUFFER WITH CORRECT HEADER / WORD PAIR COUNT. / .DEFIN TEXT TXT,?LBL .NOLST LBL-.*400+2 0 .ASCII TXT LBL=. .LST .ENDM / / DEFINE DEBUGGING AID MACRO: / .DEFIN .DEBUG MESSAG,WORD,FORM .ENDM .IFDEF %DEBUG .DEFIN .DEBUG MESSAG,WORD,FORM .NOLST .GLOBL .DBG JMS* .DBG .ASCII MESSAG@<0> .DSA FORM .DSA WORD .LST .ENDM .ENDC .TITLE REFERENCES TO EXECUTIVE'S SCOM AREA / / REENTRANT REGISTERS USED TO INTERFACE TO REENTRANT / ROUTINES: / R1=101 R2=102 / / REENTRANT SYSTEM ROUTINE ENTRY POINTS: / SNAM=123 / SEARCH LISTHEAD IN R1 FOR / NAME R2 POINTS TO. RETURN / NODE ADDRESS IN AC, R2. / / POINTERS TO I/O TABLES INDEXED BY LUN NUMBER: / LUTP1=142 / POINTER TO LUT (LOGICAL / UNIT TABLE). / / POINTER TO BATCH CONTROL VECTOR (VECTOR IS LOCATED IN / THE RESIDENT SECTION). THIS POINTER MUST BE ZEROED PRIOR / TO TASK EXIT. / BATWD=147 / / LOCATION CONTAINING NUMBER OF TTY'S ON SYSTEM: / TTYNUM=176 / / MULTIACCESS CONTROL REGISTERS. USED TO INTERFACE WITH TDV: / MA.UCA=221 / POINTER TO TDV'S USER CONTEXT / AREA. ZERO IF TDV NOT / RUNNING, NON-ZERO IF IT IS. MA.CY=227 / ^Y FLAG WORD. MA.CST=230 / POINTER TO TDV'S CONTROL / AND STATUS TABLE. OFFSETS / WITHIN CONTROL AND STATUS / TABLE ARE DEFINED LATER. / / QUEUE LISTHEADS: / PDVL=252 / PHYSICAL DEVICE LIST. / / LOCATION WHICH CONTAINS SYSTEM DISK TYPE CODE. THE CODE / IS THE SAME AS THE NUMERIC DEVICE CODES RETURNED BY HINF. / THE CODES ARE: / / 2 ==> RF DISK / 3 ==> RP DISK / 24 ==> RK DISK / SYSDSK=301 .TITLE NODE FORMAT DEFINITIONS / / REFERENCES TO I/O REQUEST NODES ARE CODED USING NUMERIC / CONSTANTS. / / / REFERENCES TO JOB QUEUE NODES ARE CODED USING NUMERIC / CONSTANTS PLUS THE MASKS USED TO REFERENCE THE CURRENT / JOB NODE IMAGE. FOR A DETAILED DESCRIPTION OF THE / JOB QUEUE NODE FORMAT, SEE THE RESIDENT SECTION. / .TITLE REFERENCES TO TDV TABLES / / REFERENCES TO TDV'S CONTROL AND STATUS TABLE. THE / CONTROL AND STATUS TABLE IS ACCESSED VIA SCOM LOCATION / MA.CST. / TTY.UC=15 / 18 (DECIMAL) WORD TABLE, ONE / WORD PER TERMINAL. CONTAINS / USER CONTEXT AREA (UCA) / ADDRESS IF TERMINAL LOGGED / IN, -1 IF TERMINAL NOT / LOGGED IN. BT.USR=101 / BIT MAP OF SUCCESSFULLY / LOGGED IN TERMINALS. .TITLE REFERENCES TO BDRES AND OTHER BATCH OVERLAYS / / DEFINE ENTRY POINT TO BATCH OVERLAY WHICH / BDRES EXITS TO: / .GLOBL BDSLCT / / DEFINE ENTRY POINT TO BATCH SYSTEM ERROR PROCESSOR: / .GLOBL BDABRT / / DEFINE ENTRY POINTS TO ROUTINES IN RESIDENT SECTION: / .GLOBL ISSUE / ROUTINE TO ISSUE CPB'S. .GLOBL CHKCRD / ROUTINE TO DETERMINE TYPE OF / INPUT LINE. .GLOBL CTRL.Y / ROUTINE TO SIMULATE A ^Y. .GLOBL USRSTAT / ROUTINE TO DETERMINE LOGIN / STATUS OF BATCH. .GLOBL ERRFLG / ROUTINE TO SET ERROR / FLAG BITS IN LOCATION / JOBERR. .GLOBL PRINT / ROUTINE TO PRINT A LINE / ON THE LISTING DEVICE. .GLOBL ECHO / ROUTINE TO ECHO INPUT LINE / ON THE LISTING DEVICE. .GLOBL ECHOWT / ROUTINE TO WAIT FOR LISTING / ACTIVITY TO FINISH. / / DEFINE REFERENCES TO CURRENT JOB NODE IMAGE (PRIMARY NODE): / .GLOBL JBNAM1 / FIRST WORD OF JOB NAME. .GLOBL JBNAM2 / SECOND WORD OF JOB NAME. .GLOBL JBID / JOB ID OR SEQUENCE NUMBER. .GLOBL JBFLGS / JOB FLAGS WORD. (SEE BELOW) .GLOBL JBPARM / JOB PARAMETERS. (SEE BELOW) .GLOBL JBDATE / DATE OF JOB SUBMITTAL. .GLOBL JBSSM / TIME (SSM) OF JOB SUBMITTAL. / / DEFINE REFERENCES TO CURRENT JOB NODE IMAGE (SECONDARY NODE): / .GLOBL INDVU / INPUT DEVICE AND UNIT. .GLOBL INUFD / INPUT UFD. .GLOBL LSTDVU / LISTING DEVICE AND UNIT. .GLOBL LSTUFD / LISTING UFD. .GLOBL LGNDVU / LOGIN DEVICE AND UNIT. .GLOBL LGNUFD / LOGIN UFD. / / DEFINE BIT MASKS WITHIN JOB FLAGS WORD (JBFLGS): / DLTFLG=400000 / DELETE JOB FILE AFTER RUNNING / JOB. OPRFLG=200000 / OPERATOR REQUIRED TO RUN JOB. FRCFLG=100000 / JOB FORCED BY OPERATOR. SEQFLG=040000 / JOB SEQUENCING REQUIRED. HLDFLG=010000 / HOLD FOR OPERATOR RELEASE. CCLFLG=004000 / CCL PROCESSING REQUIRED. UFDFLG=002000 / EXPLICIT LOGIN DEVICE/UFD / SPECIFIED. TIMMSK=001777 / TIME ESTIMATE. / / DEFINE BIT MASKS WITHIN JOB PARAMETERS WORD (JBPARM): / CLSMSK=700000 / JOB CLASS. MEMMSK=000177 / MEMORY REQUIREMENT. / / DEFINE BIT MASKS WITHIN DATE OF JOB SUBMITTAL (JBDATE): / YRMSK=777000 / YEAR (ZERO=1900) MOMSK=000740 / MONTH DAMSK=000037 / DAY / / DEFINE SCHEDULING PARAMETERS (LOCATED WITHIN BATCH / CONTROL VECTOR, SET BY OPR). / .GLOBL WFACTR / WAIT TIME MULTIPLIER. .GLOBL TFACTR / TIME ESTIMATE MULTIPLIER. .GLOBL CFACTR / JOB CLASS MULTIPLIER. .GLOBL OPON / OPERATOR ON DUTY FLAG. / 1 => OPERATOR ON / 0 => OPERATOR OFF .GLOBL WAIMAX / MAXIMUM ALLOWABLE WAIT TIME. .GLOBL TIMMAX / MAXIMUM ALLOWABLE RUN TIME. .GLOBL CLSMIN / MINIMUM ALLOWABLE JOB CLASS. .GLOBL DEFTIM / DEFAULT JOB TIME LIMIT. / / OTHER LOCATIONS IN BATCH CONTROL VECTOR: / .GLOBL TLEACT / ACTION TO TAKE ON TIME / ESTIMATE EXCEEDED. / 1 ==> ABORT JOB. / 2 ==> STOP JOB. / 3 ==> KILL JOB. / 4 ==> REPORT. / 5 ==> IGNORE. .GLOBL TIMLIM / CURRENT JOB FILE TIME LIMIT. / NEGATIVE OF THE MAXIMUM / SECONDS ALLOWED. .GLOBL JOBFND / JOB FOUND & EXECUTING FLAG. / 0 => NO JOB BEING EXECUTED. / (I.E., CURRENT JOB NODE / IMAGE IS INVALID). / 1 => JOB BEING EXECUTED, / START-UP SEQUENCE OR / END-OF-JOB SEQUENCE / IN PROGRESS. / 2 => JOB IS RUNNING. / 3 => BATCH IS SCANNING TO / $ERR CARD (JOB HAS / BEEN KILLED). .GLOBL JOBERR / JOB ERROR FLAGS WORD. (SEE / BELOW). .GLOBL EXJOB / BATCH EXIT SWITCH. / 0 => EXECUTE JOBS. / +1 => PAUSE AT END OF JOB. / -1 => EXIT AT END OF JOB. .GLOBL PAUSW / $PAUSE IN PROGRESS FLAG. / 0 => NORMAL EXECUTION. / +1 => $PAUSE IN PROGRESS, / BATCH IS WAITING FOR / OPERATOR PROCEED. / / ERROR FLAG BITS WITHIN JOBERR: / / SIGN BIT -- TERMINATE JOB AT NEXT TDV READ. / / ALL OTHER BITS -- INDICATE SOME SPECIFIC CAUSE OF JOB / TERMINATION. MOST BITS ARE SET WHILE / SIMULTANEOUSLY SETTING THE SIGN BIT, / THUS STOPPING THE JOB AT NEXT TDV READ. / SOME ERRORS ALSO SIMULATE A ^Y, WHICH / CAUSES A TDV READ, THUS ABORTING THE / JOB IMMEDIATELY. OTHER ERRORS SET A / BIT HERE AND SET JOBFND TO +3, CAUSING / A SCAN TO A $ERR CARD, THUS KILLING / THE JOB. NOTE, HOWEVER, THAT A ^Y / SHOULD BE SIMULATED AND/OR JOBFND SET / TO +3 ONLY IF JOBFND IS CURRENTLY / +2 OR +3 (REMEMBER THAT JOBFND RANGES / FROM 0 TO +3). IF JOBFND IS NOT +2 / OR +3, ONLY THE ERROR FLAG BITS IN / JOBERR SHOULD BE SET. ALSO NOTE THAT / ALL MANIPULATIONS OF THESE LOCATIONS / MUST TAKE PLACE WITH INTERRUPTS / INHIBITED. / / THIS WORD IS PASSED TO THE JOB END PROCESSOR (END...) TO / TELL IT THE REASONS FOR JOB TERMINATION. / / IF ANY BIT IN JOBERR IS SET BEFORE THE JOB IS LOGGED IN / TO TDV, THE ENTIRE JOB IS ABORTED. THIS EVEN APPLIES TO / ERRORS WHICH NORMALLY CAUSE A SCAN TO A $ERR CARD. / / SPECIFIC BIT DEFINITIONS: / JE.IN=200000+400000 / ASSIGNMENT FAILURE WITH / JOB INPUT FILE. JE.SK=100000+400000 / SEEK ERROR WITH JOB INPUT / FILE. JE.LST=040000+400000 / ASSIGNMENT FAILURE WITH / JOB LISTING OUTPUT FILE. JE.NTR=020000+400000 / ENTER ERROR WITH JOB LISTING / OUTPUT FILE. JE.LGN=010000+400000 / ILLEGAL EXPLICIT LOGIN / DEVICE/UFD SPECIFIED. JE.JOB=004000+400000 / JOB ATTEMPTED TO READ A $JOB / CARD (JOB TERMINATES, THEN / NEXT JOB IN JOB FILE IS RUN). JE.EOF=002000+400000 / JOB ATTEMPTED TO READ PAST / END-OF-FILE (ON JOB FILE). JE.END=001000+400000 / JOB ATTEMPTED TO READ $END / CARD. JE.ERR=000400+400000 / I/O READ ERROR ENCOUNTERED / ON JOB INPUT FILE. JE.WRT=000200+400000 / I/O WRITE ERROR ENCOUNTERED / ON LISTING FILE. ^Y ALSO / SIMULATED. JE.TMA=000040 / JOB ABORTED BY TIME LIMIT / OVERRUN. ^Y ALSO SIMULATED. / JOBFND ALSO SET TO +3. JE.TMS=000020+400000 / JOB STOPPED BY TIME LIMIT / OVERRUN. JE.TMK=000010 / JOB KILLED BY TIME LIMIT / OVERRUN. JOBFND ALSO SET / TO +3. JE.ABRT=000004 / JOB ABORTED BY OPERATOR. / ^Y ALSO SIMULATED. JOBFND / ALSO SET TO +3. JE.STP=000002+400000 / JOB STOPPED BY OPERATOR. JE.KIL=000001 / JOB KILLED BY OPERATOR. / JOBFND ALSO SET TO +3. / / LOCATIONS WHICH SAVE EVENT VARIABLE VALUES PERTINENT TO / SPECIFIC ERRORS FLAGGED IN JOBERR: / .GLOBL SK.EV / SAVE JOB COMMAND INPUT FILE / SEEK EV VALUE (JE.SK ERROR). .GLOBL NTR.EV / SAVE LISTING OUTPUT FILE EN- / TER EV VALUE (JE.NTR ERROR). .GLOBL WRT.EV / SAVE LISTING OUTPUT FILE / WRITE EV VALUE (JE.WRT / ERROR). / / DEFINE REFERENCES TO ASSIGN COMMAND LINES IN RESIDENT: / .GLOBL ASS4OPR / LUN 4 TO OPERATOR TTY. .GLOBL ASS13ACCT / LUN 13 TO ACCOUNTING FILE. .GLOBL ASSLP / LUNS 4, 13, AND 16 TO / LISTING DEVICE. / / DEFINE REFERENCES TO OTHER TEXT BUFFERS IN RESIDENT: / .GLOBL LGNMSG / LOGIN MESSAGE, SPECIFYING / LOGIN DEVICE, UNIT, & UFD. .GLOBL QJBINF / TEXT BUFFER CONTAINING INFO. / FROM JOB QUEUE NODE. .GLOBL BEGMSG / MESSAGE PASSED TO JOB... / AND END... CONTAINING / ACCOUNTING INFO. / / DEFINE REFERENCES TO DYNAMIC LINE BUFFER POINTERS. THERE / ARE TWO LINE BUFFERS IN THE RESIDENT SECTION. THE TWO / LOCATIONS IN.BFR AND LP.BFR EACH POINT TO ONE OF THESE / BUFFERS. WHEN A LINE NEEDS TO BE EXCHANGED, ONLY THE / BUFFER POINTERS ARE PHYSICALLY EXCHANGED. / .GLOBL IN.BFR / JOB FILE INPUT BUFFER. .GLOBL LP.BFR / LISTING OUTPUT BUFFER. / / REFERENCES TO CPB'S AND ASSOCIATED EVENT VARIABLES: / .GLOBL IN.CPB,IN.EV / CPB TO READ LINE FROM JOB / INTO IN.BFR. .GLOBL LP.MOD,LP.LEN / CPB TO PRINT LINE IN LP.BFR / ON LISTING DEVICE. .GLOBL TT.CPB,TT.EV / CPB TO PRINT LINE IN TT.BFR / ON OPERATOR TTY. .GLOBL IN.HINF / HINF CPB TO INPUT DEVICE / WHICH WILL SET TRGGR WHEN / DONE. .GLOBL MRKTIM / MARK TIME CPB TO SET TRGGR / IN ONE MINUTE. / / REFERENCES TO WORDS CONTAINING LUN NUMBERS: / .GLOBL IN.LUN / JOB FILE INPUT LUN. .GLOBL LP.LUN / LISTING OUTPUT LUN. .GLOBL TT.LUN / OPERATOR TTY LUN. / / REFERENCES TO OTHER WORDS IN RESIDENT: / .GLOBL PDVLND / ADDRESS OF BATCH'S PDVL NODE. .GLOBL TRGGR / BATCH'S TRIGGER EVENT / VARIABLE. .GLOBL WAITFR / A WAITFOR CPB TO WAIT FOR THE / TRIGGER EVENT VARIABLE / (TRGGR) TO BE SET. .GLOBL TTYBIT / BIT MASK FOR BATCH'S TERMINAL / NUMBER WITHIN LOCATIONS / MA.CT, MA.CY, ETC. .GLOBL TTYOFST / OFFSET FROM BASE OF TDV'S / CONTROL AND STATUS TABLE / (ADDRESS IN MA.CST) TO / BATCH'S ENTRY IN UCA ADDRESS / TABLE (TTY.UC). .GLOBL ACTDEV / WORD CONTAINING DEVICE / NAME AND UNIT NUMBER OF / DEVICE CONTAINING ACCOUNT- / ING FILE. DEVICE NAME IS / IN HIGH 12 BITS IN .SIXBT, / UNIT NUMBER IS IN BINARY / IN LOW 6 BITS. .GLOBL ACTUFD / WORD CONTAINING THREE CHAR- / ACTER UFD NAME OF UFD CON- / TAINING ACCOUNTING FILE. / NAME IS IN .SIXBT. .GLOBL RUNTIM / LOCATION WHICH ACCUMULATES / THE RUN TIME (SECONDS) / (CLOCK OR REAL TIME MINUS / PARTITION WAIT TIME) FOR / ALL JOBS IN THE CURRENT / JOB FILE. .GLOBL JOBNUM / LOCATION CONTAINING THE / NUMBER OF THE CURRENT JOB / WITHIN THE CURRENT JOB / FILE. .TITLE ISSUE -- ISSUE A CPB / / THIS SUBROUTINE ATTEMPTS TO ISSUE A CPB (VIA A CAL), THEN / CHECKS TO SEE THAT THE CPB WAS ACTUALLY ISSUED. IF AN / EVENT VARIABLE VALUE OF -777 IS RETURNED, THE CPB WAS NOT / ISSUED DUE TO THE NODE POOL BEING EMPTY. IF THIS OCCURS, / THIS SUBROUTINE WAITS FOR THE NEXT SIGNIFICANT EVENT AND / THEN TRIES AGAIN. THIS IS REPEATED UNTIL THE CPB IS / SUCCESSFULLY ISSUED. NOTE THAT ANY EVENT VARIABLE VALUE / OTHER THAN -777 INDICATES THAT THE CPB WAS ACTUALLY / ISSUED, ALTHOUGH OTHER ERRORS MAY OCCUR. / / CALLING SEQUENCE: / JMS ISSUE / < CPB POINTER > / < RETURN > / / THE CPB POINTER TAKES ONE OF TWO FORMATS. IF THE WORD IS / POSITIVE, IT IS MERELY THE ADDRESS OF THE CPB. IF THE CPB / POINTER IS NEGATIVE, IT IS OF THE FORM "400000+WORD", WHERE / LOCATION "WORD" CONTAINS THE ADDRESS OF THE CPB. I.E., / THE SIGN BIT IS A INDIRECTION FLAG (JUST AS WITH THE FPP). / / REGISTERS ALTERED: / ALL / / VALUES RETURNED: / NONE / ISSUE 0 ISSU.A LAC* ISSUE / PICK UP CPB POINTER. SMA / SKIP IF INDIRECTION. JMP ISSU.B / JMP IF NO INDIRECTION. XOR (400000) / CLEAR INDIRECT BIT. DAC ISSU.0 / PERFORM INDIRECT CYCLE. LAC* ISSU.0 / COME HERE WITH CPB ADDRESS IN AC. ISSU.B DAC ISSU.0 / SAVE CPB ADDRESS. CAL* ISSU.0 / ISSUE THE CAL. ISZ ISSU.0 / BUMP TO EV ADDRESS. LAC* ISSU.0 / FETCH EV ADDRESS. DAC ISSU.0 / PREPARE TO FETCH EV VALUE. SZA / FETCH EV VALUE, OR ZERO IF LAC* ISSU.0 / NO EV SPECIFIED. SAD (-777) / WAS NODE POOL EMPTY? JMP ISSU.C / JMP IF YES -- TRY AGAIN. ISZ ISSUE / CPB WAS ISSUED -- BUMP TO JMP* ISSUE / RETURN, THEN RETURN. / COME HERE IF CPB WASN'T ISSUED. ISSU.C WAIT / WAIT FOR SIGNIFICANT EVENT. JMP ISSU.A / GO TRY AGAIN. ISSU.0 0 / TEMPORARY. .TITLE CHKCRD -- DETERMINE TYPE OF INPUT LINE / / THIS ROUTINE EXAMINES THE INPUT LINE (IN.BFR) AND DETER- / MINES WHAT TYPE IT IS. NOTE THAT THE CALLER OF THIS / ROUTINE MUST ENSURE THAT INPUT HAS COMPLETED (I.E., THAT / IN.EV IS NON-ZERO) BEFORE CALLING THIS ROUTINE. THE CARD / OR LINE TYPE CODE IS RETURNED IN THE AC. / / THE BROAD CLASSIFICATIONS OF CARD OR LINE TYPES ARE AS / FOLLOWS: / / > 0 NOT A CONTROL CARD / / < 0 A CONTROL CARD / / THESE CLASSIFICATIONS ARE BROKEN DOWN BY THE SPECIFIC / LINE (CARD) TYPES DEFINED BELOW. / / NOTE: "%" STANDS FOR "$" IN THESE CODES. / / CODES FOR NON-CONTROL CARDS: / NOT%=1 / NOT% ==> NOT A CONTROL CARD -- I.E., / COLUMN 1 DOES NOT CONTAIN "$" %EOF=NOT%+1 / %EOF ==> $EOF CARD -- RETURN AN END-OF-FILE / TO THE TASK / / CONTROL CARD CODES: / %MSG=-1 / %MSG ==> $MSG CARD. PRINTS ON LISTING / DEVICE AND OPERATOR TTY. %LOG=%MSG-1 / %LOG ==> $LOG CARD. PRINTS ON LISTING / DEVICE. %PAU=%LOG-1 / %PAU ==> $PAUSE CARD. PRINT ON LISTING / DEVICE AND OPERATOR TTY, THEN WAIT / FOR OPERATOR'S OK TO PROCEED. %EJECT=%PAU-1 / %EJECT ==> $EJECT CARD. PRINT FORM-FEED / (PAGE EJECT) ON LISTING DEVICE. %ERR=%EJECT-1 / %ERR ==> $ERROR CARD. IF ERROR OCCURS, SKIP / TO NEXT $ERROR CARD. OTHERWISE, PRINT / ON LISTING DEVICE AND OPERATOR TTY. EOJ=%ERR-1 / EOJ ==> END-OF-JOB LINE READ ON INPUT FILE. / RETURNED WHEN $JOB, $END, $QUIT, END- / OF-FILE, OR READ ERROR IS ENCOUNTERED. / CAUSES JOB TERMINATION. NOTE THAT / BITS IN LOCATION JOBERR ARE SET -- / SEE BELOW. %OTHER=EOJ-1 / %OTHER ==> ANY OTHER CONTROL CARD (WITH "$" / IN COLUMN 1) NOT SPECIAL CASED ABOVE. / BY DEFAULT, A TDV COMMAND CARD. / / NOTE: THE ACTION DESCRIPTIONS ABOVE ARE FOR DESCRIPTIVE / PURPOSES ONLY -- IMPLEMENTATION OF THE ACTIONS IS / THE RESPONSIBILITY OF THE ROUTINES CALLING CHKCRD. / / NOTE: CARD TYPES SHOULD BE REFERRED TO ONLY BY THE / MNEMONICS DEFINED ABOVE, AND NEVER BY THEIR / ACTUAL NUMERIC VALUES! / / NOTE: WHEN THE CODE "EOJ" IS RETURNED (SIGNIFYING AN END- / OF-JOB LINE HAS BEEN READ), APPROPRIATE BITS ARE / ALSO SET IN JOBERR. JE.JOB IS SET IF A $JOB IS / READ, JE.END IF A $END IS READ, JE.EOF IF A $QUIT / OR END-OF-FILE IS READ, OR JE.ERR IF A READ ERROR / IS ENCOUNTERED. / / NOTE: THE ORDERING AND EXACT VALUES OF CARD TYPE CODES / %MSG THROUGH %ERR ARE CRITICAL TO THE FORMATION / OF TABLE CKCD.O BELOW AND THE CODE WHICH REFER- / ENCES IT. NEW CONTROL CODES MUST BE ADDED FOL- / LOWING %ERR, OR THE TABLE AND CODE CHANGED / APPROPRIATELY. / / CALLING SEQUENCE: / JMS CHKCRD / / REGISTERS ALTERED: / ALL (MAY ISSUE CAL'S) / / VALUES RETURNED: / AC / CHKCRD 0 LAC IN.EV / CHECK FOR READ ERRORS. SPA / SKIP IF NO ERROR JMP CKCD.O / JMP IF EV < 0 ==> ERROR. LAC* IN.BFR / FETCH HEADER WORD. AND (17) / MASK OUT DATA TRANSFER MODE. SAD (5) / IS IT END-OF-FILE? JMP CKCD.M / YES -- RETURN EOJ. SAD (6) / IS IT END-OF-MEDIUM? JMP CKCD.M / YES -- TREAT AS END-OF-FILE LAC IN.BFR / POINT XR TO INPUT BUFFER. PAX .DEBUG <"BDRES:CHKCRD -- INPUT LINE: ">,IN.BFR,51 LACIX (3) / PUT SECOND DATA WORD IN MQ, LMQ / IN CASE WE NEED IT TO FORM / COMMAND NAME. LAW 776000 / VERIFY WORD PAIR COUNT ANDIX (0) / IS 2 OR GREATER. IF COUNT / IS ZERO OR ONE, CAUSE CONTROL / CARD CHECK TO DETERMINE CARD / IS NOT A CONTROL CARD. SZA!CLA / SKIP IF COUNT IS ZERO OR ONE. LAW 777760 / IF COUNT > 1, MASK OUT FIRST ANDIX (2) / TWO CHARACTERS AND CHECK FOR SAD (12*200+44*20) / "$". MATCH => CNTRL CARD JMP CKCD.A / JMP IF CONTROL CARD. AND (774000) / MASK OUT FIRST CHAR., AND SAD (44*4000) / CHECK FOR "$" ==> CNTRL CARD. JMP CKCD.B / JMP IF CONTROL CARD. LAC (NOT%) / CARD DID NOT HAVE "$" AS JMP CKCD.H / FIRST CHAR. -- THEREFORE / IT'S JUST AN ORDINARY NON- / CONTROL CARD. / COME HERE IF CARD IS A CONTROL CARD OR $EOF CARD -- I.E. / IF FIRST CHAR. IS "$". COME TO CKCD.A IF CARD STARTS / "$", COME TO CKCD.B IF CARD STARTS "$". CKCD.A LACIX (2) / FETCH FIRST DATA WORD LLS 7 / SHIFT OUT LF SKP CKCD.B LACIX (2) / FETCH FIRST DATA WORD LRS 3 / FORM .SIXBT REPRESENTATION RAR / OF THREE LETTER COMMAND NAME. LLS 7 RAR LLS 6 / LEAVE RESULT IN AC. SAD (051706) / CHECK FOR .SIXBT "EOF" JMP CKCD.G / JMP IF $EOF -- RETURN CODE SAD (121702) / CHECK FOR .SIXBT "JOB" JMP CKCD.P / JMP IF $JOB. SAD (051604) / CHECK FOR .SIXBT "END" JMP CKCD.N / JMP IF $END. SAD (212511) / CHECK FOR .SIXBT "QUI" JMP CKCD.M / JMP IF $QUIT. CLLR / SET UP XR AND LR TO SCAN CLX / COMMAND NAME TABLE CKCD.J. AXR %ERR / IF THE COMMAND NAME IS CKCD.C SAD CKCD.J-%ERR,X / FOUND IN THIS TABLE, THE JMP CKCD.F / XR WILL CONTAIN THE CARD AXS 1 / TYPE CODE. JMP CKCD.C / COME HERE IF COMMAND NAME ISN'T IN TABLE. LAW %OTHER / RETURN $OTHER TYPE CODE. SKP / COME HERE IF COMMAND NAME FOUND IN TABLE CKCD.J. CKCD.F PXA / TYPE CODE IS IN XR. SKP / COME HERE IF CARD IS $EOF. CKCD.G LAC (%EOF) / RETURN $EOF CARD CODE. / COME HERE, TO RETURN TO CALLER, WITH CARD TYPE CODE IN AC. CKCD.H .DEBUG <"BDRES:CHKCRD -- CARD TYPE CODE=">,-1,10 JMP* CHKCRD / AND RETURN! / TABLE OF COMMAND NAMES WHICH HAVE UNIQUE CARD TYPE CODES. / THE COMMAND NAMES ARE ACCESSED WITH THE CARD TYPE CODE / IN THE XR. FOR MORE INFORMATION, EXAMINE THE CODING / WHICH ACCESSES THIS TABLE. CKCD.J .SIXBT "ERR" / $ERROR .SIXBT "EJE" / $EJECT .SIXBT "PAU" / $PAUSE .SIXBT "LOG" / $LOG .SIXBT "MSG" / $MSG / COME HERE IF WE READ AN END-OF-FILE, END-OF-MEDIUM, OR A / $QUIT CARD. CKCD.M LAC (JE.EOF) / GET JOBERR FLAG BITS IN AC. .DEBUG <"BDRES:CHKCRD -- END-OF-FILE ON INPUT FILE">,0,0 SKP / COME HERE IF WE READ A $END CARD. CKCD.N LAC (JE.END) / GET JOBERR FLAG BITS IN AC. SKP / COME HERE IF WE ENCOUNTER AN I/O READ ERROR. CKCD.O LAC (JE.ERR) / GET JOBERR FLAG BITS IN AC. SKP / COME HERE IF WE READ A $JOB CARD. CKCD.P LAC (JE.JOB) / GET JOBERR FLAG BITS IN AC. / COME HERE, FOR ALL OF THE CASES WHICH RETURN "EOJ", WITH / THE APPROPRIATE JOBERR FLAG BITS IN THE AC. JMS ERRFLG / SET BITS IN JOBERR. LAW EOJ / RETURN CARD TYPE CODE "EOJ". JMP CKCD.H .TITLE CTRL.Y -- SUBROUTINE TO SIMULATE ^Y / / THIS SUBROUTINE SIMULATES A ^Y (TASK ABORT REQUEST) BY / SETTING THE APPROPRIATE BIT IN MA.CY. / / NOTE: THIS SUBROUTINE MUST PRESERVE THE LINK! / / CALLING SEQUENCE: / JMS CTRL.Y / / REGISTERS ALTERED: / AC / / VALUES RETURNED: / NONE / CTRL.Y 0 .DEBUG <"BDRES:CTRL.Y -- ^Y SIMULATED">,0,0 LAC TTYBIT / FORM MASK TO PRESERVE ^Y CMA / STATUS OF OTHER TERMINAL #'S. .INH /// AVOID TIMING PROBLEMS. AND* (MA.CY) /// MASK OUT OTHER ^Y BITS. XOR TTYBIT /// SET OUR ^Y BIT. .ENB /// DAC* (MA.CY /// UPDATE ^Y FLAG WORD. JMP* CTRL.Y / RETURN. .TITLE USRSTAT -- SUBR. TO CHECK BATCH'S LOGIN STATUS / / THIS ROUTINE DETERMINES THE CURRENT TDV LOGIN STATUS OF / THE BATCH "USER" AND TAKES ONE OF FOUR RETURNS AS / APPROPRIATE. / / GLOSSARY: / / "TDV NOT RUNNING" -- USER IS NOT LOGGED IN; TDV MUST / BE REQUESTED DURING LOGIN. / / "USER PARTIALLY LOGGED IN" -- TDV IS WAITING FOR LOGIN / DEVICE AND UFD. / / CALLING SEQUENCE: / JMS USRSTAT / < TDV NOT RUNNING RETURN > / < USER NOT LOGGED IN RETURN > / < USER PARTIALLY LOGGED IN RETURN > / < USER FULLY LOGGED IN RETURN > / / REGISTERS ALTERED: / AC, LINK, XR / / VALUES RETURNED: / USER LOGIN STATUS, VIA SKIP RETURNS / USRSTAT 0 .INH /// DON'T LET TDV CHANGE /// ANYTHING. LAC* (MA.UCA) /// IS TDV RUNNING? SNA /// SKIP IF MAYBE IT IS. JMP USRS.B /// JMP IF TDV NOT RUNNING. LAC* (MA.CST) /// IS TDV RUNNING? SNA /// SKIP IF IT DEFINITELY IS. JMP USRS.B /// JMP IF TDV NOT RUNNING. PAX /// POINT XR TO TDV'S CONTROL /// AND STATUS TABLE. LACIX TTYOFST /// FETCH OUR UCA ADDRESS. SAD (-1) /// IF -1, NOT LOGGED IN. JMP USRS.A /// JMP IF NOT LOGGED IN. LACIX (BT.USR) /// FETCH LOGIN FLAG WORD. AND TTYBIT /// MASK OUT OUR BIT. SZA /// SKIP IF LOGIN NOT COMPLETE. ISZ USRSTAT /// ISZ IF LOGIN COMPLETE. ISZ USRSTAT /// USRS.A ISZ USRSTAT /// BUMP TO APPROPRIATE USRS.B .ENB /// RETURN. JMP* USRSTAT /// .TITLE ERRFLG -- SUBR. TO SET JOBERR ERROR FLAG BITS / / THIS SUBROUTINE IS USED TO SET ERROR FLAG BITS IN LOCATION / JOBERR. THE ROUTINE SHOULD BE CALLED WITH THE ERROR FLAGS / IN THE AC. / / CALLING SEQUENCE: / LAC (JE.***) / JMS ERRFLG / / REGISTERS ALTERED: / AC, MQ, LINK / / VALUES RETURNED: / JOBERR WITH APPROPRIATE BITS SET / ERRFLG 0 LMQ / PUT FLAG BITS IN MQ. .INH /// LAC JOBERR /// PICK UP JOBERR. OMQ /// SET FLAG BITS. .ENB /// DAC JOBERR /// STORE REVISED JOBERR. .DEBUG <"BDRES:ERRFLG -- JOBERR SET TO ">,JOBERR,20 JMP* ERRFLG / AND RETURN. .TITLE PRINT -- PRINT A LINE ON LISTING DEVICE / / THIS SUBROUTINE PRINTS A LINE ON THE LISTING DEVICE. / IT ALSO SETS UP TT.CPB SO THAT THE LINE / CAN BE PRINTED ON THE OPERATOR TTY MERELY BY ISSUEING / TT.CPB. / / THE LINE IS NORMALLY IN IOPS ASCII MODE. IF IT IS / IN A DIFFERENT DATA MODE, CHANGE LOCATION LP.MOD / PRIOR TO CALLING THIS ROUTINE. THIS ROUTINE RESTORES / THE DATA MODE TO IOPS ASCII (+2). / / IF THE BUSY RETURN IS TAKEN, AN APPROPRIATE HINF HAS / BEEN ISSUED TO SET TRGGR WHEN LISTING ACTIVITY IS / COMPLETE. / / CALLING SEQUENCE: / JMS PRINT / < BUSY RETURN > / LAC (LINE BUFFER ADDRESS) / / THIS ROUTINE RETURNS TO THE LAC INSTRUCTION, SO THAT UPON / RETURNING THE AC CONTAINS THE BUFFER ADDRESS. / / REGISTERS ALTERED: / ALL, BUFFER POINTER IN TT.CPB / / VALUES RETURNED: / AC, TT.CPB BOTH POINT TO LINE BUFFER / PRINT 0 JMS ECHOWT / LISTING DEVICE IDLE? JMP* PRINT / NO -- TAKE BUSY RETURN. ISZ PRINT / BUMP TO BUFFER POINTER. XCT* PRINT / FETCH BUFFER POINTER. DAC LP.CPB+4 / STORE IN CPB. DAC TT.CPB+4 / ALSO TT.CPB. JMS ISSUE / PRINT THE LINE. LP.CPB LAC (2) / RESTORE IOPS ASCII MODE. DAC LP.MOD JMP* PRINT / THEN RETURN. .TITLE ECHO -- PRINT INPUT LINE ON LISTING DEVICE / / THIS ROUTINE PRINTS THE INPUT LINE (IN THE INPUT BUFFER) ON / THE LISTING DEVICE. IT ALSO SETS UP TT.CPB SO THAT, IF / TT.CPB IS ISSUED, THE LINE WILL BE PRINTED ON THE OPERATOR / TTY. IT SWAPS THE INPUT AND LISTING BUFFERS, PRINTS THE NEW / LISTING BUFFER (FORMERLY THE INPUT BUFFER) ON THE LISTING / DEVICE, AND READS A NEW INPUT LINE. / / NOTE THAT IF THE INPUT LINE (THE LINE BEING PRINTED) IS TO / BE REFERENCED FOLLOWING THE CALL TO THIS ROUTINE, IT MUST / BE ACCESSED VIA LP.BFR RATHER THAN IN.BFR. / / ALSO NOTE THAT THIS ROUTINE ISSUES IN.CPB TO READ A NEW / INPUT LINE. / / THIS ROUTINE ALSO SETS UP TT.CPB SO THAT, IF TT.CPB IS / ISSUED, THE LINE WILL BE LISTED ON THE OPERATOR'S TTY / AS WELL AS THE LISTING DEVICE. ISSUEING TT.CPB IS THE / RESPONSIBILITY OF THE CALLER. WHEN ECHOWT VERIFIES THAT / THE LISTING DEVICE HAS FINISHED, IT ALSO VERIFIES THAT ANY / ACTIVITY ON THE OPERATOR'S TTY HAS ALSO COMPLETED. / / THIS ROUTINE NORMALLY TAKES A SKIP RETURN. THE NON-SKIP / RETURN IS TAKEN IF THE LISTING DEVICE AND/OR OPERATOR TTY / IS BUSY WITH PRIOR ACTIVITY. IF THIS OCCURS, AN APPROPRIATE / HINF HAS BEEN ISSUED TO SET TRGGR WHEN THE ACTIVITY / COMPLETES. / / CALLING SEQUENCE: / JMS ECHO / < DEVICE BUSY RETURN > / < NORMAL RETURN > / / REGISTERS ALTERED: / ALL, IN.BFR, LP.BFR, BUFFER POINTER IN TT.CPB / / VALUES RETURNED: / IN.BFR & LP.BFR SWAPPED, TT.CPB SET TO LP.BFR / ECHO 0 JMS PRINT / PRINT IN.BFR, SET UP TT.CPB. JMP* ECHO / BUSY -- TAKE BUSY RETURN. LAC IN.BFR PAL / SWAP INPUT AND LISTING LAC LP.BFR / BUFFERS. DAC IN.BFR PLA DAC LP.BFR JMS ISSUE / READ NEW INPUT LINE. IN.CPB ISZ ECHO / BUMP TO NORMAL RETURN JMP* ECHO .TITLE ECHOWT -- WAIT FOR LISTING ACTIVITY TO FINISH / / THIS ROUTINE WAITS FOR ALL LISTING ACTIVITY TO FINISH AND / CHECKS FOR ERRORS ON THE LISTING DEVICE(S). IT IS CALLED / BY VARIOUS ROUTINES TO ENSURE THAT IT IS SAFE TO MODIFY / THE LISTING BUFFER. THIS ROUTINE CHECKS FOR COMPLETION OF / LP.CPB AND TT.CPB, AND ALSO FOR ERRORS WITH SAME (I.E., / NEGATIVE VALUES OF LP.EV AND TT.EV). / / THIS ROUTINE NORMALLY TAKES A SKIP RETURN. THE NON-SKIP / RETURN IS TAKEN IF THE LISTING DEVICE AND/OR OPERATOR TTY / IS BUSY WITH PRIOR ACTIVITY. IF THIS OCCURS, AN APPROPRIATE / HINF HAS BEEN ISSUED TO SET TRGGR WHEN THE ACTIVITY / COMPLETES. / / CALLING SEQUENCE: / JMS ECHOWT / < DEVICE BUSY RETURN > / < NORMAL RETURN > / / REGISTERS ALTERED: / AC & LINK, IF NORMAL RETURN IS TAKEN. / ALL, IF DEVICE BUSY RETURN IS TAKEN. / / VALUES RETURNED: / NONE / ECHOWT 0 LAC TT.EV / VERIFY TT.CPB COMPLETION SPA!SNA!CLL!TCA / SKIP IF SUCCESSFULL, SET / LINK IF PENDING. JMP ECHW.B / JMP IF PENDING OR ERROR. LAC LP.EV / VERIFY LP.CPB COMPLETION. SPA!SNA!CLL!TCA / SKIP IF SUCCESSFULL, SET / LINK IF PENDING. JMP ECHW.C / JMP IF PENDING OR ERROR. ECHW.A ISZ ECHOWT / BUMP TO NORMAL RETURN. JMP* ECHOWT / AND RETURN. / COME HERE IF TT.CPB IS PENDING OR HAS ERRORS. / LINK IS SET IF PENDING, CLEAR IF ERRORS. / AC HAS MINUS VAUE OF TT.EV. ECHW.B LAW -105 / ASSUME ERRORS. SNL / SKIP IF PENDING JMS* BDABRT / JMS IF ERRORS -- DECLARE / BATCH SYSTEM ERROR. JMS ISSUE / ISSUE HINF TO TTY TO SET TT.HINF / TRGGR WHEN I/O COMPLETE. .DEBUG <"BDRES:ECHOWT -- TT.HINF ISSUED.">,0,0 JMP* ECHOWT / TAKE BUSY RETURN. / COME HERE IF LP.CPB IS PENDING OR HAS ERRORS. / LINK IS SET IF PENDING, CLEAR IF ERRORS. / AC HAS MINUS VAUE OF LP.EV. ECHW.C SNL!TCA / SKIP IF PENDING JMP ECHW.D / JMP IF ERROR. JMS ISSUE / ISSUE HINF TO LISTING DEVICE LP.HINF / TO SET TRGGR WHEN I/O DONE. .DEBUG <"BDRES:ECHOWT -- LP.HINF ISSUED.">,0,0 JMP* ECHOWT / TAKE BUSY RETURN. / COME HERE ON LP.CPB (LISTING DEVICE) ERRORS / AC HAS LP.EV VALUE. ECHW.D DAC WRT.EV / SAVE EV VALUE FOR END... CLA!IAC / SET EV TO +1, SO ERROR DAC LP.EV / WON'T REOCCUR. LAC (JE.WRT) / SET JOBERR FLAG BITS. JMS ERRFLG LAW -2 / CHECK JOB STATE -- ABORT /(101) TAD JOBFND / TASK (ISSUE ^Y) IF JOBFND /(101) SMA / IS +2 OR +3. /(101) JMS CTRL.Y / ABORT THE CURRENT TASK. JMP ECHW.A / GO TAKE SKIP RETURN. .TITLE DEFINE BATCH CONTROL VECTOR / / THIS IS THE "BATCH CONTROL VECTOR", USED BY ASSORTED / ROUTINES TO INTERACT WITH BATCH. DURING INITIALIZATION, / LOCATION BATWD IN THE EXECUTIVE'S SCOM AREA IS SETUP TO / POINT TO THE BATCH CONTROL VECTOR. BATCH'S OPERATOR / INTERFACE (TASK ...OPR) USES THIS TO CONTROL THE BATCH / HANDLERS OPERATION. THE VARIOUS BATCH OVERLAYS REFER TO / THIS CONTROL VECTOR VIA VARIOUS GLOBAL SYMBOLS WHICH WERE / DEFINED PREVIOUSLY. / / NOTE: THE ORDER OF ENTRIES IN THIS TABLE MUST NOT / CHANGE, UNLESS CHANGES ARE MADE TO ALL PROGRAMS / WHICH REFERENCE IT VIA BATWD. THIS IS KNOWN TO / INCLUDE ...OPR, BUT MAY ALSO INCLUDE MANY OTHER / TASKS, ESPECIALLY THOSE WHICH INTERACT WITH / BATCH IN ANY WAY. / BCV=. / SCHEDULING PARAMETERS (SET BY OPR): WFACTR 0 / WAIT TIME MULTIPLIER. TFACTR 10 / TIME ESTIMATE MULTIPLIER. CFACTR 1 / JOB CLASS MULTIPLIER. OPON 1 / OPERATOR ON DUTY FLAG. / 1 ==> OPERATOR ON DUTY. / 0 ==> OPERATOR OFF DUTY. WAIMAX 74 / MAXIMUM ALLOWABLE WAIT TIME. / (DEFAULT = 60. MINUTES) TIMMAX 1777 / MAXIMUM ALLOWABLE RUN TIME. / (DEFAUTL = 1023. MINUTES) CLSMIN 0 / MINIMUM ALLOWABLE JOB CLASS. DEFTIM DFTIME / DEFAULT JOB TIME LIMIT. / PRIMARY JOB QUEUE NODE IMAGE FOR CURRENT JOB: JBNODE=JBNAM1-2 / DOESN'T INCLUDE POINTERS. JBNAM1 0 / JOB NAME AS TWO .SIXBT WORDS. JBNAM2 0 INDVU / POINTER TO SECONDARY JOB NODE JBID 0 / JOB ID OR SEQUENCE NUMBER. JBFLGS 0 / JOB FLAGS WORD. JBPARM 0 / JOB PARAMETERS. JBDATE 0 / DATE OF JOB SUBMITTAL. JBSSM 0 / TIME OF JOB SUBMITTAL. / SECONDARY JOB QUEUE NODE IMAGE FOR CURRENT JOB: INDVU 0 / INPUT DEVICE AND UNIT. INUFD 0 / INPUT UFD. LSTDVU 0 / LISTING DEVICE AND UNIT. LSTUFD 0 / LISTING UFD. LGNDVU 0 / LOGIN DEVICE AND UNIT. LGNUFD 0 / LOGIN UFD. 0 / RESERVED. 0 / RESERVED. 0 / RESERVED. 0 / RESERVED. / OTHER LOCATIONS IN BATCH CONTROL VECTOR: TLEACT 3 / ACTION TO TAKE ON TIME / ESTIMATE EXCEEDED. / 1 ==> ABORT JOB. / 2 ==> STOP JOB. / 3 ==> KILL JOB. / 4 ==> REPORT. / 5 ==> IGNORE. TIMLIM 0 / CURRENT JOB FILE TIME LIMIT. / NEGATIVE OF THE MAXIMUM / SECONDS ALLOWED. JOBFND 0 / JOB FOUND & EXECUTING FLAG. / 0 => NO JOB BEING EXECUTED. / (I.E., CURRENT JOB NODE / IMAGE IS INVALID). / 1 => JOB BEING EXECUTED, NOT / YET LOGGED IN TO TDV. / 2 => LOGGED IN TO TDV, JOB / START-UP SEQUENCE IN / PROGRESS. / 3 => JOB IS RUNNING. / 4 => BATCH IS SCANNING TO / $ERR CARD (JOB HAS / BEEN KILLED). JOBERR 0 / JOB ERROR FLAGS WORD. SEE / COMMENTS AT GLOBAL DEFINITION EXJOB 1 / BATCH PAUSE/RUN/EXIT SWITCH. / 0 ==> EXECUTE JOBS. / +1 ==> PAUSE AT END OF JOB. / -1 ==> EXIT AT END OF JOB. PAUSW 0 / $PAUSE IN PROGRESS FLAG. / 0 ==> NORMAL OPERATION. / 1 ==> $PAUSE IN PROGRESS, / WAITING FOR OPERATOR / PROCEED. .TITLE CPB'S AND I/O RELATED LOCATIONS / / CPB'S AND LOCATIONS PERTAINING TO JOB FILE INPUT / DEVICE (JOBLUN): / IN.CPB 2600 / CPB TO READ A LINE FROM IN.EV / THE INPUT DEVICE. IN.LUN JOBLUN 2 / MODE = IOPS ASCII. IN.BFR BFR1 / INPUT BUFFER POINTER. LINLEN*2 IN.EV 1 / EVENT VARIABLE USED BY READ. IN.HINF 3600 / CPB TO ISSUE HINF TO INPUT TRGGR / DEVICE, SET TRIGGER EV WHEN JOBLUN / IT COMPLETES. / / CPB'S WHICH REFER TO LISTING OUTPUT DEVICE (LSTLUN): / LP.BFR BFR2 / LISTING BUFFER POINTER. LP.CPB 2700 / CPB TO PRINT A LINE ON LP.EV / LISTING DEVICE. LP.LUN LSTLUN LP.MOD 2 / MODE = IOPS ASCII (USUALLY). 0 / BUFFER POINTER. LP.LEN LINLEN*2 LP.EV 1 / EVENT VARIABLE FOR LP.CPB. LP.HINF 3600 / CPB TO ISSUE HINF TO LISTING TRGGR / DEVICE, SET TRIGGER EV WHEN LSTLUN / IT COMPLETES. / / CPB'S WHICH REFERENCE OPERATOR TTY (OPRLUN): / TT.CPB 2700 / CPB TO PRINT A LINE ON THE TT.EV / OPERATOR'S TTY -- THE LINE TT.LUN OPRLUN / BUFFER IS ALWAYS THE SAME 2 / AS THE ONE USED BY LP.CPB. 0 / BUFFER POINTER. TT.EV 1 / EVENT VARIABLE USED ABOVE. TT.HINF 3600 / CPB TO ISSUE HINF TO OPERATOR TRGGR / TTY, SET TRIGGER EV WHEN IT OPRLUN / COMPLETES. / / CPB TO SET TRGGR IN ONE MINUTE: / MRKTIM 13 TRGGR 1 / INTERVAL = 1 MINUTE 3 / UNITS = MINUTES. .TITLE MISCELLANEOUS LOCATIONS / / TRIGGER EVENT VARIABLE AND WAITFOR CPB WHICH REFERS TO IT. / TRGGR 0 / BATCH'S TRIGGER EVENT / VARIABLE. WAITFR 20 / WAITFOR CPB TO WAIT FOR THE TRGGR / TRIGGER EVENT VARIABLE TO / BE SET. / / THE FOLLOWING LOCATIONS ARE SET UP BY THE BDRES / INITIALIZATION CODE. / PDVLND -1 / ADDRESS OF BATCH'S PDVL NODE. TTYBIT 0 / BIT MASK FOR BATCH'S TERMINAL / NUMBER WITHIN LOCATIONS / MA.CT, MA.CY, ETC. TTYOFST -1 / OFFSET FROM BASE OF TDV'S / CONTROL AND STATUS TABLE / (ADDRESS IN MA.CST) TO / BATCH'S ENTRY IN UCA ADDRESS / TABLE (TTY.UC). / / LOCATIONS IN WHICH TO SAVE EVENT VARIABLE VALUES PERTINENT / TO SPECIFIC ERRORS FLAGGED IN JOBERR. THESE EVENT VARIABLE / VALUES ARE PASSED TO END... (THE END-OF-JOB PROCESSOR). / SK.EV 0 / JOB COMMAND INPUT FILE SEEK / EV VALUE. (JE.SK ERROR) NTR.EV 0 / LISTING OUTPUT FILE ENTER EV / VALUE. (JE.NTR ERROR) WRT.EV 0 / LISTING OUTPUT FILE WRITE EV / VALUE. (JE.WRT ERROR) / / LOCATIONS WHICH DEFINE DEVICE/UFD ON WHICH ACCOUNTING / FILE RESIDES. LOCATION ACTDEV IS SET UP BY BDRES / INITIALIZATION CODE. / ACTDEV 0 / ACCOUNTING FILE DEVICE. ACTUFD ACCTUFD / ACCOUNTING FILE UFD. / / LOCATIONS WHICH MAINTAIN ACCOUNTING INFORMATION ABOUT / THE CURRENT JOB FILE AND/OR THE CURRENT JOB WITHIN THE / CURRENT JOB FILE. / RUNTIM 0 / LOCATION WHICH ACCUMULATES / THE RUN TIME (SECONDS) / (CLOCK OR REAL TIME MINUS / PARTITION WAIT TIME) FOR / ALL JOBS IN THE CURRENT / JOB FILE. JOBNUM 0 / LOCATION CONTAINING THE / NUMBER OF THE CURRENT JOB / WITHIN THE CURRENT JOB / FILE. / / DEFINE LITERALS HERE SO THEY WON'T BE OVERWRITTEN. / .LTORG .TITLE TEXT BUFFERS (OVERLAYED BY INITIALIZATION CODE) / / DEFINE START OF TEXT BUFFERS, WHICH WILL ALSO BE THE / START OF THE INITIALIZATION CODE. ALL BUFFERS AFTER / THIS POINT WILL BE OVERLAYED BY THE BDRES INITIALIZATION / CODE. WHEN THE BUFFERS ARE SET UP (BY VARIOUS OVERLAYS), / THEY WILL, IN TURN, OVERWRITE THE INITIALIZATION CODE. / INIT=. / / ALL BUFFERS ARE DEFINED WITH A STATEMENT OF THE FORM: / / .BLOCK N+1+4/5*2+2 / / "N" IS THE NUMBER OF CHARACTERS ALLOWED, EXCLUDING LINE / TERMINATOR (CARRAIGE RETURN OR ALT MODE). / / "+1" ALLOCATES ROOM FOR THE LINE TERMINATOR. / / "+4/5" ROUNDS THE TOTAL NUMBER OF CHARACTERS UP TO THE / TOTAL NUMBER OF WORD PAIRS. / / "*2" CONVERTS THE NUMBER OF WORD PAIRS TO THE NUMBER / OF WORDS. / / "+2" ALLOCATES ROOM FOR THE LINE BUFFER HEADER. / / / DEFINE DYNAMIC TEXT BUFFERS. LOCATION IN.BFR ALWAYS / POINTS TO ONE OF THESE BUFFERS, USED TO READ INPUT LINES. / LOCATION LP.BFR ALWAYS POINTS TO THE OTHER OF THESE / BUFFERS, USED TO ECHO LINES ON THE LISTING DEVICE. / LOCATION TT.BFR ALWAYS POINTS TO THE SAME BUFFER AS / DOES LP.BFR. / BFR1 .BLOCK LINLEN*2 BFR2 .BLOCK LINLEN*2 / / DEFINE TEXT BUFFERS TO HOLD ASSIGN MESSAGES. THESE / MESSAGES ARE SET UP BY BDOPEN. / / FOR MORE INFORMATION SEE THAT OVERLAY. / ASSLP .BLOCK 16+1+4/5*2+2 ASS4OPR .BLOCK 12+1+4/5*2+2 ASS13ACCT .BLOCK 21+1+4/5*2+2 / / DEFINE TEXT BUFFER TO HOLD INFO. FROM JOB QUEUE NODE: / QJBINF .BLOCK 111+1+4/5*2+2 / / DEFINE TEXT BUFFER TO HOLD LOGIN LINE: / LGNMSG .BLOCK 11+1+4/5*2+2 / / DEFINE TEXT BUFFER TO HOLD SOME JOB ACCOUNTING INFO.: / BEGMSG .BLOCK 30+1+4/5*2+2 .TITLE BDRES ENTRY POINT & INITIALIZAION CODE / / THIS CODE IS EXECUTED ONCE ONLY, THEN OVERLAYED WITH / TEXT BUFFERS. / .LOC INIT / OVERWRITE TEXT BUFFERS. IN LAC* (TTYNUM) / PICK UP BATCH'S "TERMINAL # " .DEBUG <"BDRES:INIT -- BATCH TTY NUMBER = ">,-1,40 AAC TTY.UC / FROM SCOM, AND CALCULATE DAC TTYOFST / OFFSET INTO TDV'S CONTROL AND / STATUS TABLE OF OUR UCA / ENTRY (USED AS LOGIN STATUS / INDICATOR AND FOR TIMEOUTS). TAD (LRS-TTY.UC) / ALSO SET UP LOCATION TTYBIT DAC TTYBIT / TO BE APPROPRIATE BIT MASK LAC (400000) / INTO LOCATIONS MA.CT, MA.CY, CLL / AND BT.USR. XCT TTYBIT DAC TTYBIT / LAC (PDVL) / SEARCH PDVL FOR OUR ENTRY, DAC* (R1) / AND INITIALIZE LOCATION LAC (BDNAME) / PDVLND WITH THE ADDRESS OF DAC* (R2) / OUR PDVL NODE. JMS* (SNAM) JMP IN.A / IF NOT FOUND, FATAL ERROR. DAC PDVLND .DEBUG <"BDRES:INIT -- PDVL NODE ADDRESS = ">,-1,20 / LAC* (LUTP1) / VERIFY INPUT AND LISTING AAC -1 / LUNS ARE ASSIGNED TO "NONE". PAX / IF EITHER IS NOT, DECLARE LACIX IN.LUN / APPROPRIATE BATCH SYSTEM SZA / ERROR. JMP IN.B / JMP IF INPUT LUN ASSIGNED. LACIX LP.LUN SZA JMP IN.C / JMP IF LISTING LUN ASSIGNED. LACIX TT.LUN / VERIFY OPERATOR TTY LUN IS SNA / ASSIGNED TO SOMETHING, ELSE JMP IN.D / DECLARE BATCH SYSTEM ERROR. / LAC (BCV) / SET UP POINTER TO BATCH DAC* (BATWD) / CONTROL VECTOR. / .IFDEF ACCTDEV LAC (ACCTDEV) / GET ACCOUNTING DEVICE NAME / IN AC. .ENDC .IFUND ACCTDEV LAC* (SYSDSK) / FETCH SYSTEM DEVICE CODE, SAD (2) / THEN CONVERT TO .SIXBT TO LAC (220600) / USE AS ACCOUNTING DEVICE SAD (3) / NAME. LAC (222000) SAD (24) LAC (221300) .ENDC DAC ACTDEV / SET UP ACCOUNTING FILE / DEVICE NAME. / JMS* BDSLCT / DONE WITH INITIALIZATION -- / GO SELECT A JOB TO EXECUTE. / COME HERE IF BATCH'S PDVL NODE ISN'T FOUND. THIS IS / A SYSTEM ERROR. WE MUST CLEAR LOCATION PDVLND TO / INDICATE TO BDABRT THAT BATCH'S PDVL NODE HAS NOT BEEN / FOUND, AND THEREFORE THE I/O REQUEST QUEUE CANNOT BE / FLUSHED. IN.A DZM PDVLND LAW -101 JMS* BDABRT / COME HERE IF INPUT LUN IS NOT ASSIGNED TO "NONE". IN.B LAW -102 JMS* BDABRT / COME HERE IF LISTING LUN IS NOT ASSIGNED TO "NONE". IN.C LAW -103 JMS* BDABRT / COME HERE IF OPERATOR TTY LUN IS ASSIGNED TO "NONE". / (IT SHOULD BE ASSIGNED TO A TTY, BUT WE DON'T CHECK FOR / THAT). IN.D LAW -104 JMS* BDABRT / NAME OF BATCH HANDLER FOR SEARCHING PDVL BDNAME .SIXBT "BD@@@@" .LTORG .END IN