システム変数は、文字通り変数の一種です……といいたいところですが、実は関数の一種です (*1)。
ただし、( ) や引数がありません。変数っぽく、名前だけで使います ( 形容詞を語幹だけで使うみたいな……違うか。ごめんなさい )。
では、実際に使ってみましょう。
dialog "txt", 16, "テキストファイル" // ファイルを開く if ( stat == 0 ) : end dialog "開かれたファイルは " + refstr + " です。", 0 end
ユーザにファイルを選んでもらうサンプルです。
ここでは、最もよく使われるシステム変数 stat (int型) と、たまーに使われる refstr (str型) が登場しています。
システム変数は、命令とかが実行された後に、その結果が代入されていることがよくあります。
例えば、dialog 命令のモード 16 では、ファイルが指定された場合は stat に 1 を、そうでない場合は 0 (偽)を代入します。
また、ファイルが指定された場合は、refstr に、そのファイルのパス ( ディレクトリ+ファイル名+拡張子(.*) ) が代入されます。
システム変数の値が変わるタイミングはいくらでもありますので、スクリプトを組んでいる間にたくさん発見があると思います。
それもHSPの楽しみの一つですね (たぶん)。
名前 | 型 | 値 | 由来 (推測) |
---|---|---|---|
stat | int | 命令から得られる数値 | STATus |
refstr | str | 命令から得られる文字列 | REFerence STRing |
refdval | double | 命令から得られる実数 | REFerence Double VALue |
cnt | int | repeat ループ内のカウンタ | CouNTer |
strsize | int | 文字列の長さ | STRing SIZE |
mousex | int | 現在のマウスカーソルの x 座標 | MOUSE X |
mousey | int | 現在のマウスカーソルの y 座標 | MOUSE Y |
mousew | int | ホイール付きマウスの移動量 | MOUSE Wheel |
hwnd | int | 現在のウィンドウのハンドル | Handle of WiNDow |
iparam | int | 割り込みの要因 | Integer PARAMeter |
wparam | int | 割り込み時に保存される Windows のシステム値(引用) | Word PARAMeter |
lparam | int | LPARAM 値 (意味は場合による) | Long PARAMeter |
sublev | int | サブルーチンの深さ | SUBroutine nest LEVel |
looplev | int | repeat ループの深さ | LOOP nest LEVel |
err | int | エラーが起こったときのエラー番号 | ERRor |
hdc | int | デバイスコンテキストのハンドル | Handle of Device Context |
hinstance | int | 実行中のこのプログラムのインスタンス・ハンドル | Handle of INSTANCE |
thismod | struct | #modfunc等の第一引数に渡された変数 | THIS instance of MODule |
hspstat | int | HSPランタイムの情報 | Hot Soup Processer STATus |
hspver | int | HSPのバージョン番号 | Hot Soup Processer VERsion |
このくらいです。(多っ!)
このほかにも拡張マクロ(ginfo_* や dir_* 等)が30個以上もありますが……省略します。
それらの拡張マクロは、
「HSP拡張マクロを使用する」にチェックを入れれば使用できるようになります。