日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 部:概論
第 1 章:日本語SMG (SMG$)の概要
第 2 章:日本語 SMG の出力操作
第 3 章:日本語 SMG 入力操作
第 4 章:日本語 SMG の高度な機能
第 5 章:フォーリン・ターミナルのサポート
第 6 章:日本語 SMG を使用したプログラム開発
第 7 章:日本語 SMG ルーチンの呼び出しの例
第 2 部:リファレンス・セクション
第 8 章:日本語 SMG リファレンス
コマンド一覧
索引
PDF
OpenVMS ホーム
日本語 OpenVMS

日本語 OpenVMS
日本語画面管理ライブラリ 利用者の手引き


目次 索引

第 5 章
フォーリン・ターミナルのサポート

この章では,フォーリン・ターミナルに対する日本語 SMG ルーチンのサポートについて説明します。

フォーリン・ターミナルとは,装置タイプが OpenVMS で認識されない漢字ターミナル,あるいは ANSI_CRT 属性が設定されていない漢字ターミナルです。このサポート機能はおもに,日本語 SMG が使用しますが,フォーリン・ターミナルに対して独自の入出力を実行する必要のあるアプリケーション・プログラムもこの機能を使用できます。したがって,日本語 SMG を使用する場合には,フォーリン・ターミナルの機能の定義だけを考慮すればよく,フォーリン・ターミナル・ルーチンを直接に呼び出すことを考慮する必要はありません。

さらに,日本語 SMG がターミナルの画面を効果的に制御できるようにするには,ターミナル機能の一部 ( "set absolute cursor position", "erase to end of display","erase to end of line" ) だけを定義すれば十分です。しかし,この章では日本語 SMG が使用するルーチンを示すことにより,ユーザがフォーリン・ターミナルに対して独自の入出力を実行できるようにしています。

サポート機能はまず,TERMTABLE.TXT という名前のソース・ファイルから始まります。このファイルには,ターミナル名と関連する機能のリストが登録されています。このファイルは TERMTABLE.EXE というイメージ・ファイルを作成するために, SYS$SYSTEM:SMGBLDTRM.EXE プログラムによって処理されます。この後の節では,TERMTABLE データベースの作成と処理について説明します。

TERMTABLE サポート機能は,すべての漢字ターミナルに対して日本語 SMG が使用します。ターミナルに対する定義は SYS$SYSTEM:SMGTERMS.TXT という名前のファイルに登録されています。このファイルは日本語 SMG の一部として提供されます。この後の節の例では,フォーリン・ターミナル・パッケージを使用してターミナルを定義する方法が示されています。このような例を示したのは,大部分のユーザがこれらの漢字ターミナルを十分理解しているからです。しかし,ユーザ独自の定義を実際に作成する必要はなく,また SYS$SYSTEM:SMGTERMS.TXT 内の定義を変更すべきでもありません。

5.1 TERMTABLE インターフェイス・ルーチン

TERMTABLE.EXE は,複数の異なるタイプの漢字ターミナルに関する情報を登録したデータベースです。このデータベースから情報を検索する場合には,次の操作を実行します。

  1. ターミナル名をデータベースに与えます。

  2. そのターミナル・タイプについての情報を検索します(この操作は何回でも繰り返すことができます)。

  3. データベースに対するアクセスを終了します。

日本語 SMG ルーチンを使用してフォーリン・ターミナルに対して入出力を実行する場合には,使用するフォーリン・ターミナルにとって適切な TERMTABLE エントリだけを作成しなければなりません。ここに示した操作が必要なのは,プログラムがフォーリン・ターミナルに対して直接に入出力を実行する場合だけです。

