	.TITLE	MAINLOOP		
; JEFFREY KODOSKY	ARL	NOV75
;
; SUBR
; ENTRY:	NO ARGS
; EXIT:		1 ARG		NIL
; ERRORS:	NONE
; CALLS:	EVAL
;		READ
;		SET
;		GET
;		PRINT
;		PRNT
;		TIMER
;		.GTIM
;		.CLOSE
;		.WAIT
;		FCO
	.GLOBL	MAINLOOP,ZMAINLOOP,QREAD,QEVAL,QSET,QGET,QPRNT
	.GLOBL	AREA,ETIME,$ALIST,ANSWER,APVAL,TSW,QTIMER,QFCO
	.GLOBL	QPRINT,LSW,SUBSYS,QILINK,LSPXT
	.MCALL	.GTIM,.CLOSE,.WAIT
MAINLOOP:MOV	$ALIST,-(R5)	;SAVE ALIST AT TIME OF ENTRY
MAIN:	CLR	PFLAG	;PRINT FLAG
	TST	SUBSYS
	BNE	MAIN03	;DON'T PRINT IF READING SUBSYSTEMS
	MOV	LSW,-(R5)
	MOV	APVAL,-(R5)
	QGET
	MOV	(R5)+,R0
	BIT	#2,(R0)+
	BEQ	MAIN02
	TST	@R0
	BEQ	MAIN03	;DON'T PRINT IF LSWITCH IS ZERO
MAIN02:	MOV	#MBUF1,R3
	QPRNT
	INC	PFLAG
MAIN03:	QREAD		;READ AN S-EXPRESSION
	BCC	MAIN05
	TST	(R5)+	;POP %EOF
	CMP	-2(R4),#LSPXT	;RETURN TO CALLER ON EOF
	BNE	1$
	QILINK		;IF NO CALLER LINK TO NEXT SYSIN
	BCS	1$
	TST	PFLAG
	BNE	MAIN03	;IF NO NEXT SYSIN, TERMINATE LISP
	BR	MAIN
1$:	CLR	@R5
	JMP	@-(R4)
MAIN05:	TST	PFLAG
	BEQ	1$
	MOV	#MBUF4,R3	;PRINT "VALUE IS..."
	QPRNT
	.GTIM	#AREA,#ETIME	;NOTE STARTING TIME
1$:	MOV	2(R5),$ALIST	;RESTORE ALIST
	QEVAL
	MOV	ANSWER,-(R5)
	QSET
	CLR	PFLAG
	TST	SUBSYS
	BNE	MAIN09	;DON'T PRINT VALUE IF STILL READING SUBSYSTEMS
	MOV	LSW,-(R5)
	MOV	APVAL,-(R5)
	QGET
	MOV	(R5)+,R0
	BIT	#2,(R0)+
	BEQ	4$
	TST	@R0
	BEQ	MAIN09	;DON'T CHECK T SWITCH OR PRINT IF L SWITCH=0
4$:	MOV	APVAL,-(R5)	;CHECK T SWITCH STATUS
	MOV	TSW,-(R5)
	QGET
	TST	(R5)+
	BEQ	MAIN07	;JUMP IF OFF
	MOV	#MBUF3,-(SP)
	MOV	#10.,-(SP)
	MOV	#3,-(SP)
	CLR	-(SP)
	MOV	#ETIME+4,R0
	MOV	-(R0),-(SP)
	MOV	-(R0),-(SP)
	QTIMER		;GET ELAPSED TIME SINCE EVAL START
	QFCO		;CONVERT TO F10.3
	MOV	#MBUF2,R3
	QPRNT		;PRINT TIMING MESSAGE
MAIN07:	QPRINT		;PRINT EVAL RESULT
	TST	(R5)+	;AND DISCARD IT
	BR	MAIN02
MAIN09:	TST	(R5)+	;DISCARD EVAL RESULT
	BR	MAIN03
	.NLIST	BEX
PFLAG:	.WORD	0
MBUF1:	.BYTE	15,12
	.ASCII	/EVAL:/
	.BYTE	15,12,0
MBUF2:	.BYTE	15,12
	.ASCII	/...AFTER /
MBUF3:	.BLKB	10.
	.ASCII	/ SECONDS.../
	.BYTE	15,12,0
MBUF4:	.BYTE	15,12
	.ASCII	/VALUE IS.../
	.BYTE	15,12,0
	.EVEN
	.LIST	BEX
ZMAINLOOP=.-MAINLOOP
	.END
