前へ | 次へ | 目次 | 索引 |
SMG$SELECT_FROM_MENU の flags 引数の値として, SMG$M_REMOVE_ITEM を指定した場合には,メニュー内の項目を "再選択" することはできません。ただし,項目はメニュー内に残されます。また,その項目はメニューを格納した仮想ディスプレイの省略時の属性で表示されます。
このモードで省略時の選択項目を指定し,その項目がすでに選択されている場合には,メニュー内の最初の "選択可能な" 項目が強調表示されます。どの項目も選択可能でない場合には,エラーが戻されます。
2.2.12 仮想ディスプレイの保存
SMG$SAVE_VIRTUAL_DISPLAY ルーチンは,仮想ディスプレイの内容をファイルに保存します。仮想ディスプレイを再作成するのに必要なテキスト,ビデオ属性,およびすべてのディスプレイ属性が保存されますが,メニュー,ビューポート,サブプロセスの内容は保存されません。
SMG$SAVE_VIRTUAL_DISPLAY ルーチンによって保存したファイルをプリントすることはできません。仮想ディスプレイを復元するには,SMG$LOAD_VIRTUAL_DISPLAY ルーチンを使用します。このルーチンは新しい仮想ディスプレイを作成し,その仮想ディスプレイに保存されているディスプレイの内容をロードします。新しい仮想ディスプレイはどのペーストボードにもペーストされない状態です。
2.2.13 ターミナル属性の変更
SMG$SET_TERM_CHARACTERISTICS ルーチンは,指定されたペーストボードのターミナル属性を変更または検索します。このルーチンを使用すれば, 1 回のルーチン呼び出しで複数のターミナル属性を制御できます。
2.2.14 仮想ディスプレイに対する文字集合の設定
SMG$CREATE_VIRTUAL_DISPLAY ルーチンは,新規に作成された仮想ディスプレイに文字集合を設定するために,省略可能な引数 ( character-set ) を持っています。この引数を省略した場合は,SMG$DEFAULT_CHARACTER_SET 論理名が用いられます。
表 2-2 は,この論理名に定義できる等価名を示しています。
等価名 | 文字集合 (コードセット) |
---|---|
ASCII | ASCII文字集合 |
SPEC_GRAPHICS | DEC特殊文字集合 |
SUPPLEMENTAL | 補助文字集合 1 |
KANJI | DEC漢字文字集合 |
JIS_KANA | JISカタカナ文字集合 |
SDK | Super DEC 漢字コードセット |
この論理名が無効な文字集合を指していたり,定義されていなかった場合には,文字集合は未定義になります。
2.3 操作制御
この節では,特殊な操作モードを制御する日本語 SMG ルーチン ( 更新処理におけるタブの使用の制御,最低限の更新,およびバッファ処理を行なうルーチン ) について説明します。これらのモードを使用すれば,情報を実際に画面に書き込む方法を最適化できます。これらのモードを起動するには,SMG$CONTROL_MODE ルーチンを使用します。
通常,ユーザがこれらのモードを考慮する必要はありません。日本語 SMG は,文字が画面にただちに表示されるように出力を最適化します。しかし,一部のアプリケーションでは,これらのモード設定を利用しなければならないことがあります。この後の節では,これらの操作モードについて説明します。
2.3.1 最小限の更新
省略時の設定では,日本語 SMG は画面の中で変更された部分だけを再度書き直すことにより,画面に書き込む文字数をできるだけ少なくしようとします。しかし,日本語 SMG はこの方法とは異なる更新操作もサポートし,その操作では,変更によって影響を受けるすべての行が,最初に変更された文字から行の最後まで,すべて書き直されます。
2.3.2 バッファ操作
省略時の設定では,出力操作を実行すると,バッファが満杯になったときに画面を更新するのではなく,部分的に格納された多くの小さいバッファを漢字ターミナルに送信することにより,画面がただちに変更されます。これらの入出力トランザクションの数は,バッファ処理モードを有効に設定することにより最低限に抑えることができ,その結果,プログラムの実行速度を向上することができます。
バッファ処理モードでは,日本語 SMG はバッファが満杯になった場合にだけ,ターミナル・バッファを画面に書き込みます。したがって,結果が画面に表示されるまでに,複数の出力操作が実行される可能性があります。多くのアプリケーションではこのような遅延時間が認められないため,バッファ処理と組み合わせて使用するように, SMG$FLUSH_BUFFER という特殊なルーチンが準備されています。
SMG$FLUSH_BUFFER ルーチンは,そのバッファが満杯になったかどうかとは無関係に,バッファを漢字ターミナルに強制的に書き込みます。このルーチンは,通常はこのような出力の遅延を認めることができるものの,場合によっては画面をただちに更新しなければならないようなアプリケーションにとって役立ちます。常に画面を即時変更することが必要なアプリケーションの場合には,バッファ処理を無効に設定しておかなければなりません。
2.3.3 タブ
タブは更新操作をできるだけ少なくするために使用します。タブを使用する場合には,タブ・ストップが DEC 指定の位置に設定されているかどうかを確認しなければなりません。ユーザが漢字ターミナルにどのようにタブを設定したかということとは無関係に,アプリケーションを実行したい場合には,タブを使用すべきではありません。
画面に出力されるタブはすべて,実際に画面に出力される前に,日本語SMGルーチンによって 8 つのスペースに変換されます。この規則には1つだけ例外があります。それは,SMG$CREATE_VIRTUAL_DISPLAY ルーチンを使用するときに,
display-attributes 引数を SMG$M_DISPLAY_CONTROLS ルーチンに設定した場合です。この場合には,タブ文字を 8 つのスペースとして解釈するのではなく,タブ文字がそのまま出力されます。
2.4 出力のバッチ処理
複雑なペーストボード・イメージを作成するときに,イメージ全体が完成した後でそのイメージを画面に表示したいことがあります。このような場合には,イメージを作成する途中では画面を空白のままにしておき,一連の作成操作をバッチ処理し,最終結果だけを画面に表示できます。
日本語 SMG には,ペーストボード・レベルで一連の操作をバッチ処理するための方法があります。この方法については,この後の節で説明します。
2.4.1 ペーストボード更新のバッチ処理
ペーストボード更新のバッチ処理は,SMG$BEGIN_PASTEBOARD_UPDATE ルーチンを呼び出し,複数の作成操作を実行し,最後に SMG$END_PASTEBOARD_UPDATE ルーチンを呼び出すことにより実行できます。 SMG$BEGIN_PASTEBOARD_UPDATE ルーチンは,出力操作を物理画面上ではなく,ペーストボード・バッファ内だけで反映します。 SMG$END_PASTEBOARD_UPDATE ルーチンを呼び出すと,ペーストボード・バッファは物理画面に書き込まれます。
SMG$BEGIN_PASTBOARD_UPDATE ルーチンと SMG$END_PASTEBOARD_UPDATE ルーチンは,カウンタを増分および減分します。このカウンタの値が 0 になると,ペーストボードに対する出力はただちに物理画面に送信されます。カウンタの値が 0 以外の場合には,出力操作はバッチ処理されます。 ペーストボード・バッチ処理レベル はカウンタの値に等しくなります。このカウンタ方式を使用すれば,サブルーチンは呼び出しプログラムのバッチ処理レベルを妨害せずに,バッチ処理を要求したり,バッチ処理をオフにすることができます。
この章では,仮想キーボードからの入力を実行するために使用する日本語 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種類の方法で仮想キーボードから取り込むことができます。
通常のキーストロークの他,キーパッド・キーとファンクション・キーに対応する定義済み文字列で構成される行を読み込みます。このルーチンは,単一キー・コマンド機能を提供することにより,コマンド向きユーティリティのためのインターフェイスを容易にコーディングする機能を備えています。
キーボードから入力された 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 の入力ルーチンはそのルーチン自体でかな漢字変換を行えます。ユーザはアプリケーションの中から日本語 Compaq 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 コマンドについては,『 Compaq OpenVMS DCL ディクショナリ』を参照して下さい。
定義可能なキーは, 表 3-1 に示したファンクション・キーとキーパッド・キー,制御キー・シーケンス([Ctrl/A]〜[Ctrl/Z]ただし, [Ctrl/M]([RETURN]) を除く)であり,行編集が許可されていない場合は行編集キーも含まれます。
キー定義には複数の属性が割り当てられます。
この他に,LOCK_STATE 属性,IF_STATE 属性,および STATE 属性があります。これらの属性については,この後の節で説明します。
前へ | 次へ | 目次 | 索引 |