上記の1の操作は次の2種類の方法のいずれかを使用して実行できます。

  • ターミナル名(たとえば VT100)を登録した文字列を SMG$INIT_TERM_TABLE ルーチンに渡すことができます。

  • OpenVMS システム・サービス $GETDVI が戻した値を SMG$INIT_TERM_TABLE_BY_TYPE ルーチンに渡すこともできます。戻される値はシンボリック・ターミナル・タイプ ( たとえば, TT$_VT100 や TT$_VT52 ) であるか,または特定のフォーリン・ターミナルを指定するために日本語 SMG フォーリン・ターミナル・ルーチンが割り当てた値です。

2 の操作では,SMG$GET_TERM_DATA ルーチンを呼び出さなければなりません。このルーチンは,TERMTABLE からコマンド文字列 ( たとえばエスケープ・シーケンス ) を検索し,それをユーザが提供するバッファに入れます。その後,ユーザはコマンド文字列を漢字ターミナルに書き込まなければなりません。

SMG$GET_TERM_DATA ルーチンは何度も呼び出さなければならない可能性があります。コマンド・シーケンスを受け取るたびに,異なる操作を実行できます。また,引数に対して置換操作や算術演算が必要な機能文字列を使用する場合には,そのたびに SMG$GET_TERM_DATA ルーチンを呼び出さなければなりません。しかし,変更する必要のない機能文字列をプログラムのローカル記憶領域に保存しておくこともできます。これらの変更する必要のない機能文字列は1度検索すると,その後,何度でも使用できます。

3 の操作は省略可能です。この操作は,データベース内の情報をアクセスするために使用した仮想メモリの割り当てを,単に解放するだけです。

DCL の SET TERMINAL コマンドと SHOW TERMINAL コマンドは, OpenVMS ターミナルを認識すると同時に, TERMTABLE に定義されている名前を認識します。 OpenVMS オペレーティング・システムが認識しない漢字ターミナルのターミナル・タイプを指定するために, SET TERMINAL/DEVICE=name コマンドを使用した場合には, TERMTABLE データベースから指定された漢字ターミナルが検索されます。

特定のターミナル定義のアドレスを検索するために,2 つのルーチンが提供されます。 SMG$INIT_TERM_TABLE ルーチンは入力としてターミナル名を受け付けます。 SMG$INIT_TERM_TABLE_BY_TYPE ルーチンは入力として装置タイプを受け付けます。ターミナル名と装置タイプはそれぞれ, TERMTABLE.EXE セクション内の特定のターミナル・エントリにマップされます。これらのルーチンは将来の呼び出しで使用するために,この識別子を呼び出しプログラムに戻します。

SMG$GET_TERM_DATA ルーチンは,コンパイルされた TERMTABLE データベースの識別子と要求コードを受け付けます。要求コードは,適切なエスケープ・シーケンスを検索するためにデータに対するインデックスとして使用されます。一部のシーケンスは静的で変化しません。これらのシーケンスには可変情報は含まれず,単に呼び出し側のバッファにコピーされるだけです。

"!" ディレクティブと "%" ディレクティブを含む可変シーケンスを使用すると,追加処理が実行されます。可変シーケンスの例として,VT300 シリーズのカーソル設定コマンドがあります。この場合,要求されたバイナリの行番号とカラム番号をカーソル設定のために ASCII に変換しなければなりません。 SMG$GET_TERM_DATA ルーチンは,入力された引数を変換し,シーケンスを呼び出し側のバッファにコピーします。

SMG$GET_TERM_DATA ルーチンに入力引数を指定しなかった場合には,機能が必要とする引数に対して,省略時の値として1が使用されます。しかし,省略可能な引数の一部だけを指定し,他の引数に対しては省略時の値を使用することは認められません。このような場合には,すべての引数を指定するか,またはすべての引数の値として省略時の設定を使用しなければなりません。

SMG$GET_NUMERIC_DATA ルーチンは,数値データまたは論理データだけを検索したいユーザのために,簡略化されたインターフェイスを提供します。

