File: BATC40.PA of Tape: Various/Tests/Blank-Tape-Unit1
(Source file text)
/BATCH PROCESSOR DP FOR OS8 V40 / / / / / / / / / /COPYRIGHT (C) 1978,1979,1980 BY DATAPLAN GMBH, LAUDA, BRD / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH. /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR /IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN. / /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN. / / / / / / / / / / / / /W.V.D.MARK, DP CONSULTING, ZUERICH, SWITZERLAND /10-DEC-1978 /30-MAY-1979 / 1-FEB-1980 /ABSTRACT--- /BATCH IS THE INITIALIZING PROGRAM FOR THE OS/8 BATCH /PROCESSING MONITOR. TO SET UP A BATCHL RUN, TYPE / .R BATCH OR .SUBMIT TO CCL /BATCHL WILL CALL THE COMMAND DECODER TO OBTAIN ITS /PARAMETERS AND INPUT FILE LOCATION, OR CCL WILL. DECIMAL VERSON= 40 VEDIT= "B OCTAL GERMAN=1 /*** .SA SYS BATCH=3401 *** /EDITING HISTORY: / / VERSION 1: 30-JUN-78 (BATCH LINK) / ========= / VERSION 2: 10-DEC-78 / ========= / EDIT 2: XONOF,M8 RELEASE,KEEP STATUS FROM LEVEL 2 / / VERSION 40: 9-JUL-79 / ========== / / ADAPT TO OS8 V40 / GERMAN MESSAGES / N O LEVEL 2 /T BATCH LOG TO TTY (DEFAULT;IGNORED) /U UNATTENDED /V BATCH VERSION /6 USE 026 CARD CODES (ONLY IF /C) / BATCH CONTROL CARDS /$JOB STARTS NEW BATCH JOB (FULL PAGE ON LPT) /$MSG MESSAGE TO TERMINAL AND WAIT FOR OPERATOR /$END ENDS CURRENT JOB. RETURN TO LOWER LEVEL OR KM. /$ERR IF BATCH ERROR STATUS ON, STARTS EXECUTING / IF BATCH ERROR STATUS OFF, STOPS EXECUTING. /$EXIT STOP EXECUTING, BUT DO NOT END JOB. /$RESUM REENABLE EXECUTION (AFTER $ERR OR $EXIT) /$SKIP SKIP NEXT BATCH COMMAND IF NO ERROR / EXECUTE NEXT COMMAND IF ERROR, TURN ERROR OFF / /.GOTO $LABEL IS CCL COMMAND TO GO TO $LABEL (BACKWARDS?) / WILL ONLY WORK ON FILE-STRUCTURED BATCH STREAM / THIS NEW VERSION OF BATCH PERMITS TWO LEVELS / OF SUBMIT COMMANDS. THE $END IN LEVEL 2 WILL / RETURN CONTROL TO THE COMMAND AFTER THE SUBMIT / IN LEVEL 1 WHICH STARTED LEVEL 2. /SYSTEM DEPENDENT PARAMETERS BUFFER=EOHNDL /READ WRITE BUFFER BUFRCS=2 /BUF SIZE BUFCTL=BUFRCS^20+0^10 /BUF CTLW BUFHND=BUFRCS^400+BUFFER/HANDLER BUFFER ORIGIN=5400 /ORIGIN OF BOS CDREC=51 /COMMAND DECODER KMREC=7 /KEYBOARD MONITOR BIMAX=165 /MAX HANDLER LENGTH JSW=7746 /JOB STATUS WORD DCB=7760 /DEVICE CONTROL BLOCK MTWO=CLA CLL CMA RAL MTHREE=CLA CLL CMA RTL SYSTEM=7607 MPARAM=7643 MREAD=7757 SOFSET=7747 /******************************************** KMNTRY=400 KEYMON=403 BEGLN=1000 PRINT=200 XGLINE=1200 CARRET=1252 AMFLAG=17 /REALLY FOR CCL BATCH=35 /REFERS TO KEYBOARD MONITOR!!!!!!! BCHGO=46 /THEY MUST!!!!! BE CORRECT!!!!!! CBATCH=4570 /CONTENTS OF LOC "BATCH" IN KM V40 /******************************************* CDOVER=326 CDBEGLN=1200 /CD BUFFER AREA ANALYZ=202 /CD ANALYSIS TYPE=1367 /ERROR OUTPUT ROUTINE CGLINE=1002 TT=21 /THESE REFER TO CD ASSEMBLY***VOLATILE*** DVICE=43 /IF CD OR MAIN OS/8 ASSEMBLY CHANGES, DEFALT=245 /REALLY NOT DEFALT, BUT SPCMOD SWITCH OUTSW=41 /THESE VALUES MUST BE ALTERED ALSO. NAMECT=31 DEV1=33 RESTRT=676 /******************************************** /******************************************** LPTCOD=66^10 PSKF=6001+LPTCOD /LE8 IOT'S PCLS=6006+LPTCOD RCRA=6632 /CARD READER IOT'S RCSE=6672 RCSD=6671 RCSF=6631 RCRD=6674 /***************************** AC0001= CLA CLL IAC AC0002= CLA CLL IAC RAL AC0003= CLA STL IAC RAL AC0004= CLA CLL IAC RTL AC4000= CLA STL RAR /BATCH USES CERTAIN SYSTEM WORDS AS FLAGS AND STATUS /INDICATORS. THEY ARE: /LOC. 07777. THIS IS USED AS THE BATCH IN PROGRESS FLAG. /BIT 0: IS FOR CCL /BIT 1: IS BATCH IN PROGRESS. (BIP) =1 MEANS BATCH IS ON /BIT 2: IS ON IF OS/8 IN BACKGROUND OF RTS/8 /BITS 3-4: DATE EXTENSION BITS (YEAR-70)MOD 8 /BIT 5: RESERVED /BITS 6-8: HOLD THE FIELD WHERE BATCH IS SITTING /BIT 9: RESERVED /BIT 10: IS USED BY BAT: TO SIGNAL IT HAS READ A DOLLAR SIGN /BIT 11: IS USED BY THE COMMAND DECODER TO SIGNAL BATCH NOT THERE /THE JOB STATUS WORD USES BIT 3 AS AN INDICATOR AS TO /WHETHER THE BATCH MONITOR IS CURRENTLY IN CORE. =1 MEANS /THAT THE BATCH SYSTEM NEED NOT BE RE-READ. /BOSSW IS A FLAG WORD INTERNAL TO THE BATCH MONITOR. /IT IS SET UP DURING BATCH INITIALIZATION. /BIT 0: 1 IF USE OF PTR IS PROHOBITED DURING RUN /BIT 1: 1 IF ?SPOOLING? TO NON FS DEVICE /BIT 2: 1 IF KMON AND CD ERRORS ARE FATAL /BIT 6: 1 IF TTY: IS OUTPUT DEVICE /BIT 7: 1 IF OUTPUT IS HUSHED /BIT 10: 1 IF LPT IS OUTPUT DEVICE /BIT 11: 1 IF OPERATOR IS NOT PRESENT /IF SYS IS INPUT, LOCATIONS 7774 AND 7775 IN THE TOP FIELD /ARE USED AS POINTERS TO THE CORRECT DATA BLOCK ON THE /SYSTEM DEVICE. THE BUFFER IS RE-READ WHENEVER THE /BATCH MONITOR MUST BE RE-READ. SPLNUM= 7777 /SPOOL SEQUENCE NUMBER DOLFLG= 7776 /SLEW FLAG (ERROR STATUS) SYCNT= 7775 /CHARACTER COUNT IN BUFFER SYBLKN= 7774 /SYSTEM DEVICE BLOCK NUMBER /IF SPOOLING IS USED, LOC. N7777 IS USED TO HOLD THE /XX IN 'BTCHXX.SP'. /THE ERROR STATUS FLAG MAY BE SET BY USER PROGRAMS /TO THE ERROR VALUE OF 4000. BOS WILL THAN SEARCH /FOR THE NEXT $JOB,$ERROR,$SKIP OR $RESUME. /WITH THE NEW VERSION 'M' OF BAT: THE ERROR STATUS /MAY BE SET BY DOING OUTPUT TO BAT: (NO HANDLER ERROR) /BATCH INITIALIZER PAGE 0 *16 XR1, 0 XR2, 0 TEMP, 0 TEMP2, 0 COUNT, 0 DSTART, START /THE FOLLOWING 12 ARE THE ONLY /BOS VARIABLES; INITIALIZED AND /TRANSFERRED AT STARTUP. BATCTL, 0 /**NON-BATCH BIPCCL OF 7777 BATIDV, BATSYS /**BOS INPUT DEVICE BATCTW, 201 /**FOR READING BUFFER BATINH, SYSTEM /**SYSTEM ENTRY POINT BATFRS, 0 /**FIRST BLOCK OF BATCH FILE BATODV, TTYOUT /**OUTPUT DEVICE BATSWI, 0 /**BECOMES 'BOSSW' BATSPL, 0 /**SPOOL DEVICE CDFTOP, 1234 /**SUBR CDF BOS AND LEVEL TOPCDF, CDF /**CDF TO TOP FIELD FROM GETCOR JMP I CDFTOP /THAT'S ALL TOPCIF, CIF /NEXT 4 WORDS ARE PERMANENTLY IN /TOP-FIELD 7774-7777. BATBLK, 0 /##BLOCK OF INPUT FILE ON SYS: BATCNT, -601 /##COUNT FOR SYS: FILE BATDOL, 4000 /##BOS SLEW SWITCH SET FOR $JOB BATNUM, 0160 /##A0: NAME FOR SPOOL FILE BOSBLK, 0 /FIRST BLOCK OF BATCH IMAGE BABA, 0 /4000 IF BATCH UNDER BATCH BOSCTL, 7600-ORIGIN%2+1 /CONTROL WORD TO READ/WRITE BOS FLBITS, 0 /HIGH-CORE FIELD BITS T1, 0 T2, 0 PAGE ISZ DSTART /START ENTRY-POINT CHAIN, JMS I (GETCOR /DETERMINE CORE SIZE; PUT IN 7777 JMP I DSTART START, JMP BCHAIN /IF CHAINED TO BATASK, CDF 0 /IF STARTED AND LOOP CIF 10 JMS I [200 5 /DECODE 0211 /.BI ASSUMED EXT BCHAIN, CDF 10 DCA BATSWI TAD (TTYOUT DCA BATODV /SET DEFAULT TAD I [MPARAM+1 AND [4 /GET /V SWITCH SNA CLA /IS IT ON? JMP .+3 /NO JMS I [MESSG VERMSG /PRINT BATCH VERSION NUMBER CDF 10 TAD I (7620 DCA BATBLK /GET STARTING BLOCK TAD I (7617 SNA JMP NOTSYS /NO FILE - BATCH FROM PTR,CDR29,CDR26,TTY AND [17 TAD [MPARAM+3 /POINT INTO HANDLER TABLE DCA T2 TAD I T2 CLL TAD [200 /IS THE DEVICE SYS OR CORESIDENT WITH SYS? SNL JMS I (SYSCOP /NO, COPY TO SYS:BATTEM.BI TAD [-200 /GET DEVICE HANDLER ENTRY POINT DCA BATINH /STORE AS BATCH INPUT HANDLER TAD BATBLK DCA BATFRS /STORE FIRST BLOCK FOR CCL GOTO TAD (-601 DCA BATCNT /SET UP PARAMETERS FOR INPUT FILE CDF 10 TAD (BATSYS JMP STODEV/INPUT DEV = SYS NOTSYS, TAD I [MPARAM RTL /GET C FLAG IN SIGN BIT SMA CLA JMP NOTCDR TAD I (MPARAM+2 AND (10 /GET /6 SWITCH SZA CLA TAD (BATCD6-BATCD9 /HANDLER WITH 26 CODE TAD (BATCD9 /HANDLER WITH 29 CODE JMP STODEV /INPUT DEV = CDR: NOTCDR, TAD I [MPARAM AND [10 / /I= INPUT FROM TTY SNA CLA JMP NOTTY TAD (NULOUT /SUPPRESS DOUBLE ECHO DCA BATODV TAD (BATTTY JMP STODEV NOTTY, TAD I [MPARAM+1 AND [400 SNA CLA JMP I (NOINPU /NO INPUT SPECIFIED STL RAR DCA BATSWI /PTR INPUT FLAG TAD (BATPTR STODEV, DCA BATIDV /SET FOR PROPER BOS INPUT ROUTINE GETQSW, TAD I [MPARAM+1 AND (210 /GET /Q AND /U SWITCHES CLL RTL RTL RAL / /Q INTO LINK SZA CLA IAC /SET UNATTENDED BIT IF /U SPECIFIED JMS I [INCOR BATSWI CDF 10 TAD I [MPARAM AND [20 / /H? SNA CLA JMP NOHUSH /NO TAD [20 TAD BATSWI DCA BATSWI /SET BIT 7 FOR HUSH STL /INDICATE /Q NOHUSH, SNL JMP NONULL TAD (NULOUT /EIGHTY-SIX THE BATCH LOG JMP STOOUT NONULL, CLA IAC AND I [MPARAM /TEST /L FOR LPT LOG SNA CLA JMP I (NONOTH STL RTL TAD BATSWI /SET BIT 10 FOR LPT OUT DCA BATSWI TAD (BOSLPT STOOUT, DCA BATODV JMP I (NONOTH PAGE IFNZRO .&377 <PERR, ?> BATPTR, 0 /HI SPEED READER HANDLER RDF /** MOVED TO 5400 IN BATCH FIELD ** TAD PCDIF0 DCA PTRRET JMS I PTRDOL /CHECK FOR $ INSERTION JMP PTRISZ /YES DCA PTIMER JMS I PCTRLC RFC PTM2, RSF JMP PTMER TAD PTR200 /FORCE PARITY ON RRB PTRISZ, ISZ BATPTR PTRRET, HLT JMP I BATPTR PCDIF0, CDF CIF 0 PCTRLC, CTC PTMER, AND I 0 AND I 0 ISZ PTIMER JMP PTM2 /TIMES OUT IN 16 MS. JMP PTRRET PTIMER, 0 PTR200, 200 PTRDOL, GETDOL IFZERO .-BATPTR-BIMAX&4000 <PTRBAT, ????> NBATCH, IFNDEF GERMAN < TEXT /BATCH.SV NOT FOUND ON SYS:/> IFDEF GERMAN < TEXT /BATCH.SV NICHT AUF SYSTEM /> COR8, IFNDEF GERMAN < TEXT /INSUFFICIENT CORE FOR BATCH RUN/> IFDEF GERMAN < TEXT /ZU WENIG SPEICHER FUER BATCH.SV/> BADMON, IFNDEF GERMAN < TEXT /WRONG OS8 MONITOR/> IFDEF GERMAN < TEXT /ALTER OS8 MONITOR/> SIOMSG, IFNDEF GERMAN < TEXT \SYSTEM I/O ERROR\> IFDEF GERMAN < TEXT /SYSTEM LS-FEHLER/> NODEV, IFNDEF GERMAN < TEXT / DEV NOT IMPLEMENTED_/> IFDEF GERMAN < TEXT /GERAET NICHT BEKANNT_/> SPLNFS, IFNDEF GERMAN < TEXT /SPOOLING TO NON FS DEVICE_/> IFDEF GERMAN < TEXT /SPULEN OHNE .SP DATEIEN!!_/> OUTMSG, IFNDEF GERMAN < TEXT /SYSTEM DEVICE FULL/> IFDEF GERMAN < TEXT /SYSTEM-GERAET VOLL/> GEINPU, IFNDEF GERMAN < TEXT /NO INPUT!_/> IFDEF GERMAN < TEXT /EINGABE??_/> *BATPTR+BIMAX-1 /THIS MUST!! BE AFTER ALL HANDLERS 0 /ROUTINE TO SET JOB TAD (7377 /STATUS WORD TO INDICATE THAT CDF 0 /BATCH IS STILL IN CORE AND I (JSW TAD (400 DCA I (JSW JMS I (CDFRST /RESTORE TRUE DATA FIELD JMP I .-7 PAGE NONOTH, TAD BATODV CIA TAD (TTYOUT /IF ODEV TTY SET FLAG SNA CLA TAD [40 TAD BATSWI DCA BATSWI /AND SET BIT 6 SPOOL, TAD I [7600 SNA JMP CONT /NO SPOOLING AND [17 DCA BATSPL TAD BATSPL TAD (DCB-1 DCA T2 TAD I T2 SPA CLA JMP CONT STL RTR TAD BATSWI DCA BATSWI JMS I [MESSG SPLNFS /?SPOOLING? TO NON FS DEVICE CONT, CDF 10 TAD I [MPARAM /CHECK FOR /E SWITCH CMA /NO SWITCH=ERROR MODE AND [200 CLL RTL TAD BATSWI DCA BATSWI CDF 0 TAD I (MREAD-1 /IS BATCH COMING FROM SYS:? TAD (-7607 SZA CLA JMP I (NOBACH /BATCH FILE NOT FOUND CLA IAC TAD I (SOFSET /GET BLOCK IT CAME FROM DCA BOSBLK /FIRST BLOCK OF BATCH IMAGE KMMOD, TAD (ORIGIN&7400 /GET RECORD # OF BOS BSW CLL RTR /MAKES BLOCKS TAD BOSBLK DCA I (BOSREC TAD BABA /ARE WE UNDER BATCH? SPA CLA JMP I (BOSMOD /YES; NO NEED TO ADAPT KM&CD TAD [201 JMS I [SYS /READ AND ALTER KEYBOARD MON. BUFFER KMREC TAD I (BUFFER+BATCH /GET VERSION OF MONITOR TAD (-CBATCH SZA CLA JMP I (MONERR TAD I (BOSREC /ALTER KEYBOARD MONITOR DCA I (BUFFER+BATCH+3 /RECORD # TAD FLBITS /ALTER CONTROL WORD TAD BOSCTL DCA I (BUFFER+BATCH+1 TAD (ORIGIN&7400 DCA I (BUFFER+BATCH+2 TAD TOPCIF DCA I (BCHGO+BUFFER /JMP TO CORRECT FIELD TAD (BOS /START ADD. OF MONITOR DCA I (BCHGO+BUFFER+2 /ENTRY POINT TAD [4200 /RE-WRITE KEYBD. MON. JMS I [SYS BUFFER KMREC TAD [201 /READ IN COMMAND DECODER JMS I [SYS BUFFER /AND INSERT BOS RECORD CDREC TAD TOPCDF /NOW FILL IN THE COMMAND DECODER DCA I (TT+BUFFER TAD (BATVFY DCA I (DVICE+BUFFER /ALLOW CD TO CHECK BATCH VALIDITY TAD (-2214 DCA I (OUTSW+BUFFER TAD TOPCIF /STORE CIF CDF BOS DCA I (NAMECT+BUFFER TAD (CDBOS DCA I (DEV1+BUFFER TAD [4200 JMS I [SYS /RE WRITE CD. BUFFER CDREC JMP I (BOSMOD PAGE IFNZRO .&377 <PERR, ?> BATTTY, 0 /TERMINAL INPUT HANDLER RDF /** MOVED TO 5400 IN BATCH FIELD ** TAD TTICDI /FOR INTERACTIVE PLAYS DCA TTIRET JMS I TTIDOL /CHECK FOR $ INSERTION JMP TTIISZ /YES TTIGET, ISZ TCNT JMP TTINXT TTIGO, STA DCA TCNT DCA TRUB TAD TTIBUF DCA TPTR TTIIGN, JMS I TCTRLC KSF JMP TTIIGN KRB AND TTI177 JMS I TTESTB -5 -15;TTIEOL-BATTTY+BATIN -177;TTIRUB-BATTTY+BATIN -12;TTIREP-BATTTY+BATIN /LF -25;TTIBRU-BATTTY+BATIN /^U -32;TTIRET-BATTTY+BATIN /^Z DCA TTIIN TTO, ISZ TRUB JMP .+3 TAD TBSLS JMS I TTIOUT DCA TRUB TAD TTIIN JMS I TTIOUT TAD TTIIN JMS TSTOR TAD TPTR TCU, TAD TMB110 SPA CLA T215, JMP TTIIGN TTIEOL, JMS TCRLF TAD T215 JMS TSTOR TAD TTIBUF DCA TPTR JMP TTIGET TTINXT, ISZ TPTR TAD I TPTR TAD TTI200 TTIISZ, ISZ BATTTY /NORMAL RETURN TTIRET, HLT JMP I BATTTY TSTOR, 0 AND TTI177 ISZ TPTR DCA I TPTR STA TAD TCNT DCA TCNT JMP I TSTOR TTIRUB, ISZ TCNT SKP JMP TTIEOL TAD TBSLS TBSLS, ISZ TRUB JM JMS TCRLF JMS TSTOR TUPA, ISZ TCNT TAD TTIBUF DCA TTIIN ISZ TTIIN TAD I TTIIN SNA JMP TTROF JMS I TTIOUT JMP .-5 TTIBRU, TAD TUPA JMS I TTIOUT TAD TCU JMS I TTIOUT JMS TCRLF JMP TTIGO IFZERO .-BATTTY-BIMAX&4000 <TTYBAT, ????> *BATTTY+BIMAX-1 /THIS MUST!! BE AFTER ALL HANDLERS 0 /ROUTINE TO SET JOB TAD (7377 /STATUS WORD TO INDICATE THAT CDF 0 /BATCH IS STILL IN CORE AND I (JSW TAD (400 DCA I (JSW JMS I (CDFRST /RESTORE TRUE DATA FIELD JMP I .-7 PAGE VV1=VERSON%12 VV2=VV1^12 VERMSG, TEXT / BATCH V/ /NICE SPOT *.-1 VV1+60^100+VERSON-VV2+60 /"40" VEDIT&77^100+37;0 /"X_" BOSMOD, TAD BABA /IF WE ARE ALREADY UNDER BATCH SMA CLA /WE WANT TO STORE LEVEL1 INFO FIRST JMP BOSCRE /NO; CREATE NEW BATCH CDF 10 TAD I [MPARAM+1 CDF 0 AND [40 /ONLY SECOND LEVEL IF /S SNA CLA JMP BOSTAY /SORRY! BUT LEAVE HIM IN LEVEL 1 OR 2 TAD I (LEVEL2 /LOOK AT LEVEL INDICATOR SZA CLA /IF ALREADY IN SECOND LEVEL JMP I (LVERR /WE GIVE ERR MESG AND CONTINUE /IN THE LEVEL2 RUN. JMS I (MVINSB /MOVE TABLE TO STORAGE -12 BCTLTM CDF 0 /DO THIS IN FIELD 0 LVOLD /WE WRITE IN FILE AND HIGH CORE /AFTERWARDS. LEVEL2 IS SET. TAD TOPCDF DCA I (LVCDF2 /FOR STORING BACK AC4000 TAD BOSCTL TAD FLBITS DCA I (LVCTRL /CONTROL WORD FOR REBOOT TAD BOSREC DCA I (LVBLK /FOR REBOOTING LEVEL 1 TAD [100 /ONE PAGE HANDLER TAD FLBITS DCA I (HNDCTL /FOR READING HANDLER IN TAD I (BINDEV /GET OLD HANDLER LOC BSW CLL RTR /CONVERT TO BLOCKS TAD BOSBLK DCA I (HNDBLK /SO IT CAN REREAD THIS HANDLER TAD TOPCDF /NOW WE STORE THE 4 RESIDENT DCA I (LVCDF1 /WORDS IN BOS.<- FOR REWRITE JMS CDFTOP /GET THESE FROM HIGH CORE TAD I (SPLNUM /IS SPECIAL: STORE IN BATCH DCA BATNUM /FOR SEQUENTIAL NUMBERS JMS I (MVINSB -3 SYBLKN CDF 0 /OK; WILL REWRITE OLDBLK JMP BOSTAY BOSCRE, DCA I (LEVEL2 /BE SURE SWITCH IS OFF BOSTAY, JMS I (MVINSB /NOW CREATE NEW RUN -12 BATCTL CDF 0 BCTLTM TAD TOPCIF DCA I (KMLST1 TAD TOPCIF DCA I (KMLST2 TAD TOPCIF DCA I (CDLST1 TAD TOPCIF DCA I (CDLST2 TAD TOPCIF DCA I (CDLST3 TAD BATIDV DCA .+3 JMS I (MVINSB /TRANSFER ROUTINE TO BOS -BIMAX+1 HLT CDF 0 BATIN AC4000 TAD BOSCTL JMS I [SYS /INPUT POINTERS SET UP. ORIGIN&7400 BOSREC, HLT CLA STL RTR /BATCH IN PROGRESS JMS I [INCOR K7777, 7777 JMS I (MVINSB /PUT IMAGE OF BOS ORIGIN-7600 /INTO HIGH CORE ORIGIN CDFBOS, HLT ORIGIN TAD CDFBOS DCA .+4 JMS I (MVINSB -4 BATBLK HLT SYBLKN CLA BATRET, CIF CDF 0 JMP I [7605 PAGE IFNZRO .&377 <PERR, ?> BATSYS, 0 /INPUT FROM SYSTEM DEVICE RDF /** MOVED INTO 5400 IN BATCH FIELD ** TAD SYCDIF DCA SYSRET SYSIN4, JMS I SYSDOL /CHECK FOR $ INSERTION JMP SYSISZ /YES SYFIX, JMP SYREAD /**SYS SENTINEL = 5212 AT **5406** SYSH, 0 /GETS ADDRESS OF INPUT HANDLER (RESIDENT) SYCHCN, 0 JMS I SYSDOL /FOR RESTORING SYSIN4 SYREAD, TAD SYSH /RE-READ BUFFER? SZA CLA JMP SYGETC /NO. STILL THERE TAD I PSYCN DCA SYC /GET VARIABLES TAD I PSYCH DCA SYSH TAD I PSYBLKN DCA BLOK TAD I PSYCNT IOSYS, DCA SYCHCN /RESTORE CHARACTER COUNT CIF 0 JMS I SYSH /READ THE BLOCK SYC, 0 BTBUF, ORIGIN-400 BLOK, 0 JMP I PSYIERR TAD BTBUF /SET BUFFER POINTER. DCA WPTR /NOW DETERMINE FROM COUNT WHICH WORD TAD SYS601 /WAS INTERRUPTED. WHEN AC GOES NEG., TAD SYCHCN /WE ARE AT PROPER 2 WORD GROUP. GWDLP, TAD SYSM3 /THEN WE FORM A JMP TO CORRECT WORD SPA JMP GEWD ISZ WPTR /SKIP 2 WORDS ISZ WPTR JMP GWDLP GEWD, TAD SYS3 /FORM A JMP CHARX, X=1,2,3 TAD JMPDOT DCA JMPCH /SET UNPACK SWITCH SYGETC, ISZ JMPCH /NORMAL CHAR. FETCH ISZ SYCHCN /NEED NEW BLOCK? JMPDOT, JMP JMPCH /NO ISZ BLOK /YES. NEXT BLOCK TAD SYM601 JMP IOSYS /READ IT. JMPCH, JMP JMPCH /3 WAY SWITCH JMP ICHAR1 /FIRST OF 3 JMP ICHAR2 /SECOND TAD JMPDOT DCA JMPCH /RESET 3 WAY SWITCH JMS I SCTRLC TAD I WPTR /NOTE THAT WE CAN'T DESTROY WPTR BY AND SY7400 /BY DOING ISZ'S UNTIL THE 3RD CHAR. CLL RTR /THAT IS BECAUSE IF WE ARE BROKEN RTR /UP, WE CAN ONLY POINT TO THE 2 WORD DCA SYTEMP /GROUP AS A WHOLE. ISZ WPTR TAD I WPTR AND SY7400 CLL RTL RTL RAL TAD SYTEMP ISZ WPTR /BUMP TO NEXT GROUP JMP CHCOM ICHAR2, CLA IAC ICHAR1, TAD WPTR DCA SYTEMP /THIRD CHAR NEEDS WPTR! TAD I SYTEMP CHCOM, AND SYS177 DCA SYTEMP TAD SYCHCN DCA I PSYCNT TAD BLOK DCA I PSYBLKN TAD SYTEMP /CHECK FOR ^Z TAD SYSM32 SZA JMP CHOUT /NOPE. OK TAD SYEXT /^Z. DISABLE INPUT DCA SYSIN4 SYEXT, JMP SYSRET CHOUT, TAD SYS232 SYSISZ, ISZ BATSYS SYSRET, HLT /CDF CIF RETURN FIELD JMP I BATSYS WPTR, 0 SYSCHR, SYTEMP, 0 PSYBLK, SYBLKN PSYCNT, SYCNT PSYCN, SYCNTL PSYCH, SYSINH PSYIER, SYIERR SYS601, 601 SYM601, -601 SYSM3, -3 SYS3, 3 SCTRLC, CTC SY7400, 7400 SYS177, 177 SYSM32, -32 SYS232, 232 SYCDIF, CDF CIF 0 SYSDOL, GETDOL IFZERO .-BATSYS-BIMAX&4000 <SYSBAT, ????> *BATSYS+BIMAX-1 /THIS MUST!! BE AFTER ALL HANDLERS 0 /ROUTINE TO SET JOB TAD (7377 /STATUS WORD TO INDICATE THAT CDF 0 /BATCH IS STILL IN CORE AND I (JSW TAD (400 DCA I (JSW JMS I (CDFRST /RESTORE TRUE DATA FIELD JMP I .-7 PAGE MESSG, 0 /MESSAGE PRINTING ROUTINE CLA CDF 0 TAD (37 /GENERATE CARRIAGE RET., LINE FEED JMS PCHAR TAD I MESSG /ADDRESS OF ERROR MESSAGE ISZ MESSG /POINT TO RETURN DCA TEMP MCONT, TAD I TEMP /GET TEXT CHARACTERS IN AC BSW JMS PCHAR /PUNCH IT TAD I TEMP JMS PCHAR /SECOND OF TWO. ISZ TEMP /NEXT TEXT WORD JMP MCONT /CONTINUE PCHAR, 0 /ROUTINE TO UNPACK AND PRINT TEXT AND [77 SNA /0 TERMINATES THE LIST JMP I MESSG /UNCLEAN RETURN, BUT WHO CARES? TAD (-37 /SEPARATE DIGITS FROM ALPHAS SNA JMP PCRLF /_ IS SPECIAL CHAR SPA TAD [100 /MAKE IT ALPHABETIC TAD (237 JMS TYPIT JMP I PCHAR PCRLF, TAD (215 JMS TYPIT TAD (212 JMS TYPIT JMP I PCHAR TYPIT, 0 TLS TSF JMP .-1 TT7600, 7600 TAD TT7600 KRS TAD (-7603 SNA CLA KSF JMP I TYPIT JMP I [7600 LZERO=0 GETCOR, 0 /ONCE ONLY ROUTINE TO DETERMINE CORE SIZE TAD I [7777 /GET BATCH CTL WD RTL /CHECK IF BATCH ALREADY RUNNING SZL CLA TAD I (BCTLTM /GET OLD STATUS STORED IN BOS SNL TAD I [7777 /NO SAVE STATUS FOR END DCA BATCTL SZL ISZ I (TEMNAM+2 /CHANGE NAME TO BATTM2 RAR DCA BABA /SECOND LEVEL TAD BATCTL AND [70 /IT MIGHT ALREADY CONTAIN THE ANSWER SZA JMP STOCOR TAD [7607 DCA LZERO CHUG, CDF 10 TAD K DCA I (LZERO K10, 10 TAD LZERO CIA TAD [7607 SZA CLA JMP DUN TAD I (LZERO NOP CIA TAD K SZA CLA JMP DUN TAD [10 TAD CHUG DCA CHUG ISZ K JMP CHUG-2 CLA CMA DUN, CIF CDF 0 TAD K TAD K10 CLL RTL /STORE HIGHEST FIELD # INTO 7777 RAL STOCOR, DCA FLBITS TAD FLBITS TAD (-10 /TEST FOR AT LEAST 12 K SPA SNA CLA JMP I (NOCORE TAD FLBITS TAD (CDF DCA TOPCDF TAD (7707 /SAVE CCL FLAG AND I [7777 TAD FLBITS DCA I [7777 TAD TOPCDF DCA I (CDFBOS CLA STL RTL TAD TOPCDF DCA TOPCIF TAD FLBITS TAD [201 DCA BATCTW JMP I GETCOR K, -10 PAGE IFNZRO .&377 <PERR, ?> /CARD READER HANDLER FOR DEC29 CARDS. /BUFFERS AN ENTIRE CARD IN THE LINE BUFFER. /ON END OF CARD, WE CAST OUT EXTRANEOUS SPACES IN THE BUFFER /AS AN EXERCISE: /FIRST TIME: MEANS ONE SPACE ON CARD AND NOTHING ELSE. BATCD9, 0 RDF TAD CCDI9 DCA CDRET9 JMS I CDDOL9 /CHECK FOR $ INSERTION JMP CDISZ9 /YES ISZ CHCNT9 /STILL CHARACTERS IN BUFFER? JMP GETCH9 /YES. NEWCR9, STA /NO. READ A NEW CARD DCA CTIME9 /FORCE TIMEOUT FOR NEW CARD TIME9, TAD CDMSP9 DCA CTEMP9 ISZ CTEMP9 JMP .-1 ISZ CTIME9 JMP RDCOL9 STA CLL RAL /-2 IN CHAR. COUNTER DCA CHCNT9 /CARD HUNG - WAIT FOR READER READY TAD LNBUF9 DCA CDPTR9 CSLCT9, JMS I CCTC9 RCSE /SELECT A CARD JMP CSLCT9 RDCOL9, RCSF /WAIT FOR DATA JMP EOC9 /AND CHECK FOR END OF CARD RCRA CLL RAR /TRANSLATE INTERNAL INTO ASCII TAD PCDT9 DCA CTEMP9 CTEMP9, TAD CDT29 SNL /LEFT OR RIGHT? BSW AND CDR779 TAD CDRSP9 DCA I CDPTR9 ISZ CDPTR9 STA TAD CHCNT9 DCA CHCNT9 /FIRST TIME: -3 EOC9, RCSD /CARD DONE? JMP TIME9 /NO - CHECK TIMEOUT /FALL INTO END OF LINE ROUTINE CHKSP9, ISZ CHCNT9 /FIRST TIME: -2 STA /BACK UP TAD CDPTR9 DCA CDPTR9 TAD I CDPTR9 TAD CDMSP9 SNA CLA JMP CHKSP9 CDCR9, ISZ CDPTR9 TAD CDRCR9 /INSERT END OF LINE MARKER DCA I CDPTR9 TAD LNBUF9 DCA CDPTR9 GETCH9, TAD I CDPTR9 ISZ CDPTR9 CDISZ9, ISZ BATCD9 CDXIT9, RCRD /CLEAR CARD DONE FLAG CDRET9, HLT JMP I BATCD9 CCDI9, CDF CIF 0 CHCNT9, -1 LNBUF9, LINBUF CCTC9, CTC PCDT9, TAD CDT29 CDR779, 77 CDRSP9, 240 CDRCR9, 215 CDPTR9, 0 CTIME9, 0 CDDOL9, GETDOL CDMSP9, -240 CDT29, 0021;2223;2425;2627;3031;3203;4007;3502 2017;6364;6566;6770;7172;7514;0577;3637 1552;5354;5556;5760;6162;0104;1211;3374 0641;4243;4445;4647;5051;7316;3410;1376 IFZERO .-BATCD9-BIMAX&4000 <CDRBAT, ????> *BATCD9+BIMAX-1 /THIS MUST!! BE AFTER ALL HANDLERS 0 /ROUTINE TO SET JOB TAD (7377 /STATUS WORD TO INDICATE THAT CDF 0 /BATCH IS STILL IN CORE AND I (JSW TAD (400 DCA I (JSW JMS I (CDFRST /RESTORE TRUE DATA FIELD JMP I .-7 PAGE /SYS PERFORMS I/O TO SYSTEM DEVICE. THE CALLING SEQUENCE /CONFORMS TO THAT OF THE STANDARD OS/8 CALL SEQUENCE, EXCEPT /THAT WE HAVE ONE ERROR RETURN FROM THE ROUTINE, NOT A LOT /OF SEPARATE ERROR RETURNS. SYS, 0 DCA SYCTL /AC HAD CONTROL WORD TAD I SYS DCA SYBUFF /BUFFER FOR TRANSFER ISZ SYS TAD I SYS DCA SYREC /RECORD OF TRANSFER ISZ SYS CIF 0 JMS I [SYSTEM SYCTL, HLT SYBUFF, HLT SYREC, HLT JMP HRDERR JMP I SYS MVINSB, 0 RDF TAD (CDF 0 DCA FROM CDF 0 TAD I MVINSB ISZ MVINSB DCA BMVCNT STA TAD I MVINSB ISZ MVINSB DCA XR1 TAD I MVINSB ISZ MVINSB DCA TO STA TAD I MVINSB ISZ MVINSB DCA XR2 FROM, HLT TAD I XR1 TO, HLT DCA I XR2 ISZ BMVCNT JMP FROM CDF 0 JMP I MVINSB BMVCNT, 0 INCOR, 0 /INCLUSIVE OR ROUTINE. USE THE CDF 0 DCA TEMP /FOLLOWING: TAD I INCOR /A .OR. B= .NOT. A .AND. B +A DCA TEMP2 TAD TEMP CMA AND I TEMP2 TAD TEMP DCA I TEMP2 ISZ INCOR JMP I INCOR NOBACH, JMS I [MESSG /BATCH.SV NOT THERE NBATCH JMP I [7600 MONERR, JMS I [MESSG BADMON JMP I [7600 NOSHSV, JMS I [MESSG SHSAVE JMP I [7600 NOCORE, JMS I [MESSG COR8 JMP I [7600 DEVERR, JMS I [MESSG NODEV JMP I (BATASK OUTERR, JMS I [MESSG OUTMSG JMP I [7600 INERR, JMS I [MESSG DIOMSG JMP I (BATASK NOINPU, JMS I [MESSG GEINPU JMP I (BATASK HRDERR, JMS I [MESSG SIOMSG JMP I [7600 LVERR, JMS I [MESSG LVMESG JMP I [7600 DIOMSG, IFNDEF GERMAN < TEXT /NON SYSTEM INPUT ERROR_/> IFDEF GERMAN < TEXT /NICHT-SYS: LESE-FEHLER_/> SHSAVE, IFNDEF GERMAN < TEXT /SHSAVE BATCH NOT ALLOWED! _/> IFDEF GERMAN < TEXT /SHSAVE BATCH NICHT ERLAUBT_/> LVMESG, IFNDEF GERMAN < TEXT \TOO MANY LEVELS OF /S SUBS_\> IFDEF GERMAN < TEXT \ZU VIELE /S SUBROUT EBENEN_\> PAGE IFNZRO .&377 <PERR, ?> /CARD READER HANDLER FOR DEC26 CARDS. /BUFFERS AN ENTIRE CARD IN THE LINE BUFFER. /ON END OF CARD, WE CAST OUT EXTRANEOUS SPACES IN THE BUFFER /AS AN EXERCISE: /FIRST TIME: MEANS ONE SPACE ON CARD AND NOTHING ELSE. BATCD6, 0 RDF TAD CCDI6 DCA CDRET6 JMS I CDDOL6 /CHECK FOR $ INSERTION JMP CDISZ6 /YES ISZ CHCNT6 /STILL CHARACTERS IN BUFFER? JMP GETCH6 /YES. NEWCR6, STA /NO. READ A NEW CARD DCA CTIME6 /FORCE TIMEOUT FOR NEW CARD TIME6, TAD CDMSP6 DCA CTEMP6 ISZ CTEMP6 JMP .-1 ISZ CTIME6 JMP RDCOL6 STA CLL RAL /-2 IN CHAR. COUNTER DCA CHCNT6 /CARD HUNG - WAIT FOR READER READY TAD LNBUF6 DCA CDPTR6 CSLCT6, JMS I CCTC6 RCSE /SELECT A CARD JMP CSLCT6 RDCOL6, RCSF /WAIT FOR DATA JMP EOC6 /AND CHECK FOR END OF CARD RCRA CLL RAR /TRANSLATE INTERNAL INTO ASCII TAD P HKSP6 CDCR6, ISZ CDPTR6 TAD CDRCR6 /INSERT END OF LINE MARKER DCA I CDPTR6 TAD LNBUF6 DCA CDPTR6 GETCH6, TAD I CDPTR6 ISZ CDPTR6 CDISZ6, ISZ BATCD6 CDXIT6, RCRD /CLEAR CARD DONE FLAG CDRET6, HLT JMP I BATCD6 CCDI6, CDF CIF 0 CHCNT6, -1 LNBUF6, LINBUF CCTC6, CTC PCDT6, TAD CDT26 CDR776, 77 CDRSP6, 240 CDRCR6, 215 CDPTR6, 0 CTIME6, 0 CDDOL6, GETDOL CDMSP6, -240 CDT26, 0021;2223;2425;2627;3031;7735;4076;0774 2017;6364;6566;6770;7172;3314;1002;0305 1552;5354;5556;5760;6162;3204;1273;3606 1341;4243;4445;4647;5051;3716;1175;3401 IFZERO .-BATCD6-BIMAX&4000 <CDRBAT, ????> *BATCD6+BIMAX-1 /THIS MUST!! BE AFTER ALL HANDLERS 0 /ROUTINE TO SET JOB TAD (7377 /STATUS WORD TO INDICATE THAT CDF 0 /BATCH IS STILL IN CORE AND I (JSW TAD (400 DCA I (JSW JMS I (CDFRST /RESTORE TRUE DATA FIELD JMP I .-7 PAGE SYSCOP, 0 /COPY BOS INPUT FILE TO SYS: ROUTINE CLA CLL CDF 10 TAD I (7617 AND [7760 /GET LENGTH - DCA CLENG TAD I (7617 AND [17 DCA CDEV /INPUT DEV: # TAD [BUFHND+1/TWO PAGE HANDLER DCA CDEVIN /RESET TAD CDEV CDF 0 CIF 10 JMS I [200 1 /FETCH CDEVIN, BUFHND+1 JMP I (DEVERR /NO SUCH CLA IAC /SYS: CIF 10 JMS I [200 4 /DELETE (PRE) TN, TEMNAM 0 /^ CLA CLL /IGNORE IF NOT THERE CENTER, TAD TN DCA CBLOCK /RESET ENTER NAME-POINTER TAD CLENG CIA IAC /SYS: CIF 10 JMS I [200 3 /ENTER CBLOCK, TEMNAM /GETS BLOCK NUMBER OF EMPTY CHOLE, 0 /-HOLE SKP CLA JMP CTRANS /OK TAD CLENG SNA CLA JMP I (OUTERR /IF ZERO TOO BAD DCA CLENG /IF NON-ZERO PUT ZERO JMP CENTER /AND TRY AGAIN /NOW TRANSFER FILE FROM DEV: TO SYS: CTRANS, DCA COUT /CLEAR OUTPUT LENGTH TAD BATBLK /INPUT BLOCK # DCA CREC TAD CBLOCK /OUTPUT BLOCK # DCA SREC DCA CEOF CLOOP, TAD CLENG CLL TAD [BUFRCS^20 /UPDATE LENGTH SNL DCA CLENG /IF NO OVERFLOW SZL ISZ CEOF /SIGNAL END CDF 0 STL CMA RTL RAL TAD [BUFCTL+1 DCA CCTL JMS I CDEVIN CCTL, 0 BUFFER CREC, 0 SKP JMP .+4 ISZ CEOF /FORCE EOF SPA CLA /HARD ERROR? JMP I (INERR /YES TAD CREC TAD [BUFRCS /UPDATE INPUT REC DCA CREC TAD CCTL /COMPUTE OUTPUT BLOCKS BSW /FROM INPUT CTLW CLL RAR TAD COUT DCA COUT TAD COUT STL TAD CHOLE SNL SZA CLA /OUTPUT .GT. HOLE? JMP I (OUTERR /YES, FATAL STL RAR /NO, WRITE TAD CCTL DCA SCTL JMS I [SYSTEM SCTL, 0 BUFFER SREC, 0 JMP I (HRDERR TAD SREC TAD (BUFRCS /UPDATE OUTPUT REC DCA SREC TAD CEOF /EOF? SNA CLA JMP CLOOP /NO TAD CBLOCK DCA BATBLK /NEW INPUT BLOCK FOR BOS CLA IAC CIF 10 JMS I [200 4 /CLOSE (PRE) TEMNAM COUT, 0 /OUTPUT LENGTH JMP I (HRDERR TAD [7 /RELATIVE SYS: ENTRY JMP I SYSCOP CLENG, 0 CDEV, 0 CEOF, 0 TEMNAM, FILENAME BATTM1.BI BATPOI, FILENAME BATCH.SV PAGE EOHNDL=. ZBLOCK ORIGIN-. /ONE CONTIGUOUS CORE LOAD FIELD 0 /DUMP PAGE 0 LITERALS HERE *ORIGIN BATIN, ZBLOCK BIMAX-1 SETJSW, 0 /ROUTINE TO SET JOB TAD (7377 /STATUS WORD TO INDICATE THAT CDF 0 /BATCH IS STILL IN CORE AND I (JSW TAD (400 DCA I (JSW JMS I (CDFRST /RESTORE TRUE DATA FIELD JMP I SETJSW PAGE /THIS IS THE ACTUAL BATCH MONITOR. THIS ENTRY IS FOR THE /INTERFACE WITH THE KEYBOARD MONITOR. BATVFY, 2214 /** THIS LOCATION IS VERIFIED BY BAT:,KM,CD ** BOS, CDF 0 /SEE IF CD FOUND AN ERROR TAD I (7777 /IF BIT 11 SET, IT DID. CLL RAR CLA IAC CMA AND I (7777 /ERASE IT DCA I (7777 JMS I (CDFRST /RESTORE DATA FIELD SZL CLA JMP CDERR JMS I (KMLINK /LINK I/O OF BOS AND K.M. BOSSB, TAD I (OUTPUT /*K* KEEP AT REL 214 DCA I (BOUTDV /SET MESSAGES JMS I (GLINE /READ LINE OF INPUT CLA IAC /INIT POINTER JMS I (GCHAR TAD (-"$ SNA CLA JMS I (GCHAR TAD (-"J /DON'T ECHO $JOB CARD HERE SNA CLA JMS I (GCHAR TAD (-"O SZA CLA JMS ECHO /BUT ECHO ANY OTHER LINE BOSRE, STL RAR /ENTER HERE FROM CD IF KM COMMAND SEEN AND I (DOLFLG /DO WE NEED $? STL RAL /SET LNK IF DOLLAR NEEDED JMS I (GCHAR /GET THE FIRST CHAR ON THE LINE SNL JMP I (NXPRG /NO $. LOOK FOR . OR / TAD (-"$ SZA CLA JMP BOSSB /NOT YET. JMP I (KMDOLR /SEE IF IT'S $JOB CDERR, JMS I (PRMESG CDEMSG JMP BOS /HERE TO ECHO $JOB CARD DOLECH, TAD I (BOSSW RTR /ECHO A PAGE OF $JOBS TO LPT ONLY SNL CLA /IS LPT OUTPUT? JMP DOLEC2 /NO TAD I (DOLFLG /ARE WE ACTIVE ALREADY? SNA CLA JMP DOLEC2 /YES: ONLY 1 $JOB TAD X214 JMS I (OUTCHR CLA CLL CMA RTL /-3 DCA GETDOL TAD (10 /OUTPUT BACKSPACE FOR LARGE CHARS ON PRINTRONIX JMS I (OUTCHR CLA IAC /INHIBIT CRLF JMS ECHO /AND LINE ISZ GETDOL JMP .-5 SKP DOLEC2, JMS ECHO TAD I (BOSSW AND (20 /IS HUSH ON? SNA CLA /DON'T PRINT JMS I (ECHOT /PUT $JOB TO TTY IF NOT TTY DCA I (DOLFLG X214, JMP BOSSB GETDOL, 0 /ROUTINE TO PUT BACK ANY $ READ BY BAT: CDF 0 TAD I (7777 /GET BATCH CONTROL WORD CLL RTR SZL CLA /TEST BIT 10 JMP GOTDOL /ITS ON - MUST PUT IN A $ JMS I (CDFRST /NO - SET DF TO THIS FIELD ISZ GETDOL JMP I GETDOL /TAKE SKIP RETURJ GOTDOL, CLL STA RTL /7775 AND I (7777 DCA I (7777 /REMOVE THE BIT TAD ("$ JMP I GETDOL /TAKE NON-SKIP RETURN WITH $ IN AC GETCOM, JMS I (MOVE -112 /PUT BUFFER INTO KEYBOARD MON. LINBUF+1 CDF 0 BEGLN TAD I (AMODE SZA CLA STL RAL CIF CDF 0 /AND GO PROCESS IT. DCA I (AMFLAG /SET ALTMODE SWITCH FOR CCL JMP I .+1 CARRET+7 /RETURN FROM XGLINE ECHO, 0 /ECHO INPUT LINE SNA CLA /IF AC<>0 NO INITIAL CRLF JMS I (CRLF CLA IAC ECHO2, JMS I (GCHAR SNA JMP ECO3 JMS I (OUTCHR JMP ECHO2 ECO3, TAD I (AMODE /NEED $ PRINTED? SZA JMS I (OUTCHR /YES JMS I (CRLF JMP I ECHO PAGE NXPRG, JMS TESTB /SEE IF WE HAVE . OR / -4 -".;GETCOM -"/;BOSSB -"$;KMDOLR -"*;BOSSB /ERRONEOUS CD CARD. JMP I (KJOB MSG, 0 TAD I (DOLFLG /IF $JOB SLEW SET, DON'T PAUSE SPA CLA JMP I MSG JMS I (ECHOT /ECHO ON TTY: IF NEEDED TAD I (BOSSW /IS OPERATOR AVAILABLE? CLL RAR SZL CLA JMP I MSG /NO. CONTINUE TAD (207 JMS I (TTYOUT JMS I (TTY JMP I MSG TESTB, 0 /TEST ROUTINE. TEST LIST AGAINST SNA /AC OR TAD I (LINBUF /FIRST CHAR DCA KMLINK TAD I TESTB DCA PRMESG /# ELEMENTS IN LIST TSTB2, ISZ TESTB /POINT TO ELEMENT TAD I TESTB ISZ TESTB TAD KMLINK /TEST IT SNA CLA JMP TSBOVR /A MATCH ISZ PRMESG JMP TSTB2 ISZ TESTB TAD KMLINK /RETURN WITH CHAR ON NO MATCH JMP I TESTB TSBOVR, TAD I TESTB DCA TESTB JMP I TESTB PRMESG, 0 /MESSAGE PRINTER; IF AC#0 NO TTY OUTPUT DCA TESTB TAD I PRMESG /INDEX INTO MESSAGE LIST DCA KMLINK JMS I (CRLF TAD ("# /BATCH ERROR SIGNAL JMS I (OUTCHR PRMSG2, TAD I KMLINK BSW JMS PNCH TAD I KMLINK JMS PNCH ISZ KMLINK JMP PRMSG2 /CYCLE UNTIL A 0 PNCH, 0 AND (77 SNA JMP PRTTY /COULD BE OPTIMIZED TAD (240 AND (77 TAD (240 JMS I (OUTCHR JMP I PNCH PRTTY, JMS I (CRLF TAD TESTB /PUT IT ON TTY, TOO? SZA CLA JMP PRMOUT /IF AC#0 IT WAS OVER TAD I (BOSSW BSW SPA CLA /WAS TTY FLAG SET? JMP PRMOUT /YES; DON'T PRINT TWICE TAD (TTYOUT DCA I (BOUTDV /SET TTY STA /SET TESTB TO SKIP JMP PRMESG+1 PRMOUT, TAD I (OUTPUT /RESTORE OUTPUT DCA I (BOUTDV ISZ PRMESG /SKIP ARGUMENT JMP I PRMESG KMLINK, 0 /LINK BATCH AND KEYBOARD I/O. JMS I (MOVE /PUT NEW CODE INTO KEYBOARD -3 KMLST1 CDF 0 PRINT+1 /THIS IS OUTPUT LINK JMS I (MOVE /NOW INPUT LINK. -3 KMLST2 CDF 0 XGLINE+1 JMP I KMLINK /** NEXT 3 WORDS LOAD INTO "PRINT+1" IN KEYBOARD MONITOR ** KMLST1, CIF CDF 0 /ALTERED AT RUN-TIME PRINT+3&177+5600 /ALLOWS TALKING THRU BATCH BOSPRT /** NEXT 3 WORDS LOAD INTO "XGLINE+1" IN KEYBOARD MONITOR ** KMLST2, CIF CDF 0 XGLINE+3&177+5600 /"JMP I .+1" BOS BOSPRT, JMS I (ERHDR /PRINT MESSAGE CIF CDF 0 JMP I .+1 PRINT+10 CDPRT, JMS I (ERHDR CIF CDF 0 /LINK BACK TO CD JMP I .+1 TYPE+10 PAGE GLINE, 0 /LINE COLLECTION ROUTINE TAD (LINBUF-1 DCA GLPTR GET, JMS I (BATIN /GO TO SPECIFIED INPUT DEVICE JMP GEOF /TIME-OUT OR FATAL JMS I (TESTB /TEST FOR SPECIAL CHARS. -5 -215;CARROT -212;GET /IGNORE LINE FEEDS. -214;GET /IGNORE FORM FEEDS -200;GET /IGNORE NULLS -337;BKAROW /CD DOESN'T LIKE _, ONLY < SKP BKAROW, TAD ("< ISZ GLPTR DCA I GLPTR TAD GLPTR TAD (-LINBUF-110 /OVERFLOW BUFFER? SPA CLA JMP GET /NOT YET. CARROT, TAD I GLPTR /GET LAST CHAR INPUT TAD (-244 /$? SZA CLA JMP NALTMD /NO TAD I GLPTR /GET $ SKP NALTMD, ISZ GLPTR /BUMP TO NEXT CHAR IF NO ALTMODE DCA AMODE /STORE ALTMODE FLAG DCA I GLPTR /CLEAR END CHAR IN BUFFER TAD I (LINBUF SNA CLA /WAS LINE NULL? JMP GLINE+1 /YES - IGNORE JMP I GLINE /NO: FOR THIS BOS AMODE, 0 GLPTR, 0 /DOLRD INTERPRETS $ CARDS DOLRD, 0 /GET THE NAME OF THE $ COMMAND GWRD2, JMS GCHAR /$ WAS READ ALREADY SNA JMP DLCRUD /FUNNY..NOTHING THERE! TAD (-240 /IGNORE LEADING SPACES SNA JMP GWRD2 AND (37 /NOT A SPACE. TAKE WHATEVER IT IS. BSW /ALSO LOWER CASE! DCA GLINE /KEYBOARD MON. WILL EXAMINE IT. JMS GCHAR AND (37 TAD GLINE JMS I (TESTB /TEST IT -7 -0516;END /$END CARD -1523;MSGST /$MSG CARD -1217;JOB /$JOB CARD -0522;DLERR /$ERROR CARD -0530;DLEXIT /$EXIT CARD -2205;DLRES /$RESUME CARD -2313;DLSKIP /$SKIP CARD DLCRUD, CLA /IGNORE CHAR ISZ DOLRD /$CRUD JOB, TAD I DOLRD DCA DOLRD JMP I DOLRD MSGST, JMS I (MSG /PRINT MESSAGE JMP DLCRUD /TREAT LIKE CRUD CDOLLR, JMS DOLRD CDKBD /$JOB CDGET /$OTHER KMDOLR, JMS DOLRD DOLECH /$JOB BOSSB /$OTHER DLERR, TAD I (DOLFLG /$ERROR TOGGLES SLEW ON/OFF DLEXIT, CLL RAL /$EXIT SLEWS TO $END OR $RES CML RAR /TOGGLE SLEW BIT DLRES, DCA I (DOLFLG /$RES GOES TO $END,$ERR,$EXI JMP DLCRUD /GO ON NORMALLY DLSKIP, TAD I (DOLFLG /EXECUTE NEXT LINE ON ERROR SPA CLA /SKIP IF NO ERROR JMP DLRES /ACT LIKE $RES ON ERROR JMS GLINE /SKIP LINE JMS I (ECHO /ECHO IT ANYWAY JMP DLCRUD /CONTINUE GEOF, JMS I (PRMESG /INDICATE FAILURE INPMSG /HANG ON INPUT ACTION JMS I (TTY /WAIT FOR INPUT JMP GET /AND RETURN GCHAR, 0 /GET A CHARACTER FROM LINE-BUFFER SZA CLA TAD (LINBUF-1 /INIT POINTER ON NZ AC SZA DCA GLPTR ISZ GLPTR TAD I GLPTR JMP I GCHAR TKRS, 0 /CHECK KEYBOARD 7600 TAD TKRS+1 KRS TAD (-7603 KSF CLA IAC /=1 IF NO FLAG JMP I TKRS PAGE LPTSET, 0 /LPT ROUTINE MODIFIED BY SET /** DON'T MOVE!! NOP /OR CMA PCLS /PRINT COMMAND NOP /OR SECOND PRINT COMMAND NOP /FILLER FOR SET PSKF /SKIP IOT JMP .-1 JMP I LPTSET ECHOT, 0 /ECHOES LINE ON TTY 40 TAD I (BOSSW /IS /T BIT ON? AND .-2 /IMPLEMENTED AS PATCH SZA CLA JMP I ECHOT /YES; DON'T ECHO TAD (TTYOUT /SET TTY AS OUTPUT DCA BOUTDV JMS I (ECHO /ECHO IT TAD I (OUTPUT DCA BOUTDV /RESET OUTPUT JMP I ECHOT OUTCHR, 0 JMS I BOUTDV JMP I OUTCHR BOUTDV, TTYOUT TTYOUT, 0 /TESTS AC FOR FORM FEED TAD (-214 SNA JMP TFORM /GENERATE LINE FEEDS TAD (214 JMS TTYPE JMP I TTYOUT TFORM, CLL STA RTL DCA NULOUT TAD (212 JMS TTYPE ISZ NULOUT JMP .-3 JMP I TTYOUT CTC, 0 /CHECK FOR ^C JMS I (TKRS SZA CLA JMP I CTC JMP I (BKILL TTY, 0 KCC KSF JMP .-1 JMS CTC KCC JMP I TTY NULOUT, 0 /DEEP-SIX THE CHARACTER JMS CTC JMP I NULOUT TTYPE, 0 /TELETYPE OUTPUT STUFF TLS JMS CTC JMS I (TKRS TAD (-20 /XOFF? SNA CLA JMS TTY /YES WAIT FOR OTHER CHAR TSF JMP .-1 JMP I TTYPE ERHDR, 0 /ERROR HEADER ROUTINE DCA TTY /SAVE CHARACTER TAD I (DOLFLG /FIRST ENTRY? SZA CLA JMP AFTER /NO. TAD (215 JMS OUTCND TAD (212 /MAKE SURE IT GOES JMS OUTCND /ON NEW LINE TAD ("# /ERROR PROMPT JMS OUTCND AFTER, TAD I (BOSSW /GET BATCH FLAGS WORD AND (1000 /SET $ SLEW FLAG NEGATIVE IF NO /E, STL RTL /NON-ZERO IN ANY CASE DCA I (DOLFLG TAD TTY JMS OUTCND JMP I ERHDR CRLF, 0 TAD (215 JMS OUTCHR TAD (212 J ULOUT SKP LDELAY, JMS LPTSET /PRINT NULL JMS CTC ISZ NULOUT /DELAY OVER? JMP LDELAY JMP I BOSLPT PAGE /*** KEEP THIS TABLE AT 6600 FOR USERS BCTLTM, 0 /**INIT** /NON-BATCH STATUS BINDEV, 0 /**INIT** /INPUT BOS ROUTINE SYCNTL, 0 /**INIT** /SYS CONTROL WORD SYSINH, 0 /**INIT** /RESIDENT ENTRY POINT FRSBLK, 0 /**INIT** /FIRST BLOCK OF BATCH FILE OUTPUT, 0 /**INIT** /OUTPUT BOS ROUTINE BOSSW, 0 /**INIT** /BATCH STATUS FLAG. SPLDEV, 0 /**INIT** /GETS SPOOL DEVICE # CDFRST, 1234 /**INIT** /FOR LEVEL2 BOSCDF, HLT /**INIT** /BOS DATA FIELD JMP I CDFRST /HERE FROM CD WHEN DONE TO ANALYZE CD AREA CDRENT, CDF 0 TAD I (DEFALT /GET THE DEFAULT EXTENSION JMS CDFRST /SET CURRENT DF JMS I (CDSCN /SCAN CD LINE KCC TCF /CLEAR FLAGS JUST LIKE CD WOULD CDF CIF 0 JMP I (CDOVER+3 /RESUME CD AT TERMINATION CODE /ERROR MESSAGES CDEMSG, IFNDEF GERMAN < TEXT /MONITOR OVERLAYED/> IFDEF GERMAN < TEXT /MONITOR ZERSTOERT/> BADMSG, IFNDEF GERMAN < TEXT /BAD LINE. =>$END/> IFDEF GERMAN < TEXT /SCHLECHTE ZEILE!/> SERMSG, IFNDEF GERMAN < TEXT /SYS: ERROR/> IFDEF GERMAN < TEXT /SYS-FEHLER/> 7777 /PROTECTION FOR CARD READER!! LINBUF, ZBLOCK 120 PAGE BATABT, JMS I (CDFRST /THIS CODE IS HERE FOR CCL! TAD I (BOSSW /GET BATCH SWITCHES AND (1000 /IF /E FLAG IS UP CCL ERRORS ARE FATAL, CLL RTL JMP CDKILX /WE SHOULD ABORT BATCH ON THEM CDGET, JMS I (GLINE /READ INPUT JMS I (ECHO TAD I (DOLFLG /$JOB FLAG UP? SPA CLA JMP CDKBD /SLEW UNTIL $JOB CLA IAC JMS I (GCHAR JMS I (TESTB /TEST PROMPT CHAR. -4 -"*;CDLINE /* IS OK -"/;CDGET /REMARK -"$;CDOLLR -".;CDKBD /RECALL KEYBOARD MON. KJOB, CLA /IGNORE CHAR JMS I (PRMESG BADMSG /ILLEGAL CHARACTER CDKILL, STL CLA RAR /4000 CDKILX, DCA I (DOLFLG /ABORT TO NEXT $JOB JMS I (SETJSW /MARK BATCH IN CORE CIF CDF 0 JMP I .+1 7605 /RESTART. CDKBD, CIF 0 JMS I (SYSTEM 1000 0 KMREC SYIERR, SKP CLA JMP .+4 JMS I (PRMESG SERMSG JMP I (BKILL JMS I (SETJSW /MARK BATCH IN CORE JMS I (KMLINK /LINK TO NEW KEYBOARD TAD (BOSRE /WE WANT TO RETAIN OLD LINE CIF CDF 0 DCA I (BCHGO+2 JMP I .+1 KMNTRY CDLINE, JMS I (MOVE /PUT LINE INTO CD -112 LINBUF+1 CDF 0 CDBEGLN TAD I (AMODE CDF 10 SZA CLA /CHECK WHETHER ALTMODE TERMINATED LINE STL RAR /IT DID - SET CD ALTMODE FLAG DCA I (MPARAM-1 CIF CDF 0 JMP I .+1 ANALYZ DEVKIL, JMS I (PRMESG PTRMSG JMP CDKILL NWSTRT, JMS I (MOVE /RESET LEVEL1 PARAMS -3 /DO NOT RESET 'SPLNUM' OLDBLK LVCDF2, CDF 0 SYBLKN TAD (7 6770 /RELEASE MULTI8 CLA JMP CDKILX OLDBLK, ZBLOCK 3 HLPMSG, IFNDEF GERMAN < TEXT /NEED OPERATOR/> IFDEF GERMAN < TEXT /HILFE NOETIG!/> PTRMSG, IFNDEF GERMAN < TEXT /ILLEGAL INPUT/> IFDEF GERMAN < TEXT /KEINE HILFE!!/> EOBMSG, TEXT /END BATCH/ SPLMSG, IFNDEF GERMAN < TEXT /SPOOLING TO FILE: /> IFDEF GERMAN < TEXT /SPULE NACH DATEI: /> *.-1 BCHFIL, FILENAME BTCHA0.SP 0 PAGE /SUBROUTINE TO ANALYZE CD AREA - ENTER FROM ANY FIELD /WITH DEFAULT EXTENSION IN AC CDSCN, 0 DCA EXT /SAVE EXTENSION RDF TAD (CDF CIF 0 DCA CDSCRT /SAVE RETURN FIELD TAD (7600 DCA CDTEMP /LOOK AT CD AREA MTHREE DCA CDCNT CDSCAN, JMS I (CDFRST TAD I (SPLDEV SNA JMP NCKSPL /IF NO SPOOL DEV;NO SPOOLING MQL /SAVE SPOOL DEV JMS DCBGET JMP NCKSPL /NO OUTPUT - DON'T LOOK SPA CLA /SPOOL NON-FILE DEVICES JMP NCKSPL /FILE STRUCTURED OUTPUT TAD I CDTEMP AND (7760 MQA /RESET CD AREA DCA I CDTEMP JMS I (CDFRST TAD I (BOSSW CLL RTL SZL CLA JMP NCKSPL /DON'T PRINT FILENAME ON NON FS ISZ CDTEMP /POINT TO FILENAME AREA TAD I (SPLNUM AND (11 CIA TAD (11 SNA CLA TAD (66 IAC TAD I (SPLNUM DCA I (BCHFIL+2 JMS I (MOVE -4 BCHFIL CDF 10 CDTEMP, 0 /76XX JMS I (PRMESG /PRINT FILENAME SPLMSG TAD I (BCHFIL+2 /SET NEW FILENAME DCA I (SPLNUM CLA CMA NCKSPL, TAD CDTEMP TAD (5 DCA CDTEMP TAD EXT SZA TAD (-5200 /WAS THIS A SPECIAL MODE DECODE? SNA CLA JMP CDSCRT /YES - LOOK NO MORE ISZ CDCNT JMP CDSCAN /KEEP LOOKING CDX1, TAD (-11 /SCAN INPUT AREA DCA CDCNT TAD (7617 DCA CDTEMP /PICK UP MANUAL INPUTS. INPSCN, JMS DCBGET /ANY INPUTS? JMP CDSCRT /3 GUESSES! AND (770 JMS I (CDFRST SNA JMP RBELL /TELETYPE INPUT - CHECK OPERATOR TAD (-10 SZA CLA JMP CDX3 /OK INPUT DEVICE AC4000 /PTR: INPUT - IS BATCH FROM PTR? RBELL, IAC /OPERATOR AVAILABLE? AND I (BOSSW SZA CLA JMP I (DEVKIL /NO. ABORT THE JOB TAD (207 JMS I (TTYOUT JMS I (PRMESG HLPMSG /MANUAL INTERVENTION REQUIRED. JMP CDSCRT CDX3, CLA CLL CML RTL TAD CDTEMP DCA CDTEMP ISZ CDCNT JMP INPSCN CDSCRT, HLT JMP I CDSCN /RETURN TO CALLER DCBGET, 0 CDF 10 TAD I CDTEMP /IS THERE A DEVICE? SNA JMP I DCBGET /NO RETURN 1 AND (17 /ISOLATE IT TAD (DCB-1 /DEV INFO TABLE DCA CDTMP2 TAD I CDTMP2 /GET DEVICE INFO ISZ DCBGET /RETURN 2 JMP I DCBGET EXT, 0 CDCNT, 0 CDTMP2, 0 PAGE /THIS ROUTINE IS NOT REFERENCED FROM BATCH- /IT PROVIDES A WAY FOR A USER TO OUTPUT MESSAGES /TO THE BATCH LOG DEVICE BATOUT, 0 /CALLABLE FROM ANY FIELD DCA MOVE /WITH CHARACTER IN AC RDF TAD CDCF0 /GET CDF CIF TO CALLING FIELD DCA BATORT JMS I (CDFRST /CDF TO CURRENT FIELD TAD MOVE JMS I (OUTCND BATORT, HLT JMP I BATOUT INPMSG, IFNDEF GERMAN < TEXT /INPUT FAILURE/> IFDEF GERMAN < TEXT / LESE-FEHLER /> /ENTER HERE FROM COMMAND DECODER WHEN CD CALLED CDBOS, JMS MOVE -3 CDLST1 CDF 0 TYPE+1 /LINK ERROR PRINTOUT TO BOS JMS MOVE -3 CDLST2 MCDF0, CDF 0 CGLINE /LINK INPUT TO BOS JMS MOVE -3 CDLST3 CDF 0 CDOVER /EXIT FROM LINE ANALYSIS CIF CDF 0 JMP I .+1 RESTRT+1 /START UP CD /** THESE 3 WORDS LOAD INTO "TYPE+1" IN THE COMMAND DECODER ** CDLST1, CIF CDF 0 TYPE+3&177+5600 /"JMP I .+1" CDPRT /** THESE 3 WORDS LOAD INTO "CGLINE" IN THE COMMAND DECODER ** CDLST2, CIF CDF 0 CGLINE+2&177+5600 /"JMP I .+1" CDGET /RETURN TO CDGET AFTER ZEROING CD AREA /** THESE 3 WORDS LOAD INTO "CDOVER" IN THE COMMAND DECODER ** CDLST3, CIF CDF 0 CDOVER+2&177+5600 /"JMP I .+1" CDRENT END, TAD I (BOSSW AND (20 /IF HUSH DON'T PRINT JMS I (PRMESG EOBMSG BKILL, TAD LEVEL2 SZA CLA JMP OLDBOS TAD I PBCTLT CDF 0 DCA I (7777 /SET BATCH INACTIVE CDF 10 STA TAD I (7700 /RESET USR SWITCH DCA I (7700 /TO PRESERVE CORE ACROSS BATCH TERMINATION CDCF0, CDF CIF 0 JMP I (7600 OLDBOS, JMS MOVE -12 LVOLD LVCDF1, CDF 0 PBCTLT, BCTLTM DCA LEVEL2 CIF 0 JMS I (SYSTEM HNDCTL, 100 BATIN HNDBLK, 0 JMP I (SYIERR CIF 0 JMS I (SYSTEM LVCTRL, 7600-ORIGIN%2+4000 ORIGIN LVBLK, 0 JMP I (SYIERR JMP I (NWSTRT LVOLD, ZBLOCK 10 LEVEL2, 0 0 MOVE, 0 RDF TAD MCDF0 DCA MVIPUT TAD I MOVE DCA MVTMP /COUNT ISZ MOVE TAD I MOVE DCA MVPT1 /INPUT STUFF ISZ MOVE TAD I MOVE DCA MVOPUT /OUTPUT FIELD ISZ MOVE TAD I MOVE DCA MVPT2 ISZ MOVE MVIPUT, HLT TAD I MVPT1 ISZ MVPT1 MVOPUT, HLT DCA I MVPT2 ISZ MVPT2 ISZ MVTMP JMP MVIPUT JMS I (CDFRST JMP I MOVE MVTMP, 0 MVPT1= BATOUT MVPT2= BATORT PAGE FIELD 0 *200 $$$$$$$$$$