	.TITLE	COND		
; JEFFREY KODOSKY	ARL	NOV75
;
; FSUBR:	CONDITIONALLY EVALUATE EXPRESSIONS
; ENTRY:	1 ARG		<LIST OF LENGTH 2 LISTS>
; EXIT:		1 ARG		EVAL[CADADD...DR[<ARG>]]
; ERRORS:	NONE
; CALLS:	EVAL
;		CAR
;		CDR
;		PROGN
	.GLOBL	COND,ZCOND,QEVAL,QCAR,QCDR,$ALIST,QPROGN
COND:	ROOM	5	;CHECK FOR ADEQUATE STACK SPACE
	MOV	(R5)+,R0;POP ARG
	MOV	$ALIST,-(R5)	;SAVE PRESENT CONTEXT
	MOV	R0,-(R5)	;AND ARG
COND01:	MOV	@R5,R3	;NULL[<ARG>]--->
	BNE	COND03
	MOV	(R5)+,@R5	;NIL
	JMP	@-(R4)
COND03:	QCDR
	MOV	R3,-(R5)
	QCAR
	MOV	@R5,-(R5)
	QCAR
	QEVAL		;EVAL[CAAR[<ARG>]]--->
	TST	(R5)+	;	PROGN[CDAR[<ARG>]]
	BEQ	COND04
	MOV	(R5)+,R0;POP CAR[<ARG>]
	TST	(R5)+	;IGNORE CDR
	MOV	@R5,$ALIST	;RESTORE CONTEXT
	MOV	R0,@R5	;GET CDAR[<ARG>]
	QCDR
	QPROGN		;PROGN[CDAR[<ARG>]] WITH NO
	.WORD	0	;RETURN PATH SAVED
COND04:	TST	(R5)+	;T--->COND[CDR[<ARG>]]
	MOV	2(R5),$ALIST
	BR	COND01
ZCOND=.-COND
	.END
