MACRO &lab subroutine &parms,&work &lab anop aif c:&work,.a lclc &work &work setc 0 .a gbla &totallen gbla &worklen &worklen seta &work &totallen seta 0 aif c:&parms=0,.e lclc &len lclc &p lcla &i &i seta c:&parms .b &p setc &parms(&i) &len amid &p,2,1 aif "&len"=":",.c &len amid &p,1,2 &p amid &p,4,l:&p-3 ago .d .c &len amid &p,1,1 &p amid &p,3,l:&p-2 .d &p equ &totallen+3+&work &totallen seta &totallen+&len &i seta &i-1 aif &i,^b .e tsc sec sbc #&work tcs inc a phd tcd mend MACRO &lab return &r &lab anop lclc &len aif c:&r,.a lclc &r &r setc 0 &len setc 0 ago .h .a &len amid &r,2,1 aif "&len"=":",.b &len amid &r,1,2 &r amid &r,4,l:&r-3 ago .c .b &len amid &r,1,1 &r amid &r,3,l:&r-2 .c aif &len<>2,.d ldy &r ago .h .d aif &len<>4,.e ldx &r+2 ldy &r ago .h .e aif &len<>10,.g aif &totallen=0,.f lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .f pld tsc clc adc #&worklen+&totallen tcs phb plx ply lda &r+8 pha lda &r+6 pha lda &r+4 pha lda &r+2 pha lda &r pha phy phx plb rtl mexit .g mnote 'Not a valid return length',16 mexit .h aif &totallen=0,.i lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .i pld tsc clc adc #&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend MACRO &LAB BGT &BP &LAB BEQ *+4 BGE &BP MEND MACRO &LAB BLE &BP &LAB BLT &BP BEQ &BP MEND MACRO &LAB MOVE4 &F,&T &LAB ~SETM LDA 2+&F STA 2+&T LDA &F STA &T ~RESTM MEND MACRO &LAB ~SETM &LAB ANOP AIF C:&~LA,.B GBLB &~LA GBLB &~LI .B &~LA SETB S:LONGA &~LI SETB S:LONGI AIF S:LONGA.AND.S:LONGI,.A REP #32*(.NOT.&~LA)+16*(.NOT.&~LI) LONGA ON LONGI ON .A MEND MACRO &LAB ~RESTM &LAB ANOP AIF (&~LA+&~LI)=2,.I SEP #32*(.NOT.&~LA)+16*(.NOT.&~LI) AIF &~LA,.H LONGA OFF .H AIF &~LI,.I LONGI OFF .I MEND macro &l ph8 &n1 lclc &c &l anop &c amid &n1,1,1 aif s:longa=1,.a rep #%00100000 .a aif "&c"="#",.d aif "&c"="[",.b aif "&c"<>"{",.c &c amid &n1,l:&n1,1 aif "&c"<>"}",.g &n1 amid &n1,2,l:&n1-2 &n1 setc (&n1) .b ldy #6 ~&SYSCNT lda &n1,y pha dey dey bpl ~&SYSCNT ago .e .c ldx #6 ~&SYSCNT lda &n1,x pha dex dex bpl ~&SYSCNT ago .e .d &n1 amid &n1,2,l:&n1-1 bra ~b&SYSCNT ~a&SYSCNT dc i8"&n1" ~b&SYSCNT ldx #6 ~c&SYSCNT lda ~a&SYSCNT,x pha dex dex bpl ~c&SYSCNT .e aif s:longa=1,.f sep #%00100000 .f mexit .g mnote "Missing closing '}'",16 mend macro &l pl8 &n1 lclc &c &l anop aif s:longa=1,.a rep #%00100000 .a &c amid &n1,1,1 aif "&c"<>"{",.b &c amid &n1,l:&n1,1 aif "&c"<>"}",.f &n1 amid &n1,2,l:&n1-2 pla sta (&n1) ldy #2 pla sta (&n1),y ldy #4 pla sta (&n1),y ldy #6 pla sta (&n1),y ago .d .b aif "&c"<>"[",.c pla sta &n1 ldy #2 pla sta &n1,y ldy #4 pla sta &n1,y ldy #6 pla sta &n1,y ago .d .c pla sta &n1 pla sta &n1+2 pla sta &n1+4 pla sta &n1+6 .d aif s:longa=1,.e sep #%00100000 .e mexit .f mnote "Missing closing '}'",16 mend