;// 共通ルーチン // *LIB_Define numalias LIB_VARNUM,500 numalias LIB_Arg1,LIB_VARNUM numalias LIB_Arg2,LIB_VARNUM+1 numalias LIB_Arg3,LIB_VARNUM+2 numalias LIB_Tmp,LIB_VARNUM+3 ;// xyloop numalias LIB_VARNUM_XYLOOP,LIB_VARNUM+4 ; string numalias LIB_Routine,LIB_VARNUM_XYLOOP numalias LIB_Xyloop,LIB_VARNUM_XYLOOP+1 ; int numalias LIB_XCount,LIB_VARNUM_XYLOOP numalias LIB_YCount,LIB_VARNUM_XYLOOP+1 numalias LIB_XEnd,LIB_VARNUM_XYLOOP+2 numalias LIB_YEnd,LIB_VARNUM_XYLOOP+3 numalias LIB_XStep,LIB_VARNUM_XYLOOP+4 numalias LIB_YStep,LIB_VARNUM_XYLOOP+5 numalias LIB_Break,LIB_VARNUM_XYLOOP+6 ;// debug numalias LIB_DEBUG,1 numalias LIB_DEBUG_OUTPUT_MESSAGEBOX,0 defsub incary defsub decary defsub addary defsub subary defsub mulary defsub divary defsub incary2 defsub decary2 ; xyloop defsub xyloop defsub xyloopct defsub xyloopbreak ; debug defsub traceint defsub tracexy defsub traceary defsub die defsub inittimer defsub gettimerstr return *incary getparam %LIB_Arg1,%LIB_Arg2 mov ?%LIB_Arg1[%LIB_Arg2],?%LIB_Arg1[%LIB_Arg2]+1 return *decary getparam %LIB_Arg1,%LIB_Arg2 mov ?%LIB_Arg1[%LIB_Arg2],?%LIB_Arg1[%LIB_Arg2]-1 return *addary getparam %LIB_Arg1,%LIB_Arg2,%LIB_Arg3 mov ?%LIB_Arg1[%LIB_Arg2],?%LIB_Arg1[%LIB_Arg2]+%LIB_Arg3 return *subary getparam %LIB_Arg1,%LIB_Arg2,%LIB_Arg3 mov ?%LIB_Arg1[%LIB_Arg2],?%LIB_Arg1[%LIB_Arg2]-%LIB_Arg3 return *mulary getparam %LIB_Arg1,%LIB_Arg2,%LIB_Arg3 mov ?%LIB_Arg1[%LIB_Arg2],?%LIB_Arg1[%LIB_Arg2]*%LIB_Arg3 return *divary getparam %LIB_Arg1,%LIB_Arg2,%LIB_Arg3 mov ?%LIB_Arg1[%LIB_Arg2],?%LIB_Arg1[%LIB_Arg2]/%LIB_Arg3 return *modary getparam %LIB_Arg1,%LIB_Arg2,%LIB_Arg3 mov %LIB_Tmp,?%LIB_Arg1[%LIB_Arg2] mod %LIB_Tmp,%LIB_Arg3 mov ?%LIB_Arg1[%LIB_Arg2],%LIB_Tmp return *incary2 getparam %LIB_Arg1,%LIB_Arg2,%LIB_Arg3 mov ?%LIB_Arg1[%LIB_Arg2][%LIB_Arg3],?%LIB_Arg1[%LIB_Arg2][%LIB_Arg3]+1 return *decary2 getparam %LIB_Arg1,%LIB_Arg2,%LIB_Arg3 mov ?%LIB_Arg1[%LIB_Arg2][%LIB_Arg3],?%LIB_Arg1[%LIB_Arg2][%LIB_Arg3]-1 return ; 2次元ループ ; サブルーチン、X初期値、Y初期値、X終端値、Y終端値、X加算値、Y加算値 ; ステートメントのため、他のライブラリルーチンと引数を分ける必要有り *xyloop getparam $LIB_Routine,%LIB_XCount,%LIB_YCount,%LIB_XEnd,%LIB_YEnd,%LIB_XStep,%LIB_YStep mov %LIB_Break,0 ; 強制終了フラグ if %LIB_XStep=0 & %LIB_YStep=0 die "xyloop - Not Indicated Step" if %LIB_XStep>0 & %LIB_YStep=0 mov $LIB_Xyloop,"*xyloop_xloop1":goto $LIB_Xyloop if %LIB_XStep<0 & %LIB_YStep=0 mov $LIB_Xyloop,"*xyloop_xloop2":goto $LIB_Xyloop if %LIB_XStep=0 & %LIB_YStep>0 mov $LIB_Xyloop,"*xyloop_yloop1":goto $LIB_Xyloop if %LIB_XStep=0 & %LIB_YStep<0 mov $LIB_Xyloop,"*xyloop_yloop2":goto $LIB_Xyloop if %LIB_XStep>0 & %LIB_YStep>0 mov $LIB_Xyloop,"*xyloop_loop1":goto $LIB_Xyloop if %LIB_XStep>0 & %LIB_YStep<0 mov $LIB_Xyloop,"*xyloop_loop2":goto $LIB_Xyloop if %LIB_XStep<0 & %LIB_YStep>0 mov $LIB_Xyloop,"*xyloop_loop3":goto $LIB_Xyloop mov $LIB_Xyloop,"*xyloop_loop4":goto $LIB_Xyloop ; if %LIB_XStep<0 & %LIB_YStep<0 *xyloop_xloop1 if %LIB_XCount>%LIB_XEnd return goto *xyloop_main *xyloop_xloop2 if %LIB_XCount<%LIB_XEnd return goto *xyloop_main *xyloop_yloop1 if %LIB_YCount>%LIB_YEnd return goto *xyloop_main *xyloop_yloop2 if %LIB_YCount<%LIB_YEnd return goto *xyloop_main *xyloop_loop1 if %LIB_XCount>%LIB_XEnd return if %LIB_YCount>%LIB_YEnd return goto *xyloop_main *xyloop_loop2 if %LIB_XCount>%LIB_XEnd return if %LIB_YCount<%LIB_YEnd return goto *xyloop_main *xyloop_loop3 if %LIB_XCount<%LIB_XEnd return if %LIB_YCount>%LIB_YEnd return goto *xyloop_main *xyloop_loop4 if %LIB_XCount<%LIB_XEnd return if %LIB_YCount<%LIB_YEnd return goto *xyloop_main *xyloop_main gosub $LIB_Routine if %LIB_Break=1 return add %LIB_XCount,%LIB_XStep add %LIB_YCount,%LIB_YStep goto $LIB_Xyloop ; xyloopのカウンタ値取得 ; こっちは単なるルーチンなので、引数は通常どおり ; xyloopによるサブルーチン内でのみ意味がある *xyloopct getparam i%LIB_Arg1,i%LIB_Arg2 mov %%LIB_Arg1,%LIB_XCount mov %%LIB_Arg2,%LIB_YCount return ; xyloopの強制離脱 ; xyloopによるサブルーチン内でのみ意味がある *xyloopbreak mov %LIB_Break,1 return ;// debug *traceint getparam %LIB_Arg1 if LIB_DEBUG!=1 return itoa $LIB_Arg1,%LIB_Arg1 mov $LIB_Arg3,"TRACE-INT" if LIB_DEBUG_OUTPUT_MESSAGEBOX=1 mesbox $LIB_Arg1,$LIB_Arg3:return add $LIB_Arg3,$LIB_Arg1 LogOutput $LIB_Arg3 return *tracexy getparam %LIB_Arg1,%LIB_Arg2 if LIB_DEBUG!=1 return itoa $LIB_Arg1,%LIB_Arg1 itoa $LIB_Arg2,%LIB_Arg2 add $LIB_Arg1,",":add $LIB_Arg1,$LIB_Arg2 mov $LIB_Arg3,"TRACE-X,Y" if LIB_DEBUG_OUTPUT_MESSAGEBOX=1 mesbox $LIB_Arg1,$LIB_Arg3:return add $LIB_Arg3,$LIB_Arg1 LogOutput $LIB_Arg3 return *traceary getparam %LIB_Arg1,%LIB_Arg2 if LIB_DEBUG!=1 return itoa $LIB_Arg1,?%LIB_Arg1[0] for %LIB_Tmp=1 to %LIB_Arg2 add $LIB_Arg1,"," itoa $LIB_Tmp,?%LIB_Arg1[%LIB_Tmp]:add $LIB_Arg1,$LIB_Tmp next mov $LIB_Arg3,"TRACE-ARRAY" if LIB_DEBUG_OUTPUT_MESSAGEBOX=1 mesbox $LIB_Arg1,$LIB_Arg3:return add $LIB_Arg3,$LIB_Arg1 LogOutput $LIB_Arg3 return *die getparam $LIB_Arg1 mesbox $LIB_Arg1,"DIE-APPLICATION" end *inittimer resettimer return *gettimerstr getparam s%LIB_Arg1 gettimer %LIB_Arg2 itoa $%LIB_Arg1,%LIB_Arg2 return