.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