デバッグウィンドウ風の変数取得(手抜き実装)
dialog "", 16, "vsave命令で保存したファイル"
if stat == 0 : end
exist refstr
sdim buf, strsize
bload refstr, buf
sdim list, 1024
// チェック
if lpeek(buf, 0) == 0x76707368 && lpeek(buf, 4) == 0x00001000{
num = lpeek(buf, 8) // 格納されている変数の数
data_offset = lpeek(buf, 12) // データ開始オフセット
varinfo_offset = 16 // 変数情報格納オフセット(開始は16)
varinfo_size = 64 // 変数情報格納サイズ (サイズは64)
sdim varinfo, varinfo_size // 変数情報格納用変数
list += ""+num+"件 検出\n"
// 変数の数だけループする
repeat num
// コピーする
memcpy varinfo, buf, varinfo_size, 0, varinfo_offset
// 変数名オフセット
varname_offset = lpeek(varinfo, 0) + data_offset
// 実データオフセット
vardata_offset = lpeek(varinfo, 4) + data_offset
// 変数の種類(2 = 文字列, 3 = 実数, 4 = 整数 etc...) vartypeと一緒
vardata_type = wpeek(varinfo, 16)
// 変数のモード
vardata_mode = wpeek(varinfo, 18)
// 配列変数の要素数
vardata_array1 = lpeek(varinfo, 24)
vardata_array2 = lpeek(varinfo, 28)
vardata_array3 = lpeek(varinfo, 32)
vardata_array4 = lpeek(varinfo, 36)
// 使用サイズ
vardata_usesize = lpeek(varinfo, 40)
// 変数名を取得(手抜き)
dupptr tmp, varptr(buf) + varname_offset, 1, 2
varname = tmp
if vardata_type == 1{
// ラベル型変数の時
type = "label"
data = ""
}else : if vardata_type == 2{
// 文字列型変数の時
type = "str"
bufsize = lpeek(buf, vardata_offset + 4)
dupptr tmp, varptr(buf) + vardata_offset + 8, 1, 2
data = tmp
}else : if vardata_type == 3{
// 実数型変数の時
type = "double"
bufsize = vardata_usesize
dupptr tmp, varptr(buf) + vardata_offset, 8, 3
data = str(tmp)
}else : if vardata_type == 4{
// 整数型変数の時
type = "int"
bufsize = vardata_usesize
dupptr tmp, varptr(buf) + vardata_offset, 4, 4
data = str(tmp)
}else : if vardata_type == 5{
// モジュール型変数の時
type = "module"
data = ""
}else : if vardata_type == 6{
// COMオブジェクト型変数の時
type = "comobj"
data = ""
}else{
// それ以外
type = "unknown"
data = ""
}
// デバッグウィンドウの変数一覧風に書き出す
list += "-------------------------------------------\n"
list += "変数名:"+varname+"\n"
list += "型:"+type+"\n"
list += "配列:("+vardata_array1+","+vardata_array2+","+vardata_array3+","+vardata_array4+")\n"
list += "モード:"+vardata_mode+"\n"
list += "使用サイズ"+vardata_usesize+"\n"
list += "バッファサイズ"+bufsize+"\n"
list += "内容:\n"+data+"\n\n"
// 足していく
varinfo_offset += varinfo_size
loop
}else{
mes "ファイルが違います"
}
notesel list
notesave "vardump.txt"
exec "vardump.txt", 16
end