この章では, 仮想キーボードからの入力を実行するために使用する日本語SMGルーチンについて説明します。 仮想キーボードは通常,漢字ターミナルに対応づけられます。
日本語SMGには, 漢字ターミナルから入力を実行するための柔軟なルーチン群があります。 入力ルーチンは出力ルーチンと組み合わせて使用でき,また, 単独で使用することも可能です。仮想キーボードと呼ぶ入力ソースを設定するには, SMG$CREATE_VIRTUAL_KEYBOARDルーチンを使用します。 仮想キーボードを削除する場合には, SMG$DELETE_VIRTUAL_KEYBOARDルーチンを使用します。 なおペーストボードを併用するときには, SMG$CREATE_VIRTUAL_KEYBOARDの前に必ずSMG$CREATE_PASTE_BOARDを呼び出さなければなりません。
- 注意
- 日本語SMGはRMSファイルを入力装置としてサポートしません。
ペーストボードが出力操作のための論理構造であるのと同様に, 仮想キーボードは入力操作のための論理構造です。 仮想キーボードを使用すれば,装置からの独立性を実現できます。 日本語SMG入力ルーチンを使用する場合には, 使用する漢字ターミナルのタイプを考慮する必要はありません。
たとえば,ユーザ・プログラムは, 各ターミナルがどの行終了文字を使用するかを考慮する必要がありません。 日本語SMGルーチンは異なる終了文字を統一された機能コードに変換します (終了文字コードについての詳しい説明は, 第3.5節を参照してください)。 また,ファンクション・キー/キーパッド・キーを処理する場合にも, 仮想キーボードは重要です。
データは以下の4種類の方法で仮想キーボードから取り込むことができます。
通常のキーストロークの他, キーパッド・キーとファンクション・キーに対応する定義済み文字列で構成される行を読み込みます。 このルーチンは,単一キー・コマンド機能を提供することにより, コマンド向きユーティリティのためのインターフェイスを容易にコーディングする機能を備えています。
キーボードから入力された1つのキーストロークを読み込みます。このルーチンは, 英数字キーの他,ファンクション・キーとキーパッド・キーも読み込みます。
文字と区切り文字で構成される文字列を読み込みます。 この柔軟なルーチンはOpenVMSターミナル・ドライバの多くの機能をアクセスできます。
文字列を読み込み,その文字列をユーザが指定したピクチャ文字列と比較します。
どの読み込み操作も,SMG$CANCEL_INPUTルーチンを呼び出すことにより強制終了できます。
SMG$READ_COMPOSED_LINE,SMG$READ_STRING,SMG$READ_VERIFYルーチンは, 入力される文章に対する文字集合を設定するために, 省略可能な引数( character-set )を持っています。 この引数を省略した場合は,SMG$DEFAULT_CHARACTER_SET論理名が用いられます。 SMG$DEFAULT_CHARACTER_SET論理名の有効な定義については 第2.2.14項の 表 2-2を参照してください。 この論理名が無効な文字集合を指していたり,定義されていなかった場合には, 文字集合は未定義になります。
日本語SMGの入力ルーチンはそのルーチン自体でかな漢字変換を行えます。 ユーザはアプリケーションの中から日本語OpenVMS の日本語ライブラリ中に入っているかな漢字変換ルーチンを呼び出す必要はありません。 かな漢字変換キーの設定方法については 『ユーザ・キー定義 利用者の手引き』を参照してください。
ペーストボード属性に関する情報を検索したり, ペーストボード属性を設定する場合と同様に, 日本語SMGには仮想キーボードの属性を検索および設定するためのルーチンがあります。
SMG$GET_KEYBOARD_ATTRIBUTESルーチンを使用すれば, 仮想キーボードに関して指定した情報を検索できます。 この情報はキーボード情報テーブル(KIT)と呼ぶユーザ指定領域に格納されます。 戻される情報は次のとおりです。
SMG$SET_KEYPAD_MODEルーチンを使用すれば, 漢字ターミナルの数値キーパッドを数値モードまたはアプリケーション・モードに設定できます。 アプリケーション・モードでは, 数値キーパッド・キーはファンクション・キーとして解釈され, 終了文字として使用できます。 数値モードでは,これらのキーはメイン・キーボードの対応するキーと等しく取り扱われます。 ターミナルはアプリケーション・モードをサポートしていなければなりません。 サポートしていない場合には,SMG$SET_KEYPAD_MODEルーチンを呼び出しても, その操作は異常終了します。
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 ディクショナリ: A-M』を参照してください。
定義可能なキーは, 表 3-1に示したファンクション・キーとキーパッド・キー, 制御キー・シーケンス([Ctrl/A]〜[Ctrl/Z]ただし, [Ctrl/M]([RETURN])を除く)であり,行編集が許可されていない場合は行編集キーも含まれます。
キー定義には複数の属性が割り当てられます。
この他に,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入力ルーチンがサポートする各ターミナル・タイプの各終了文字に対して, そのコードとキーも示されています。
キー名 | 値 | 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ルーチンの説明を参照してください。 [3] HELPとDOはVT220キーボードのF15およびF16と同じです。 [4] VT200および認識されない終了文字を受け付けた場合には, 値は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 |
日本語SMGを使用すれば, アプリケーション再呼び出しバッファの内容をアクセスしたり, 変更することができます。省略時の設定では,再呼び出しバッファには, 前に入力した20個のコマンド, またはユーザがアプリケーションに対して入力したデータ行が格納されます。
SMG$RETURN_INPUT_LINEルーチンを使用すれば, 再呼び出しバッファから特定の行を要求できます。 呼び出す行に対して適切な行番号を指定するか,または照合文字列を指定できます。 照合文字列を使用する場合には, SMG$RETURN_INPUT_LINEルーチンは指定された文字列と一致する行を検索し, その行を戻します。このルーチンは, DCL形式のRECALLコマンドを実現するための補助機能として提供されます。
SMG$REPLACE_INPUT_LINEルーチンを使用すれば, 再呼び出しバッファ内の指定した行(1行以上)を,指定した文字列と置き換えられます。 再呼び出しバッファの他の行は削除されます。 このルーチンは行の継続を処理するのに役立ちます。
次の4つのルーチンは display-id 引数をオプションとして受け付けます。
display-id 引数を指定した場合には, その引数は入力操作を実行する仮想ディスプレイを指定します。 display-id 引数を指定することにより,文字のエコー表示による変化を, 日本語SMGが継続的に認識するように設定できます。 display-id 引数を省略した場合には,日本語SMGは, 日本語SMGの出力機能が使用されていないものと解釈します。
display-id 引数を,これまで説明した入力ルーチンに対して指定する場合には, プロンプト文字列と入力の長さの合計はディスプレイのカラム数に制限されるか, または読み込む文字の最大数を指定した場合には,その最大数に制限されます (SMG$READ_KEYSTROKEルーチンの場合には,この制限はプロンプト文字列の長さにだけ適用されます)。