この章では,フォーリン・ターミナルに対する 日本語SMGルーチンのサポートについて説明します。
フォーリン・ターミナルとは,装置タイプがOpenVMSで認識される DECターミナルでない漢字ターミナル,あるいは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サポート機能は,DECターミナルも含めて,すべての漢字ターミナルに 対して日本語SMGが使用します。DECターミナルに対する定義は SYS$SYSTEM:SMGTERMS.TXTという名前のファイルに登録されています。 このファイルは日本語SMGの一部として提供されます。この後の節の例では, フォーリン・ターミナル・パッケージを使用してDECターミナルを定義する方法が 示されています。このような例を示したのは,大部分のユーザがこれらの 漢字ターミナルを十分理解しているからです。しかし, DECターミナルに対してユーザ独自の定義を実際に作成する必要はなく,また SYS$SYSTEM:SMGTERMS.TXT内の定義を変更すべきでもありません。
TERMTABLE.EXEは,複数の異なるタイプの漢字ターミナルに関する情報を登録した データベースです。このデータベースから情報を検索する場合には, 次の操作を実行します。
日本語SMGルーチンを使用してフォーリン・ターミナルに対して入出力を 実行する場合には,使用するフォーリン・ターミナルにとって適切な TERMTABLEエントリだけを作成しなければなりません。ここに示した操作が必要なのは, プログラムがフォーリン・ターミナルに対して直接に入出力を実行する場合だけです。
上記の1の操作は次の2種類の方法のいずれかを使用して実行できます。
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:に提供されています。DECターミナルを 定義するSMGTERMS.TXTも提供されます。TERMTABLE.TXTというひな型は SMGTERMS.TXT という別のソース・ファイルを含むようにREQUIREディレクティブを 使用しています。したがって,実際にはDEC以外の漢字ターミナルだけが TERMTABLE.TXTソース・ファイルに定義されます。
ユーザはSMGTERMS.TXTを変更してはいけません。
フォーリン(DEC以外の)・ターミナルを使用している場合には,日本語SMGにとって 漢字ターミナルが何を実行でき,何を実行できないか,つまり,漢字ターミナルが どのような機能を備えているかがわかりません。機能フィールドを使用することにより, フォーリン・ターミナルに対してどのような機能がサポートされるかを日本語SMGに 示すことができます。これらのフィールドを調べることにより,日本語SMGルーチンは 共通のターミナル機能をエミュレートするのではなく,個々の漢字ターミナルの機能を 使用できます。この結果,日本語SMGルーチンの性能を向上できます。
TERMTABLEエントリには次の3種類の機能フィールドを指定できます。
この後の節では,これらの機能フィールドについて詳しく説明します。
ほとんどの漢字ターミナルに共通の機能は,使用可能なフィールドとして 選択されています。すなわち,すべてのターミナル・タイプのすべての機能が 表現されているわけではありません(特に,ブロック・モード,グラフィック, タイプセット機能などはサポートされません)。画面対応型アプリケーションは 典型的なターミナル機能を中心に設計しなければならず,特定のモデルにだけしか 存在しない機能に依存しないようにしなければなりません。
特殊な漢字ターミナルをサポートしなければならないアプリケーションの場合には, ユーザが定義できるように汎用機能名が確保されています。PRIVATE_BOO_n, PRIVATE_NUM_n,PRIVATE_STR_n (ただし,n は1〜10の数値です)の形式の 名前は,ユーザ定義ターミナル定義として登録でき, TERMTABLEインターフェイス・ルーチンから戻されます。 これらの名前の意味はユーザが割り当てるため, 各機能はアプリケーション間で異なるものになる可能性があります。
複数のアプリケーションを実行するシステムは,1つのプライベート機能に対して 複数の定義が設定されないように注意しなければなりません(たとえば,実行する アプリケーション・プログラムに応じて,PRIVATE_STR_ 1が2種類の異なる 意味を持つ場合には,その漢字ターミナルに対して別々のターミナル・エントリを 設定しなければなりません)。一般に,このようなプライベート機能を使用する 必要はありません。
次に示す文字は機能フィールド内で区切り文字として使用されます。
| 区切り文字 | 意味 |
|---|---|
| ! | コメントの先頭を示す |
| = | 機能フィールド名と値を区切る |
| , | 機能フィールドを区切る |
| " | 文字列を区切る |
値が論理値である機能は,各漢字ターミナルに対して, 存在する場合も存在しない場合もあります。
論理値機能フィールドの形式は次のとおりです。
BOOLEAN
{boolean-capability = binary-digit} [,...]
各要素の意味は次のとおりです。
| ・boolean-capability | 表 5-1 に示されている機能フィールドのいずれか |
| ・binary-digit | 1または0 |
表 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シリーズ標準規格に準拠することを指定しています。
数値機能は,引数として数値を受け付ける機能です。たとえば, ターミナル画面のカラム数などを引数として受け付けます。
数値機能フィールドの形式は次のとおりです。
NUMERIC
{numeric-capability = value} [,...]
各要素の意味は次のとおりです。
| ・numeric-capability | 表 5-2 に示す機能フィールドのいずれか |
| ・value | 指定した数値機能の値 |
表 5-2は数値機能を示しています。
| VMS名 | SMGによる 使用 | 説明 |
|---|---|---|
| COLUMNS | ○ | 1行のカラム数を指定する。 |
| CR_ FILL | × | 復帰改行(キャリッジ・リターン)の後に必要な フィル文字の数を指定する。 |
| LF_FILL | × | 改行(ライン・フィード) の後に必要なフィル文字の数を指定する。 |
| FRAME | × | 入力または出力される各文字に対してターミナル・ドライバが期待するデータ・ ビットの数を制御する(値は5〜8の範囲でなければならない)。 |
| NUMBER_FN_KEYS | × | ファンクション・キーの数を指定する。 |
| PRIVATE_NUM_1 to 10 | × | 設定されている場合には, これらのフィールドはユーザ定義機能1〜10を示す。 |
| ROWS | × | 画面の行数を指定する。 |
| WIDE_SCREEN_COLUMNS | ○ | ワイド・モードで使用できるカラム数を指定する。 |
たとえば,次に示すTERMTABLEエントリは,VT300シリーズ・ターミナルの 2つの属性を示しています。
NAME = "VT300_series"
NUMERIC
rows = 24, columns = 80
文字列機能フィールドは複数の機能を備えています。 これらのフィールドを使用すれば,次の操作が可能です。
表 5-3は文字列機能を示しています。
| VMS名 | SMGによる 使用 | 説明 |
|---|---|---|
| BEGIN_ALTERNATE_CHAR | × | 代替文字集合を開始する。 |
| BEGIN_AUTOPRINT_MODE | × | 自動プリント・モードを開始する。 |
| BEGIN_ AUTOREPEAT_MODE | × | 自動リピート・モードを開始する。 |
| BEGIN_AUTOWRAP_MODE | × | 自動ラップ・モードを開始する。 |
| BEGIN_BLINK | ○ | 点滅文字を開始する。 |
| BEGIN_BOLD | ○ | ボールド文字を開始する。 |
| BEGIN_DELETE_MODE | × | 削除モードを開始する。 |
| BEGIN_INSERT_MODE | × | 挿入モードを開始する。 |
| BEGIN_LINE_ DRAWING_CHAR | ○ | ライン描画文字集合の使用を開始する。 |
| BEGIN_NORMAL_ RENDITION | ○ | 通常ビデオ属性の使用を開始する。 |
| BEGIN_REVERSE | ○ | 文字の反転表示を開始する。 |
| BEGIN_UNDERSCORE | ○ | 下線付き文字を開始する。 |
| BOTTOM_ T_CHAR | ○ | ライン描画文字の"⊥"を表示する。 |
| CLEAR_TAB | × | 現在のカラムのタブを消去する。 |
| CR_GRAPHIC | ○ | 制御文字を実行するのではなく, 表現するときにキャリッジ・リターンを示すための文字を定義する。 |
| CROSS_ CHAR | ○ | 垂直線の交差を表現するための文字を定義する。 |
| CURSOR_DOWN | × | カーソルを n 行だけ下に移動する(スクロールは実行されない)。 |
| CURSOR_ LEFT | × | カーソルを n カラムだけ左に移動する。 |
| CURSOR_NEXT_ LINE | × | 引数 n を受け付け, カーソルを n 行後の最初の位置に移動する。 |
| CURSOR_POSITION_REPORT | × | 2つ引数を使用して現在の位置を報告する。 |
| CURSOR_PRECEDING_LINE | × | 引数 n を受け付け,カーソルを n 行前の最初の位置に移動する。 |
| CURSOR_ RIGHT | × | 引数 n を受け付け, カーソルを右に n カラムだけ移動する。 |
| CURSOR_UP | × | 引数 n を受け付け, カーソルを上に n 行移動する(スクロールは実行されない)。 |
| DARK_ SCREEN | ○ | 画面の背景色を暗くする(通常表示)。 |
| DELETE_CHAR | × | 引数 n を受け付け,n 文字を削除する。 |
| DELETE_LINE | × | 引数 n を受け付け,n 行を削除する。 |
| DEVICE_ATTRIBUTES | × | "What are you?" シーケン スに対する漢字ターミナルの応答。 |
| DOUBLE_ HIGH_BOTTOM | ○ | 行を縦横倍角文字の下半分に変更する。 |
| DOUBLE_HIGH_ TOP | ○ | 行を縦横倍角文字の上半分に変更する。 |
| DOUBLE_WIDE | ○ | 行を横倍角文字に変更する。 |
| END_ALTERNATE_CHAR | × | 代替文字集合を終了する。 |
| END_ AUTOPRINT_MODE | × | 自動プリント・モードを終了する。 |
| END_AUTOREPEAT_ MODE | × | 自動リピート・モードを終了する。 |
| END_AUTOWRAP_MODE | × | 自動ラップ・モードを終了する。 |
| END_BLINK | × | 点滅文字を終了する。 |
| END_BOLD | × | ボールド文字モードを終了する。 |
| END_DELETE_MODE | × | 削除モードを終了する。 |
| END_ INSERT_MODE | × | 挿入モードを終了する。 |
| END_LINE_DRAWING_CHAR | ○ | ライン描画文字を終了する。 |
| END_REVERSE | × | 文字の反転表示を終了する。 |
| END_UNDERSCORE | × | 下線付けを終了する。 |
| ERASE_DISPLAY_TO_CURSOR | × | ディスプレイを仮想カーソルの位置まで消去する。 |
| ERASE_LINE_TO_CURSOR | × | 行を仮想カーソルの位置まで消去する。 |
| ERASE_TO_END_DISPLAY | × | ディスプレイの最後まで消去する。 |
| ERASE_TO_END_LINE | ○ | 行の最後まで消去する。 |
| ERASE_WHOLE_ DISPLAY | ○ | ディスプレイ全体を消去する。 |
| ERASE_WHOLE_LINE | × | 行全体を消去する。 |
| ERROR_ICON | ○ | エラーを示す文字を定義する。 |
| FF_GRAPHIC | ○ | 制御文字を実行するのではなく,表示するときに,改ページ(フォーム・フィード) を示すためにこの文字を使用する。 |
| HOME | ○ | カーソルのホーム・ポジションを定義する。 |
| HORIZONTAL_BAR | ○ | ライン描画文字の"─"を表示する。 |
| HT_GRAPHIC | ○ | 制御文字を実行するのではなく, 表示するときに,水平タブを示すためにこの文字を使用する。 |
| INDEX | × | カラム位置を変更せずに,カーソルを1行だけに下に移動する (必要に応じて画面の内容は上にスクロールされる)。 |
| INIT_ STRING | ○ | ターミナル初期化文字列を定義する。 |
| INSERT_CHAR | × | 引数 n を受け付け, n 文字を挿入する。 |
| INSERT_LINE | × | 引数 n を受け付け,n 行を挿入する。 |
| INSERT_PAD | × | 引数 n を受け付け, 挿入した文字の後に n 文字のパッド文字を挿入する。 |
| KEY_0 | ○ | アプリケーション・モードでキーパッドの0によって戻される。 |
| KEY_1 | ○ | アプリケーション・モードでキーパッドの1によって戻される。 |
| KEY_ 2 | ○ | アプリケーション・モードでキーパッドの2によって戻される。 |
| KEY_ 3 | ○ | アプリケーション・モードでキーパッドの3によって戻される。 |
| KEY_ 4 | ○ | アプリケーション・モードでキーパッドの4によって戻される。 |
| KEY_ 5 | ○ | アプリケーション・モードでキーパッドの5によって戻される。 |
| KEY_ 6 | ○ | アプリケーション・モードでキーパッドの6によって戻される。 |
| KEY_ 7 | ○ | アプリケーション・モードでキーパッドの7によって戻される。 |
| KEY_ 8 | ○ | アプリケーション・モードでキーパッドの8によって戻される。 |
| KEY_ 9 | ○ | アプリケーション・モードでキーパッドの9によって戻される。 |
| KEY_BACKSPACE | × | バックスペース・キーによって戻される。 |
| KEY_COMMA | ○ | キーパッドのコンマ・キーによって戻される。 |
| KEY_DOWN_ARROW | ○ | [↓]キーによって戻される。 |
| KEY_E1 | ○ | E1(編集キー1)によって戻される。 |
| KEY_E2 | ○ | E2(編集キー2)によって戻される。 |
| KEY_E3 | ○ | E3(編集キー3)によって戻される。 |
| KEY_E4 | ○ | E4(編集キー4)によって戻される。 |
| KEY_E5 | ○ | E5(編集キー5)によって戻される。 |
| KEY_E6 | ○ | E6(編集キー6)によって戻される。 |
| KEY_ENTER (k) | ○ | キーパッドの[Enter]キーによって戻される。 |
| KEY_F1 ・ ・ ・ |
○ | [F1]キー(ファンクション・キー1)によって戻される。 |
| KEY_F20 | ○ | [F20]キー(ファンクション・キー20)によって戻される。 |
| KEY_LABEL_F1 ・ ・ ・ |
× | [F1]キー(ファンクション・キー1)上の記号。 |
| KEY_LABEL_F20 | × | [F20]キー(ファンクション・キー20)上の記号。 |
| KEY_LEFT_ARROW | ○ | [←]キーによって戻される。 |
| KEY_MINUS | ○ | キーパッドのマイナス・キーによって戻される。 |
| KEY_ PERIOD | ○ | キーパッドのピリオド・キーによって戻される。 |
| KEY_PF1 | ○ | [PF1]キーによって戻される。 |
| KEY_PF2 | ○ | [PF2]キーによって戻される。 |
| KEY_PF3 | ○ | [PF3]キーによって戻される。 |
| KEY_PF4 | ○ | [PF4]キーによって戻される。 |
| KEY_RIGHT_ARROW | ○ | [→]キーによって戻される。 |
| KEY_UP_ARROW | ○ | [↑]キーによって戻される。 |
| LEFT_T_CHAR | ○ | ライン描画文字の"├"を表示する。 |
| LF_GRAPHIC | ○ | 制御文字を実行するのではなく, 表示するときに,改行(ライン・フィード)を示すためにこの文字を使用する。 |
| LIGHT_SCREEN | ○ | 画面の背景色を明るくする(反転表示)。 |
| LOWER_ LEFT_CORNER | ○ | ライン描画文字の"└"を表示する。 |
| LOWER_RIGHT_CORNER | ○ | ライン描画文字の"┘"を表示する。 |
| NAME | ○ | ターミナル名を定義する。 エントリ内の最初のフィールドでなければならない。 |
| NEWLINE_ CHAR | × | 復帰改行(ニューライン)文字を定義する。 |
| NEXT_LINE | × | 次の行を表示する。 |
| NO_PRINTER | × | プリンタが接続されていない状態を定義する。 |
| PAD_CHAR | × | パッド文字を定義する(NULL以外の場合)。 |
| PRINT_SCREEN | × | 画面の内容をプリントする。 |
| PRINTER_READY | × | プリンタの使用可能(ready)状態を定義する。 |
| PRINTER_ NOT_READY | × | プリンタの使用不可能(not ready)状態を定義する。 |
| PRIVATE_STR_ 1 ・ ・ ・ |
× | ユーザ定義機能1 ・ ・ ・ |
| PRIVATE_STR_10 | × | ユーザ定義機能10 |
| REQUEST_CURSOR_POSITION | × | 現在のカーソルの位置を要求する。 |
| REQUEST_ PRINTER_STATUS | × | 接続されているプリンタの状態を要求する。 |
| RESTORE_CURSOR | × | 前に保存した位置にカーソルを戻す。 |
| REVERSE_INDEX | × | 前の行の同じカラムにカーソルを移動する (必要に応じて,画面の内容は下にスクロールされる)。 |
| RIGHT_T_CHAR | ○ | ライン描画文字の"┤"を表示する。 |
| SAVE_ CURSOR | × | カーソルの位置を保存する。 |
| SCROLL_FORWARD | × | 引数 n を受け付け, 前向きに n 行をスクロールする。 |
| SCROLL_REVERSE | ○ | 引数 n を受け付け, 逆向きに n 行をスクロールする。 |
| SEL_ERASE_TO_END_DISPLAY | × | カーソルの位置からディスプレイの最後まで選択的に消去する (属性は変更しない)。 |
| SEL_ERASE_TO_END_LINE | × | カーソルの位置から行の最後まで選択的に消去する(属性は変更しない)。 |
| SEL_ERASE_ WHOLE_DISPLAY | × | ディスプレイ全体を選択的に消去する(属性は変更しない)。 |
| SEL_ERASE_WHOLE_LINE | × | 行全体を選択的に消去する(属性は変更しない)。 |
| SET_APPLICATION_KEYPAD | ○ | アプリケーション・キーパッド・モードを開始する。 |
| SET_CHAR_NOT_SEL_ERASE | × | 後続のすべての文字を選択的に消去不可能として指定する。 |
| SET_CHAR_SEL_ERASE | × | 後続のすべての文字を選択的に消去可能として指定する。 |
| SET_CURSOR_ABS | ○ | カーソルのアドレスを指定する (行引数とカラム引数を受け付ける)。 |
| SET_CURSOR_OFF | ○ | カーソルを表示されない状態に設定する。 |
| SET_CURSOR_ON | ○ | カーソルを表示される状態に設定する。 |
| SET_JUMP_ SCROLL | ○ | スクロールをジャンプ・スクロールに設定する。 |
| SET_NUMERIC_ KEYPAD | ○ | キーパッド・ アプリケーション・モードを終了する(数値モードを再開する)。 |
| SET_ORIGIN_ABSOLUTE | × | 現在のスクロール領域の外部にカーソルを移動することを許可する。 |
| SET_ORIGIN_RELATIVE | × | 現在のスクロール領域の外部にカーソルを移動することを禁止する。 |
| SET_PRINTER_ OUTPUT | × | 画面ではなく,プリンタ・ポートに出力を送信する。 |
| SET_SCREEN_ OUTPUT | × | ターミナル画面に出力を送信する。 |
| SET_SCROLL_REGION | ○ | スクロール領域を設定する (引数として上マージンと下マージンを受け付ける)。 |
| SET_ SMOOTH_SCROLL | ○ | スクロールを連続スクロールに設定する。 |
| SET_TAB | × | 現在のカラムにタブを設定する。 |
| SINGLE_HIGH | ○ | この行の高さと幅を通常表示に変更する。 |
| TAB_ CHAR | × | タブ文字を定義する ([Ctrl /I]またはパッドを含むタブ以外の文字)。このフィールドは, ASCII以外の漢字ターミナルの場合にだけ使用しなければならない。 |
| TOP_T_CHAR | ○ | ライン描画文字の"┬"を表示する。 |
| TRUNCATION_ ICON | ○ | オーバーフロー文字が切り捨てられたことを示す文字を定義する。 |
| UNDERLINE_CHAR | × | 文字に下線を付ける。 |
| UPPER_LEFT_CORNER | ○ | ライン描画文字の"┌"を表示する。 |
| UPPER_RIGHT_CORNER | ○ | ライン描画文字の"┐"を表示する。 |
| VERTICAL_BAR | ○ | ライン描画文字の"│"を表示する。 |
| VT_GRAPHIC | ○ | 制御文字を実行するのではなく, 表示するときに,垂直タブを示す文字を定義する。 |
| WIDTH_NARROW | ○ | 漢字ターミナルの幅を通常幅(80カラム)に設定する。 |
| WIDTH_ WIDE | ○ | 漢字ターミナルの幅を拡大幅(132カラム)に設定する。 |
表 5-4はSTRING_2機能を示しています。 SMG$M_USER1からSMG$M_USER8のユーザ定義レンディションのいずれかを作成する 場合には,STRING_2機能を使用してTERMTABLE.TXTファイルに適切な定義を 登録しなければなりません。
| VMS名 | SMGによる 使用 | 説明 |
|---|---|---|
| BEGIN_STATUS_LINE | ○ | ハードウェア状態行への出力を開始する。 |
| BEGIN_USER1 | ○ | 最初のユーザ定義属性を開始する。 |
| BEGIN_USER2 | ○ | 2番目のユーザ定義属性を開始する。 |
| BEGIN_ USER3 | ○ | 3番目のユーザ定義属性を開始する。 |
| BEGIN_USER4 | ○ | 4番目のユーザ定義属性を開始する。 |
| BEGIN_USER5 | ○ | 5番目のユーザ定義属性を開始する。 |
| BEGIN_ USER6 | ○ | 6番目のユーザ定義属性を開始する。 |
| BEGIN_USER7 | ○ | 7番目のユーザ定義属性を開始する。 |
| BEGIN_USER8 | ○ | 8番目のユーザ定義属性を開始する。 |
| END_ STATUS_LINE | ○ | ハードウェア状態行への出力を終了する。 |
| END_USER1 | × | 最初のユーザ定義属性を終了する。 |
| END_USER2 | × | 2番目のユーザ定義属性を終了する。 |
| END_ USER3 | × | 3番目のユーザ定義属性を終了する。 |
| END_USER4 | × | 4番目のユーザ定義属性を終了する。 |
| END_USER5 | × | 5番目のユーザ定義属性を終了する。 |
| END_ USER6 | × | 6番目のユーザ定義属性を終了する。 |
| END_USER7 | × | 7番目のユーザ定義属性を終了する。 |
| END_USER8 | × | 7番目のユーザ定義属性を終了する。 |
| BLACK_ SCREEN | ○ | 画面の背景色を黒に設定する。 |
| BLUE_SCREEN | ○ | 画面の背景色を青に設定する。 |
| CYAN_SCREEN | ○ | 画面の背景色を青緑に設定する。 |
| GREEN_ SCREEN | ○ | 画面の背景色を緑に設定する。 |
| MAGENTA_SCREEN | ○ | 画面の背景色を紫に設定する。 |
| RED_SCREEN | ○ | 画面の背景色を赤に設定する。 |
| WHITE_ SCREEN | ○ | 画面の背景色を白に設定する。 |
| YELLOW_SCREEN | ○ | 画面の背景色を黄色に設定する。 |
| USER1_SCREEN | ○ | ユーザ定義背景色。 |
| USER2_SCREEN | ○ | ユーザ定義背景色。 |
文字列機能フィールドには,印字不可能な文字が含まれることが多いため, これらの文字を機能文字列に容易に挿入できるようにするために, 次に示す置換文字を使用します。 プリントされない文字を表現するには特殊文字を使用します。
| 特殊文字 | プリントされない文字 | 意味 |
|---|---|---|
| $ | ESCAPE | 10進数で27のASCII文字 |
| ^ | CONTROL | コントロール・シフト |
| & | CSI | 10進数で155のASCII文字 |
| @ | SS3 | 10進数で143のASCII文字 |
したがって,エスケープ文字を含む機能文字列を作成する場合には, その位置に単にドル記号を指定します。制御文字を含む機能文字列を作成する場合には, 文字の前にサーカンフレックス(^)を指定します。次の例を参照してください。
NAME = "VT300_series"
.
.
.
STRING
begin_alternate_char = "^N",
end_alternate_char = "^O",
erase_whole_display = "$[2J"
.
.
.
END
機能文字列内で文字を使用し,その文字の通常のASCII値を使用する場合には, その文字の前にアンダースコアを指定します(たとえば,"_$"と指定すると, アンダースコアの後にエスケープ文字が挿入されるのではなく, 1つのドル記号が挿入されます)。次に示す文字を通常の ASCIIテキストとして取り扱うには, その文字の前にアンダースコアを指定しなければなりません。
| ・アンパーサンド | & |
| ・アポストロフィ | ' |
| ・アットマーク | @ |
| ・引用符 | " |
| ・サーカンフレックス | ^ |
| ・ドル記号 | $ |
| ・感嘆符 | ! |
| ・左括弧 | ( |
| ・アンダースコア | _ |
日本語SMGはライン描画文字集合(たとえば,bottom_t_ char, top_t_charなど)を表示するために,必要なグラフィック・モードを 自動的に起動します。しかし,フォーリン・ターミナル・ルーチンを直接 呼び出す場合には,ユーザが必要なグラフィック・モードを起動しなければなりません。
漢字ターミナルがコマンドを実行するための十分な時間を確保できるように, パッド文字(たとえば,NULL文字)をターミナル・コマンドに 追加しなければならないことがあります。必要なパッド文字の数は, 使用する漢字ターミナルとボー・レートに応じて異なります。 パッド文字機能フィールドは将来の拡張に備えて準備されているものであり, このリリースでは機能しません。パッド文字を挿入する操作はユーザが 実行しなければなりません。
フォーリン・ターミナル・サポート・ルーチンを直接呼び出す場合には, 多くの文字列機能フィールドは引数を使用し,その引数の値を実行時に 指定しなければなりません。さらに,引数の中には,引数に対して値を 代入するときに算術演算を実行しなければならないものがあります。 この後の節では,引数の置換と算術演算について説明します。
多くの場合,ターミナル・コマンド文字列内の値を置き換えなければなりません。 たとえば,スクロール領域を設定する場合や,カーソルを右に10カラムだけ 移動する場合には,実行時に値を置き換える必要があります。これらの値は TERMTABLEターミナル定義には登録できません。TERMTABLEは文字列を 置き換えるために,!ULを受け付けます。これは $FAO形式のディレクティブです。!ULディレクティブは, その場所に値を挿入することを示します。
TERMTABLEインターフェイス・ルーチンは機能フィールド文字列 (および戻されるコマンド文字列)内の値を置き換える前に, 符号なしロングワードを受け付け,それを ASCIIの数値に変換します。次の例を参照してください。
NAME = "VT300_series"
.
.
.
STRING
set_cursor_abs = "$[!UL;!ULH"
.
.
.
END
SET_CURSOR_ABSに対して定義される文字列には,2つの!ULディレクティブに 対して置き換えられる値を指定しておかなければなりません。これらの値は, カーソルを設定する行番号とカラム番号を示します。これらの実行時引数は, SMG$GET_TERM_DATAルーチンに対する省略可能なロングワード・ベクタ引数として 指定します。ベクタ内の最初のエントリには,その後に続く引数の数が指定されます。 したがって,最初のエントリが2の場合には,2番目のエントリは行番号を示し, 3番目のエントリはカラム番号です。SMG$GET_TERM_DATAルーチンは最初のデータ項目 (ベクタ内の2番目の項目)をASCIIの対応する数値に変換し,最初の !ULディレクティブに対してそのASCII値を挿入します。その後, 2番目のデータ項目を変換し,その結果を2番目の!ULディレクティブに対して 挿入します。以下も同様です。
引数の置き換えの他に,ターミナル・コマンド・シーケンスは算術演算も 必要とすることがあります。引数の置き換えと算術演算を実行する場合には, TERMTABLEエントリは,引数変換および置換の場合と異なる方式を必要とします。
引数の置き換えと算術演算のどちらも実行する場合には,左括弧,パーセント記号 (置換の場所を示す),算術演算子,オペランド,右括弧を使用します。 次の例を参照してください。
NAME = "VT52"
.
.
.
STRING
set_cursor_abs = "$Y(%1+31)(%2+31)"
.
.
.
END
この例では,VT52でカーソルを直接移動する文字列を示しています。ただし, バイアスを行番号とカラム番号に加算しなければなりません。数式内で置換される値は, 引数置換を単独で実行する場合と同じ方法で,SMG$GET_TERM_DATAルーチンによって 渡されます。パーセント記号の後に常に整数が続きます。この整数は引数を置換する 順序を示します。
次の表は算術演算で使用する文字を示しています。
| 文字 | 意味 |
|---|---|
| ( | 数式の先頭 |
| %n | n 番目のユーザ引数を置換する |
| + | 加算演算子 |
| - | 減算演算子 |
| * | 乗算演算子 |
| / | 除算演算子 |
| ) | 数式の最後 |
画面の座標を表現するには,ロングワード整数で十分です。 数式は左から右に評価されます。演算子に優先順位はありません。
項目間のスペースは意味がありません。数式を読みやすくするために,スペースを 任意に使用してもかまいません。機能文字列の長さは128バイトに制限されています。
ターミナル機能データベースのソース・コードはTERMTABLE.TXTという名前の ASCIIファイルです。このファイルには,各タイプの漢字ターミナルに対して エントリが登録されています。各エントリには,漢字ターミナルの機能をはじめ, 初期化シーケンスや画面のサイズなどの装置固有の情報が登録されています。 ひとつのTERMTABLEエントリからファイル内の複数のレコードを参照できます。 ターミナル定義の追加はTERMTABLE.TXTファイルを編集することにより可能です。 ただし,その後SYS$SYSTEM:SMGBLDTRM.EXEを実行し, TERMTABLE.TXTを再処理しなければなりません。
TERMTABLE.TXTは任意のテキスト・エディタを使用して作成できます。 TERMTABLEエントリは1つのターミナル名,任意の数の機能フィールドと その値で構成されます(機能フィールドについての詳しい説明は, 第5.2節を参照してください)。 TERMTABLE.TXTは,コンパイルのために適切な形式に設定しなければなりませんが, 機能名はその機能をわかりやすく表現しており,簡単に理解できます。 ターミナル名は固有の名前でなければなりません。たとえば, フォーリン・ターミナルに対して複数の定義が必要な場合には, 複数の名前を使用しなければなりません。
TERMTABLEルーチンが最初にターミナル・エントリを検索する場合には, TERM$TABLOCという論理名の領域からTERMTABLE.EXEを検索しようとします。 指定されたターミナル・エントリをその領域から検索できない場合には, ルーチンはSYS$SYSTEMからTERMTABLE.EXEを検索します。ある漢字ターミナルに対して, システム定義と異なるターミナル定義を使用する場合には,TERMTABLE.TXTと TERMTABLE.EXEのプライベート・コピーを作成できます。そうすれば, SYS$SYSTEM:TERMTABLE.EXEに登録されている定義と異なる定義を使用してその 漢字ターミナルを定義でき,他の漢字ターミナルに対しては, 標準的なシステム定義を使用できます。
TERMTABLEエントリの形式は次のとおりです。
NAME = "terminal-name"
capability-field [,...]
END
TERMTABLE.TXTファイルでは,REQUIREディレクティブを使用できます。 REQUIREディレクティブを使用すれば,TERMTABLE.TXTファイルに 別のソース・ファイルを取り込むことができます。その形式は次のとおりです。
REQUIRE "filespec"
この形式で,"filespec"は適切なOpenVMSファイル指定です。
!
! Private versions of DIGITAL terminal definitions
!
NAME = 'myvt300'
BOOLEAN
ansi_crt = 1, dec_crt = 1
NUMERIC
rows = 24, columns = 80,
wide_screen_columns = 132
STRING
begin_alternate_char = "^N",
end_alternate_char = "^O",
erase_whole_display = "$[2J",
init_string = "$_(B",
set_cursor_abs = "$[!UL;!ULH"
END
NAME = "MYVT52"
BOOLEAN
ansi_crt = 0, dec_crt = 1
NUMERIC
rows = 24, columns = 80,
wide_screen_columns = 80
STRING
begin_alternate_char = "$F"
end_alternate_char = "$G",
erase_whole_display = "$Y(32)(32)$J", !position to 1,1; then erase
set_cursor_abs = "$Y(%1+31)(%2+31)"
END
VT300シリーズ(MYVT300)に対して登録されているカーソル設定シーケンスの場合, 戻される文字列は,SMG$GET_TERM_DATAルーチンを呼び出すときに指定した 引数ベクタ内の値に応じて異なります。たとえば,カーソルを3行目, 12カラム目に移動する場合には,これらのロングワード値をベクタ内の 2番目のエントリと3番目のエントリに指定します(最初のエントリはその後に続く 値の個数です)。SMG$GET_TERM_DATAルーチンはこれらのロングワード値を ASCII値に変換し,変換した値に対応する !ULディレクティブの位置に戻される文字列に挿入します。
VT52 (MYVT52)に対して登録されているカーソル設定シーケンスの場合には, 戻される文字列は引数置換によってではなく,算術演算に応じて変化します (VT52はバイアス操作を必要とするため)。SMG$GET_TERM_DATAルーチンに対する 引数ベクタのエントリ2とエントリ3に指定した行番号とカラム番号に31 (10進数)を加算するために,算術演算子を使用しています。
MYVT300内のINIT_STRINGフィールドは,括弧が,通常は数式を示す特殊文字として 取り扱われることを示しています。括弧を通常のテキスト文字として解釈するには, その前にアンダースコアを指定しなければなりません。したがって, “$_(B”という文字列は ESC(Bになります。これはASCII文字集合を G0に設定するためのコマンドです。
MYVT52に対するERASE_WHOLE_DISPLAYシーケンスは,特定の機能を提供するために, シーケンスを組み合わせなければならない可能性があることを示しています。 VT52には画面全体を消去するコマンドがありません。しかし,カーソルを ホーム・ポジションに移動し,現在の位置から画面の最後まで消去するコマンドを 使用すれば,画面全体を消去できます。
各プログラムがASCIIファイルをアクセスするのは非効率的です。これは, ASCIIテキストを,漢字ターミナルに対して使用可能な文字列として渡すには, その前にバイナリ情報として処理しておかなければならないからです。 各イメージを開始するときにこの処理を実行する必要がないようにするために, TERMTABLE.TXTは必要なバイナリ形式に"プリコンパイル"されています。この場合, 画面アプリケーションはプリコンパイルされたバイナリの機能ファイルから ターミナル・シーケンスを検索できます。
TERMTABLE.TXTをコンパイルするには,SYS$SYSTEM:SMGBLDTRM .EXEプログラムを 実行します。このユーティリティは入力ファイル TERMTABLE.TXTを受け付け, TERM$TABLOCという論理名によって示される装置とディレクトリに, 出力ファイルとしてTERMTABLE.EXEを作成します。
コンパイルされたターミナル機能は,グローバル・セクションにマップされる ファイルにテーブルとして登録されます。したがって,ユーザ・プログラムは グローバル・セクションを参照すれば良く, 機能データのコピーを独自に持つ必要がありません。
ユーザが自分のディレクトリから個人用のTERMTABLE.TXTをコンパイルする場合には, インターフェイス・ルーチンはそれを一時的なセクションとしてマッピング することによりアクセスします。TERMTABLEインターフェイス・ルーチンは システムのグローバル・セクションを検索する前に, 一時的なセクションから定義を検索します。
システム管理者は,標準でない定義がユーザの個人領域に制限されるように するために,ターミナル定義を調整しなければならないことがあります。
ほとんどのユーザはグローバル・セクションを作成するための特権を 与えられていません。SYS$SYSTEM:SMGMAPTRM.EXEという短いプログラムは コンパイルされた TERMTABLEをグローバル・セクションとしてマップする プログラムであり,標準的なOpenVMSスタートアップ・プロシージャの一部です。 変更したTERMTABLE.EXEをグローバル・セクションとしてマップするには, 既存のグローバル・セクションを最初に削除しておかなければなりません。 システムが動作中にグローバル・セクションを削除すると, ユーザ・プログラムが異常終了する可能性があります。したがって,変更した TERMTABLE.EXEを省略時の設定として定義するには, システムを再ブートしなければなりません。
コンパイル時間と作成されるグローバル・セクションのサイズを削減するために, SYS$SYSTEM:TERMTABLE.TXT内のターミナル定義は最低限に抑えなければなりません。 実際にコンピュータ・システムに接続される漢字ターミナルのタイプだけを 定義するようにしてください。
第5.2節の表は,日本語SMGが特定の 機能文字列を要求できるかどうかを示しています。ライン描画などの一部の機能は, ラインを描く日本語SMGルーチンを呼び出した場合などにだけ要求されます。 通常のテキストを画面に書き込む操作だけしか実行しない場合には, 次のフィールドだけを定義しておけば十分です。
SET_CURSOR_ABSを省略した場合には,日本語SMGは漢字ターミナルを ハード・コピー装置として取り扱います(ハード・コピー装置に対する 日本語SMGの使用は,本バージョンではサポートされません)。
次のオプション機能を指定した場合には,日本語SMG操作はより効率的になります。
ERASE_TO_END_DISPLAY,ERASE_TO_END_LINE,SET_SCROLLING_REGIONを指定しなかった 場合には,日本語SMGはこれらの機能を実行するために空白を挿入します。しかし, 空白を挿入する操作は時間のかかる操作です。同様に,ハードウェアの スクロール機能を使用すれば,出力の速度を向上できます。スクロール機能を 使用できない場合には,日本語SMGは画面全体を描き直さなければなりません。
日本語SMGはASCII文字集合を使用します。漢字ターミナルにライン描画文字セット が備えられている場合には,ライン描画文字(bottom_t_ char, horizontal_bar など)を定義しなければなりません。ライン描画文字が定義されていない場合には, SMGは境界を描くために通常のASCII文字を使用します。
また日本語SMGは,ターミナル・ドライバを管理しているターミナル属性にも 依存します。これらの属性は,DCLのSET TERMINALコマンドを使用して変更できます。 たとえば,SET TERMINAL/NOTABと入力すると,日本語SMGは漢字ターミナルにタブを 送信しなくなります。
フォーリン・ターミナルとは,OpenVMSが認識する標準的な DECターミナル以外の装置タイプの漢字ターミナル,あるいは ANSI_CRT属性が設定されていない漢字ターミナルです。
DEC (またはANSI)ターミナルを使用する場合には,ファンクション・キーや キーパッド・キーなどの特殊なキーを入力すると,エスケープ・シーケンス ( ANSI標準規格によって定義されているシーケンス)が OpenVMSターミナル・ドライバに送信されます。OpenVMSターミナル・ドライバはこの ANSI標準規格を認識し,この標準規格に従って,エスケープ・シーケンスを解釈します。 したがって,OpenVMSターミナル・ドライバは,エスケープ・シーケンスの長さと, そのシーケンス内のどの位置でどの文字が認められるかを認識しています。
OpenVMSターミナル・ドライバは,エスケープ・シーケンス内のプリント文字を エコー表示しません。これは,これらの文字がエスケープ・シーケンスの一部として 特殊な意味を持つものとして解釈されるからです。ただし,TRM$M_TM_NOECHO修飾子を 指定しない限り,通常のキーはエコー表示されます。
OpenVMSターミナル・ドライバはエスケープ・シーケンス,シーケンスの長さ, ファンクション・キーが押される前に入力された文字数を日本語SMGルーチンに 戻します。日本語SMGルーチンは,シーケンスとその長さをTERMTABLE.EXE内の 特定の漢字ターミナルに対するキー定義のリストと比較することにより, どのキーが押されたかを判断します。このコードはSMG$K_TRM_xxxという形式で ユーザに戻されます。ただし,xxxは特定のキーを指します。
フォーリン・ターミナルでファンクション・キーやキーパッド・キーなどの 特殊なキーを押した場合には,ANSI標準ではないシーケンスが OpenVMSターミナル・ドライバに送信されます。このシーケンスが 制御文字から始まる場合には,OpenVMSターミナル・ドライバはこの文字を 終了文字として解釈します(省略時の設定では,特に他の目的で終了文字マスクを 使用しない限り,すべての制御文字は終了文字になります)。その後, ターミナル・ドライバは文字の読み込みを停止し,その文字,長さ1,および ファンクション・キーが押される前に入力された文字数を 日本語SMGルーチンに戻します。
日本語SMGルーチンは,戻された文字を調べます。その文字が制御文字の場合には, 日本語SMGルーチンは先読みバッファにシーケンスの次の文字が 登録されていないかどうかを確認します。先読みバッファに文字が 登録されている場合には,日本語SMGルーチンは先読みバッファから1文字を読み込み, それを前に読み込んだ制御シーケンスの後に追加し,この新しいシーケンスを TERMTABLE.EXE内のこのターミナルに対するキー定義のリストと比較し, どのキーが押されたかを判断します。シーケンスが一致しない場合には, 先読みバッファから次の文字が読み込まれます。一致するものが検出されるまで, または先読みバッファが空になるまで,この処理が継続的に実行されます。
ターミナル・ドライバはこのシーケンスに関して知識を持たないため, エコー表示を禁止する修飾子をユーザが指定しない限り,シーケンス内の プリント可能な文字はターミナル・ドライバによってエコー表示されます。 日本語SMGルーチンにはどの文字がこのシーケンスを構成するのかがわからないため, シーケンスを構成する実際の文字を日本語SMGルーチンに戻すことが できるようにするために,行編集機能が禁止されます。
特殊キーが制御文字から始まらないシーケンスを送信する漢字ターミナルは, 入力の対象として日本語SMGルーチンでサポートされません。 ファンクション・キー・シーケンスを開始する制御文字を除外するように 終了文字マスクを変更する操作はサポートされません。さらに,入力を実行する フォーリン・ターミナルの性能は,同じ入力を実行するDECターミナルの性能と 一致しません。これは,日本語SMGルーチンがOpenVMSターミナル・ドライバの かわりにシーケンスを解析しなければならないからです。
DCLのSET TERMINALコマンドは,TERMTABLE定義に従うように漢字ターミナルを 設定します。SET TERMINALコマンドを使用すると,TERMTABLEデータベースから次の 3つのフィールドが検索され,漢字ターミナルに対して設定されます。
さらに,対応する論理値機能がターミナル定義に設定されている場合には, 次のフラグが設定されます。
これらのフィールドのいずれかが定義から脱落している場合には, その属性に対しては,以前の設定が保存されます。 SET TERMINALコマンドは漢字ターミナルに対してその属性を設定しようとしません。 予測できない設定が発生するのを防止するには,ここに示したすべての機能を 定義に指定しなければなりません。SET TERMINALコマンドは,VT300シリーズ, VT200シリーズ,VT100,および VT52などの認識される漢字ターミナルに対しては, 常に同様に動作します。SET TERMINALが認識しない装置名を検出した場合には, TERMTABLEからその名前を持つ定義を検索します。ユーザ固有の定義は, SET TERMINALが現在認識する名前以外の名前でなければなりません。 現在認識される漢字ターミナルは次に示すとおりです。
| LA12 | LQP02 | VT102 |
| LA34 | VT05 | VT125 |
| LA36 | VT52 | VT131 |
| LA38 | VT55 | VT132 |
| LA100 | VT80 | VT200-SERIES |
| LA120 | VT100 | VT300-SERIES |
| Unknown | VT101 | FT1からFT8 |
SET TERMINALが独自の内部テーブルから装置名を検索する場合には, TERMTABLEデータベースを検索しません。
SET TERMINALコマンドは装置名の最初の15文字だけを認識するため, ターミナル名は15文字に制限することが必要です。
SET TERMINAL/DEVICE_TYPE=nameコマンドを使用した場合, 指定された漢字ターミナルがOpenVMSオペレーティング・システムによって 認識されないときは,TERMTABLEデータベースからその漢字ターミナルが検索されます。
SET TERMINAL/DEVICE_TYPE=nameコマンドはその後,次の表に示すように, TERMTABLEデータベース内の機能の存在をもとに, いろいろなターミナル属性を設定します。
| 機能フィールド | ターミナル属性 |
|---|---|
| LOWERCASE | LOWERCASE |
| PHYSICAL_TABS | TABS |
| SCOPE | SCOPE |
| EIGHT_BIT | EIGHTBIT |
| PHYSICAL_FF | FORM |
| FULLDUP | FULLDUP |
| SIXEL_GRAPHICS | SIXEL |
| SOFT_CHARACTERS | SOFT |
| ANSI_CRT | ANSI_CRT |
| REGIS | REGIS |
| BLOCK_MODE | BLOCK |
| ADVANCED_VIDEO | AVO |
| EDIT_MODE | EDIT |
| DEC_ CRT | DEC_CRT |
TERMTABLEターミナルに対しては,SET TERMINAL/DEVICE_TYPE=形式のコマンドを 使用しなければなりません。SET TERMINAL/nameは古い形式のコマンドであり, 一部の装置名に対してだけしか機能せず,OpenVMSの前のバージョンとの互換性を 維持する目的でのみ使用できます。