]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - include/curses.h.in
ncurses 6.0 - patch 20170617
[ncurses.git] / include / curses.h.in
index 43e474ba449b8af36170d1dfec37f838d4444791..fd62181e75accef28fd0574971d3172b1efd3ef7 100644 (file)
@@ -1,27 +1,42 @@
-/***************************************************************************
-*                            COPYRIGHT NOTICE                              *
-****************************************************************************
-*                ncurses is copyright (C) 1992-1995                        *
-*                          Zeyd M. Ben-Halim                               *
-*                          zmbenhal@netcom.com                             *
-*                          Eric S. Raymond                                 *
-*                          esr@snark.thyrsus.com                           *
-*                                                                          *
-*        Permission is hereby granted to reproduce and distribute ncurses  *
-*        by any means and for any fee, whether alone or as part of a       *
-*        larger distribution, in source or in binary form, PROVIDED        *
-*        this notice is included with any such distribution, and is not    *
-*        removed from any of its header files. Mention of ncurses in any   *
-*        applications linked with it is highly appreciated.                *
-*                                                                          *
-*        ncurses comes AS IS with no warranty, implied or expressed.       *
-*                                                                          *
-***************************************************************************/
-
-/* $Id: curses.h.in,v 1.44 1997/04/20 01:32:08 tom Exp $ */
+/****************************************************************************
+ * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc.              *
+ *                                                                          *
+ * Permission is hereby granted, free of charge, to any person obtaining a  *
+ * copy of this software and associated documentation files (the            *
+ * "Software"), to deal in the Software without restriction, including      *
+ * without limitation the rights to use, copy, modify, merge, publish,      *
+ * distribute, distribute with modifications, sublicense, and/or sell       *
+ * copies of the Software, and to permit persons to whom the Software is    *
+ * furnished to do so, subject to the following conditions:                 *
+ *                                                                          *
+ * The above copyright notice and this permission notice shall be included  *
+ * in all copies or substantial portions of the Software.                   *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
+ *                                                                          *
+ * Except as contained in this notice, the name(s) of the above copyright   *
+ * holders shall not be used in advertising or otherwise to promote the     *
+ * sale, use or other dealings in this Software without prior written       *
+ * authorization.                                                           *
+ ****************************************************************************/
+
+/****************************************************************************
+ *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
+ *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
+ *     and: Thomas E. Dickey                        1996-on                 *
+ ****************************************************************************/
+
+/* $Id: curses.h.in,v 1.255 2017/04/01 22:15:00 tom Exp $ */
 
 #ifndef __NCURSES_H
 #define __NCURSES_H
+
 #define CURSES 1
 #define CURSES_H 1
 
 #undef  NCURSES_VERSION
 #define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@"
 
-#ifdef NCURSES_NOMACROS
-#define NCURSES_ATTR_T attr_t
+/*
+ * Identify the mouse encoding version.
+ */
+#define NCURSES_MOUSE_VERSION @NCURSES_MOUSE_VERSION@
+
+/*
+ * Definitions to facilitate DLL's.
+ */
+#include <ncurses_dll.h>
+
+#if @HAVE_STDINT_H@
+#include <stdint.h>
+#endif
+
+/*
+ * User-definable tweak to disable the include of <stdbool.h>.
+ */
+#ifndef NCURSES_ENABLE_STDBOOL_H
+#define NCURSES_ENABLE_STDBOOL_H @cf_cv_header_stdbool_h@
 #endif
 
+/*
+ * NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses
+ * configured using --disable-macros.
+ */
 #ifndef NCURSES_ATTR_T
 #define NCURSES_ATTR_T int
 #endif
 
-#ifndef NCURSES_CONST
-#define NCURSES_CONST /* nothing */
+/*
+ * Expands to 'const' if ncurses is configured using --enable-const.  Note that
+ * doing so makes it incompatible with other implementations of X/Open Curses.
+ */
+#undef  NCURSES_CONST
+#define NCURSES_CONST @NCURSES_CONST@
+
+#undef NCURSES_INLINE
+#define NCURSES_INLINE @NCURSES_INLINE@
+
+/*
+ * The standard type used for color values, and for color-pairs.  The latter
+ * allows the curses library to enumerate the combinations of foreground and
+ * background colors used by an application, and is normally the product of the
+ * total foreground and background colors.
+ *
+ * X/Open uses "short" for both of these types, ultimately because they are
+ * numbers from the SVr4 terminal database, which uses 16-bit signed values.
+ */
+#undef NCURSES_COLOR_T
+#define        NCURSES_COLOR_T short
+
+#undef NCURSES_PAIRS_T
+#define        NCURSES_PAIRS_T short
+
+/*
+ * Definitions used to make WINDOW and similar structs opaque.
+ */
+#ifndef NCURSES_INTERNALS
+#define NCURSES_OPAQUE       @NCURSES_OPAQUE@
+#define NCURSES_OPAQUE_FORM  @NCURSES_OPAQUE_FORM@
+#define NCURSES_OPAQUE_MENU  @NCURSES_OPAQUE_MENU@
+#define NCURSES_OPAQUE_PANEL @NCURSES_OPAQUE_PANEL@
+#endif
+
+/*
+ * Definition used to optionally suppress wattr* macros to help with the
+ * transition from ncurses5 to ncurses6 by allowing the header files to
+ * be shared across development packages for ncursesw in both ABIs.
+ */
+#ifndef NCURSES_WATTR_MACROS
+#define NCURSES_WATTR_MACROS @NCURSES_WATTR_MACROS@
 #endif
 
-#ifndef _UNCTRL_H
-typedef unsigned long  chtype;
+/*
+ * The reentrant code relies on the opaque setting, but adds features.
+ */
+#ifndef NCURSES_REENTRANT
+#define NCURSES_REENTRANT @cf_cv_enable_reentrant@
 #endif
 
+/*
+ * Control whether bindings for interop support are added.
+ */
+#undef NCURSES_INTEROP_FUNCS
+#define        NCURSES_INTEROP_FUNCS @NCURSES_INTEROP_FUNCS@
+
+/*
+ * The internal type used for window dimensions.
+ */
+#undef NCURSES_SIZE_T
+#define        NCURSES_SIZE_T @NCURSES_SIZE_T@
+
+/*
+ * Control whether tparm() supports varargs or fixed-parameter list.
+ */
+#undef NCURSES_TPARM_VARARGS
+#define NCURSES_TPARM_VARARGS @NCURSES_TPARM_VARARGS@
+
+/*
+ * Control type used for tparm's arguments.  While X/Open equates long and
+ * char* values, this is not always workable for 64-bit platforms.
+ */
+#undef NCURSES_TPARM_ARG
+#define NCURSES_TPARM_ARG @NCURSES_TPARM_ARG@
+
+/*
+ * Control whether ncurses uses wcwidth() for checking width of line-drawing
+ * characters.
+ */
+#undef NCURSES_WCWIDTH_GRAPHICS
+#define NCURSES_WCWIDTH_GRAPHICS @NCURSES_WCWIDTH_GRAPHICS@
+
+/*
+ * NCURSES_CH_T is used in building the library, but not used otherwise in
+ * this header file, since that would make the normal/wide-character versions
+ * of the header incompatible.
+ */
+#undef NCURSES_CH_T
+#define NCURSES_CH_T @NCURSES_CH_T@
+
+#if @cf_cv_enable_lp64@ && defined(_LP64)
+typedef unsigned chtype;
+typedef unsigned mmask_t;
+#else
+typedef @cf_cv_typeof_chtype@ chtype;
+typedef @cf_cv_typeof_mmask_t@ mmask_t;
+#endif
+
+/*
+ * We need FILE, etc.  Include this before checking any feature symbols.
+ */
 #include <stdio.h>
-#include <unctrl.h>
+
+/*
+ * With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
+ * conflicting) when _XOPEN_SOURCE is 500 or greater.  If NCURSES_WIDECHAR is
+ * not already defined, e.g., if the platform relies upon nonstandard feature
+ * test macros, define it at this point if the standard feature test macros
+ * indicate that it should be defined.
+ */
+#ifndef NCURSES_WIDECHAR
+#if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
+#define NCURSES_WIDECHAR 1
+#else
+#define NCURSES_WIDECHAR 0
+#endif
+#endif /* NCURSES_WIDECHAR */
+
 #include <stdarg.h>    /* we need va_list */
-#ifdef _XOPEN_SOURCE_EXTENDED
+#if NCURSES_WIDECHAR
 #include <stddef.h>    /* we want wchar_t */
-#endif /* _XOPEN_SOURCE_EXTENDED */
+#endif
 
-/* XSI and SVr4 specify that curses implements 'bool'.  However, C++ may also
+/* X/Open and SVr4 specify that curses implements 'bool'.  However, C++ may also
  * implement it.  If so, we must use the C++ compiler's type to avoid conflict
  * with other interfaces.
  *
- * To simplify use with/without the configuration script, we define the symbols
- * CXX_BUILTIN_BOOL and CXX_TYPE_OF_BOOL; they're edited by the configure
- * script.
+ * A further complication is that <stdbool.h> may declare 'bool' to be a
+ * different type, such as an enum which is not necessarily compatible with
+ * C++.  If we have <stdbool.h>, make 'bool' a macro, so users may #undef it.
+ * Otherwise, let it remain a typedef to avoid conflicts with other #define's.
+ * In either case, make a typedef for NCURSES_BOOL which can be used if needed
+ * from either C or C++.
  */
 
 #undef TRUE
+#define TRUE    1
+
 #undef FALSE
-#define CXX_BUILTIN_BOOL @nc_cv_builtin_bool@
-#define CXX_TYPE_OF_BOOL @nc_cv_type_of_bool@
+#define FALSE   0
+
+typedef @cf_cv_type_of_bool@ NCURSES_BOOL;
+
+#if @USE_CXX_BOOL@     /* __cplusplus, etc. */
 
-#if defined(__cplusplus) && CXX_BUILTIN_BOOL
-#define TRUE    ((CXX_TYPE_OF_BOOL)true)
-#define FALSE   ((CXX_TYPE_OF_BOOL)false)
+/* use the C++ compiler's bool type */
+#define NCURSES_BOOL bool
+
+#else                  /* c89, c99, etc. */
+
+#if NCURSES_ENABLE_STDBOOL_H
+#include <stdbool.h>
+/* use whatever the C compiler decides bool really is */
+#define NCURSES_BOOL bool
 #else
-typedef CXX_TYPE_OF_BOOL bool;
-#define TRUE    ((bool)1)
-#define FALSE   ((bool)0)
+/* there is no predefined bool - use our own */
+#undef bool
+#define bool NCURSES_BOOL
 #endif
 
