A large commit.
[pdp8.git] / sw / os8 / v3d / sources / extensions / dectapes / dectape2 / batch.pa
diff --git a/sw/os8/v3d/sources/extensions/dectapes/dectape2/batch.pa b/sw/os8/v3d/sources/extensions/dectapes/dectape2/batch.pa
new file mode 100644 (file)
index 0000000..239fae7
--- /dev/null
@@ -0,0 +1,1641 @@
+/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