前へ | 次へ | 目次 | 索引 |
日本語 SMG は,次に示す 2 つの重要なサービスを提供します。
日本語 SMG ルーチンは,使用している漢字ターミナルのタイプを考慮せずに,一般に必要とされる画面機能を実行できるようにすることにより,漢字ターミナルからの独立性を実現しています。入出力も含めてすべての操作は,呼び出し側の漢字ターミナルから独立した要求を,その動作を実行するのに必要な,一連のコードに変換するルーチンを呼び出すことにより実行されます。
使用している漢字ターミナルが,要求された操作をハードウェアでサポートしない場合には,ほとんどの場合,日本語 SMG は,その機能をソフトウェアでエミュレートすることにより,要求された動作を実行します。同様に,日本語 SMG ルーチンは,使用しているキーボードのタイプを考慮せずに,キーボードから入力を実行できるように,漢字ターミナルから独立した入力方法も提供します。
日本語 SMG は,漢字ターミナルが完全に日本語 SMG の管理下にあることを仮定しています。したがって,アプリケーションは,日本語 SMG ルーチンと日本語 DEC GKS や日本語 VAX FMS のような画面管理用製品を同時に呼ぶべきではありません。 |
日本語 SMG ルーチンは,画面上で複雑なイメージを構成するのに役立ちます。たとえば,画面の一部からユーザ入力を要求し,結果を画面の別の部分に表示し,さらに画面の別の部分に状態情報を表示できます。通常,これらのいずれかの領域から読み込むルーチンやこれらの領域に書き込むルーチンは,他の領域が存在するかどうかを確認しなければなりません。これらの情報を知らなければ,行情報とカラム情報を使用して,画面の適切な部分に情報を書き込んだり,画面の適切な部分から情報を読み込むことができません。日本語 SMG ルーチンを使用すれば,各ルーチンは領域の位置とは無関係に,画面上の特定の領域に書き込むことができます。行とカラムに対する参照は,ルーチンが指定する画面の領域にだけ関係します。
この後の節では,画面管理の基本要素について説明します。これらの要素はペーストボード,仮想ディスプレイ,ビューポート,および仮想キーボードです。
1.1 ペーストボード
ペーストボードは,漢字ターミナルの画面に対して出力操作を実行するための論理構造です。ペーストボードは,仮想ディスプレイを配置し,操作するための2次元の領域として考えることができます。ペーストボードは常に物理装置に対応しますが,ペーストボードのサイズは物理画面より大きくても,小さくてもかまいません。各出力装置に対し,ペーストボードは1つだけ設定できます。
日本語SMGは,RMSファイルとプリンタを出力装置としてサポートしません。 |
ペーストボードを作成するには,SMG$CREATE_PASTEBOARD ルーチンを呼び出し,引数としてペーストボードに対応づける物理装置を指定します。 SMG$CREATE_PASTEBOARD ルーチンは,固有のペーストボード識別子 ( pasteboard-id ) を返します。この情報は,後続のルーチン呼び出しでペーストボード識別子が必要なときに使用できます。
たとえば,仮想ディスプレイをペーストする物理ターミナル画面を指定する場合には, pasteboard-id 引数を使用します。 SMG$CREATE_PASTEBOARD ルーチンは出力引数として,対応する装置で使用できる行数とカラム数も指定します。この情報を使用すれば,物理画面のサイズで仮想ディスプレイを作成できます (仮想ディスプレイについては,次の節で説明します)。
ペーストボードは, 1 つ以上の仮想ディスプレイの相対的な位置を指定するための論理座標系である,と考えると便利です ( ペーストボード自体には物理的な境界はありませんが,物理画面には物理的な境界があります )。 図 1-1 は,ペーストボード座標系を示しています。
原点 ( セル位置 1,1 ) は物理画面の左上の角に対応します。行番号とカラム番号はこの原点から始まります。たとえば,VT200 シリーズ・ターミナルの場合には,24 行× 80カラムであり,ペーストボード座標系の最初の 24 行と最初の 80 カラムが物理画面にマップされます。仮想ディスプレイはこの座標系のどこにでも配置でき,物理画面に対応する象限に制限されません。したがって,ペーストするときに ( つまり,ペーストボードに配置するときに ),仮想ディスプレイが物理画面上に表示されなかったり,あるいは部分的にしか表示されないことがあります。
図 1-1 ペーストボード座標系
ペーストボードを削除する ( つまり,特定の装置から切り離す ) には, SMG$DELETE_PASTEBOARD ルーチンを使用します。ペーストボードを削除すると,このペーストボードにペーストされたすべての仮想ディスプレイはアンペーストされます。
ペーストボードを作成した後,SMG$GET_PASTEBOARD_ATTRIBUTES ルーチン を呼び出すことにより,そのペーストボードの属性(特にそのサイズ)を調べることができます。ペーストボードの属性を変更するには,SMG$CHANGE_PBD_CHARACTERISTICS ルーチンを使用します。ただし,属性を変更できるのは,対応する物理装置がその属性の変更を認めている場合に限ります。たとえば,装置が VT100 の場合には,ペーストボードの幅を 80 カラムから 132 カラムに変更できます。
ペーストボードを作成するときに,日本語 SMG は,画面をクリアします。しかし,画面をそのまま保存することを要求することもできます。さらに,SMG$ERASE_PASTEBOARD ルーチンを使用すれば,画面を消去することを要求できます。
1.2 仮想ディスプレイ
仮想ディスプレイはターミナル画面の中の長方形の部分であり,プログラムはルーチン呼び出しを使用して,その領域にデータを書き込みます。仮想ディスプレイは日本語 SMG の中心的な部分です。画面に配置するイメージを作成する場合には,物理画面ではなく,仮想ディスプレイを基準にしてイメージを考慮しなければなりません。このように仮想ディスプレイを物理画面と切り離すことにより,メイン・プログラムは仮想ディスプレイの位置を変更でき,仮想ディスプレイに書き込むサブルーチンが物理画面でのディスプレイの位置を考慮する必要がないようにしています。
仮想ディスプレイがペーストボードに対応づけられている場合には,仮想ディスプレイはペーストボードに ペースト されていると言います。ディスプレイをペーストボードから削除することを, アンペースト と言います。仮想ディスプレイがペーストボードにペーストされていない限り,その仮想ディスプレイは表示されません ( 仮想ディスプレイのペーストについての詳しい説明は, 第 2.1.1 項 を参照してください )。
プログラムは仮想ディスプレイをいくつでも作成し,管理できます ( 仮想ディスプレイの数は,使用できる仮想アドレス空間によってのみ制限されます )。 1 つの仮想ディスプレイを一度に複数のペーストボードにペーストできます。したがって,プログラムは仮想ディスプレイだけを管理すれば十分です。仮想ディスプレイが変更された場合には,その変更結果は,ディスプレイがペーストされている各ペーストボード ( およびそれに対応するターミナル画面 ) で自動的に反映されます。
仮想ディスプレイを作成するには,SMG$CREATE_VIRTUAL_DISPLAY ルーチンを使用します。このルーチンを呼び出す場合には,仮想ディスプレイの行数とカラム数も指定しなければなりません。プログラムはまた,ディスプレイに適用される特定のディスプレイ属性とビデオ属性も指定できます。
SMG$CREATE_VIRTUAL_DISPLAY ルーチンは固有の仮想ディスプレイ識別子
( display-id )を返します。ディスプレイを変更する後続のルーチン呼び出しで仮想ディスプレイを識別する場合には,この display-id
引数を使用します。
プログラムやサブルーチンは SMG$GET_DISPLAY_ATTR ルーチンを呼び出すことにより,仮想ディスプレイの属性とサイズを判断できます。複数の仮想ディスプレイをペーストボードにペーストしている場合には, SMG$LIST_PASTING_ORDER ルーチンを使用することにより,仮想ディスプレイをペーストした順序を判断できます。
他の属性が指定されていない場合には,省略時のビデオ属性が出力に適用されます。 レンディション(属性) は,オンまたはオフに設定できるビデオ属性です。このようなビデオ属性としては,点滅表示,高輝度表示,反転表示,下線付きテキストがあります。ディスプレイ属性は,ディスプレイが次の操作を実行するかどうかを指定する属性です。
仮想ディスプレイを指定するときに指定したビデオ属性とディスプレイ属性は,後で変更できます。また,SMG$CHANGE_VIRTUAL_DISPLAY ルーチンを使用すれば,ビテオ属性とディスプレイ属性をどちらも変更できます。
たとえば,SMG$CHANGE_VIRTUAL_DISPLAY ルーチンを使用すれば,仮想ディスプレイのサイズを変更できます。仮想ディスプレイのサイズを変更する場合には,そのディスプレイ内のデータは,サイズを変更した後のディスプレイにコピーされます。つまり,現在の内容は ( 1 行目,1 カラム目から順に ) サイズを変更した新しいディスプレイに格納できるだけ保存されます。
仮想ディスプレイを削除するには, SMG$DELETE_VIRTUAL_DISPLAY ルーチンを使用します。削除操作についての詳しい説明は, 第 2.1.5 項 を参照してください。
1.3 ビューポート
仮想ディスプレイは非常に大きいものである可能性があるため,ディスプレイ全体を一度に画面に表示できないことがあります。このような場合には,仮想ディスプレイの各部分を表示するために,大きい仮想ディスプレイを再度ペーストしなければなりません。仮想ディスプレイに対応するビューポートはこの操作を容易にします。
ビューポート操作とは,仮想ディスプレイの各部分を表示するために,仮想ディスプレイを囲む長方形の表示領域を移動する操作です。ビューポートは仮想ディスプレイに対応づけられます。したがって,仮想ディスプレイに対して実行される出力操作はすべて,ビューポートに対して実行されます。ビューポートは作成,削除,ペースト,アンペースト,スクロール,および移動できます。ビューポートについての詳しい説明は, 第 2.2.10 項 を参照してください。
1.4 仮想キーボード
ペーストボードが出力操作のための論理構造であるのと同様に,仮想キーボードは入力操作のための論理構造です。仮想キーボードを使用すれば,装置からの独立性を実現できます。日本語 SMG 入力ルーチンを使用する場合には,使用している漢字ターミナルのタイプを考慮する必要がありません。たとえば,各プログラムは特定の漢字ターミナルでどの行終了文字が使用されているかを知る必要がありません。日本語 SMG は異なる行終了文字を統一された機能コードに変換します ( 行終了文字コードについての詳しい説明は, 第 3 章 を参照してください )。
仮想キーボードは通常,漢字ターミナルの物理キーボードに対応づけられます。複数の仮想キーボードを 1 つの入力装置に対して対応づけることができます。
日本語 SMG は,RMSファイルを入力装置としてサポートしません。 |
入力ソース(仮想キーボード)を設定するには, SMG$CREATE_VIRTUAL_KEYBOARD ルーチンを使用します。仮想キーボードを削除するには,SMG$DELETE_VIRTUAL_KEYBOARD ルーチンを使用します。
仮想キーボードを作成した後,SMG$READ_COMPOSED_LINE,SMG$READ_KEYSTROKE, SMG$READ_STRING,SMG$READ_VERIFY ルーチンのいずれかを使用することにより,仮想キーボードからデータを受け付けることができます。
SMG$READ_COMPOSED_LINE ルーチンは,通常のキーストロークと,キーパッドおよび制御キーに対応する定義済み文字列で構成される行を読み込みます。このルーチンは,単一キー・コマンド機能を提供することにより,コマンド向きユーティリティのためのインタフェースを容易にコーディングできるようにします。 SMG$READ_KEYSTROKE ルーチンはキーボードから入力された 1 つのキーストロークを読み込むために使用します。 SMG$READ_STRING ルーチンは文字と終了文字で構成される文字列を読み込みます。このルーチンは汎用性と柔軟性が高く, OpenVMS ターミナル・ドライバの多くの機能をアクセスできます。 SMG$READ_VERIFY ルーチンは書式化された入力を読み込むために使用します。
どのタイプの読み込み操作も, SMG$CANCEL_INPUT ルーチンを呼び出すことにより強制終了できます。
1.5 日本語画面管理ライブラリの使用方法
日本語画面管理ライブラリ (JSY$SMGSHR.EXE) をご使用の際には,リンク時に明示的に指定する必要があります。自動的に JSY$SMGSHR.EXE とリンクされることはありません。 JSY$SMGSHR.EXE とリンクするには以下のようにします。
$ link foo.obj, sys$input/option sys$share:jsy$smgshr.exe/share ^Z |
前へ | 次へ | 目次 | 索引 |