Chris@87: Chris@87: #ifndef Py_CURSES_H Chris@87: #define Py_CURSES_H Chris@87: Chris@87: #ifdef __APPLE__ Chris@87: /* Chris@87: ** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards Chris@87: ** against multiple definition of wchar_t. Chris@87: */ Chris@87: #ifdef _BSD_WCHAR_T_DEFINED_ Chris@87: #define _WCHAR_T Chris@87: #endif Chris@87: Chris@87: /* the following define is necessary for OS X 10.6; without it, the Chris@87: Apple-supplied ncurses.h sets NCURSES_OPAQUE to 1, and then Python Chris@87: can't get at the WINDOW flags field. */ Chris@87: #define NCURSES_OPAQUE 0 Chris@87: #endif /* __APPLE__ */ Chris@87: Chris@87: #ifdef __FreeBSD__ Chris@87: /* Chris@87: ** On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards Chris@87: ** against multiple definition of wchar_t and wint_t. Chris@87: */ Chris@87: #ifdef _XOPEN_SOURCE_EXTENDED Chris@87: #ifndef __FreeBSD_version Chris@87: #include Chris@87: #endif Chris@87: #if __FreeBSD_version >= 500000 Chris@87: #ifndef __wchar_t Chris@87: #define __wchar_t Chris@87: #endif Chris@87: #ifndef __wint_t Chris@87: #define __wint_t Chris@87: #endif Chris@87: #else Chris@87: #ifndef _WCHAR_T Chris@87: #define _WCHAR_T Chris@87: #endif Chris@87: #ifndef _WINT_T Chris@87: #define _WINT_T Chris@87: #endif Chris@87: #endif Chris@87: #endif Chris@87: #endif Chris@87: Chris@87: #ifdef HAVE_NCURSES_H Chris@87: #include Chris@87: #else Chris@87: #include Chris@87: #ifdef HAVE_TERM_H Chris@87: /* for tigetstr, which is not declared in SysV curses */ Chris@87: #include Chris@87: #endif Chris@87: #endif Chris@87: Chris@87: #ifdef HAVE_NCURSES_H Chris@87: /* configure was checking , but we will Chris@87: use , which has all these features. */ Chris@87: #ifndef WINDOW_HAS_FLAGS Chris@87: #define WINDOW_HAS_FLAGS 1 Chris@87: #endif Chris@87: #ifndef MVWDELCH_IS_EXPRESSION Chris@87: #define MVWDELCH_IS_EXPRESSION 1 Chris@87: #endif Chris@87: #endif Chris@87: Chris@87: #ifdef __cplusplus Chris@87: extern "C" { Chris@87: #endif Chris@87: Chris@87: #define PyCurses_API_pointers 4 Chris@87: Chris@87: /* Type declarations */ Chris@87: Chris@87: typedef struct { Chris@87: PyObject_HEAD Chris@87: WINDOW *win; Chris@87: } PyCursesWindowObject; Chris@87: Chris@87: #define PyCursesWindow_Check(v) (Py_TYPE(v) == &PyCursesWindow_Type) Chris@87: Chris@87: #define PyCurses_CAPSULE_NAME "_curses._C_API" Chris@87: Chris@87: Chris@87: #ifdef CURSES_MODULE Chris@87: /* This section is used when compiling _cursesmodule.c */ Chris@87: Chris@87: #else Chris@87: /* This section is used in modules that use the _cursesmodule API */ Chris@87: Chris@87: static void **PyCurses_API; Chris@87: Chris@87: #define PyCursesWindow_Type (*(PyTypeObject *) PyCurses_API[0]) Chris@87: #define PyCursesSetupTermCalled {if (! ((int (*)(void))PyCurses_API[1]) () ) return NULL;} Chris@87: #define PyCursesInitialised {if (! ((int (*)(void))PyCurses_API[2]) () ) return NULL;} Chris@87: #define PyCursesInitialisedColor {if (! ((int (*)(void))PyCurses_API[3]) () ) return NULL;} Chris@87: Chris@87: #define import_curses() \ Chris@87: PyCurses_API = (void **)PyCapsule_Import(PyCurses_CAPSULE_NAME, 1); Chris@87: Chris@87: #endif Chris@87: Chris@87: /* general error messages */ Chris@87: static char *catchall_ERR = "curses function returned ERR"; Chris@87: static char *catchall_NULL = "curses function returned NULL"; Chris@87: Chris@87: /* Function Prototype Macros - They are ugly but very, very useful. ;-) Chris@87: Chris@87: X - function name Chris@87: TYPE - parameter Type Chris@87: ERGSTR - format string for construction of the return value Chris@87: PARSESTR - format string for argument parsing Chris@87: */ Chris@87: Chris@87: #define NoArgNoReturnFunction(X) \ Chris@87: static PyObject *PyCurses_ ## X (PyObject *self) \ Chris@87: { \ Chris@87: PyCursesInitialised \ Chris@87: return PyCursesCheckERR(X(), # X); } Chris@87: Chris@87: #define NoArgOrFlagNoReturnFunction(X) \ Chris@87: static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \ Chris@87: { \ Chris@87: int flag = 0; \ Chris@87: PyCursesInitialised \ Chris@87: switch(PyTuple_Size(args)) { \ Chris@87: case 0: \ Chris@87: return PyCursesCheckERR(X(), # X); \ Chris@87: case 1: \ Chris@87: if (!PyArg_ParseTuple(args, "i;True(1) or False(0)", &flag)) return NULL; \ Chris@87: if (flag) return PyCursesCheckERR(X(), # X); \ Chris@87: else return PyCursesCheckERR(no ## X (), # X); \ Chris@87: default: \ Chris@87: PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \ Chris@87: return NULL; } } Chris@87: Chris@87: #define NoArgReturnIntFunction(X) \ Chris@87: static PyObject *PyCurses_ ## X (PyObject *self) \ Chris@87: { \ Chris@87: PyCursesInitialised \ Chris@87: return PyInt_FromLong((long) X()); } Chris@87: Chris@87: Chris@87: #define NoArgReturnStringFunction(X) \ Chris@87: static PyObject *PyCurses_ ## X (PyObject *self) \ Chris@87: { \ Chris@87: PyCursesInitialised \ Chris@87: return PyString_FromString(X()); } Chris@87: Chris@87: #define NoArgTrueFalseFunction(X) \ Chris@87: static PyObject *PyCurses_ ## X (PyObject *self) \ Chris@87: { \ Chris@87: PyCursesInitialised \ Chris@87: if (X () == FALSE) { \ Chris@87: Py_INCREF(Py_False); \ Chris@87: return Py_False; \ Chris@87: } \ Chris@87: Py_INCREF(Py_True); \ Chris@87: return Py_True; } Chris@87: Chris@87: #define NoArgNoReturnVoidFunction(X) \ Chris@87: static PyObject *PyCurses_ ## X (PyObject *self) \ Chris@87: { \ Chris@87: PyCursesInitialised \ Chris@87: X(); \ Chris@87: Py_INCREF(Py_None); \ Chris@87: return Py_None; } Chris@87: Chris@87: #ifdef __cplusplus Chris@87: } Chris@87: #endif Chris@87: Chris@87: #endif /* !defined(Py_CURSES_H) */ Chris@87: Chris@87: