MACRO &lab movelong &a,&b &lab lcla &immed lclc &string &string amid "&a",2,l:&a &immed asearch "&a",#,1 aif s:longa=1,.long aif &immed=0,.noimmed1 lda #<&string sta &b lda #>&string sta &b+1 lda #^&string sta &b+2 lda #0 sta &b+3 mexit .noimmed1 moveword &a,&b moveword &a+2,&b+2 mexit .long moveword &a,&b aif &immed=0,.long2 moveword #^&string,&b+2 mexit .long2 moveword &a+2,&b+2 mend MACRO &lab moveword &a,&b &lab lcla &immed lclc &string &string amid "&a",2,l:&a &immed asearch "&a",#,1 lda &a sta &b aif s:longa=1,.long aif &immed=0,.noimmed1 lda #>&string sta &b+1 mexit .noimmed1 lda &a+1 sta &b+1 .long mend MACRO &lab short &a aif c:&a=0,.allshort lclb &m lclb &m1 lclb &m2 &m1 setb ("&a"="M").OR.("&a"="m") &m2 setb ("&a"="A").OR.("&a"="a") &m setb (&m1).OR.(&m2) aif &m=0,.shorti sep #%00100000 longa off mexit .shorti sep #%00010000 longi off mexit .allshort sep #%00110000 longa off longi off mend MACRO &lab long &a aif c:&a=0,.alllong lclb &m lclb &m1 lclb &m2 &m1 setb ("&a"="M").OR.("&a"="m") &m2 setb ("&a"="A").OR.("&a"="a") &m setb (&m1).OR.(&m2) aif &m=0,.longi rep #%00100000 longa on mexit .longi rep #%00010000 longi on mexit .alllong rep #%00110000 longa on longi on mend MACRO &lab pushlong &a lclc &char lclc &string &string amid "&a",2,l:&a &char amid "&a",1,1 aif "&char"="#",.immed pushword &a+2 ago .lp .immed pushword #^&string .lp pushword &a mend MACRO &lab pushword &a lclc &char lclc &string &string amid "&a",2,l:&a &char amid "&a",1,1 aif "&char"="#",.lp1 lda &a pha mexit .lp1 lclb &hbyte &char amid "&string",1,1 &hbyte setb ("&char"="^").OR.("&char"="|") aif &hbyte=1,.lp pea &string mexit .lp &string amid "&string",2,l:&string dc i1'$f4',i2^'&string' mend MACRO &lab pulllong &a lcla &num &num seta c:&a pla aif &num=0,.lp1 sta &a .lp1 aif s:longa=1,.lp2 pla aif &num=0,.lp2 sta &a+1 .lp2 pla aif &num=0,.lp3 sta &a+2 .lp3 aif s:longa=1,.lp4 pla aif &num=0,.lp4 sta &a+3 .lp4 mend MACRO &LAB STR &STR,&HEX &LAB DC I1"L:SYSA&SYSCNT" SYSA&SYSCNT DC C"&STR" AIF C:&HEX,.A MEXIT .A DC H"&HEX" MEND MACRO &LAB ~MULTIPLY &W1,&W2 &LAB PHA PHA PW &W1 PW &W2 LDX #$090B JSL $E10000 MEND MACRO &LAB ~DISPOSEALL &W &LAB PW &W LDX #$1102 JSL $E10000 MEND MACRO &LAB ~NEWHANDLE &L1,&W1,&W2,&L2 &LAB PHA PHA PL &L1 PW &W1 PW &W2 PL &L2 LDX #$0902 JSL $E10000 MEND MACRO &LAB ~UNPACKBYTES &L1,&W,&L2,&L3 &LAB PHA PL &L1 PW &W PL &L2 PL &L3 LDX #$2703 JSL $E10000 MEND MACRO &LAB PL &ADDR,&OFFSET &LAB ANOP LCLC &C LCLC &REST &C AMID &ADDR,1,1 AIF "&C"="#",.IMMEDIATE AIF "&C"="[",.ZEROPAGE AIF C:&OFFSET=0,.NOOFFSET AIF "&OFFSET"="S",.STACK PW &ADDR+2,&OFFSET PW &ADDR,&OFFSET MEXIT .NOOFFSET PW &ADDR+2 PW &ADDR MEXIT .IMMEDIATE &REST AMID &ADDR,2,L:&ADDR-1 dc I1'$F4',I2'(&REST)|-16' dc I1'$F4',I2'&REST' MEXIT .STACK PW &ADDR+2,S PW &ADDR+2,S MEXIT .ZEROPAGE LDY #&OFFSET+2 PW &ADDR,Y LDY #&OFFSET PW &ADDR,Y MEND MACRO &LAB PW &SYSOPR &LAB ANOP AIF C:&SYSOPR=0,.B LCLC &C &C AMID "&SYSOPR",1,1 AIF ("&C"="#").AND.(S:LONGA),.IMMEDIATE LDA &SYSOPR PHA MEXIT .B PHA MEXIT .IMMEDIATE LCLC &REST LCLA &BL &BL ASEARCH "&SYSOPR"," ",1 AIF &BL>0,.A &BL SETA L:&SYSOPR+1 .A &REST AMID "&SYSOPR",2,&BL-2 DC I1'$F4',I2'&REST' MEND MACRO &LAB _MULTIPLY &LAB LDX #$090B JSL $E10000 MEND MACRO &LAB _UNPACKBYTES &LAB LDX #$2703 JSL $E10000 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 ldy #&r ldx #^&r ago .h .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 _CloseGS ¶ms &lab jsl $E100A8 dc i2"$2014" dc i4"¶ms" MEND MACRO &lab _GetFileInfoGS ¶ms &lab jsl $E100A8 dc i2"$2006" dc i4"¶ms" MEND MACRO &lab _OpenGS ¶ms &lab jsl $E100A8 dc i2"$2010" dc i4"¶ms" MEND MACRO &lab _ReadGS ¶ms &lab jsl $E100A8 dc i2"$2012" dc i4"¶ms" MEND MACRO &lab _MMStartUp &lab ldx #$0202 jsl $E10000 MEND