EJECT PAGE/100-220 EV5=EV POP5=POP PUSH5=PUSH /ENTER SUBROUTINE /SETS UP LINKAGES FOR SUBROUTINES /FORM IS: / F1 / F2 / . / . / . / END /WHERE FI ARE FORMAL VARIABLE LOCATIONS WHICH MUST APPEAR IN / THE LIST REFERENCE TABLE. /STACK USAGE: T1,A1,...,TN,AN,F1,F2,...,FN WHERE AI=0 IF / ARGI IN CALLING CODE IS NOT SIMPLE, AI=ADDRESS OF ARGI / OTHERWISE. AENTER, JMS I AEPUSH /RECURSIVE SELF-PROTECTION AEPNT JMS I AEPUSH / " AEREF JMS I AEPUSH / " AETMP JMS I AEPUSH / " AESCR /SWITCH POINTERS TAD I AEVAL /LEVAL DCA AEPNT TAD I AESAVE DCA I AEVAL /SCAN THE PARAMETERS I: PUSH TEMP LOCS, MOVE ARGS TO TEMP LOCS, / PUSH SIMPLE ARG ADDRESSES TAD AEPNT DCA AETMP TAD AEWORK DCA AEREF AESCAN, TAD I AETMP DCA AESCR TAD I AESCR CMA SNA CLA /-1? JMP AEON /YES JMS I AEPUSH /NO: PUSH A TEMP LOC AEREF, 0 ISZ I AEVAL JMP I .+1 /JUMP TO PATCH ROUTINE--DETERMINE IF ARG IS AEPAT /SIMPLE OR NOT. AEPATB, DCA AESCR STA TAD I AEVAL DCA I AEVAL JMS I AEEV /GET AN ARG DCA I AEREF JMS I AEPUSH /PUSH INDICATOR AESCR ISZ AETMP ISZ AEREF JMP AESCAN /SCAN THE PARAMETERS II: PUSH FORMAL VARIABLES, MOVE FROM / TEMP LOCS TO FORMAL VARIABLES. AEON, TAD AEPNT DCA AETMP TAD AEWORK DCA AEREF AESC2, TAD I AETMP DCA AELOC TAD I AELOC /IS IT -1? CMA SNA CLA JMP AEREST JMS I AEPUSH /PUSH FORMAL VARIABLE AELOC, 0 TAD I AEREF DCA I AELOC ISZ AETMP ISZ AEREF JMP AESC2 /RESTORE POINTERS AEREST, TAD I AEVAL DCA I AESAVE TAD AETMP DCA I AEVAL JMP I AER1 AER1, EVR1 AEPNT, 0 AETMP, 0 AESCR, 0 AEVAL, LEVAL AESAVE, EVSAVE AEWORK, WORK AEPUSH=PUSH5 AEEV=EV5 /EXIT SUBROUTINE /SEE ENTER COMMENTS FOR NOTES. AEXIT, /MOVE FORMAL VARIABLES TO TEMP LOCATIONS, POP FORMAL / VARIABLES DCA AECNT /SET CNT=0 TAD AEPNT DCA AESCR TAD AEREF DCA AEREF2 AESC10, STA TAD AETMP DCA AETMP STA TAD AEREF2 DCA AEREF2 ISZ AECNT TAD I AESCR DCA AELOC2 TAD I AELOC2 /IS IT -1? CMA SNA CLA JMP AEXEL /YES: GO ON TAD I AETMP /NO: MOVE DCA AELOC2 TAD I AELOC2 DCA I AEREF2 JMS I AEPOP AELOC2, 0 ISZ AESCR JMP AESC10 /REPLACE SIMPLE PARAMETERS WITH TEMP LOCS, POP TEMP LOCS AEXEL, TAD AECNT CIA DCA AECNT TAD AEREF DCA AEREF2 AESC11, STA TAD AEREF2 DCA AEREF2 ISZ AECNT /THROUGH? SKP JMP AEFINI /YES: RETURN JMS I AEPOP /NO: POP ARG ADDRESS AEA TAD AEA /IS IT 0? SNA CLA JMP .+3 /YES: DON'T REPLACE TAD I AEREF2 /NO: REPLACE DCA I AEA JMS I AEPOP /POP A TEMP LOC AEREF2, 0 JMP AESC11 AEFINI, /POP & RETURN JMS I AEPOP AESCR JMS I AEPOP AETMP JMS I AEPOP AEREF JMS I AEPOP AEPNT JMP I AER2 AER2, EVR2 AECNT=AELOC AEPOP=POP5 AEA=AESCR PAGE /Added by VRS