SMG$READ_STRING ルーチンが提供する機能の他に,キーパッド・キーによる行作成機能を使用すれば,行単位のコマンド ( たとえば,Command Definition ユーティリティを使用するユーティリティなど ) を含むアプリケーションにとって強力で柔軟なツールになります ( 詳しい説明は,『OpenVMS Command Definition, Librarian, and Message Utilities Manual』を参照してください )。
行作成機能を使用すれば,特定のキー(この後の説明を参照)を文字列に等しいものとして定義できます。 1 行を入力した後,これらのキーのいずれかを押すと,そのキーに対応する文字列 ( 同値文字列 ) が,戻されるコマンド文字列に挿入されます。たとえば,アプリケーションで
[PF2]キーを "HELP" という文字列と等しく定義した場合には,
[PF2]キーを押すと,そのコマンドはアプリケーションに戻されます。
また,同値文字列をエコー表示することも指定できます。この場合には,"HELP"という文字列がエコー表示されます。キーパッド・キーを認識する操作と同値文字列を挿入する操作は, SMG$READ_COMPOSED_LINE ルーチンが自動的に処理します。アプリケーションは,戻された行をユーザが行全体を入力したかのように取り扱います。
キー定義はキー定義テーブルに登録されます。このテーブルは SMG$CREATE_KEY_TABLE ルーチンを呼び出すことにより作成されます。
キー定義は SMG$ADD_KEY_DEF ルーチンを呼び出すことによりテーブルに追加でき, SMG$DELETE_KEY_DEF ルーチンを呼び出すことによりテーブルから削除できます。また,SMG$DEFINE_KEY ルーチンと SMG$LOAD_KEY_DEFS ルーチンを呼び出すことにより,キー定義を追加することも可能です。これらのルーチンは DCL の DEFINE/KEY コマンド ( またはこれらのコマンドを登録したファイル ) を受け付けます。詳しい説明は,これらのルーチンの説明を参照してください。また,DEFINE/KEY コマンドについては,『OpenVMS DCL ディクショナリ』を参照してください。
定義可能なキーは, 表 3-1 に示したファンクション・キーとキーパッド・キー,制御キー・シーケンス([Ctrl/A]〜[Ctrl/Z]ただし, [Ctrl/M]([RETURN]) を除く)であり,行編集が許可されていない場合は行編集キーも含まれます。
キー定義には複数の属性が割り当てられます。
- TERMINATE 属性は,このキーが押されたときに,入力行を終了するかどうかを指定します。
- NOTERMINATE 属性は,追加文字と追加キーストロークを入力できることを指定します。省略時の設定は TERMINATE です。
- ECHO 属性は,キーが押されたときに,同値文字列をエコー表示するかどうかを指定します。省略時の設定は ECHO です。
- PROTECT 属性は,キーを定義した後,そのキー定義を変更または削除できるかどうかを指定します。省略時の設定は NOPROTECT です。
この他に,LOCK_STATE 属性,IF_STATE 属性,および STATE 属性があります。これらの属性については,この後の節で説明します。
各キーには,現在の状態値に応じて多くの定義を割り当てることができます。状態はキーの意味を判断するために使用されます。たとえば,状態を "GOLD" に設定するために [PF1] を定義し, IF_STATE="GOLD" 状態の[PF2]を "HELP *" として定義した場合には,
[PF1]と[PF2]を押した結果, "HELP *" がコマンド行として戻されます。この場合,[PF1]の定義には同値文字列が存在せず, NOTERMINATE 属性を指定しなければなりません。
状態名は最大 31 文字の英数字で構成される文字列であり,ドル記号($)とアンダースコア (_) も使用できます。 1 行が通常のキーストロークと同値文字列で構成される場合には, SMG$READ_COMPOSED_LINE ルーチンは
現在の状態名 と呼ぶ文字列を管理します。最初のキーが押される前の現在の状態は "DEFAULT" です。 STATE 属性に対して値が指定されている定義を持つキーを押した場合には,現在の状態は指定された状態に変更されます。 LOCK_STATE 属性を指定しない限り,次の定義済みキーを押した後,状態名は "DEFAULT" に戻ります。
終了文字は,仮想キーボードからデータの転送を終了します。終了文字はキャリッジ・リターンや
[Ctrl/Z] などの1文字,あるいはキーボードのキーを押すことにより生成される文字シーケンス ( エスケープ・シーケンス ),あるいは時間切れやバッファの満杯などの条件のいずれでもかまいません。
終了文字は仮想キーボードから読み込まれるデータの一部ではありません。終了文字は独立した引数を使用して,整数値 ( 符号なしワード ) として呼び出しプログラムに戻されます。単一文字終了文字の場合には,値は終了文字の 8 ビット・コードです。単一文字終了文字コードは 0 〜 255 の範囲です。
文字シーケンス終了文字は装置から独立した形式で戻されます。これらのコードは SMG$K_TRM_keyname の形式です ( たとえば,SMG$K_TRM_DELETE )。 VT220 ( および VT200 と互換性のある ) 漢字ターミナルの可能な各ファンクション・キーに対して,固有のコードが割り当てられています。他の漢字ターミナルのキー・コードは, VT220 の対応するキーのコードを使用して戻されます。したがって,アプリケーション・プログラムは使用する漢字ターミナルのタイプを認識する必要がありません。日本語 SMG ルーチンは異なる終了文字シーケンスを統一された機能コードに自動的に変換します。
条件で終了する入力操作は,SMG$K_TRM_CANCELLED,SMG$K_TRM_TIMEOUT, SMG$K_TRM_BUFFER_FULL,SMG$K_TRM_UNKNOWN という終了文字コードによって示されます。
SMG$READ_STRING ルーチンと SMG$READ_VERIFY ルーチンを呼び出す場合には,省略時の単一文字終了文字は 0 〜 31 の範囲のすべての文字ですが,バックスペース(8),水平タブ(9),ライン・フィード(10),垂直タブ(11),およびフォーム・フィード(12)を除きます。これらの文字は OpenVMS ターミナル・ドライバに対して設定されている省略時の終了文字です。しかし,8 ビット文字コードはすべて終了文字として使用できます。終了文字集合は SMG$READ_STRING ルーチンまたは SMG$READ_VERIFY ルーチンのそれぞれの呼び出しごとに変更できます。 SMG$READ_COMPOSED_LINE ルーチンを呼び出す場合には,省略時の単一文字終了文字はキャリッジ・リターン(13)と[CTRL/Z] だけです。 SMG$READ_COMPOSED_LINE ルーチンに対して終了文字セットを変更する場合には,キー定義機能を使用します。詳しい説明は,
第 3.3 節 の行作成の説明を参照してください。
SMG$NAME_TO_KEYCODE ルーチンは,キーボードのキーの名前を対応する終了文字コードに
変換します。一方,SMG$KEYCODE_TO_NAME ルーチンは終了文字コードをキーボードのキ
ーの対応する名前に変換します。
表 3-1 は,単一文字ではない各終了文字の終了文字名または状態を示しています。この表には,日本語 SMG 入力ルーチンがサポートする各ターミナル・タイプの各終了文字に対して,そのコードとキーも示されています。