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