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" を使ってください。
