[トップ][編集][ノート][編集履歴][一覧][最近の更新][->English]

移植Tips

移植に関する話題を扱います。


HSP2.61から、HSP3.xへの移植

意外とすんなりいく場合も多いようです。

  • 移植する際のポイント

hsp261cmp.asの利用

 スクリプトの先頭に「#include "hsp261cmp.as"」と書くことにより、かなりのhsp2用命令等がhsp3で使えるようになります。そのかわり、一部のHSP3関数や拡張マクロによるシステム変数等が使えなくなってしまいます(関数名等に「@hsp」を付加すれば使用できます。例えば、strmid@hspはstrmid関数として使うことができます)。
 この方法の最大の欠点は、hsp2用の演算子に優先順位のない数式をhsp3用の演算子に優先順位のある数式として評価してしまうことです。

コンバーターの利用

 コンバーターを利用する最大の利点は、hsp2用の数式にかっこをつけてhsp3用の数式に変換してくれることです。また、単に書式や名前が変わっただけの簡単な命令等は自動的に変換してくれます。コンバーターでできることを手でやるのは時間の無駄です。コンバーターで済ませてしまいましょう。

システム変数の変更

2.61での変数名 3.xでの変数名 設定される内容
system system (未定義)
hspstat hspstat HSPランタイムの情報(*1)
hspver hspver HSPのバージョン番号(*2)
cnt cnt repeat/foreach〜loopループのカウンター
err err エラーコード
stat stat 色々な命令のステータスなどを代入する汎用システム変数
mousex mousex マウスカーソルのX座標
mousey mousey マウスカーソルのY座標
mousew マウスホイールの移動量
strsize strsize getstr/exist/bloadで読み出したバイトサイズ
refstr refstr 文字列を保存する汎用のシステム変数
refdval 実数値を保存する汎用のシステム変数
looplev looplev repeat/foreach〜loopのネストレベル
sublev sublev サブルーチン(モジュール)のネストレベル
wparam wparam 割り込み時に保存されるWindowsのシステム値(wParam)
lparam lparam 割り込み時に保存されるWindowsのシステム値(lParam)
iparam iparam 割り込み要因を示す値
thismod 現在の有効なモジュール変数
2.61では、文字列操作命令 notemax メモリノートパッド全体の行数
notesize メモリノートパッド全体の文字数(バイト)
hwnd 描画先ウィンドウのウィンドウハンドル
hdc 描画先ウィンドウのデバイスコンテキスト
hinstance 現在のインスタンスハンドル
ginfo 0,prmx ginfo_mx スクリーン上のマウスカーソルX座標
ginfo 0,prmy ginfo_my スクリーン上のマウスカーソルY座標
ginfo 1,prmx ginfo_act アクティプなウィンドウID
ginfo 1,prmy ginfo_sel 操作先ウィンドウID
ginfo 2, prmx ginfo_wx1 ウィンドウの左上X座標
ginfo 2, prmy ginfo_wy1 ウィンドウの左上Y座標
ginfo 3, prmx ginfo_wx2 ウィンドウの右下X座標
ginfo 3, prmy ginfo_wy2 ウィンドウの右下Y座標
ginfo 4, prmx ginfo_vx ウィンドウのスクロールX座標
ginfo 4, prmy ginfo_vy ウィンドウのスクロールY座標
ginfo 5, prmx ginfo_sizex ウィンドウ全体のXサイズ
ginfo 5, prmy ginfo_sizey ウィンドウ全体のYサイズ
winx ginfo_winx 画面の初期化Xサイズ
winy ginfo_winy 画面の初期化Yサイズ
ginfo 7, prmx ginfo_mesx メッセージの出力Xサイズ
ginfo 7, prmy ginfo_mesy メッセージの出力Yサイズ
rval ginfo_r 現在設定されているカラーコード(R)
gval ginfo_g 現在設定されているカラーコード(G)
bval ginfo_b 現在設定されているカラーコード(B)
paluse ginfo_paluse デスクトップのカラーモード
dispx ginfo_dispx デスクトップ全体のXサイズ
dispy ginfo_dispy デスクトップ全体のYサイズ
csrx ginfo_cx カレントポジションのX座標
csry ginfo_cy カレントポジションのY座標
ginfo_intid メッセージ割り込み時のウィンドウID
curdir dir_cur カレントディレクトリ(フォルダ)
exedir dir_exe 実行ファイルがあるディレクトリ(フォルダ)
windir dir_win Windowsディレクトリ(フォルダ)
fxdirで取得可能 dir_sys Windowsシステムディレクトリ(フォルダ)
cmdline dir_cmdline コマンドライン文字列
fxdirで取得可能 dir_desktop デスクトップディレクトリ(フォルダ)
fxdirで取得可能 dir_mydoc マイドキュメントディレクトリ(フォルダ)

