# 日本語 OpenVMS
日本語画面管理ライブラリ
利用者の手引き

前へ | 次へ | 目次 | 索引

# 3.4 状態

各キーには，現在の状態値に応じて多くの定義を割り当てることができます。状態はキーの意味を判断するために使用されます。たとえば，状態を "GOLD" に設定するために `[PF1]` を定義し， IF_STATE="GOLD" 状態の`[PF2]`を "HELP *" として定義した場合には， `[PF1]`と`[PF2]`を押した結果， "HELP *" がコマンド行として戻されます。この場合，`[PF1]`の定義には同値文字列が存在せず， NOTERMINATE 属性を指定しなければなりません。

状態名は最大 31 文字の英数字で構成される文字列であり，ドル記号($)とアンダースコア (_) も使用できます。 1 行が通常のキーストロークと同値文字列で構成される場合には， SMG$READ_COMPOSED_LINE ルーチンは 現在の状態名 と呼ぶ文字列を管理します。最初のキーが押される前の現在の状態は "DEFAULT" です。 STATE 属性に対して値が指定されている定義を持つキーを押した場合には，現在の状態は指定された状態に変更されます。 LOCK_STATE 属性を指定しない限り，次の定義済みキーを押した後，状態名は "DEFAULT" に戻ります。

# 3.5 終了文字

