	.TITLE	RETURN		
; JEFFREY KODOSKY	ARL	NOV75
;
; SUBR
; ENTRY:	1 ARG		<SEXPR>
; EXIT:		1 ARG		<SAME SEXPR>
; ERRORS:	A4, RETURN OCCURS OUTSIDE PROG CONTEXT
;		T3, MARKED ITEM WITHOUT PROG OR ERRSET
; CALLS:	NONE
	.GLOBL	RETURN,ZRETURN,QA4ERR,ADPROG,ADERST,ENDLSP
	.GLOBL	SSTART,QT3ERR
RETURN:	MOV	(R5)+,R3	;SAVE ANSWER
	MOV	R4,R0
RET1:	BIT	#1,(R5)+	;FIND NEXT MARKED ARG
	BNE	RET2	;JUMP IF ONE FOUND
	CMP	R5,ENDLSP	;HIT TOP OF STACK?
	BLO	RET1	;NO: LOOP BACK
	TST	-(R5)	;YES: LEAVE OBLIST ON
	QA4ERR		;AND TRAP TO A4 ERROR HANDLER
RET2:	CMP	-(R0),#ADPROG	;FIND CORRESPONDING RETURN PC
	BEQ	RET3	;JUMP IF PROG FOUND
	CMP	@R0,#ADERST
	BEQ	RET1	;CONTINUE SEARCH IF ERRSET FOUND
	CMP	R0,SSTART
	BHI	RET2
	QT3ERR
RET3:	TST	(R5)+	;POP ALIST
	MOV	R3,@R5	;LOAD ANSWER
	MOV	R0,R4	;RESET SUBR STACK POINTER
	JMP	@-(R4)	;RETURN TO PROG CALLER
ZRETURN=.-RETURN
	.END