+#endif /* !__cplusplus, etc. */
+
 #ifdef __cplusplus
 extern "C" {
+#define NCURSES_CAST(type,value) static_cast<type>(value)
+#else
+#define NCURSES_CAST(type,value) (type)(value)
 #endif
 
+#define NCURSES_OK_ADDR(p) (0 != NCURSES_CAST(const void *, (p)))
+
 /*
- * XSI attributes.  In the ncurses implementation, they are identical to the
- * A_ attributes because attr_t is just an int.  The XSI Curses attr_* and
- * wattr_* entry points are all mapped to attr* and wattr* entry points.
+ * X/Open attributes.  In the ncurses implementation, they are identical to the
+ * A_ attributes.
  */
-#define WA_ATTRIBUTES  0xffffff00
-#define WA_NORMAL      0x00000000
-#define WA_STANDOUT    0x00010000
-#define WA_UNDERLINE   0x00020000
-#define WA_REVERSE     0x00040000
-#define WA_BLINK       0x00080000
-#define WA_DIM         0x00100000
-#define WA_BOLD                0x00200000
-#define WA_ALTCHARSET  0x00400000
-#define WA_INVIS       0x00800000
-#define WA_PROTECT     0x01000000
-#define WA_HORIZONTAL  0x02000000      /* XSI Curses attr -- not yet used */
-#define WA_LEFT                0x04000000      /* XSI Curses attr -- not yet used */
-#define WA_LOW         0x08000000      /* XSI Curses attr -- not yet used */
-#define WA_RIGHT       0x10000000      /* XSI Curses attr -- not yet used */
-#define WA_TOP         0x20000000      /* XSI Curses attr -- not yet used */
-#define WA_VERTICAL    0x40000000      /* XSI Curses attr -- not yet used */
+#define WA_ATTRIBUTES  A_ATTRIBUTES
+#define WA_NORMAL      A_NORMAL
+#define WA_STANDOUT    A_STANDOUT
+#define WA_UNDERLINE   A_UNDERLINE
+#define WA_REVERSE     A_REVERSE
+#define WA_BLINK       A_BLINK
+#define WA_DIM         A_DIM
+#define WA_BOLD                A_BOLD
+#define WA_ALTCHARSET  A_ALTCHARSET
+#define WA_INVIS       A_INVIS
+#define WA_PROTECT     A_PROTECT
+#define WA_HORIZONTAL  A_HORIZONTAL
+#define WA_LEFT                A_LEFT
+#define WA_LOW         A_LOW
+#define WA_RIGHT       A_RIGHT
+#define WA_TOP         A_TOP
+#define WA_VERTICAL    A_VERTICAL
+
+#if @NCURSES_EXT_FUNCS@
+#define WA_ITALIC      A_ITALIC        /* ncurses extension */
+#endif
 
 /* colors */
-extern int COLORS;
-extern int COLOR_PAIRS;
-
 #define COLOR_BLACK    0
 #define COLOR_RED      1
 #define COLOR_GREEN    2
@@ -122,47 +288,54 @@ extern int COLOR_PAIRS;
 
 /* line graphics */
 
-extern chtype acs_map[];
+#if @BROKEN_LINKER@ || NCURSES_REENTRANT
+NCURSES_WRAPPED_VAR(chtype*, acs_map);
+#define acs_map NCURSES_PUBLIC_VAR(acs_map())
+#else
+extern NCURSES_EXPORT_VAR(chtype) acs_map[];
+#endif
+
+#define NCURSES_ACS(c) (acs_map[NCURSES_CAST(unsigned char,(c))])
 
 /* VT100 symbols begin here */
-#define ACS_ULCORNER   (acs_map['l'])  /* upper left corner */
-#define ACS_LLCORNER   (acs_map['m'])  /* lower left corner */
-#define ACS_URCORNER   (acs_map['k'])  /* upper right corner */
-#define ACS_LRCORNER   (acs_map['j'])  /* lower right corner */
-#define ACS_LTEE       (acs_map['t'])  /* tee pointing right */
-#define ACS_RTEE       (acs_map['u'])  /* tee pointing left */
-#define ACS_BTEE       (acs_map['v'])  /* tee pointing up */
-#define ACS_TTEE       (acs_map['w'])  /* tee pointing down */
-#define ACS_HLINE      (acs_map['q'])  /* horizontal line */
-#define ACS_VLINE      (acs_map['x'])  /* vertical line */
-#define ACS_PLUS       (acs_map['n'])  /* large plus or crossover */
-#define ACS_S1         (acs_map['o'])  /* scan line 1 */
-#define ACS_S9         (acs_map['s'])  /* scan line 9 */
-#define ACS_DIAMOND    (acs_map['`'])  /* diamond */
-#define ACS_CKBOARD    (acs_map['a'])  /* checker board (stipple) */
-#define ACS_DEGREE     (acs_map['f'])  /* degree symbol */
-#define ACS_PLMINUS    (acs_map['g'])  /* plus/minus */
-#define ACS_BULLET     (acs_map['~'])  /* bullet */
+#define ACS_ULCORNER   NCURSES_ACS('l') /* upper left corner */
+#define ACS_LLCORNER   NCURSES_ACS('m') /* lower left corner */
+#define ACS_URCORNER   NCURSES_ACS('k') /* upper right corner */
+#define ACS_LRCORNER   NCURSES_ACS('j') /* lower right corner */
+#define ACS_LTEE       NCURSES_ACS('t') /* tee pointing right */
+#define ACS_RTEE       NCURSES_ACS('u') /* tee pointing left */
+#define ACS_BTEE       NCURSES_ACS('v') /* tee pointing up */
+#define ACS_TTEE       NCURSES_ACS('w') /* tee pointing down */
+#define ACS_HLINE      NCURSES_ACS('q') /* horizontal line */
+#define ACS_VLINE      NCURSES_ACS('x') /* vertical line */
+#define ACS_PLUS       NCURSES_ACS('n') /* large plus or crossover */
+#define ACS_S1         NCURSES_ACS('o') /* scan line 1 */
+#define ACS_S9         NCURSES_ACS('s') /* scan line 9 */
+#define ACS_DIAMOND    NCURSES_ACS('`') /* diamond */
+#define ACS_CKBOARD    NCURSES_ACS('a') /* checker board (stipple) */
+#define ACS_DEGREE     NCURSES_ACS('f') /* degree symbol */
+#define ACS_PLMINUS    NCURSES_ACS('g') /* plus/minus */
+#define ACS_BULLET     NCURSES_ACS('~') /* bullet */
 /* Teletype 5410v1 symbols begin here */
-#define ACS_LARROW     (acs_map[','])  /* arrow pointing left */
-#define ACS_RARROW     (acs_map['+'])  /* arrow pointing right */
-#define ACS_DARROW     (acs_map['.'])  /* arrow pointing down */
-#define ACS_UARROW     (acs_map['-'])  /* arrow pointing up */
-#define ACS_BOARD      (acs_map['h'])  /* board of squares */
-#define ACS_LANTERN    (acs_map['I'])  /* lantern symbol */
-#define ACS_BLOCK      (acs_map['0'])  /* solid square block */
+#define ACS_LARROW     NCURSES_ACS(',') /* arrow pointing left */
+#define ACS_RARROW     NCURSES_ACS('+') /* arrow pointing right */
+#define ACS_DARROW     NCURSES_ACS('.') /* arrow pointing down */
+#define ACS_UARROW     NCURSES_ACS('-') /* arrow pointing up */
+#define ACS_BOARD      NCURSES_ACS('h') /* board of squares */
+#define ACS_LANTERN    NCURSES_ACS('i') /* lantern symbol */
+#define ACS_BLOCK      NCURSES_ACS('0') /* solid square block */
 /*
  * These aren't documented, but a lot of System Vs have them anyway
  * (you can spot pprryyzz{{||}} in a lot of AT&T terminfo strings).
  * The ACS_names may not match AT&T's, our source didn't know them.
  */
-#define ACS_S3         (acs_map['p'])  /* scan line 3 */
-#define ACS_S7         (acs_map['r'])  /* scan line 7 */
-#define ACS_LEQUAL     (acs_map['y'])  /* less/equal */
-#define ACS_GEQUAL     (acs_map['z'])  /* greater/equal */
-#define ACS_PI         (acs_map['{'])  /* Pi */
-#define ACS_NEQUAL     (acs_map['|'])  /* not equal */
-#define ACS_STERLING   (acs_map['}'])  /* UK pound sign */
+#define ACS_S3         NCURSES_ACS('p') /* scan line 3 */
+#define ACS_S7         NCURSES_ACS('r') /* scan line 7 */
+#define ACS_LEQUAL     NCURSES_ACS('y') /* less/equal */
+#define ACS_GEQUAL     NCURSES_ACS('z') /* greater/equal */
+#define ACS_PI         NCURSES_ACS('{') /* Pi */
+#define ACS_NEQUAL     NCURSES_ACS('|') /* not equal */
+#define ACS_STERLING   NCURSES_ACS('}') /* UK pound sign */
 
 /*
  * Line drawing ACS names are of the form ACS_trbl, where t is the top, r
@@ -182,13 +355,11 @@ extern    chtype acs_map[];
 #define ACS_SBSB       ACS_VLINE
 #define ACS_SSSS       ACS_PLUS
 
-#if    !defined(ERR) || ((ERR) != -1)
+#undef ERR
 #define ERR     (-1)
-#endif
 
-#if    !defined(OK) || ((OK) != 0)
+#undef OK
 #define OK      (0)
-#endif
 
 /* values for the _flags member */
 #define _SUBWIN         0x01   /* is this a sub-window? */
@@ -216,29 +387,58 @@ typedef struct _win_st WINDOW;
 
 typedef        chtype  attr_t;         /* ...must be at least as wide as chtype */
 
-#ifdef _XOPEN_SOURCE_EXTENDED
-#ifndef _WCHAR_T
-typedef unsigned long wchar_t;
-#endif /* _WCHAR_T */
-#ifndef _WINT_T
-typedef long int wint_t;
-#endif /* _WINT_T */
+#if NCURSES_WIDECHAR
+
+#if @NCURSES_LIBUTF8@
+#ifdef mblen                   /* libutf8.h defines it w/o undefining first */
+#undef mblen
+#endif
+#include <libutf8.h>
+#endif
+
+#if @NEED_WCHAR_H@
+#include <wchar.h>             /* ...to get mbstate_t, etc. */
+#endif
+
+#if @NCURSES_WCHAR_T@
+typedef unsigned short wchar_t@NCURSES_OK_WCHAR_T@;
+#endif
+
+#if @NCURSES_WINT_T@
+typedef unsigned int wint_t@NCURSES_OK_WCHAR_T@;
+#endif
 
-#define CCHARW_MAX     5
+/*
+ * cchar_t stores an array of CCHARW_MAX wide characters.  The first is
+ * normally a spacing character.  The others are non-spacing.  If those
+ * (spacing and nonspacing) do not fill the array, a null L'\0' follows.
+ * Otherwise, a null is assumed to follow when extracting via getcchar().
+ */
+#define CCHARW_MAX     @NCURSES_CCHARW_MAX@
 typedef struct
 {
     attr_t     attr;
     wchar_t    chars[CCHARW_MAX];
+#if @NCURSES_EXT_COLORS@
+#undef NCURSES_EXT_COLORS
+#define NCURSES_EXT_COLORS @NCURSES_PATCH@
+    int                ext_color;      /* color pair, must be more than 16-bits */
+#endif
 }
 cchar_t;
-#endif /* _XOPEN_SOURCE_EXTENDED */
 
-struct _win_st {
-       short   _cury, _curx;   /* current cursor position */
+#endif /* NCURSES_WIDECHAR */
+
+#if !NCURSES_OPAQUE
+struct ldat;
+
+struct _win_st
+{
+       NCURSES_SIZE_T _cury, _curx; /* current cursor position */
 
        /* window location and size */
-       short   _maxy, _maxx;   /* maximums of x and y, NOT window size */
-       short   _begy, _begx;   /* screen coords of upper-left-hand corner */
+       NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
+       NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */
 
        short   _flags;         /* window state flags */
 
@@ -248,29 +448,21 @@ struct _win_st {
 
        /* option values set by user */
        bool    _notimeout;     /* no time out on function-key entry? */
-       bool    _clear;         /* consider all data in the window invalid? */
-       bool    _leaveok;       /* OK to not reset cursor on exit? */
-       bool    _scroll;        /* OK to scroll this window? */
-       bool    _idlok;         /* OK to use insert/delete line? */
-       bool    _idcok;         /* OK to use insert/delete char? */
+       bool    _clear;         /* consider all data in the window invalid? */
+       bool    _leaveok;       /* OK to not reset cursor on exit? */
+       bool    _scroll;        /* OK to scroll this window? */
+       bool    _idlok;         /* OK to use insert/delete line? */
+       bool    _idcok;         /* OK to use insert/delete char? */
        bool    _immed;         /* window in immed mode? (not yet used) */
        bool    _sync;          /* window in sync mode? */
-       bool    _use_keypad;    /* process function keys into KEY_ symbols? */
+       bool    _use_keypad;    /* process function keys into KEY_ symbols? */
        int     _delay;         /* 0 = nodelay, <0 = blocking, >0 = delay */
 
-       /* the actual line data */
-       struct ldat
-       {
-           chtype  *text;      /* text of the line */
-           short   firstchar;  /* first changed character in the line */
-           short   lastchar;   /* last changed character in the line */
-           short   oldindex;   /* index of the line at last update */
-       }
-       *_line;
+       struct ldat *_line;     /* the actual line data */
 
        /* global screen state */
-       short   _regtop;        /* top line of scrolling region */
-       short   _regbottom;     /* bottom line of scrolling region */
+       NCURSES_SIZE_T _regtop; /* top line of scrolling region */
+       NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */
 
        /* these are used only if this is a sub-window */
        int     _parx;          /* x coordinate of this window in parent */
@@ -280,54 +472,105 @@ struct _win_st {
        /* these are used only if this is a pad */
        struct pdat
        {
-           short _pad_y,      _pad_x;
-           short _pad_top,    _pad_left;
-           short _pad_bottom, _pad_right;
+           NCURSES_SIZE_T _pad_y,      _pad_x;
+           NCURSES_SIZE_T _pad_top,    _pad_left;
+           NCURSES_SIZE_T _pad_bottom, _pad_right;
        } _pad;
 
-       short   _yoffset;       /* real begy is _begy + _yoffset */
-};
+       NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
 
-extern WINDOW   *stdscr, *curscr, *newscr;
+#if NCURSES_WIDECHAR
+       cchar_t  _bkgrnd;       /* current background char/attribute pair */
+#if @NCURSES_EXT_COLORS@
+       int     _color;         /* current color-pair for non-space character */
+#endif
+#endif
+};
+#endif /* NCURSES_OPAQUE */
 
-extern int     LINES, COLS, TABSIZE;
+/*
+ * This is an extension to support events...
+ */
+#if @NCURSES_EXT_FUNCS@
+#ifdef NCURSES_WGETCH_EVENTS
+#if !defined(__BEOS__) || defined(__HAIKU__)
+   /* Fix _nc_timed_wait() on BEOS... */
+#  define NCURSES_EVENT_VERSION        1
+#endif /* !defined(__BEOS__) */
 
 /*
- * This global was an undocumented feature under AIX curses.
+ * Bits to set in _nc_event.data.flags
  */
-extern int ESCDELAY;   /* ESC expire time in milliseconds */
+#  define _NC_EVENT_TIMEOUT_MSEC       1
+#  define _NC_EVENT_FILE               2
+#  define _NC_EVENT_FILE_READABLE      2
+#  if 0                                        /* Not supported yet... */
+#    define _NC_EVENT_FILE_WRITABLE    4
+#    define _NC_EVENT_FILE_EXCEPTION   8
+#  endif
+
+typedef struct
+{
+    int type;
+    union
+    {
+       long timeout_msec;      /* _NC_EVENT_TIMEOUT_MSEC */
+       struct
+       {
+           unsigned int flags;
+           int fd;
+           unsigned int result;
+       } fev;                          /* _NC_EVENT_FILE */
+    } data;
+} _nc_event;
 
-/* non-XSI extensions (dickey@clark.net) */
-extern int resizeterm (int, int);
-extern int wresize (WINDOW *, int, int);
-extern int use_default_colors (void);
+typedef struct
+{
+    int count;
+    int result_flags;  /* _NC_EVENT_TIMEOUT_MSEC or _NC_EVENT_FILE_READABLE */
+    _nc_event *events[1];
+} _nc_eventlist;
+
+extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *);  /* experimental */
+extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *);/* experimental */
 
-extern char ttytype[];         /* needed for backward compatibility */
+#endif /* NCURSES_WGETCH_EVENTS */
+#endif /* NCURSES_EXT_FUNCS */
 
 /*
  * GCC (and some other compilers) define '__attribute__'; we're using this
  * macro to alert the compiler to flag inconsistencies in printf/scanf-like
  * function calls.  Just in case '__attribute__' isn't defined, make a dummy.
+ * Old versions of G++ do not accept it anyway, at least not consistently with
+ * GCC.
  */
-#if !defined(__GNUC__) && !defined(__attribute__)
+#if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__))
 #define __attribute__(p) /* nothing */
 #endif
 
 /*
  * We cannot define these in ncurses_cfg.h, since they require parameters to be
- * passed (that's non-portable).
+ * passed (that is non-portable).  If you happen to be using gcc with warnings
+ * enabled, define
+ *     GCC_PRINTF
+ *     GCC_SCANF
+ * to improve checking of calls to printw(), etc.
  */
-#if    GCC_PRINTF
+#ifndef GCC_PRINTFLIKE
+#if defined(GCC_PRINTF) && !defined(printf)
 #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
 #else
 #define GCC_PRINTFLIKE(fmt,var) /*nothing*/
 #endif
+#endif
 
-#if    GCC_SCANF
+#ifndef GCC_SCANFLIKE
+#if defined(GCC_SCANF) && !defined(scanf)
 #define GCC_SCANFLIKE(fmt,var)  __attribute__((format(scanf,fmt,var)))
 #else
 #define GCC_SCANFLIKE(fmt,var)  /*nothing*/
 #endif
+#endif
 
 #ifndef        GCC_NORETURN
 #define        GCC_NORETURN /* nothing */
@@ -338,512 +581,578 @@ extern char ttytype[];          /* needed for backward compatibility */
 #endif
 
 /*
- * Function prototypes.  This is the complete XSI Curses list of required
+ * Curses uses a helper function.  Define our type for this to simplify
+ * extending it for the sp-funcs feature.
+ */
+typedef int (*NCURSES_OUTC)(int);
+
+/*
+ * Function prototypes.  This is the complete X/Open Curses list of required
  * functions.  Those marked `generated' will have sources generated from the
  * macro definitions later in this file, in order to satisfy XPG4.2
  * requirements.
  */
 
-extern int addch(const chtype);                                /* generated */
-extern int addchnstr(const chtype *, int);             /* generated */
-extern int addchstr(const chtype *);                   /* generated */
-extern int addnstr(const char *, int);                 /* generated */
-extern int addstr(const char *);                       /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int addnwstr(const wchar_t *, int);             /* missing */
-extern int addwstr(const wchar_t *);                   /* missing */
-extern int add_wch(const cchar_t *);                   /* missing */
-extern int add_wchnstr(const cchar_t *, int);          /* missing */
-extern int add_wchstr(const cchar_t *);                        /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int attroff(NCURSES_ATTR_T);                    /* generated */
-extern int attron(NCURSES_ATTR_T);                     /* generated */
-extern int attrset(NCURSES_ATTR_T);                    /* generated */
-extern int attr_get(void);                             /* generated */
-extern int attr_off(NCURSES_ATTR_T);                   /* generated */
-extern int attr_on(NCURSES_ATTR_T);                    /* generated */
-extern int attr_set(NCURSES_ATTR_T);                   /* generated */
-extern int baudrate(void);                             /* implemented */
-extern int beep(void);                                 /* implemented */
-extern int bkgd(chtype);                               /* generated */
-extern void bkgdset(chtype);                           /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int bkgrndset(const cchar_t *);                 /* missing */
-extern int bkgrnd(const cchar_t *);                    /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int border(chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);    /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int border_set(cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t);        /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int box(WINDOW *, chtype, chtype);              /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int box_set(WINDOW *, cchar_t, cchar_t);                /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern bool can_change_color(void);                    /* implemented */
-extern int cbreak(void);                               /* implemented */
-extern int chgat(int, attr_t, short, const void *);    /* generated */
-extern int clear(void);                                        /* generated */
-extern int clearok(WINDOW *,bool);                     /* implemented */
-extern int clrtobot(void);                             /* generated */
-extern int clrtoeol(void);                             /* generated */
-extern int color_content(short,short*,short*,short*);  /* implemented */
-extern int COLOR_PAIR(int);                            /* generated */
-extern int copywin(const WINDOW*,WINDOW*,int,int,int,int,int,int,int); /* implemented */
-extern int curs_set(int);                              /* implemented */
-extern int def_prog_mode(void);                                /* implemented */
-extern int def_shell_mode(void);                       /* implemented */
-extern int delay_output(int);                          /* implemented */
-extern int delch(void);                                        /* generated */
-extern void delscreen(SCREEN *);                       /* implemented */
-extern int delwin(WINDOW *);                           /* implemented */
-extern int deleteln(void);                             /* generated */
-extern WINDOW *derwin(WINDOW *,int,int,int,int);       /* implemented */
-extern int doupdate(void);                             /* implemented */
-extern WINDOW *dupwin(WINDOW *);                       /* implemented */
-extern int echo(void);                                 /* implemented */
-extern int echochar(const chtype);                     /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int echo_wchar(const cchar_t *);                        /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int endwin(void);                               /* implemented */
-extern char erasechar(void);                           /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int erase_wchar(wchar_t *);                     /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern void filter(void);                              /* implemented */
-extern int flash(void);                                        /* implemented */
-extern int flushinp(void);                             /* implemented */
-extern chtype getbkgd(WINDOW *);                       /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int getbkgrnd(cchar_t *);                       /* missing */
-extern int getcchar(const cchar_t *, wchar_t*, attr_t*, short*, void*);        /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int getch(void);                                        /* generated */
-extern int getnstr(char *, int);                       /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int getn_wstr(wint_t *, int);                   /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int getstr(char *);                             /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int get_wch(wint_t *);                          /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern WINDOW *getwin(FILE *);                         /* not in XPG4 */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int get_wstr(wint_t *);                         /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int halfdelay(int);                             /* implemented */
-extern bool has_colors(void);                          /* implemented */
-extern int has_ic(void);                               /* implemented */
-extern int has_il(void);                               /* implemented */
-extern int hline(chtype, int);                         /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int hline_set(const cchar_t *, int);            /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern void idcok(WINDOW *, bool);                     /* implemented */
-extern int idlok(WINDOW *, bool);                      /* implemented */
-extern void immedok(WINDOW *, bool);                   /* implemented */
-extern chtype inch(void);                              /* generated */
-extern int inchnstr(chtype *, int);                    /* generated */
-extern int inchstr(chtype *);                          /* generated */
-extern WINDOW *initscr(void);                          /* implemented */
-extern int init_color(short,short,short,short);                /* implemented */
-extern int init_pair(short,short,short);               /* implemented */
-extern int innstr(char *, int);                                /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int innwstr(wchar_t *, int);                    /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int insch(chtype);                              /* generated */
-extern int insdelln(int);                              /* generated */
-extern int insertln(void);                             /* generated */
-extern int insnstr(const char *, int);                 /* generated */
-extern int insstr(const char *);                       /* generated */
-extern int instr(char *);                              /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int ins_nwstr(const wchar_t *, int);            /* missing */
-extern int ins_wch(const cchar_t *);                   /* missing */
-extern int ins_wstr(const wchar_t *);                  /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int intrflush(WINDOW *,bool);                   /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int inwstr(wchar_t *);                          /* missing */
-extern int in_wch(const cchar_t *);                    /* missing */
-extern int in_wchstr(const cchar_t *);                 /* missing */
-extern int in_wchntr(const cchar_t *, int);            /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int isendwin(void);                             /* implemented */
-extern int is_linetouched(WINDOW *,int);               /* implemented */
-extern int is_wintouched(WINDOW *);                    /* implemented */
-extern const char *keyname(int);                       /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int key_name(wchar_t *);                                /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int keypad(WINDOW *,bool);                      /* implemented */
-extern char killchar(void);                            /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int killwchar(wchar_t *);                       /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int leaveok(WINDOW *,bool);                     /* implemented */
-extern char *longname(void);                           /* implemented */
-extern int meta(WINDOW *,bool);                                /* implemented */
-extern int move(int, int);                             /* generated */
-extern int mvaddch(int, int, const chtype);            /* generated */
-extern int mvaddchnstr(int, int, const chtype *, int); /* generated */
-extern int mvaddchstr(int, int, const chtype *);       /* generated */
-extern int mvaddnstr(int, int, const char *, int);     /* generated */
-extern int mvaddstr(int, int, const char *);           /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvaddnwstr(int, int, const wchar_t *, int); /* missing */
-extern int mvaddwstr(int, int, const wchar_t *);       /* missing */
-extern int mvadd_wch(int, int, const cchar_t *);       /* missing */
-extern int mvadd_wchnstr(int, int, const cchar_t *, int);/* missing */
-extern int mvadd_wchstr(int, int, const cchar_t *);    /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvchgat(int, int, int, attr_t, short, const void *);        /* generated */
-extern int mvcur(int,int,int,int);                     /* implemented */
-extern int mvdelch(int, int);                          /* generated */
-extern int mvderwin(WINDOW *, int, int);               /* implemented */
-extern int mvgetch(int, int);                          /* generated */
-extern int mvgetnstr(int, int, char *, int);           /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvgetn_wstr(int, int, wint_t *, int);       /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvgetstr(int, int, char *);                 /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvget_wch(int, int, wint_t *);              /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvget_wstr(int, int, wint_t *);             /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvhline(int, int, chtype, int);             /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvhline_set(int, int, const cchar_t *, int);        /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern chtype mvinch(int, int);                                /* generated */
-extern int mvinchnstr(int, int, chtype *, int);                /* generated */
-extern int mvinchstr(int, int, chtype *);              /* generated */
-extern int mvinnstr(int, int, char *, int);            /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvinnwstr(int, int, wchar_t *, int);                /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvinsch(int, int, chtype);                  /* generated */
-extern int mvinsnstr(int, int, const char *, int);     /* generated */
-extern int mvinsstr(int, int, const char *);           /* generated */
-extern int mvinstr(int, int, char *);                  /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvins_nwstr(int, int, const wchar_t *, int);        /* missing */
-extern int mvins_wch(int, int, const cchar_t *);       /* missing */
-extern int mvins_wstr(int, int, const wchar_t *);      /* missing */
-extern int mvinwstr(int, int, wchar_t *);              /* missing */
-extern int mvin_wch(int, int, const cchar_t *);                /* missing */
-extern int mvin_wchstr(int, int, const cchar_t *);     /* missing */
-extern int mvin_wchntr(int, int, const cchar_t *, int);        /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvprintw(int,int,const char *,...)          /* implemented */
+extern NCURSES_EXPORT(int) addch (const chtype);                       /* generated */
+extern NCURSES_EXPORT(int) addchnstr (const chtype *, int);            /* generated */
+extern NCURSES_EXPORT(int) addchstr (const chtype *);                  /* generated */
+extern NCURSES_EXPORT(int) addnstr (const char *, int);                        /* generated */
+extern NCURSES_EXPORT(int) addstr (const char *);                      /* generated */
+extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T);                   /* generated */
+extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T);                    /* generated */
+extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T);                   /* generated */
+extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *);     /* generated */
+extern NCURSES_EXPORT(int) attr_off (attr_t, void *);                  /* generated */
+extern NCURSES_EXPORT(int) attr_on (attr_t, void *);                   /* generated */
+extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *);         /* generated */
+extern NCURSES_EXPORT(int) baudrate (void);                            /* implemented */
+extern NCURSES_EXPORT(int) beep  (void);                               /* implemented */
+extern NCURSES_EXPORT(int) bkgd (chtype);                              /* generated */
+extern NCURSES_EXPORT(void) bkgdset (chtype);                          /* generated */
+extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);   /* generated */
+extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype);             /* generated */
+extern NCURSES_EXPORT(bool) can_change_color (void);                   /* implemented */
+extern NCURSES_EXPORT(int) cbreak (void);                              /* implemented */
+extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *); /* generated */
+extern NCURSES_EXPORT(int) clear (void);                               /* generated */
+extern NCURSES_EXPORT(int) clearok (WINDOW *,bool);                    /* implemented */
+extern NCURSES_EXPORT(int) clrtobot (void);                            /* generated */
+extern NCURSES_EXPORT(int) clrtoeol (void);                            /* generated */
+extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*); /* implemented */
+extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*);                  /* generated */
+extern NCURSES_EXPORT(int) COLOR_PAIR (int);                           /* generated */
+extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int);        /* implemented */
+extern NCURSES_EXPORT(int) curs_set (int);                             /* implemented */
+extern NCURSES_EXPORT(int) def_prog_mode (void);                       /* implemented */
+extern NCURSES_EXPORT(int) def_shell_mode (void);                      /* implemented */
+extern NCURSES_EXPORT(int) delay_output (int);                         /* implemented */
+extern NCURSES_EXPORT(int) delch (void);                               /* generated */
+extern NCURSES_EXPORT(void) delscreen (SCREEN *);                      /* implemented */
+extern NCURSES_EXPORT(int) delwin (WINDOW *);                          /* implemented */
+extern NCURSES_EXPORT(int) deleteln (void);                            /* generated */
+extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int);     /* implemented */
+extern NCURSES_EXPORT(int) doupdate (void);                            /* implemented */
+extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *);                     /* implemented */
+extern NCURSES_EXPORT(int) echo (void);                                        /* implemented */
+extern NCURSES_EXPORT(int) echochar (const chtype);                    /* generated */
+extern NCURSES_EXPORT(int) erase (void);                               /* generated */
+extern NCURSES_EXPORT(int) endwin (void);                              /* implemented */
+extern NCURSES_EXPORT(char) erasechar (void);                          /* implemented */
+extern NCURSES_EXPORT(void) filter (void);                             /* implemented */
+extern NCURSES_EXPORT(int) flash (void);                               /* implemented */
+extern NCURSES_EXPORT(int) flushinp (void);                            /* implemented */
+extern NCURSES_EXPORT(chtype) getbkgd (WINDOW *);                      /* generated */
+extern NCURSES_EXPORT(int) getch (void);                               /* generated */
+extern NCURSES_EXPORT(int) getnstr (char *, int);                      /* generated */
+extern NCURSES_EXPORT(int) getstr (char *);                            /* generated */
+extern NCURSES_EXPORT(WINDOW *) getwin (FILE *);                       /* implemented */
+extern NCURSES_EXPORT(int) halfdelay (int);                            /* implemented */
+extern NCURSES_EXPORT(bool) has_colors (void);                         /* implemented */
+extern NCURSES_EXPORT(bool) has_ic (void);                             /* implemented */
+extern NCURSES_EXPORT(bool) has_il (void);                             /* implemented */
+extern NCURSES_EXPORT(int) hline (chtype, int);                                /* generated */
+extern NCURSES_EXPORT(void) idcok (WINDOW *, bool);                    /* implemented */
+extern NCURSES_EXPORT(int) idlok (WINDOW *, bool);                     /* implemented */
+extern NCURSES_EXPORT(void) immedok (WINDOW *, bool);                  /* implemented */
+extern NCURSES_EXPORT(chtype) inch (void);                             /* generated */
+extern NCURSES_EXPORT(int) inchnstr (chtype *, int);                   /* generated */
+extern NCURSES_EXPORT(int) inchstr (chtype *);                         /* generated */
+extern NCURSES_EXPORT(WINDOW *) initscr (void);                                /* implemented */
+extern NCURSES_EXPORT(int) init_color (NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T);       /* implemented */
+extern NCURSES_EXPORT(int) init_pair (NCURSES_PAIRS_T,NCURSES_COLOR_T,NCURSES_COLOR_T);                /* implemented */
+extern NCURSES_EXPORT(int) innstr (char *, int);                       /* generated */
+extern NCURSES_EXPORT(int) insch (chtype);                             /* generated */
+extern NCURSES_EXPORT(int) insdelln (int);                             /* generated */
+extern NCURSES_EXPORT(int) insertln (void);                            /* generated */
+extern NCURSES_EXPORT(int) insnstr (const char *, int);                        /* generated */
+extern NCURSES_EXPORT(int) insstr (const char *);                      /* generated */
+extern NCURSES_EXPORT(int) instr (char *);                             /* generated */
+extern NCURSES_EXPORT(int) intrflush (WINDOW *,bool);                  /* implemented */
+extern NCURSES_EXPORT(bool) isendwin (void);                           /* implemented */
+extern NCURSES_EXPORT(bool) is_linetouched (WINDOW *,int);             /* implemented */
+extern NCURSES_EXPORT(bool) is_wintouched (WINDOW *);                  /* implemented */
+extern NCURSES_EXPORT(NCURSES_CONST char *) keyname (int);             /* implemented */
+extern NCURSES_EXPORT(int) keypad (WINDOW *,bool);                     /* implemented */
+extern NCURSES_EXPORT(char) killchar (void);                           /* implemented */
+extern NCURSES_EXPORT(int) leaveok (WINDOW *,bool);                    /* implemented */
+extern NCURSES_EXPORT(char *) longname (void);                         /* implemented */
+extern NCURSES_EXPORT(int) meta (WINDOW *,bool);                       /* implemented */
+extern NCURSES_EXPORT(int) move (int, int);                            /* generated */
+extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);           /* generated */
+extern NCURSES_EXPORT(int) mvaddchnstr (int, int, const chtype *, int);        /* generated */
+extern NCURSES_EXPORT(int) mvaddchstr (int, int, const chtype *);      /* generated */
+extern NCURSES_EXPORT(int) mvaddnstr (int, int, const char *, int);    /* generated */
+extern NCURSES_EXPORT(int) mvaddstr (int, int, const char *);          /* generated */
+extern NCURSES_EXPORT(int) mvchgat (int, int, int, attr_t, NCURSES_PAIRS_T, const void *);     /* generated */
+extern NCURSES_EXPORT(int) mvcur (int,int,int,int);                    /* implemented */
+extern NCURSES_EXPORT(int) mvdelch (int, int);                         /* generated */
+extern NCURSES_EXPORT(int) mvderwin (WINDOW *, int, int);              /* implemented */
+extern NCURSES_EXPORT(int) mvgetch (int, int);                         /* generated */
+extern NCURSES_EXPORT(int) mvgetnstr (int, int, char *, int);          /* generated */
+extern NCURSES_EXPORT(int) mvgetstr (int, int, char *);                        /* generated */
+extern NCURSES_EXPORT(int) mvhline (int, int, chtype, int);            /* generated */
+extern NCURSES_EXPORT(chtype) mvinch (int, int);                       /* generated */
+extern NCURSES_EXPORT(int) mvinchnstr (int, int, chtype *, int);       /* generated */
+extern NCURSES_EXPORT(int) mvinchstr (int, int, chtype *);             /* generated */
+extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);           /* generated */
+extern NCURSES_EXPORT(int) mvinsch (int, int, chtype);                 /* generated */
+extern NCURSES_EXPORT(int) mvinsnstr (int, int, const char *, int);    /* generated */
+extern NCURSES_EXPORT(int) mvinsstr (int, int, const char *);          /* generated */
+extern NCURSES_EXPORT(int) mvinstr (int, int, char *);                 /* generated */
+extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...)                /* implemented */
                GCC_PRINTFLIKE(3,4);
