・命名規則
(2007/07/05 更新) コンソールアプリケーションの標準入出力を起動の時点でリダイレクトさせる場合、少なくともCreateProcess APIに渡すSTARTUPINFO構造体の該当メンバにリダイレクト先のハンドルを入れておく必要があるのですが、このメンバを有効にしたままリダイレクトさせないようにするには注意が必要です。その場合、該当メンバには0などの無効なハンドルではなく、メンバを無効にしていた場合にデフォルトで割り当てられるハンドルを自分で設定してやらなければいけません。Windows XP上で調べた限りでは、デフォルトで与えられる標準入出力ハンドルの値は固定されており、標準入力、標準出力、標準エラー出力はそれぞれ、3、7、11です。 このサイトで公開されているスクリプトの中には、上記の部分について0を設定してしまっているものがあります。修正が遅れていて申し訳ないのですがご注意ください。
変数・ユーザ定義命令(関数)
ラベル名
マクロ名
モジュール名
(動作確認ver : 3.1b5)
※※※ このコンテンツは現在修正中です。修正が終わるまで情報の利用は控えて下さい。 ※※※ ver 3.1b6 から、ユーザ定義命令(関数)に対して local 指定が可能になった。この機能を利用するとモジュールの内と外、または別モジュール同士であれば、一応名前の衝突を気にする必要がなくなる。 一応というのは、命令(関数)の定義時と呼び出し時に、名前に"@"+(モジュール名)の接尾辞を付加する必要があるから。(モジュール外のものには必要ない) 変数については以前から似たような扱いができたが、ローカル指定したユーザ定義命令(関数)の場合、呼び出し元が同一モジュールか否かにかかわらず接尾辞を付加しなければならない。 この機能は #deffunc 命令、#defcfunc 命令だけでなく、#modfunc命令に対しても使うことができる。
(動作確認ver : 3.1b6)
実行時に渡されたコマンドラインは、dirinfo(4)関数、またはその別名のdir_cmdlineで取得することができる。ただし、コマンドラインを個々の引数に分解するには、このようなモジュールを作るなど自前の処理を書く必要がある。 実行された実行ファイルまたはスクリプトファイル自身の名前はdir_cmdline内の文字列には含まれない。
HSPではプリプロセッサ命令の#includeを使うことで別ファイルに保存されたスクリプトを挿入することができる。#includeが行うのは、コンパイル前に単純にファイルを結合することだけ。下のサンプルスクリプトはサブルーチン(ユーザ定義命令)が定義されたファイルをインクルードし、サブルーチンを呼び出している例。
ひとつのプログラムの中で同じファイルの内容が複数回挿入されないようにするには、プリプロセッサ命令の#ifndef/#endifと#defineを利用する。 (インクルードされるスクリプトファイルの例)
1度目のインクルードでは「__SAMPLE_MOD__」というマクロ名が定義されていないため、マクロの定義とモジュール(*)内のユーザ定義命令の定義が実行されるが、2度目以降は「__SAMPLE_MOD__」が定義済みなので実行されない。「__SAMPLE_MOD__」の部分は他のマクロと重複しない名前を選ぶ必要がある。 * モジュールは変数や定数に対して名前空間の分離を行う仕組み |