[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

1 日本語SMG (SMG$)の概要

この章では,漢字ターミナルから独立した機能を実行する, 実行時ライブラリ・ルーチンについて説明します。日本語SMGのもっとも重要な要素は, 入出力を実際に実行する物理装置とユーザ・プログラムが完全に分離されるということです。 ユーザ・プログラムは物理画面に直接書き込みを実行するのではなく, 仮想ディスプレイに書き込みます。 同様に,ユーザ・プログラムは物理キーボードから直接入力を実行するのではなく, 仮想キーボードから入力を実行します (仮想ディスプレイと仮想キーボードは論理的なものであり, その使い方についてはこの後の節で詳しく説明します)。 このように,仮想操作を物理操作から分離することにより, 入出力をターミナルから独立させることが可能になります。

この後に示す日本語SMGルーチンは,ビデオ画面上で複雑なイメージを設計し, 構成し,管理するのに役立ちます。これらのルーチンは,通常は, VT100クラスの漢字ターミナルで実行される操作タイプに対応しており,また, 日本語SMGがハードウェアで実現されていない漢字ターミナルで, その機能をソフトウェアでエミュレーションできるようにもします。 各ルーチンはその機能に従って次の3つに分類されています。

表 1-1は, 弊社製品以外の漢字ターミナルをサポートするルーチンです。 これらのルーチンについては, 第5章を参照してください。

表 1-1 弊社以外の漢字ターミナルをサポートするルーチン

弊社以外の漢字ターミナルをサポートするルーチン
SMG$DEL_TERM_ TABLE
SMG$GET_NUMERIC_ DATA
SMG$GET_TERM_ DATA
SMG$INIT_TERM_ TABLE
SMG$INIT_TERM_TABLE_BY_TYPE

表 1-2は,日本語SMG出力ルーチンを示しています。 これらのルーチンについては, 第2章を参照してください。

表 1-2 出力ルーチン

出力ルーチン
SMG$BEGIN_PASTEBOARD_UPDATE
SMG$CHANGE_PBD_ CHARACTERISTICS
SMG$CHANGE_RENDITION
SMG$CHANGE_ VIEWPORT
SMG$CHANGE_ VIRTUAL_DISPLAY
SMG$CHECK_FOR_OCCLUSION
SMG$CONTROL_MODE
SMG$COPY_VIRTUAL_DISPLAY
SMG$CREATE_MENU
SMG$CREATE_PASTEBOARD
SMG$CREATE_SUBPROCESS
SMG$CREATE_VIEWPORT
SMG$CREATE_VIRTUAL_DISPLAY
SMG$CURSOR_COLUMN
SMG$CURSOR_ROW
SMG$DELETE_CHARS
SMG$DELETE_LINE
SMG$DELETE_MENU
SMG$DELETE_PASTEBOARD
SMG$DELETE_SUBPROCESS
SMG$DELETE_VIEWPORT
SMG$DELETE_VIRTUAL_DISPLAY
SMG$DISABLE_BROADCAST_TRAPPING
SMG$DISABLE_UNSOLICITED_ INPUT
SMG$DRAW_ CHAR
SMG$DRAW_ LINE
SMG$DRAW_ RECTANGLE
SMG$ENABLE_ UNSOLICITED_INPUT
SMG$END_PASTEBOARD_UPDATE
SMG$ERASE_CHARS
SMG$ERASE_COLUMN
SMG$ERASE_DISPLAY
SMG$ERASE_LINE
SMG$ERASE_PASTEBOARD
SMG$EXECUTE_COMMAND
SMG$FIND_CURSOR_DISPLAY
SMG$FLUSH_BUFFER
SMG$GET_BROADCAST_MESSAGE
SMG$GET_DISPLAY_ATTR
SMG$GET_PASTEBOARD_ATTRIBUTES
SMG$GET_PASTING_INFO
SMG$GET_VIEWPORT_CHAR
SMG$HOME_CURSOR
SMG$INSERT_CHARS
SMG$INSERT_LINE
SMG$LABEL_BORDER
SMG$LIST_PASTING_ORDER
SMG$LOAD_VIRTUAL_DISPLAY
SMG$MOVE_TEXT
SMG$MOVE_VIRTUAL_DISPLAY
SMG$PASTE_VIRTUAL_DISPLAY
SMG$POP_VIRTUAL_DISPLAY
SMG$PUT_CHARS
SMG$PUT_CHARS_HIGHWIDE
SMG$PUT_CHARS_MULTI
SMG$PUT_CHARS_WIDE
SMG$PUT_HELP_TEXT
SMG$PUT_LINE
SMG$PUT_LINE_HIGHWIDE
SMG$PUT_LINE_MULTI
SMG$PUT_LINE_WIDE
SMG$PUT_STATUS_LINE
SMG$READ_FROM_DISPLAY
SMG$REMOVE_LINE
SMG$REPAINT_SCREEN
SMG$REPASTE_VIRTUAL_DISPLAY
SMG$RESTORE_PHYSICAL_SCREEN
SMG$RETURN_CURSOR_POS
SMG$RING_BELL
SMG$SAVE_PHYSICAL_SCREEN
SMG$SAVE_VIRTUAL_DISPLAY
SMG$SCROLL_DISPLAY_AREA
SMG$SCROLL_VIEWPORT
SMG$SELECT_FROM_MENU
SMG$SET_BROADCAST_TRAPPING
SMG$SET_CURSOR_ABS
SMG$SET_CURSOR_MODE
SMG$SET_CURSOR_REL
SMG$SET_DISPLAY_SCROLL_REGION
SMG$SET_OUT_OF_BAND_ASTS
SMG$SET_PHYSICAL_CURSOR
SMG$SET_TERM_CHARACTERISTICS
SMG$UNPASTE_VIRTUAL_DISPLAY

表 1-3は,日本語SMG入力ルーチンをまとめています。 これらのルーチンについては, 第3章を参照してください。

表 1-3 入力ルーチン

入力ルーチン
SMG$ADD_KEY_DEF
SMG$CANCEL_INPUT
SMG$CREATE_KEY_TABLE
SMG$CREATE_VIRTUAL_KEYBOARD
SMG$DEFINE_KEY
SMG$DELETE_KEY_DEF
SMG$DELETE_VIRTUAL_KEYBOARD
SMG$GET_KEY_DEF
SMG$GET_KEYBOARD_ATTRIBUTES
SMG$KEYCODE_TO_NAME
SMG$LIST_KEY_DEFS
SMG$LOAD_KEY_DEFS
SMG$NAME_TO_KEYCODE
SMG$READ_COMPOSED_LINE
SMG$READ_KEYSTROKE
SMG$READ_STRING
SMG$READ_VERIFY
SMG$REPLACE_INPUT_LINE
SMG$RETURN_INPUT_LINE
SMG$SET_DEFAULT_STATE
SMG$SET_KEYPAD_MODE

日本語SMGは,次に示す2つの重要なサービスを提供します。

この後の節では,画面管理の基本要素について説明します。 これらの要素はペーストボード,仮想ディスプレイ,ビューポート,および仮想キーボードです。


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


[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]