-extern int mvscanw(int,int,const char *,...)           /* implemented */
+extern NCURSES_EXPORT(int) mvscanw (int,int, NCURSES_CONST char *,...) /* implemented */
                GCC_SCANFLIKE(3,4);
-extern int mvvline(int, int, chtype, int);             /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvvline_set(int, int, const cchar_t *, int);        /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvwaddch(WINDOW *, int, int, const chtype); /* generated */
-extern int mvwaddchnstr(WINDOW *, int, int, const chtype *, int);/* generated */
-extern int mvwaddchstr(WINDOW *, int, int, const chtype *);    /* generated */
-extern int mvwaddnstr(WINDOW *, int, int, const char *, int);  /* generated */
-extern int mvwaddstr(WINDOW *, int, int, const char *);        /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvwaddnwstr(WINDOW *, int, int, const wchar_t *, int);/* missing */
-extern int mvwaddwstr(WINDOW *, int, int, const wchar_t *);    /* missing */
-extern int mvwadd_wch(WINDOW *, int, int, const cchar_t *);    /* missing */
-extern int mvwadd_wchnstr(WINDOW *, int, int, const cchar_t *, int); /* missing */
-extern int mvwadd_wchstr(WINDOW *, int, int, const cchar_t *); /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvwchgat(WINDOW *, int, int, int, attr_t, short, const void *);/* generated */
-extern int mvwdelch(WINDOW *, int, int);               /* generated */
-extern int mvwgetch(WINDOW *, int, int);               /* generated */
-extern int mvwgetnstr(WINDOW *, int, int, char *, int);        /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvwgetn_wstr(WINDOW *, int, int, wint_t *, int);/* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvwgetstr(WINDOW *, int, int, char *);      /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvwget_wch(WINDOW *, int, int, wint_t *);   /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvwget_wstr(WINDOW *, int, int, wint_t *);  /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvwhline(WINDOW *, int, int, chtype, int);  /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvwhline_set(WINDOW *, int, int, const cchar_t *, int);/* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvwin(WINDOW *,int,int);                    /* implemented */
-extern chtype mvwinch(WINDOW *, int, int);                     /* generated */
-extern int mvwinchnstr(WINDOW *, int, int, chtype *, int);     /* generated */
-extern int mvwinchstr(WINDOW *, int, int, chtype *);           /* generated */
-extern int mvwinnstr(WINDOW *, int, int, char *, int);         /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvwinnwstr(WINDOW *, int, int, wchar_t *, int);     /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvwinsch(WINDOW *, int, int, chtype);               /* generated */
-extern int mvwinsnstr(WINDOW *, int, int, const char *, int);  /* generated */
-extern int mvwinsstr(WINDOW *, int, int, const char *);                /* generated */
-extern int mvwinstr(WINDOW *, int, int, char *);               /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvwins_nwstr(WINDOW *, int,int, const wchar_t *,int); /* missing */
-extern int mvwins_wch(WINDOW *, int, int, const cchar_t *);    /* missing */
-extern int mvwins_wstr(WINDOW *, int, int, const wchar_t *);   /* missing */
-extern int mvwinwstr(WINDOW *, int, int, wchar_t *);           /* missing */
-extern int mvwin_wch(WINDOW *, int, int, const cchar_t *);     /* missing */
-extern int mvwin_wchnstr(WINDOW *, int,int,const cchar_t *,int); /* missing */
-extern int mvwin_wchstr(WINDOW *, int, int, const cchar_t *);  /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvwprintw(WINDOW*,int,int,const char *,...) /* implemented */
+extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int);            /* generated */
+extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype);        /* generated */
+extern NCURSES_EXPORT(int) mvwaddchnstr (WINDOW *, int, int, const chtype *, int);/* generated */
+extern NCURSES_EXPORT(int) mvwaddchstr (WINDOW *, int, int, const chtype *);   /* generated */
+extern NCURSES_EXPORT(int) mvwaddnstr (WINDOW *, int, int, const char *, int); /* generated */
+extern NCURSES_EXPORT(int) mvwaddstr (WINDOW *, int, int, const char *);       /* generated */
+extern NCURSES_EXPORT(int) mvwchgat (WINDOW *, int, int, int, attr_t, NCURSES_PAIRS_T, const void *);/* generated */
+extern NCURSES_EXPORT(int) mvwdelch (WINDOW *, int, int);              /* generated */
+extern NCURSES_EXPORT(int) mvwgetch (WINDOW *, int, int);              /* generated */
+extern NCURSES_EXPORT(int) mvwgetnstr (WINDOW *, int, int, char *, int);       /* generated */
+extern NCURSES_EXPORT(int) mvwgetstr (WINDOW *, int, int, char *);     /* generated */
+extern NCURSES_EXPORT(int) mvwhline (WINDOW *, int, int, chtype, int); /* generated */
+extern NCURSES_EXPORT(int) mvwin (WINDOW *,int,int);                   /* implemented */
+extern NCURSES_EXPORT(chtype) mvwinch (WINDOW *, int, int);                    /* generated */
+extern NCURSES_EXPORT(int) mvwinchnstr (WINDOW *, int, int, chtype *, int);    /* generated */
+extern NCURSES_EXPORT(int) mvwinchstr (WINDOW *, int, int, chtype *);          /* generated */
+extern NCURSES_EXPORT(int) mvwinnstr (WINDOW *, int, int, char *, int);                /* generated */
+extern NCURSES_EXPORT(int) mvwinsch (WINDOW *, int, int, chtype);              /* generated */
+extern NCURSES_EXPORT(int) mvwinsnstr (WINDOW *, int, int, const char *, int); /* generated */
+extern NCURSES_EXPORT(int) mvwinsstr (WINDOW *, int, int, const char *);       /* generated */
+extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *);              /* generated */
+extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...)       /* implemented */
                GCC_PRINTFLIKE(4,5);
