	.TITLE	EVLIS		
; JEFFREY KODOSKY	ARL	NOV75
;
; SUBR:		EVALUATE A LIST OF EXPRESSIONS
; ENTRY:	1 ARG		<LIST>
; EXIT:		1 ARG		<EVALUATED LIST>
; ERRORS:	NONE
; CALLS:	EVAL
;		CAR
;		CDR
;		GETC, FETCH A NEW CELL
; NOTE: LIST IS THE FSUBR EQUIVALENT OF EVLIS.
	.GLOBL	EVLIS,ZEVLIS,$ALIST,QEVAL,QGETC
	.GLOBL	LIST,ZLIST,QCAR,QCDR
LIST:
ZLIST=0
EVLIS:	ROOM	7	;CHECK FOR STACK SPACE
	MOV	(R5)+,R0;POP LIST TO EVALUATE
	CLR	-(R5)	;SET UP POINTER TO ANSWER
	MOV	R5,R1
	MOV	R1,-(R5);POINTER TO LAST OPEN CDR
	MOV	$ALIST,-(R5)	;SAVE PRESENT CONTEXT
	MOV	R0,-(R5);PUSH LIST BACK ON
EVLIS1:	MOV	@R5,R3	;GET REMAINDER OF LIST
	BEQ	EVLIS2	;DONE IF NIL
	QCDR
	MOV	R3,-(R5)
	QCAR
	QEVAL		;EVALUATE THE CAR
	QGETC		;FETCH A NEW CELL
	MOV	(R5)+,R0;POINT TO IT
	MOV	R0,@6(R5)	;CHAIN IT TO PREVIOUS RESULT
	MOV	(R5)+,(R0)+	;STORE LATEST RESULT IN THE CAR
	MOV	R0,4(R5);SAVE POINTER TO CDR
	MOV	2(R5),$ALIST
	BR	EVLIS1	;LOOP BACK TO EVALUATE THE REST OF LIST
EVLIS2:	ADD	#6,R5	;POP GARBAGE FROM STACK LEAVING
	JMP	@-(R4)	;RESULT OF EVLIS
ZEVLIS=.-EVLIS
	.END
