フォーリン・ターミナル とは, OpenVMS が認識する標準的なターミナル以外の装置タイプの漢字ターミナル,あるいは ANSI_CRT 属性が設定されていない漢字ターミナルです。
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 ルーチンでサポートされません。ファンクション・キー・シーケンスを開始する制御文字を除外するように終了文字マスクを変更する操作はサポートされません。さらに,入力を実行するフォーリン・ターミナルの性能は,同じ入力を実行する ANSI ターミナルの性能と一致しません。これは,日本語 SMG ルーチンが OpenVMS ターミナル・ドライバのかわりにシーケンスを解析しなければならないからです。
DCL の SET TERMINAL コマンドは, TERMTABLE 定義に従うように漢字ターミナルを設定します。 SET TERMINAL コマンドを使用すると, TERMTABLE データベースから次の 3 つのフィールドが検索され,漢字ターミナルに対して設定されます。
- ターミナル・タイプ−システムが割り当てる,特定の装置タイプに関連する符号付き整数
- 幅−物理画面のカラム数
- ページ・サイズ−画面の行数
さらに,対応する論理値機能がターミナル定義に設定されている場合には,次のフラグが設定されます。
- ADVANCED_VIDEO
- ANSI_CRT
- BLOCK_MODE
- DEC_CRT
- EDIT
- EIGHT_BIT
- FORM
- FULLDUP
- LOWERCASE
- REGIS
- SCOPE
- SIXEL_GRAPHICS
- SOFT_CHARACTERS
- TAB
これらのフィールドのいずれかが定義から脱落している場合には,その属性に対しては,以前の設定が保存されます。 SET TERMINAL コマンドは漢字ターミナルに対してその属性を設定しようとしません。予測できない設定が発生するのを防止するには,ここに示したすべての機能を定義に指定しなければなりません。
SET TERMINAL コマンドは,VT300 シリーズ,VT200 シリーズ,VT100,および VT52 などの認識される漢字ターミナルに対しては,常に同様に動作します。 SET TERMINAL が認識しない装置名を検出した場合には, TERMTABLE からその名前を持つ定義を検索します。ユーザ固有の定義は, SET TERMINAL が現在認識する名前以外の名前でなければなりません。現在認識される漢字ターミナルは次に示すとおりです。