cobtermmode

端末画面を標準モードと拡張モード間で切り替えます。
制約事項: この関数は、ネイティブ COBOL でのみサポートされます。

構文:

#include "cobscreen.h"

int cobtermmode(const cobuns8_t *mode);

パラメーター:

mode 端末の画面モード。0 または 1 を指定します。

説明:

このルーチンは、端末画面を標準モードと拡張モード間で切り替えます。ただし、使用している種類の端末用の terminfo データベース内で、必要な機能が定義されていることが条件です。

具体的には、使用している端末の種類のエントリに加え、それに -w を付けたエントリが terminfo データベースに登録されており、エントリに適切な初期化機能とリセット機能の両方、または一方が定義されていることが条件になります。たとえば、vt100 端末を使用している場合には、terminfo データベース内に vt100-w のエントリも含まれており、vt100 と vt100-w の両方に is1、is2、is3、rs1、rs2、および rs3 の各エントリ (またはいずれかのエントリ) が定義されている必要があります。

mode パラメーターには、端末画面を標準モード (デフォルト) に設定する場合は 0、拡張モードに設定する場合は 1 を指定します。その他の値は無効です。

端末画面のモードが切り替わると、画面処理システムが必要に応じて初期化され、画面表示が消去されます。その結果、カーソルは開始位置に配置されます。

このルーチンは COBOL コードからも問題なく呼び出すことができます。詳細については、ユーザー ガイドの「TERMINFO データベースと端末装置」の章に記載されている「拡張端末モード」を参照してください。

このルーチンの使用にあたっては、次の点に留意してください。

  • 拡張モードの画面幅は最大 255 列です。
  • Animator を使用してこの呼び出しを実行すると、端末が新しいモードに初期化されます。このとき、画面がちらつくことがあります。Animator の画面では、拡張モードがサポートされません。そのため、拡張モードで表示しているユーザー画面との切り替え時には画面モードが変更されます。
  • ランタイム システムが終了すると、端末画面は標準モードに戻ります(ただし、cobtermmode() で画面モードを変更した場合のみ)。
  • 画面モードのエントリは terminfo データベースの通常の検索順序に従って検索されます。そのため、COBTERMINFO で指定されるディレクトリに標準モード端末用のエントリが登録されていて (拡張モード端末用のエントリは登録されていない)、システムの terminfo ディレクトリには拡張モード端末用のエントリが登録されている場合、標準モードでは COBTERMINFO の terminfo が使用され、拡張モードではシステムの terminfo が使用されます。その結果、この 2 つの terminfo データベース間に列の数以外の相違が存在すると、予期しない問題が発生する可能性があります。

    terminfo データベースの検索順序の詳細については、ユーザー ガイドの「TERMINFO データベースと端末装置」の章を参照してください。

  • 拡張モードが必要であることを TERM 環境変数で指定している (TERM に -w 付きの値を設定している) 場合は、拡張モードへの切り替えを試みると -w が二重に付加されます (-w-w)。その結果、端末がダブル拡張モードをサポートしており、同モード用のエントリが terminfo データベースに登録されていない限り、拡張モードへの切り替えは失敗します。

このルーチンは正常終了すると 0 を返し、エラーでゼロ以外を返します。エラーが検出された場合は、次のいずれかの値が返されます。

1 terminfo ファイルが見つからない (またはアクセスできない/破損している) かメモリが不足している。
2 terminfo ファイル内に 1 つ以上の必要なエントリが存在しない。
3 必要なコードが使用環境でサポートされていない。

相当する COBOL 構文:

call "cobtermmode" using mode 

例:

次のコード例は、端末を拡張モードに切り替えて短いメッセージを表示し、キーボードから文字が入力されるまで待機します。いずれかのキーが押されると、ただちに端末を標準モードに戻します。

cobuns8_t mode_on=1, mode_off=0;

if (cobtermmode(&mode_on) == 0)
{
    /* Display some text over beyond column 80 to demo */
    /* wide mode */
    cobmove(10, 100);
    cobprintf("Line 10, Column 100");
    cobgetch();
    /* Wait for a key press */
    
    cobtermmode(&mode_off);
    /* Back into standard mode */
}