Home -> HSP講座 -> システム変数について

システム変数!?

システム変数は、文字通り変数の一種です……といいたいところですが、実は関数の一種です (*1)
ただし、( ) や引数がありません。変数っぽく、名前だけで使います ( 形容詞を語幹だけで使うみたいな……違うか。ごめんなさい )

では、実際に使ってみましょう。

	dialog "txt", 16, "テキストファイル"	// ファイルを開く
	if ( stat == 0 ) : end
	dialog "開かれたファイルは " + refstr + " です。", 0
	end

ユーザにファイルを選んでもらうサンプルです。
ここでは、最もよく使われるシステム変数 stat (int型) と、たまーに使われる refstr (str型) が登場しています。

システム変数は、命令とかが実行された後に、その結果が代入されていることがよくあります。
例えば、dialog 命令のモード 16 では、ファイルが指定された場合は stat に 1 を、そうでない場合は 0 (偽)を代入します。
また、ファイルが指定された場合は、refstr に、そのファイルのパス ( ディレクトリ+ファイル名+拡張子(.*) ) が代入されます。

システム変数の値が変わるタイミングはいくらでもありますので、スクリプトを組んでいる間にたくさん発見があると思います。
それもHSPの楽しみの一つですね (たぶん)。

システム変数一覧 (全20個)
名前 由来 (推測)
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拡張マクロを使用する」
にチェックを入れれば使用できるようになります。
※ HSP3.2以降はこの項目がなく、常に使えます。


※ハンドル
ハンドルとは、コンピュータの中のいろんなものに付けられた番号です。ウィンドウや、実行中のプログラムにもあります。
基本的に、知らなくても HSP は使えます ( というか、これを代わりに考えてもらうために HSP がある )
※インスタンス
インスタンスとは、ある規格に基づいて作られたオブジェクトのこと。
実体という意味です。
たとえば、dim a とすると、「int型」という規格に基づいて、変数 a が作られます ( 「作られる」というのは正確ではないが)
この、変数 a は、立派なインスタンスです。
(int の規格とは、4byte で、整数値を保持するということ)
ちなみに、hinstance が返してくる値は、「実行しているプログラムのハンドル」です。使う必要はほとんどありませんが。
*1 変数ではなく関数
全然関係ない話で恐縮ですが、ある変数が関数でもある、という状況は、数学では起こりえます。これは「変数」の意味(定義)が違うため。