.TITLE QUE.NN - TERMINAL QUEUER / / 14 OCT 76 (003; PDH) MAKE DEFAULT BATCH INPUT LUN CORRESPOND / TO THE CORRECT TERMINAL NUMBER. / 22 SEP 76 (002;PDH) INSERT THE TERMINAL LUN'S / / TO GENERATE THE CORRECT VERSION, THE SYMBOL / /NN=NN / / MUST BE DEFINED, WHERE NN IS THE TERMINAL NUMBER. / / / / FIRST PRINTING, FEBRUARY 1974 / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO / CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED / AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPON- / SIBILITY FOR ANY ERRORS THAT MAY APPEAR IN THIS / DOCUMENT. / / THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FUR- / NISHED TO THE PURCHASER UNDER A LICENSE FOR USE ON / A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH / INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR / USE IN SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PRO- / VIDED IN WRITING BY DIGITAL. / / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY / FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIP- / MENT THAT IS NOT SUPPLIED BY DIGITAL. / / COPYRIGHT (C) 1974, BY DIGITAL EQUIPMENT CORPORATION / / .EJECT / QUEUE SYSTEM FUNCTION / QUEUES JOBS TO THE BATCH PROCESSOR / / COPYRIGHT 1974 DIGITAL EQUIPMENT CORPORATION / GARY M. COLE NOVEMBER 1973 / / / THIS SECTION ADDED BY PAUL HENDERSON TO TAKE CARE OF / DEFAULT QUEING LUN AND TTYLUN DEFINITION. / .DEC .IFDEF MCR QLUN=17 .ENDC .IFDEF TDV QLUN=17 / DEFAULT LUN FOR TDV & MCR .ENDC .IFDEF NN TTYLUN=30+NN QLUN=40+NN / POINT TO USER LUN .ENDC .OCT / .TITLE QUEUE -- SUBMIT A JOB TO THE BATCH PROCESSOR / / QUE FUNCTION TASK FOR MCR,TDV,OPR,STACKR, AND TSR USE / EDIT #1 1/30/74 G. COLE / / / ASSEMBLE INTO ONE OF THREE VERSIONS / / TDV VERSION, GETS COMMAND STRING FROM XFRCMD, REQUESTS TDV ON EXIT / / MCR VERSION, GETS COMMAND STRING FROM FAC, REQUESTS MCR ON EXIT / / TERMINAL VERSION, REQUESTS COMMAND STRING FROM USER, / USING LUN SPECIFIED WITH TTYLUN PARAMETER / EXITS NORMALLY. / / / / ASSEMBLY PARAMETERS ARE / / TDV=0 FOR TDV VERSION / MCR=0 FOR MCR VERSION / TTYLUN=0 FOR TERMINAL VERSION / / .IFUND TDV .IFUND MCR .IFUND TTYLUN .END -- NO VERSION (TDV,MCR,TTYLUN) PARAMETER SPECIFIED .ENDC .ENDC .ENDC / .IFDEF TTYLUN .IFUND CMDLUN CMDLUN=TTYLUN .ENDC .ENDC .IFUND DEFCLS /DEFAULT JOB CLASS DEFCLS=0 .ENDC /THIS FEATURE ALLOWS YOU TO RUN QUEUE FROM ONE PACE /AND READ QUEUE COMMANDS FROM ANOTHER. IT WOULD ALLOW YOU TO QUEUE /CARD DECKS ON A PUSH BUTTON COMMAND OR A SINGL CNTL/X. /THE QUEUE PARAMETERS WOULD BE ON CMDLUN AND ALL PRINTOUT WOULD BE /ON TTYLUN....... .GLOBL SET57,FAC57 .IFUND STKLUN STKLUN=77 .ENDC /DEFAULT SETTING OF STKLUN=LUN10 / /DEFINE PRINT MACRO: .DEFIN PRINT,ZLUN,ZA,ZB,ZC,ZD,ZE,ZF CAL .+3 /PRINT LINE CAL .+10 /WAIT FOR IT ZTMP2=. HLT /REPLACED WITH JMP 2700 /WRITE CAL .+4 ZLUN /LUN 2 /ASCII .+4 /BUFFER 0 /EV 20 /WAITFR CPB .-2 ZTMP=. 0 /LINE BUFFER 0 .ASCII "ZA ZB ZC ZD ZE ZF"<015> ZTMP1=. .LOC ZTMP ZTMP1-ZTMP/2*1000+2 .LOC ZTMP2 JMP ZTMP1 /JMP AROUND CPBS AN BUFFER .LOC ZTMP1 .ENDM START NOP .EJECT /INITIALIZE VARIABLES DZM NFO /DECLARE IT FILE ORIENTED INITIALLY (0) LAC (QLUN) /SET DEFAULT FOR LUN NUMBER DAC LUNN DZM SPNFLG /DEFAULT IS NO SPAWNING DZM HLDFLG /DEFAULT IS TO RUN DZM OPRFLG /DEFAULT IS NO OPERATOR COVERAGE DZM NCKFLG /DEFAULT IS TO CHECK FILE DZM DELFLG /DEFAULT IS NOT TO DELETE FILE DZM SEQFLG /DEFAULT IS NOT TO SEQUENCE JOB DZM MEMSIZ /DEFAULT IS CURRENT SIZE DZM USRNUM /DEFAULT IS NON-USER ORIENTED LAC (3) /DEFAULT IS DAC TIMLIM /3 MINUTE TIME LIMIT LAC (DEFCLS) DAC CLASS /DEFAULT IS JOB DEFCLS PARAMETER / / / NOW GET THE INPUT LINE AND UNPACK IT INTO THE INBUF AREA / JMS GETLIN /GETLIN SUB DEPENDS ON ASSEMBLY LAC (FL-1) /SETUP X11 TO STORE LIST OF FILE NAME CHARS DAC* (11) / .IFDEF TDV /ONLY NEED THIS CODE FOR TDV SCAN SCNSP JMS GETC /GET CHARS, SCAN FOR SPACE TO TERMINATE /NAME OF FUNCTION JMP FMTERR /FORMAT ERROR IF END HERE SAD (40) /TEST FOR SPACE SKP JMP SCNSP /LOOP UNTIL SPACE FOUND .ENDC SCNCHR JMS GETC /PASS SPACES TO CHAR JMP FMTERR /ERROR AGAIN SAD (40) JMP SCNCHR /LOOP JMS TDIG /TEST CHAR IN AC FOR DIGIT /IF SO, LEAVE VALUE IN AC, ELSE /RETURN WITH CHAR IN AC JMP FILN /NOT A DIGIT, FIRST CHAR OF THE FILE /NAME ISZ NFO /SET "NON FILE ORIENTED" FLAG LUNIN DAC DIGIT DZM VALUE LUNINL LAC VALUE MUL; 12 /MULTIPLY BY 10 LACQ TAD DIGIT DAC VALUE JMS GETC JMP OKLUN JMS TDIG /TEST IT FOR DIGIT JMP NONDGL /NOT A DIGIT IN LUN NUMBER DAC DIGIT JMP LUNINL NONDGL SAD (40) /IS IT A SPACE? JMP OKLUN2 /YES SAD (54) /IS IT A COMMA? JMP OKLUN2 /YES JMP FMTERR /NO, MUST BE A FORMAT ERROR /NO TERMINATOR AFTER VALUE OF LUN OKLUN LAC VALUE DAC LUNN /SAVE VALUE IN LUN JMP OK OKLUN2 LAC VALUE DAC LUNN JMP EOLUN .EJECT FILN DAC* 11 /SAVE FIRST CHARACTER OF FILE NAME JMS GETC JMP OK SAD (40) JMP EOFN /DELIMITER FOR END OF FILE NAME SAD (54) JMP EOFN /SAME FOR COMMA JMP FILN /LOOP FOR MORE EOFN JMS GETC JMP OK DAC CHAR /SAVE IN CASE WE HAVE NO LUN SPECIFIED SAD (40) JMP EOFN SAD (54) JMP EOFN /SCAN OFF TRAILING DELIMITERS JMS TDIG /TEST FOR DIGIT(LUN NUMBER) JMP NODIG JMP LUNIN /SCAN FOR LUN NODIG LAC (QLUN) /DEFAULT LUN IF FILE IS SPECIFIED BUT LUN NOT DAC LUNN JMP KEYW /PROCESS THE CHAR THAT WE KNOW IS NOT A DIGIT EOLUN JMS GETC /PROCESS JOB SPECIFIERS JMP OK /IF END SAD (40) /TEST FOR SPACE JMP EOLUN /SCAN OFF SAD (54) JMP EOLUN /SCAN OFF COMMAS TOO DAC CHAR /SAVE FIRST CHARACTER JMS TDIG /TEST FOR DIGIT HERE(ERROR) SKP /SKIP IF NOT DIGIT AFTER LUN JMP FMTERR KEYW LAC CHAR /TEST FOR THE CASES WHICH HAVE NO /ASSOCIATED NUMERICAL VALUE SAD (123) JMP SPFL /SET SPN OR STK OR SEQ FLAG SAD (117) JMP OPRFL /SET OPR (OPERATOR REQUIRED) FLAG SAD (104) /SET DELETE FILE FLAG JMP DELFL SAD (116) /SET NOCHECK FLAG JMP NCKFL SAD (110) JMP HLDFL /TEST FOR AN "H" HOLDING JMP GETVAL /GET ASSOCIATE VALUE (T=XXX ETC) OPRFL ISZ OPRFLG JMP RUNOFF HLDFL ISZ HLDFLG /SET HOLDING FLAG JMP RUNOFF DELFL ISZ DELFLG JMP RUNOFF NCKFL ISZ NCKFLG JMP RUNOFF SPFL JMS GETC /MUST DIFFERENTIATE BETWEEN /SPN AND SEQ JMP FMTERR /FORMAT ERROR IF NO MORE CHAR SAD (120) /TEST FOR P JMP SPNXXX SAD (105) /TEST FOR E JMP SEQXXX SAD (124) /TEST FOR T JMP STKXXX JMP FMTERR /IF NOT SP OR SE SPNXXX ISZ SPNFLG JMP RUNOFF SEQXXX ISZ SEQFLG JMP RUNOFF STKXXX ISZ STKFLG ISZ DELFLG /NOTE, STACKING IMPLIES DELETION /THIS IS DONE TO PREVENT CLUTTER /ON THE STKLUN UFD, IF YOU DISLIKE THIS /ASSUMPTION, REMOVE THIS INSTRUCTION JMP RUNOFF JMP RUNOFF .EJECT RUNOFF JMS GETC /SCAN TO NEXT BLANK JMP OK SAD (40) JMP EOLUN SAD (54) JMP EOLUN JMP RUNOFF /LOOP UNTIL SPACE, COMMA, OF EOL GETVAL DZM VALUE JMS GETC JMP FMTERR /ERROR IF ENDS HERE JMS TDIG /TEST FOR START OF VALUE FIELD JMP GETVAL /LOOP UNTIL DIGIT VLOP DAC DIGIT LAC VALUE MUL ; 12 /MULTIPLY BY 10 LACQ TAD DIGIT DAC VALUE JMS GETC /GET NEXT CHAR JMP OKVL JMS TDIG JMP NOTDIG JMP VLOP NOTDIG ISZ CONTFG /SET CONTINUATION FLAG OKVL LAC CHAR SAD (115) /TEST FOR M=XXX MEMORY SIZE SPECIFICATION JMP STRMEM SAD (124) /TEST FOR TIME LIMIT SPECIFICATION JMP STRTIM SAD (103) /TEST FOR CLASS SPECIFICATION JMP STRCLS SAD (125) /TEST FOR USER SPECIFICATION JMP STRUSR JMP FMTERR /ILLEGAL SPECIFIER NOT (U,M,T,S,O,C) LSTVL LAC CONTFG /TEST FOR MORE SPECIFIERS DZM CONTFG SNA JMP OK /PROCESS REQUEST JMP EOLUN /TRY FOR MORE SPECIFIERS STRMEM LAC VALUE DAC MEMSIZ JMP LSTVL STRTIM LAC VALUE DAC TIMLIM JMP LSTVL STRUSR LAC VALUE DAC USRNUM JMP LSTVL STRCLS LAC VALUE DAC CLASS JMP LSTVL .EJECT / / BEGIN ASSEMBLY OF THE QJOB CAL ENTRIES / OK DZM JINFO /CLEAR JINFO WORD LAC DELFLG /TEST AND SET DELETE FILE BIT (0) SNA JMP OK1 LAC (400000) DAC JINFO OK1 LAC OPRFLG /TEST AND SET OPERATOR REQUIRED FLAG SNA JMP OK2 LAC JINFO TAD (200000) DAC JINFO OK2 LAC SEQFLG /TEST AND SET THE SEQUENCING FLAG SNA JMP OK3 LAC JINFO TAD (40000) DAC JINFO OK3 LAC SPNFLG /INSERT SPAWNING FLAG SNA JMP OK4 LAC JINFO /SET BIT 04 TAD (20000) DAC JINFO OK4 LAC HLDFLG SNA JMP OK5 LAC JINFO /INSERT THE HOLD BIT TAD (10000) DAC JINFO OK5 LAC TIMLIM /TEST AND INSERT TIME LIMIT AND (776000) SZA /SKIP IF OK JMP VALERR LAC TIMLIM AND (1777) TAD JINFO DAC JINFO /JINFO IS COMPLETED EXCEPT FOR POSSIBLE /UPDATE OF THE TIME LIMIT FROM THE /FILE CHECK .EJECT / / CONTINUE TO ASSEMBLE THE SP1 WORD / THIS CONTAINS THE JOB SPAWNING FLAG / THE USER NUMBER, AND THE MEMORY SIZE. / / / OK6 LAC CLASS /INSERT CLASS INTO BITS 0-2 OF SP1 WORD AND (777770) /CHECK FOR RESONABLE VALUE SZA JMP VALERR /ERROR IF GTR 7 OR NEG LAC CLASS RTR!CLL; RTR /ROTATE INTO BITS 0,1,2 DAC SP1 /FIRST PARAMETER IN SP1 OK7 LAC USRNUM /TEST AND SET USER NUMBER AND (777400) SZA JMP VALERR /IF NUMBER GT 255 LAC USRNUM LLS 7 /SHIFT INTO BITS 3-10 AND (077600) /REMOVES STRAY MQ BITS TAD SP1 /ADD USER NUMBER TO SP1 WORD DAC SP1 OK8 LAC MEMSIZ /TEST AND INSERT MEMSIZE*4 AAC -201 /TEST FOR GTR 128 SMA /SKIP IF OK JMP VALERR LAC MEMSIZ SZA AAC -1 /LEAVE 0=0, ELSE SUB 1(=1024 WORDS) /0 IMPLIES CURRENT TDV PARTITION SIZE AND (177) TAD SP1 DAC SP1 / / SP1 IS NOW COMPLETED / .EJECT OK10 LAC FL /CONVERT FILE NAME TO TWO SIXBT WORDS JMS SIXBTC DAC FL LAC FL+1 JMS SIXBTC DAC FL+1 LAC FL+2 JMS SIXBTC DAC FL+2 LAC FL+3 JMS SIXBTC DAC FL+3 LAC FL+4 JMS SIXBTC DAC FL+4 LAC FL+5 JMS SIXBTC DAC FL+5 /ALL CAHR ARE NOW SIXBT FORMAT LAC FL /PACK INTO TWO WORDS CLL!RTL; RTL; RTL TAD FL+1 RTL; RTL; RTL TAD FL+2 DAC JOBFL1 /PUT INTO CAL LAC FL+3 CLL!RTL; RTL; RTL TAD FL+4 RTL; RTL; RTL TAD FL+5 DAC JOBFL2 /PUT SECOND HALF OF FILENAME INTO CAL / / LAC LUNN /PUT LUN NUMBER INTO CAL SAD (1) /TEST FOR LUN 1 JMP SRCERR /CANNOT INPUT FROM DISK DRIVER SWHA DAC JOBLUN .EJECT TES1 LAC NCKFLG /IS FILE CHECKING REQUIRED? SZA /YES JMP QJOB /NO, INITIATE THE JOB LAC LUNN /SETUP CALS DAC HINLUN DAC OPNLUN DAC CLSLUN CAL HINF /ASK CHARACTERISTICS OF DEVICE CAL WAIT LAC EV /GET DESCRIPTION AND (200000) SNA /CAN IT DO INPUT? JMP SRCERR /NO!, CANT RUN A JOB FROM THE LPT!! LAC EV AND (77) SAD (21) /IS IT THE BATCH PROCESSOR? JMP SRCERR /YES!!, MUST NOT DO THIS LAC EV AND (40000) /IS IT A FILE STRUCTURED DEVICE? SNA JMP NONFS /NO, CANNOT READ UNLESS STACKING FILE LAC JOBFL1 /GET FILE NAME SNA /IS IT REASONABLE JMP FNERR /NO! DAC CLSFL1 / DAC OPNFL1 LAC JOBFL2 DAC OPNFL2 DAC CLSFL2 CAL OPN /OPEN THE FILE CAL WAIT LAC EV /TEST FOR ERRORS SMA JMP READJ /FILE OPEN SAD (-13) JMP FILNOT /FILE NOT FOUND JMP FILERR /FILE ERROR .EJECT READJ LAC LUNN DAC REDLUN /SETUP LUN FOR READ CAL READF /READ FIRST LINE OF THE JOB /MUST BE $JOB CARD CAL WAIT LAC EV SPA JMP FILERR /FILE ERROR LAC BUF1 /GET FIRST WORD OF LINE SAD DJOB1 /COMPARE WITH "$JOB" JMP ROK1 JMP NJOBER /NOT A $JOB FILE ROK1 LAC BUF2 SAD DJOB2 JMP ROK2 JMP NJOBER /NOT A $JOB LINE ROK2 JMS* SET57 BUF1 JMS GETCX JMP JFERR /$JOB FORMAT ERROR JMS GETCX JMP JFERR /SAME JMS GETCX /SCANNING OFF TO TIME LIMIT JMP JFERR JMS GETCX JMP JFERR JMS TDIG JMP JFERR /NO A DIGIT IN TIME LIMIT FIELD DAC VALUE JMS GETCX JMP JFERR /EXTRACT SECOND AND THIRD DIGITS FROM TIME JMS TDIG JMP JFERR DAC DIGIT LAC VALUE MUL; 12 LACQ TAD DIGIT DAC VALUE /STORE RUNNING VALUE JMS GETCX JMP JFERR JMS TDIG JMP JFERR DAC DIGIT LAC VALUE MUL; 12 LACQ TAD DIGIT DAC TIMLIM /THIS THE REAL TIME LIMIT FOR THE JOB LAC JINFO AND (776000) TAD TIMLIM DAC JINFO JMP STKCK /GO CHECK FOR STACKING .EJECT NONFS ISZ NFO /INDICATE THAT IT IS NON FILE STRUCTURED LAC STKFLG /TEST FOR STACKING SZA /SKIP IF NOT JMP READJ /JUP IF SO AND READ FIRST LINE JMP QJOB /QUEUE THE JOB IF ALL DONE NOW /NOW THE JOB QUEUE DATA IS COMPLETE / /IF WE ARE TO STACK THE FILE WE NOW MUST COPY IT TO /THE DISK , IF NOT WE CLOSE THE FILE AND QUEUE THE JOB. STKCK LAC STKFLG /TEST FOR STACKING SNA /SKIP IF SO JMP STKSX /ELSE MIGHT BE SCANNING--GO CHECK AND RETURN IF SO / JOB STACKING LOGIC /ALSO USED FOR JOB SCANNING / /TWO FUNCTIONS ARE AS FOLLOWS: / /SCANNING: DONE IF STACKING NOT SET BUT DEVICE IS /FILE ORIENTED. READS THE FILE AND SENSES SPECIAL CARDS. / /STACKING: DONE IF STK INDICATED, CREATES NEW FILE AND COPIES ORIGIN /JOB INTO IT, FREEING ORIG JOB FILE OR DEVICE. / / / / / / THE FUNCTION HERE IS TO COPY THE JOB DECK / FROM WHERE IT NOW IS TO A PRESPECIFIED / DISK LUN AND QUEUE IT FROM THERE. / / TO DO THIS IT IS NECESSARY TO HAVE A FILE NAME / WHICH WE DERIVE FROM THE TIME OF DAY, CHECKING TO / BE SURE THAT THIS HAS NOT ALREADY BEEN USED. / / IF THE DELETE PARAMETER HAS BEEN SPECIFIED, THE BATCH / PROCESSOR WILL AUTOMATICALLY DELETE THE JOB FILE / AFTER IT HAS BEEN RUN. / / WHILE WE COPY THE FILE FROM DEVICE TO DISK, / WE DETECT $MSG,$PAU CARDS WHICH WOULD REQUIRE / OPERATOR ASSISTANCE AT RUN TIME AND SET THE OPR / REQUIRED INDICATOR. WE ALSO DETECT THE $SPN / CONTROL CARD AND SET THE SPAWNING FLAG. / / STACKING TERMINATES WHEN WE SEE A PHYSICAL END OF FILE, / A $END RECORD, OR A $QUIT RECORD. NOTICE IT IS NOT / POSSIBLE TO STACK MORE THAN ONE JOB INTO A FILE IF / $END RECORDS SEPERATE THE JOBS. / .EJECT CAL SPYSSM /GET TIME IN SEC SINCE MIDNIGHT CPTFN LAC TIMEV /GET TO AC LMQ /TO MQ FOR SHIFTING LLS 6 /IGNORE UPPER 6 BITS CLA!CLL LLS 4 /GET FIRST CHAR IN SIXBT IAC RTL /SLIDE IN TWO ZERO BITS LLS 4 IAC RTL LLS 4 IAC DAC SEKFLN /FILE NAME HAS BEEN CREATED IN SIXBT DAC ENTFLN DAC CLSFLN DAC DELFLN DAC JOBFL2 LAC ENTFLN-1 DAC JOBFL1 /SETUP JOB FILE NAME LAC (STKLUN*1000) DAC JOBLUN /DEFINE THIS LUN FOR EXECUTION /IT IS OF THE FORM SK.ZZZ JOB / / IS THE FILE ALREADY THERE(USUAL PROBLEM WITH HASH CODED / VECTORS!! / CAL SEKSTK /SEEK THE FILE CAL WAIT / LAC EV SAD (-13) /TEST FOR FILE NOT FOUND JMP MAKFL /GOOD!, WE CAN USE OUR NAME SPA /WAS OPERATION SUCESSFUL? JMP STKERR /NO, DECLARE ERROR ISZ TIMEV /YES, TRY NEW NAME JMP CPTFN /TRY,TRY AGAIN JMP STKERR /CANNOT HAPPEN,EVER!!! /IMPLIES ALL 4096 JOBS ARE STACKED! MAKFL CAL ENTSTK /ENTER THE NEW FILE CAL WAIT LAC EV SPA JMP STKERR /UNLIKELY TO HAPPEN UNLESS MEDIA FULL /OR STACKING ON DECTAPE AND DIRECTORY FULL .EJECT / /COPY THE JOB FILE FROM THE INPUT DEVICE TO THE QUEUE AREA / STKW LAC STKFLG /ARE WE STACKING OR SCANNING SNA /SKIP IF STACKING JMP STKEW /JMP IF SCANNING CAL WRISTK /WRITE OUT THE LINE TO THE NEW FILE /THIS MUST BE THE JOB LINE WHICH /IS AREADY IN CORE. CAL WAIT LAC EV SPA JMP STKERR STKEW LAC ENDSTK /TEST IF LAST LINE ALREADY READ SZA JMP STKDON /IF SO,CLOSE FILE AND CONTINUE CAL READF /ELSE READ THE NEXT LINE CAL WAIT LAC EV SPA JMP STKERR /CLOSE AND DEL THE NEW FILE LAC BUFL /TEST HEADER AND (7) SAD (5) /TEST FOR EOF ON INPUT JMP STKDON /CLOSE FILES AND CONTINUE /NOT AN ERROR OR A PHYSICAL END OF FILE /TEST FOR SPECIAL CONTROL CARDS JMS CMP2 ENDQ JMP SETEND /IF END LINE SEEN JMS CMP2 QUITQ JMP SETEND /IF $QUIT SEEN JMS CMP2 MSGQ JMP SETOPR /IF $MSG SEEN JMS CMP2 PAUQ JMP SETOPR /IF $P^AUSE SEEN JMS CMP2 SPNQ JMP SETSPN /IF $SPN SEEN JMP STKW /IF ANYTHING ELSE, WRITE IT OUT .EJECT SETOPR LAC JINFO AND (577777) TAD (200000) DAC JINFO JMP STKW SETSPN LAC JINFO AND (757777) TAD (20000) DAC JINFO JMP STKW SETEND ISZ ENDSTK JMP STKW /SET FLAG AND WRITE LAST LINE ENDSTK 0 / / STKSX LAC NFO /TEST FOR FILEORIENTED DEVICE SZA JMP QJOB /NO SCANNING TO BE DONE, QUE THE JOB JMP STKW /BEGIN TO SCAN THE JOB / / / STKDON LAC STKFLG /TEST FOR STACKING SNA /SKIP IF SO JMP CLOSX /ELSE WE ARE DONE, GO CLOSE THE FILE AND QUEUE THE JOB CAL CLSSTK /CLOSE THE OUTPUT FILE CAL WAIT LAC EV SPA JMP STKERR JMP CLOSX STKERR LAC STKFLG /TEST SNA JMP STKERM /MESSAGE ONLY CAL CLSSTK /CLOSE THE OUTPUT FILE CAL DELSTK /CLOSE AND DELETE THE NEW F STKERM PRINT TTLUN,STACKING,ERROR JMP EXERR /EXIT WITH ERROR / /DEFINE SPECIAL CARDS TO BE FOUND MSGQ .ASCII /$MSG/ PAUQ .ASCII /$PAU/ ENDQ .ASCII /$END/ QUITQ .ASCII /$QUI/ SPNQ .ASCII /$SPN/ / /DEFINE CPBS / SPYSSM 31 / EV 160 /SCOM CELL OF SECONDS SINCE MIDNIGHT TIMEV 0 /VALUE RETURNED SEKSTK 3200 EV STKLUN .SIXBT /SK./ SEKFLN 0 .SIXBT /JOB/ ENTSTK 3300 EV STKLUN .SIXBT /SK./ ENTFLN 0 .SIXBT /JOB/ WRISTK 2700 EV STKLUN 2 BUFL CLSSTK 3400 EV STKLUN .SIXBT /SK./ CLSFLN 0 .SIXBT /JOB/ DELSTK 3500 EV STKLUN .SIXBT /SK./ DELFLN 0 .SIXBT /JOB/ .EJECT / /CMP2 COMMON SUBROUTINE TO COMPARE / THE TWO WORDS AT THE ADDRESS SPECIFIED IN THE / ARGUMENT WITH THE WORDS BUF1 AND BUF2 / THE LAST 8 BITS OF THE SECOND WORD ARE IGNORED / I.E. A 4 CHARACTER TEST IS MADE / CMP2 0 LAC* CMP2 /GET ARG DAC CMPT1 ISZ CMP2 /PREPARE TO RETURN IF OK LAC BUF2 /GET RID OF LAST CHAR AND (777400) DAC CMPT2 LAC BUF1 /COMPARE FIRST 2.5 CHAR SAD* CMPT1 /WITH ARGUMENT STRING SKP /SKIP IF OK JMP CMPX /EXIT TO CALL+3 IF ERROR ISZ CMPT1 LAC* CMPT1 /GET CHAR 3 + 4 AND (777400) SAD CMPT2 /TEST JMP* CMP2 /RETURN TO CALL +2 IF OK CMPX ISZ CMP2 JMP* CMP2 /RETURN TO CALL+3 IF DIFFERENT CMPT1 0 /HOLDS ADDRESS OF ARG STRING CMPT2 0 /HOLDS BUF2**777400 .EJECT CLOSX LAC NFO SZA /TEST FOR FILE OPEN(FOD) JMP QJOB CAL CLS CAL WAIT .EJECT QJOB CAL QUEJB /TELL THE WORLD!!!!!! .IFDEF DEBUG .LOC .-1 HLT .ENDC CAL WAIT LAC EV SMA /QUEUEING ERRORS?---- RARE JMP QOK JMP QUEERR QOK LAC (005003) /PRINTOUT JOB ID DAC LINBF /SETUP HEADER DZM LINBF+1 LAC (6) /SETUP LOOP PAL CLX LAC EV /EVENT VARIABLE CONTAINS ID LMQ QIDPL CLA!CLL LLS 3 /MOVE OCTAL DIGIT TO AC AAC 60 /CONVERT TO ASCII OCTAL DAC LINBF+2,X /STORE AXS 1 /TEST AND LOOP JMP QIDPL LAC (12) /LINEFEED DAC LINBF+2,X /STORE LAC (15) /CARRIAGE RTN DAC LINBF+3,X CAL WRIQID /PRINT ID CAL WAIT JMP EXIT /ALL DONE!! .EJECT WRIQID 2700 EV TTLUN 3 LINBF /CPB FOR PRINTING IDENT / / /TDIG SUBROUTINE: / TDIG 0 DAC TDIG0 /SAVE ORIGINAL CHAR AAC -60 /SUB 60 FROM DIGIT DAC TDIG1 SPA /IS IT OK? JMP TDIX /NO,RETURN TO CALL+1 AAC -12 /SUB 10 MORE SMA /IS IT STILL OK JMP TDIX /NO ISZ TDIG LAC TDIG1 /CHAR IS GOOD JMP* TDIG /RETURN TO CALL + 2 TDIX LAC TDIG0 /RESTORE AC JMP* TDIG TDIG0 0 TDIG1 0 /TEMPORARY / /SIXBTC SUBROUTINE / SIXBTC 0 AND (77) JMP* SIXBTC / GENERAL VARIABLE DEFINITIONS / LUNN 0 /HOLDS LUN NUMBER SEQFLG 0 /SET TO INDICATE SEQUENCING HLDFLG 0 /SET TO INDICATE HOLDING SPNFLG 0 /SET TO INDICATE SPAWNNING NCKFLG 0 /SET TO BYPASS CHECKING OF JOB FILE DELFLG 0 /SET TO INDICATE DELETE AFTER RUN MEMSIZ 0 /SET TO CORE SIZE IN K USRNUM 0 /SET TO USER CODE TIMLIM 0 /SET TO TIME LIMIT (MINUTES) CLASS 0 /SET TO CLASS VALUE 0 /TEMPORARY DIGIT 0 /TEMPORARY STKFLG 0 /SET TO INDICATE STACKING OPRFLG 0 /SET TO INDICATE OPERATOR REQUIRED NFO 0 /SET TO INDICATE NON FILE ORIENTED CHAR 0 /TEMP CONTFG 0 /TEMP, CONTINUATION FLAG ON PARAMETER SCAN / / DJOB1=. DJOB2=.+1 .ASCII /$JOB / / / /NECESSARY CPB'S / QUEJB 33 /QUEUE JOB DIRECTIVE EV JOBFL1 0 JOBFL2 0 JOBLUN 0 JINFO 0 SP1 0 SP2 0 / / WAIT 20 EV EV 0 OPN 3200 /OPEN THE JOB FILE EV OPNLUN 0 OPNFL1 0 OPNFL2 0 .SIXBT 'JOB' / / CLS 3400 /CLOSE THE JOB FILE EV CLSLUN 0 CLSFL1 0 CLSFL2 0 .SIXBT 'JOB' / / READF 2600 EV REDLUN 0 2 BUFL 60 / / HINF 3600 /TEST DEVICE CHAR EV HINLUN 0 / /WORKING BUFFERS / BUFL 0 0 /SPACE FOR HEADER, LINE FOLLOWS NEXT BUF1 0 BUF2 0 BUF3 .BLOCK 56 FL .BLOCK 20 /FILE NAME .EJECT / PRINT MESSAGES FOR VARIOUS ERRORS FMTERR PRINT TTLUN,FORMAT,ERROR,IN,COMMAND JMP EXERR /ERROR OUT / VALERR PRINT TTLUN,ILLEGAL,VALUE,FOR,ARGUMENT JMP EXERR /ERROR OUT / SRCERR PRINT TTLUN,CANNOT,INPUT,FROM,DEVICE,SPECIFIED JMP EXERR /ERROR OUT / FNERR PRINT TTLUN,NEED,FILE,NAME,FOR,THIS,DEVICE JMP EXERR /ERROR OUT FILNOT=. / FILERR PRINT TTLUN,FILE,NOT,FOUND JMP EXERR /ERROR OUT / NJOBER PRINT TTLUN,JOB,RECORD,MUST,BE,FIRST,LINE JMP EXERR /ERROR OUT / JFERR PRINT TTLUN,INCORRECT,JOB,LINE JMP EXERR /ERROR OUT / QUEERR PRINT TTLUN,IMPOSSIBLE,TO,QUEUE,JOB JMP EXERR /ERROR OUT .EJECT .IFDEF TTYLUN / /CONDITIONAL CODING FOR USER TERMINAL VERSION / / WHEN RUN, PRINT * AND WAIT FOR COMMAND LINE / PROCESS AS USUAL RETURNING ERRORS TO TTYLUN / TTLUN=TTYLUN GETLIN 0 CAL PROMPT /PROMPT USER WITH * CAL RCMDL /READ LINE CAL WAITLL LAC EVL SPA JMP CMDERR JMS* SET57 /DEFINE BUFFER LINBF JMP* GETLIN EXERR CAL (10) /ON AN ERROR EXIT CAL (10) /IF OK GETCX=. GETC 0 JMS* FAC57 /GET NEXT CHAR SAD (015) JMP* GETC SAD (175) JMP* GETC ISZ GETC JMP* GETC /RETURN TO CALL+1 ON END,+2 ON DATA CMDERR CAL (10) /EXIT ON INITIAL ERROR / PROMPT 2700 0 /NO EV, WILL WAIT ON THE READ THAT FOLOWS CMDLUN 3 .+1 003003 0 0 15 /NULL,CR,NULL,AND * 0 52 WAITLL 20 EVL EVL 0 RCMDL 2600 EVL CMDLUN /READ FROM COMMAND DEVICE 2 LINBF 60 LINBF .BLOCK 60 .ENDC .IFDEF TDV / DEFINE TDV VERSION OF QUEUE / / READ COMMAND LINE FROM TDV, OUTPUT TO LUN 13 / TTLUN=15 GETLIN 0 CAL XFCMD LAC EVL SPA JMP TDVERR JMS* SET57 LINBF /DEFINE BUFFER JMP* GETLIN EXIT CAL REQTDV CAL (10) EXERR CAL REQTDV CAL (10) REQTDV 1 0 .SIXBT /TDV.../ 0 XFCMD 37 EVL LINBF 60 LINBF .BLOCK 60 EVL 0 GETCX=. GETC 0 /FETCH CHAR ROUTINE JMS* FAC57 SAD (15) JMP* GETC SAD (175) JMP* GETC ISZ GETC JMP* GETC / TDVERR PRINT TTLUN,TDV,COMMAND,TRANSFER,ERROR JMP EXERR .ENDC .IFDEF MCR GETLIN 0 JMP* GETLIN /NO SETUP REQUIRED TTLUN=3 EXERR=. EXIT DZM* (171) /RESET MCRRI LAC MCRLST /GET LAST CHAR SEEN SAD (175) /WAS LINE TERMINATED BY ALTMODE CAL (10) /YES CAL REQMCR CAL (10) REQMCR 1 0 .SIXBT /...MCR/ 0 GETCX 0 LAC GETCX DAC GETC JMS* FAC57 JMP GETC+3 /GET CHAR FROM JOBLINE BUFFER, NOT MCR!! GETC 0 JMS* (174) /FAC SUBROUTINE IN EXEC DAC MCRLST SAD (15) JMP* GETC SAD (175) JMP* GETC ISZ GETC JMP* GETC MCRLST 0 LINBF .BLOCK 60 .ENDC .END START