EJECT PAGE/100-260 EV7=EV POP7=POP PUSH7=PUSH /LISTOUT ROUTINE /OUTPUTS THE LIST POINTED TO BY THE ARGUMENT ALSTOT, JMS I ALEV /GET ARG DCA .+4 JMS I ALYAC1 /REALLY? JMP ALYAC2 /NO JMS OUTLST /YES; OUTPUT A LIST 0 TAD .-1 /RETURN ARGUMENT AS VALUE ALYAC2, JMP I ALZOT AL77, 77 ALZOT, EVRET ALYAC1, ATEST ALEV=EV7 /OUTLIST ROUTINE--MAIN OUTLST, 0 JMS I OUPUSH OUI TAD I OUTLST DCA OUI ISZ OUTLST JMS I OUPUSH OUTLST TAD OUI CLL RAR SNA /NULL? JMP OUNIL /YES SNL /NO; ATOM? JMP OUATOM /YES CLL /NO; REMOVE LIST INDICATOR RAL DCA OUI TAD OUOP /'(' JMS I EVOUT OURENT, TAD OUI DCA OUIT TAD OUI SNA JMP OUDONE IAC DCA OUI TAD I OUI RAR CLL RAL CLL DCA OUI TAD I OUIT DCA OUIT TAD OUIT DCA .+2 JMS OUTLST 0 TAD OUI SNA CLA JMP OUDONE TAD OUSP /' ' JMS I EVOUT JMP OURENT OUDONE, TAD OUCL /')' JMS I EVOUT JMP OUWHAK OUATOM, RAL SNA CLA JMP OUWHAK TAD I OUI JMS I EVOUT TAD OUI IAC DCA OUI TAD I OUI DCA OUI TAD OUI JMP OUATOM+1 OUNIL, TAD OUZERO /IF NULL ATOM, PRINT 0 JMS I EVOUT OUWHAK, JMS I OUPOP /RETURN OUTLST JMS I OUPOP OUI JMP I OUTLST OUI, 0 OUIT, 0 OUOP, 50 /'(' OUSP, 40 /' ' OUCL, 51/')' OUZERO, 6000 /'0', SHIFTED, STRIPPED & PACKED OUPUSH=PUSH7 OUPOP=POP7 /STACK OPERATIONS /PUSH ROUTINE /PUSHES THE VALUES OF THE ARGUMENT LIST ONTO THE STACK. /AC IS CLEARED ON EXIT. LPUSH, 0 CLA LPBACK, ISZ STPTR TAD STPTR TAD STMAX SNA CLA HLT /NOT ENOUGH STACK STORAGE PROVIDED TAD I LPUSH DCA STLOC TAD I STLOC DCA I STPTR ISZ LPUSH JMP I LPUSH /POP ROUTINE /SAME AS PUSH EXCEPT THAT IT POPS THE LIST INTO THE ARGUMENT /LOCATIONS. /AC ON EXIT = AC ON ENTRY LPOP, 0 DCA STSAV LPRET, TAD I LPOP DCA STLOC ISZ LPOP TAD I STPTR DCA I STLOC CMA TAD STPTR DCA STPTR TAD STPTR TAD STMIN SPA CLA HLT /MORE POPS THAN PUSHES TAD STSAV JMP I LPOP STSAV, 0 STLOC, 0 STCNT, 0 STPTR, 0/SET BY INIT STMIN, 0/SET BY INIT STMAX, -ENDINT PAGE /Added by VRS