.TITLE *** BDDONE -- PREPARE TO TERMINATE JOB / / 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 / / BDDONE / / BDDONE SETS UP "ENDMSG" FOR USE BY END.... BDDONE ALSO SETS / JOBFND TO +1 IF A $JOB CARD IS THE ONLY CAUSE OF JOB TERMIN- / ATION, SO THAT THE NEXT JOB WILL BE RUN. OTHERWISE JOBFND / IS SET TO 0, TERMINATING THE JOB FILE. / / / 100 20-AUG-76 (EAG) MULTIACCESS BATCH INITIAL / VERSION. / .TITLE MISCELLANEOUS ASSEMBLY CONSTANTS & MACROS / / NOTE: THIS PROGRAM USES NO ASSEMBLY PARAMETERS. ALL / PARAMETERIZED VALUES ARE OBTAINED FROM THE / RESIDENT SECTION VIA INITIALIZATION CODE. / / / SPECIAL INSTRUCTIONS: / .INH=705522 / INHIBIT INTERRUPTS. .ENB=705521 / ENABLE INTERRUPTS. / / 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 / / TIME VALUES: / SSM=160 / SECONDS SINCE MIDNIGHT. MO=166 / CURRENT MONTH (1 = JANUARY) DA=167 / CURRENT DAY (WITHIN MONTH) YR=170 / CURRENT YEAR (0 = 1900) .TITLE REFERENCES TO BDRES AND OTHER BATCH OVERLAYS / / DEFINE ENTRY POINT TO THIS OVERLAY: / .GLOBL BDDONE / / DEFINE ENTRY POINT TO BATCH OVERLAY WHICH / BDDONE EXITS TO: / .GLOBL BDLGOF / / OTHER LOCATIONS IN BATCH CONTROL VECTOR: / .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). / / 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+400000 / JOB ABORTED BY TIME LIMIT / OVERRUN. ^Y ALSO SIMULATED. 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+400000 / JOB ABORTED BY OPERATOR. / ^Y ALSO SIMULATED. 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). / / REFERENCES TO CPB'S AND ASSOCIATED EVENT VARIABLES: / .GLOBL IN.CPB,IN.EV / CPB TO READ LINE FROM JOB / INTO IN.BFR. / / REFERENCES TO OTHER WORDS IN RESIDENT: / .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. .TITLE DEFINE "ENDMSG" TEXT BUFFER / / "ENDMSG" IS FORMATTED BY THIS OVERLAY AND LATER PASSED / (BY BDLGOF) TO END.... IT CONTAINS INFORMATION DESCRIBING / THE CAUSE OF JOB TERMINATION. / / FOR A DESCRIPTION OF ALL THE NUMBERS AND OPERATORS IN THE / .BLOCK STATEMENT, SEE THE TEXT BUFFER DEFINITIONS IN THE / RESIDENT SECTION. / .GLOBL ENDMSG / DEFINE GLOBAL, SO BDLGOF / CAN REFERENCE. ENDMSG .BLOCK 101+1+4/5*2+2 .TITLE BDDONE MAIN ENTRY POINT / / MAIN ENTRY POINT TO OVERLAY BDDONE. / / AS STATED ABOVE, ALL THAT BDDONE DOES IS TO FORMAT ENDMSG / (LOCATED IN THE RESIDENT SECTION). SO DO IT! / BDDONE 0 .DEBUG <"BDDONE ENTERED, JOBERR = ">,JOBERR,21 .DEBUG <<11><11>"JOBFND = ">,JOBFND,21 / FMTEND LAC (ENDMSG) / INITIALIZE CHARACTER PACKER JMS PCKINI / FOR ENDMSG. / LAC* (DA) / SAVE CURRENT DATE. DAC FMTN.0 / LAC* (YR) / PACK CURRENT DATE -- YEAR, JMS PCKNUM -3 / LAC* (MO) / MONTH, JMS PCKNUM -2 / LAC* (DA) / AND DAY. JMS PCKNUM -2 / LAC* (SSM) / PACK CURRENT TIME (SSM). JMS PCKNUM -5 / LAC* (DA) / HAS DATE CHANGED? SAD FMTN.0 SKP / SKIP IF IT HASN'T JMP FMTEND / JMP IF DATE HAS CHANGED WHILE / WE WERE PACKING DATE/TIME -- / MUST TRY AGAIN TO ENSURE / CONSISTENT TIME AND DATE. / LAC* RUNTIM / INSERT JOB FILE RUN TIME. JMS PCKNUM -6 / LAC* JOBFND / DETERMINE JOB STATUS CODE AAC -1 / AT TIME OF JOB TERMINATION. / 0 => JOB NEVER LOGGED IN / 1 => JOB WAS EXECUTING / NORMALLY AT TERMINATION / 2 => JOB WAS SCANNING FOR / $ERROR CARD. JMS PCKNUM / INSERT TERMINATION CODE. -1 / .INH /// SET JOBFND TO +1 IF JOBERR DZM* JOBFND /// IS JE.JOB, +0 IF ANY OTHER LAC* JOBERR /// ERROR FLAGS ARE SET. SAD (JE.JOB) /// ISZ* JOBFND /// .ENB /// DZM* JOBERR /// ALSO CLEAR JOBERR AT THIS /// POINT. / LMQ LAW -22 DAC FMTN.0 / FMTN.A CLAC!LLS+1 / SHIFT NEXT FLAG INTO AC. SZA!CLA / SKIP IF FLAG CLEAR. AAC 124-106 / FLAG SET -- PACK "T". AAC 106 / FLAG CLEAR -- PACK "F". JMS PACK57 / PACK THE FLAG ISZ FMTN.0 JMP FMTN.A / LAC* SK.EV / PACK JOB INPUT FILE SEEK SPA!CLA / EVENT VARIABLE VALUE AS AAC 55-53 / A SIGNED DECIMAL NUMBER. AAC 53 JMS PACK57 LAC* SK.EV SPA TCA JMS PCKNUM -6 / LAC* NTR.EV / PACK JOB LISTING FILE ENTER SPA!CLA / EVENT VARIABLE VALUE AS AAC 55-53 / A SIGNED DECIMAL NUMBER. AAC 53 JMS PACK57 LAC* NTR.EV SPA TCA JMS PCKNUM -6 / LAC* IN.EV / PACK JOB INPUT FILE READ SPA!CLA / EVENT VARIABLE VALUE AS AAC 55-53 / A SIGNED DECIMAL NUMBER. AAC 53 / NOTE THAT AFTER A READ ERROR JMS PACK57 / OCCURS, THE JOB IS TERMINATED LAC* IN.EV / AND NO FURTHER READS ARE SPA / ISSUED. THEREFORE, IN.EV TCA / STILL CONTAINS THE E.V. VALUE JMS PCKNUM / FROM THE READ ERROR. -6 / LAC* WRT.EV / PACK LISTING FILE WRITE SPA!CLA / EVENT VARIABLE VALUE AS AAC 55-53 / A SIGNED DECIMAL NUMBER. AAC 53 JMS PACK57 LAC* WRT.EV SPA TCA JMS PCKNUM -6 / JMS PCKFIN / ALL DONE! .DEBUG <<11><11>"ENDMSG: ">,ENDMSG,50 JMS* BDLGOF / GO LOGOFF FROM TDV. FMTN.0 0 / TEMPORARY USED ABOVE. .TITLE PACK57 -- SUBR. TO PACK 5/7 ASCII CHARACTERS / / THIS SUBROUTINE PACKS A CHARACTER INTO A 5/7 ASCII TEXT / BUFFER (I.E., AN IOPS ASCII LINE BUFFER). SUBROUTINE / PCKINI MUST BE CALLED BEFORE THIS ROUTINE IS CALLED, TO / INITIALIZE VARIOUS POINTERS, AND SUBROUTINE PCKFIN MUST / BE CALLED AFTERWARDS, TO PACK A CARRAIGE RETURN AND SET UP / THE WORD PAIR COUNT. / / THIS ROUTINE EXPECTS THE ASCII CHARACTER IN THE LOW 7 BITS / OF THE AC. THE HIGH BITS OF THE AC ARE IGNORED. / / CALLING SEQUENCE: / LAC (CHARACTER) / JMS PACK57 / / REGISTERS ALTERED: / AC, LINK, SC (STEP-COUNTER) / / VALUES RETURNED: / NONE / PACK57 0 AND (177) / MASK OUT UNWANTED BITS. CLL / CLEAR LINK FOR ALS INSTR. XCT* PCK5.0 / DO CHAR. ACTION. EITHER ALS / INSTR. OR JMP TO PCK5.E OR / PCK5.F. PCK5.0 POINTS TO / TABLE PCK5.C. XOR* PCK5.1 / MERGE CHAR. INTO WORD. PCK5.A ISZ PCK5.0 / BUMP CHAR. ACTION POINTER. PCK5.B DAC* PCK5.1 / STORE WORD CONTAINING CHAR. JMP* PACK57 / RETURN! / CHARACTER ACTION TABLE. THE XCT INSTRUCTION ABOVE PERFORMS / AN INSTRUCTION FROM THIS TABLE VIA A POINTER IN PCK5.0. / SIMPLE CASES SHIFT CHAR. INTO POSITION, OTHERS JMP TO / ACTION ROUTINES. PCK5.C ALS+10 / ACTION FOR CHAR. 4 CLL!RAL / ACTION FOR CHAR. 5 PCK5.D JMP PCK5.E / ACTION FOR CHAR. 1 ALS+4 / ACTION FOR CHAR. 2 JMP PCK5.F / ACTION FOR CHAR. 3 / ACTION FOR CHARACTER 1 PCK5.E ISZ PCK5.1 / BUMP WORD POINTER ALS+13 / SHIFT CHAR. INTO POSITION. JMP PCK5.A / GO STORE CHAR. / ACTION FOR CHARACTER 3 (THE SPLIT CHARACTER) PCK5.F CLL!RAR / SHIFT FIRST PART OF CHAR. RTR / INTO POSITION. DAC PCK5.2 / SAVE REST OF CHAR. FOR LATER. AND (17) / MASK OUT FIRST PART. XOR* PCK5.1 / MERGE INTO WORD. DAC* PCK5.1 LAC (PCK5.C) / RESET CHAR. ACTION POINTER. DAC PCK5.0 ISZ PCK5.1 / BUMP WORD POINTER. LAW 760000 / MASK OUT REMAINDER OF CHAR. AND PCK5.2 RAR / ROTATE INTO POSITION. JMP PCK5.B / AND GO STORE THE WORD. PCK5.0 -1 / CHARACTER ACTION POINTER. / POINTS TO TABLE PCK5.C ABOVE. PCK5.1 -1 / WORD POINTER. POINTS TO WORD / CONTAINING THE LAST (LOW- / ORDER) BIT OF LAST CHARACTER / INSERTED. PCK5.2 0 / TEMPORARY PCK5.3 -1 / BUFFER POINTER. POINTS TO / LINE BUFFER HEADER WORD. / USED BY PCKFIN. .TITLE PCKINI -- INITIALIZE 5/7 ASCII PACKING / / SUBROUTINE TO INITIALIZE ROUTINE PACK57 FOR 5/7 ASCII / PACKING. CALL WITH ADDRESS OF LINE BUFFER HEADER IN / AC. NOTE THAT A TWO WORD LINE BUFFER HEADER (AS IN / I/O BUFFERS) IS ASSUMED. / / CALLING SEQUENCE: / LAC (LINE BUFFER HEADER ADDRESS) / JMS PCKINI / / REGISTERS ALTERED: / AC, LINK / / VALUES RETURNED: / NONE / PCKINI 0 DAC PCK5.3 / STORE BUFFER POINTER. IAC DAC PCK5.1 / AND WORD POINTER. LAC (PCK5.D) DAC PCK5.0 / SET UP CHARACTER ACTION PTR. JMP* PCKINI .TITLE PCKFIN -- FINISH 5/7 ASCII PACKING / / THIS SUBROUTINE IS CALLED WHEN 5/7 ASCII PACKING IS / FINISHED. IT PACKS A CARRAIGE RETURN INTO THE TEXT BUFFER / FOR USE AS A LINE TERMINATOR. THEN IT CALCULATES THE WORD / PAIR COUNT AND SETS THE LINE BUFFER HEADER WORD APPRO- / PRIATELY. THE DATA MODE (IN THE LINE BUFFER HEADER WORD) / IS SET TO IOPS ASCII. / / CALLING SEQUENCE: / JMS PCKFIN / / REGISTERS ALTERED: / AC, LINK, SC (STEP-COUNTER) / / VALUES RETURNED: / NONE (EXCEPT COMPLETED TEXT BUFFER) / PCKFIN 0 LAC (15) / PACK CARRAIGE RETURN LINE JMS PACK57 / TERMINATOR. LAC PCK5.3 / PICK UP BUFFER ADDRESS. TCA TAD PCK5.1 / CALCULATE WORD PAIR COUNT, CLL!RAR / POSITION IN HIGH HALF OF SWHA / WORD, THEN SET IOPS ASCII TAD (1002) / DATA MODE AND ALLOW FOR DAC* PCK5.3 / HEADER WORD PAIR. JMP* PCKFIN .TITLE PCKNUM -- PACK A DECIMAL NUMBER / / THIS ROUTINE ACCEPTS A BINARY NUMBER AND A CHARACTER OR / DIGIT COUNT. THE NUMBER IS CONVERTED TO A DECIMAL ASCII / STRING WITH THE APPROPRIATE NUMBER OF DIGITS, AND THE / DIGITS PACKED USING SUBROUTINE PACK57. IF THE NUMBER / IS LARGER THAN THE SPECIFIED NUMBER OF DECIMAL DIGITS, / THE HIGH ORDER DIGITS ARE LOST. LEADING ZEROS ARE PACKED / WITHOUT MODIFICATION. / / THE BINARY NUMBER IS PASSED IN THE AC. THE CHARACTER OR / DIGIT COUNT IS SPECIFIED BY AN INSTRUCTION WHICH IMMED- / IATELY FOLLOWS THE JMS. THIS INSTRUCTION SHOULD LOAD THE / AC WITH THE TWOS COMPLEMENT OF THE DIGIT COUNT. IT WILL / USUALLY BE A LAW INSTRUCTION. / / CALLING SEQUENCE: / LAC (NUMBER) / JMS PCKNUM / LAW -DIGIT COUNT / / REGISTERS ALTERED: / AC, LINK, MQ, SC / / VALUES RETURNED: / NONE / PCKNUM 0 DAC PCKN.0 / SAVE NUMBER TO BE PACKED. XCT* PCKNUM / FETCH DIGIT COUNT. DAC PCKN.1 / SET UP DIGIT COUNTER. PCKN.A LAC PCKN.1 / COPY DIGIT COUNTER TO DAC PCKN.2 / DIVISION COUNTER. LAC PCKN.0 / SET UP FOR DIVISION LOOP. LMQ!CLAC PCKN.B SLK!CLAC!DIV / DIVIDE NUMBER BY 10. THE 12 / APPROPRIATE NUMBER OF TIMES, ISZ PCKN.2 / LEAVING FINAL REMAINDER (THE JMP PCKN.B / DIGIT) IN THE AC. AAC 60 / CONVERT DIGIT TO ASCII. JMS PACK57 / PACK IT AWAY. ISZ PCKN.1 / PACKED ALL DIGITS? JMP PCKN.A / JMP IF NOT -- LOOP FOR NEXT. JMP* PCKNUM / DONE -- RETURN. PCKN.0 0 / TEMPORARY TO SAVE NUMBER TO / BE PACKED. PCKN.1 0 / DIGIT COUNTER. PCKN.2 0 / DIVISION COUNTER. .END