関数になったステートメント変更

カテゴリー 関数化された命令
メモリ操作命令 peek バッファから1バイト取得
wpeek バッファから2バイト取得
lpeek(新規) バッファから4バイト取得
基本入出力命令 gettime 日付や時間の取得
ginfo 各種ウィンドウ情報の取得
rnd 乱数の発生
sysinfo システム情報(OS/メモリ)の取得
文字列操作命令 getpath ファイルパス文字列の分解
instr 文字列の検索
strlen 文字列の長さ(バイト)の取得
strmid 文字列の切り出し
代入命令->基本入出力関数 int 整数値へ変換
str 文字列へ変換

命令の名称変更

2.61での名称 3.xでの名称
sndload mmload 音楽ファイルの読み込み
snd mmplay 音楽ファイルの再生
sndoff mmstop 音楽ファイルの再生停止

変数の確認(予約語に成っていないか)

その後実行してみてエラーの出る部分を一個ずつ確認して書き換え

loadlib関連命令の移植

  • 標準命令を利用して再現する。
    • 難しいらしい。
    • ll_peekなどは、dupptr・peek等で代替が可能。

移行シミュレーション(mineさん作、HSPベータ掲示板より引用)

ちょっと、自分のプログラムで移行シミュレーションしてみました。

#include"llmod.as"      = #Source file not found.[llmod.as]
     (→llmod3をcommonにコピーして"llmod3.hsp")

strmid w,a,0,2          = 代入できない変数名を指定しています。
     (→w=strmid(a,0,2))   (表示されたエラー行の次の行がエラー)

#include "listview.hsp" = 文法が間違っています。
     (→img.hsp を listview.hsp の前に#include)

notemax nmax            = パラメーター式の記述が無効です。
     (→nmax=notemax)

bsave p_file,buf,buf_size = ファイルが見つからないか無効な名前です。
     (p_file=""+exedir+"\\file.txt" → p_file=""+dirinfo(1)+"\\file.txt")

listview.hsp(in 519)    =変数名が指定されていません。
     (lcl_s=v2:getptr p,lcl_s...?)

getpath filename,filepath,8 = 代入できない変数名を指定しています。
     (→filename=getpath(filepath,8))   (表示されたエラー行の次の行がエラー)

あとは、strmid p1,p2,p3,p4の形式が沢山あるので、今は休憩中…。みなさんは?

まぁ地道にやって行けば、すぐ終わると思います。

その他

  • *が省略されたラベルに*をつける

変換ツールの使用

ソースコンバーターでHSP2形式のファイルを、HSP3形式のファイルに変換をすることもでき、 有効なサポートツールとなる

変換方法

プログラムで、HSP2のソースを開き、変換を開始すると、 自動的に定義ファイルにあわせて変換が開始される。 また、定義ファイルは自分で追加可能

よくある質問

bsaveで文字列の配列をうまく保存できません。

  • 複数行の文字列と2次元以上の配列以外の場合には、
    hsp3util.as の arraysave と arrayload で文字列配列の保存/読込が出来ます。

参考