HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0115
sakurallmod(loadlib)のll_bin命令について4解決


sakura

リンク

2017/1/15(Sun) 08:51:42|NO.77935

>●16進文字列をバイナリに変換
>ll_bin v1,"s2"

>v1 : バイナリに変換したものを代入する変数
>s2 : バイナリに変換する文字列

この命令をHSP3用に移植してモジュール化した人いませんか?
過去の資産を移植していて、等価のものがあれば教えて下さい。



この記事に返信する


掘木

リンク

2017/1/15(Sun) 12:44:59|NO.77936

ちょろっと2.6x時代の資料を漁ってみましたが、
少なくともll_bin単体での移植は不可能でしょう。

ll_binといいますかLoadLibの資料としてここを参照しました。
http://usk.s16.xrea.com/hsp/hsphelp_eng/hsp26_eng/docs/loadlib/readme.txt
みたところ、
・ll_ret、ll_retset辺りが絡む
・引数仕様が変数とあるが、どのような型に対応するべきなのか
といった観点から完全に移植したと言い切れるケースがあるのか不明です。
(また、実例をhsp3に放り込むとhsp2の解釈との乖離が発生しそうに見えます。)

個人的な話ですと、hsp2.6x時代の記述や呼び出し規則なんかもだいぶ忘れかかっているため、
適当に拵えると制約条件などを見落として余計なトラブルが増えそうです。
といいますか、厳密さを追い求めると無理でしょう。

ある程度使用用途に見合ったレベルで制約条件を与えてやると実装自体はそこまで辛くないように見えます。
(どんな制約条件与えるか次第ですが)
strrepで空白や改行を削って2文字ずつ$付き文字で整数変換、pokeで書くとかそんな力業コードなどなど。

拡張プラグインによるユーザー定義型とかモジュール型変数とか投げられたらどうやって処理すりゃいいんだろう…



tds12

リンク

2017/1/15(Sun) 15:16:44|NO.77939

ll_binのソースコードは、
これだけのようなので
移植は簡単そうです。

BYTE htoi(BYTE c) { if ( c >= '0' && c <= '9' ) return (c - '0'); if ( c >= 'a' && c <= 'f' ) return (c - 'a' + 10); if ( c >= 'A' && c <= 'F' ) return (c - 'A' + 10); return 0xff; } EXPORT BOOL WINAPI ll_bin(PVAL2 *pval, char *str, int off, int p4) { LPBYTE pbin = (LPBYTE)pval->pt; LPBYTE pstr = (LPBYTE)str; LPBYTE pstart; BYTE bin, c, a; int memsize; pbin += off; pstart = pbin; memsize = pval->len[1] << 2; memsize -= off; // "00 0A CF 00 10 F A" do { c = *pstr; pstr++; if ( 0 == c ) break; if ( c <= ' ' ) continue; bin = htoi(c); if ( bin > 0xf ) break; c = *pstr; pstr++; if ( c != 0 && c > ' ' ) { a = htoi(c); if ( a > 0xf ) break; bin = ( bin << 4 ) | a; } *pbin = bin; pbin++; memsize--; } while ( c != 0 && memsize > 0 ); *pResult = (int)(pbin - pstart); return ( 0 == c ? 0 : memsize > 0 ? -1 : -2 ); }
ソースは自由に使えるそうです。
公開元:http://www5b.biglobe.ne.jp/~diamond/hsp/hsp2file.htm#LOADLIB_DLL

少し前まで、HSPラウンジに移植したモジュールがあった気がするのですが、
サイトごと消えてしまったようです。



GENKI

リンク

2017/1/15(Sun) 16:19:16|NO.77940

完全に同じではありませんが、おおよそ同じ動作をする(多分)ものを作ってみました。
動作結果はデバッグウィンドウで確認してください。

#module #deffunc ll_bin var p1, str p2 ; 不要物除去 ;※ここに手間をかけるとコメント等も記入できるようになります。 sdim s, strlen(p2) s = p2 strrep s, " ", "" strrep s, "\n", "" ; 書き込み dim p1, strlen(s)/2 repeat strlen(s)/2 ;1バイト(2文字)ずつ読み込み b = int("$" + strmid(s, cnt*2, 2)) poke p1, cnt, b loop return #global ;※スペースと改行以外は余計なものを入れることが出来ません。 s = {" 8B 44 24 04 C1 E0 04 C3 "} sdim m, 8 ll_bin m, s

HSP2当時から消えた機能はだいたいは、HSP3では簡単に実装出来るようになっている機能です。
必要なくなったから消えたということです。(ほとんどは)



sakura

リンク

2017/1/15(Sun) 21:20:42|NO.77942

掘木さん
tds12さん

回答、および情報提供ありがとうございます。

GENKIさん
モジュールの提供ありがとうございます。
あとで検証してみます。
お世話になりました。



ONION software Copyright 1997-2023(c) All rights reserved.