QSMENU コマンドラインを実行する

書法

QSMENU [filename]* [option]*

SHELLMODE

@記述、!記述、^記述

詳細

スクリプトをメニュー付で実行する。
指定したファイルから、メニュー指定されたスクリプトを抽出し、メニュー表示をする。 ユーザーはメニューから選択したスクリプトを実行できる。
ファイル名を複数してするとそれらから順にメニューを読みこむ。 ファイル名を指定しなければ、標準入力からメニューを読みこむ。

環境変数「QS_NAME」に起動スクリプト名が格納されている。

操作方法

表示されたボタンから実行するアイテムを選ぶ。通常のWindowsの操作に従う。

操作動作
マウスでボタンを左クリック ボタンの内容を実行
スクロールバーの操作 ボタンをスクロール
マウスでボタンを右クリック 該当するスクリプトブロックを表示
スペースキー フォーカスしているボタンの内容を実行
Enterキー フォーカスしているボタンの内容を実行
↑キー フォーカスを上に移動
↓キー フォーカスを↓に移動
Homeキー フォーカスを先頭に移動
Endキー フォーカスを末尾に移動
PageUpキー フォーカスを前のページへ移動
PageDownキー フォーカスを次のページへ移動
メニュー > 終了 メニューを閉じる。通常は使用しない。

メニューの記述法

通常のQSSCRIPTの中に、ブロックを書く。
通常、ブロックは、:MENU行、あるいは、:TITLE行で始まり、 :ENDMENU:ENDTITLE行で終わる。
:ENDMENU行の前に、ファイル末があれば、ブロックはそこで終わる。 また、:MENU行、:TITLE行に出会えば、 その直前の行まででブロックは終了し、新たなブロックが始まる。 従って、ブロックの中に、ブロックを含むことは出来ない。

:MENU行で始まるブロックは、メニューブロックと呼び、 実際にメニュー選択画面に現れる。
:MENUの後ろに表示タイトルを記述する

:TITLE行で始まるブロックは、タイトルブロックと呼ぶ。
:TITLEの後ろにウィンドウのタイトルを書くことが出来る。 また、タイトルブロックは、ウィンドウを開く前に実行し、環境条件を与える役割を果たす。 特に初期化が不用ならば、空のメニューブロックを書いておけば良い。
タイトルブロックが複数存在しても、最初に現れたもののみが有効である。 タイトルブロックを省略すると、ウィンドウタイトルは QSMENU となり、 当然ながら、初期化処理は行わない。

:ENDMENUの後ろにオプションを定義できるので、 ここには、不要の場合には何も書かないことが望ましい。
現在使用できるオプションはEXITのみで、 これは、メニューブロックにのみ有効で、ブロックを実行後、 QSMENU 自体を終了する。

:MENU :MENU メニュー名
メニューブロックの開始を定義し、メニュー名を与える。
:ENDMENU :ENDMENU [ EXIT ]
ブロックの終了を明示する。必ず書く事を推奨する。
EXITオプションを指定すると、メニューブロックでは、 ブロック実行後に QSMENU を終了する。
:TITLE :TITLE タイトル
タイトルブロックの開始を定義し、ウィンドウタイトルを与える。
:ENDTITLE :ENDTITLE
タイトルブロックの終了を明示する。必ず書く事を推奨する。
:OPTION :OPTION オプション文字列
タイトルブロックの中だけで有効なオプション指定。
:OPTION USE_STD
処理に先立って標準入出力を閉じない。
:OPTION HEIGHT n
起動時のメニューの高さを項目単位で指定する。1-32の範囲。この値を元に自動調整する。
:OPTION POSITION x,y
メニューの出現位置を指定する。
:OPTION CENTER
メニューの出現位置を画面中央にする。
:OPTION WINMENU
ウィンドウのメニューを表示する。
:OPTION NOWINMENU
ウィンドウのメニューを表示しない。
:OPTION SYSMENU
ウィンドウのシステムメニューを表示する。
:OPTION NOSYSMENU
ウィンドウのシステムメニューを表示しない。