終了文字は，仮想キーボードからデータの転送を終了します。終了文字はキャリッジ・リターンや `[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 入力ルーチンがサポートする各ターミナル・タイプの各終了文字に対して，そのコードとキーも示されています。

表 3-1 終了文字の値
キー名 | 値 | VT200 および VT300 シリーズ | VT100 | VT52
--- | --- | --- | --- | ---
キーパッド・キー
DELETE | SMG$K_TRM_DELETE | < X| | DELETE | DEL
PF1 | SMG$K_TRM_PF1 | PF1 | PF1 | Blue
PF2 | SMG$K_TRM_PF2 | PF2 | PF2 | Red
PF3 | SMG$K_TRM_PF3 | PF3 | PF3 | Black
PF4 | SMG$K_TRM_PF4 | PF4 | PF4 |
KP0 | SMG$K_TRM_KP0 1 | 0 | 0 | 0
KP1 | SMG$K_TRM_KP1 1 | 1 | 1 | 1
KP2 | SMG$K_TRM_KP2 1 | 2 | 2 | 2
KP3 | SMG$K_TRM_KP3 1 | 3 | 3 | 3
KP4 | SMG$K_TRM_KP4 1 | 4 | 4 | 4
KP5 | SMG$K_TRM_KP5 1 | 5 | 5 | 5
KP6 | SMG$K_TRM_KP6 1 | 6 | 6 | 6
KP7 | SMG$K_TRM_KP7 1 | 7 | 7 | 7
KP8 | SMG$K_TRM_KP8 1 | 8 | 8 | 8
KP9 | SMG$K_TRM_KP9 1 | 9 | 9 | 9
ENTER | SMG$K_TRM_ENTER 2 | ENTER | ENTER | ENTER
MINUS | SMG$K_TRM_MINUS 1 | -- | -- |
COMMA | SMG$K_TRM_COMMA 1 | , | , |
PERIOD | SMG$K_TRM_PERIOD 1 | . | . |
カーソル移動キー
UP | SMG$K_TRM_UP | 上向き矢印 | 上向き矢印 | 上向き矢印
DOWN | SMG$K_TRM_DOWN | 下向き矢印 | 下向き矢印 | 下向き矢印
LEFT | SMG$K_TRM_LEFT | 左向き矢印 | 左向き矢印 | 左向き矢印
RIGHT | SMG$K_TRM_RIGHT | 右向き矢印 | 右向き矢印 | 右向き矢印
ファンクション・キー
F6 | SMG$K_TRM_F6 | F6 |  |
F7 | SMG$K_TRM_F7 | F7 |  |
F8 | SMG$K_TRM_F8 | F8 |  |
F9 | SMG$K_TRM_F9 | F9 |  |
F10 | SMG$K_TRM_F10 | F10 |  |
F11 | SMG$K_TRM_F11 | F11 |  |
F12 | SMG$K_TRM_F12 | F12 |  |
F13 | SMG$K_TRM_F13 | F13 |  |
F14 | SMG$K_TRM_F14 | F14 |  |
HELP | SMG$K_TRM_HELP 3 | HELP |  |
DO | SMG$K_TRM_DO 3 | DO |  |
F17 | SMG$K_TRM_F17 | F17 |  |
F18 | SMG$K_TRM_F18 | F18 |  |
F19 | SMG$K_TRM_F19 | F19 |  |
F20 | SMG$K_TRM_F20 | F20 |  |
編集キー
FIND | SMG$K_TRM_FIND | Find |  |
INSERT_HERE | SMG$K_TRM_INSERT_HERE | Insert Here |  |
REMOVE | SMG$K_TRM_REMOVE | Remove |  |
SELECT | SMG$K_TRM_SELECT | Select |  |
PREV_SCREEN | SMG$K_TRM_PREV_SCREEN | Prev Screen |
編集キー
NEXT_SCREEN | SMG$K_TRM_NEXT_SCREEN | Next Screen |
条件 |  |  |  |
CANCELLED | SMG$K_TRM_CANCELLED |  |  |
TIMEOUT | SMG$K_TRM_TIMEOUT |  |  |
BUFFER_FULL | SMG$K_TRM_BUFFER_FULL |  |  |
UNKNOWN | SMG$K_TRM_UNKNOWN 4 |  |  |

1これらはメイン・キーボードではなく，数値キーパッドのキーです。これらの値は，ターミナル・キーパッドがアプリケーション・モードの場合にだけ使用されます。キーパッドが数値モードの場合には，キーはメイン・キーボードの対応するキーと同じです。詳しくは，SMG$SET_KEYPAD_MODE ルーチンの説明を参照してください。
2キーパッドが数値モードの場合には，ENTER はキャリッジ・リターンと同じです。詳しくは，SMG$SET_KEYPAD_MODE ルーチンの説明を参照してください。
3HELP と DO は VT220 キーボードの F15 および F16 と同じです。
4VT200 および認識されない終了文字を受け付けた場合には，値は SMG$K_TRM_UNKNOWN になります。

終了文字の値のシンボリック定義は，弊社が提供する $SMGDEF というの名前のシンボル・ライブラリに登録されています ( たとえば，MACRO プログラムでこれらの定義を検索する場合には， $SMGDEF を呼び出します )。シンボル名は SMG$K_TRM_keyname の形式です。ただし，keyname 引数は 表 3-1 に示したキー名です。終了文字コードが，1 〜 26 の場合には，それは `[Ctrl/A]`〜`[Ctrl/Z]` の制御シーケンスに対応し，キー名は，`[Ctrl/A]` の場合は CTRLA であり， `[Ctrl/B]` の場合は CTRLB です。以下も同様です。次の同意語も定義されています。

シンボル | 同意語
--- | ---
SMG$K_TRM_BS | SMG$K_TRM_CTRLH
SMG$K_TRM_HT | SMG$K_TRM_CTRLI
SMG$K_TRM_LF | SMG$K_TRM_CTRLJ
SMG$K_TRM_CR | SMG$K_TRM_CTRLM
SMG$K_TRM_E1 | SMG$K_TRM_FIND
SMG$K_TRM_E2 | SMG$K_TRM_INSERT_HERE
SMG$K_TRM_E3 | SMG$K_TRM_REMOVE
SMG$K_TRM_E4 | SMG$K_TRM_SELECT
SMG$K_TRM_E5 | SMG$K_TRM_PREV_SCREEN
SMG$K_TRM_E6 | SMG$K_TRM_NEXT_SCREEN
SMG$K_TRM_F15 | HELP
SMG$K_TRM_F16 | DO

# 3.6 行の再呼び出しと再呼び出しバッファ

日本語 SMG を使用すれば，アプリケーション再呼び出しバッファの内容をアクセスしたり，変更することができます。省略時の設定では，再呼び出しバッファには，前に入力した 20 個のコマンド，またはユーザがアプリケーションに対して入力したデータ行が格納されます。

SMG$RETURN_INPUT_LINE ルーチンを使用すれば，再呼び出しバッファから特定の行を要求できます。呼び出す行に対して適切な行番号を指定するか，または照合文字列を指定できます。照合文字列を使用する場合には， SMG$RETURN_INPUT_LINE ルーチンは指定された文字列と一致する行を検索し，その行を戻します。このルーチンは，DCL 形式の RECALL コマンドを実現するための補助機能として提供されます。

SMG$REPLACE_INPUT_LINE ルーチンを使用すれば，再呼び出しバッファ内の指定した行 ( 1 行以上 ) を，指定した文字列と置き換えられます。再呼び出しバッファの他の行は削除されます。このルーチンは行の継続を処理するのに役立ちます。

# 3.7 入力と出力の相互作用

次の4つのルーチンは display-id 引数をオプションとして受け付けます。

- SMG$READ_COMPOSED_LINE

- SMG$READ_KEYSTROKE

- SMG$READ_STRING

- SMG$READ_VERIFY

display-id 引数を指定した場合には，その引数は入力操作を実行する仮想ディスプレイを指定します。 display-id 引数を指定することにより，文字のエコー表示による変化を，日本語 SMG が継続的に認識するように設定できます。 display-id 引数を省略した場合には，日本語 SMG は，日本語 SMG の出力機能が使用されていないものと解釈します。

display-id 引数を，これまで説明した入力ルーチンに対して指定する場合には，プロンプト文字列と入力の長さの合計はディスプレイのカラム数に制限されるか，または読み込む文字の最大数を指定した場合には，その最大数に制限されます ( SMG$READ_KEYSTROKE ルーチンの場合には，この制限はプロンプト文字列の長さにだけ適用されます )。

前へ | 次へ | 目次 | 索引