	.TITLE	GO		
; JEFFREY KODOSKY	ARL	NOV75
;
; FSUBR
; ENTRY:	1 ARG	<LAT OF LENGTH 1>
; EXIT:		N/A
; ERRORS:	A5, GO OCCURS OUTSIDE PROG CONTEXT
;		A6, GO REFERS TO UNASSIGNED LABEL
;		T3, MARKED ITEM HAS NO ASSOCIATED SPECIAL PC
; CALLS:	CAR
;		SASSOC
;		CDR
	.GLOBL	ADPROG,GO,ZGO,ADERST,ASTART,QA5ERR,QCAR
	.GLOBL	QT3ERR,QSASSOC,QA6ERR,QCDR,SSTART
GO:	QCAR	;GET LABEL(IGNORE ANYTHING ELSE FOLLOWING)
	MOV	(R5)+,R3
	MOV	R4,R0
GO1:	BIT	#1,(R5)+;FIND FIRST MARKED ARG
	BNE	GO3	;JUMP IF ONE FOUND
	CMP	R5,ASTART	;AT TOP OF ARG STACK?
	BLO	GO1	;LOOP BACK IF NOT
	TST	-(R5)	;YES: LEAVE OBLIST ON
	QA5ERR		;AND TRAP TO A5 ERROR HANDLER
GO3:	CMP	-(R0),#ADPROG	;FIND CORRESPONDING RETURN PC
	BEQ	GO4	;JUMP IF ITS PROG
	CMP	@R0,#ADERST
	BEQ	GO1	;KEEP SEARCHING IF ITS ERRSET
	CMP	R0,SSTART
	BHI	GO3
	QT3ERR		;THIS SHOULD NEVER HAPPEN
GO4:	TST	-(R5)	;POINT TO GO-LIST
	MOV	@R5,-(R5)	;COPY IT
	DEC	@R5	;REMOVE FLAG FROM COPY
	MOV	R3,-(SP);SAVE LABEL
	MOV	R0,-(SP);SAVE STACK RESET
	MOV	@R5,-(R5)
	CLR	2(R5)
	MOV	R3,-(R5)
	QSASSOC		;GET PROG XFER POINT
	TST	@R5
	BNE	GO5
	TST	(SP)+	;IF NOT FOUND THEN ERROR A6
	MOV	(SP)+,@R5
	QA6ERR
GO5:	QCDR
	MOV	(SP)+,R0
	TST	(SP)+
	MOV	@R5,6(R5)	;SET UP NEW PROG PC
	MOV	R0,R4	;RESET SUBR STACK AND RETURN
	JMP	@(R0)+	;TO PROG
ZGO=.-GO
	.END