-extern int mvwscanw(WINDOW *,int,int,const char *,...) /* implemented */
+extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, NCURSES_CONST char *,...)       /* implemented */
                GCC_SCANFLIKE(4,5);
-extern int mvwvline(WINDOW *,int, int, chtype, int);   /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int mvwvline_set(WINDOW *, int,int, const cchar_t *,int); /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int napms(int);                                 /* implemented */
-extern WINDOW *newpad(int,int);                                /* implemented */
-extern SCREEN *newterm(const char *,FILE *,FILE *);    /* implemented */
-extern WINDOW *newwin(int,int,int,int);                        /* implemented */
-extern int nl(void);                                   /* implemented */
-extern int nocbreak(void);                             /* implemented */
-extern int nodelay(WINDOW *,bool);                     /* implemented */
-extern int noecho(void);                               /* implemented */
-extern int nonl(void);                                 /* implemented */
-extern int noqiflush(void);                            /* implemented */
-extern int noraw(void);                                        /* implemented */
-extern int notimeout(WINDOW *,bool);                   /* implemented */
-extern int overlay(const WINDOW*,WINDOW *);            /* implemented */
-extern int overwrite(const WINDOW*,WINDOW *);          /* implemented */
-extern int pair_content(short,short*,short*);          /* implemented */
-extern int PAIR_NUMBER(int);                           /* generated */
-extern int pechochar(WINDOW *, chtype);                        /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int pecho_wchar(WINDOW *, const cchar_t *);     /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int pnoutrefresh(WINDOW*,int,int,int,int,int,int);/* implemented */
-extern int prefresh(WINDOW *,int,int,int,int,int,int); /* implemented */
-extern int printw(const char *,...)                    /* implemented */
+extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int);  /* generated */
+extern NCURSES_EXPORT(int) napms (int);                                        /* implemented */
+extern NCURSES_EXPORT(WINDOW *) newpad (int,int);                      /* implemented */
+extern NCURSES_EXPORT(SCREEN *) newterm (NCURSES_CONST char *,FILE *,FILE *);  /* implemented */
+extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int);              /* implemented */
+extern NCURSES_EXPORT(int) nl (void);                                  /* implemented */
+extern NCURSES_EXPORT(int) nocbreak (void);                            /* implemented */
+extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool);                    /* implemented */
+extern NCURSES_EXPORT(int) noecho (void);                              /* implemented */
+extern NCURSES_EXPORT(int) nonl (void);                                        /* implemented */
+extern NCURSES_EXPORT(void) noqiflush (void);                          /* implemented */
+extern NCURSES_EXPORT(int) noraw (void);                               /* implemented */
+extern NCURSES_EXPORT(int) notimeout (WINDOW *,bool);                  /* implemented */
+extern NCURSES_EXPORT(int) overlay (const WINDOW*,WINDOW *);           /* implemented */
+extern NCURSES_EXPORT(int) overwrite (const WINDOW*,WINDOW *);         /* implemented */
+extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*);           /* implemented */
+extern NCURSES_EXPORT(int) PAIR_NUMBER (int);                          /* generated */
+extern NCURSES_EXPORT(int) pechochar (WINDOW *, const chtype);         /* implemented */
+extern NCURSES_EXPORT(int) pnoutrefresh (WINDOW*,int,int,int,int,int,int);/* implemented */
+extern NCURSES_EXPORT(int) prefresh (WINDOW *,int,int,int,int,int,int);        /* implemented */
+extern NCURSES_EXPORT(int) printw (const char *,...)                   /* implemented */
                GCC_PRINTFLIKE(1,2);
-extern int putp(const char *);                         /* implemented */
-extern int putwin(WINDOW *, FILE *);                   /* implemented */
-extern int qiflush(void);                              /* implemented */
-extern int raw(void);                                  /* implemented */
-extern int redrawwin(WINDOW *);                                /* generated */
-extern int refresh(void);                              /* generated */
-extern int resetty(void);                              /* implemented */
-extern int reset_prog_mode(void);                      /* implemented */
-extern int reset_shell_mode(void);                     /* implemented */
-extern int ripoffline(int, int (*init)(WINDOW *, int));        /* implemented */
-extern int savetty(void);                              /* implemented */
-extern int scanw(const char *,...)                     /* implemented */
+extern NCURSES_EXPORT(int) putwin (WINDOW *, FILE *);                  /* implemented */
+extern NCURSES_EXPORT(void) qiflush (void);                            /* implemented */
+extern NCURSES_EXPORT(int) raw (void);                                 /* implemented */
+extern NCURSES_EXPORT(int) redrawwin (WINDOW *);                       /* generated */
+extern NCURSES_EXPORT(int) refresh (void);                             /* generated */
+extern NCURSES_EXPORT(int) resetty (void);                             /* implemented */
+extern NCURSES_EXPORT(int) reset_prog_mode (void);                     /* implemented */
+extern NCURSES_EXPORT(int) reset_shell_mode (void);                    /* implemented */
+extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int));   /* implemented */
+extern NCURSES_EXPORT(int) savetty (void);                             /* implemented */
+extern NCURSES_EXPORT(int) scanw (NCURSES_CONST char *,...)            /* implemented */
                GCC_SCANFLIKE(1,2);
-extern int scr_dump(const char *);                     /* implemented */
-extern int scr_init(const char *);                     /* implemented */
-extern int scrl(int);                                  /* generated */
-extern int scroll(WINDOW *);                           /* generated */
-extern int scrollok(WINDOW *,bool);                    /* implemented */
-extern int scr_restore(const char *);                  /* implemented */
-extern int scr_set(const char *);                      /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int setcchar(cchar_t *, wchar_t *, attr_t, short, const void *);        /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int setscrreg(int,int);                         /* generated */
-extern SCREEN *set_term(SCREEN *);                     /* implemented */
-extern int slk_attroff(const attr_t);                  /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int slk_attr_off(attr_t);                       /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int slk_attron(const attr_t);                   /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int slk_attr_on(attr_t);                                /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int slk_attrset(const attr_t);                  /* implemented */
-extern attr_t slk_attr(void);                           /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int slk_attr_set(attr_t);                       /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int slk_clear(void);                            /* implemented */
-extern int slk_init(int);                              /* implemented */
-extern char *slk_label(int);                           /* implemented */
-extern int slk_noutrefresh(void);                      /* implemented */
-extern int slk_refresh(void);                          /* implemented */
-extern int slk_restore(void);                          /* implemented */
-extern int slk_set(int,const char *,int);              /* implemented */
-extern int slk_touch(void);                            /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int slk_wset(int, wchar_t *, int);              /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int standout(void);                             /* generated */
-extern int standend(void);                             /* generated */
-extern int start_color(void);                          /* implemented */
-extern WINDOW *subpad(WINDOW *, int, int, int, int);   /* implemented */
-extern WINDOW *subwin(WINDOW *,int,int,int,int);       /* implemented */
-extern int syncok(WINDOW *, bool);                     /* implemented */
-extern attr_t termattrs(void);                         /* implemented */
-extern char *termname(void);                           /* implemented */
-extern int tigetflag(const char *);                    /* implemented */
-extern int tigetnum(const char *);                     /* implemented */
-extern char *tigetstr(const char *);                   /* implemented */
-extern int timeout(int);                               /* generated */
-extern int typeahead(int);                             /* implemented */
-extern int ungetch(int);                               /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int unget_wch(const wchar_t *);                 /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int untouchwin(WINDOW *);                       /* generated */
-extern void use_env(bool);                             /* implemented */
-extern int vidattr(chtype);                            /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int vid_attr(attr_t);                           /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int vidputs(chtype, int (*)(int));              /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int vid_puts(attr_t, int (*)(int));             /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int vline(chtype, int);                         /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int vline_set(const cchar_t *, int);            /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int vwprintw(WINDOW *,const char *,va_list);    /* implemented */
-extern int vw_printw(WINDOW *,const char *,va_list);   /* generated */
-extern int vwscanw(WINDOW *,const char *,va_list);     /* implemented */
-extern int vw_scanw(WINDOW *,const char *,va_list);    /* generated */
-extern int waddch(WINDOW *, const chtype);             /* implemented */
-extern int waddchnstr(WINDOW *,const chtype *const,int); /* implemented */
-extern int waddchstr(WINDOW *,const chtype *);         /* generated */
-extern int waddnstr(WINDOW *,const char *const,int);   /* implemented */
-extern int waddstr(WINDOW *,const char *);             /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int waddwstr(WINDOW *,const wchar_t *);         /* missing */
-extern int wadd_wch(WINDOW *,const cchar_t *);         /* missing */
-extern int wadd_wchnstr(WINDOW *,const cchar_t *,int); /* missing */
-extern int wadd_wchstr(WINDOW *,const cchar_t *);      /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int wattron(WINDOW *, int);                     /* generated */
-extern int wattroff(WINDOW *, int);                    /* generated */
-extern int wattrset(WINDOW *, int);                    /* generated */
-extern attr_t wattr_get(WINDOW *);                     /* generated */
-extern int wattr_on(WINDOW *, const attr_t);           /* implemented */
-extern int wattr_off(WINDOW *, const attr_t);          /* implemented */
-extern int wattr_set(WINDOW *, attr_t);                        /* generated */
-extern int wbkgd(WINDOW *,const chtype);               /* implemented */
-extern void wbkgdset(WINDOW *,chtype);                 /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wbkgrndset(WINDOW *,const cchar_t *);       /* missing */
-extern int wbkgrnd(WINDOW *,const cchar_t *);          /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int wborder(WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);  /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wborder_set(WINDOW *,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t);      /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int wchgat(WINDOW *, int, attr_t, short, const void *);/* implemented */
-extern int wclear(WINDOW *);                           /* implemented */
-extern int wclrtobot(WINDOW *);                                /* implemented */
-extern int wclrtoeol(WINDOW *);                                /* implemented */
-extern void wcursyncup(WINDOW *);                      /* implemented */
-extern int wdelch(WINDOW *);                           /* implemented */
-extern int wdeleteln(WINDOW *);                                /* generated */
-extern int wechochar(WINDOW *, const chtype);          /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wecho_wchar(WINDOW *, const cchar_t *);     /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int werase(WINDOW *);                           /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wgetbkgrnd(WINDOW *, cchar_t *);            /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int wgetch(WINDOW *);                           /* implemented */
-extern int wgetnstr(WINDOW *,char *,int);              /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wgetn_wstr(WINDOW *,wint_t *, int);         /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int wgetstr(WINDOW *, char *);                  /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wget_wch(WINDOW *, wint_t *);               /* missing */
-extern int wget_wstr(WINDOW *, wint_t *);              /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int whline(WINDOW *, chtype, int);              /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int whline_set(WINDOW *, const cchar_t *, int); /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern chtype winch(WINDOW *);                         /* generated */
-extern int winchnstr(WINDOW *, chtype *, int);         /* implemented */
-extern int winchstr(WINDOW *, chtype *);               /* generated */
-extern int winnstr(WINDOW *, char *, int);             /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int winnwstr(WINDOW *, wchar_t *, int);         /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int winsch(WINDOW *, chtype);                   /* implemented */
-extern int winsdelln(WINDOW *,int);                    /* implemented */
-extern int winsertln(WINDOW *);                                /* generated */
-extern int winsnstr(WINDOW *, const char *,int);       /* implemented */
-extern int winsstr(WINDOW *, const char *);            /* generated */
-extern int winstr(WINDOW *, char *);                   /* generated */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wins_nwstr(WINDOW *, const wchar_t *, int); /* missing */
-extern int wins_wch(WINDOW *, const cchar_t *);                /* missing */
-extern int wins_wstr(WINDOW *, const wchar_t *);       /* missing */
-extern int winwstr(WINDOW *, wchar_t *);               /* missing */
-extern int win_wch(WINDOW *, const cchar_t *);         /* missing */
-extern int win_wchnstr(WINDOW *, const cchar_t *, int);        /* missing */
-extern int win_wchstr(WINDOW *, const cchar_t *);      /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int wmove(WINDOW *,int,int);                    /* implemented */
-extern int wnoutrefresh(WINDOW *);                     /* implemented */
-extern int wprintw(WINDOW *,const char *,...)          /* implemented */
+extern NCURSES_EXPORT(int) scr_dump (const char *);                    /* implemented */
+extern NCURSES_EXPORT(int) scr_init (const char *);                    /* implemented */
+extern NCURSES_EXPORT(int) scrl (int);                                 /* generated */
+extern NCURSES_EXPORT(int) scroll (WINDOW *);                          /* generated */
+extern NCURSES_EXPORT(int) scrollok (WINDOW *,bool);                   /* implemented */
+extern NCURSES_EXPORT(int) scr_restore (const char *);                 /* implemented */
+extern NCURSES_EXPORT(int) scr_set (const char *);                     /* implemented */
+extern NCURSES_EXPORT(int) setscrreg (int,int);                                /* generated */
+extern NCURSES_EXPORT(SCREEN *) set_term (SCREEN *);                   /* implemented */
+extern NCURSES_EXPORT(int) slk_attroff (const chtype);                 /* implemented */
+extern NCURSES_EXPORT(int) slk_attr_off (const attr_t, void *);                /* generated:WIDEC */
+extern NCURSES_EXPORT(int) slk_attron (const chtype);                  /* implemented */
+extern NCURSES_EXPORT(int) slk_attr_on (attr_t,void*);                 /* generated:WIDEC */
+extern NCURSES_EXPORT(int) slk_attrset (const chtype);                 /* implemented */
+extern NCURSES_EXPORT(attr_t) slk_attr (void);                         /* implemented */
+extern NCURSES_EXPORT(int) slk_attr_set (const attr_t,NCURSES_PAIRS_T,void*);  /* implemented */
+extern NCURSES_EXPORT(int) slk_clear (void);                           /* implemented */
+extern NCURSES_EXPORT(int) slk_color (NCURSES_PAIRS_T);                                /* implemented */
+extern NCURSES_EXPORT(int) slk_init (int);                             /* implemented */
+extern NCURSES_EXPORT(char *) slk_label (int);                         /* implemented */
+extern NCURSES_EXPORT(int) slk_noutrefresh (void);                     /* implemented */
+extern NCURSES_EXPORT(int) slk_refresh (void);                         /* implemented */
+extern NCURSES_EXPORT(int) slk_restore (void);                         /* implemented */
+extern NCURSES_EXPORT(int) slk_set (int,const char *,int);             /* implemented */
+extern NCURSES_EXPORT(int) slk_touch (void);                           /* implemented */
+extern NCURSES_EXPORT(int) standout (void);                            /* generated */
+extern NCURSES_EXPORT(int) standend (void);                            /* generated */
+extern NCURSES_EXPORT(int) start_color (void);                         /* implemented */
+extern NCURSES_EXPORT(WINDOW *) subpad (WINDOW *, int, int, int, int); /* implemented */
+extern NCURSES_EXPORT(WINDOW *) subwin (WINDOW *, int, int, int, int); /* implemented */
+extern NCURSES_EXPORT(int) syncok (WINDOW *, bool);                    /* implemented */
+extern NCURSES_EXPORT(chtype) termattrs (void);                                /* implemented */
+extern NCURSES_EXPORT(char *) termname (void);                         /* implemented */
+extern NCURSES_EXPORT(void) timeout (int);                             /* generated */
+extern NCURSES_EXPORT(int) touchline (WINDOW *, int, int);             /* generated */
+extern NCURSES_EXPORT(int) touchwin (WINDOW *);                                /* generated */
+extern NCURSES_EXPORT(int) typeahead (int);                            /* implemented */
+extern NCURSES_EXPORT(int) ungetch (int);                              /* implemented */
+extern NCURSES_EXPORT(int) untouchwin (WINDOW *);                      /* generated */
+extern NCURSES_EXPORT(void) use_env (bool);                            /* implemented */
+extern NCURSES_EXPORT(void) use_tioctl (bool);                         /* implemented */
+extern NCURSES_EXPORT(int) vidattr (chtype);                           /* implemented */
+extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC);             /* implemented */
+extern NCURSES_EXPORT(int) vline (chtype, int);                                /* generated */
+extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *,va_list);  /* implemented */
+extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *,va_list); /* generated */
+extern NCURSES_EXPORT(int) vwscanw (WINDOW *, NCURSES_CONST char *,va_list);   /* implemented */
+extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, NCURSES_CONST char *,va_list);  /* generated */
+extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype);            /* implemented */
+extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int);   /* implemented */
+extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *);                /* generated */
+extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int);       /* implemented */
+extern NCURSES_EXPORT(int) waddstr (WINDOW *,const char *);            /* generated */
+extern NCURSES_EXPORT(int) wattron (WINDOW *, int);                    /* generated */
+extern NCURSES_EXPORT(int) wattroff (WINDOW *, int);                   /* generated */
+extern NCURSES_EXPORT(int) wattrset (WINDOW *, int);                   /* generated */
+extern NCURSES_EXPORT(int) wattr_get (WINDOW *, attr_t *, NCURSES_PAIRS_T *, void *);  /* generated */
+extern NCURSES_EXPORT(int) wattr_on (WINDOW *, attr_t, void *);                /* implemented */
+extern NCURSES_EXPORT(int) wattr_off (WINDOW *, attr_t, void *);       /* implemented */
+extern NCURSES_EXPORT(int) wattr_set (WINDOW *, attr_t, NCURSES_PAIRS_T, void *);      /* generated */
+extern NCURSES_EXPORT(int) wbkgd (WINDOW *, chtype);                   /* implemented */
+extern NCURSES_EXPORT(void) wbkgdset (WINDOW *,chtype);                        /* implemented */
+extern NCURSES_EXPORT(int) wborder (WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); /* implemented */
+extern NCURSES_EXPORT(int) wchgat (WINDOW *, int, attr_t, NCURSES_PAIRS_T, const void *);/* implemented */
+extern NCURSES_EXPORT(int) wclear (WINDOW *);                          /* implemented */
+extern NCURSES_EXPORT(int) wclrtobot (WINDOW *);                       /* implemented */
+extern NCURSES_EXPORT(int) wclrtoeol (WINDOW *);                       /* implemented */
+extern NCURSES_EXPORT(int) wcolor_set (WINDOW*,NCURSES_PAIRS_T,void*);         /* implemented */
+extern NCURSES_EXPORT(void) wcursyncup (WINDOW *);                     /* implemented */
+extern NCURSES_EXPORT(int) wdelch (WINDOW *);                          /* implemented */
+extern NCURSES_EXPORT(int) wdeleteln (WINDOW *);                       /* generated */
+extern NCURSES_EXPORT(int) wechochar (WINDOW *, const chtype);         /* implemented */
+extern NCURSES_EXPORT(int) werase (WINDOW *);                          /* implemented */
+extern NCURSES_EXPORT(int) wgetch (WINDOW *);                          /* implemented */
+extern NCURSES_EXPORT(int) wgetnstr (WINDOW *,char *,int);             /* implemented */
+extern NCURSES_EXPORT(int) wgetstr (WINDOW *, char *);                 /* generated */
+extern NCURSES_EXPORT(int) whline (WINDOW *, chtype, int);             /* implemented */
+extern NCURSES_EXPORT(chtype) winch (WINDOW *);                                /* implemented */
+extern NCURSES_EXPORT(int) winchnstr (WINDOW *, chtype *, int);                /* implemented */
+extern NCURSES_EXPORT(int) winchstr (WINDOW *, chtype *);              /* generated */
+extern NCURSES_EXPORT(int) winnstr (WINDOW *, char *, int);            /* implemented */
+extern NCURSES_EXPORT(int) winsch (WINDOW *, chtype);                  /* implemented */
+extern NCURSES_EXPORT(int) winsdelln (WINDOW *,int);                   /* implemented */
+extern NCURSES_EXPORT(int) winsertln (WINDOW *);                       /* generated */
+extern NCURSES_EXPORT(int) winsnstr (WINDOW *, const char *,int);      /* implemented */
+extern NCURSES_EXPORT(int) winsstr (WINDOW *, const char *);           /* generated */
+extern NCURSES_EXPORT(int) winstr (WINDOW *, char *);                  /* generated */
+extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int);                   /* implemented */
+extern NCURSES_EXPORT(int) wnoutrefresh (WINDOW *);                    /* implemented */
+extern NCURSES_EXPORT(int) wprintw (WINDOW *, const char *,...)                /* implemented */
                GCC_PRINTFLIKE(2,3);
