あらやさんの方式で作ってみたサンプル。
絶対に使用しない数値で利用している要素をカウントするモジュール。
#module _dim_length_
//数値型配列のすべての要素を指定された数値で初期化します。
// DimReset p1,p2
// p1 は数値配列の変数名
// p2 は初期化したい数値
#deffunc DimReset array p1,int SetValue
NullValue = SetValue
SkipFlag = 0
if (length4(p1) >= 1)&(SkipFlag == 0){
MemoryLength = length4(p1) * length3(p1) * length2(p1) * length(p1)
SkipFlag = 1
}
if (length3(p1) >= 1)&(SkipFlag == 0){
MemoryLength = length3(p1) * length2(p1) * length(p1)
SkipFlag = 1
}
if (length2(p1) >= 1)&(SkipFlag == 0){
MemoryLength = length2(p1) * length(p1)
SkipFlag = 1
}
if (length(p1) >= 1)&(SkipFlag == 0){
MemoryLength = length(p1)
}
dupptr ArrayPointer,varptr(p1),MemoryLength * 4,4
repeat MemoryLength
lpoke ArrayPointer,cnt * 4,SetValue
loop
return
//数値型配列の一次元空間の要素を指定された数値で初期化します。
// DimResetOne p1,p2,p3
// p1 は初期化したい配列要素一次元 StageData(0,?,?,?)
// p2 一次元要素の最大要素数
// p3 初期化したい数値
#deffunc DimResetOne var p1,int ArrayLen,int SetValue
NullValue = SetValue
dupptr Access,varptr(p1),ArrayLen * 4,4
repeat ArrayLen
lpoke Access,cnt * 4,SetValue
loop
return
//数値型配列の一次元空間の利用要素数を取得する
// DimLength p1,p2
// p1 は取得したい配列要素一次元 StageData(0,?,?,?)
// p2 は一次元最大要素数
#deffunc DimLength var p1,int ArrayLen
dupptr Access,varptr(p1),ArrayLen * 4,4
counter = 0
repeat ArrayLen
if Access(cnt) != NullValue : counter++ : else : break
loop
return counter
#global
dim StageData,8,3
//配列変数の内容をあり得ない値で初期化します。
DimReset StageData,0x7FFFFFFF
//StageData に数値を入れてみる
StageData(0,0) = 1,2,3,4,5,6,7,8 //8個使用
StageData(0,1) = 1,2,3,4,5 //5個使用
StageData(0,2) = 1,3,2,1,4,5 //6個使用
//StageData 二次元 1 番を初期化してみる
DimResetOne StageData(0,1),length(StageData),0x7FFFFFFF
//使用されている要素数を取得表示する
DimLength StageData(0,0),length(StageData) : mes strf("StageData(0,0) は %d 個",stat)
DimLength StageData(0,1),length(StageData) : mes strf("StageData(0,1) は %d 個",stat)
DimLength StageData(0,2),length(StageData) : mes strf("StageData(0,2) は %d 個",stat