.TITLE	RBCDIO
/
/COPYRIGHT (C) 1975
/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
/
/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
/ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
/THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS
/SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO-
/VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON
/EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO
/THESE LICENSE TERMS.  TITLE TO AND OWNERSHIP OF THE
/SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE
/WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM-
/MITMENT BY DIGITAL EQUIPMENT CORPORATION.
/
/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
/OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
	.EJECT
/COPYRIGHT 1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
/
/EDIT #007  1-28-72   **REF**WAD
/EDIT #008  5-MAY-75	R. K. BLACKETT  FIX RBCDIO TO SET BCDIO'S
/				  MASS STORAGE SWITCH ON OUTPUT TO INDICATE
/				  A MASS STORAGE DEVICE.
/ EDIT #009	20-AUG-75	M. HEBENSTREIT	DISCLAIMER
/
/ASSEMBLY PARAMETERS:
/
/DEFINE RSX FOR RSX SYSTEMS.
/DEFINE MSCC TO FORCE THE FIRST CHARACTER OF EACH RECORD ON MASS STORAGE
/ DEVICES TO BE TRANSLATED FOR CARRIAGE CONTROL USE.  SEE ALSO BCDIO.
/ DEFAULT DOS AND RSX SHOULD NOT DEFINE THIS PARAMETER.  DEFINING MSCC
/ EMULATES THE OTS OPERATION IN V3B SYSTEMS AND EARLIER.  THIS OLDER
/ MODE OF OPERATION IS NOT SUPPORTED BY DIGITAL.
/
/NO PARAMETERS FOR DOS15 SYSTEMS.
/
/RANDOM ACCESS BCD I/O OBJECT-TIME PACKAGE
/    CONTAINS ROUTINES TO INITIALIZE A DEVICE FOR
/    RANDOM ACCESS BCD I/O AND TO DO
/    I/O CLEANUP.
/    THE BCDIO ROUTINES .RE AND .RA ARE USED
/    FOR RANDOM ACCESS DATA ELEMENT AND ARRAY
/    I/O, RESPECTIVELY.
/
/ROY FOLK
/
/INTERNAL GLOBALS--
	.GLOBL	.RR		/INT. DEVICE FOR R.A. BCD READ
	.GLOBL	.RW		/INIT. DEVICE FOR R.A. BCD WRITE
	.GLOBL	.RF		/R.A. BCD I/O CLEANUP
	.GLOBL	RBCDIO
RBCDIO=.
/
/ EXTERNAL GLOBLS--
/
	.IFUND	MSCC	/(RKB-008) ALLOW USER TO SUPPRESS USING M.S SWITCH
	.GLOBL	.MSDEV	/(RKB-008)  IF HE SO DESIRES.  .MSDEV IS DEFINED IN BCDIO
	.ENDC		/(RKB-008)
	.GLOBL	.FH		/R/W FLG. (FIOPS)
	.GLOBL	.ER		/ERROR ROUTINE (OTSER)
	.GLOBL	.RN		/R.A. FLG. (FIOPS)
	.GLOBL	.FF		/SEQ. ACCESS BCD I/O CLEANUP (BCDIO)
	.GLOBL	.RAENT		/R.A. ENTRY PT. IN EOR (BCDIO)
	.GLOBL	.BFLOC		/HOLDS .FN (S.A.) OR FNPTR (R.A.) (BCDIO)
	.GLOBL	.STEOR		/HOLDS EOR (S.A.) OR REOR (R.A.) (BCDIO)
	.GLOBL	.HILIM		/HIGH LIMIT ON BUFFER ADDRESS (BCDIO)
	.GLOBL	.INIFD		/INIT. FORMAT DECODER (BCDIO)
	.GLOBL	.INILB		/INIT. LINE BUFFER (BCDIO)
	.GLOBL	.RCDNM		/RCD. NUM. (RANCOM)
	.GLOBL	.FM		/WDS. PER RECORD (FIOPS)
	.GLOBL	.RIO		/RANDOM I/O (RANCOM)
	.GLOBL	.FNPTR		/PNTR. TO FIRST WD. OF RCD. (RANCOM)
	.GLOBL	.LRFLG		/LAST REC. FLG. (RANCOM)
	.GLOBL	.INRRW		/INIT. RANDOM RD./WR. (RANCOM)
	.GLOBL	.ADAVR		/ADDR. OF ASSOC. VAR. (RANCOM)
	.GLOBL	.MDSW		/MODE SW. =0 (BIN) =2 (ASCII) (RANCOM)
	.GLOBL	.ER4		/RE-INIT .ER (OTSER)
/  CONSTANTS
S00001	000001
S00002	000002
S00007	000007
W00000	400000
/  WORKING STORAGE
LDREOR	.DSA	REOR
TEMP	0
	.EJECT
