 macro
&l move4 &m1,&m2
 lclb &yistwo
&l ~setm
 ~lda &m1
 ~sta &m2
 ~lda.h &m1
 ~sta.h &m2
 ~restm
 mend
 macro
&l ph4 &n1
 aif "&n1"="*",.f
 lclc &c
&l anop
&c amid &n1,1,1
 aif "&c"="#",.d
 aif s:longa=1,.a
 rep #%00100000
.a
 aif "&c"<>"{",.b
&c amid &n1,l:&n1,1
 aif "&c"<>"}",.g
&n1 amid &n1,2,l:&n1-2
 ldy #2
 lda (&n1),y
 pha
 lda (&n1)
 pha
 ago .e
.b
 aif "&c"<>"[",.c
 ldy #2
 lda &n1,y
 pha
 lda &n1
 pha
 ago .e
.c
 aif "&c"<>"<",.c1
&n1 amid &n1,2,l:&n1-1
 pei &n1+2
 pei &n1
 ago .e
.c1
 lda &n1+2
 pha
 lda &n1
 pha
 ago .e
.d
&n1 amid &n1,2,l:&n1-1
 pea +(&n1)|-16
 pea &n1
 ago .f
.e
 aif s:longa=1,.f
 sep #%00100000
.f
 mexit
.g
 mnote "Missing closing '}'",16
 mend
 macro
&l ~lda &op
 lclc &c
&c amid "&op",1,1
 aif "&c"<>"{",.b
&c amid "&op",l:&op,1
 aif "&c"="}",.a
 mnote "Missing closing '}'",2
&op setc &op}
.a
&op amid "&op",2,l:&op-2
&op setc (&op)
.b
&l lda &op
 mend
 macro
&l ~lda.h &op
&l anop
 lclc &c
&c amid "&op",1,1
 aif "&c"="[",.b
 aif "&c"<>"{",.d
&c amid "&op",l:&op,1
 aif "&c"="}",.a
 mnote "Missing closing '}'",2
&op setc &op}
.a
&op amid "&op",2,l:&op-2
&op setc (&op)
.b
 aif &yistwo,.c
&yistwo setb 1
 ldy #2
.c
&op setc "&op,y"
 lda &op
 mexit
.d
 aif "&c"<>"#",.e
&op amid "&op",2,l:&op-1
&op setc "#^&op"
 lda &op
 mexit
.e
 lda 2+&op
 mend
 macro
&l ~restm
&l 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 ~setm
&l 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
&l ~sta &op
 lclc &c
&c amid "&op",1,1
 aif "&c"<>"{",.b
&c amid "&op",l:&op,1
 aif "&c"="}",.a
 mnote "Missing closing '}'",2
&op setc &op}
.a
&op amid "&op",2,l:&op-2
&op setc (&op)
.b
&l sta &op
 mend
 macro
&l ~sta.h &op
&l anop
 lclc &c
&c amid "&op",1,1
 aif "&c"="[",.b
 aif "&c"<>"{",.d
&c amid "&op",l:&op,1
 aif "&c"="}",.a
 mnote "Missing closing '}'",2
&op setc &op}
.a
&op amid "&op",2,l:&op-2
&op setc (&op)
.b
 aif &yistwo,.c
&yistwo setb 1
 ldy #2
.c
&op setc "&op,y"
 sta &op
 mexit
.d
 sta 2+&op
 mend
 MACRO
&LAB FX2C
&LAB PEA $0510
 LDX #$090A
 JSL $E10000
 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
 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
&l lla &ad1,&ad2
&l anop
 lcla &lb
 lclb &la
 aif s:longa,.a
 rep #%00100000
 longa on
&la setb 1
.a
 lda #&ad2
&lb seta c:&ad1
.b
 sta &ad1(&lb)
&lb seta &lb-1
 aif &lb,^b
 lda #^&ad2
&lb seta c:&ad1
.c
 sta 2+&ad1(&lb)
&lb seta &lb-1
 aif &lb,^c
 aif &la=0,.d
 sep #%00100000
 longa off
.d
 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 add4 &m1,&m2,&m3
 lclb &yistwo
 lclc &c
&l ~setm
 aif c:&m3,.a
&c amid "&m2",1,1
 aif "&c"<>"#",.a
&c amid "&m1",1,1
 aif "&c"="{",.a
 aif "&c"="[",.a
&c amid "&m2",2,l:&m2-1
 aif &c>=65536,.a
 clc
 ~lda &m1
 ~op adc,&m2
 ~sta &m1
 bcc ~&SYSCNT
 ~op.h inc,&m1
~&SYSCNT anop
 ago .c
.a
 aif c:&m3,.b
 lclc &m3
&m3 setc &m1
.b
 clc
 ~lda &m1
 ~op adc,&m2
 ~sta &m3
 ~lda.h &m1
 ~op.h adc,&m2
 ~sta.h &m3
.c
 ~restm
 mend
 macro
&l ~op &opc,&op
 lclc &c
&c amid "&op",1,1
 aif "&c"<>"{",.b
&c amid "&op",l:&op,1
 aif "&c"="}",.a
 mnote "Missing closing '}'",2
&op setc &op}
.a
&op amid "&op",2,l:&op-2
&op setc (&op)
.b
&l &opc &op
 mend
 macro
&l ~op.h &opc,&op
&l anop
 lclc &c
&c amid "&op",1,1
 aif "&c"="[",.b
 aif "&c"<>"{",.d
&c amid "&op",l:&op,1
 aif "&c"="}",.a
 mnote "Missing closing '}'",2
&op setc &op}
.a
&op amid "&op",2,l:&op-2
&op setc (&op)
.b
 aif &yistwo,.c
&yistwo setb 1
 ldy #2
.c
&op setc "&op,y"
 &opc &op
 mexit
.d
 aif "&c"<>"#",.e
&op amid "&op",2,l:&op-1
&op setc "#^&op"
 &opc &op
 mexit
.e
 &opc 2+&op
 mend
