         macro
&lab     cstr  &s
&lab     dc    c"&s",i1'0'
         mend

         MACRO
&LAB     MOVE4 &F,&T
&LAB     ~SETM
         LDA   2+&F
         STA   2+&T
         LDA   &F
         STA   &T
         ~RESTM
         MEND

         macro
&lab     csubroutine &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  1
.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+4+&work
&totallen seta &totallen+&len
&i       seta  &i+1
         aif   &i<=c:&parms,^b
.e
         tsc
         aif   &work=0,.f
         sec
         sbc   #&work
         tcs
.f
         phd
         tcd
         mend


         macro
&lab     creturn &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+2
         sta   &worklen+&totallen+2
         lda   &worklen+1
         sta   &worklen+&totallen+1
.i
         pld
         tsc
         clc
         adc   #&worklen+&totallen
         tcs
         aif   &len=0,.j
         tya
.j
         rtl
         mend