/BCD RANDOM READ AND WRITE
/
/  WRITE
/  CALLING SEQUENCE--
/	JMS	.RW
/	.DSA	ADDR. OF SLOT NUM.
/	.DSA	ADDR. OF FORMAT STMNT. OR ARRAY
/	(AC HOLDS INTEGER RECORD NUMBER)
.RW	0
	DAC*	.RCDNM
	LAC	S00001
	DAC*	.FH		/WRITE
	.IFUND	MSCC	/(RKB-008)
	LAC	(NOP)	/(RKB-008) SET THE BCDIO MASS STORAGE
	DAC*	.MSDEV	/(RKB-008) TO INDICATE A MASS STORAGE DEVICE
	.ENDC		/(RKB-008)
	JMP	ARWCOM
/  READ
/  CALLING SEQUENCE--
/	JMS	.RR
/	.DSA	ADDR. OF SLOT SUM.
/	.DSA	ADDR. OF FORMAT STMNT. OR ARRAY
/	(AC HOLDS INTEGER RECORD NUMBER)
.RR	0
	DAC*	.RCDNM
	DZM*	.FH		/READ
	LAC	.RR
	DAC	.RW
ARWCOM	LAC	W00000		/400000
	DAC*	.RN		/SET R.A. FLG.
	LAC	S00002
	DAC*	.MDSW		/ASCII MODE
	LAC*	.RW		/GET ADDR. OF SLOT NUM.
	JMS*	.INRRW		/INIT RANDOM RD./WRITE
	.IFUND RSX
/CHECK FILE HEADERS FOR DOS15 ONLY.
	JMS	CHKAMD		/CHK. ASCII MODE
	.ENDC
/INIT. .FD AND .INILB (IN BCDIO) FOR R.A.
	LAC	LDREOR
	DAC*	.STEOR
	LAC*	.FNPTR
	DAC*	.BFLOC
/
	JMS*	.INILB		/INIT. LINE BUFF.
	ISZ	.RW
	LAC*	.RW		/GET FORMAT ADDRESS
	DAC	TEMP		    /IF TRANS. VECTOR, GO ONE MORE
	SPA			    /  LEVEL OF INDIRECT
	LAC*	TEMP
	JMS*	.INIFD		/INIT. FORMAT DECODER
/SET HIGH LIMIT ON WORD ADDR. IN BUFFER
/USED BY WRITE ONLY
	LAW	-1
	TAD*	.FM		/WDS PER RCD.
	TAD*	.FNPTR
	DAC*	.HILIM
	ISZ	.RW		/INCREM. FOR RTN.
	JMP*	.RW
	.EJECT
/BCD R.A. END-OF-RECORD
/CALLING SEQUENCE--
/	JMS	REOR
REOR	0
	LAC*	.FH
	SZA			/SKP IF READ
	JMS*	.RAENT		/ENTRY PT. IN EOR (IN BCDIO)
	DZM*	.LRFLG		/CLR. LAST RCD. FLG.
	JMS*	.RIO
	LAC*	.FNPTR		/RESET .BFLOC FOR .INILB INITIAL.
	DAC*	.BFLOC
	.IFUND RSX
/CHECK FILE HEADERS FOR DOS15 ONLY.
	JMS	CHKAMD		/CHK. ASCII MODE
	.ENDC
	JMS*	.INILB
	JMP*	REOR
	.EJECT
	.IFUND RSX
/CHECK ASCII MODE
/CALLING SEQUENCE
/	JMS	CHKAMD
CHKAMD	0
	LAC*	.FNPTR		/ADDR. TO AC
	DAC	TEMP
	LAC*	TEMP		/DATA TO AC
	AND	S00007		/MODE BITS
	SAD	S00002
	JMP*	CHKAMD
	JMS*	.ER		/BAD MODE OR EOF ERROR
	11
	.EJECT
	.ENDC
/BCD RANDOM ACCESS I/O CLEANUP
/CALLING SEQUENCE--
/	JMS	.RF
.RF	0
	JMS*	.FF		/SET NCF - JMS .FD (IN BCDIO)
	LAC*	.ADAVR		/ADDR. TO AC
	DAC	TEMP
	ISZ*	TEMP		/INCREMENT ASSOC. VAR.
	ISZ*	.LRFLG		/SET LST. RCD. FLG.
	LAC*	.FH
	SNA			/SKP IF WRITE
	JMP	RF1
	JMS*	.RAENT		/PUT CR AT END OF RCD.
	JMS*	.RIO		/WRITE - .RTRAN OUT LAST RCDS.
RF1	LAC	(NOP
	DAC*	.ER4		/RE-INIT .ER
	JMP*	.RF
	.END