こまごまとした注意事項

  1. 環境変数、TSEXPRの変数類
    環境変数はいずれも、各メニュー間で共有する。 あるメニューで環境変数を変更すれば、以降の実行では、それが有効である。
    同様にTSEXPRの変数、配列、連想配列なども各メニューで共有する。
  2. スクリプトファイルの探索
    スクリプトは、カレントディレクトリ、path指定のディレクトリの順に探す。

  3. パスの自動追加
    qsmenu.exeの起動フォルダーをパスの最後尾に追加するので、qsmenuと同じフォルダーにおかれたプログラムはパスを書かなくても実行できる。
  4. カレントディレクトリの指定
    カレントディレクトリを指定した場合の切替えは、スクリプトの読込を終了した時点で行う。 従って、スクリプトを読みこむ時のカレントディレクトリは QSMENUを起動した時のカレントディレクトリ。 メニュー表示の直前で指定のディレクトリに切りかえる。
  5. ダイナミックな終了指定
    メニューブロックのスクリプトの中で、環境変数QSMENU_BREAKTRUEを設定すると、該当メニューブロックを終了後、直ちにプログラムを終了する。
    この変数は、スクリプトの実行に先だって常に空にされる。
  6. 標準入出力の扱い
    デフォルトではメニューの表示前に、標準入出力は最初にすべて閉じる。通常の使用法ではスクリプトの標準出力を使用しないので閉じておいた方が都合が良い。
    メニューをパイプラインの中に挟んで利用する場合は、標準入出力を閉じない方が都合が良い。標準入出力を閉じないように設定する場合には、起動オプション -Nを指定するか、:OPTION文で USE_STDを指定する。
  7. システムメニュー、ウィンドウメニュー
    システムメニュー、ウィンドウメニューを表示しないことが出来るが、この双方とも表示しない場合には、メニューのいずれかに終了機能がないと、プログラム終了が出来なくなるので注意すること。
    ウィンドウメニューは、プログラムの終了が出来るだけだが、本来のメニューに終了を定義しない場合にはこれを利用すると良い。
    システムメニューを表示しないと、最小化、最大化や終了ボタンも表示されず、また、メニューのサイズ変更も出来ない。メニューが固定されるので便利だが、終了操作が出来るように配慮する必要がある。

OPTION

-Cpath
カレントディレクトリを指定する。指定しなければ起動時のパスをそのまま引き継ぐ。
-Hnum
起動時のメニューの高さを項目単位で指定する。1-32の範囲。 この値を元に自動調整する。
-M
メニューを表示しない。
-N
実行に当たって、標準入出力を閉じない。
-P[x,y]
ウィンドウのメニューの出現位置を指定する。座標を省略すると画面中央に出現する。
-S
ウィンドウのシステムメニューを表示しない。
-W[dirname]
パイプライン接続の中間ファイルによる実行を指示する。 ディレクトリを指定すれば、そこに中間ファイルを作る。 省略すれば、システム既定ディレクトリを使用する。
通常はこのオプションを指定する必要はない。

用例

参考

バージョン

Ver 1.052013/05/05 センタリング機能を付加した。
オプション-p あるいは、:OPTION CENTER コマンドで指定する。
Ver 1.042013/04/23 メニュー選択をスペースキーだけでなく、Enterキーでも出来るようにした。
ウィンドウメニュー/システムメニューを表示しない機能を加えた。
Ver 1.032012/06/23 POSITION / HEIGHT の指定を :OPTION文より、コマンドライン指定を優先するようにした。
Ver 1.022012/05/05 標準入出力を閉じないモードを設けた。
-N オプション 導入。
:OPTION 文 導入。USE_STD / POSITION / HEIGHT。
Ver 1.012012/04/24 nulハンドル設定方法の変更
Ver 1.00 初版