-extern int wredrawln(WINDOW *,int,int);                        /* implemented */
-extern int wrefresh(WINDOW *);                         /* implemented */
-extern int wscanw(WINDOW *,const char *,...)           /* implemented */
+extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int);               /* implemented */
+extern NCURSES_EXPORT(int) wrefresh (WINDOW *);                                /* implemented */
+extern NCURSES_EXPORT(int) wscanw (WINDOW *, NCURSES_CONST char *,...) /* implemented */
                GCC_SCANFLIKE(2,3);
-extern int wscrl(WINDOW *,int);                                /* implemented */
-extern int wsetscrreg(WINDOW *,int,int);               /* implemented */
-extern int wstandout(WINDOW *);                                /* generated */
-extern int wstandend(WINDOW *);                                /* generated */
-extern void wsyncdown(WINDOW *);                       /* implemented */
-extern void wsyncup(WINDOW *);                         /* implemented */
-extern int wtimeout(WINDOW *,int);                     /* implemented */
-extern int wtouchln(WINDOW *,int,int,int);             /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern wchar_t wunctrl(cchar_t *);                     /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int wvline(WINDOW *,chtype,int);                        /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wvline_set(WINDOW *, const cchar_t *, int); /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
+extern NCURSES_EXPORT(int) wscrl (WINDOW *,int);                       /* implemented */
+extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int);              /* implemented */
+extern NCURSES_EXPORT(int) wstandout (WINDOW *);                       /* generated */
+extern NCURSES_EXPORT(int) wstandend (WINDOW *);                       /* generated */
+extern NCURSES_EXPORT(void) wsyncdown (WINDOW *);                      /* implemented */
+extern NCURSES_EXPORT(void) wsyncup (WINDOW *);                                /* implemented */
+extern NCURSES_EXPORT(void) wtimeout (WINDOW *,int);                   /* implemented */
+extern NCURSES_EXPORT(int) wtouchln (WINDOW *,int,int,int);            /* implemented */
+extern NCURSES_EXPORT(int) wvline (WINDOW *,chtype,int);               /* implemented */
+
+/*
+ * These are also declared in <term.h>:
+ */
+extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *);           /* implemented */
+extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *);            /* implemented */
+extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *);         /* implemented */
+extern NCURSES_EXPORT(int) putp (const char *);                                /* implemented */
+
+#if NCURSES_TPARM_VARARGS
+extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...);       /* special */
+#else
+extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG); /* special */
+extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...);       /* special */
+#endif
+
+extern NCURSES_EXPORT(char *) tiparm (const char *, ...);              /* special */
+
+/*
+ * These functions are not in X/Open, but we use them in macro definitions:
+ */
+extern NCURSES_EXPORT(int) getattrs (const WINDOW *);                  /* generated */
+extern NCURSES_EXPORT(int) getcurx (const WINDOW *);                   /* generated */
+extern NCURSES_EXPORT(int) getcury (const WINDOW *);                   /* generated */
+extern NCURSES_EXPORT(int) getbegx (const WINDOW *);                   /* generated */
+extern NCURSES_EXPORT(int) getbegy (const WINDOW *);                   /* generated */
+extern NCURSES_EXPORT(int) getmaxx (const WINDOW *);                   /* generated */
+extern NCURSES_EXPORT(int) getmaxy (const WINDOW *);                   /* generated */
+extern NCURSES_EXPORT(int) getparx (const WINDOW *);                   /* generated */
+extern NCURSES_EXPORT(int) getpary (const WINDOW *);                   /* generated */
+
+/*
+ * vid_attr() was implemented originally based on a draft of X/Open curses.
+ */
+#if !NCURSES_WIDECHAR
+#define vid_attr(a,pair,opts) vidattr(a)
+#endif
+
+/*
+ * These functions are extensions - not in X/Open Curses.
+ */
+#if @NCURSES_EXT_FUNCS@
+#undef  NCURSES_EXT_FUNCS
+#define NCURSES_EXT_FUNCS @NCURSES_PATCH@
+typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
+typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
+extern NCURSES_EXPORT(bool) is_term_resized (int, int);
+extern NCURSES_EXPORT(char *) keybound (int, int);
+extern NCURSES_EXPORT(const char *) curses_version (void);
+extern NCURSES_EXPORT(int) alloc_pair (int, int);
+extern NCURSES_EXPORT(int) assume_default_colors (int, int);
+extern NCURSES_EXPORT(int) define_key (const char *, int);
+extern NCURSES_EXPORT(int) extended_color_content(int, int *, int *, int *);
+extern NCURSES_EXPORT(int) extended_pair_content(int, int *, int *);
+extern NCURSES_EXPORT(int) extended_slk_color(int);
+extern NCURSES_EXPORT(int) find_pair (int, int);
+extern NCURSES_EXPORT(int) free_pair (int);
+extern NCURSES_EXPORT(int) get_escdelay (void);
+extern NCURSES_EXPORT(int) init_extended_color(int, int, int, int);
+extern NCURSES_EXPORT(int) init_extended_pair(int, int, int);
+extern NCURSES_EXPORT(int) key_defined (const char *);
+extern NCURSES_EXPORT(int) keyok (int, bool);
+extern NCURSES_EXPORT(int) resize_term (int, int);
+extern NCURSES_EXPORT(int) resizeterm (int, int);
+extern NCURSES_EXPORT(int) set_escdelay (int);
+extern NCURSES_EXPORT(int) set_tabsize (int);
+extern NCURSES_EXPORT(int) use_default_colors (void);
+extern NCURSES_EXPORT(int) use_extended_names (bool);
+extern NCURSES_EXPORT(int) use_legacy_coding (int);
+extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *);
+extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *);
+extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
+extern NCURSES_EXPORT(void) nofilter(void);
+
+/*
+ * These extensions provide access to information stored in the WINDOW even
+ * when NCURSES_OPAQUE is set:
+ */
+extern NCURSES_EXPORT(WINDOW *) wgetparent (const WINDOW *);   /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_cleared (const WINDOW *);       /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_idcok (const WINDOW *);         /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_idlok (const WINDOW *);         /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_immedok (const WINDOW *);       /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_keypad (const WINDOW *);                /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_leaveok (const WINDOW *);       /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_nodelay (const WINDOW *);       /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_notimeout (const WINDOW *);     /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_pad (const WINDOW *);           /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_scrollok (const WINDOW *);      /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_subwin (const WINDOW *);                /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *);                /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(int) wgetdelay (const WINDOW *);         /* @GENERATED_EXT_FUNCS@ */
+extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* @GENERATED_EXT_FUNCS@ */
+
+#else
+#define curses_version() NCURSES_VERSION
+#endif
+
+/*
+ * Extra extension-functions, which pass a SCREEN pointer rather than using
+ * a global variable SP.
+ */
+#if @NCURSES_SP_FUNCS@
+#undef  NCURSES_SP_FUNCS
+#define NCURSES_SP_FUNCS @NCURSES_PATCH@
+#define NCURSES_SP_NAME(name) name##_sp
+
+/* Define the sp-funcs helper function */
+#define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)
+typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);
+
+extern NCURSES_EXPORT(SCREEN *) new_prescr (void); /* implemented:SP_FUNC */
+
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(color_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (SCREEN*);/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (SCREEN*, FILE *);                     /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_color) (SCREEN*, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (SCREEN*, WINDOW*, bool);        /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(keyname) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, NCURSES_CONST char *, FILE *, FILE *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (SCREEN*, int, int (*)(WINDOW *, int)); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (SCREEN*, const char *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (SCREEN*, const char *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (SCREEN*, const char *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (SCREEN*, const chtype); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (SCREEN*, const chtype); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (SCREEN*, const chtype); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (SCREEN*, const attr_t, NCURSES_PAIRS_T, void*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (SCREEN*, NCURSES_PAIRS_T); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (SCREEN*, int, const char *, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (SCREEN*); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetch) (SCREEN*, int); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (SCREEN*, bool); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (SCREEN*, bool); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */
+#if @NCURSES_EXT_FUNCS@
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int);   /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(alloc_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int);   /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_color_content) (SCREEN*, int, int *, int *, int *);        /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_pair_content) (SCREEN*, int, int *, int *);        /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_slk_color) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*);    /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(find_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(free_pair) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_color) (SCREEN*, int, int, int, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_pair) (SCREEN*, int, int, int);       /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int);      /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *);       /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool);        /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */     /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int);   /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int);    /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int);       /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (SCREEN*, int);        /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (SCREEN*);      /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int);  /* implemented:EXT_SP_FUNC */
+#endif
+#else
+#undef  NCURSES_SP_FUNCS
+#define NCURSES_SP_FUNCS 0
+#define NCURSES_SP_NAME(name) name
+#define NCURSES_SP_OUTC NCURSES_OUTC
+#endif
 
 /* attributes */
