AXファイルを解釈するソースを途中まで書きましたが、うまく動きません。
どなたか助言をください。
*fileload
sdim _axname
dim _axsize
dialog "ax",16,"Ax File"
_axname =refstr
if stat {
exist _axname
_axsize =strsize
if _axsize =-1 : gosub *error
sdim _axfile,_axsize
bload _axname,_axfile
}else{
gosub *error
}
*header
sdim _tmp,4
lpoke _tmp,cnt,lpeek(_axfile,cnt)
if _tmp !"HSP3" : gosub *error
dim _inf,6
repeat 6
lpoke _inf(cnt),0,lpeek(_axfile,16+cnt*4)
loop
gosub *cstype
*cs
dim _cptr
repeat
dim _tmph
dim _tmpc
dim _tmp
dim _flag,5
wpoke _tmph,0,wpeek(_axfile,_inf(0)+_cptr)
_cptr +=2
_flag(0) =_tmph &0xfff
_tmp =0x1000
repeat 4,1
_flag(cnt) =_tmph &_tmp !=0
_tmp <<1
loop
if _flag(4){
wpoke _tmpc,0,wpeek(_axfile,inf(0)+_cptr)
_cptr +=2
}else{
lpoke _tmpc,0,lpeek(_axfile,inf(0)+_cptr)
_cptr +=4
}
if _cptr >=_inf(1) :gosub *exit
mes _typename(_flag(0))+"; "+_flag(0)
repeat length(_flag)
mes _flag(cnt)
loop
mes strf("%03x",_tmpc)
//mes 111 + 222のCSを解釈しようとするとトチる
stop
loop
stop
*cstype
sdim _typename,19
_typename ="TYPE_MARK", "TYPE_VAR", "TYPE_STRING", "TYPE_DNUM", "TYPE_INUM", "TYPE_STRUCT", "TYPE_XLABEL", "TYPE_LABEL", "TYPE_INTCMD", "TYPE_EXTCMD", "TYPE_EXTSYSVAR", "TYPE_CMPCMD", "TYPE_MODCMD", "TYPE_INTFUNC", "TYPE_SYSVAR", "TYPE_PROGCMD", "TYPE_DLLFUNC", "TYPE_DLLCTRL", "TYPE_USERDEF"
return
*exit
dialog "Done.",0
*error
dialog "!",1
end
/*
////////////////////////////////////////////////////////////////////////
// 変数の概要
////////////////////////////////////////////////////////////////////////
_ax***
name AXファイルの名前
size AXファイルの大きさ
file AXファイルの内容
_inf
0 pt_cs
1 max_cs
2 pt_ds
3 max_ds
4 pt_ot
5 max_ot
//後は使い方がわからないので読み捨て
_tmp
一時変数。
_cptr
CS内のポインタ?
_tmph
中間コードの頭16bit。
_tmpc
中間コードのCode。
_flag
CSに関する変数
0 Type
1 Ex0
2 Ex1
3 Ex2
4 最上位ビット