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
/		NO 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
	JMJMS	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 PHKSP6
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
	JULOUT
	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
	$$$$$$$$$$