Документация Python неофициальный перевод

C API для cursesCurses 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

Количество доступных полей (4) в PyCurses_API. Это число увеличивается при добавлении новых полей.

PyTypeObject PyCursesWindow_Type

тип-куча, соответствующий curses.window.

int PyCursesWindow_Check(PyObject *op)

Возвращает true, если op является экземпляром curses.window, и false в противном случае.

Следующие макросы являются вспомогательными макросами, разворачивающимися в 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;
    }
}

Внутренние данные Internal data

Следующие объекты предоставляются C API, но предназначены только для внутреннего использования.

PyCurses_CAPSULE_NAME

Имя капсулы curses, передаваемое в PyCapsule_Import().

Только для внутреннего использования. Вместо этого используйте import_curses.