すべてのターミナル入出力が終了した後,使用した仮想メモリの割り当てを解放するために SMG$DEL_TERM_TABLE ルーチンを呼び出すことができます。このルーチンは,プログラム途中で TERMTABLE を必要としない場合にだけ役立ちます。仮想メモリの割り当てを解放すると,プログラムはそのメモリを再利用できるようになります。

TERMTABLE.TXT というひな型は SYS$SYSTEM: に提供されています。 OpenVMS が認識するターミナルを定義する SMGTERMS.TXT も提供されます。 TERMTABLE.TXT というひな型は SMGTERMS.TXT という別のソース・ファイルを含むように REQUIRE ディレクティブを使用しています。したがって,実際にはフォーリン・ターミナルだけが TERMTABLE.TXT ソース・ファイルに定義されます。

ユーザは SMGTERMS.TXT を変更してはいけません。

5.2 機能フィールド

フォーリン・ターミナルを使用している場合には,日本語 SMG にとって漢字ターミナルが何を実行でき,何を実行できないか,つまり,漢字ターミナルがどのような機能を備えているかがわかりません。機能フィールドを使用することにより,フォーリン・ターミナルに対してどのような機能がサポートされるかを日本語 SMG に示すことができます。これらのフィールドを調べることにより,日本語 SMG ルーチンは共通のターミナル機能をエミュレートするのではなく,個々の漢字ターミナルの機能を使用できます。この結果,日本語 SMG ルーチンの性能を向上できます。

TERMTABLE エントリには次の 3 種類の機能フィールドを指定できます。

  • 論理値

  • 数値

  • 文字列

この後の節では,これらの機能フィールドについて詳しく説明します。

ほとんどの漢字ターミナルに共通の機能は,使用可能なフィールドとして選択されています。すなわち,すべてのターミナル・タイプのすべての機能が表現されているわけではありません ( 特に,ブロック・モード,グラフィック,タイプセット機能などはサポートされません )。画面対応型アプリケーションは典型的なターミナル機能を中心に設計しなければならず,特定のモデルにだけしか存在しない機能に依存しないようにしなければなりません。

特殊な漢字ターミナルをサポートしなければならないアプリケーションの場合には,ユーザが定義できるように汎用機能名が確保されています。 PRIVATE_BOO_n,PRIVATE_NUM_n,PRIVATE_STR_n ( ただし,n は 1 〜 10 の数値です ) の形式の名前は,ユーザ定義ターミナル定義として登録でき, TERMTABLE インターフェイス・ルーチンから戻されます。これらの名前の意味はユーザが割り当てるため,各機能はアプリケーション間で異なるものになる可能性があります。

複数のアプリケーションを実行するシステムは, 1 つのプライベート機能に対して複数の定義が設定されないように注意しなければなりません(たとえば,実行するアプリケーション・プログラムに応じて, PRIVATE_STR_1 が 2 種類の異なる意味を持つ場合には,その漢字ターミナルに対して別々のターミナル・エントリを設定しなければなりません)。一般に,このようなプライベート機能を使用する必要はありません。

次に示す文字は機能フィールド内で区切り文字として使用されます。

区切り文字 意味
! コメントの先頭を示す
= 機能フィールド名と値を区切る
, 機能フィールドを区切る
" 文字列を区切る



5.2.1 論理機能フィールド

値が論理値である機能は,各漢字ターミナルに対して,存在する場合も存在しない場合もあります。

論理値機能フィールドの形式は次のとおりです。

 
   BOOLEAN 
 
     {boolean-capability = binary-digit} [,...] 
 

各要素の意味は次のとおりです。

・ boolean-capability 表 5-1 に示されている機能フィールドのいずれか
・ binary-digit 1 または 0

表 5-1 はこれらの論理値機能フィールドを示しています。

表 5-1 論理値機能
VMS名 SMGによる使用 説明
ADVANCED_VIDEO × 設定されている場合には,漢字ターミナルは拡張ビデオ属性を備えており,132カラム・モード操作が可能である。
ANSI_CRT × 設定されている場合には,漢字ターミナルは ANSI CRT プログラミング標準規格に従う。
AUTO_MARGIN × 設定されている場合には,漢字ターミナルは自動マージンを備えている。
BACKSPACE 設定されている場合には,漢字ターミナルは [Ctrl/H] によってバックスペースできる。
BLOCK_MODE × 設定されている場合には,漢字ターミナルはブロック・モード送信,ローカル編集,フィールド保護を実行できる。
CURSOR_REPORT_ANSI × 設定されている場合には漢字ターミナルは現在のカーソル位置を報告するために,ANSI シーケンスを使用する。
DEC_CRT × 設定されている場合には,漢字ターミナルは DEC VT100 ファミリ標準規格に従う。
DEC_CRT_2 × 設定されている場合には,漢字ターミナルは DEC VT200 ファミリ標準規格に従う。
DEC_CRT_3 × 設定されている場合には,漢字ターミナルは DEC VT300 ファミリ標準規格に従う。
EDIT × 設定されている場合には,漢字ターミナルは ANSI で定義されている拡張編集機能を実行できる。
EIGHT_BIT × 設定されている場合には,漢字ターミナルは8ビットのASCII 文字コードを使用する。
FULLDUP × 設定されている場合には,漢字ターミナルの操作モードは全二重である(設定されていない場合は,半二重である)。
IGNORE_NEWLINE × 設定されている場合には,漢字ターミナルは自動改行(ラッピング)の後の,復帰改行(ニューライン)を無視する。
INSERT_MODE_NULLS × 設定されている場合には,挿入モードはディスプレイで NULL を区別する。
LOWERCASE × 設定されている場合には,漢字ターミナルは英字の大文字と小文字のどちらも備えている。
NO_ERASE × 設定されている場合には,ボールドの文字は,その上に書き込んでも消去されない。
NO_SCROLL × 設定されている場合には,漢字ターミナルはスクロールを実行できない。
OVERSTRIKE × 設定されている場合には,漢字ターミナルは置換(オーバーストライク)を実行できる。
PHYSICAL_FF × 設定されている場合には,漢字ターミナルは改ページ(フォーム・フィード) を受け付けることができる。設定されていない場合には,ターミナル・ドライバは改ページ(フォーム・フィード) を複数の改行(ライン・フィード)に変換しなければならない。
PHYSICAL_TABS × 設定されている場合には,漢字ターミナルはハードウェア・タブを備えている (これらのタブは初期化文字列によって設定しなければならない可能性がある)。
PRINTER_PORT × 設定されている場合には,漢字ターミナルはプリンタ・ポートを備えている。
PRIVATE_BOO_1 to 10 × 設定されている場合には,これらのフィールドは1 〜 10 のユーザ定義機能を示す。
REGIS × 設定されている場合には,漢字ターミナルは ReGIS グラフィック・コマンドを解釈する。
SCOPE × 設定されている場合には,漢字ターミナルはビデオ・ターミナルである。
SET_CURSOR_COL_ROW 設定されている場合には,漢字ターミナルはカラム/行アドレッシングを使用する。
SIXEL_GRAPHICS × 設定されている場合には,漢字ターミナルは ReGIS で定義されている SIXEL グラフィック・プロトコルを使用してグラフィックを表示できる。
SOFT_CHARACTERS × 設定されている場合には,漢字ターミナルはユーザ定義文字集合(Dynamic Replacable Character Set)をロードできる。
UNDERLINE × 設定されている場合には,漢字ターミナルは重ね書きでない下線機能を備えている。

たとえば,次の TERMTABLE エントリは VT300 シリーズ・ターミナルの2つの属性を記述しています。

NAME = "VT300_series" 
 
  BOOLEAN 
 
    ansi_crt = 1,         dec_crt = 1 

このエントリは,漢字ターミナルが ANSI CRT プログラミング標準規格と DEC VT300 シリーズ標準規格に準拠することを指定しています。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.