移植に関する話題を扱います。
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 で文字列配列の保存/読込が出来ます。
参考
|