macro &lab stzl &address stz &address stz &address+2 mend macro &lab plax &lab pla plx mend macro &lab ldax &address,&off lclc &c &lab anop &c amid &address,1,1 aif "&c"="[",.deref aif "&c"="#",.imm lda &address ldx &address+2 mexit .deref mexit .imm aif "&address"="0",.imm0 &address amid &address,2,l:&address-1 lda #&address ldx #^&address mexit .imm0 lda #0 tax mexit .deref &address amid &address,2,l:&address-2 aif c:&off=0,.deref0 aif "&off"="y",.derefy &c amid &off,1,1 aif "&c"<>"#",.derefldy ldy &off+2 ago .deref2 .derefldy ldy &off .derefy iny iny .deref2 lda [&address],y tax dey dey lda [&address],y mexit .deref0 ldy #2 lda [&address],y tax lda [&address] mend macro &lab stax &address lclc &c &lab anop &c amid &address,1,1 sta &address stx &address+2 mend macro &lab BeginStack &lab anop phd aif "&JSn"="jsr",.ifLocals phb phk plb aif &dummyPC>7,.begin mexit .ifLocals aif &dummyPC=5,.exit .begin tsc aif t:sizeLocals<>"G",.NoLocals sec sbc #sizeLocals tcs .NoLocals tcd .exit mend macro BegParms aif c:&begParmsPC>0,.skip gbla &begParmsPC .skip &begParmsPC seta &dummyPC mend macro DefineStack &howCalled aif c:&JSn>0,.skip0 gblc &JSn .skip0 &JSn setc "jsl" aif c:&howCalled=0,.begin aif "&howCalled"="jsr",.jsr aif "&howCalled"="short",.jsr aif "&howCalled"<>"JSR",.begin .jsr &JSn setc "jsr" .begin aif c:&dummyPC>0,.skip1 gbla &dummyPC .skip1 &dummyPC seta 1 aif c:&gequ>0,.skip2 gblb &gequ .skip2 &gequ setb 0 mend macro &lab endLocals aif l:&lab<>0,.continue &lab setc sizeLocals .continue &lab equ &dummyPC-1 mend macro &lab endParms aif l:&lab<>0,.continue &lab setc sizeParms .continue &lab equ &dummyPC-&begParmsPC mend macro &lab EndStack &lab anop aif t:sizeLocals<>"G",.NoLocals tsc clc adc #sizeLocals tcs .NoLocals aif "&JSn"="jsr",.restoreDP plb .restoreDP pld aif t:sizeParms<>"G",.NoParms aif "&JSn"="jsr",.continue lda 2,s sta 2+sizeParms,s .continue lda 1,s sta 1+sizeParms,s aif t:sizeLocals="G",.CarryCleared clc .CarryCleared tsc adc #sizeParms tcs .NoParms mend macro FixStack &dummyPC seta &dummyPC+4 aif "&JSn"="jsr",.exit &dummyPC seta &dummyPC+2 .exit mend macro &lab word aif l:&lab=0,.increment aif &gequ,.global &lab equ &dummyPC ago .increment .global &lab gequ &dummyPC .increment &dummyPC seta &dummyPC+2 mend macro &lab longword aif l:&lab=0,.increment aif &gequ,.global &lab equ &dummyPC ago .increment .global &lab gequ &dummyPC .increment &dummyPC seta &dummyPC+4 mend MACRO &lab _HLock &lab ldx #$2002 jsl $E10000 MEND MACRO &lab _HUnlock &lab ldx #$2202 jsl $E10000 MEND MACRO &lab _GetPort &lab ldx #$1C04 jsl $E10000 MEND MACRO &lab _SetPenPat &lab ldx #$3004 jsl $E10000 MEND macro &l ~FindHandle &p1 &l ph4 &p1 ldx #$1A02 jsl $E10000 mend macro &l ~FrameRect &p1 &l ph4 &p1 ldx #$5304 jsl $E10000 mend macro &l ~GetPenMask &p1 &l ph4 &p1 ldx #$3304 jsl $E10000 mend macro &l ~GetPenPat &p1 &l ph4 &p1 ldx #$3104 jsl $E10000 mend macro &l ~GetPenSize &p1 &l ph4 &p1 ldx #$2D04 jsl $E10000 mend macro &l ~InsetRect &p1,&p2,&p3 &l ph4 &p1 ph2 &p2 ph2 &p3 ldx #$4C04 jsl $E10000 mend macro &l ~PaintRect &p1 &l ph4 &p1 ldx #$5404 jsl $E10000 mend macro &l ~SetPenMask &p1 &l ph4 &p1 ldx #$3204 jsl $E10000 mend macro &l ~SetPenPat &p1 &l ph4 &p1 ldx #$3004 jsl $E10000 mend macro &l ~SetPenSize &p1,&p2 &l ph2 &p1 ph2 &p2 ldx #$2C04 jsl $E10000 mend macro &l ~SetPort &p1 &l ph4 &p1 ldx #$1B04 jsl $E10000 mend macro &l ~SetSolidPenPat &p1 &l ph2 &p1 ldx #$3704 jsl $E10000 mend macro &l ph2 &n1 &l anop aif "&n1"="*",.f lclc &c &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 lda (&n1) pha ago .e .b aif "&c"="<",.c lda &n1 pha ago .e .c &n1 amid &n1,2,l:&n1-1 pei &n1 ago .e .d &n1 amid &n1,2,l:&n1-1 pea &n1 ago .f .e aif s:longa=1,.f sep #%00100000 .f mexit .g mnote "Missing closing '}'",16 mend macro &l ph4 &n1 &l anop aif "&n1"="*",.f lclc &c &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