システム変数は、文字通り変数の一種です……といいたいところですが、実は関数の一種です (*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拡張マクロを使用する」にチェックを入れれば使用できるようになります。