;++
;
; Modified FOR$IO_END from VAX RTL to allow interface to REREAD
;
; Neal Lippman, Douglass J. Wilson, MIT-JCF, October, 1980
;
;--


	.TITLE	FOR$IO_END
	.IDENT	\1-010\

    	.library	\sys$library:lib\

	.EXTRN	OTS$$A_CUR_LUB,FOR$$AA_UDF_PR9
	.EXTRN	FOR$$ERR_ENDHND
	.EXTRN 	FOR$$CB_POP,FOR$$SIGNAL
	.extrn	reread_bufadr
	.extrn	reread_buflen

	.psect	jcf_for_impure,rd,wrt

L_INCR_DEPTH:	.blkl	1
A_END_ADR:	.blkl	1
A_ERR_ADR:	.blkl	1
L_UNWIND_ACTION:.blkl	1
USER_FRAME:	.blkl	1

	.PSECT	_FOR$CODE,NOWRT,SHR,PIC,2	;;; ???

	.ENTRY	FOR$IO_END,^M<R2,R3,R4,R5,R11>

	MOVAB	FOR$$AA_UDF_PR9,R3
	SUBL2	#12,SP
	CLRL	L_INCR_DEPTH
	CLRL	A_END_ADR
	CLRL	A_ERR_ADR
	CLRL	L_UNWIND_ACTION
	MOVAL	2$,(FP)
	MOVL	OTS$$A_CUR_LUB,R11
	movl	rab$l_ubf(r11),reread_bufadr	;save the RMS buffer address
	movw	rab$w_rsz(r11),reread_buflen	;save the buffer size
	CLRL	L_UNWIND_ACTION
	MOVL	-140(R11),A_ERR_ADR
	MOVL	-136(R11),A_END_ADR
	CLRL	L_INCR_DEPTH
	pushr	#^m<r0>
	MOVL	-180(R11),r0
	movl	r0,user_frame		;;;
	MOVL	-188(R11),(r0)		;;;
	MOVZBL	-143(R11),R0		;;;
	MOVL	FOR$$AA_UDF_PR9[R0],R0
	JSB	FOR$$AA_UDF_PR9[R0]
	MOVZBL	-144(R11),IOSTAT
	BEQL	1$
	PUSHL	IOSTAT
	CALLS	#1,FOR$$SIGNAL
1$:	JSB	FOR$$CB_POP
	MOVL	IOSTAT,R0
	RET

2$:	.WORD	0
	MOVL	8(AP),R0
	MOVL	4(AP),R0
	PUSHAB	L_INCR_DEPTH
	PUSHAB	A_END_ADR
	PUSHAB	A_ERR_ADR
	PUSHAB	L_UNWIND_ACTION
	PUSHL	#4
	PUSHL	SP
	MOVQ	4(AP),-(SP)
	CALLS	#3,FOR$$ERR_ENDHND
	RET


	.psect	jcf_for_impure,rd,wrt

iostat:
	.blkl	1



	.end
