Home | History | Annotate | Download | only in Include
      1 
      2 #ifndef Py_CURSES_H
      3 #define Py_CURSES_H
      4 
      5 #ifdef __APPLE__
      6 /*
      7 ** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards
      8 ** against multiple definition of wchar_t.
      9 */
     10 #ifdef	_BSD_WCHAR_T_DEFINED_
     11 #define _WCHAR_T
     12 #endif
     13 
     14 /* the following define is necessary for OS X 10.6; without it, the
     15    Apple-supplied ncurses.h sets NCURSES_OPAQUE to 1, and then Python
     16    can't get at the WINDOW flags field. */
     17 #define NCURSES_OPAQUE 0
     18 #endif /* __APPLE__ */
     19 
     20 #ifdef __FreeBSD__
     21 /*
     22 ** On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards
     23 ** against multiple definition of wchar_t and wint_t.
     24 */
     25 #ifdef	_XOPEN_SOURCE_EXTENDED
     26 #ifndef __FreeBSD_version
     27 #include <osreldate.h>
     28 #endif
     29 #if __FreeBSD_version >= 500000
     30 #ifndef __wchar_t
     31 #define __wchar_t
     32 #endif
     33 #ifndef __wint_t
     34 #define __wint_t
     35 #endif
     36 #else
     37 #ifndef _WCHAR_T
     38 #define _WCHAR_T
     39 #endif
     40 #ifndef _WINT_T
     41 #define _WINT_T
     42 #endif
     43 #endif
     44 #endif
     45 #endif
     46 
     47 #ifdef HAVE_NCURSES_H
     48 #include <ncurses.h>
     49 #else
     50 #include <curses.h>
     51 #ifdef HAVE_TERM_H
     52 /* for tigetstr, which is not declared in SysV curses */
     53 #include <term.h>
     54 #endif
     55 #endif
     56 
     57 #ifdef HAVE_NCURSES_H
     58 /* configure was checking <curses.h>, but we will
     59    use <ncurses.h>, which has all these features. */
     60 #ifndef WINDOW_HAS_FLAGS
     61 #define WINDOW_HAS_FLAGS 1
     62 #endif
     63 #ifndef MVWDELCH_IS_EXPRESSION
     64 #define MVWDELCH_IS_EXPRESSION 1
     65 #endif
     66 #endif
     67 
     68 #ifdef __cplusplus
     69 extern "C" {
     70 #endif
     71 
     72 #define PyCurses_API_pointers 4
     73 
     74 /* Type declarations */
     75 
     76 typedef struct {
     77 	PyObject_HEAD
     78 	WINDOW *win;
     79 	char *encoding;
     80 } PyCursesWindowObject;
     81 
     82 #define PyCursesWindow_Check(v)	 (Py_TYPE(v) == &PyCursesWindow_Type)
     83 
     84 #define PyCurses_CAPSULE_NAME "_curses._C_API"
     85 
     86 
     87 #ifdef CURSES_MODULE
     88 /* This section is used when compiling _cursesmodule.c */
     89 
     90 #else
     91 /* This section is used in modules that use the _cursesmodule API */
     92 
     93 static void **PyCurses_API;
     94 
     95 #define PyCursesWindow_Type (*(PyTypeObject *) PyCurses_API[0])
     96 #define PyCursesSetupTermCalled  {if (! ((int (*)(void))PyCurses_API[1]) () ) return NULL;}
     97 #define PyCursesInitialised      {if (! ((int (*)(void))PyCurses_API[2]) () ) return NULL;}
     98 #define PyCursesInitialisedColor {if (! ((int (*)(void))PyCurses_API[3]) () ) return NULL;}
     99 
    100 #define import_curses() \
    101     PyCurses_API = (void **)PyCapsule_Import(PyCurses_CAPSULE_NAME, 1);
    102 
    103 #endif
    104 
    105 /* general error messages */
    106 static const char catchall_ERR[]  = "curses function returned ERR";
    107 static const char catchall_NULL[] = "curses function returned NULL";
    108 
    109 /* Function Prototype Macros - They are ugly but very, very useful. ;-)
    110 
    111    X - function name
    112    TYPE - parameter Type
    113    ERGSTR - format string for construction of the return value
    114    PARSESTR - format string for argument parsing
    115    */
    116 
    117 #define NoArgNoReturnFunction(X) \
    118 static PyObject *PyCurses_ ## X (PyObject *self) \
    119 { \
    120   PyCursesInitialised \
    121   return PyCursesCheckERR(X(), # X); }
    122 
    123 #define NoArgOrFlagNoReturnFunction(X) \
    124 static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
    125 { \
    126   int flag = 0; \
    127   PyCursesInitialised \
    128   switch(PyTuple_Size(args)) { \
    129   case 0: \
    130     return PyCursesCheckERR(X(), # X); \
    131   case 1: \
    132     if (!PyArg_ParseTuple(args, "i;True(1) or False(0)", &flag)) return NULL; \
    133     if (flag) return PyCursesCheckERR(X(), # X); \
    134     else return PyCursesCheckERR(no ## X (), # X); \
    135   default: \
    136     PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \
    137     return NULL; } }
    138 
    139 #define NoArgReturnIntFunction(X) \
    140 static PyObject *PyCurses_ ## X (PyObject *self) \
    141 { \
    142  PyCursesInitialised \
    143  return PyLong_FromLong((long) X()); }
    144 
    145 
    146 #define NoArgReturnStringFunction(X) \
    147 static PyObject *PyCurses_ ## X (PyObject *self) \
    148 { \
    149   PyCursesInitialised \
    150   return PyBytes_FromString(X()); }
    151 
    152 #define NoArgTrueFalseFunction(X) \
    153 static PyObject *PyCurses_ ## X (PyObject *self) \
    154 { \
    155   PyCursesInitialised \
    156   if (X () == FALSE) { \
    157     Py_INCREF(Py_False); \
    158     return Py_False; \
    159   } \
    160   Py_INCREF(Py_True); \
    161   return Py_True; }
    162 
    163 #define NoArgNoReturnVoidFunction(X) \
    164 static PyObject *PyCurses_ ## X (PyObject *self) \
    165 { \
    166   PyCursesInitialised \
    167   X(); \
    168   Py_INCREF(Py_None); \
    169   return Py_None; }
    170 
    171 #ifdef __cplusplus
    172 }
    173 #endif
    174 
    175 #endif /* !defined(Py_CURSES_H) */
    176 
    177 
    178