Curses C API

curses は拡張モジュール向けに小さな C インターフェースを公開しています。 利用する側は py_curses.h ヘッダをインクルードする必要があります (このヘッダは Python.h にはデフォルトで含まれません)。 また、通常はモジュールの初期化関数内で import_curses() を呼び出して PyCurses_API を設定する必要があります。

警告

C API も Python レベルの curses モジュールも、サブインタープリタに対応していません。

import_curses()

curses C API をインポートします。 このマクロの呼び出しにはセミコロンは必要ありません。

成功した場合は PyCurses_API ポインタを設定します。

失敗した場合は PyCurses_API を NULL に設定し、例外を設定します。 呼び出し側は PyErr_Occurred() でエラーの有無を確認する必要があります。

import_curses();  // セミコロンは省略可能だが推奨
if (PyErr_Occurred()) { /* 後片付け */ }
void **PyCurses_API

curses C API を格納する、動的に割り当てられたオブジェクトです。 この変数は import_curses が成功した後でのみ利用できます。

PyCurses_API[0] は PyCursesWindow_Type に対応します。

PyCurses_API[1]、PyCurses_API[2]、PyCurses_API[3] は、int (*)(void) 型の判定関数へのポインタです。

これらの判定関数は、それぞれ curses.setupterm()、curses.initscr()、curses.start_color() が呼び出されたかどうかを返します。

便利なマクロ PyCursesSetupTermCalled、PyCursesInitialised、PyCursesInitialisedColor も参照してください。

注釈

この構造体のエントリー数は変更されることがあります。 新しいフィールドが利用できるかどうかを確認するには、PyCurses_API_pointers の使用を検討してください。

PyCurses_API_pointers

PyCurses_API 内のアクセス可能なフィールドの数 (4)。 新しいフィールドが追加されるたびに増えます。

PyTypeObject PyCursesWindow_Type

curses.window に対応する ヒープ型。

int PyCursesWindow_Check(PyObject *op)

op が curses.window のインスタンスの場合は真を返し、それ以外の場合は偽を返します。

以下は C の文に展開される便利なマクロです。 特に、macro; または macro の形でのみ使え、macro() や macro(); では使えません。

PyCursesSetupTermCalled

curses.setupterm() が呼び出されたかどうかを確認するマクロ。

マクロの展開結果は、おおむね次と同等です。

{
    typedef int (*predicate_t)(void);
    predicate_t was_setupterm_called = (predicate_t)PyCurses_API[1];
    if (!was_setupterm_called()) {
        return NULL;
    }
}
PyCursesInitialised

curses.initscr() が呼び出されたかどうかを確認するマクロ。

マクロの展開結果は、おおむね次と同等です。

{
    typedef int (*predicate_t)(void);
    predicate_t was_initscr_called = (predicate_t)PyCurses_API[2];
    if (!was_initscr_called()) {
        return NULL;
    }
}
PyCursesInitialisedColor

curses.start_color() が呼び出されたかどうかを確認するマクロ。

マクロの展開結果は、おおむね次と同等です。

{
    typedef int (*predicate_t)(void);
    predicate_t was_start_color_called = (predicate_t)PyCurses_API[3];
    if (!was_start_color_called()) {
        return NULL;
    }
}

内部データ

以下のオブジェクトは C API で公開されていますが、内部専用と考えてください。

PyCurses_CAPSULE_NAME

PyCapsule_Import() に渡す curses カプセルの名前。

内部専用です。 代わりに import_curses を使ってください。