-#define A_ATTRIBUTES   0xffffff00
-#define A_NORMAL       0x00000000
-#define A_STANDOUT     0x00010000
-#define A_UNDERLINE    0x00020000
-#define A_REVERSE      0x00040000
-#define A_BLINK                0x00080000
-#define A_DIM          0x00100000
-#define A_BOLD         0x00200000
-#define A_ALTCHARSET   0x00400000
-#define A_INVIS                0x00800000
-#define A_PROTECT      0x01000000
-#define A_HORIZONTAL   0x02000000      /* XSI Curses attr -- not yet used */
-#define A_LEFT         0x04000000      /* XSI Curses attr -- not yet used */
-#define A_LOW          0x08000000      /* XSI Curses attr -- not yet used */
-#define A_RIGHT                0x10000000      /* XSI Curses attr -- not yet used */
-#define A_TOP          0x20000000      /* XSI Curses attr -- not yet used */
-#define A_VERTICAL     0x40000000      /* XSI Curses attr -- not yet used */
-#define A_CHARTEXT     0x000000ff
-#define A_COLOR                0x0000ff00
-#define COLOR_PAIR(n)  ((n) << 8)
-#define PAIR_NUMBER(a) (((a) & A_COLOR) >> 8)
+
+#define NCURSES_ATTR_SHIFT       8
+#define NCURSES_BITS(mask,shift) (NCURSES_CAST(chtype,(mask)) << ((shift) + NCURSES_ATTR_SHIFT))
+
+#define A_NORMAL       (@cf_cv_1UL@ - @cf_cv_1UL@)
+#define A_ATTRIBUTES   NCURSES_BITS(~(@cf_cv_1UL@ - @cf_cv_1UL@),0)
+#define A_CHARTEXT     (NCURSES_BITS(@cf_cv_1UL@,0) - @cf_cv_1UL@)
+#define A_COLOR                NCURSES_BITS(((@cf_cv_1UL@) << 8) - @cf_cv_1UL@,0)
+#define A_STANDOUT     NCURSES_BITS(@cf_cv_1UL@,8)
+#define A_UNDERLINE    NCURSES_BITS(@cf_cv_1UL@,9)
+#define A_REVERSE      NCURSES_BITS(@cf_cv_1UL@,10)
+#define A_BLINK                NCURSES_BITS(@cf_cv_1UL@,11)
+#define A_DIM          NCURSES_BITS(@cf_cv_1UL@,12)
+#define A_BOLD         NCURSES_BITS(@cf_cv_1UL@,13)
+#define A_ALTCHARSET   NCURSES_BITS(@cf_cv_1UL@,14)
+#define A_INVIS                NCURSES_BITS(@cf_cv_1UL@,15)
+#define A_PROTECT      NCURSES_BITS(@cf_cv_1UL@,16)
+#define A_HORIZONTAL   NCURSES_BITS(@cf_cv_1UL@,17)
+#define A_LEFT         NCURSES_BITS(@cf_cv_1UL@,18)
+#define A_LOW          NCURSES_BITS(@cf_cv_1UL@,19)
+#define A_RIGHT                NCURSES_BITS(@cf_cv_1UL@,20)
+#define A_TOP          NCURSES_BITS(@cf_cv_1UL@,21)
+#define A_VERTICAL     NCURSES_BITS(@cf_cv_1UL@,22)
+
+#if @NCURSES_EXT_FUNCS@
+#define A_ITALIC       NCURSES_BITS(@cf_cv_1UL@,23)    /* ncurses extension */
+#endif
+
+/*
+ * Most of the pseudo functions are macros that either provide compatibility
+ * with older versions of curses, or provide inline functionality to improve
+ * performance.
+ */
 
 /*
- * pseudo functions
+ * These pseudo functions are always implemented as macros:
  */
+
+#define getyx(win,y,x)         (y = getcury(win), x = getcurx(win))
+#define getbegyx(win,y,x)      (y = getbegy(win), x = getbegx(win))
+#define getmaxyx(win,y,x)      (y = getmaxy(win), x = getmaxx(win))
+#define getparyx(win,y,x)      (y = getpary(win), x = getparx(win))
+
+#define getsyx(y,x) do { if (newscr) { \
+                            if (is_leaveok(newscr)) \
+                               (y) = (x) = -1; \
+                            else \
+                                getyx(newscr,(y), (x)); \
+                       } \
+                   } while(0)
+
+#define setsyx(y,x) do { if (newscr) { \
+                           if ((y) == -1 && (x) == -1) \
+                               leaveok(newscr, TRUE); \
+                           else { \
+                               leaveok(newscr, FALSE); \
+                               wmove(newscr, (y), (x)); \
+                           } \
+                       } \
+                   } while(0)
+
+#ifndef NCURSES_NOMACROS
+
+/*
+ * These miscellaneous pseudo functions are provided for compatibility:
+ */
+
 #define wgetstr(w, s)          wgetnstr(w, s, -1)
-#define getnstr(s, n)          wgetnstr(stdscr, s, n)
+#define getnstr(s, n)          wgetnstr(stdscr, s, (n))
 
 #define setterm(term)          setupterm(term, 1, (int *)0)
 
@@ -854,217 +1163,222 @@ extern int wvline_set(WINDOW *, const cchar_t *, int); /* missing */
 #define nocrmode()             nocbreak()
 #define gettmode()
 
-#define getyx(win,y,x)         (y = (win)->_cury, x = (win)->_curx)
-#define getbegyx(win,y,x)      (y = (win)->_begy, x = (win)->_begx)
-#define getmaxyx(win,y,x)      (y = (win)->_maxy + 1, x = (win)->_maxx + 1)
-#define getparyx(win,y,x)      (y = (win)->_pary, x = (win)->_parx)
-#define getsyx(y,x)            getyx(stdscr, y, x)
-#define setsyx(y,x)            (stdscr->_cury = y, stdscr->_curx = x)
-
-#define        wbkgdset(win, ch) \
-       (((win)->_attrs = (((win)->_attrs & ~((win)->_bkgd & A_ATTRIBUTES)) | \
-           ((ch) & A_ATTRIBUTES))), \
-           ((win)->_bkgd = (ch)))
-
 /* It seems older SYSV curses versions define these */
-#define getattrs(win)          ((win)->_attrs)
-#define getmaxx(win)           ((win)->_maxx + 1)
-#define getmaxy(win)           ((win)->_maxy + 1)
-
-#define winch(win)             ((win)->_line[(win)->_cury].text[(win)->_curx])
-#define wstandout(win)         (wattr_set(win,A_STANDOUT))
-#define wstandend(win)         (wattr_set(win,A_NORMAL))
-#define wattr_set(win,at)      ((win)->_attrs = (at))
-
-#define wattron(win,at)                wattr_on(win, at)
-#define wattroff(win,at)       wattr_off(win, at)
-#define wattrset(win,at)       wattr_set(win, at)
+#if !NCURSES_OPAQUE
+#define getattrs(win)          NCURSES_CAST(int, NCURSES_OK_ADDR(win) ? (win)->_attrs : A_NORMAL)
+#define getcurx(win)           (NCURSES_OK_ADDR(win) ? (win)->_curx : ERR)
+#define getcury(win)           (NCURSES_OK_ADDR(win) ? (win)->_cury : ERR)
+#define getbegx(win)           (NCURSES_OK_ADDR(win) ? (win)->_begx : ERR)
+#define getbegy(win)           (NCURSES_OK_ADDR(win) ? (win)->_begy : ERR)
+#define getmaxx(win)           (NCURSES_OK_ADDR(win) ? ((win)->_maxx + 1) : ERR)
+#define getmaxy(win)           (NCURSES_OK_ADDR(win) ? ((win)->_maxy + 1) : ERR)
+#define getparx(win)           (NCURSES_OK_ADDR(win) ? (win)->_parx : ERR)
+#define getpary(win)           (NCURSES_OK_ADDR(win) ? (win)->_pary : ERR)
+#endif /* NCURSES_OPAQUE */
+
+#define wstandout(win)         (wattrset(win,A_STANDOUT))
+#define wstandend(win)         (wattrset(win,A_NORMAL))
+
+#define wattron(win,at)                wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
+#define wattroff(win,at)       wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
+
+#if !NCURSES_OPAQUE
+#if NCURSES_WATTR_MACROS
+#if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@
+#define wattrset(win,at) \
+       (NCURSES_OK_ADDR(win) \
+         ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
+            (win)->_attrs = NCURSES_CAST(attr_t, at), \
+            OK) \
+         : ERR)
+#else
+#define wattrset(win,at) \
+       (NCURSES_OK_ADDR(win) \
+         ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
+            OK) \
+         : ERR)
+#endif
+#endif /* NCURSES_WATTR_MACROS */
+#endif /* NCURSES_OPAQUE */
 
 #define scroll(win)            wscrl(win,1)
 
-#define touchwin(win)          wtouchln((win), 0, (win)->_maxy + 1, 1)
+#define touchwin(win)          wtouchln((win), 0, getmaxy(win), 1)
 #define touchline(win, s, c)   wtouchln((win), s, c, 1)
-#define untouchwin(win)                wtouchln((win), 0, (win)->_maxy + 1, 0)
+#define untouchwin(win)                wtouchln((win), 0, getmaxy(win), 0)
 
 #define box(win, v, h)         wborder(win, v, v, h, h, 0, 0, 0, 0)
 #define border(ls, rs, ts, bs, tl, tr, bl, br) wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
-#define hline(ch, n)           whline(stdscr, ch, n)
-#define vline(ch, n)           wvline(stdscr, ch, n)
+#define hline(ch, n)           whline(stdscr, ch, (n))
+#define vline(ch, n)           wvline(stdscr, ch, (n))
 
 #define winstr(w, s)           winnstr(w, s, -1)
 #define winchstr(w, s)         winchnstr(w, s, -1)
 #define winsstr(w, s)          winsnstr(w, s, -1)
 
-#define redrawwin(w)           wredrawln(w, 0, w->_maxy+1)
+#if !NCURSES_OPAQUE
+#define redrawwin(win)         wredrawln(win, 0, (NCURSES_OK_ADDR(win) ? (win)->_maxy+1 : -1))
+#endif /* NCURSES_OPAQUE */
+
 #define waddstr(win,str)       waddnstr(win,str,-1)
 #define waddchstr(win,str)     waddchnstr(win,str,-1)
 
+/*
+ * These apply to the first 256 color pairs.
+ */
+#define COLOR_PAIR(n)  (NCURSES_BITS((n), 0) & A_COLOR)
+#define PAIR_NUMBER(a) (NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
+
 /*
  * pseudo functions for standard screen
  */
 
-#define addch(ch)                      waddch(stdscr,ch)
-#define addchnstr(str,n)       waddchnstr(stdscr,str,n)
-#define addchstr(str)          waddchstr(stdscr,str)
-#define addnstr(str,n)         waddnstr(stdscr,str,n)
-#define addstr(str)                    waddnstr(stdscr,str,-1)
-#define attroff(at)                    wattroff(stdscr,at)
-#define attron(at)                     wattron(stdscr,at)
-#define attrset(at)                    wattrset(stdscr,at)
-#define bkgd(ch)               wbkgd(stdscr,ch)
-#define bkgdset(ch)            wbkgdset(stdscr,ch)
-#define clear()                        wclear(stdscr)
-#define clrtobot()                     wclrtobot(stdscr)
-#define clrtoeol()                     wclrtoeol(stdscr)
-#define delch()                        wdelch(stdscr)
-#define deleteln()                     winsdelln(stdscr,-1)
-#define echochar(c)            wechochar(stdscr,c)
-#define erase()                        werase(stdscr)
-#define getch()                        wgetch(stdscr)
-#define getstr(str)                    wgetstr(stdscr,str)
-#define inch()                 winch(stdscr)
-#define inchnstr(s,n)          winchnstr(stdscr,s,n)
-#define inchstr(s)             winchstr(stdscr,s)
-#define innstr(s,n)            winnstr(stdscr,s,n)
-#define insch(c)                       winsch(stdscr,c)
-#define insdelln(n)            winsdelln(stdscr,n)
-#define insertln()                     winsdelln(stdscr,1)
-#define insnstr(s,n)           winsnstr(stdscr,s,n)
-#define insstr(s)              winsstr(stdscr,s)
-#define instr(s)               winstr(stdscr,s)
-#define move(y,x)              wmove(stdscr,y,x)
-#define refresh()                      wrefresh(stdscr)
-#define scrl(n)                        wscrl(stdscr,n)
-#define setscrreg(t,b)                 wsetscrreg(stdscr,t,b)
-#define standend()                     wstandend(stdscr)
-#define standout()                     wstandout(stdscr)
-#define timeout(delay)         wtimeout(stdscr,delay)
-#define wdeleteln(win)         winsdelln(win,-1)
-#define winsertln(win)         winsdelln(win,1)
+#define addch(ch)              waddch(stdscr,(ch))
+#define addchnstr(str,n)       waddchnstr(stdscr,(str),(n))
+#define addchstr(str)          waddchstr(stdscr,(str))
+#define addnstr(str,n)         waddnstr(stdscr,(str),(n))
+#define addstr(str)            waddnstr(stdscr,(str),-1)
+#define attr_get(ap,cp,o)      wattr_get(stdscr,(ap),(cp),(o))
+#define attr_off(a,o)          wattr_off(stdscr,(a),(o))
+#define attr_on(a,o)           wattr_on(stdscr,(a),(o))
+#define attr_set(a,c,o)                wattr_set(stdscr,(a),(c),(o))
+#define attroff(at)            wattroff(stdscr,(at))
+#define attron(at)             wattron(stdscr,(at))
+#define attrset(at)            wattrset(stdscr,(at))
+#define bkgd(ch)               wbkgd(stdscr,(ch))
+#define bkgdset(ch)            wbkgdset(stdscr,(ch))
+#define chgat(n,a,c,o)         wchgat(stdscr,(n),(a),(c),(o))
+#define clear()                        wclear(stdscr)
+#define clrtobot()             wclrtobot(stdscr)
+#define clrtoeol()             wclrtoeol(stdscr)
+#define color_set(c,o)         wcolor_set(stdscr,(c),(o))
+#define delch()                        wdelch(stdscr)
+#define deleteln()             winsdelln(stdscr,-1)
+#define echochar(c)            wechochar(stdscr,(c))
+#define erase()                        werase(stdscr)
+#define getch()                        wgetch(stdscr)
+#define getstr(str)            wgetstr(stdscr,(str))
+#define inch()                 winch(stdscr)
+#define inchnstr(s,n)          winchnstr(stdscr,(s),(n))
+#define inchstr(s)             winchstr(stdscr,(s))
+#define innstr(s,n)            winnstr(stdscr,(s),(n))
+#define insch(c)               winsch(stdscr,(c))
+#define insdelln(n)            winsdelln(stdscr,(n))
+#define insertln()             winsdelln(stdscr,1)
+#define insnstr(s,n)           winsnstr(stdscr,(s),(n))
+#define insstr(s)              winsstr(stdscr,(s))
+#define instr(s)               winstr(stdscr,(s))
+#define move(y,x)              wmove(stdscr,(y),(x))
+#define refresh()              wrefresh(stdscr)
+#define scrl(n)                        wscrl(stdscr,(n))
+#define setscrreg(t,b)         wsetscrreg(stdscr,(t),(b))
+#define standend()             wstandend(stdscr)
+#define standout()             wstandout(stdscr)
+#define timeout(delay)         wtimeout(stdscr,(delay))
+#define wdeleteln(win)         winsdelln(win,-1)
+#define winsertln(win)         winsdelln(win,1)
 
 /*
  * mv functions
  */
 
