--- /dev/null
+/3 CONCISE OS8 BATCH PROCESSOR 1-AUG-1975
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT (C) 1975,1977 BY DIGITAL EQUIPMENT CORPORATION
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/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 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 DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
+/
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
+/DIGITAL.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f/EF,RL,SR
+
+/ABSTRACT---
+/BATCH IS THE INITIALIZING PROGRAM FOR THE OS/8 BATCH
+/PROCESSING MONITOR. TO SET UP A BATCH RUN, TYPE
+/ .R BATCH
+/BATCH WILL CALL THE COMMAND DECODER TO OBTAIN ITS
+/PARAMETERS AND INPUT FILE LOCATION.
+
+ VERSON= 7
+
+
+
+/ BATCH SWITCHES:
+
+/C BATCH FROM CARDS
+/E IGNORE KMON, CD, AND CCL ERRORS
+/H HUSH (SUPPRESSES $JOB, #END, AND ECHOING)
+/P BATCH FROM PAPER TAPE
+/Q QUIET - NO BATCH LOG
+/T FORCE BATCH LOG TO TELETYPE
+/U UNATTENDED
+/6 USE 026 CARD CODES (ONLY IF /C)
+
+
+/MAINTENANCE RELEASE CHANGES BY S.R. ON 1-AUG-75:
+
+/1. CHANGED VERSION NUMBER TO 6
+/2. INCORPORATED V5A PATCH SEQ # 1 APR-75 DSN
+/ ALLOWS BATCH TO PASS ALTMODE TO KBM
+/3. INCORPORATED V5B PATCH SEQ #2 17-JULY-75 WSN
+/ SLOWS BATCH DOWN WHEN READING FROM CARDS
+/4. ALLOW BATCH TO IGNORE NULLS FROM BATCH STREAM
+/ (PATCH TO BE PUBLISHED IN DSN.)
+/5. SET BATCH SO THAT IT RESTORES OLD SOFTWARE CORESIZE
+/ UPON NORMAL TERMINATION.
+
+/CHANGES BY S.R. ON 3-FEB-77:
+
+/1. ADDED HUSH SWITCH (/H)
+/2. SAVED REST OF 7777 AROUND BATCH
+/3. FIXED BUG CONCERNING MANUAL HELP NEEDED
+/4. ALLOWED CORE IMAGE TO BE PRESERVED AFTER BATCH TERMINATION
+\f/SYSTEM DEPENDENT PARAMETERS
+
+ AMFLAG=17 /ALTMODE FLAG FOR KBM
+ CDREC=51 /COMMAND DECODER
+ KMREC=7 /KEYBOARD MONITOR
+ BUFFER=3000
+ JSW=7746 /JOB STATUS WORD
+ DCB=7760 /DEVICE CONTROL BLOCK
+ MTWO=CLA CLL CMA RAL
+ MTHREE=CLA CLL CMA RTL
+ SYSTEM=7607
+ MPARAM=7643
+/********************************************
+ KEYMON=403
+ BEGLN=1000
+ PRINT=200
+ XGLINE=1200
+ BATCH=35 /REFERS TO KEYBOARD MONITOR!!!!!!!
+ BCHGO=46 /THEY MUST!!!!! BE CORRECT!!!!!!
+ CBATCH=4562 /CONTENTS OF LOC "BATCH" IN KEYBOARD MONITOR
+/*******************************************
+ 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=42 /V3D NOT NEEDED
+ LKUPSW=245 /V3D IF CONTENTS=0, IN SPECIAL MODE
+ OUTSW=41 /THESE VALUES MUST BE ALTERED ALSO.
+ NAMECT=31
+ DEV1=33
+ RESTRT=676
+/********************************************
+ ORIGIN=5400
+ PSKF=6661 /LE8 IOT'S
+ PCLS=6666
+ RCRA=6632 /CARD READER IOT'S
+ RCSE=6672
+ RCSD=6671
+ RCSF=6631
+ RCRD=6674
+/*****************************
+\f/BATCH USES CERTAIN SYSTEM WORDS AS FLAGS AND STATUS
+/INDICATORS. THEY ARE:
+
+/LOC. 07777. THIS IS USED AS THE BATCH IN PROGRESS FLAG.
+/BIT 1 IS BATCH IN PROGRESS. (BIP) =1 MEANS BATCH IS ON
+/BITS 6-8 HOLD THE FIELD WHERE BATCH IS SITTING
+/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 LPT OR TTY LISTINGS ARE TO BE SPOOLED
+/BIT 2: 1 IF KMON AND CD ERRORS ARE NON-FATAL
+/BIT 10: 1 IF LP08 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= 7776 /SPOOL SEQUENCE NUMBER
+ SYCNT= 7775 /CHARACTER COUNT IN BUFFER
+ SYBLKN= 7774 /SYSTEM DEVICE BLOCK NUMBER
+
+/IF SPOOLING IS USED, LOC. N7776 IS USED TO HOLD THE
+/XX IN 'BTCHXX.TM'.
+
+/BATCH INITIALIZER PAGE 0
+ *16
+XR1, 0
+XR2, 0
+TEMP, 0
+TEMP2, 0
+COUNT, 0
+BOSCTL, 1101 /CONTROL WORD TO READ/WRITE BOS
+CDFTOP, 0
+TOPCDF, HLT /CDF TO TOP FIELD
+ JMP I CDFTOP
+T1, 0
+T2, 0
+ PAGE
+\fSTART, SKP
+ JMP BCHAIN /IF CHAINED TO
+ JMS I (GETCOR /DETERMINE CORE SIZE; PUT IN 7777
+BATASK, CIF 10
+ JMS I [200
+ 5
+ 0211 /.BI ASSUMED EXT
+ SKP
+BCHAIN, JMS I (GETCOR
+ DCA I [BOSSW
+ CDF 10
+ 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 T1 /GET STARTING BLOCK
+ TAD I (7617
+ SNA
+ JMP NOTSYS /NO FILE - BATCH FROM PTR OR CDR
+ 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 CLA
+ JMP INDERR /NO
+ TAD I T2 /GET DEVICE HANDLER ENTRY POINT
+ CDF 0
+ DCA I (SYSINH /STORE AS BATCH INPUT HANDLER
+ JMS CDFTOP
+ TAD T1
+ DCA I (SYBLKN
+ TAD (-601
+ DCA I (SYCNT /SET UP PARAMETERS FOR INPUT FILE
+ CDF 0
+ TAD (SYSIN-1
+ JMP STODEV /INPUT DEV = SYS
+
+NOTSYS, TAD I (MPARAM
+ RTL /GET C FLAG IN SIGN BIT
+ SMA CLA
+ JMP NOTCDR
+ JMS I (CHANGE /SET 026/029 CARD CODE
+ TAD (CDR-1
+ JMP STODEV /INPUT DEV = CDR
+\fNOTCDR, TAD I [MPARAM+1
+ AND (400
+ CDF 0
+ SNA CLA
+ JMP BATASK /NO INPUT SPECIFIED
+ STL RAR
+ DCA I [BOSSW /PTR INPUT FLAG
+ TAD (PTR-1
+STODEV, JMS I (MVINSB /MOVE THE PROPER ROUTINE INTO THE BATCH MONITOR
+ CDF 10
+ TAD I [MPARAM+1
+ CDF 0
+ AND (210 /GET /Q AND /U SWITCHES
+ CLL RTL
+ RTL
+ RAL / /Q INTO LINK
+ SZA CLA
+ ISZ I [BOSSW /SET UNATTENDED BIT IF /U SPECIFIED
+ SNL
+ JMP .+3 /NO /Q
+ TAD (NULOUT-TTYOUT /EIGHTY-SIX THE BATCH LOG
+ JMP NOLPT/SET LPT MODE SO $MSG WILL ECHO
+ JMS I (LPTTST /DO WE HAVE AN LP, LS, OR LV LINE PRINTER?
+ JMP NOLPT /NO
+ CDF 10
+ TAD I [MPARAM+1
+ CDF 0
+ AND (20 /CHECK /T SWITCH
+ CLL CIA
+ SZL CLA /SKIP IF /T SPECIFIED
+ TAD (BOSLPT-TTYOUT
+NOLPT, TAD (TTYOUT
+ DCA I (OUTPUT /SET OUTPUT DEVICE TO TTY OR LPT OR NULOUT
+ RTL
+ TAD I [BOSSW
+ DCA I [BOSSW /AND SET FLAG
+ CDF 10
+ TAD I [7600
+ CDF 0
+ SNA
+ JMP I (CONT /NO SPOOLING
+ AND [17
+ DCA T1
+ TAD T1
+ TAD (DCB-1
+ DCA T2
+ CDF 10
+ TAD I T2
+ CDF 0
+ JMP I (SPCONT
+\fINDERR, JMS I [MESSG
+ NODEV
+ JMP BATASK
+ PAGE
+\fSPCONT, SMA CLA
+ JMP BADSPL
+ TAD T1
+ DCA I (SPLDEV
+ STL RTR
+ TAD I [BOSSW
+ DCA I [BOSSW
+CONT, JMS I (EOPTN /CHECK FOR /E SWITCH
+ TAD (BATPTR /SET POINTER TO BATCH.SV
+ DCA FILPTR
+ CLA IAC /DO LOOKUP ON SYS
+ CIF 10
+ JMS I [200
+K2, 2
+FILPTR, BATPTR
+ 0 /WHO CARES ABOUT THE LENGTH?
+ JMP NOBACH /BATCH FILE NOT FOUND
+ TAD I K7777 /PUT IN FIELD OF BOS
+ AND (70
+ TAD (CDF 0
+ DCA CDFBOS
+ TAD (201
+ JMS I [SYS /READ AND ALTER KEYBOARD MON.
+ BUFFER
+ KMREC
+ /GET RECORD # OF BOS
+ JMS I [VERTST /GET VERSION OF MONITOR
+ TAD (EOINIT
+ AND (7400
+ CLL RTL
+ RTL
+ RAL
+ TAD K2
+ TAD FILPTR
+ DCA BOSREC /WE WILL RE-WRITE BOS LATER
+ TAD BOSREC /ALTER KEYBOARD MONITOR
+ DCA I (BUFFER+BATCH+3 /RECORD #
+ TAD CDFBOS
+ AND (70 /ALTER CONTROL WORD
+ TAD BOSCTL
+ DCA I (BUFFER+BATCH+1
+ TAD BOSREC-1
+ DCA I (BUFFER+BATCH+2
+ CLA CLL CML RTL
+ TAD CDFBOS
+ 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 CDFBOS /NOW FILL IN THE COMMAND DECODER
+ DCA I (TT+BUFFER
+ TAD (CDBOS
+ DCA I (DVICE+BUFFER /ALLOW CD TO CHECK BATCH VALIDITY
+ TAD I (CDBOS
+ CIA /STORE COMPLEMENT ALSO
+ DCA I (OUTSW+BUFFER
+ CLL CML RTL /CREATE CIF CDF BATCH
+ TAD CDFBOS
+ DCA I (NAMECT+BUFFER
+ TAD (CDBOS
+ DCA I (DEV1+BUFFER
+ TAD (4200
+ JMS I [SYS /RE WRITE CD.
+ BUFFER
+ CDREC
+ JMS I (SETH /SET HUSH IF /H SPECIFIED
+ CLA CLL CML RAR
+ TAD BOSCTL
+ JMS I [SYS /INPUT POINTERS SET UP.
+ ORIGIN&7400
+BOSREC, HLT
+ CLA CLL CML RTR /BATCH IN PROGRESS
+ JMS I [INCOR
+K7777, 7777
+ CLA STL RAR /4000
+ DCA I (DOLFLG /SET FOR INITIAL $JOB
+ JMS I (MOVE /PUT IMAGE OF BOS INTO HIGH CORE
+ ORIGIN-7600
+ ORIGIN
+CDFBOS, HLT
+ ORIGIN
+ TAD (0160 /SET SPOOL FILENAME TO BTCHA0
+ JMS CDFTOP
+ DCA I (SPLNUM
+BATRET, CIF CDF 0
+ JMP I [7605
+\f
+NOBACH, JMS I [MESSG /BATCH.SV NOT THERE
+ NBATCH
+ JMP BATRET
+BADSPL, JMS I [MESSG
+ SPLERR
+ JMP I (BATASK
+ PAGE
+\fMESSG, 0 /MESSAGE PRINTING ROUTINE
+ CLA
+ CDF 0
+ JMS I [CRLF /GENERATE CARRIAGE RET., LINE FEED
+ TAD I MESSG /ADDRESS OF ERROR MESSAGE
+ ISZ MESSG /POINT TO RETURN
+ DCA TEMP
+MCONT, TAD I TEMP /GET TEXT CHARACTERS IN AC
+ CLL RTR
+ RTR
+ RTR
+ 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 MSGXIT /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 I (TTYOUT
+ JMP I PCHAR
+MSGXIT, TSF
+ JMP MSGXIT
+ JMP I MESSG
+
+PCRLF, JMS I [CRLF
+ JMP I PCHAR
+\fLZERO=0
+GETCOR, 0 /ONCE ONLY ROUTINE TO DETERMINE CORE SIZE
+ TAD I (7777 /GET CORE-SIZE WORD
+ RTL /PUT BATCH IN-PROGRESS BIT IN LINK
+ SZL CLA /ARE WE RUNNING BATCH FROM A BATCH JOB?
+ JMP .+3 /YES, DON'T TOUCH ORIGINAL CORE SIZE
+ TAD I (7777 /NO, GET OLD SOFTWARE CORE SIZE
+ DCA I (OLDCOR /SAVE CURRENT SOFTWARE CORE SIZE
+ TAD I (7777 /GET BATCH CTL WD
+ 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 INCOR
+ TAD INCOR
+ TAD (-10 /TEST FOR AT LEAST 12 K
+ SPA SNA
+ JMP NOCORE
+ TAD (-60 /LIMIT TO FIELD 6, SO AS NOT
+ SNA CLA /TO DISTURB ROM IN F. 7
+ TAD (-10
+ TAD INCOR
+ DCA INCOR
+ TAD INCOR
+ TAD (CDF
+ DCA TOPCDF
+ TAD I (7777
+ AND (7707 /V3D
+ TAD INCOR
+ DCA I (7777
+ TAD INCOR
+ TAD (201
+ DCA I (SYCNTL
+ TAD TOPCDF
+ DCA I (BOSCDF
+ JMP I GETCOR
+NOCORE, CLA
+ JMS I [MESSG
+ COR8
+ JMP I [7600
+K, -10
+
+INCOR, 0 /INCLUSIVE OR ROUTINE. USE THE
+ 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
+ PAGE
+\fPTR, 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 TCTRLC
+ RFC
+PTM2, RSF
+ JMP PTMER
+ TAD PTR200 /FORCE PARITY ON
+ RRB
+PTRISZ, ISZ PTR
+PTRRET, HLT
+ JMP I PTR
+PCDIF0, CDF CIF 0
+TCTRLC, CTRLC
+
+PTMER, AND I 0
+ AND I 0
+ ISZ PTIMER
+ JMP PTM2 /TIMES OUT IN 16 MS.
+ JMP PTRRET
+PTIMER, 0
+PTR200, 200
+PTRDOL, GETDOL
+\f/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
+ SKP CLA
+ JMP I SYS
+ JMS I (PRMESG
+ SERMSG
+ JMP I (BATRET
+
+BATPTR, FILENAME BATCH.SV
+\fCHANGE, 0 /ROUTINE TO ALTER CARD TABLE
+ CDF 10
+ TAD I (MPARAM+2
+ CDF 0
+ AND (10 /GET /6 SWITCH
+ SZA CLA /IF IT IS SPECIFIED,
+ TAD (C026-C029 /USE DEC 026 CARD CODES,
+ TAD (C029 /OTHERWISE USE DEC 029 CODES
+ DCA XR1 /ADDDRESS OF CORRECT LIST
+ TAD (CLST-1
+ DCA XR2 /THE LOCS. THAT GET ALTERED
+ TAD [-15
+ DCA COUNT /13 ENTRIES.
+ TAD I XR2
+ DCA CHPTR
+ TAD I XR1
+ DCA I CHPTR /ALTER TABLE IN MONITOR.
+ ISZ COUNT
+ JMP .-5
+ JMP I CHANGE
+CHPTR, 0
+
+CLST, CDT+5 /ADDRESSES OF CARD CONVERSION LOCS.
+ CDT+6
+ CDT+7
+ CDT+15
+ CDT+16
+ CDT+17
+ CDT+25
+ CDT+26
+ CDT+27
+ CDT+30
+ CDT+35
+ CDT+36
+ CDT+37
+
+\fC026=.-1
+ 7735 /CODES FOR 026 CARDS
+ 4076
+ 0774;3314;1002;0305;3204;1273;3606;1341;3716;1175
+ 3401
+
+C029=.-1
+ 3203;4007;3502;7514;0577;3637;0104;1211;3374;0641;7316;3410
+ 1376
+
+SETH, 0 /SET HUSH
+ CDF 10
+ TAD I (MPARAM /LOOK AT A-L SWITCHES
+ AND (20 /IN PARTICULAR, LOOK AT /H BIT
+ CDF 0
+ DCA I (HUSH /SAVE THIS BIT
+ JMP I SETH
+
+ PAGE
+\fBILEN= 0 /INITIALIZE MAX INPUT ROUTINE LENGTH
+
+SYSIN, 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
+ TAD BLOK /RE-READ BUFFER?
+ SZA CLA
+ JMP SYGETC /NO. STILL THERE
+ TAD I PSYBLKN
+ DCA BLOK
+ TAD I PSYCNT
+IOSYS, DCA SYCHCN /RESTORE CHARACTER COUNT
+ CIF 0
+ JMS I SYSINH /READ THE BLOCK
+SYCNTL, 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 PCTRLC
+ 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
+/ SNA /V3C
+/ JMP SYSISZ /RETURN NULL AS NULL
+ TAD SYSM32
+ SZA
+ JMP CHOUT /NOPE. OK
+ TAD SYEXT /^Z. DISABLE INPUT
+ DCA SYSIN4
+SYEXT, JMP SYSRET
+CHOUT, TAD SYS232
+SYSISZ, ISZ SYSIN
+SYSRET, HLT /CDF CIF RETURN FIELD
+ JMP I SYSIN
+
+SYCHCN, 0
+WPTR, 0
+SYSCHR,
+SYTEMP, 0
+PSYBLK, SYBLKN
+PSYCNT, SYCNT
+SYSINH, 0 /GETS ADDRESS OF INPUT HANDLER (7607 OR CO-RES)
+PSYIER, SYIERR
+SYS601, 601
+SYM601, -601
+SYSM3, -3
+SYS3, 3
+PCTRLC, CTRLC
+SY7400, 7400
+SYS177, 177
+SYSM32, -32
+SYS232, 232
+SYCDIF, CDF CIF 0
+SYSDOL, GETDOL
+
+ IFZERO .-SYSIN-BILEN&4000 <BILEN=.+1-SYSIN>
+ PAGE
+\f/CARD READER HANDLER. BUFFERS AN ENTIRE CARD IN THE LINE BUFFER.
+/ON END OF CARD, WE CAST OUT EXTRANEOUS SPACES IN THE BUFFER
+
+CDR, 0
+ RDF
+ TAD CCDIF0
+ DCA CDRRET
+ JMS I CDRDOL /CHECK FOR $ INSERTION
+ JMP CDRISZ /YES
+ ISZ CHCNT /STILL CHARACTERS IN BUFFER?
+ JMP GETCH /YES.
+NEWCRD, TAD PLNBUF
+ DCA CDRPTR /NO. READ A NEW CARD
+CSLCT, JMS I CCTRLC
+ RCSE /SELECT A CARD
+ JMP CSLCT
+RDNEXC, DCA CTIMER
+RDCOLM, RCSF /WAIT FOR DATA
+ JMP EOC /AND CHECK FOR END OF CARD
+ RCRA
+ CLL RAR /TRANSLATE INTERNAL INTO ASCII
+ TAD PCDT
+ DCA CTEMP
+ TAD I CTEMP
+ SZL /LEFT OR RIGHT?
+ JMP .+4
+ RTR;RTR;RTR
+ AND CDR77
+ TAD CDR240
+ ISZ CDRPTR
+ DCA I CDRPTR
+ ISZ CHCNT /CAN'T SKIP
+EOC, RCSD /CARD DONE?
+ JMP TIME /NO - CHECK TIMEOUT
+ TAD CHCNT /GET REAL NUMBER OF CHARACTERS
+ CMA
+ DCA CHCNT
+CHKSPC, TAD I CDRPTR
+ TAD CDM240
+ SNA CLA
+ JMP SPCIG
+ ISZ CDRPTR
+CDCR, TAD CDR215 /INSERT END OF LINE MARKER
+ DCA I CDRPTR
+ TAD PLNBUF
+ DCA CDRPTR
+GETCH, ISZ CDRPTR
+ TAD I CDRPTR
+CDRISZ, ISZ CDR
+CDXIT, RCRD /CLEAR CARD DONE FLAG
+CDRRET, HLT
+ JMP I CDR
+
+SPCIG, CLA CMA /BACK UP ONE CHAR
+ TAD CDRPTR
+ DCA CDRPTR
+ ISZ CHCNT /IF SKIP, IT'S A BLANK LINE
+ JMP CHKSPC
+ JMP CDCR
+
+TIME, AND I 0 /CHECK TIME OUT - FIRST DELAY A WHILE
+ TAD CDM240 /V3C
+ DCA TIME /TIME OUT A LOT
+ ISZ TIME
+ JMP .-1
+ ISZ CTIMER
+ JMP RDCOLM
+ DCA CHCNT
+ JMP NEWCRD /CARD HUNG - WAIT FOR READER READY
+CCDIF0, CDF CIF 0
+CHCNT, -1
+PLNBUF, LINBUF-1
+CCTRLC, CTRLC
+PCDT, CDT
+CDR77, 77
+CDR240, 240
+CDM240, -240
+CDR215, 215
+CDRPTR, 0
+CTEMP, 0
+CTIMER, 0
+CDRDOL, GETDOL
+
+ IFZERO .-CDR-BILEN&4000 <BILEN=.+1-CDR>
+\f/*** THIS CAUSES BUGS TO RTS/8 BECAUSE IT OUTPUTS TO LPT!
+
+LPTTST, 0 /SKIP IF BATCH-TYPE LINE PRINTER AVAILABLE
+ TAD (240
+ PCLS /PRINT AN INNOCUOUS BLANK
+ CLA
+ AND I 0
+ AND I 0 /FLAG COMES UP IN UNDER 10 MICROSECONDS
+ AND I 0
+ PSKF /WELL?
+ JMP I LPTTST /NO WAY!
+ CLA IAC /DON'T BE FOOLED - COULD STILL BE AN ANALEX
+ 6654 /LOAD ANALEX BUFFER
+ SNA CLA
+ JMP ANALEX /IF IOT CLEARED AC, ITS AN ANALEX
+ TAD (215
+ PCLS /CLEAR LINE BUFFER BY PRINTING CR
+ PSKF
+ JMP .-1
+ CLA
+ ISZ LPTTST
+ JMP I LPTTST /TAKE SKIP RETURN
+
+ANALEX, 6652 /CLEAR FLAGS
+ 6662 /CLEAR BUFFER
+ JMP I LPTTST /TAKE NO LPT RETURN
+ PAGE
+\fNBATCH, TEXT /BATCH.SV NOT FOUND ON SYS:/
+COR8, TEXT /INSUFFICIENT CORE FOR BATCH RUN/
+BADMON, TEXT /WRONG OS8 MONITOR/
+NODEV, TEXT /DEV NOT IMPLEMENTED_/
+SPLERR, TEXT /ILLEGAL SPOOL DEVICE_/
+VERMSG, TEXT /BATCH /
+ *.-1
+ VERSON+2660 /"VN"
+ TEXT /A_/
+\fVERTST, 0
+ TAD I (BUFFER+BATCH /SHOULD BE 4562 IN V3
+ TAD (-CBATCH
+ SNA CLA
+ JMP I VERTST
+ JMS I [MESSG
+ BADMON
+ JMP I [7600
+
+MVINSB, 0
+ DCA XR1 /ADDR OF INPUT ROUTINE
+ TAD (BATIN-1 /ADDR OF PLACE IN BATCH MONITOR
+ DCA XR2
+ TAD (-BILEN
+ DCA BMVCNT
+ TAD I XR1
+ DCA I XR2
+ ISZ BMVCNT
+ JMP .-3 /MOVE ROUTINE UP
+ JMP I MVINSB
+BMVCNT, 0
+
+EOPTN, 0 /CHECK FOR /E OPTION
+ CDF 10
+ TAD I (MPARAM
+ CDF 0
+ AND (200 /ISOLATE E SWITCH
+ SNA CLA
+ JMP I EOPTN /NOT ON
+ TAD (1000
+ JMS I (INCOR /OR 1000 INTO BOSSW
+ BOSSW
+ JMP I EOPTN
+
+ EOINIT=.
+ PAGE
+\f FIELD 0 /DUMP PAGE 0 LITERALS HERE
+\f *ORIGIN /THIS CODE ACTUALLY EXECUTES IN TOP FIELD!
+
+BATIN, ZBLOCK BILEN /BATCH INPUT ROUTINE GOES HERE
+
+END, TAD I (HUSH
+ SZA CLA
+ JMP BKILL /SUPPRESS #END WHEN HUSHED
+ JMS I (PRMESG
+ EOBMSG
+BKILL, CDF 10
+ STA
+ TAD I (7700 /V3D
+ DCA I (7700 /ALLOWS CORE IMAGE TO BE PRESERVED ACROSS BATCH
+ JMP I (MORKIL
+
+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
+\f/THIS IS THE ACTUAL BATCH MONITOR. THIS ENTRY IS FOR THE
+/INTERFACE WITH THE KEYBOARD MONITOR.
+
+BATVFY, 2214 /** THIS LOCATION IS VERIFIED BY BAT: **
+
+BOS, CDF 0 /SEE IF CD FOUND AN ERROR
+ TAD I (7777 /IF BIT 11 SET, IT DID.
+ CLL RAR
+ CLA
+ TAD I (7777 /RESTORE IT.
+ AND M2 /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 OUTPUT
+ DCA BOUTDV /SET MESSAGES
+ JMS I (GLINE /READ LINE OF INPUT
+ TAD HUSH
+ SZA CLA
+ JMP BOSRE /DON'T ECHO LINES WHEN HUSHED
+ TAD I (LINBUF
+ TAD (-"$
+ SNA CLA
+ TAD I (LINBUF+1
+ TAD (-"J /DON'T ECHO $JOB CARD HERE
+ SNA CLA
+ TAD I (LINBUF+2
+ TAD (-"O
+ SZA CLA
+ JMS I (ECHO /BUT ECHO ANY OTHER LINE
+BOSRE, TAD I (LINBUF /ENTER HERE FROM CD IF KM COMMAND SEEN
+ DCA I (BNAM /GET THE FIRST CHAR ON THE LINE
+ TAD DOLFLG /DO WE NEED $?
+ SMA CLA
+ JMP I (NXPRG /NO. LOOK FOR . OR /
+ TAD I (BNAM /SEE IF WE HAVE IT
+ TAD (-"$
+ SZA CLA
+ JMP BOSSB /NOT YET.
+ JMP I (KMDOLR /SEE IF IT'S $JOB
+
+CDERR, JMS I (PRMESG
+ CDEMSG
+ JMP BOS
+\f/HERE TO ECHO $JOB CARD
+
+DOLECH, TAD HUSH
+ SZA CLA
+ JMP HUSH2 /DON'T ECHO $JOB WHEN HUSHED
+ TAD (214
+ JMS OUTCHR
+ TAD I (BOSSW
+ CLL RTR /ECHO A PAGE OF $JOBS TO LPT ONLY
+ SNL CLA /IS LPT OUTPUT?
+ JMP DOLEC2
+ TAD (-36 /YES
+ DCA DOLFLG
+ TAD (212
+ JMS OUTCHR /SPACE DOWN TO MIDDLE OF PAGE
+ ISZ DOLFLG
+ JMP .-3 /REPLACE NEXT THREE LOCS IF CENTRONIX PRINTER:
+ JMS I (ECHO /216
+ JMS I (ECHO /TAD .-1
+ JMS I (ECHO /JMS OUTCHR /PRINT LARGE CHARS
+ JMS I (ECHO
+DOLEC2, TAD (214
+ JMS OUTCHR
+ JMS I (ECHOT /PUT $JOB TO TTY IF NEEDED
+ JMS I (CRLF
+HUSH2, DCA DOLFLG
+ 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
+\fGETCOM, JMS I (MOVE
+ -112 /PUT BUFFER INTO KEYBOARD MON.
+ LINBUF+1
+ CDF 0
+ BEGLN
+ TAD I (AMODE /V3C GET BATCH ALTMODE FLAG
+ SZA CLA
+ STL RAL /SET KBM ALTMODE FLAG IF NECESSARY
+ CIF CDF 0
+ DCA I (AMFLAG /IT'S IN FIELD 0
+ JMP I .+1 /AND GO PROCESS IT
+ KEYMON+1
+M2, -2
+
+OUTCHR, 0
+ JMS I BOUTDV
+ JMP I OUTCHR
+
+BOUTDV, TTYOUT
+OUTPUT, 0
+DOLFLG, 0 /$ SLEW FLAG - NEGATIVE IF SLEW
+HUSH, 0 /NON-0 MEANS HUSHED (/H)
+ PAGE
+\fBOSSW, 0 /BATCH STATUS FLAG.
+MSG, 0
+ TAD I (DOLFLG /IF $JOB SLEW SET, DON'T PAUSE
+ SPA CLA
+ JMP I MSG
+ TAD BOSSW /NO ECHO IF TTY IS OUTPUT
+ CLL RTR
+ SZL CLA
+ JMS I (ECHOT
+ TAD BOSSW /IS OPERATOR AVAILABLE?
+ CLL RAR
+ SZL CLA
+ JMP I MSG /NO. CONTINUE
+ TAD (207
+ JMS I (TTYOUT
+ KCC /WAIT A WHILE
+ JMS I (TTY
+ JMP I MSG
+
+TESTB, 0 /TEST ROUTINE. TEST LIST AGAINST BNAM
+ TAD I TESTB
+ DCA PRMESG /# ELEMENTS IN LIST
+TSTB2, ISZ TESTB /POINT TO ELEMENT
+ TAD I TESTB
+ ISZ TESTB
+ TAD I (BNAM /TEST IT
+ SNA CLA
+ JMP TSBOVR /A MATCH
+ ISZ PRMESG
+ JMP TSTB2
+ ISZ TESTB
+ JMP I TESTB /NO MATCH
+TSBOVR, TAD I TESTB
+ DCA TESTB
+ JMP I TESTB
+
+OLDCOR, 0 /V3C HOLDS OLD SOFTWARE CORE SIZE WORD
+ /MUST HAVE ADDRESS .GT. 6000
+\fPRMESG, 0 /MESSAGE PRINTER
+ DCA TESTB /SET FOR NO SKIP ON ISZ
+ TAD I PRMESG /INDEX INTO MESSAGE LIST
+ DCA PRTEMP
+ JMS I (CRLF
+ TAD ("# /BATCH ERROR SIGNAL
+ JMS I (OUTCHR
+PRMSG2, TAD I PRTEMP
+ CLL RTR;RTR;RTR
+ JMS PNCH
+ TAD I PRTEMP
+ JMS PNCH
+ ISZ PRTEMP
+ 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
+ ISZ TESTB /PUT IT ON TTY, TOO
+ CLA CLL CML RTL /+2 SKIPPED IF SECOND TIME THROUGH
+ AND BOSSW /SEE IF LP08 IS OUTPUT
+ SNA
+ JMP PRMOUT /ALREADY ON TTY
+ AND TESTB /CALL WITH AC=1 MEANS NO TTY OUTPUT
+ SZA CLA
+ JMP PRMOUT
+ TAD (TTYOUT
+ DCA I (BOUTDV /SET TTY
+ CLA CMA /SET TESTB TO SKIP
+ JMP PRMESG+1
+PRMOUT, TAD I (OUTPUT /RESTORE OUTPUT
+ DCA I (BOUTDV
+ ISZ PRMESG /SKIP ARGUMENT
+ JMP I PRMESG
+\fKMLINK, 0 /LINK BATCH AND KEYBOARD I/O.
+ RIF
+ TAD BCDIF0 /SETUP A JUMP IN KEYBOARD.
+ DCA KMLST
+ TAD KMLST /AND ANOTHER FOR PRINT ROUTINE
+ DCA KMLST2
+ JMS I (MOVE /PUT NEW CODE INTO KEYBOARD
+ -3
+ KMLST
+ 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 **
+
+KMLST, 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
+
+BCDIF0, CIF CDF 0
+PRTEMP, 0
+\fNXPRG, JMS TESTB /SEE IF WE HAVE . OR /
+ -4
+ -".;GETCOM
+ -"/;BOSSB
+ -"$;KMDOLR
+ -"*;BOSSB /ERRONEOUS CD CARD.
+ JMP I (KJOB
+ PAGE
+\fGLINE, 0 /LINE COLLECTION ROUTINE
+ TAD (LINBUF-1
+ DCA GLPTR
+GET, JMS I (BATIN /GO TO SPECIFIED INPUT DEVICE
+ JMP EOF /TIME-OUT OR FATAL
+ DCA BNAM
+ JMS I (TESTB /TEST FOR SPECIAL CHARS.
+ -5
+ -215;CARROT
+ -212;GET /IGNORE LINE FEEDS.
+ -214;GET /IGNORE FORM FEEDS
+ -337;BKAROW /CD DOESN'T LIKE _, ONLY <
+ -200;GET /IGNORE BLANKS (NULLS) V3C
+ TAD BNAM
+ 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
+
+EOF, KCC /HANG ON INPUT ACTION
+ JMS I (PRMESG /INDICATE FAILURE
+ INPMSG
+ JMS I (TTY /WAIT FOR INPUT
+ JMP GET /AND RETURN
+
+AMODE, 0
+GLPTR, 0
+\f/DOLRD INTERPRETS $ CARDS
+
+DOLRD, 0
+ TAD (LINBUF /GET THE NAME OF THE $ COMMAND
+ DCA BLPTR
+ DCA BNAM
+GWRD2, ISZ BLPTR
+ TAD I BLPTR
+ SNA
+ JMP NOCMD /FUNNY..NOTHING THERE!
+ TAD (-240 /IGNORE LEADING SPACES
+ SNA
+ JMP GWRD2
+ TAD (-240 /NOT A SPACE. TAKE WHATEVER IT IS.
+ AND (77
+ CLL RTL;RTL;RTL
+ DCA BNAM /KEYBOARD MON. WILL EXAMINE IT.
+ ISZ BLPTR
+ TAD I BLPTR
+ AND (77
+ TAD BNAM
+ DCA BNAM
+NOCMD, TAD BNAM
+ SNA CLA
+ JMP I (KJOB
+ JMS I (TESTB /TEST IT
+ -3
+ -0516;END /$END CARD
+ -1523;MSGST /$MSG CARD IMAGE
+ -1217;JOB /$JOB CARD
+DLCRUD, 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
+
+BLPTR, 0
+BNAM, 0
+\f/HERE FROM CD WHEN DONE TO ANALYZE CD AREA
+
+CDRENT, CDF 0
+ TAD I (LKUPSW /GET THE DEFAULT EXTENSION
+ JMS I (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
+ PAGE
+\fCDT, 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
+
+TTYOUT, 0 /TESTS AC FOR FORM FEED
+ TAD (-214
+ SNA
+ JMP TFORM /GENERATE LINE FEEDS
+ TAD (214
+ JMS TTYPE
+ JMP I TTYOUT
+TFORM, TAD (-4
+ DCA TCOUNT
+ TAD (212
+ JMS TTYPE
+ ISZ TCOUNT
+ JMP .-3
+ JMP I TTYOUT
+TCOUNT, 0
+
+NULOUT, 0
+ CLA /DEEP-SIX THE CHARACTER
+ JMS I (CTRLC
+ JMP I NULOUT
+\fTTYPE, 0 /TELETYPE OUTPUT STUFF
+ TLS
+ TSF
+ JMP .-1
+ CLA
+ JMS I (CTRLC
+ JMP I TTYPE
+
+BOSPRT, JMS ERHDR /PRINT MESSAGE
+ CIF CDF 0
+ JMP I (PRINT+10
+
+CDFRST, 0
+BOSCDF, HLT
+ JMP I CDFRST
+
+ERHDR, 0 /ERROR HEADER ROUTINE
+ DCA CDFRST /SAVE CHARACTER
+ TAD I (DOLFLG /FIRST ENTRY?
+ SZA CLA
+ JMP .+3 /NO.
+ TAD ("# /ERROR PROMPT
+ JMS I (OUTCHR
+ TAD I (BOSSW /GET BATCH FLAGS WORD
+ CMA
+ AND (1000 /SET $ SLEW FLAG NEGATIVE IF NO /E,
+ STL RTL /NON-ZERO IN ANY CASE
+ DCA I (DOLFLG
+ TAD CDFRST
+ JMS I (OUTCHR
+ JMP I ERHDR
+
+CRLF, 0
+ TAD (215
+ JMS I (OUTCHR
+ TAD (212
+ JMS I (OUTCHR
+ JMP I CRLF
+
+BOSLPT, 0 /BATCH LINE PRINTER ROUTINE
+ PCLS
+ CLA
+ JMS I (CTRLC
+ PSKF
+ JMP .-2
+ JMP I BOSLPT
+
+MORKIL, JMS I (CDFRST
+ TAD I (OLDCOR
+ CIF CDF 0
+ DCA I (7777 /RESTORE WORD
+ JMP I (7605
+ PAGE
+\f/ERROR MESSAGES
+
+CDEMSG, TEXT /MONITOR OVERLAYED/
+INPMSG, TEXT /INPUT FAILURE/
+BADMSG, TEXT /BAD LINE. JOB ABORTED/
+SERMSG, TEXT /SYS ERROR/
+
+LINBUF, ZBLOCK 113
+
+ PAGE
+\fBATABT, JMS I (CDFRST /THIS CODE IS HERE FOR CCL!
+ TAD I (BOSSW /GET BATCH SWITCHES
+ CMA
+ AND (1000 /IF /E FLAG IS UP CCL ERRORS ARE NON-FATAL,
+ CLL RTL
+ JMP CDKILX /OTHERWISE WE SHOULD ABORT BATCH ON THEM
+
+CDGET, JMS I (GLINE /READ INPUT
+ TAD I (HUSH
+ SNA CLA /DON'T ECHO CD LINES IF HUSHED
+ JMS I (ECHO
+ TAD (LINBUF-1
+ DCA CDGPTR
+ TAD I (DOLFLG /$JOB FLAG UP?
+ SPA CLA
+ JMP CDKBD /SLEW UNTIL $JOB
+ ISZ CDGPTR
+ TAD I CDGPTR
+ DCA I (BNAM
+ JMS I (TESTB /TEST PROMPT CHAR.
+ -4
+ -"*;CDLINE /* IS OK
+ -"/;CDGET /REMARK
+ -"$;CDOLLR
+ -".;CDKBD /RECALL KEYBOARD MON.
+KJOB, 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
+ HLT
+ 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 (BEGLN+1
+
+CDGPTR, 0
+\fCDLINE, 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
+
+HLPMSG, TEXT /MANUAL HELP NEEDED/
+PTRMSG, TEXT /ILLEGAL INPUT DEVICE/
+EOBMSG, TEXT /END BATCH/
+SPLMSG, TEXT /SPOOL TO FILE /
+ *.-1
+BCHFIL, TEXT /BTCHA0/
+ PAGE
+\f/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 (BOSSW
+ CLL RTL
+ CDF 10
+ SZL CLA /IS SPOOLING ENABLED
+ TAD I CDTEMP /AND IS THERE AN OUTPUT?
+ AND (17
+ SNA
+ JMP NCKSPL /NO - DON'T LOOK
+ TAD (DCB-1 /CHECK FILE OR NON-FILE STATUS
+ DCA CDTMP2
+ TAD I CDTMP2 /SPOOL NON-FILE DEVICES
+ SPA CLA
+ JMP NCKSPL /FILE STRUCTURED OUTPUT
+ TAD I CDTEMP
+ AND (7760
+ TAD SPLDEV /RESET CD AREA
+ DCA I CDTEMP
+ ISZ CDTEMP /POINT TO FILENAME AREA
+ JMS I (CDFRST
+ 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
+ SNA CLA
+ JMP CDSCRT /YES - LOOK NO MORE
+ ISZ CDCNT
+ JMP CDSCAN /KEEP LOOKING
+\fCDX1, TAD (-11 /SCAN INPUT AREA
+ DCA CDCNT
+ TAD (7617
+ DCA CDPTR /PICK UP MANUAL INPUTS.
+INPSCN, CDF 10
+ TAD I CDPTR
+ SNA /ANY INPUTS?
+ JMP CDSCRT /3 GUESSES!
+ AND (17
+ TAD (DCB-1 /GET DEVICE IDENTIFIER
+ DCA CDTMP2
+ TAD I CDTMP2
+ AND (770
+ JMS I (CDFRST
+ SNA
+ JMP RBELL /TELETYPE INPUT - CHECK OPERATOR
+ TAD (-10
+ SZA CLA
+ JMP CDX3 /OK INPUT DEVICE
+ TAD I (BOSSW
+ SPA CLA /PTR: INPUT - IS BATCH FROM PTR?
+ JMP I (DEVKIL /YES - ILLEGAL
+RBELL, TAD I (BOSSW /OPERATOR AVAILABLE?
+ CLL RAR
+ SZL CLA
+ JMP I (DEVKIL /NO. ABORT THE JOB
+ TAD (207
+ JMS I (TTYOUT
+ JMS I (PRMESG
+ HLPMSG /MANUAL INTERVENTION REQUIRED.
+ JMS I (CRLF
+ JMP CDSCRT
+CDX3, CLA CLL CML RTL
+ TAD CDPTR
+ DCA CDPTR
+ ISZ CDCNT
+ JMP INPSCN
+CDSCRT, HLT
+ JMP I CDSCN /RETURN TO CALLER
+
+SPLDEV, 0 /GETS SPOOL DEVICE #
+EXT, 0
+CDPTR, 0
+CDCNT, 0
+CDTMP2, 0
+ PAGE
+\f/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 CTRLC /WITH CHARACTER IN AC
+ RDF
+ TAD CDCF0 /GET CDF CIF TO CALLING FIELD
+ DCA BATORT
+ JMS I (CDFRST /CDF TO CURRENT FIELD
+ TAD CTRLC
+ JMS I (OUTCHR /OUTPUT THE CHARACTER
+BATORT, HLT
+ JMP I BATOUT
+\f/ENTER HERE FROM COMMAND DECODER WHEN CD CALLED
+
+CDBOS, RIF /FILL IN CIF CDF N
+ TAD CDCF0 /TO LINK CD AND BOS
+ DCA CDLST1
+ TAD CDLST1
+ DCA CDLST2
+ TAD CDLST2
+ DCA CDLST3
+ JMS MOVE
+CM3, -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
+CDCF0, 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
+\fCTRLC, 0 /CHECK FOR ^C
+ KRS
+ AND (177
+ TAD CM3
+ SNA CLA
+ KSF
+ JMP I CTRLC
+ JMP I .+1
+ BKILL
+
+ECHOT, 0 /ECHOES LINE ON TTY
+ TAD (TTYOUT /SET TTY AS OUTPUT
+ DCA I (BOUTDV
+ JMS ECHO /ECHO IT
+ JMS I (CRLF
+ TAD I (OUTPUT
+ DCA I (BOUTDV /RESET OUTPUT
+ JMP I ECHOT
+
+TTY, 0
+ KSF
+ JMP .-1
+ JMS CTRLC
+ KCC
+ JMP I TTY
+
+ECHO, 0 /ECHO INPUT LINE
+ TAD (LINBUF-1
+ DCA EPTR
+ECHO2, ISZ EPTR
+ TAD I EPTR
+ 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
+\fMOVE, 0
+ RDF
+ TAD MCDF0
+ DCA MVIPUT
+ TAD I MOVE
+ DCA MVTMP /COUNT
+ ISZ MOVE
+ CLA CMA
+ TAD I MOVE
+ DCA MVPT1 /INPUT STUFF
+ ISZ MOVE
+ TAD I MOVE
+ DCA MVOPUT /OUTPUT FIELD
+ ISZ MOVE
+ CLA CMA
+ TAD I MOVE
+ DCA MVPT2
+ ISZ MOVE
+MVIPUT, HLT
+ ISZ MVPT1
+ TAD I MVPT1
+MVOPUT, HLT
+ ISZ MVPT2
+ DCA I MVPT2
+ ISZ MVTMP
+ JMP MVIPUT
+ JMS I (CDFRST
+ JMP I MOVE
+
+MVTMP= CTRLC
+
+MVPT1, 0
+MVPT2, 0
+EPTR, 0
+
+CDPRT, JMS I (ERHDR
+ CIF CDF 0 /LINK BACK TO CD
+ JMP I .+1
+ TYPE+10
+ PAGE
+
+ FIELD 0
+ *200
+ $$$$$$$$$$
+\f