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 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 ~DISPOSEALL &W &LAB PW &W LDX #$1102 JSL $E10000 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 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 _PackBytes &lab ldx #$2603 jsl $E10000 MEND MACRO &lab _CloseGS ¶ms &lab jsl $E100A8 dc i2"$2014" dc i4"¶ms" MEND MACRO &lab _CreateGS ¶ms &lab jsl $E100A8 dc i2"$2001" dc i4"¶ms" MEND MACRO &lab _DestroyGS ¶ms &lab jsl $E100A8 dc i2"$2002" 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 _WriteGS ¶ms &lab jsl $E100A8 dc i2"$2013" dc i4"¶ms" MEND MACRO &lab _BlockMove &lab ldx #$2B02 jsl $E10000 MEND MACRO &lab _NewHandle &lab ldx #$0902 jsl $E10000 MEND MACRO &lab _MMStartUp &lab ldx #$0202 jsl $E10000 MEND