-#define mvwaddch(win,y,x,ch)           (wmove(win,y,x) == ERR ? ERR : waddch(win,ch))
-#define mvwaddchnstr(win,y,x,str,n)    (wmove(win,y,x) == ERR ? ERR : waddchnstr(win,str,n))
-#define mvwaddchstr(win,y,x,str)       (wmove(win,y,x) == ERR ? ERR : waddchnstr(win,str,-1))
-#define mvwaddnstr(win,y,x,str,n)      (wmove(win,y,x) == ERR ? ERR : waddnstr(win,str,n))
-#define mvwaddstr(win,y,x,str)         (wmove(win,y,x) == ERR ? ERR : waddnstr(win,str,-1))
-#define mvwdelch(win,y,x)              (wmove(win,y,x) == ERR ? ERR : wdelch(win))
-#define mvwgetch(win,y,x)              (wmove(win,y,x) == ERR ? ERR : wgetch(win))
-#define mvwgetnstr(win,y,x,str,n)      (wmove(win,y,x) == ERR ? ERR : wgetnstr(win,str,n))
-#define mvwgetstr(win,y,x,str)         (wmove(win,y,x) == ERR ? ERR : wgetstr(win,str))
-#define mvwhline(win,y,x,c,n)          (wmove(win,y,x) == ERR ? ERR : whline(win,c,n))
-#define mvwinch(win,y,x)               (wmove(win,y,x) == ERR ? (chtype)ERR : winch(win))
-#define mvwinchnstr(win,y,x,s,n)       (wmove(win,y,x) == ERR ? ERR : winchnstr(win,s,n))
-#define mvwinchstr(win,y,x,s)          (wmove(win,y,x) == ERR ? ERR : winchstr(win,s))
-#define mvwinnstr(win,y,x,s,n)         (wmove(win,y,x) == ERR ? ERR : winnstr(win,s,n))
-#define mvwinsch(win,y,x,c)            (wmove(win,y,x) == ERR ? ERR : winsch(win,c))
-#define mvwinsnstr(win,y,x,s,n)                (wmove(win,y,x) == ERR ? ERR : winsnstr(win,s,n))
-#define mvwinsstr(win,y,x,s)           (wmove(win,y,x) == ERR ? ERR : winsstr(win,s))
-#define mvwinstr(win,y,x,s)            (wmove(win,y,x) == ERR ? ERR : winstr(win,s))
-#define mvwvline(win,y,x,c,n)          (wmove(win,y,x) == ERR ? ERR : wvline(win,c,n))
-
-#define mvaddch(y,x,ch)                mvwaddch(stdscr,y,x,ch)
-#define mvaddchnstr(y,x,str,n)         mvwaddchnstr(stdscr,y,x,str,n)
-#define mvaddchstr(y,x,str)            mvwaddchstr(stdscr,y,x,str)
-#define mvaddnstr(y,x,str,n)           mvwaddnstr(stdscr,y,x,str,n)
-#define mvaddstr(y,x,str)              mvwaddstr(stdscr,y,x,str)
-#define mvdelch(y,x)                   mvwdelch(stdscr,y,x)
-#define mvgetch(y,x)                   mvwgetch(stdscr,y,x)
-#define mvgetnstr(y,x,str,n)           mvwgetnstr(stdscr,y,x,str,n)
-#define mvgetstr(y,x,str)              mvwgetstr(stdscr,y,x,str)
-#define mvhline(y,x,c,n)               mvwhline(stdscr,y,x,c,n)
-#define mvinch(y,x)                    mvwinch(stdscr,y,x)
-#define mvinchnstr(y,x,s,n)            mvwinchnstr(stdscr,y,x,s,n)
-#define mvinchstr(y,x,s)               mvwinchstr(stdscr,y,x,s)
-#define mvinnstr(y,x,s,n)              mvwinnstr(stdscr,y,x,s,n)
-#define mvinsch(y,x,c)                 mvwinsch(stdscr,y,x,c)
-#define mvinsnstr(y,x,s,n)             mvwinsnstr(stdscr,y,x,s,n)
-#define mvinsstr(y,x,s)                        mvwinsstr(stdscr,y,x,s)
-#define mvinstr(y,x,s)                 mvwinstr(stdscr,y,x,s)
-#define mvvline(y,x,c,n)               mvwvline(stdscr,y,x,c,n)
+#define mvwaddch(win,y,x,ch)           (wmove((win),(y),(x)) == ERR ? ERR : waddch((win),(ch)))
+#define mvwaddchnstr(win,y,x,str,n)    (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),(n)))
+#define mvwaddchstr(win,y,x,str)       (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1))
+#define mvwaddnstr(win,y,x,str,n)      (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n)))
+#define mvwaddstr(win,y,x,str)         (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1))
+#define mvwchgat(win,y,x,n,a,c,o)      (wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o)))
+#define mvwdelch(win,y,x)              (wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
+#define mvwgetch(win,y,x)              (wmove((win),(y),(x)) == ERR ? ERR : wgetch(win))
+#define mvwgetnstr(win,y,x,str,n)      (wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n)))
+#define mvwgetstr(win,y,x,str)         (wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str)))
+#define mvwhline(win,y,x,c,n)          (wmove((win),(y),(x)) == ERR ? ERR : whline((win),(c),(n)))
+#define mvwinch(win,y,x)               (wmove((win),(y),(x)) == ERR ? NCURSES_CAST(chtype, ERR) : winch(win))
+#define mvwinchnstr(win,y,x,s,n)       (wmove((win),(y),(x)) == ERR ? ERR : winchnstr((win),(s),(n)))
+#define mvwinchstr(win,y,x,s)          (wmove((win),(y),(x)) == ERR ? ERR : winchstr((win),(s)))
+#define mvwinnstr(win,y,x,s,n)         (wmove((win),(y),(x)) == ERR ? ERR : winnstr((win),(s),(n)))
+#define mvwinsch(win,y,x,c)            (wmove((win),(y),(x)) == ERR ? ERR : winsch((win),(c)))
+#define mvwinsnstr(win,y,x,s,n)                (wmove((win),(y),(x)) == ERR ? ERR : winsnstr((win),(s),(n)))
+#define mvwinsstr(win,y,x,s)           (wmove((win),(y),(x)) == ERR ? ERR : winsstr((win),(s)))
+#define mvwinstr(win,y,x,s)            (wmove((win),(y),(x)) == ERR ? ERR : winstr((win),(s)))
+#define mvwvline(win,y,x,c,n)          (wmove((win),(y),(x)) == ERR ? ERR : wvline((win),(c),(n)))
+
+#define mvaddch(y,x,ch)                        mvwaddch(stdscr,(y),(x),(ch))
+#define mvaddchnstr(y,x,str,n)         mvwaddchnstr(stdscr,(y),(x),(str),(n))
+#define mvaddchstr(y,x,str)            mvwaddchstr(stdscr,(y),(x),(str))
+#define mvaddnstr(y,x,str,n)           mvwaddnstr(stdscr,(y),(x),(str),(n))
+#define mvaddstr(y,x,str)              mvwaddstr(stdscr,(y),(x),(str))
+#define mvchgat(y,x,n,a,c,o)           mvwchgat(stdscr,(y),(x),(n),(a),(c),(o))
+#define mvdelch(y,x)                   mvwdelch(stdscr,(y),(x))
+#define mvgetch(y,x)                   mvwgetch(stdscr,(y),(x))
+#define mvgetnstr(y,x,str,n)           mvwgetnstr(stdscr,(y),(x),(str),(n))
+#define mvgetstr(y,x,str)              mvwgetstr(stdscr,(y),(x),(str))
+#define mvhline(y,x,c,n)               mvwhline(stdscr,(y),(x),(c),(n))
+#define mvinch(y,x)                    mvwinch(stdscr,(y),(x))
+#define mvinchnstr(y,x,s,n)            mvwinchnstr(stdscr,(y),(x),(s),(n))
+#define mvinchstr(y,x,s)               mvwinchstr(stdscr,(y),(x),(s))
+#define mvinnstr(y,x,s,n)              mvwinnstr(stdscr,(y),(x),(s),(n))
+#define mvinsch(y,x,c)                 mvwinsch(stdscr,(y),(x),(c))
+#define mvinsnstr(y,x,s,n)             mvwinsnstr(stdscr,(y),(x),(s),(n))
+#define mvinsstr(y,x,s)                        mvwinsstr(stdscr,(y),(x),(s))
+#define mvinstr(y,x,s)                 mvwinstr(stdscr,(y),(x),(s))
+#define mvvline(y,x,c,n)               mvwvline(stdscr,(y),(x),(c),(n))
 
 /*
- * XSI curses macros for XPG4 conformance.
- * The underlying functions needed to make these work are:
- * waddnwstr(), waddchnwstr(), wadd_wch(), wborder_set(), wchgat(),
- * wecho_wchar(), wgetn_wstr(), wget_wch(), whline_set(), vhline_set(),
- * winnwstr(), wins_nwstr(), wins_wch(), win_wch(), win_wchnstr().
- * Except for wchgat(), these are not yet implemented.  They will be someday.
+ * Some wide-character functions can be implemented without the extensions.
  */
-#define add_wch(c)                     wadd_wch(stsdscr,c)
-#define addnwstr(wstr,n)               waddnwstr(stdscr,wstr,n)
-#define addwstr(wstr,n)                        waddnwstr(stdscr,wstr,-1)
-#define attr_get()                     wattr_get(stdscr)
-#define attr_off(a)                    wattr_off(stdscr,a)
-#define attr_on(a)                     wattr_on(stdscr,a)
-#define attr_set(a)                    wattr_set(stdscr,a)
-#define box_set(w,v,h)                 wborder_set(w,v,v,h,h,0,0,0,9)
-#define chgat(n,a,c,o)                 wchgat(stdscr,n,a,c,o)
-#define echo_wchar(c)                  wecho_wchar(stdscr,c)
-#define getbkgd(win)                   ((win)->_bkgd)
-#define get_wch(c)                     wget_wch(stdscr,c)
-#define get_wstr(t)                    wgetn_wstr(stdscr,t,-1)
-#define getn_wstr(t,n)                 wgetn_wstr(stdscr,t,n)
-#define hline_set(c,n)                 whline_set(stdscr,c,n)
-#define in_wch(c)                      win_wch(stdscr,c)
-#define in_wchnstr(c,n)                        win_wchnstr(stdscr,c,n)
-#define in_wchstr(c)                   win_wchnstr(stdscr,c,-1)
-#define innwstr(c,n)                   winnwstr(stdscr,c,n)
-#define ins_nwstr(t,n)                 wins_nwstr(stdscr,t,n)
-#define ins_wch(c)                     wins_wch(stdscr,c)
-#define ins_wstr(t)                    wins_nwstr(stdscr,t,-1)
-#define inwstr(c)                      winnwstr(stdscr,c,-1)
-
-#define mvadd_wch(y,x,c)               mvwadd_wch(stdscr,y,x,c)
-#define mvaddnwstr(y,x,wstr,n)         mvwaddnwstr(stdscr,y,x,wstr,n)
-#define mvaddwstr(y,x,wstr,n)          mvwaddnwstr(stdscr,y,x,wstr,-1)
-#define mvchgat(y,x,n,a,c,o)           mvwchgat(stdscr,y,x,n,a,c,o)
-#define mvget_wch(y,x,c)               mvwget_wch(stdscr,y,x,c)
-#define mvget_wstr(y,x,t)              mvwgetn_wstr(stdscr,y,x,t,-1)
-#define mvgetn_wstr(y,x,t,n)           mvwgetn_wstr(stdscr,y,x,t,n)
-#define mvhline_set(y,x,c,n)           mvwhline_set(stdscr,y,x,c,n)
-#define mvin_wch(y,x,c)                        mvwin_wch(stdscr,y,x,c)
-#define mvin_wchnstr(y,x,c,n)          mvwin_wchnstr(stdscr,y,x,c,n)
-#define mvin_wchstr(y,x,c)             mvwin_wchnstr(stdscr,y,x,c,-1)
-#define mvinnwstr(y,x,c,n)             mvwinnwstr(stdscr,y,x,c,n)
-#define mvins_nwstr(y,x,t,n)           mvwins_nwstr(stdscr,y,x,t,n)
-#define mvins_wch(y,x,c)               mvwins_wch(stdscr,y,x,c)
-#define mvins_wstr(y,x,t)              mvwins_nwstr(stdscr,y,x,t,-1)
-#define mvinwstr(y,x,c)                        mvwinnwstr(stdscr,y,x,c,-1)
-#define mvvline_set(y,x,c,n)           mvwvline_set(stdscr,y,x,c,n)
-
-#define mvwadd_wch(y,x,win,c)          (wmove(win,y,x) == ERR ? ERR : wadd_wch(stsdscr,c))
-#define mvwaddnwstr(y,x,win,wstr,n)    (wmove(win,y,x) == ERR ? ERR : waddnwstr(stdscr,wstr,n))
-#define mvwaddwstr(y,x,win,wstr,n)     (wmove(win,y,x) == ERR ? ERR : waddnwstr(stdscr,wstr,-1))
-#define mvwchgat(win,y,x,n,a,c,o)      (wmove(win,y,x) == ERR ? ERR : wchgat(win,n,a,c,o))
-#define mvwget_wch(win,y,x,c)          (wmove(win,y,x) == ERR ? ERR : wget_wch(win,n))
-#define mvwget_wstr(win,y,x,t)         (wmove(win,y,x) == ERR ? ERR : wgetn_wstr(win,t,-1))
-#define mvwgetn_wstr(win,y,x,t,n)      (wmove(win,y,x) == ERR ? ERR : wgetn_wstr(win,t,n))
-#define mvwhline_set(win,y,x,c,n)      (wmove(win,y,x) == ERR ? ERR : whline_set(win,c,n))
-#define mvwin_wch(win,y,x,c)           (wmove(win,y,x) == ERR ? ERR : win_wch(win,c))
-#define mvwin_wchnstr(win,y,x,c,n)     (wmove(win,y,x) == ERR ? ERR : win_wchnstr(stdscr,c,n))
-#define mvwin_wchstr(win,y,x,c)                (wmove(win,y,x) == ERR ? ERR : win_wchnstr(stdscr,c,-1))
-#define mvwinnwstr(win,y,x,c,n)                (wmove(win,y,x) == ERR ? ERR : winnwstr(stdscr,c,n))
-#define mvwins_nwstr(win,y,x,t,n)      (wmove(win,y,x) == ERR ? ERR : wins_nwstr(stdscr,t,n))
-#define mvwins_wch(win,y,x,c)          (wmove(win,y,x) == ERR ? ERR : wins_wch(c))
-#define mvwins_wstr(win,y,x,t)         (wmove(win,y,x) == ERR ? ERR : wins_nwstr(stdscr,t,-1))
-#define mvwinwstr(win,y,x,c)           (wmove(win,y,x) == ERR ? ERR : winnwstr(stdscr,c,-1))
-#define mvwvline_set(win,y,x,c,n)      (wmove(win,y,x) == ERR ? ERR : wvline_set(win,c,n))
-
-#define vline_set(c,n)                 vhline_set(stdscr,c,n)
-#define waddwstr(win,wstr,n)           waddnwstr(win,wstr,-1)
-#define wattr_get(win)                 ((win)->_attrs)
-#define wget_wstr(w,t)                 wgetn_wstr(w,t,-1)
-#define win_wchstr(w,c)                        win_wchnstr(w,c,-1)
-#define wins_wstr(w,t)                 wins_nwstr(w,t,-1)
-#define winwstr(w,c)                   winnwstr(w,c,-1)
-
+#if !NCURSES_OPAQUE
+#define getbkgd(win)                    (NCURSES_OK_ADDR(win) ? ((win)->_bkgd) : 0)
+#endif /* NCURSES_OPAQUE */
+
+#define slk_attr_off(a,v)              ((v) ? ERR : slk_attroff(a))
+#define slk_attr_on(a,v)               ((v) ? ERR : slk_attron(a))
+
+#if !NCURSES_OPAQUE
+#if NCURSES_WATTR_MACROS
+#if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@
+#define wattr_set(win,a,p,opts) \
+       (NCURSES_OK_ADDR(win) \
+        ? ((void)((win)->_attrs = ((a) & ~A_COLOR), \
+                  (win)->_color = (opts) ? *(int *)(opts) : (p)), \
+           OK) \
+        : ERR)
+#define wattr_get(win,a,p,opts) \
+       (NCURSES_OK_ADDR(win) \
+        ? ((void)(NCURSES_OK_ADDR(a) \
+                  ? (*(a) = (win)->_attrs) \
+                  : OK), \
+           (void)(NCURSES_OK_ADDR(p) \
+                  ? (*(p) = (NCURSES_PAIRS_T) (win)->_color) \
+                  : OK), \
+           (void)(NCURSES_OK_ADDR(opts) \
+                  ? (*(int *)(opts) = (win)->_color) \
+                  : OK), \
+           OK) \
+        : ERR)
+#else /* !(NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
+#define wattr_set(win,a,p,opts) \
+        (NCURSES_OK_ADDR(win) \
+         ? ((void)((win)->_attrs = (((a) & ~A_COLOR) | \
+                                    (attr_t)COLOR_PAIR(p))), \
+            OK) \
+         : ERR)
+#define wattr_get(win,a,p,opts) \
+       (NCURSES_OK_ADDR(win) \
+        ? ((void)(NCURSES_OK_ADDR(a) \
+                  ? (*(a) = (win)->_attrs) \
+                  : OK), \
+           (void)(NCURSES_OK_ADDR(p) \
+                  ? (*(p) = (NCURSES_PAIRS_T) PAIR_NUMBER((win)->_attrs)) \
+                  : OK), \
+           OK) \
+        : ERR)
+#endif /* (NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
+#endif /* NCURSES_WATTR_MACROS */
+#endif /* NCURSES_OPAQUE */
 
 /*
- * XSI curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
+ * X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
  * varargs.h.  It adds new calls vw_printw/vw_scanw, which are supposed to
  * use POSIX stdarg.h.  The ncurses versions of vwprintw/vwscanw already
  * use stdarg.h, so...
@@ -1073,213 +1387,99 @@ extern int wvline_set(WINDOW *, const cchar_t *, int); /* missing */
 #define vw_scanw               vwscanw
 
 /*
- * Pseudo-character tokens outside ASCII range.  The curses wgetch() function
- * will return any given one of these only if the corresponding k- capability
- * is defined in your terminal's terminfo entry.
+ * Export fallback function for use in C++ binding.
  */
