17db96d56Sopenharmony_ci
27db96d56Sopenharmony_ci#ifndef Py_CURSES_H
37db96d56Sopenharmony_ci#define Py_CURSES_H
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ci#ifdef __APPLE__
67db96d56Sopenharmony_ci/*
77db96d56Sopenharmony_ci** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards
87db96d56Sopenharmony_ci** against multiple definition of wchar_t.
97db96d56Sopenharmony_ci*/
107db96d56Sopenharmony_ci#ifdef _BSD_WCHAR_T_DEFINED_
117db96d56Sopenharmony_ci#define _WCHAR_T
127db96d56Sopenharmony_ci#endif
137db96d56Sopenharmony_ci#endif /* __APPLE__ */
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci/* On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards
167db96d56Sopenharmony_ci   against multiple definition of wchar_t and wint_t. */
177db96d56Sopenharmony_ci#if defined(__FreeBSD__) && defined(_XOPEN_SOURCE_EXTENDED)
187db96d56Sopenharmony_ci# ifndef __wchar_t
197db96d56Sopenharmony_ci#   define __wchar_t
207db96d56Sopenharmony_ci# endif
217db96d56Sopenharmony_ci# ifndef __wint_t
227db96d56Sopenharmony_ci#   define __wint_t
237db96d56Sopenharmony_ci# endif
247db96d56Sopenharmony_ci#endif
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci#if !defined(HAVE_CURSES_IS_PAD) && defined(WINDOW_HAS_FLAGS)
277db96d56Sopenharmony_ci/* The following definition is necessary for ncurses 5.7; without it,
287db96d56Sopenharmony_ci   some of [n]curses.h set NCURSES_OPAQUE to 1, and then Python
297db96d56Sopenharmony_ci   can't get at the WINDOW flags field. */
307db96d56Sopenharmony_ci#define NCURSES_OPAQUE 0
317db96d56Sopenharmony_ci#endif
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci#ifdef HAVE_NCURSES_H
347db96d56Sopenharmony_ci#include <ncurses.h>
357db96d56Sopenharmony_ci#else
367db96d56Sopenharmony_ci#include <curses.h>
377db96d56Sopenharmony_ci#endif
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci#ifdef HAVE_NCURSES_H
407db96d56Sopenharmony_ci/* configure was checking <curses.h>, but we will
417db96d56Sopenharmony_ci   use <ncurses.h>, which has some or all these features. */
427db96d56Sopenharmony_ci#if !defined(WINDOW_HAS_FLAGS) && !(NCURSES_OPAQUE+0)
437db96d56Sopenharmony_ci#define WINDOW_HAS_FLAGS 1
447db96d56Sopenharmony_ci#endif
457db96d56Sopenharmony_ci#if !defined(HAVE_CURSES_IS_PAD) && NCURSES_VERSION_PATCH+0 >= 20090906
467db96d56Sopenharmony_ci#define HAVE_CURSES_IS_PAD 1
477db96d56Sopenharmony_ci#endif
487db96d56Sopenharmony_ci#ifndef MVWDELCH_IS_EXPRESSION
497db96d56Sopenharmony_ci#define MVWDELCH_IS_EXPRESSION 1
507db96d56Sopenharmony_ci#endif
517db96d56Sopenharmony_ci#endif
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci#ifdef __cplusplus
547db96d56Sopenharmony_ciextern "C" {
557db96d56Sopenharmony_ci#endif
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci#define PyCurses_API_pointers 4
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci/* Type declarations */
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_citypedef struct {
627db96d56Sopenharmony_ci    PyObject_HEAD
637db96d56Sopenharmony_ci    WINDOW *win;
647db96d56Sopenharmony_ci    char *encoding;
657db96d56Sopenharmony_ci} PyCursesWindowObject;
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci#define PyCursesWindow_Check(v) Py_IS_TYPE(v, &PyCursesWindow_Type)
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci#define PyCurses_CAPSULE_NAME "_curses._C_API"
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci#ifdef CURSES_MODULE
737db96d56Sopenharmony_ci/* This section is used when compiling _cursesmodule.c */
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci#else
767db96d56Sopenharmony_ci/* This section is used in modules that use the _cursesmodule API */
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_cistatic void **PyCurses_API;
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci#define PyCursesWindow_Type (*_PyType_CAST(PyCurses_API[0]))
817db96d56Sopenharmony_ci#define PyCursesSetupTermCalled  {if (! ((int (*)(void))PyCurses_API[1]) () ) return NULL;}
827db96d56Sopenharmony_ci#define PyCursesInitialised      {if (! ((int (*)(void))PyCurses_API[2]) () ) return NULL;}
837db96d56Sopenharmony_ci#define PyCursesInitialisedColor {if (! ((int (*)(void))PyCurses_API[3]) () ) return NULL;}
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci#define import_curses() \
867db96d56Sopenharmony_ci    PyCurses_API = (void **)PyCapsule_Import(PyCurses_CAPSULE_NAME, 1);
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci#endif
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci/* general error messages */
917db96d56Sopenharmony_cistatic const char catchall_ERR[]  = "curses function returned ERR";
927db96d56Sopenharmony_cistatic const char catchall_NULL[] = "curses function returned NULL";
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci#ifdef __cplusplus
957db96d56Sopenharmony_ci}
967db96d56Sopenharmony_ci#endif
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci#endif /* !defined(Py_CURSES_H) */
997db96d56Sopenharmony_ci
100