API زبان C برای Curses

curses یک رابط C کوچک را برای ماژول‌های توسعه‌ای در اختیار قرار می‌دهد. مصرف‌کنندگان باید پرونده‌ی سرآیند py_curses.h (که به‌طور پیش‌فرض توسط Python.h گنجانده نمی‌شود) را گنجانده باشند و import_curses() باید، معمولاً به‌عنوان بخشی از تابع مقداردهی اولیه ماژول، برای پر کردن PyCurses_API فراخوانی شود.

هشدار

نه API زبان C و نه ماژول curses پایتون خالص با زیرمفسرها سازگار است.

import_curses()

API سی curses را ایمپورت می‌کند. این ماکرو برای فراخوانی به نقطه‌ویرگول نیاز ندارد.

در صورت موفقیت، اشاره‌گر PyCurses_API را پر می‌کند.

در صورت شکست، مقدار PyCurses_API را برابر NULL قرار دهید و یک استثنا تنظیم کنید. فراخواننده باید از طریق PyErr_Occurred() بررسی کند که آیا خطایی رخ داده است:

import_curses();  // نقطه‌ویرگول اختیاری است اما توصیه می‌شود
if (PyErr_Occurred()) { /* پاک‌سازی */ }
void **PyCurses_API

شیء تخصیص‌یافته به‌طور پویا که API زبان C ماژول curses را در بر دارد. این متغیر تنها پس از موفقیت 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)

اگر 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;
    }
}

داده‌های داخلی

اشیاء زیر توسط API زبان C ارائه شده‌اند، اما باید صرفاً داخلی در نظر گرفته شوند.

PyCurses_CAPSULE_NAME

نام کپسول curses برای ارسال به PyCapsule_Import().

فقط برای استفاده‌ی داخلی. به جای آن از import_curses استفاده کنید.