-#define KEY_CODE_YES   0400            /* A wchar_t contains a key code */
-#define KEY_MIN                0401            /* Minimum curses key */
-#define KEY_BREAK       0401            /* Break key (unreliable) */
-#define KEY_DOWN        0402            /* Down-arrow */
-#define KEY_UP          0403           /* Up-arrow */
-#define KEY_LEFT        0404           /* Left-arrow */
-#define KEY_RIGHT       0405            /* Right-arrow */
-#define KEY_HOME        0406            /* Home key (upward+left arrow) */
-#define KEY_BACKSPACE   0407            /* Backspace (unreliable) */
-#define KEY_F0          0410            /* Function keys.  Space for 64 */
-#define KEY_F(n)        (KEY_F0+(n))    /* Value of function key n */
-#define KEY_DL          0510            /* Delete line */
-#define KEY_IL          0511            /* Insert line */
-#define KEY_DC          0512            /* Delete character */
-#define KEY_IC          0513            /* Insert char or enter insert mode */
-#define KEY_EIC         0514            /* Exit insert char mode */
-#define KEY_CLEAR       0515            /* Clear screen */
-#define KEY_EOS         0516            /* Clear to end of screen */
-#define KEY_EOL         0517            /* Clear to end of line */
-#define KEY_SF          0520            /* Scroll 1 line forward */
-#define KEY_SR          0521            /* Scroll 1 line backward (reverse) */
-#define KEY_NPAGE       0522            /* Next page */
-#define KEY_PPAGE       0523            /* Previous page */
-#define KEY_STAB        0524            /* Set tab */
-#define KEY_CTAB        0525            /* Clear tab */
-#define KEY_CATAB       0526            /* Clear all tabs */
-#define KEY_ENTER       0527            /* Enter or send (unreliable) */
-#define KEY_SRESET      0530            /* Soft (partial) reset (unreliable) */
-#define KEY_RESET       0531            /* Reset or hard reset (unreliable) */
-#define KEY_PRINT       0532            /* Print */
-#define KEY_LL          0533            /* Home down or bottom (lower left) */
-
-/* The keypad is arranged like this: */
-/* a1    up    a3   */
-/* left   b2  right  */
-/* c1   down   c3   */
-
-#define KEY_A1         0534            /* Upper left of keypad */
-#define KEY_A3         0535            /* Upper right of keypad */
-#define KEY_B2         0536            /* Center of keypad */
-#define KEY_C1         0537            /* Lower left of keypad */
-#define KEY_C3         0540            /* Lower right of keypad */
-#define KEY_BTAB       0541            /* Back tab */
-#define KEY_BEG                0542            /* Beg (beginning) */
-#define KEY_CANCEL     0543            /* Cancel */
-#define KEY_CLOSE      0544            /* Close */
-#define KEY_COMMAND    0545            /* Cmd (command) */
-#define KEY_COPY       0546            /* Copy */
-#define KEY_CREATE     0547            /* Create */
-#define KEY_END                0550            /* End */
-#define KEY_EXIT       0551            /* Exit */
-#define KEY_FIND       0552            /* Find */
-#define KEY_HELP       0553            /* Help */
-#define KEY_MARK       0554            /* Mark */
-#define KEY_MESSAGE    0555            /* Message */
-#define KEY_MOVE       0556            /* Move */
-#define KEY_NEXT       0557            /* Next */
-#define KEY_OPEN       0560            /* Open */
-#define KEY_OPTIONS    0561            /* Options */
-#define KEY_PREVIOUS   0562            /* Prev (previous) */
-#define KEY_REDO       0563            /* Redo */
-#define KEY_REFERENCE  0564            /* Ref (reference) */
-#define KEY_REFRESH    0565            /* Refresh */
-#define KEY_REPLACE    0566            /* Replace */
-#define KEY_RESTART    0567            /* Restart */
-#define KEY_RESUME     0570            /* Resume */
-#define KEY_SAVE       0571            /* Save */
-#define KEY_SBEG       0572            /* Shifted Beg (beginning) */
-#define KEY_SCANCEL    0573            /* Shifted Cancel */
-#define KEY_SCOMMAND   0574            /* Shifted Command */
-#define KEY_SCOPY      0575            /* Shifted Copy */
-#define KEY_SCREATE    0576            /* Shifted Create */
-#define KEY_SDC                0577            /* Shifted Delete char */
-#define KEY_SDL                0600            /* Shifted Delete line */
-#define KEY_SELECT     0601            /* Select */
-#define KEY_SEND       0602            /* Shifted End */
-#define KEY_SEOL       0603            /* Shifted Clear line */
-#define KEY_SEXIT      0604            /* Shifted Dxit */
-#define KEY_SFIND      0605            /* Shifted Find */
-#define KEY_SHELP      0606            /* Shifted Help */
-#define KEY_SHOME      0607            /* Shifted Home */
-#define KEY_SIC                0610            /* Shifted Input */
-#define KEY_SLEFT      0611            /* Shifted Left arrow */
-#define KEY_SMESSAGE   0612            /* Shifted Message */
-#define KEY_SMOVE      0613            /* Shifted Move */
-#define KEY_SNEXT      0614            /* Shifted Next */
-#define KEY_SOPTIONS   0615            /* Shifted Options */
-#define KEY_SPREVIOUS  0616            /* Shifted Prev */
-#define KEY_SPRINT     0617            /* Shifted Print */
-#define KEY_SREDO      0620            /* Shifted Redo */
-#define KEY_SREPLACE   0621            /* Shifted Replace */
-#define KEY_SRIGHT     0622            /* Shifted Right arrow */
-#define KEY_SRSUME     0623            /* Shifted Resume */
-#define KEY_SSAVE      0624            /* Shifted Save */
-#define KEY_SSUSPEND   0625            /* Shifted Suspend */
-#define KEY_SUNDO      0626            /* Shifted Undo */
-#define KEY_SUSPEND    0627            /* Suspend */
-#define KEY_UNDO       0630            /* Undo */
-#define KEY_MOUSE      0631            /* Mouse event has occurred */
-#define KEY_MAX                0777            /* Maximum key value */
-
-/* mouse interface */
-#define NCURSES_MOUSE_VERSION  1
-
-/* event masks */
-#define        BUTTON1_RELEASED        000000000001L
-#define        BUTTON1_PRESSED         000000000002L
-#define        BUTTON1_CLICKED         000000000004L
-#define        BUTTON1_DOUBLE_CLICKED  000000000010L
-#define        BUTTON1_TRIPLE_CLICKED  000000000020L
-#define BUTTON1_RESERVED_EVENT 000000000040L
-#define        BUTTON2_RELEASED        000000000100L
-#define        BUTTON2_PRESSED         000000000200L
-#define        BUTTON2_CLICKED         000000000400L
-#define        BUTTON2_DOUBLE_CLICKED  000000001000L
-#define        BUTTON2_TRIPLE_CLICKED  000000002000L
-#define BUTTON2_RESERVED_EVENT 000000004000L
-#define        BUTTON3_RELEASED        000000010000L
-#define        BUTTON3_PRESSED         000000020000L
-#define        BUTTON3_CLICKED         000000040000L
-#define        BUTTON3_DOUBLE_CLICKED  000000100000L
-#define        BUTTON3_TRIPLE_CLICKED  000000200000L
-#define BUTTON3_RESERVED_EVENT 000000400000L
-#define        BUTTON4_RELEASED        000001000000L
-#define        BUTTON4_PRESSED         000002000000L
-#define        BUTTON4_CLICKED         000004000000L
-#define        BUTTON4_DOUBLE_CLICKED  000010000000L
-#define        BUTTON4_TRIPLE_CLICKED  000020000000L
-#define BUTTON4_RESERVED_EVENT 000040000000L
-#define BUTTON_CTRL            000100000000L
-#define BUTTON_SHIFT           000200000000L
-#define BUTTON_ALT             000400000000L
-#define        ALL_MOUSE_EVENTS        000777777777L
-#define        REPORT_MOUSE_POSITION   001000000000L
-
-/* macros to extract single event-bits from masks */
-#define        BUTTON_RELEASE(e, x)            ((e) & (001 << (6 * ((x) - 1))))
-#define        BUTTON_PRESS(e, x)              ((e) & (002 << (6 * ((x) - 1))))
-#define        BUTTON_CLICK(e, x)              ((e) & (004 << (6 * ((x) - 1))))
-#define        BUTTON_DOUBLE_CLICK(e, x)       ((e) & (010 << (6 * ((x) - 1))))
-#define        BUTTON_TRIPLE_CLICK(e, x)       ((e) & (020 << (6 * ((x) - 1))))
-#define        BUTTON_RESERVED_EVENT(e, x)     ((e) & (040 << (6 * ((x) - 1))))
-
-typedef unsigned long mmask_t;
+#if !@HAVE_VSSCANF@
+#define vsscanf(a,b,c) _nc_vsscanf(a,b,c)
+NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list);
+#endif
 
-typedef struct
-{
-    short id;          /* ID to distinguish multiple devices */
-    int x, y, z;       /* event coordinates (character-cell) */
-    mmask_t bstate;    /* button state bits */
-}
-MEVENT;
-
-extern int getmouse(MEVENT *);
-extern int ungetmouse(MEVENT *);
-extern mmask_t mousemask(mmask_t, mmask_t *);
-extern bool wenclose(WINDOW *, int, int);
-extern int mouseinterval(int);
-
-/* other non-XSI functions */
-
-extern int mcprint(char *, int);       /* direct data to printer */
-extern int has_key(int);               /* do we have given key? */
-
-/* Debugging : use with libncurses_g.a */
-
-extern void _tracef(const char *, ...) GCC_PRINTFLIKE(1,2);
-extern void _tracedump(const char *, WINDOW *);
-extern char *_traceattr(attr_t);
-extern char *_traceattr2(int, chtype);
-extern char *_tracebits(void);
-extern char *_tracechar(const unsigned char);
-extern char *_tracechtype(chtype);
-extern char *_tracechtype2(int, chtype);
-extern char *_tracemouse(const MEVENT *);
-extern void trace(const unsigned int);
-
-/* trace masks */
-#define TRACE_DISABLE  0x0000  /* turn off tracing */
-#define TRACE_TIMES    0x0001  /* trace user and system times of updates */
-#define TRACE_TPUTS    0x0002  /* trace tputs calls */
-#define TRACE_UPDATE   0x0004  /* trace update actions, old & new screens */
-#define TRACE_MOVE     0x0008  /* trace cursor moves and scrolls */
-#define TRACE_CHARPUT  0x0010  /* trace all character outputs */
-#define TRACE_ORDINARY 0x001F  /* trace all update actions */
-#define TRACE_CALLS    0x0020  /* trace all curses calls */
-#define TRACE_VIRTPUT  0x0040  /* trace virtual character puts */
-#define TRACE_IEVENT   0x0080  /* trace low-level input processing */
-#define TRACE_BITS     0x0100  /* trace state of TTY control bits */
-#define TRACE_ICALLS   0x0200  /* trace internal/nested calls */
-#define TRACE_CCALLS   0x0400  /* trace per-character calls */
-#define TRACE_MAXIMUM  0xffff  /* maximum trace level */
-
-#if defined(TRACE) || defined(NCURSES_TEST)
-extern int _nc_optimize_enable;                /* enable optimizations */
-#define OPTIMIZE_MVCUR         0x01    /* cursor movement optimization */
-#define OPTIMIZE_HASHMAP       0x02    /* diff hashing to detect scrolls */
-#define OPTIMIZE_SCROLL                0x04    /* scroll optimization */
-#define OPTIMIZE_ALL           0xff    /* enable all optimizations (dflt) */
+/*
+ * These macros are extensions - not in X/Open Curses.
+ */
+#if @NCURSES_EXT_FUNCS@
+#if !NCURSES_OPAQUE
+#define is_cleared(win)                (NCURSES_OK_ADDR(win) ? (win)->_clear : FALSE)
+#define is_idcok(win)          (NCURSES_OK_ADDR(win) ? (win)->_idcok : FALSE)
+#define is_idlok(win)          (NCURSES_OK_ADDR(win) ? (win)->_idlok : FALSE)
+#define is_immedok(win)                (NCURSES_OK_ADDR(win) ? (win)->_immed : FALSE)
+#define is_keypad(win)         (NCURSES_OK_ADDR(win) ? (win)->_use_keypad : FALSE)
+#define is_leaveok(win)                (NCURSES_OK_ADDR(win) ? (win)->_leaveok : FALSE)
+#define is_nodelay(win)                (NCURSES_OK_ADDR(win) ? ((win)->_delay == 0) : FALSE)
+#define is_notimeout(win)      (NCURSES_OK_ADDR(win) ? (win)->_notimeout : FALSE)
+#define is_pad(win)            (NCURSES_OK_ADDR(win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
+#define is_scrollok(win)       (NCURSES_OK_ADDR(win) ? (win)->_scroll : FALSE)
+#define is_subwin(win)         (NCURSES_OK_ADDR(win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
+#define is_syncok(win)         (NCURSES_OK_ADDR(win) ? (win)->_sync : FALSE)
+#define wgetdelay(win)         (NCURSES_OK_ADDR(win) ? (win)->_delay : 0)
+#define wgetparent(win)                (NCURSES_OK_ADDR(win) ? (win)->_parent : 0)
+#define wgetscrreg(win,t,b)    (NCURSES_OK_ADDR(win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
+#endif
 #endif
 
-#ifdef __cplusplus
-}
+#endif /* NCURSES_NOMACROS */
+
+/*
+ * Public variables.
+ *
+ * Notes:
+ *     a. ESCDELAY was an undocumented feature under AIX curses.
+ *        It gives the ESC expire time in milliseconds.
+ *     b. ttytype is needed for backward compatibility
+ */
+#if NCURSES_REENTRANT
+
+NCURSES_WRAPPED_VAR(WINDOW *, curscr);
+NCURSES_WRAPPED_VAR(WINDOW *, newscr);
+NCURSES_WRAPPED_VAR(WINDOW *, stdscr);
+NCURSES_WRAPPED_VAR(char *, ttytype);
+NCURSES_WRAPPED_VAR(int, COLORS);
+NCURSES_WRAPPED_VAR(int, COLOR_PAIRS);
+NCURSES_WRAPPED_VAR(int, COLS);
+NCURSES_WRAPPED_VAR(int, ESCDELAY);
+NCURSES_WRAPPED_VAR(int, LINES);
+NCURSES_WRAPPED_VAR(int, TABSIZE);
+
+#define curscr      NCURSES_PUBLIC_VAR(curscr())
+#define newscr      NCURSES_PUBLIC_VAR(newscr())
+#define stdscr      NCURSES_PUBLIC_VAR(stdscr())
+#define ttytype     NCURSES_PUBLIC_VAR(ttytype())
+#define COLORS      NCURSES_PUBLIC_VAR(COLORS())
+#define COLOR_PAIRS NCURSES_PUBLIC_VAR(COLOR_PAIRS())
+#define COLS        NCURSES_PUBLIC_VAR(COLS())
+#define ESCDELAY    NCURSES_PUBLIC_VAR(ESCDELAY())
+#define LINES       NCURSES_PUBLIC_VAR(LINES())
+#define TABSIZE     NCURSES_PUBLIC_VAR(TABSIZE())
+
+#else
+
+extern NCURSES_EXPORT_VAR(WINDOW *) curscr;
+extern NCURSES_EXPORT_VAR(WINDOW *) newscr;
+extern NCURSES_EXPORT_VAR(WINDOW *) stdscr;
+extern NCURSES_EXPORT_VAR(char) ttytype[];
+extern NCURSES_EXPORT_VAR(int) COLORS;
+extern NCURSES_EXPORT_VAR(int) COLOR_PAIRS;
+extern NCURSES_EXPORT_VAR(int) COLS;
+extern NCURSES_EXPORT_VAR(int) ESCDELAY;
+extern NCURSES_EXPORT_VAR(int) LINES;
+extern NCURSES_EXPORT_VAR(int) TABSIZE;
+
 #endif
 
-#endif /* __NCURSES_H */
+/*
+ * Pseudo-character tokens outside ASCII range.  The curses wgetch() function
+ * will return any given one of these only if the corresponding k- capability
+ * is defined in your terminal's terminfo entry.
+ *
+ * Some keys (KEY_A1, etc) are arranged like this:
+ *     a1     up    a3
+ *     left   b2    right
+ *     c1     down  c3
+ *
+ * A few key codes do not depend upon the terminfo entry.
+ */
+#define KEY_CODE_YES   0400            /* A wchar_t contains a key code */
+#define KEY_MIN                0401            /* Minimum curses key */
+#define KEY_BREAK      0401            /* Break key (unreliable) */
+#define KEY_SRESET     0530            /* Soft (partial) reset (unreliable) */
+#define KEY_RESET      0531            /* Reset or hard reset (unreliable) */