この機能は COBOL でのみ使用できます。この機能を使用すると、ご使用の端末で拡張モードがサポートされている場合に、このモードが使用できます。拡張モードがサポートされているのは、132 列モードが選択できる vt100 形式の端末などです。画面出力の通常の方法は、ANSI DISPLAY、Adis DISPLAY、および cobprintf() 呼び出しも含めて、すべて使用できます。カーソルのアドレス指定は現在の端末のモードと矛盾しないようにする必要があります。たとえば、Adis を使ってカーソルを 100 列目に置くように指定しても、80 列モードではこれは不可能です。この場合、通常モードから拡張モードへの自動切り換えもできません。拡張モードは、次に示すように明示的に設定する必要があります。
この機能を使用するには、作成したプログラムの作業場所節に、次のレコードが必要です。
01 mode-number pic x comp-x.
また、実行時に次の方法で呼び出す必要があります。
call "cobtermmode" using mode-number
mode-number
には次のいずれかの値を指定できます。
値 |
意味 |
0 |
標準端末モード。標準の端末の terminfo ファイルが使用されます。 |
1 |
拡張端末モード。標準の端末名の最後に -w が追加された名前の terminfo ファイルが使用されます。 |
呼び出しが正常に終了すると、RETURN-CODE の値がゼロに設定されます。呼び出しに失敗すると、ゼロ以外の値に設定されます。たとえば、要求した terminfo ファイルが見つからない場合はゼロ以外の値になります。terminfo の検索方法については、「移植性のある Terminfo データベースとシステムの Terminfo データベースの検索」を参照してください。
呼び出しが正常に行われると、画面処理システムは初期化され (まだ初期化されていない場合)、次のように動作します。
- 0 に設定された RETURN-CODE が返される。
- Adis が新しいモードで再起動される。
- すべての文字および属性のマップがクリアされる。
- 画面がクリアされ、カーソルがホーム ポジションに置かれる。
画面処理システムが初期化されると、ANSI DISPLAY 文なども含むすべての DISPLAY 文で、新しい画面処理システムが使用されます。
呼び出しに失敗すると、RETURN-CODE には 0 以外の値が設定され、画面は変更されません。RETURN-CODE は次のように設定されます。
値 |
意味 |
0 |
操作が正常に完了した。 |
1 |
terminfo ファイルが見つからない (またはアクセスできない/破損している) かメモリが不足している。 |
2 |
terminfo ファイル内に 1 つ以上の必要なエントリが存在しない。 |
3 |
必要なコードが使用環境でサポートされていない。 |
cobtermmode 呼び出しを使用する場合は、次のことに注意してください。
- 拡張モードの画面幅は最大 255 列です。
- Animator を使用してこの呼び出しを実行すると、端末が新しいモードに初期化されます。その際、画面がちらつくことがあります。Animator の画面では、拡張モードがサポートされません。そのため、拡張モードで表示しているユーザー画面との切り替え時には画面モードが変更されます。
- ランタイム システムが終了すると、端末画面は標準モードに戻ります(ただし、cobtermmode() で画面モードを変更した場合のみ)。
- COBTERMINFO で指定されるディレクトリに標準モード端末用のエントリが登録されていて (拡張モード端末用のエントリは登録されていない)、システムの terminfo ディレクトリには拡張モード端末用のエントリが登録されている場合、通常のパス検索規則に従って、標準モードでは COBTERMINFO の terminfo が使用され、拡張モードではシステムの terminfo が使用されます。その結果、この 2 つの terminfo データベース間に列の数以外の相違が存在すると、予期しない問題が発生する可能性があります。
- 拡張モードが必要であることを TERM 環境変数で指定している (TERM に -w 付きの値を設定している) 場合は、拡張モードへの切り替えを試みると -w が二重に付加されます (-w-w)。その結果、端末がダブル拡張モードをサポートしており、同モード用のエントリが terminfo データベースに登録されていない限り、拡張モードへの切り替えは失敗します。
端末の状態を切り換えるには、次の 6 つの terminfo の機能を使用します。
フル ネーム |
省略名 |
init_1string |
is1 |
init_2string |
is2 |
init_3string |
is3 |
reset_1string |
rs1 |
reset_2string |
rs2 |
reset_3string |
rs3 |
これらに関する詳細は、『AT&T UNIX System V Interface Definition (SVID)』で説明されています。使用方法は次のようになっています。
- 画面ライブラリが正常に起動すると、is1、is2、および is3 がこの順番で出力されます。端末のモードが変更されると、rs1、rs2、rs3 が出力され、その後、新しい terminfo の is1、is2、is3 がこの順番で出力されます。
- 標準の terminfo は、rsx 群または isx 群のどちらかに列切り換えシーケンスが指定されている可能性があるため、両方を使用する必要があります。terminfo にこのどちらも存在しない場合は、既存の terminfo ファイルを修正するか、新たに作成する必要があります。
アプリケーションを実行する際には、端末のモードと、TERM の端末名で指定された terminfo が適合するようにしてください。