前のページ | 次のページ | 目次 | 索引


3 日本語SMG入力操作

この章では,仮想キーボードからの入力を実行するために使用する日本語SMGルーチン について説明します。仮想キーボードは通常,漢字ターミナルに対応づけられます。

日本語SMGには,漢字ターミナルから入力を実行するための柔軟なルーチン群 があります。入力ルーチンは出力ルーチンと組み合わせて使用でき,また, 単独で使用することも可能です。仮想キーボードと呼ぶ入力ソースを設定するには, SMG$CREATE_VIRTUAL_KEYBOARDルーチンを使用します。 仮想キーボードを削除する場合には,SMG$DELETE_VIRTUAL_ KEYBOARDルーチンを 使用します。なおペーストボードを併用するときには, SMG$CREATE_VIRTUAL_KEYBOARDの前に必ずSMG$CREATE_PASTE_BOARD を呼び出さなければなりません。


注意

日本語SMGはRMSファイルを入力装置としてサポートしません。


ペーストボードが出力操作のための論理構造であるのと同様に, 仮想キーボードは入力操作のための論理構造です。仮想キーボードを使用すれば, 装置からの独立性を実現できます。日本語SMG入力ルーチンを使用する場合には, 使用する漢字ターミナルのタイプを考慮する必要はありません。

たとえば,ユーザ・プログラムは,各ターミナルがどの行終了文字を使用するかを 考慮する必要がありません。日本語SMGルーチンは異なる終了文字を統一された 機能コードに変換します(終了文字コードについての詳しい説明は, 第3.5節を参照してください)。また, ファンクション・キー/キーパッド・キーを処理する場合にも, 仮想キーボードは重要です。

3.1 仮想キーボードからのデータの取り込み

データは以下の4種類の方法で仮想キーボードから取り込むことができます。

どの読み込み操作も,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の日本語ライブラリ中に 入っているかな漢字変換ルーチンを呼び出す必要はありません。 かな漢字変換キーの設定方法については 『ユーザ・キー定義 利用者の手引き』を参照してください。

3.2 仮想キーボード属性の設定と検索

ペーストボード属性に関する情報を検索したり, ペーストボード属性を設定する場合と同様に, 日本語SMGには仮想キーボードの属性を検索および設定するためのルーチンがあります。

SMG$GET_KEYBOARD_ATTRIBUTESルーチンを使用すれば,仮想キーボードに関して 指定した情報を検索できます。この情報はキーボード情報テーブル(KIT)と呼ぶ ユーザ指定領域に格納されます。戻される情報は次のとおりです。

SMG$SET_KEYPAD_MODEルーチンを使用すれば,漢字ターミナルの数値キーパッドを 数値モードまたはアプリケーション・モードに設定できます。 アプリケーション・モードでは,数値キーパッド・キーは ファンクション・キーとして解釈され, 終了文字として使用できます。数値モードでは,これらのキーは メイン・キーボードの対応するキーと等しく取り扱われます。 ターミナルはアプリケーション・モードをサポートしていなければなりません。 サポートしていない場合には,SMG$SET_KEYPAD_MODEルーチンを呼び出しても, その操作は異常終了します。

3.3 キーパッド・キーの使用による行の作成

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 Dictionary: A-M』または『OpenVMS DCL Dictionary: N-Z』 を参照してください。

定義可能なキーは,表 3-1に示した ファンクション・キーとキーパッド・キー,制御キー・シーケンス ([Ctrl/A]〜[Ctrl/Z]ただし,[Ctrl/M]([RETURN])を除く)であり, 行編集が許可されていない場合は行編集キーも含まれます。

キー定義には複数の属性が割り当てられます。

この他に,LOCK_STATE属性,IF_STATE属性,およびSTATE属性があります。 これらの属性については,この後の節で説明します。

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 PF1Blue
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 右向き矢印 右向き矢印 右向き矢印
ファンクション・キー
F6SMG$K_TRM_F6 F6    
F7 SMG$K_TRM_F7 F7    
F8 SMG$K_TRM_F8 F8    
F9 SMG$K_TRM_F9 F9    
F10SMG$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_SELECTSelect    
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になります。

終了文字の値のシンボリック定義は,DECが提供する$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_E6SMG$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 引数をオプションとして受け付けます。

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

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


前のページ | 次のページ | 目次 | 索引