	.TITLE BLKIO
;
;	THESE ROUTINES USE RMS BLOCK IO TO OPEN AND THEN READ A DISK FILE.
;
;	INPUT FILE STRUCTURES
	.PSECT DATA,NOEXE,LONG
INFAB:	$FAB FNA=FILNAM,DNM=<.DAT>,FAC=<BIO,GET>
INRAB:	$RAB FAB=INFAB,UBF=BUFFER,USZ=512,ROP=BIO
;	.PSECTS WHICH ARE COMMON BLOCKS
	.PSECT BBB,GBL,OVR,PIC,SHR,NOEXE,LONG
BUFFER:: .BLKW 256.	;BUFFER FOR BLOCK IO
	.PSECT CCC,GBL,OVR,PIC,SHR,NOEXE,LONG
FILNAM:: .BLKW 40.	;FILENAME
	.PSECT DDD,GBL,OVR,PIC,SHR,NOEXE,LONG
NCHAR::	.BLKW 1		;LENGTH OF FILE NAME GOES HERE (# CHARACTERS)
	.PSECT EEE,GBL,OVR,PIC,SHR,NOEXE,LONG
ESTATUS:: .BLKW 2	;ERROR STATUS GOES HERE
;
;	GOP - OPENS FILE FOR BLOCK IO READS
;
	.PSECT CODE,NOWRT,LONG,PIC,SHR
GOP::	.WORD 0
	CVTWB NCHAR,INFAB+FAB$B_FNS	;SET FILENAME SIZE
	$OPEN FAB=INFAB
	BLBC R0,ERRBAD
	$CONNECT RAB=INRAB
	BLBC R0,ERRBAD
	RET
;
;	GB - GET ONE BLOCK OF FILE USING BLOCK IO
;
GB::	.WORD 0
	CLRL ESTATUS	;CLEAR ERROR INDICATOR
	.LIST MEB
	$READ RAB=INRAB
	.NLIST MEB
	BLBC R0,ERROR
	RET
ERROR:	CMPL #RMS$_EOF,R0	;TEST FOR EOF
	BNEQ ERRBAD
	MOVL R0,ESTATUS		;SAVE R0 FOR CALLER
	RET
;
;	BAD ERROR - QUIT
;
ERRBAD:	$EXIT_S R0
	.END
