コールバックでマシン語を埋め込む必要があるときの、
ダンプコードからのHSP コードへの変換プログラム。
全体的なやり方については、ちょくとさんのウェブサイトの中の、
を参照してください。
; マシン語コード変換スクリプト 簡易。
#uselib "user32.dll"
#func CharUpper "CharUpperA" var
varname = "code" ; 変数名
numline = 6 ; 1行の要素数
; 出力されたマシン語コードを記述
cod = {"
8B 44 24 04 83 C0 1C 80 38 40 74 11 50 8B 44 24
14 6A 00 68 43 01 00 00 FF 70 04 FF 10 33 C0 40
C2 10 00
"}
CharUpper cod
dim alp,4 : sets = 0 : c = 0 : s = "" : res = varname+"(0)=$"
repeat 4 : alp(cnt) = "" : looprepeat strlen(cod)
dat = peek(cod,cnt)
if (dat<48)|(90<dat) : continue
if (dat>57)&(65>dat) : continuepoke s,c\2,dat
c++
if c\2 = 0 {
alp((c/2)-1) = s
s = ""
if c=8 : c=0 : gosub *mo
}
loop
if c!=0 : gosub *mo
res = strmid(res,0,strlen(res)-3)
if (sets\2) : res = res+", $00000000" : sets++
buf = "xdim "+varname+","+sets+"\n"+res
mesbox buf, ginfo_winx, ginfo_winy, 4
stop
*mo
repeat 4 : res = res + alp(3-cnt) : loop
repeat 4 : alp(cnt) = "" : loop
sets++
res = res+", "
if (sets\numline) = 0 : res = strmid(res,0,strlen(res)-2)+"\n"+varname+"("+numline+")="
res = res+"$"
return
ちょくとさんのウェブサイトに掲載されているものと比較して、信頼性が著しく違います。
向こうはちゃんとした物ですが、こっちはとりあえずそのコードを出すだけ。
動くかどうかは動かしてみるまで分かりません。
強烈にアバウトな感じですが、まぁ、そんな感じで。
#uselib “user32.dll”
#func CharUpper “CharUpperA” var
varname = “code” ; 変数名
numline = 6 ; 1行の要素数
; 出力されたマシン語コードを記述
cod = {”
8B 44 24 04 83 C0 1C 80 38 40 74 11 50 8B 44 24
14 6A 00 68 43 01 00 00 FF 70 04 FF 10 33 C0 40
C2 10 00
“}
CharUpper cod
dim alp,4 : sets = 0 : c = 0 : s = “” : res = varname+”(0)=$”
repeat 4 : alp(cnt) = “” : loop
repeat strlen(cod)
dat = peek(cod,cnt)
if (dat<48)|(9057)&(65>dat) : continue
poke s,c\2,dat
c++
if c\2 = 0 {
alp((c/2)-1) = s
s = “”
if c=8 : c=0 : gosub *mo
}
loop
if c!=0 : gosub *mo
res = strmid(res,0,strlen(res)-3)
if (sets\2) : res = res+”, $00000000″ : sets++
buf = “xdim “+varname+”,”+sets+”\n”+res
mesbox buf, ginfo_winx, ginfo_winy, 4
stop
*mo
repeat 4 : res = res + alp(3-cnt) : loop
repeat 4 : alp(cnt) = “” : loop
sets++
res = res+”, ”
if (sets\numline) = 0 : res = strmid(res,0,strlen(res)-2)+”\n”+varname+”(“+numline+”)=”
res = res+”$”
return