EJECT PAGE/100-160 EV2=EV PUSH2=PUSH POP2=POP /EVAL ROUTINE /CONTROLLING SUBROUTINE WHICH GOVERNS THE LIST PROCESSING / FUNCTIONS LEVAL,0 STA TAD LEVAL DCA LEVAL JMS EVAL2 ISZ LEVAL JMP I LEVAL /EVAL2 ROUTINE /ACTUALLY MAIN ROUTINE. THIS DOES THE ACTUAL CALLING, ETC.. EVAL2,0 JMS I EVPUSH EVAL2 ISZ LEVAL JMS EVPRIM JMP EVSTAN TAD I LEVAL TAD EVTAB DCA EVTMP TAD I EVTMP DCA EVTMP JMP I EVTMP EVRET, JMS I EVPOP EVAL2 JMP I EVAL2 EVERR, TAD LEVAL HLT JMP EVRET EVSTAN, JMS EVFUN JMP EVON TAD LEVAL DCA EVSAVE TAD I LEVAL DCA LEVAL JMP I EVENT /ENTER: GETS ARGUMENTS, PUSHES ARG LOCS. EVR1, JMS I EVPUSH /PUSH RETURN-TO-MAIN EVSAVE JMS I EVTEST /ARE WE REALLY EXECUTING? SKP /NO JMS EVAL2 /EVALUATE THE FUNCTION JMS I EVPOP /POP RETURN-TO-MAIN LEVAL DCA EVPTR /SAVE THE VALUE JMP I EVEXIT /EXIT: POPS ARG LOCS EVR2, TAD EVPTR JMP EVRET EVON, TAD I LEVAL DCA EVTMP TAD I EVTMP JMP EVRET EVAND1, 7740 EVTAB, TAB EVSAVE, 0 EVLOC, 0/SET BY INIT EVENT, AENTER EVEXIT, AEXIT EVPTR,0 EVTMP, 0 EVPUSH=PUSH2 EVPOP=POP2 EVTEST=TEST /SKIP-IF-FUNCTION SUBROUTINE EVFUN, 0 TAD EVLOC DCA EVPTR ISZ EVPTR TAD I EVPTR SNA JMP I EVFUN TAD I LEVAL SZA CLA JMP .-6 ISZ EVFUN JMP I EVFUN /SKIP-IF-PRIMITIVE SUBROUTINE EVPRIM, 0 TAD I LEVAL AND EVAND1 SZA CLA JMP I EVPRIM ISZ EVPRIM JMP I EVPRIM /TL ROUTINE /RETURNS THE RIGHT POINTER OF THE CELL POINTED TO BY THE ARG ATL, JMS I TLEV /GET ARG JMS I TLTEST JMP EVRET RAR SNL CLA /RETURN 0 IF IT POINTS TO AN ATOM CLL RAL SNA JMP EVRET IAC DCA TLTMP TAD I TLTMP RAR CLL CML RAL JMP EVRET TLTMP, 0 TLTEST=EVTEST TLEV=EV2 /ATOM ROUTINE /RETURNS +1 IF THE ARGUMENT POINTS TO AN ATOM OR IS NULL. /RETURNS 0 OTHERWISE. AATOM, JMS I AAEV /GET ARG JMS I AATEST JMP EVRET CLL RAR /SEE IF NULL SNA CLL /YES CML CLA RAL JMP EVRET AATEST=EVTEST AAEV=EV2 /GO ROUTINE /TRANSFERS CONTROL TO SPECIFIED LOCATION. AGO, ISZ LEVAL/INCREMENT POINTER JMS EVFUN/FUNCTION? SKP /NO JMP .+3/YES JMS EVPRIM/PRIMITIVE? JMP .+7/NO STA /YES TAD LEVAL DCA LEVAL JMS EVAL2 DCA I GOVAL JMP AGO JMS I TEST/REALLY? JMP EVRET/NO STA /YES;RESET POINTER TAD I LEVAL DCA LEVAL JMP EVRET GOVAL, BGVAL /ENTER PATCH AEPAT, JMS EVPRIM /PRIMITIVE? SKP /NO JMP I AEGO /YES JMS EVFUN /FUNCTION? TAD I LEVAL /NO JMP I AEGO AEGO, AEPATB PAGE /Added by VRS