Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-19 08:39:52

0001 /****************************************************************************
0002  * Copyright 2018-2024,2025 Thomas E. Dickey                                *
0003  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
0004  *                                                                          *
0005  * Permission is hereby granted, free of charge, to any person obtaining a  *
0006  * copy of this software and associated documentation files (the            *
0007  * "Software"), to deal in the Software without restriction, including      *
0008  * without limitation the rights to use, copy, modify, merge, publish,      *
0009  * distribute, distribute with modifications, sublicense, and/or sell       *
0010  * copies of the Software, and to permit persons to whom the Software is    *
0011  * furnished to do so, subject to the following conditions:                 *
0012  *                                                                          *
0013  * The above copyright notice and this permission notice shall be included  *
0014  * in all copies or substantial portions of the Software.                   *
0015  *                                                                          *
0016  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
0017  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
0018  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
0019  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
0020  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
0021  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
0022  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
0023  *                                                                          *
0024  * Except as contained in this notice, the name(s) of the above copyright   *
0025  * holders shall not be used in advertising or otherwise to promote the     *
0026  * sale, use or other dealings in this Software without prior written       *
0027  * authorization.                                                           *
0028  ****************************************************************************/
0029 
0030 /****************************************************************************
0031  *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
0032  *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
0033  *     and: Thomas E. Dickey                        1996-on                 *
0034  ****************************************************************************/
0035 
0036 /* $Id: curses.h.in,v 1.296 2025/07/05 12:39:32 Branden.Robinson Exp $ */
0037 
0038 #ifndef __NCURSES_H
0039 #define __NCURSES_H
0040 
0041 /*
0042  The symbols beginning NCURSES_ or USE_ are configuration choices.
0043  A few of the former can be overridden by applications at compile-time.
0044  Most of the others correspond to configure-script options (or checks
0045  by the configure-script for features of the system on which it is built).
0046 
0047  These symbols can be overridden by applications at compile-time:
0048  NCURSES_NOMACROS suppresses macro definitions in favor of functions
0049  NCURSES_WATTR_MACROS suppresses wattr_* macro definitions
0050  NCURSES_WIDECHAR is an alternative for declaring wide-character functions.
0051 
0052  These symbols are used only when building ncurses:
0053  NCURSES_ATTR_T
0054  NCURSES_FIELD_INTERNALS
0055  NCURSES_INTERNALS
0056 
0057  These symbols are set by the configure script:
0058  NCURSES_ENABLE_STDBOOL_H
0059  NCURSES_EXPANDED
0060  NCURSES_EXT_COLORS
0061  NCURSES_EXT_FUNCS
0062  NCURSES_EXT_PUTWIN
0063  NCURSES_NO_PADDING
0064  NCURSES_OSPEED_COMPAT
0065  NCURSES_PATHSEP
0066  NCURSES_REENTRANT
0067  NCURSES_SIGWINCH
0068  */
0069 
0070 #define CURSES 1
0071 #define CURSES_H 1
0072 
0073 /* These are defined only in curses.h, and are used for conditional compiles */
0074 #define NCURSES_VERSION_MAJOR 6
0075 #define NCURSES_VERSION_MINOR 5
0076 #define NCURSES_VERSION_PATCH 20250705
0077 
0078 /* This is defined in more than one ncurses header, for identification */
0079 #undef  NCURSES_VERSION
0080 #define NCURSES_VERSION "6.5"
0081 
0082 /*
0083  * Identify the mouse encoding version.
0084  */
0085 #define NCURSES_MOUSE_VERSION 2
0086 
0087 /*
0088  * Definitions to facilitate DLL's.
0089  */
0090 #include <ncursesw/ncurses_dll.h>
0091 
0092 /*
0093  * Extra headers.
0094  */
0095 #if 1
0096 #include <stdint.h>
0097 #endif
0098 
0099 #ifdef __cplusplus
0100 #else
0101 #if 0
0102 #include <stdnoreturn.h>
0103 #undef GCC_NORETURN
0104 #define GCC_NORETURN _Noreturn
0105 #endif
0106 #endif
0107 
0108 /*
0109  * User-definable tweak to disable the include of <stdbool.h>.
0110  */
0111 #ifndef NCURSES_ENABLE_STDBOOL_H
0112 #define NCURSES_ENABLE_STDBOOL_H 1
0113 #endif
0114 
0115 /*
0116  * NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses
0117  * configured using --disable-macros.
0118  */
0119 #ifndef NCURSES_ATTR_T
0120 #define NCURSES_ATTR_T int
0121 #endif
0122 
0123 /*
0124  * Expands to 'const' if ncurses is configured using --enable-const.  Note that
0125  * doing so makes it incompatible with other implementations of X/Open Curses.
0126  */
0127 #undef  NCURSES_CONST
0128 #define NCURSES_CONST const /* for old compilers */
0129 
0130 #undef NCURSES_INLINE
0131 #define NCURSES_INLINE inline   /* for old compilers */
0132 
0133 /*
0134  * The standard type used for color values, and for color-pairs.  The latter
0135  * allows the curses library to enumerate the combinations of foreground and
0136  * background colors used by an application, and is normally the product of the
0137  * total foreground and background colors.
0138  *
0139  * X/Open uses "short" for both of these types, ultimately because they are
0140  * numbers from the SVr4 terminal database, which uses 16-bit signed values.
0141  */
0142 #undef  NCURSES_COLOR_T
0143 #define NCURSES_COLOR_T short
0144 
0145 #undef  NCURSES_PAIRS_T
0146 #define NCURSES_PAIRS_T short
0147 
0148 /*
0149  * Definitions used to make WINDOW and similar structs opaque.
0150  */
0151 #ifndef NCURSES_INTERNALS
0152 #define NCURSES_OPAQUE       1
0153 #define NCURSES_OPAQUE_FORM  1
0154 #define NCURSES_OPAQUE_MENU  1
0155 #define NCURSES_OPAQUE_PANEL 1
0156 #endif
0157 
0158 /*
0159  * Definition used to optionally suppress wattr* macros to help with the
0160  * transition from ncurses5 to ncurses6 by allowing the header files to
0161  * be shared across development packages for ncursesw in both ABIs.
0162  */
0163 #ifndef NCURSES_WATTR_MACROS
0164 #define NCURSES_WATTR_MACROS 0
0165 #endif
0166 
0167 /*
0168  * The reentrant code relies on the opaque setting, but adds features.
0169  */
0170 #ifndef NCURSES_REENTRANT
0171 #define NCURSES_REENTRANT 0
0172 #endif
0173 
0174 /*
0175  * KEY_RESIZE is an extended feature that relies upon the SIGWINCH handler
0176  * in ncurses.
0177  */
0178 #if 1   /* NCURSES_EXT_FUNCS */
0179 #ifndef NCURSES_SIGWINCH
0180 #define NCURSES_SIGWINCH 1
0181 #endif
0182 #else
0183 #undef NCURSES_SIGWINCH
0184 #define NCURSES_SIGWINCH 0
0185 #endif /* NCURSES_EXT_FUNCS */
0186 
0187 /*
0188  * In certain environments, we must work around linker problems for data
0189  */
0190 #undef NCURSES_BROKEN_LINKER
0191 #if 0
0192 #define NCURSES_BROKEN_LINKER 1
0193 #endif
0194 
0195 /*
0196  * Control whether bindings for interop support are added.
0197  */
0198 #undef  NCURSES_INTEROP_FUNCS
0199 #define NCURSES_INTEROP_FUNCS 1
0200 
0201 /*
0202  * The internal type used for window dimensions.
0203  */
0204 #undef  NCURSES_SIZE_T
0205 #define NCURSES_SIZE_T short
0206 
0207 /*
0208  * Control whether tparm() supports varargs or fixed-parameter list.
0209  */
0210 #undef NCURSES_TPARM_VARARGS
0211 #define NCURSES_TPARM_VARARGS 1
0212 
0213 /*
0214  * Control type used for tparm's arguments.  While X/Open equates long and
0215  * char* values, this is not always workable for 64-bit platforms.
0216  */
0217 #undef NCURSES_TPARM_ARG
0218 #define NCURSES_TPARM_ARG intptr_t
0219 
0220 /*
0221  * Control whether ncurses uses wcwidth() for checking width of line-drawing
0222  * characters.
0223  */
0224 #undef NCURSES_WCWIDTH_GRAPHICS
0225 #define NCURSES_WCWIDTH_GRAPHICS 1
0226 
0227 /*
0228  * NCURSES_CH_T is used in building the library, but not used otherwise in
0229  * this header file, since that would make the normal/wide-character versions
0230  * of the header incompatible.
0231  */
0232 #undef  NCURSES_CH_T
0233 #define NCURSES_CH_T cchar_t
0234 
0235 #if 1 /* cf_cv_enable_lp64 */ && defined(_LP64)
0236 typedef unsigned chtype;
0237 typedef unsigned mmask_t;
0238 #else
0239 typedef uint32_t chtype;
0240 typedef uint32_t mmask_t;
0241 #endif
0242 
0243 /*
0244  * We need FILE, etc.  Include this before checking any feature symbols.
0245  */
0246 #include <stdio.h>
0247 
0248 /*
0249  * With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
0250  * conflicting) when _XOPEN_SOURCE is 500 or greater.  If NCURSES_WIDECHAR is
0251  * not already defined, e.g., if the platform relies upon nonstandard feature
0252  * test macros, define it at this point if the standard feature test macros
0253  * indicate that it should be defined.
0254  */
0255 #ifndef NCURSES_WIDECHAR
0256 #if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
0257 #define NCURSES_WIDECHAR 1
0258 #else
0259 #define NCURSES_WIDECHAR 0
0260 #endif
0261 #endif /* NCURSES_WIDECHAR */
0262 
0263 #include <stdarg.h> /* we need va_list */
0264 #if NCURSES_WIDECHAR
0265 #include <stddef.h> /* we want wchar_t */
0266 #endif
0267 
0268 /* X/Open and SVr4 specify that curses implements 'bool'.  However, C++ may also
0269  * implement it.  If so, we must use the C++ compiler's type to avoid conflict
0270  * with other interfaces.
0271  *
0272  * A further complication is that <stdbool.h> may declare 'bool' to be a
0273  * different type, such as an enum which is not necessarily compatible with
0274  * C++.  If we have <stdbool.h>, make 'bool' a macro, so users may #undef it.
0275  * Otherwise, let it remain a typedef to avoid conflicts with other #define's.
0276  * In either case, make a typedef for NCURSES_BOOL which can be used if needed
0277  * from either C or C++.
0278  */
0279 
0280 #undef TRUE
0281 #define TRUE    1
0282 
0283 #undef FALSE
0284 #define FALSE   0
0285 
0286 typedef unsigned char NCURSES_BOOL;
0287 
0288 #if defined(__cplusplus)    /* __cplusplus, etc. */
0289 
0290 /* use the C++ compiler's bool type */
0291 #define NCURSES_BOOL bool
0292 
0293 #else           /* c89, c99, etc. */
0294 
0295 #if NCURSES_ENABLE_STDBOOL_H
0296 #include <stdbool.h>
0297 /* use whatever the C compiler decides bool really is */
0298 #define NCURSES_BOOL bool
0299 #elif !defined(__cplusplus) && !0 /* USE_BUILTIN_BOOL */
0300 /* there is no predefined bool - use our own */
0301 #undef bool
0302 #define bool NCURSES_BOOL
0303 #endif
0304 
0305 #endif /* !__cplusplus, etc. */
0306 
0307 #ifdef __cplusplus
0308 extern "C" {
0309 #define NCURSES_CAST(type,value) static_cast<type>(value)
0310 #else
0311 #define NCURSES_CAST(type,value) (type)(value)
0312 #endif
0313 
0314 #define NCURSES_OK_ADDR(p) (NULL != NCURSES_CAST(const void *, (p)))
0315 
0316 /*
0317  * X/Open attributes.  In the ncurses implementation, they are identical to the
0318  * A_ attributes.
0319  */
0320 #define WA_ATTRIBUTES   A_ATTRIBUTES
0321 #define WA_NORMAL   A_NORMAL
0322 #define WA_STANDOUT A_STANDOUT
0323 #define WA_UNDERLINE    A_UNDERLINE
0324 #define WA_REVERSE  A_REVERSE
0325 #define WA_BLINK    A_BLINK
0326 #define WA_DIM      A_DIM
0327 #define WA_BOLD     A_BOLD
0328 #define WA_ALTCHARSET   A_ALTCHARSET
0329 #define WA_INVIS    A_INVIS
0330 #define WA_PROTECT  A_PROTECT
0331 #define WA_HORIZONTAL   A_HORIZONTAL
0332 #define WA_LEFT     A_LEFT
0333 #define WA_LOW      A_LOW
0334 #define WA_RIGHT    A_RIGHT
0335 #define WA_TOP      A_TOP
0336 #define WA_VERTICAL A_VERTICAL
0337 
0338 #if 1
0339 #define WA_ITALIC   A_ITALIC    /* ncurses extension */
0340 #endif
0341 
0342 /* colors */
0343 #define COLOR_BLACK 0
0344 #define COLOR_RED   1
0345 #define COLOR_GREEN 2
0346 #define COLOR_YELLOW    3
0347 #define COLOR_BLUE  4
0348 #define COLOR_MAGENTA   5
0349 #define COLOR_CYAN  6
0350 #define COLOR_WHITE 7
0351 
0352 /* line graphics */
0353 
0354 #if 0 /* BROKEN_LINKER */ || NCURSES_REENTRANT
0355 NCURSES_WRAPPED_VAR(chtype*, acs_map);
0356 #define acs_map NCURSES_PUBLIC_VAR(acs_map())
0357 #else
0358 extern NCURSES_EXPORT_VAR(chtype) acs_map[];
0359 #endif
0360 
0361 #define NCURSES_ACS(c)  (acs_map[NCURSES_CAST(unsigned char,(c))])
0362 
0363 /* VT100 symbols begin here */
0364 #define ACS_ULCORNER    NCURSES_ACS('l') /* upper left corner */
0365 #define ACS_LLCORNER    NCURSES_ACS('m') /* lower left corner */
0366 #define ACS_URCORNER    NCURSES_ACS('k') /* upper right corner */
0367 #define ACS_LRCORNER    NCURSES_ACS('j') /* lower right corner */
0368 #define ACS_LTEE    NCURSES_ACS('t') /* tee pointing right */
0369 #define ACS_RTEE    NCURSES_ACS('u') /* tee pointing left */
0370 #define ACS_BTEE    NCURSES_ACS('v') /* tee pointing up */
0371 #define ACS_TTEE    NCURSES_ACS('w') /* tee pointing down */
0372 #define ACS_HLINE   NCURSES_ACS('q') /* horizontal line */
0373 #define ACS_VLINE   NCURSES_ACS('x') /* vertical line */
0374 #define ACS_PLUS    NCURSES_ACS('n') /* large plus or crossover */
0375 #define ACS_S1      NCURSES_ACS('o') /* scan line 1 */
0376 #define ACS_S9      NCURSES_ACS('s') /* scan line 9 */
0377 #define ACS_DIAMOND NCURSES_ACS('`') /* diamond */
0378 #define ACS_CKBOARD NCURSES_ACS('a') /* checker board (stipple) */
0379 #define ACS_DEGREE  NCURSES_ACS('f') /* degree symbol */
0380 #define ACS_PLMINUS NCURSES_ACS('g') /* plus/minus */
0381 #define ACS_BULLET  NCURSES_ACS('~') /* bullet */
0382 /* Teletype 5410v1 symbols begin here */
0383 #define ACS_LARROW  NCURSES_ACS(',') /* arrow pointing left */
0384 #define ACS_RARROW  NCURSES_ACS('+') /* arrow pointing right */
0385 #define ACS_DARROW  NCURSES_ACS('.') /* arrow pointing down */
0386 #define ACS_UARROW  NCURSES_ACS('-') /* arrow pointing up */
0387 #define ACS_BOARD   NCURSES_ACS('h') /* board of squares */
0388 #define ACS_LANTERN NCURSES_ACS('i') /* lantern symbol */
0389 #define ACS_BLOCK   NCURSES_ACS('0') /* solid square block */
0390 /*
0391  * These aren't documented, but a lot of System Vs have them anyway
0392  * (you can spot pprryyzz{{||}} in a lot of AT&T terminfo strings).
0393  * The ACS_names may not match AT&T's, our source didn't know them.
0394  */
0395 #define ACS_S3      NCURSES_ACS('p') /* scan line 3 */
0396 #define ACS_S7      NCURSES_ACS('r') /* scan line 7 */
0397 #define ACS_LEQUAL  NCURSES_ACS('y') /* less/equal */
0398 #define ACS_GEQUAL  NCURSES_ACS('z') /* greater/equal */
0399 #define ACS_PI      NCURSES_ACS('{') /* Pi */
0400 #define ACS_NEQUAL  NCURSES_ACS('|') /* not equal */
0401 #define ACS_STERLING    NCURSES_ACS('}') /* UK pound sign */
0402 
0403 /*
0404  * Line drawing ACS names are of the form ACS_trbl, where t is the top, r
0405  * is the right, b is the bottom, and l is the left.  t, r, b, and l might
0406  * be B (blank), S (single), D (double), or T (thick).  The subset defined
0407  * here only uses B and S.
0408  */
0409 #define ACS_BSSB    ACS_ULCORNER
0410 #define ACS_SSBB    ACS_LLCORNER
0411 #define ACS_BBSS    ACS_URCORNER
0412 #define ACS_SBBS    ACS_LRCORNER
0413 #define ACS_SBSS    ACS_RTEE
0414 #define ACS_SSSB    ACS_LTEE
0415 #define ACS_SSBS    ACS_BTEE
0416 #define ACS_BSSS    ACS_TTEE
0417 #define ACS_BSBS    ACS_HLINE
0418 #define ACS_SBSB    ACS_VLINE
0419 #define ACS_SSSS    ACS_PLUS
0420 
0421 #undef  ERR
0422 #define ERR     (-1)
0423 
0424 #undef  OK
0425 #define OK      (0)
0426 
0427 /* values for the _flags member */
0428 #define _SUBWIN         0x01    /* is this a sub-window? */
0429 #define _ENDLINE        0x02    /* is the window flush right? */
0430 #define _FULLWIN        0x04    /* is the window full-screen? */
0431 #define _SCROLLWIN      0x08    /* bottom edge is at screen bottom? */
0432 #define _ISPAD          0x10    /* is this window a pad? */
0433 #define _HASMOVED       0x20    /* has cursor moved since last refresh? */
0434 #define _WRAPPED        0x40    /* cursor was just wrappped */
0435 
0436 /*
0437  * this value is used in the firstchar and lastchar fields to mark
0438  * unchanged lines
0439  */
0440 #define _NOCHANGE       -1
0441 
0442 /*
0443  * this value is used in the oldindex field to mark lines created by insertions
0444  * and scrolls.
0445  */
0446 #define _NEWINDEX   -1
0447 
0448 #ifdef NCURSES_INTERNALS
0449 #undef SCREEN
0450 #define SCREEN struct screen
0451 SCREEN;
0452 #else
0453 typedef struct screen  SCREEN;
0454 #endif
0455 
0456 typedef struct _win_st WINDOW;
0457 
0458 typedef chtype  attr_t;     /* ...must be at least as wide as chtype */
0459 
0460 #if NCURSES_WIDECHAR
0461 
0462 #if 0 /* NCURSES_LIBUTF8 */
0463 #ifdef mblen            /* libutf8.h defines it w/o undefining first */
0464 #undef mblen
0465 #endif
0466 #include <libutf8.h>
0467 #endif
0468 
0469 #if 1 /* NEED_WCHAR_H */
0470 #include <wchar.h>      /* ...to get mbstate_t, etc. */
0471 #endif
0472 
0473 #if 0 /* NCURSES_WCHAR_T */
0474 typedef unsigned short wchar_t1;
0475 #endif
0476 
0477 #if 0 /* NCURSES_WINT_T */
0478 typedef unsigned int wint_t1;
0479 #endif
0480 
0481 /*
0482  * cchar_t stores an array of CCHARW_MAX wide characters.  The first is
0483  * normally a spacing character.  The others are non-spacing.  If those
0484  * (spacing and nonspacing) do not fill the array, a null L'\0' follows.
0485  * Otherwise, a null is assumed to follow when extracting via getcchar().
0486  */
0487 #define CCHARW_MAX  5
0488 typedef struct
0489 {
0490     attr_t  attr;
0491     wchar_t chars[CCHARW_MAX];
0492 #if 1   /* NCURSES_EXT_COLORS */
0493 #undef NCURSES_EXT_COLORS
0494 #define NCURSES_EXT_COLORS 20250705
0495     int     ext_color;  /* color pair, must be more than 16-bits */
0496 #if 0   /* NCURSES_RGB_COLORS */
0497     int     rgb_color;  /* extra data for direct-color (rgb) */
0498 #endif
0499 #endif /* NCURSES_EXT_COLORS */
0500 }
0501 cchar_t;
0502 
0503 #endif /* NCURSES_WIDECHAR */
0504 
0505 #if !NCURSES_OPAQUE
0506 struct ldat;
0507 
0508 struct _win_st
0509 {
0510     NCURSES_SIZE_T _cury, _curx; /* current cursor position */
0511 
0512     /* window location and size */
0513     NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
0514     NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */
0515 
0516     short   _flags;     /* window state flags */
0517 
0518     /* attribute tracking */
0519     attr_t  _attrs;     /* current attribute for non-space character */
0520     chtype  _bkgd;      /* current background char/attribute pair */
0521 
0522     /* option values set by user */
0523     bool    _notimeout; /* no time out on function-key entry? */
0524     bool    _clear;     /* consider all data in the window invalid? */
0525     bool    _leaveok;   /* OK to not reset cursor on exit? */
0526     bool    _scroll;    /* OK to scroll this window? */
0527     bool    _idlok;     /* OK to use insert/delete line? */
0528     bool    _idcok;     /* OK to use insert/delete char? */
0529     bool    _immed;     /* window in immed mode? (not yet used) */
0530     bool    _sync;      /* window in sync mode? */
0531     bool    _use_keypad;    /* process function keys into KEY_ symbols? */
0532     int _delay;     /* 0 = nodelay, <0 = blocking, >0 = delay */
0533 
0534     struct ldat *_line; /* the actual line data */
0535 
0536     /* global screen state */
0537     NCURSES_SIZE_T _regtop; /* top line of scrolling region */
0538     NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */
0539 
0540     /* these are used only if this is a sub-window */
0541     int _parx;      /* x coordinate of this window in parent */
0542     int _pary;      /* y coordinate of this window in parent */
0543     WINDOW  *_parent;   /* pointer to parent if a sub-window */
0544 
0545     /* these are used only if this is a pad */
0546     struct pdat
0547     {
0548         NCURSES_SIZE_T _pad_y,      _pad_x;
0549         NCURSES_SIZE_T _pad_top,    _pad_left;
0550         NCURSES_SIZE_T _pad_bottom, _pad_right;
0551     } _pad;
0552 
0553     NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
0554 
0555 #if NCURSES_WIDECHAR /* NCURSES_WIDECHAR */
0556     cchar_t  _bkgrnd;   /* current background char/attribute pair */
0557 #if 1
0558     int _color;     /* current color-pair for non-space character */
0559 #endif
0560 #endif
0561 };
0562 #endif /* NCURSES_OPAQUE */
0563 
0564 /*
0565  * GCC (and some other compilers) define '__attribute__'; we're using this
0566  * macro to alert the compiler to flag inconsistencies in printf/scanf-like
0567  * function calls.  Just in case '__attribute__' isn't defined, make a dummy.
0568  * Old versions of G++ do not accept it anyway, at least not consistently with
0569  * GCC.
0570  */
0571 #if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__))
0572 #define __attribute__(p) /* nothing */
0573 #endif
0574 
0575 /*
0576  * We cannot define these in ncurses_cfg.h, since they require parameters to be
0577  * passed (that is non-portable).
0578  */
0579 #ifndef GCC_PRINTFLIKE
0580 #ifndef printf
0581 #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
0582 #else
0583 #define GCC_PRINTFLIKE(fmt,var) /*nothing*/
0584 #endif
0585 #endif
0586 
0587 #ifndef GCC_SCANFLIKE
0588 #ifndef scanf
0589 #define GCC_SCANFLIKE(fmt,var)  __attribute__((format(scanf,fmt,var)))
0590 #else
0591 #define GCC_SCANFLIKE(fmt,var)  /*nothing*/
0592 #endif
0593 #endif
0594 
0595 #ifndef GCC_NORETURN
0596 #define GCC_NORETURN /* nothing */
0597 #endif
0598 
0599 #ifndef GCC_UNUSED
0600 #define GCC_UNUSED /* nothing */
0601 #endif
0602 
0603 #undef  GCC_DEPRECATED
0604 #if (__GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 >= 2)) && !defined(NCURSES_INTERNALS)
0605 #define GCC_DEPRECATED(msg) __attribute__((deprecated))
0606 #else
0607 #define GCC_DEPRECATED(msg) /* nothing */
0608 #endif
0609 
0610 /*
0611  * Curses uses a helper function.  Define our type for this to simplify
0612  * extending it for the sp-funcs feature.
0613  */
0614 typedef int (*NCURSES_OUTC)(int);
0615 
0616 /*
0617  * Function prototypes.  This is the complete X/Open Curses list of required
0618  * functions.  Those marked `generated' will have sources generated from the
0619  * macro definitions later in this file, in order to satisfy XPG4.2
0620  * requirements.
0621  */
0622 
0623 extern NCURSES_EXPORT(int) addch (const chtype);            /* generated */
0624 extern NCURSES_EXPORT(int) addchnstr (const chtype *, int);     /* generated */
0625 extern NCURSES_EXPORT(int) addchstr (const chtype *);           /* generated */
0626 extern NCURSES_EXPORT(int) addnstr (const char *, int);         /* generated */
0627 extern NCURSES_EXPORT(int) addstr (const char *);           /* generated */
0628 extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T);            /* generated */
0629 extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T);         /* generated */
0630 extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T);            /* generated */
0631 extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *);  /* generated */
0632 extern NCURSES_EXPORT(int) attr_off (attr_t, void *);           /* generated */
0633 extern NCURSES_EXPORT(int) attr_on (attr_t, void *);            /* generated */
0634 extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *);      /* generated */
0635 extern NCURSES_EXPORT(int) baudrate (void);             /* implemented */
0636 extern NCURSES_EXPORT(int) beep  (void);                /* implemented */
0637 extern NCURSES_EXPORT(int) bkgd (chtype);               /* generated */
0638 extern NCURSES_EXPORT(void) bkgdset (chtype);               /* generated */
0639 extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);    /* generated */
0640 extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype);      /* generated */
0641 extern NCURSES_EXPORT(bool) can_change_color (void);            /* implemented */
0642 extern NCURSES_EXPORT(int) cbreak (void);               /* implemented */
0643 extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *);  /* generated */
0644 extern NCURSES_EXPORT(int) clear (void);                /* generated */
0645 extern NCURSES_EXPORT(int) clearok (WINDOW *,bool);         /* implemented */
0646 extern NCURSES_EXPORT(int) clrtobot (void);             /* generated */
0647 extern NCURSES_EXPORT(int) clrtoeol (void);             /* generated */
0648 extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*);  /* implemented */
0649 extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*);           /* generated */
0650 extern NCURSES_EXPORT(int) COLOR_PAIR (int);                /* generated */
0651 extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int); /* implemented */
0652 extern NCURSES_EXPORT(int) curs_set (int);              /* implemented */
0653 extern NCURSES_EXPORT(int) def_prog_mode (void);            /* implemented */
0654 extern NCURSES_EXPORT(int) def_shell_mode (void);           /* implemented */
0655 extern NCURSES_EXPORT(int) delay_output (int);              /* implemented */
0656 extern NCURSES_EXPORT(int) delch (void);                /* generated */
0657 extern NCURSES_EXPORT(void) delscreen (SCREEN *);           /* implemented */
0658 extern NCURSES_EXPORT(int) delwin (WINDOW *);               /* implemented */
0659 extern NCURSES_EXPORT(int) deleteln (void);             /* generated */
0660 extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int);  /* implemented */
0661 extern NCURSES_EXPORT(int) doupdate (void);             /* implemented */
0662 extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *);          /* implemented */
0663 extern NCURSES_EXPORT(int) echo (void);                 /* implemented */
0664 extern NCURSES_EXPORT(int) echochar (const chtype);         /* generated */
0665 extern NCURSES_EXPORT(int) erase (void);                /* generated */
0666 extern NCURSES_EXPORT(int) endwin (void);               /* implemented */
0667 extern NCURSES_EXPORT(char) erasechar (void);               /* implemented */
0668 extern NCURSES_EXPORT(void) filter (void);              /* implemented */
0669 extern NCURSES_EXPORT(int) flash (void);                /* implemented */
0670 extern NCURSES_EXPORT(int) flushinp (void);             /* implemented */
0671 extern NCURSES_EXPORT(chtype) getbkgd (WINDOW *);           /* generated */
0672 extern NCURSES_EXPORT(int) getch (void);                /* generated */
0673 extern NCURSES_EXPORT(int) getnstr (char *, int);           /* generated */
0674 extern NCURSES_EXPORT(int) getstr (char *);             /* generated */
0675 extern NCURSES_EXPORT(WINDOW *) getwin (FILE *);            /* implemented */
0676 extern NCURSES_EXPORT(int) halfdelay (int);             /* implemented */
0677 extern NCURSES_EXPORT(bool) has_colors (void);              /* implemented */
0678 extern NCURSES_EXPORT(bool) has_ic (void);              /* implemented */
0679 extern NCURSES_EXPORT(bool) has_il (void);              /* implemented */
0680 extern NCURSES_EXPORT(int) hline (chtype, int);             /* generated */
0681 extern NCURSES_EXPORT(void) idcok (WINDOW *, bool);         /* implemented */
0682 extern NCURSES_EXPORT(int) idlok (WINDOW *, bool);          /* implemented */
0683 extern NCURSES_EXPORT(void) immedok (WINDOW *, bool);           /* implemented */
0684 extern NCURSES_EXPORT(chtype) inch (void);              /* generated */
0685 extern NCURSES_EXPORT(int) inchnstr (chtype *, int);            /* generated */
0686 extern NCURSES_EXPORT(int) inchstr (chtype *);              /* generated */
0687 extern NCURSES_EXPORT(WINDOW *) initscr (void);             /* implemented */
0688 extern NCURSES_EXPORT(int) init_color (NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T);    /* implemented */
0689 extern NCURSES_EXPORT(int) init_pair (NCURSES_PAIRS_T,NCURSES_COLOR_T,NCURSES_COLOR_T);     /* implemented */
0690 extern NCURSES_EXPORT(int) innstr (char *, int);            /* generated */
0691 extern NCURSES_EXPORT(int) insch (chtype);              /* generated */
0692 extern NCURSES_EXPORT(int) insdelln (int);              /* generated */
0693 extern NCURSES_EXPORT(int) insertln (void);             /* generated */
0694 extern NCURSES_EXPORT(int) insnstr (const char *, int);         /* generated */
0695 extern NCURSES_EXPORT(int) insstr (const char *);           /* generated */
0696 extern NCURSES_EXPORT(int) instr (char *);              /* generated */
0697 extern NCURSES_EXPORT(int) intrflush (WINDOW *,bool);           /* implemented */
0698 extern NCURSES_EXPORT(bool) isendwin (void);                /* implemented */
0699 extern NCURSES_EXPORT(bool) is_linetouched (WINDOW *,int);      /* implemented */
0700 extern NCURSES_EXPORT(bool) is_wintouched (WINDOW *);           /* implemented */
0701 extern NCURSES_EXPORT(NCURSES_CONST char *) keyname (int);      /* implemented */
0702 extern NCURSES_EXPORT(int) keypad (WINDOW *,bool);          /* implemented */
0703 extern NCURSES_EXPORT(char) killchar (void);                /* implemented */
0704 extern NCURSES_EXPORT(int) leaveok (WINDOW *,bool);         /* implemented */
0705 extern NCURSES_EXPORT(char *) longname (void);              /* implemented */
0706 extern NCURSES_EXPORT(int) meta (WINDOW *,bool);            /* implemented */
0707 extern NCURSES_EXPORT(int) move (int, int);             /* generated */
0708 extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);        /* generated */
0709 extern NCURSES_EXPORT(int) mvaddchnstr (int, int, const chtype *, int); /* generated */
0710 extern NCURSES_EXPORT(int) mvaddchstr (int, int, const chtype *);   /* generated */
0711 extern NCURSES_EXPORT(int) mvaddnstr (int, int, const char *, int); /* generated */
0712 extern NCURSES_EXPORT(int) mvaddstr (int, int, const char *);       /* generated */
0713 extern NCURSES_EXPORT(int) mvchgat (int, int, int, attr_t, NCURSES_PAIRS_T, const void *);  /* generated */
0714 extern NCURSES_EXPORT(int) mvcur (int,int,int,int);         /* implemented */
0715 extern NCURSES_EXPORT(int) mvdelch (int, int);              /* generated */
0716 extern NCURSES_EXPORT(int) mvderwin (WINDOW *, int, int);       /* implemented */
0717 extern NCURSES_EXPORT(int) mvgetch (int, int);              /* generated */
0718 extern NCURSES_EXPORT(int) mvgetnstr (int, int, char *, int);       /* generated */
0719 extern NCURSES_EXPORT(int) mvgetstr (int, int, char *);         /* generated */
0720 extern NCURSES_EXPORT(int) mvhline (int, int, chtype, int);     /* generated */
0721 extern NCURSES_EXPORT(chtype) mvinch (int, int);            /* generated */
0722 extern NCURSES_EXPORT(int) mvinchnstr (int, int, chtype *, int);    /* generated */
0723 extern NCURSES_EXPORT(int) mvinchstr (int, int, chtype *);      /* generated */
0724 extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);        /* generated */
0725 extern NCURSES_EXPORT(int) mvinsch (int, int, chtype);          /* generated */
0726 extern NCURSES_EXPORT(int) mvinsnstr (int, int, const char *, int); /* generated */
0727 extern NCURSES_EXPORT(int) mvinsstr (int, int, const char *);       /* generated */
0728 extern NCURSES_EXPORT(int) mvinstr (int, int, char *);          /* generated */
0729 extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...)     /* implemented */
0730         GCC_PRINTFLIKE(3,4);
0731 extern NCURSES_EXPORT(int) mvscanw (int,int, const char *,...)      /* implemented */
0732         GCC_SCANFLIKE(3,4);
0733 extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int);     /* generated */
0734 extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype); /* generated */
0735 extern NCURSES_EXPORT(int) mvwaddchnstr (WINDOW *, int, int, const chtype *, int);/* generated */
0736 extern NCURSES_EXPORT(int) mvwaddchstr (WINDOW *, int, int, const chtype *);    /* generated */
0737 extern NCURSES_EXPORT(int) mvwaddnstr (WINDOW *, int, int, const char *, int);  /* generated */
0738 extern NCURSES_EXPORT(int) mvwaddstr (WINDOW *, int, int, const char *);    /* generated */
0739 extern NCURSES_EXPORT(int) mvwchgat (WINDOW *, int, int, int, attr_t, NCURSES_PAIRS_T, const void *);/* generated */
0740 extern NCURSES_EXPORT(int) mvwdelch (WINDOW *, int, int);       /* generated */
0741 extern NCURSES_EXPORT(int) mvwgetch (WINDOW *, int, int);       /* generated */
0742 extern NCURSES_EXPORT(int) mvwgetnstr (WINDOW *, int, int, char *, int);    /* generated */
0743 extern NCURSES_EXPORT(int) mvwgetstr (WINDOW *, int, int, char *);  /* generated */
0744 extern NCURSES_EXPORT(int) mvwhline (WINDOW *, int, int, chtype, int);  /* generated */
0745 extern NCURSES_EXPORT(int) mvwin (WINDOW *,int,int);            /* implemented */
0746 extern NCURSES_EXPORT(chtype) mvwinch (WINDOW *, int, int);         /* generated */
0747 extern NCURSES_EXPORT(int) mvwinchnstr (WINDOW *, int, int, chtype *, int); /* generated */
0748 extern NCURSES_EXPORT(int) mvwinchstr (WINDOW *, int, int, chtype *);       /* generated */
0749 extern NCURSES_EXPORT(int) mvwinnstr (WINDOW *, int, int, char *, int);     /* generated */
0750 extern NCURSES_EXPORT(int) mvwinsch (WINDOW *, int, int, chtype);       /* generated */
0751 extern NCURSES_EXPORT(int) mvwinsnstr (WINDOW *, int, int, const char *, int);  /* generated */
0752 extern NCURSES_EXPORT(int) mvwinsstr (WINDOW *, int, int, const char *);    /* generated */
0753 extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *);       /* generated */
0754 extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...)    /* implemented */
0755         GCC_PRINTFLIKE(4,5);
0756 extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, const char *,...)    /* implemented */
0757         GCC_SCANFLIKE(4,5);
0758 extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int);   /* generated */
0759 extern NCURSES_EXPORT(int) napms (int);                 /* implemented */
0760 extern NCURSES_EXPORT(WINDOW *) newpad (int,int);           /* implemented */
0761 extern NCURSES_EXPORT(SCREEN *) newterm (const char *,FILE *,FILE *);   /* implemented */
0762 extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int);       /* implemented */
0763 extern NCURSES_EXPORT(int) nl (void);                   /* implemented */
0764 extern NCURSES_EXPORT(int) nocbreak (void);             /* implemented */
0765 extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool);         /* implemented */
0766 extern NCURSES_EXPORT(int) noecho (void);               /* implemented */
0767 extern NCURSES_EXPORT(int) nonl (void);                 /* implemented */
0768 extern NCURSES_EXPORT(void) noqiflush (void);               /* implemented */
0769 extern NCURSES_EXPORT(int) noraw (void);                /* implemented */
0770 extern NCURSES_EXPORT(int) notimeout (WINDOW *,bool);           /* implemented */
0771 extern NCURSES_EXPORT(int) overlay (const WINDOW*,WINDOW *);        /* implemented */
0772 extern NCURSES_EXPORT(int) overwrite (const WINDOW*,WINDOW *);      /* implemented */
0773 extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*);        /* implemented */
0774 extern NCURSES_EXPORT(int) PAIR_NUMBER (int);               /* generated */
0775 extern NCURSES_EXPORT(int) pechochar (WINDOW *, const chtype);      /* implemented */
0776 extern NCURSES_EXPORT(int) pnoutrefresh (WINDOW*,int,int,int,int,int,int);/* implemented */
0777 extern NCURSES_EXPORT(int) prefresh (WINDOW *,int,int,int,int,int,int); /* implemented */
0778 extern NCURSES_EXPORT(int) printw (const char *,...)            /* implemented */
0779         GCC_PRINTFLIKE(1,2);
0780 extern NCURSES_EXPORT(int) putwin (WINDOW *, FILE *);           /* implemented */
0781 extern NCURSES_EXPORT(void) qiflush (void);             /* implemented */
0782 extern NCURSES_EXPORT(int) raw (void);                  /* implemented */
0783 extern NCURSES_EXPORT(int) redrawwin (WINDOW *);            /* generated */
0784 extern NCURSES_EXPORT(int) refresh (void);              /* generated */
0785 extern NCURSES_EXPORT(int) resetty (void);              /* implemented */
0786 extern NCURSES_EXPORT(int) reset_prog_mode (void);          /* implemented */
0787 extern NCURSES_EXPORT(int) reset_shell_mode (void);         /* implemented */
0788 extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int));    /* implemented */
0789 extern NCURSES_EXPORT(int) savetty (void);              /* implemented */
0790 extern NCURSES_EXPORT(int) scanw (const char *,...)         /* implemented */
0791         GCC_SCANFLIKE(1,2);
0792 extern NCURSES_EXPORT(int) scr_dump (const char *);         /* implemented */
0793 extern NCURSES_EXPORT(int) scr_init (const char *);         /* implemented */
0794 extern NCURSES_EXPORT(int) scrl (int);                  /* generated */
0795 extern NCURSES_EXPORT(int) scroll (WINDOW *);               /* generated */
0796 extern NCURSES_EXPORT(int) scrollok (WINDOW *,bool);            /* implemented */
0797 extern NCURSES_EXPORT(int) scr_restore (const char *);          /* implemented */
0798 extern NCURSES_EXPORT(int) scr_set (const char *);          /* implemented */
0799 extern NCURSES_EXPORT(int) setscrreg (int,int);             /* generated */
0800 extern NCURSES_EXPORT(SCREEN *) set_term (SCREEN *);            /* implemented */
0801 extern NCURSES_EXPORT(int) slk_attroff (const chtype);          /* implemented */
0802 extern NCURSES_EXPORT(int) slk_attr_off (const attr_t, void *);     /* generated:WIDEC */
0803 extern NCURSES_EXPORT(int) slk_attron (const chtype);           /* implemented */
0804 extern NCURSES_EXPORT(int) slk_attr_on (attr_t,void*);          /* generated:WIDEC */
0805 extern NCURSES_EXPORT(int) slk_attrset (const chtype);          /* implemented */
0806 extern NCURSES_EXPORT(attr_t) slk_attr (void);              /* implemented */
0807 extern NCURSES_EXPORT(int) slk_attr_set (const attr_t,NCURSES_PAIRS_T,void*);   /* implemented */
0808 extern NCURSES_EXPORT(int) slk_clear (void);                /* implemented */
0809 extern NCURSES_EXPORT(int) slk_color (NCURSES_PAIRS_T);             /* implemented */
0810 extern NCURSES_EXPORT(int) slk_init (int);              /* implemented */
0811 extern NCURSES_EXPORT(char *) slk_label (int);              /* implemented */
0812 extern NCURSES_EXPORT(int) slk_noutrefresh (void);          /* implemented */
0813 extern NCURSES_EXPORT(int) slk_refresh (void);              /* implemented */
0814 extern NCURSES_EXPORT(int) slk_restore (void);              /* implemented */
0815 extern NCURSES_EXPORT(int) slk_set (int,const char *,int);      /* implemented */
0816 extern NCURSES_EXPORT(int) slk_touch (void);                /* implemented */
0817 extern NCURSES_EXPORT(int) standout (void);             /* generated */
0818 extern NCURSES_EXPORT(int) standend (void);             /* generated */
0819 extern NCURSES_EXPORT(int) start_color (void);              /* implemented */
0820 extern NCURSES_EXPORT(WINDOW *) subpad (WINDOW *, int, int, int, int);  /* implemented */
0821 extern NCURSES_EXPORT(WINDOW *) subwin (WINDOW *, int, int, int, int);  /* implemented */
0822 extern NCURSES_EXPORT(int) syncok (WINDOW *, bool);         /* implemented */
0823 extern NCURSES_EXPORT(chtype) termattrs (void);             /* implemented */
0824 extern NCURSES_EXPORT(char *) termname (void);              /* implemented */
0825 extern NCURSES_EXPORT(void) timeout (int);              /* generated */
0826 extern NCURSES_EXPORT(int) touchline (WINDOW *, int, int);      /* generated */
0827 extern NCURSES_EXPORT(int) touchwin (WINDOW *);             /* generated */
0828 extern NCURSES_EXPORT(int) typeahead (int);             /* implemented */
0829 extern NCURSES_EXPORT(int) ungetch (int);               /* implemented */
0830 extern NCURSES_EXPORT(int) untouchwin (WINDOW *);           /* generated */
0831 extern NCURSES_EXPORT(void) use_env (bool);             /* implemented */
0832 extern NCURSES_EXPORT(void) use_tioctl (bool);              /* implemented */
0833 extern NCURSES_EXPORT(int) vidattr (chtype);                /* implemented */
0834 extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC);      /* implemented */
0835 extern NCURSES_EXPORT(int) vline (chtype, int);             /* generated */
0836 extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *, va_list) GCC_DEPRECATED(use vw_printw) /* implemented */
0837         GCC_PRINTFLIKE(2,0);
0838 extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *, va_list)  /* implemented */
0839         GCC_PRINTFLIKE(2,0);
0840 extern NCURSES_EXPORT(int) vwscanw (WINDOW *, const char *, va_list) GCC_DEPRECATED(use vw_scanw)   /* implemented */
0841         GCC_SCANFLIKE(2,0);
0842 extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, const char *, va_list)   /* implemented */
0843         GCC_SCANFLIKE(2,0);
0844 extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype);     /* implemented */
0845 extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int);    /* implemented */
0846 extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *);     /* generated */
0847 extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int);    /* implemented */
0848 extern NCURSES_EXPORT(int) waddstr (WINDOW *,const char *);     /* generated */
0849 extern NCURSES_EXPORT(int) wattron (WINDOW *, int);         /* generated */
0850 extern NCURSES_EXPORT(int) wattroff (WINDOW *, int);            /* generated */
0851 extern NCURSES_EXPORT(int) wattrset (WINDOW *, int);            /* generated */
0852 extern NCURSES_EXPORT(int) wattr_get (WINDOW *, attr_t *, NCURSES_PAIRS_T *, void *);   /* generated */
0853 extern NCURSES_EXPORT(int) wattr_on (WINDOW *, attr_t, void *);     /* implemented */
0854 extern NCURSES_EXPORT(int) wattr_off (WINDOW *, attr_t, void *);    /* implemented */
0855 extern NCURSES_EXPORT(int) wattr_set (WINDOW *, attr_t, NCURSES_PAIRS_T, void *);   /* generated */
0856 extern NCURSES_EXPORT(int) wbkgd (WINDOW *, chtype);            /* implemented */
0857 extern NCURSES_EXPORT(void) wbkgdset (WINDOW *,chtype);         /* implemented */
0858 extern NCURSES_EXPORT(int) wborder (WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);  /* implemented */
0859 extern NCURSES_EXPORT(int) wchgat (WINDOW *, int, attr_t, NCURSES_PAIRS_T, const void *);/* implemented */
0860 extern NCURSES_EXPORT(int) wclear (WINDOW *);               /* implemented */
0861 extern NCURSES_EXPORT(int) wclrtobot (WINDOW *);            /* implemented */
0862 extern NCURSES_EXPORT(int) wclrtoeol (WINDOW *);            /* implemented */
0863 extern NCURSES_EXPORT(int) wcolor_set (WINDOW*,NCURSES_PAIRS_T,void*);      /* implemented */
0864 extern NCURSES_EXPORT(void) wcursyncup (WINDOW *);          /* implemented */
0865 extern NCURSES_EXPORT(int) wdelch (WINDOW *);               /* implemented */
0866 extern NCURSES_EXPORT(int) wdeleteln (WINDOW *);            /* generated */
0867 extern NCURSES_EXPORT(int) wechochar (WINDOW *, const chtype);      /* implemented */
0868 extern NCURSES_EXPORT(int) werase (WINDOW *);               /* implemented */
0869 extern NCURSES_EXPORT(int) wgetch (WINDOW *);               /* implemented */
0870 extern NCURSES_EXPORT(int) wgetnstr (WINDOW *,char *,int);      /* implemented */
0871 extern NCURSES_EXPORT(int) wgetstr (WINDOW *, char *);          /* generated */
0872 extern NCURSES_EXPORT(int) whline (WINDOW *, chtype, int);      /* implemented */
0873 extern NCURSES_EXPORT(chtype) winch (WINDOW *);             /* implemented */
0874 extern NCURSES_EXPORT(int) winchnstr (WINDOW *, chtype *, int);     /* implemented */
0875 extern NCURSES_EXPORT(int) winchstr (WINDOW *, chtype *);       /* generated */
0876 extern NCURSES_EXPORT(int) winnstr (WINDOW *, char *, int);     /* implemented */
0877 extern NCURSES_EXPORT(int) winsch (WINDOW *, chtype);           /* implemented */
0878 extern NCURSES_EXPORT(int) winsdelln (WINDOW *,int);            /* implemented */
0879 extern NCURSES_EXPORT(int) winsertln (WINDOW *);            /* generated */
0880 extern NCURSES_EXPORT(int) winsnstr (WINDOW *, const char *,int);   /* implemented */
0881 extern NCURSES_EXPORT(int) winsstr (WINDOW *, const char *);        /* generated */
0882 extern NCURSES_EXPORT(int) winstr (WINDOW *, char *);           /* generated */
0883 extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int);            /* implemented */
0884 extern NCURSES_EXPORT(int) wnoutrefresh (WINDOW *);         /* implemented */
0885 extern NCURSES_EXPORT(int) wprintw (WINDOW *, const char *,...)     /* implemented */
0886         GCC_PRINTFLIKE(2,3);
0887 extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int);        /* implemented */
0888 extern NCURSES_EXPORT(int) wrefresh (WINDOW *);             /* implemented */
0889 extern NCURSES_EXPORT(int) wscanw (WINDOW *, const char *,...)      /* implemented */
0890         GCC_SCANFLIKE(2,3);
0891 extern NCURSES_EXPORT(int) wscrl (WINDOW *,int);            /* implemented */
0892 extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int);       /* implemented */
0893 extern NCURSES_EXPORT(int) wstandout (WINDOW *);            /* generated */
0894 extern NCURSES_EXPORT(int) wstandend (WINDOW *);            /* generated */
0895 extern NCURSES_EXPORT(void) wsyncdown (WINDOW *);           /* implemented */
0896 extern NCURSES_EXPORT(void) wsyncup (WINDOW *);             /* implemented */
0897 extern NCURSES_EXPORT(void) wtimeout (WINDOW *,int);            /* implemented */
0898 extern NCURSES_EXPORT(int) wtouchln (WINDOW *,int,int,int);     /* implemented */
0899 extern NCURSES_EXPORT(int) wvline (WINDOW *,chtype,int);        /* implemented */
0900 
0901 /*
0902  * These are also declared in <ncursesw/term.h>:
0903  */
0904 extern NCURSES_EXPORT(int) tigetflag (const char *);            /* implemented */
0905 extern NCURSES_EXPORT(int) tigetnum (const char *);         /* implemented */
0906 extern NCURSES_EXPORT(char *) tigetstr (const char *);          /* implemented */
0907 extern NCURSES_EXPORT(int) putp (const char *);             /* implemented */
0908 
0909 #if NCURSES_TPARM_VARARGS
0910 extern NCURSES_EXPORT(char *) tparm (const char *, ...);        /* special */
0911 #else
0912 extern NCURSES_EXPORT(char *) tparm (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 */
0913 #endif
0914 
0915 extern NCURSES_EXPORT(char *) tiparm (const char *, ...);       /* special */
0916 extern NCURSES_EXPORT(char *) tiparm_s (int, int, const char *, ...);   /* special */
0917 extern NCURSES_EXPORT(int) tiscan_s (int *, int *, const char *);   /* special */
0918 
0919 /*
0920  * These functions are not in X/Open, but we use them in macro definitions:
0921  */
0922 extern NCURSES_EXPORT(int) getattrs (const WINDOW *);           /* generated */
0923 extern NCURSES_EXPORT(int) getcurx (const WINDOW *);            /* generated */
0924 extern NCURSES_EXPORT(int) getcury (const WINDOW *);            /* generated */
0925 extern NCURSES_EXPORT(int) getbegx (const WINDOW *);            /* generated */
0926 extern NCURSES_EXPORT(int) getbegy (const WINDOW *);            /* generated */
0927 extern NCURSES_EXPORT(int) getmaxx (const WINDOW *);            /* generated */
0928 extern NCURSES_EXPORT(int) getmaxy (const WINDOW *);            /* generated */
0929 extern NCURSES_EXPORT(int) getparx (const WINDOW *);            /* generated */
0930 extern NCURSES_EXPORT(int) getpary (const WINDOW *);            /* generated */
0931 
0932 /*
0933  * vid_attr() was implemented originally based on a draft of X/Open curses.
0934  */
0935 #if !NCURSES_WIDECHAR
0936 #define vid_attr(a,pair,opts) vidattr(a)
0937 #endif
0938 
0939 /*
0940  * These functions are extensions - not in X/Open Curses.
0941  */
0942 #if 1   /* NCURSES_EXT_FUNCS */
0943 #undef  NCURSES_EXT_FUNCS
0944 #define NCURSES_EXT_FUNCS 20250705
0945 typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
0946 typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
0947 extern NCURSES_EXPORT(int) alloc_pair (int, int);
0948 extern NCURSES_EXPORT(int) assume_default_colors (int, int);
0949 extern NCURSES_EXPORT(const char *) curses_version (void);
0950 extern NCURSES_EXPORT(int) define_key (const char *, int);
0951 extern NCURSES_EXPORT(int) extended_color_content(int, int *, int *, int *);
0952 extern NCURSES_EXPORT(int) extended_pair_content(int, int *, int *);
0953 extern NCURSES_EXPORT(int) extended_slk_color(int);
0954 extern NCURSES_EXPORT(int) find_pair (int, int);
0955 extern NCURSES_EXPORT(int) free_pair (int);
0956 extern NCURSES_EXPORT(int) get_escdelay (void);
0957 extern NCURSES_EXPORT(int) init_extended_color(int, int, int, int);
0958 extern NCURSES_EXPORT(int) init_extended_pair(int, int, int);
0959 extern NCURSES_EXPORT(int) is_cbreak(void);
0960 extern NCURSES_EXPORT(int) is_echo(void);
0961 extern NCURSES_EXPORT(int) is_nl(void);
0962 extern NCURSES_EXPORT(int) is_raw(void);
0963 extern NCURSES_EXPORT(bool) is_term_resized (int, int);
0964 extern NCURSES_EXPORT(int) key_defined (const char *);
0965 extern NCURSES_EXPORT(char *) keybound (int, int);
0966 extern NCURSES_EXPORT(int) keyok (int, bool);
0967 extern NCURSES_EXPORT(void) nofilter(void);
0968 extern NCURSES_EXPORT(void) reset_color_pairs (void);
0969 extern NCURSES_EXPORT(int) resize_term (int, int);
0970 extern NCURSES_EXPORT(int) resizeterm (int, int);
0971 extern NCURSES_EXPORT(int) set_escdelay (int);
0972 extern NCURSES_EXPORT(int) set_tabsize (int);
0973 extern NCURSES_EXPORT(int) use_default_colors (void);
0974 extern NCURSES_EXPORT(int) use_legacy_coding (int);
0975 extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *);
0976 extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *);
0977 extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
0978 
0979 #if 1
0980 #undef  NCURSES_XNAMES
0981 #define NCURSES_XNAMES 1
0982 extern NCURSES_EXPORT(int) use_extended_names (bool);
0983 #endif
0984 
0985 /*
0986  * These extensions provide access to information stored in the WINDOW even
0987  * when NCURSES_OPAQUE is set:
0988  */
0989 extern NCURSES_EXPORT(WINDOW *) wgetparent (const WINDOW *);    /* generated */
0990 extern NCURSES_EXPORT(bool) is_cleared (const WINDOW *);    /* generated */
0991 extern NCURSES_EXPORT(bool) is_idcok (const WINDOW *);      /* generated */
0992 extern NCURSES_EXPORT(bool) is_idlok (const WINDOW *);      /* generated */
0993 extern NCURSES_EXPORT(bool) is_immedok (const WINDOW *);    /* generated */
0994 extern NCURSES_EXPORT(bool) is_keypad (const WINDOW *);     /* generated */
0995 extern NCURSES_EXPORT(bool) is_leaveok (const WINDOW *);    /* generated */
0996 extern NCURSES_EXPORT(bool) is_nodelay (const WINDOW *);    /* generated */
0997 extern NCURSES_EXPORT(bool) is_notimeout (const WINDOW *);  /* generated */
0998 extern NCURSES_EXPORT(bool) is_pad (const WINDOW *);        /* generated */
0999 extern NCURSES_EXPORT(bool) is_scrollok (const WINDOW *);   /* generated */
1000 extern NCURSES_EXPORT(bool) is_subwin (const WINDOW *);     /* generated */
1001 extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *);     /* generated */
1002 extern NCURSES_EXPORT(int) wgetdelay (const WINDOW *);      /* generated */
1003 extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* generated */
1004 
1005 #else /* !NCURSES_EXT_FUNCS */
1006 #define curses_version() NCURSES_VERSION
1007 #endif /* NCURSES_EXT_FUNCS */
1008 
1009 /*
1010  * Extra extension-functions, which pass a SCREEN pointer rather than using
1011  * a global variable SP.
1012  */
1013 #if 1   /* NCURSES_SP_FUNCS */
1014 #undef  NCURSES_SP_FUNCS
1015 #define NCURSES_SP_FUNCS 20250705
1016 #define NCURSES_SP_NAME(name) name##_sp
1017 
1018 /* Define the sp-funcs helper function */
1019 #define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)
1020 typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);
1021 
1022 extern NCURSES_EXPORT(SCREEN *) new_prescr (void); /* implemented:SP_FUNC */
1023 
1024 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (SCREEN*); /* implemented:SP_FUNC */
1025 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (SCREEN*); /* implemented:SP_FUNC */
1026 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (SCREEN*); /* implemented:SP_FUNC */
1027 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (SCREEN*); /* implemented:SP_FUNC */
1028 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (SCREEN*, int); /* implemented:SP_FUNC */
1029 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 */
1030 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
1031 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
1032 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (SCREEN*, int); /* implemented:SP_FUNC */
1033 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN*); /* implemented:SP_FUNC */
1034 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (SCREEN*); /* implemented:SP_FUNC */
1035 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (SCREEN*); /* implemented:SP_FUNC */
1036 extern NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (SCREEN*);/* implemented:SP_FUNC */
1037 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (SCREEN*); /* implemented:SP_FUNC */
1038 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (SCREEN*); /* implemented:SP_FUNC */
1039 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (SCREEN*); /* implemented:SP_FUNC */
1040 extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (SCREEN*, FILE *);          /* implemented:SP_FUNC */
1041 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (SCREEN*, int); /* implemented:SP_FUNC */
1042 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (SCREEN*); /* implemented:SP_FUNC */
1043 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (SCREEN*); /* implemented:SP_FUNC */
1044 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (SCREEN*); /* implemented:SP_FUNC */
1045 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 */
1046 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
1047 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (SCREEN*, WINDOW*, bool); /* implemented:SP_FUNC */
1048 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (SCREEN*); /* implemented:SP_FUNC */
1049 extern NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(keyname) (SCREEN*, int); /* implemented:SP_FUNC */
1050 extern NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (SCREEN*); /* implemented:SP_FUNC */
1051 extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (SCREEN*); /* implemented:SP_FUNC */
1052 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
1053 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */
1054 extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */
1055 extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, const char *, FILE *, FILE *); /* implemented:SP_FUNC */
1056 extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
1057 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */
1058 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */
1059 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (SCREEN*); /* implemented:SP_FUNC */
1060 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (SCREEN*); /* implemented:SP_FUNC */
1061 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (SCREEN*); /* implemented:SP_FUNC */
1062 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (SCREEN*); /* implemented:SP_FUNC */
1063 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
1064 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (SCREEN*); /* implemented:SP_FUNC */
1065 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (SCREEN*); /* implemented:SP_FUNC */
1066 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
1067 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
1068 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (SCREEN*); /* implemented:SP_FUNC */
1069 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (SCREEN*, int, int (*)(WINDOW *, int));  /* implemented:SP_FUNC */
1070 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (SCREEN*); /* implemented:SP_FUNC */
1071 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (SCREEN*, const char *); /* implemented:SP_FUNC */
1072 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (SCREEN*, const char *); /* implemented:SP_FUNC */
1073 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (SCREEN*, const char *); /* implemented:SP_FUNC */
1074 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (SCREEN*, const chtype); /* implemented:SP_FUNC */
1075 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (SCREEN*, const chtype); /* implemented:SP_FUNC */
1076 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (SCREEN*, const chtype); /* implemented:SP_FUNC */
1077 extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (SCREEN*); /* implemented:SP_FUNC */
1078 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (SCREEN*, const attr_t, NCURSES_PAIRS_T, void*); /* implemented:SP_FUNC */
1079 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (SCREEN*); /* implemented:SP_FUNC */
1080 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (SCREEN*, NCURSES_PAIRS_T); /* implemented:SP_FUNC */
1081 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (SCREEN*, int); /* implemented:SP_FUNC */
1082 extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (SCREEN*, int); /* implemented:SP_FUNC */
1083 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (SCREEN*); /* implemented:SP_FUNC */
1084 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (SCREEN*); /* implemented:SP_FUNC */
1085 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (SCREEN*); /* implemented:SP_FUNC */
1086 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (SCREEN*, int, const char *, int); /* implemented:SP_FUNC */
1087 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (SCREEN*); /* implemented:SP_FUNC */
1088 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (SCREEN*); /* implemented:SP_FUNC */
1089 extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (SCREEN*); /* implemented:SP_FUNC */
1090 extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (SCREEN*); /* implemented:SP_FUNC */
1091 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (SCREEN*, int); /* implemented:SP_FUNC */
1092 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetch) (SCREEN*, int); /* implemented:SP_FUNC */
1093 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (SCREEN*, bool); /* implemented:SP_FUNC */
1094 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (SCREEN*, bool); /* implemented:SP_FUNC */
1095 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype);  /* implemented:SP_FUNC */
1096 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */
1097 #if 1   /* NCURSES_EXT_FUNCS */
1098 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(alloc_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
1099 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int);  /* implemented:EXT_SP_FUNC */
1100 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int);    /* implemented:EXT_SP_FUNC */
1101 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_color_content) (SCREEN*, int, int *, int *, int *); /* implemented:EXT_SP_FUNC */
1102 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_pair_content) (SCREEN*, int, int *, int *); /* implemented:EXT_SP_FUNC */
1103 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_slk_color) (SCREEN*, int);  /* implemented:EXT_SP_FUNC */
1104 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(find_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
1105 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(free_pair) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
1106 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*); /* implemented:EXT_SP_FUNC */
1107 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_color) (SCREEN*, int, int, int, int);  /* implemented:EXT_SP_FUNC */
1108 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_pair) (SCREEN*, int, int, int);    /* implemented:EXT_SP_FUNC */
1109 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_cbreak) (SCREEN*);    /* implemented:EXT_SP_FUNC */
1110 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_echo) (SCREEN*);  /* implemented:EXT_SP_FUNC */
1111 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_nl) (SCREEN*);    /* implemented:EXT_SP_FUNC */
1112 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_raw) (SCREEN*);   /* implemented:EXT_SP_FUNC */
1113 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int);   /* implemented:EXT_SP_FUNC */
1114 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *);    /* implemented:EXT_SP_FUNC */
1115 extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int);    /* implemented:EXT_SP_FUNC */
1116 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool); /* implemented:EXT_SP_FUNC */
1117 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */  /* implemented:EXT_SP_FUNC */
1118 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(reset_color_pairs) (SCREEN*); /* implemented:EXT_SP_FUNC */
1119 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int);    /* implemented:EXT_SP_FUNC */
1120 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
1121 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int);    /* implemented:EXT_SP_FUNC */
1122 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
1123 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (SCREEN*);   /* implemented:EXT_SP_FUNC */
1124 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int);   /* implemented:EXT_SP_FUNC */
1125 #endif /* NCURSES_EXT_FUNCS */
1126 #else /* !NCURSES_SP_FUNCS */
1127 #undef  NCURSES_SP_FUNCS
1128 #define NCURSES_SP_FUNCS 0
1129 #define NCURSES_SP_NAME(name) name
1130 #define NCURSES_SP_OUTC NCURSES_OUTC
1131 #endif /* NCURSES_SP_FUNCS */
1132 
1133 /* attributes */
1134 
1135 #define NCURSES_ATTR_SHIFT       8
1136 #define NCURSES_BITS(mask,shift) (NCURSES_CAST(chtype,(mask)) << ((shift) + NCURSES_ATTR_SHIFT))
1137 
1138 #define A_NORMAL    (1U - 1U)
1139 #define A_ATTRIBUTES    NCURSES_BITS(~(1U - 1U),0)
1140 #define A_CHARTEXT  (NCURSES_BITS(1U,0) - 1U)
1141 #define A_COLOR     NCURSES_BITS(((1U) << 8) - 1U,0)
1142 #define A_STANDOUT  NCURSES_BITS(1U,8)
1143 #define A_UNDERLINE NCURSES_BITS(1U,9)
1144 #define A_REVERSE   NCURSES_BITS(1U,10)
1145 #define A_BLINK     NCURSES_BITS(1U,11)
1146 #define A_DIM       NCURSES_BITS(1U,12)
1147 #define A_BOLD      NCURSES_BITS(1U,13)
1148 #define A_ALTCHARSET    NCURSES_BITS(1U,14)
1149 
1150 /* SVr4 curses marks these as "subject to change" */
1151 #define A_INVIS     NCURSES_BITS(1U,15)
1152 #define A_PROTECT   NCURSES_BITS(1U,16)
1153 
1154 /* X/Open features not found in SVr4 curses */
1155 #define A_HORIZONTAL    NCURSES_BITS(1U,17)
1156 #define A_LEFT      NCURSES_BITS(1U,18)
1157 #define A_LOW       NCURSES_BITS(1U,19)
1158 #define A_RIGHT     NCURSES_BITS(1U,20)
1159 #define A_TOP       NCURSES_BITS(1U,21)
1160 #define A_VERTICAL  NCURSES_BITS(1U,22)
1161 
1162 #if 1   /* NCURSES_EXT_FUNCS */
1163 #define A_ITALIC    NCURSES_BITS(1U,23) /* ncurses extension */
1164 #if 0   /* NCURSES_RGB_COLORS */
1165 #define A_FOREGROUND    NCURSES_BITS(1U,17) /* ncurses extension */
1166 #define A_BACKGROUND    NCURSES_BITS(1U,18) /* ncurses extension */
1167 #define A_DIRECT    (A_FOREGROUND|A_BACKGROUND)
1168 #endif /* NCURSES_RGB_COLORS */
1169 #endif /* NCURSES_EXT_FUNCS */
1170 
1171 /*
1172  * Most of the pseudo functions are macros that either provide compatibility
1173  * with older versions of curses, or provide inline functionality to improve
1174  * performance.
1175  */
1176 
1177 /*
1178  * These pseudo functions are always implemented as macros:
1179  */
1180 
1181 #define getyx(win,y,x)      (y = getcury(win), x = getcurx(win))
1182 #define getbegyx(win,y,x)   (y = getbegy(win), x = getbegx(win))
1183 #define getmaxyx(win,y,x)   (y = getmaxy(win), x = getmaxx(win))
1184 #define getparyx(win,y,x)   (y = getpary(win), x = getparx(win))
1185 
1186 #define getsyx(y,x) do { if (newscr) { \
1187                  if (is_leaveok(newscr)) \
1188                 (y) = (x) = -1; \
1189                  else \
1190                  getyx(newscr,(y), (x)); \
1191             } \
1192             } while(0)
1193 
1194 #define setsyx(y,x) do { if (newscr) { \
1195                 if ((y) == -1 && (x) == -1) \
1196                 leaveok(newscr, TRUE); \
1197                 else { \
1198                 leaveok(newscr, FALSE); \
1199                 wmove(newscr, (y), (x)); \
1200                 } \
1201             } \
1202             } while(0)
1203 
1204 #ifndef NCURSES_NOMACROS
1205 
1206 /*
1207  * These miscellaneous pseudo functions are provided for compatibility:
1208  */
1209 
1210 #define wgetstr(w, s)       wgetnstr(w, s, -1)
1211 #define getnstr(s, n)       wgetnstr(stdscr, s, (n))
1212 
1213 #define setterm(term)       setupterm(term, 1, (int *)0)
1214 
1215 #define fixterm()       reset_prog_mode()
1216 #define resetterm()     reset_shell_mode()
1217 #define saveterm()      def_prog_mode()
1218 #define crmode()        cbreak()
1219 #define nocrmode()      nocbreak()
1220 #define gettmode()
1221 
1222 /* It seems older SYSV curses versions define these */
1223 #if !NCURSES_OPAQUE
1224 #define getattrs(win)       NCURSES_CAST(int, NCURSES_OK_ADDR(win) ? (win)->_attrs : A_NORMAL)
1225 #define getcurx(win)        (NCURSES_OK_ADDR(win) ? (win)->_curx : ERR)
1226 #define getcury(win)        (NCURSES_OK_ADDR(win) ? (win)->_cury : ERR)
1227 #define getbegx(win)        (NCURSES_OK_ADDR(win) ? (win)->_begx : ERR)
1228 #define getbegy(win)        (NCURSES_OK_ADDR(win) ? (win)->_begy : ERR)
1229 #define getmaxx(win)        (NCURSES_OK_ADDR(win) ? ((win)->_maxx + 1) : ERR)
1230 #define getmaxy(win)        (NCURSES_OK_ADDR(win) ? ((win)->_maxy + 1) : ERR)
1231 #define getparx(win)        (NCURSES_OK_ADDR(win) ? (win)->_parx : ERR)
1232 #define getpary(win)        (NCURSES_OK_ADDR(win) ? (win)->_pary : ERR)
1233 #endif /* NCURSES_OPAQUE */
1234 
1235 #define wstandout(win)      (wattrset(win,A_STANDOUT))
1236 #define wstandend(win)      (wattrset(win,A_NORMAL))
1237 
1238 #define wattron(win,at)     wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
1239 #define wattroff(win,at)    wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
1240 
1241 #if !NCURSES_OPAQUE
1242 #if NCURSES_WATTR_MACROS
1243 #if NCURSES_WIDECHAR && 1 /* NCURSES_EXT_COLORS */
1244 #define wattrset(win,at) \
1245     (NCURSES_OK_ADDR(win) \
1246       ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
1247          (win)->_attrs = NCURSES_CAST(attr_t, at), \
1248          OK) \
1249       : ERR)
1250 #else
1251 #define wattrset(win,at) \
1252     (NCURSES_OK_ADDR(win) \
1253       ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
1254          OK) \
1255       : ERR)
1256 #endif
1257 #endif /* NCURSES_WATTR_MACROS */
1258 #endif /* NCURSES_OPAQUE */
1259 
1260 #define scroll(win)     wscrl(win,1)
1261 
1262 #define touchwin(win)       wtouchln((win), 0, getmaxy(win), 1)
1263 #define touchline(win, s, c)    wtouchln((win), s, c, 1)
1264 #define untouchwin(win)     wtouchln((win), 0, getmaxy(win), 0)
1265 
1266 #define box(win, v, h)      wborder(win, v, v, h, h, 0, 0, 0, 0)
1267 #define border(ls, rs, ts, bs, tl, tr, bl, br)  wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
1268 #define hline(ch, n)        whline(stdscr, ch, (n))
1269 #define vline(ch, n)        wvline(stdscr, ch, (n))
1270 
1271 #define winstr(w, s)        winnstr(w, s, -1)
1272 #define winchstr(w, s)      winchnstr(w, s, -1)
1273 #define winsstr(w, s)       winsnstr(w, s, -1)
1274 
1275 #if !NCURSES_OPAQUE
1276 #define redrawwin(win)      wredrawln(win, 0, (NCURSES_OK_ADDR(win) ? (win)->_maxy+1 : -1))
1277 #endif /* NCURSES_OPAQUE */
1278 
1279 #define waddstr(win,str)    waddnstr(win,str,-1)
1280 #define waddchstr(win,str)  waddchnstr(win,str,-1)
1281 
1282 /*
1283  * These apply to the first 256 color pairs.
1284  */
1285 #define COLOR_PAIR(n)   (NCURSES_BITS((n), 0) & A_COLOR)
1286 #define PAIR_NUMBER(a)  (NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
1287 
1288 /*
1289  * pseudo functions for standard screen
1290  */
1291 
1292 #define addch(ch)       waddch(stdscr,(ch))
1293 #define addchnstr(str,n)    waddchnstr(stdscr,(str),(n))
1294 #define addchstr(str)       waddchstr(stdscr,(str))
1295 #define addnstr(str,n)      waddnstr(stdscr,(str),(n))
1296 #define addstr(str)     waddnstr(stdscr,(str),-1)
1297 #define attr_get(ap,cp,o)   wattr_get(stdscr,(ap),(cp),(o))
1298 #define attr_off(a,o)       wattr_off(stdscr,(a),(o))
1299 #define attr_on(a,o)        wattr_on(stdscr,(a),(o))
1300 #define attr_set(a,c,o)     wattr_set(stdscr,(a),(c),(o))
1301 #define attroff(at)     wattroff(stdscr,(at))
1302 #define attron(at)      wattron(stdscr,(at))
1303 #define attrset(at)     wattrset(stdscr,(at))
1304 #define bkgd(ch)        wbkgd(stdscr,(ch))
1305 #define bkgdset(ch)     wbkgdset(stdscr,(ch))
1306 #define chgat(n,a,c,o)      wchgat(stdscr,(n),(a),(c),(o))
1307 #define clear()         wclear(stdscr)
1308 #define clrtobot()      wclrtobot(stdscr)
1309 #define clrtoeol()      wclrtoeol(stdscr)
1310 #define color_set(c,o)      wcolor_set(stdscr,(c),(o))
1311 #define delch()         wdelch(stdscr)
1312 #define deleteln()      winsdelln(stdscr,-1)
1313 #define echochar(c)     wechochar(stdscr,(c))
1314 #define erase()         werase(stdscr)
1315 #define getch()         wgetch(stdscr)
1316 #define getstr(str)     wgetstr(stdscr,(str))
1317 #define inch()          winch(stdscr)
1318 #define inchnstr(s,n)       winchnstr(stdscr,(s),(n))
1319 #define inchstr(s)      winchstr(stdscr,(s))
1320 #define innstr(s,n)     winnstr(stdscr,(s),(n))
1321 #define insch(c)        winsch(stdscr,(c))
1322 #define insdelln(n)     winsdelln(stdscr,(n))
1323 #define insertln()      winsdelln(stdscr,1)
1324 #define insnstr(s,n)        winsnstr(stdscr,(s),(n))
1325 #define insstr(s)       winsstr(stdscr,(s))
1326 #define instr(s)        winstr(stdscr,(s))
1327 #define move(y,x)       wmove(stdscr,(y),(x))
1328 #define refresh()       wrefresh(stdscr)
1329 #define scrl(n)         wscrl(stdscr,(n))
1330 #define setscrreg(t,b)      wsetscrreg(stdscr,(t),(b))
1331 #define standend()      wstandend(stdscr)
1332 #define standout()      wstandout(stdscr)
1333 #define timeout(delay)      wtimeout(stdscr,(delay))
1334 #define wdeleteln(win)      winsdelln(win,-1)
1335 #define winsertln(win)      winsdelln(win,1)
1336 
1337 /*
1338  * mv functions
1339  */
1340 
1341 #define mvwaddch(win,y,x,ch)        (wmove((win),(y),(x)) == ERR ? ERR : waddch((win),(ch)))
1342 #define mvwaddchnstr(win,y,x,str,n) (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),(n)))
1343 #define mvwaddchstr(win,y,x,str)    (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1))
1344 #define mvwaddnstr(win,y,x,str,n)   (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n)))
1345 #define mvwaddstr(win,y,x,str)      (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1))
1346 #define mvwchgat(win,y,x,n,a,c,o)   (wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o)))
1347 #define mvwdelch(win,y,x)       (wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
1348 #define mvwgetch(win,y,x)       (wmove((win),(y),(x)) == ERR ? ERR : wgetch(win))
1349 #define mvwgetnstr(win,y,x,str,n)   (wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n)))
1350 #define mvwgetstr(win,y,x,str)      (wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str)))
1351 #define mvwhline(win,y,x,c,n)       (wmove((win),(y),(x)) == ERR ? ERR : whline((win),(c),(n)))
1352 #define mvwinch(win,y,x)        (wmove((win),(y),(x)) == ERR ? NCURSES_CAST(chtype, ERR) : winch(win))
1353 #define mvwinchnstr(win,y,x,s,n)    (wmove((win),(y),(x)) == ERR ? ERR : winchnstr((win),(s),(n)))
1354 #define mvwinchstr(win,y,x,s)       (wmove((win),(y),(x)) == ERR ? ERR : winchstr((win),(s)))
1355 #define mvwinnstr(win,y,x,s,n)      (wmove((win),(y),(x)) == ERR ? ERR : winnstr((win),(s),(n)))
1356 #define mvwinsch(win,y,x,c)     (wmove((win),(y),(x)) == ERR ? ERR : winsch((win),(c)))
1357 #define mvwinsnstr(win,y,x,s,n)     (wmove((win),(y),(x)) == ERR ? ERR : winsnstr((win),(s),(n)))
1358 #define mvwinsstr(win,y,x,s)        (wmove((win),(y),(x)) == ERR ? ERR : winsstr((win),(s)))
1359 #define mvwinstr(win,y,x,s)     (wmove((win),(y),(x)) == ERR ? ERR : winstr((win),(s)))
1360 #define mvwvline(win,y,x,c,n)       (wmove((win),(y),(x)) == ERR ? ERR : wvline((win),(c),(n)))
1361 
1362 #define mvaddch(y,x,ch)         mvwaddch(stdscr,(y),(x),(ch))
1363 #define mvaddchnstr(y,x,str,n)      mvwaddchnstr(stdscr,(y),(x),(str),(n))
1364 #define mvaddchstr(y,x,str)     mvwaddchstr(stdscr,(y),(x),(str))
1365 #define mvaddnstr(y,x,str,n)        mvwaddnstr(stdscr,(y),(x),(str),(n))
1366 #define mvaddstr(y,x,str)       mvwaddstr(stdscr,(y),(x),(str))
1367 #define mvchgat(y,x,n,a,c,o)        mvwchgat(stdscr,(y),(x),(n),(a),(c),(o))
1368 #define mvdelch(y,x)            mvwdelch(stdscr,(y),(x))
1369 #define mvgetch(y,x)            mvwgetch(stdscr,(y),(x))
1370 #define mvgetnstr(y,x,str,n)        mvwgetnstr(stdscr,(y),(x),(str),(n))
1371 #define mvgetstr(y,x,str)       mvwgetstr(stdscr,(y),(x),(str))
1372 #define mvhline(y,x,c,n)        mvwhline(stdscr,(y),(x),(c),(n))
1373 #define mvinch(y,x)         mvwinch(stdscr,(y),(x))
1374 #define mvinchnstr(y,x,s,n)     mvwinchnstr(stdscr,(y),(x),(s),(n))
1375 #define mvinchstr(y,x,s)        mvwinchstr(stdscr,(y),(x),(s))
1376 #define mvinnstr(y,x,s,n)       mvwinnstr(stdscr,(y),(x),(s),(n))
1377 #define mvinsch(y,x,c)          mvwinsch(stdscr,(y),(x),(c))
1378 #define mvinsnstr(y,x,s,n)      mvwinsnstr(stdscr,(y),(x),(s),(n))
1379 #define mvinsstr(y,x,s)         mvwinsstr(stdscr,(y),(x),(s))
1380 #define mvinstr(y,x,s)          mvwinstr(stdscr,(y),(x),(s))
1381 #define mvvline(y,x,c,n)        mvwvline(stdscr,(y),(x),(c),(n))
1382 
1383 /*
1384  * Some wide-character functions can be implemented without the extensions.
1385  */
1386 #if !NCURSES_OPAQUE
1387 #define getbkgd(win)                    (NCURSES_OK_ADDR(win) ? ((win)->_bkgd) : 0)
1388 #endif /* NCURSES_OPAQUE */
1389 
1390 #define slk_attr_off(a,v)       ((v) ? ERR : slk_attroff(a))
1391 #define slk_attr_on(a,v)        ((v) ? ERR : slk_attron(a))
1392 
1393 #if !NCURSES_OPAQUE
1394 #if NCURSES_WATTR_MACROS
1395 #if NCURSES_WIDECHAR && 1 /* NCURSES_EXT_COLORS */
1396 #define wattr_set(win,a,p,opts) \
1397     (NCURSES_OK_ADDR(win) \
1398      ? ((void)((win)->_attrs = ((a) & ~A_COLOR), \
1399            (win)->_color = (opts) ? *(int *)(opts) : (p)), \
1400         OK) \
1401      : ERR)
1402 #define wattr_get(win,a,p,opts) \
1403     (NCURSES_OK_ADDR(win) \
1404      ? ((void)(NCURSES_OK_ADDR(a) \
1405            ? (*(a) = (win)->_attrs) \
1406            : OK), \
1407         (void)(NCURSES_OK_ADDR(p) \
1408            ? (*(p) = (NCURSES_PAIRS_T) (win)->_color) \
1409            : OK), \
1410         (void)(NCURSES_OK_ADDR(opts) \
1411            ? (*(int *)(opts) = (win)->_color) \
1412            : OK), \
1413         OK) \
1414      : ERR)
1415 #else /* !(NCURSES_WIDECHAR && NCURSES_EXT_COLORS) */
1416 #define wattr_set(win,a,p,opts) \
1417      (NCURSES_OK_ADDR(win) \
1418       ? ((void)((win)->_attrs = (((a) & ~A_COLOR) | \
1419                      (attr_t)COLOR_PAIR(p))), \
1420          OK) \
1421       : ERR)
1422 #define wattr_get(win,a,p,opts) \
1423     (NCURSES_OK_ADDR(win) \
1424      ? ((void)(NCURSES_OK_ADDR(a) \
1425            ? (*(a) = (win)->_attrs) \
1426            : OK), \
1427         (void)(NCURSES_OK_ADDR(p) \
1428            ? (*(p) = (NCURSES_PAIRS_T) PAIR_NUMBER((win)->_attrs)) \
1429            : OK), \
1430         OK) \
1431      : ERR)
1432 #endif /* (NCURSES_WIDECHAR && NCURSES_EXT_COLORS) */
1433 #endif /* NCURSES_WATTR_MACROS */
1434 #endif /* NCURSES_OPAQUE */
1435 
1436 /*
1437  * X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
1438  * varargs.h.  It adds new calls vw_printw/vw_scanw, which are supposed to
1439  * use POSIX stdarg.h.  The ncurses versions of vwprintw/vwscanw already
1440  * use stdarg.h, so...
1441  */
1442 /* define vw_printw     vwprintw */
1443 /* define vw_scanw      vwscanw */
1444 
1445 /*
1446  * Export fallback function for use in C++ binding.
1447  */
1448 #if !1 /* HAVE_VSSCANF */
1449 #define vsscanf(a,b,c) _nc_vsscanf(a,b,c)
1450 NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list);
1451 #endif
1452 
1453 /*
1454  * These macros are extensions - not in X/Open Curses.
1455  */
1456 #if 1   /* NCURSES_EXT_FUNCS */
1457 #if !NCURSES_OPAQUE
1458 #define is_cleared(win)     (NCURSES_OK_ADDR(win) ? (win)->_clear : FALSE)
1459 #define is_idcok(win)       (NCURSES_OK_ADDR(win) ? (win)->_idcok : FALSE)
1460 #define is_idlok(win)       (NCURSES_OK_ADDR(win) ? (win)->_idlok : FALSE)
1461 #define is_immedok(win)     (NCURSES_OK_ADDR(win) ? (win)->_immed : FALSE)
1462 #define is_keypad(win)      (NCURSES_OK_ADDR(win) ? (win)->_use_keypad : FALSE)
1463 #define is_leaveok(win)     (NCURSES_OK_ADDR(win) ? (win)->_leaveok : FALSE)
1464 #define is_nodelay(win)     (NCURSES_OK_ADDR(win) ? ((win)->_delay == 0) : FALSE)
1465 #define is_notimeout(win)   (NCURSES_OK_ADDR(win) ? (win)->_notimeout : FALSE)
1466 #define is_pad(win)     (NCURSES_OK_ADDR(win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
1467 #define is_scrollok(win)    (NCURSES_OK_ADDR(win) ? (win)->_scroll : FALSE)
1468 #define is_subwin(win)      (NCURSES_OK_ADDR(win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
1469 #define is_syncok(win)      (NCURSES_OK_ADDR(win) ? (win)->_sync : FALSE)
1470 #define wgetdelay(win)      (NCURSES_OK_ADDR(win) ? (win)->_delay : 0)
1471 #define wgetparent(win)     (NCURSES_OK_ADDR(win) ? (win)->_parent : 0)
1472 #define wgetscrreg(win,t,b) (NCURSES_OK_ADDR(win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
1473 #endif
1474 #endif /* NCURSES_EXT_FUNCS */
1475 
1476 /*
1477  * X/Open says this returns a bool; SVr4 also checked for out-of-range line.
1478  * The macro provides compatibility:
1479  */
1480 #define is_linetouched(w,l) ((!(w) || ((l) > getmaxy(w)) || ((l) < 0)) ? ERR : (is_linetouched)((w),(l)))
1481 
1482 #endif /* NCURSES_NOMACROS */
1483 
1484 /*
1485  * Public variables.
1486  *
1487  * Notes:
1488  *  a. ESCDELAY was an undocumented feature under AIX curses.
1489  *     It gives the ESC expire time in milliseconds.
1490  *  b. ttytype is needed for backward compatibility
1491  */
1492 #if NCURSES_REENTRANT
1493 
1494 NCURSES_WRAPPED_VAR(WINDOW *, curscr);
1495 NCURSES_WRAPPED_VAR(WINDOW *, newscr);
1496 NCURSES_WRAPPED_VAR(WINDOW *, stdscr);
1497 NCURSES_WRAPPED_VAR(char *, ttytype);
1498 NCURSES_WRAPPED_VAR(int, COLORS);
1499 NCURSES_WRAPPED_VAR(int, COLOR_PAIRS);
1500 NCURSES_WRAPPED_VAR(int, COLS);
1501 NCURSES_WRAPPED_VAR(int, ESCDELAY);
1502 NCURSES_WRAPPED_VAR(int, LINES);
1503 NCURSES_WRAPPED_VAR(int, TABSIZE);
1504 
1505 #define curscr      NCURSES_PUBLIC_VAR(curscr())
1506 #define newscr      NCURSES_PUBLIC_VAR(newscr())
1507 #define stdscr      NCURSES_PUBLIC_VAR(stdscr())
1508 #define ttytype     NCURSES_PUBLIC_VAR(ttytype())
1509 #define COLORS      NCURSES_PUBLIC_VAR(COLORS())
1510 #define COLOR_PAIRS NCURSES_PUBLIC_VAR(COLOR_PAIRS())
1511 #define COLS        NCURSES_PUBLIC_VAR(COLS())
1512 #define ESCDELAY    NCURSES_PUBLIC_VAR(ESCDELAY())
1513 #define LINES       NCURSES_PUBLIC_VAR(LINES())
1514 #define TABSIZE     NCURSES_PUBLIC_VAR(TABSIZE())
1515 
1516 #else
1517 
1518 extern NCURSES_EXPORT_VAR(WINDOW *) curscr;
1519 extern NCURSES_EXPORT_VAR(WINDOW *) newscr;
1520 extern NCURSES_EXPORT_VAR(WINDOW *) stdscr;
1521 extern NCURSES_EXPORT_VAR(char) ttytype[];
1522 extern NCURSES_EXPORT_VAR(int) COLORS;
1523 extern NCURSES_EXPORT_VAR(int) COLOR_PAIRS;
1524 extern NCURSES_EXPORT_VAR(int) COLS;
1525 extern NCURSES_EXPORT_VAR(int) ESCDELAY;
1526 extern NCURSES_EXPORT_VAR(int) LINES;
1527 extern NCURSES_EXPORT_VAR(int) TABSIZE;
1528 
1529 #endif
1530 
1531 /*
1532  * Pseudo-character tokens outside ASCII range.  The curses wgetch() function
1533  * will return any given one of these only if the corresponding k- capability
1534  * is defined in your terminal's terminfo entry.
1535  *
1536  * Some keys (KEY_A1, etc) are arranged like this:
1537  *  a1     up    a3
1538  *  left   b2    right
1539  *  c1     down  c3
1540  *
1541  * A few key codes do not depend upon the terminfo entry.
1542  */
1543 #define KEY_CODE_YES    0400        /* A wchar_t contains a key code */
1544 #define KEY_MIN     0401        /* Minimum curses key */
1545 #define KEY_BREAK   0401        /* Break key (unreliable) */
1546 #define KEY_SRESET  0530        /* Soft (partial) reset (unreliable) */
1547 #define KEY_RESET   0531        /* Reset or hard reset (unreliable) */
1548 /*
1549  * These definitions were generated by ./MKkey_defs.sh .././../include/Caps .././../include/Caps-ncurses
1550  */
1551 #define KEY_DOWN    0402        /* down-arrow key */
1552 #define KEY_UP      0403        /* up-arrow key */
1553 #define KEY_LEFT    0404        /* left-arrow key */
1554 #define KEY_RIGHT   0405        /* right-arrow key */
1555 #define KEY_HOME    0406        /* home key */
1556 #define KEY_BACKSPACE   0407        /* backspace key */
1557 #define KEY_F0      0410        /* Function keys.  Space for 64 */
1558 #define KEY_F(n)    (KEY_F0+(n))    /* Value of function key n */
1559 #define KEY_DL      0510        /* delete-line key */
1560 #define KEY_IL      0511        /* insert-line key */
1561 #define KEY_DC      0512        /* delete-character key */
1562 #define KEY_IC      0513        /* insert-character key */
1563 #define KEY_EIC     0514        /* sent by rmir or smir in insert mode */
1564 #define KEY_CLEAR   0515        /* clear-screen or erase key */
1565 #define KEY_EOS     0516        /* clear-to-end-of-screen key */
1566 #define KEY_EOL     0517        /* clear-to-end-of-line key */
1567 #define KEY_SF      0520        /* scroll-forward key */
1568 #define KEY_SR      0521        /* scroll-backward key */
1569 #define KEY_NPAGE   0522        /* next-page key */
1570 #define KEY_PPAGE   0523        /* previous-page key */
1571 #define KEY_STAB    0524        /* set-tab key */
1572 #define KEY_CTAB    0525        /* clear-tab key */
1573 #define KEY_CATAB   0526        /* clear-all-tabs key */
1574 #define KEY_ENTER   0527        /* enter/send key */
1575 #define KEY_PRINT   0532        /* print key */
1576 #define KEY_LL      0533        /* lower-left key (home down) */
1577 #define KEY_A1      0534        /* upper left of keypad */
1578 #define KEY_A3      0535        /* upper right of keypad */
1579 #define KEY_B2      0536        /* center of keypad */
1580 #define KEY_C1      0537        /* lower left of keypad */
1581 #define KEY_C3      0540        /* lower right of keypad */
1582 #define KEY_BTAB    0541        /* back-tab key */
1583 #define KEY_BEG     0542        /* begin key */
1584 #define KEY_CANCEL  0543        /* cancel key */
1585 #define KEY_CLOSE   0544        /* close key */
1586 #define KEY_COMMAND 0545        /* command key */
1587 #define KEY_COPY    0546        /* copy key */
1588 #define KEY_CREATE  0547        /* create key */
1589 #define KEY_END     0550        /* end key */
1590 #define KEY_EXIT    0551        /* exit key */
1591 #define KEY_FIND    0552        /* find key */
1592 #define KEY_HELP    0553        /* help key */
1593 #define KEY_MARK    0554        /* mark key */
1594 #define KEY_MESSAGE 0555        /* message key */
1595 #define KEY_MOVE    0556        /* move key */
1596 #define KEY_NEXT    0557        /* next key */
1597 #define KEY_OPEN    0560        /* open key */
1598 #define KEY_OPTIONS 0561        /* options key */
1599 #define KEY_PREVIOUS    0562        /* previous key */
1600 #define KEY_REDO    0563        /* redo key */
1601 #define KEY_REFERENCE   0564        /* reference key */
1602 #define KEY_REFRESH 0565        /* refresh key */
1603 #define KEY_REPLACE 0566        /* replace key */
1604 #define KEY_RESTART 0567        /* restart key */
1605 #define KEY_RESUME  0570        /* resume key */
1606 #define KEY_SAVE    0571        /* save key */
1607 #define KEY_SBEG    0572        /* shifted begin key */
1608 #define KEY_SCANCEL 0573        /* shifted cancel key */
1609 #define KEY_SCOMMAND    0574        /* shifted command key */
1610 #define KEY_SCOPY   0575        /* shifted copy key */
1611 #define KEY_SCREATE 0576        /* shifted create key */
1612 #define KEY_SDC     0577        /* shifted delete-character key */
1613 #define KEY_SDL     0600        /* shifted delete-line key */
1614 #define KEY_SELECT  0601        /* select key */
1615 #define KEY_SEND    0602        /* shifted end key */
1616 #define KEY_SEOL    0603        /* shifted clear-to-end-of-line key */
1617 #define KEY_SEXIT   0604        /* shifted exit key */
1618 #define KEY_SFIND   0605        /* shifted find key */
1619 #define KEY_SHELP   0606        /* shifted help key */
1620 #define KEY_SHOME   0607        /* shifted home key */
1621 #define KEY_SIC     0610        /* shifted insert-character key */
1622 #define KEY_SLEFT   0611        /* shifted left-arrow key */
1623 #define KEY_SMESSAGE    0612        /* shifted message key */
1624 #define KEY_SMOVE   0613        /* shifted move key */
1625 #define KEY_SNEXT   0614        /* shifted next key */
1626 #define KEY_SOPTIONS    0615        /* shifted options key */
1627 #define KEY_SPREVIOUS   0616        /* shifted previous key */
1628 #define KEY_SPRINT  0617        /* shifted print key */
1629 #define KEY_SREDO   0620        /* shifted redo key */
1630 #define KEY_SREPLACE    0621        /* shifted replace key */
1631 #define KEY_SRIGHT  0622        /* shifted right-arrow key */
1632 #define KEY_SRSUME  0623        /* shifted resume key */
1633 #define KEY_SSAVE   0624        /* shifted save key */
1634 #define KEY_SSUSPEND    0625        /* shifted suspend key */
1635 #define KEY_SUNDO   0626        /* shifted undo key */
1636 #define KEY_SUSPEND 0627        /* suspend key */
1637 #define KEY_UNDO    0630        /* undo key */
1638 #define KEY_MOUSE   0631        /* Mouse event has occurred */
1639 
1640 #if NCURSES_SIGWINCH
1641 #define KEY_RESIZE  0632        /* Terminal resize event */
1642 #endif
1643 
1644 #define KEY_MAX     0777        /* Maximum key value is 0632 */
1645 /* $Id: curses.wide,v 1.53 2025/01/18 21:08:32 Branden.Robinson Exp $ */
1646 /*
1647  * vile:cmode:
1648  * This file is part of ncurses, designed to be appended after curses.h.in
1649  * (see that file for the relevant copyright).
1650  */
1651 #define _XOPEN_CURSES 1
1652 
1653 #if NCURSES_WIDECHAR
1654 
1655 extern NCURSES_EXPORT_VAR(cchar_t *) _nc_wacs;
1656 
1657 #define NCURSES_WACS(c) (&_nc_wacs[NCURSES_CAST(unsigned char,(c))])
1658 
1659 #define WACS_BSSB   NCURSES_WACS('l')
1660 #define WACS_SSBB   NCURSES_WACS('m')
1661 #define WACS_BBSS   NCURSES_WACS('k')
1662 #define WACS_SBBS   NCURSES_WACS('j')
1663 #define WACS_SBSS   NCURSES_WACS('u')
1664 #define WACS_SSSB   NCURSES_WACS('t')
1665 #define WACS_SSBS   NCURSES_WACS('v')
1666 #define WACS_BSSS   NCURSES_WACS('w')
1667 #define WACS_BSBS   NCURSES_WACS('q')
1668 #define WACS_SBSB   NCURSES_WACS('x')
1669 #define WACS_SSSS   NCURSES_WACS('n')
1670 
1671 #define WACS_ULCORNER   WACS_BSSB
1672 #define WACS_LLCORNER   WACS_SSBB
1673 #define WACS_URCORNER   WACS_BBSS
1674 #define WACS_LRCORNER   WACS_SBBS
1675 #define WACS_RTEE   WACS_SBSS
1676 #define WACS_LTEE   WACS_SSSB
1677 #define WACS_BTEE   WACS_SSBS
1678 #define WACS_TTEE   WACS_BSSS
1679 #define WACS_HLINE  WACS_BSBS
1680 #define WACS_VLINE  WACS_SBSB
1681 #define WACS_PLUS   WACS_SSSS
1682 
1683 #define WACS_S1     NCURSES_WACS('o') /* scan line 1 */
1684 #define WACS_S9     NCURSES_WACS('s') /* scan line 9 */
1685 #define WACS_DIAMOND    NCURSES_WACS('`') /* diamond */
1686 #define WACS_CKBOARD    NCURSES_WACS('a') /* checker board */
1687 #define WACS_DEGREE NCURSES_WACS('f') /* degree symbol */
1688 #define WACS_PLMINUS    NCURSES_WACS('g') /* plus/minus */
1689 #define WACS_BULLET NCURSES_WACS('~') /* bullet */
1690 
1691     /* Teletype 5410v1 symbols */
1692 #define WACS_LARROW NCURSES_WACS(',') /* arrow left */
1693 #define WACS_RARROW NCURSES_WACS('+') /* arrow right */
1694 #define WACS_DARROW NCURSES_WACS('.') /* arrow down */
1695 #define WACS_UARROW NCURSES_WACS('-') /* arrow up */
1696 #define WACS_BOARD  NCURSES_WACS('h') /* board of squares */
1697 #define WACS_LANTERN    NCURSES_WACS('i') /* lantern symbol */
1698 #define WACS_BLOCK  NCURSES_WACS('0') /* solid square block */
1699 
1700     /* ncurses extensions */
1701 #define WACS_S3     NCURSES_WACS('p') /* scan line 3 */
1702 #define WACS_S7     NCURSES_WACS('r') /* scan line 7 */
1703 #define WACS_LEQUAL NCURSES_WACS('y') /* less/equal */
1704 #define WACS_GEQUAL NCURSES_WACS('z') /* greater/equal */
1705 #define WACS_PI     NCURSES_WACS('{') /* Pi */
1706 #define WACS_NEQUAL NCURSES_WACS('|') /* not equal */
1707 #define WACS_STERLING   NCURSES_WACS('}') /* UK pound sign */
1708 
1709     /* double lines */
1710 #define WACS_BDDB   NCURSES_WACS('C')
1711 #define WACS_DDBB   NCURSES_WACS('D')
1712 #define WACS_BBDD   NCURSES_WACS('B')
1713 #define WACS_DBBD   NCURSES_WACS('A')
1714 #define WACS_DBDD   NCURSES_WACS('G')
1715 #define WACS_DDDB   NCURSES_WACS('F')
1716 #define WACS_DDBD   NCURSES_WACS('H')
1717 #define WACS_BDDD   NCURSES_WACS('I')
1718 #define WACS_BDBD   NCURSES_WACS('R')
1719 #define WACS_DBDB   NCURSES_WACS('Y')
1720 #define WACS_DDDD   NCURSES_WACS('E')
1721 
1722 #define WACS_D_ULCORNER WACS_BDDB
1723 #define WACS_D_LLCORNER WACS_DDBB
1724 #define WACS_D_URCORNER WACS_BBDD
1725 #define WACS_D_LRCORNER WACS_DBBD
1726 #define WACS_D_RTEE WACS_DBDD
1727 #define WACS_D_LTEE WACS_DDDB
1728 #define WACS_D_BTEE WACS_DDBD
1729 #define WACS_D_TTEE WACS_BDDD
1730 #define WACS_D_HLINE    WACS_BDBD
1731 #define WACS_D_VLINE    WACS_DBDB
1732 #define WACS_D_PLUS WACS_DDDD
1733 
1734     /* thick lines */
1735 #define WACS_BTTB   NCURSES_WACS('L')
1736 #define WACS_TTBB   NCURSES_WACS('M')
1737 #define WACS_BBTT   NCURSES_WACS('K')
1738 #define WACS_TBBT   NCURSES_WACS('J')
1739 #define WACS_TBTT   NCURSES_WACS('U')
1740 #define WACS_TTTB   NCURSES_WACS('T')
1741 #define WACS_TTBT   NCURSES_WACS('V')
1742 #define WACS_BTTT   NCURSES_WACS('W')
1743 #define WACS_BTBT   NCURSES_WACS('Q')
1744 #define WACS_TBTB   NCURSES_WACS('X')
1745 #define WACS_TTTT   NCURSES_WACS('N')
1746 
1747 #define WACS_T_ULCORNER WACS_BTTB
1748 #define WACS_T_LLCORNER WACS_TTBB
1749 #define WACS_T_URCORNER WACS_BBTT
1750 #define WACS_T_LRCORNER WACS_TBBT
1751 #define WACS_T_RTEE WACS_TBTT
1752 #define WACS_T_LTEE WACS_TTTB
1753 #define WACS_T_BTEE WACS_TTBT
1754 #define WACS_T_TTEE WACS_BTTT
1755 #define WACS_T_HLINE    WACS_BTBT
1756 #define WACS_T_VLINE    WACS_TBTB
1757 #define WACS_T_PLUS WACS_TTTT
1758 
1759 /*
1760  * Function prototypes for wide-character operations.
1761  *
1762  * "generated" comments should include ":WIDEC" to make the corresponding
1763  * functions ifdef'd in lib_gen.c
1764  *
1765  * "implemented" comments do not need this marker.
1766  */
1767 
1768 extern NCURSES_EXPORT(int) add_wch (const cchar_t *);           /* generated:WIDEC */
1769 extern NCURSES_EXPORT(int) add_wchnstr (const cchar_t *, int);      /* generated:WIDEC */
1770 extern NCURSES_EXPORT(int) add_wchstr (const cchar_t *);        /* generated:WIDEC */
1771 extern NCURSES_EXPORT(int) addnwstr (const wchar_t *, int);     /* generated:WIDEC */
1772 extern NCURSES_EXPORT(int) addwstr (const wchar_t *);           /* generated:WIDEC */
1773 extern NCURSES_EXPORT(int) bkgrnd (const cchar_t *);            /* generated:WIDEC */
1774 extern NCURSES_EXPORT(void) bkgrndset (const cchar_t *);        /* generated:WIDEC */
1775 extern NCURSES_EXPORT(int) border_set (const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*); /* generated:WIDEC */
1776 extern NCURSES_EXPORT(int) box_set (WINDOW *, const cchar_t *, const cchar_t *);    /* generated:WIDEC */
1777 extern NCURSES_EXPORT(int) echo_wchar (const cchar_t *);        /* generated:WIDEC */
1778 extern NCURSES_EXPORT(int) erasewchar (wchar_t*);           /* implemented */
1779 extern NCURSES_EXPORT(int) get_wch (wint_t *);              /* generated:WIDEC */
1780 extern NCURSES_EXPORT(int) get_wstr (wint_t *);             /* generated:WIDEC */
1781 extern NCURSES_EXPORT(int) getbkgrnd (cchar_t *);           /* generated:WIDEC */
1782 extern NCURSES_EXPORT(int) getcchar (const cchar_t *, wchar_t*, attr_t*, NCURSES_PAIRS_T*, void*);  /* implemented */
1783 extern NCURSES_EXPORT(int) getn_wstr (wint_t *, int);           /* generated:WIDEC */
1784 extern NCURSES_EXPORT(int) hline_set (const cchar_t *, int);        /* generated:WIDEC */
1785 extern NCURSES_EXPORT(int) in_wch (cchar_t *);              /* generated:WIDEC */
1786 extern NCURSES_EXPORT(int) in_wchnstr (cchar_t *, int);         /* generated:WIDEC */
1787 extern NCURSES_EXPORT(int) in_wchstr (cchar_t *);           /* generated:WIDEC */
1788 extern NCURSES_EXPORT(int) innwstr (wchar_t *, int);            /* generated:WIDEC */
1789 extern NCURSES_EXPORT(int) ins_nwstr (const wchar_t *, int);        /* generated:WIDEC */
1790 extern NCURSES_EXPORT(int) ins_wch (const cchar_t *);           /* generated:WIDEC */
1791 extern NCURSES_EXPORT(int) ins_wstr (const wchar_t *);          /* generated:WIDEC */
1792 extern NCURSES_EXPORT(int) inwstr (wchar_t *);              /* generated:WIDEC */
1793 extern NCURSES_EXPORT(NCURSES_CONST char*) key_name (wchar_t);      /* implemented */
1794 extern NCURSES_EXPORT(int) killwchar (wchar_t *);           /* implemented */
1795 extern NCURSES_EXPORT(int) mvadd_wch (int, int, const cchar_t *);   /* generated:WIDEC */
1796 extern NCURSES_EXPORT(int) mvadd_wchnstr (int, int, const cchar_t *, int);/* generated:WIDEC */
1797 extern NCURSES_EXPORT(int) mvadd_wchstr (int, int, const cchar_t *);    /* generated:WIDEC */
1798 extern NCURSES_EXPORT(int) mvaddnwstr (int, int, const wchar_t *, int); /* generated:WIDEC */
1799 extern NCURSES_EXPORT(int) mvaddwstr (int, int, const wchar_t *);   /* generated:WIDEC */
1800 extern NCURSES_EXPORT(int) mvget_wch (int, int, wint_t *);      /* generated:WIDEC */
1801 extern NCURSES_EXPORT(int) mvget_wstr (int, int, wint_t *);     /* generated:WIDEC */
1802 extern NCURSES_EXPORT(int) mvgetn_wstr (int, int, wint_t *, int);   /* generated:WIDEC */
1803 extern NCURSES_EXPORT(int) mvhline_set (int, int, const cchar_t *, int);    /* generated:WIDEC */
1804 extern NCURSES_EXPORT(int) mvin_wch (int, int, cchar_t *);      /* generated:WIDEC */
1805 extern NCURSES_EXPORT(int) mvin_wchnstr (int, int, cchar_t *, int); /* generated:WIDEC */
1806 extern NCURSES_EXPORT(int) mvin_wchstr (int, int, cchar_t *);       /* generated:WIDEC */
1807 extern NCURSES_EXPORT(int) mvinnwstr (int, int, wchar_t *, int);    /* generated:WIDEC */
1808 extern NCURSES_EXPORT(int) mvins_nwstr (int, int, const wchar_t *, int);    /* generated:WIDEC */
1809 extern NCURSES_EXPORT(int) mvins_wch (int, int, const cchar_t *);   /* generated:WIDEC */
1810 extern NCURSES_EXPORT(int) mvins_wstr (int, int, const wchar_t *);  /* generated:WIDEC */
1811 extern NCURSES_EXPORT(int) mvinwstr (int, int, wchar_t *);      /* generated:WIDEC */
1812 extern NCURSES_EXPORT(int) mvvline_set (int, int, const cchar_t *, int);    /* generated:WIDEC */
1813 extern NCURSES_EXPORT(int) mvwadd_wch (WINDOW *, int, int, const cchar_t *);    /* generated:WIDEC */
1814 extern NCURSES_EXPORT(int) mvwadd_wchnstr (WINDOW *, int, int, const cchar_t *, int); /* generated:WIDEC */
1815 extern NCURSES_EXPORT(int) mvwadd_wchstr (WINDOW *, int, int, const cchar_t *); /* generated:WIDEC */
1816 extern NCURSES_EXPORT(int) mvwaddnwstr (WINDOW *, int, int, const wchar_t *, int);/* generated:WIDEC */
1817 extern NCURSES_EXPORT(int) mvwaddwstr (WINDOW *, int, int, const wchar_t *);    /* generated:WIDEC */
1818 extern NCURSES_EXPORT(int) mvwget_wch (WINDOW *, int, int, wint_t *);   /* generated:WIDEC */
1819 extern NCURSES_EXPORT(int) mvwget_wstr (WINDOW *, int, int, wint_t *);  /* generated:WIDEC */
1820 extern NCURSES_EXPORT(int) mvwgetn_wstr (WINDOW *, int, int, wint_t *, int);/* generated:WIDEC */
1821 extern NCURSES_EXPORT(int) mvwhline_set (WINDOW *, int, int, const cchar_t *, int);/* generated:WIDEC */
1822 extern NCURSES_EXPORT(int) mvwin_wch (WINDOW *, int, int, cchar_t *);   /* generated:WIDEC */
1823 extern NCURSES_EXPORT(int) mvwin_wchnstr (WINDOW *, int,int, cchar_t *,int);    /* generated:WIDEC */
1824 extern NCURSES_EXPORT(int) mvwin_wchstr (WINDOW *, int, int, cchar_t *);    /* generated:WIDEC */
1825 extern NCURSES_EXPORT(int) mvwinnwstr (WINDOW *, int, int, wchar_t *, int); /* generated:WIDEC */
1826 extern NCURSES_EXPORT(int) mvwins_nwstr (WINDOW *, int,int, const wchar_t *,int); /* generated:WIDEC */
1827 extern NCURSES_EXPORT(int) mvwins_wch (WINDOW *, int, int, const cchar_t *);    /* generated:WIDEC */
1828 extern NCURSES_EXPORT(int) mvwins_wstr (WINDOW *, int, int, const wchar_t *);   /* generated:WIDEC */
1829 extern NCURSES_EXPORT(int) mvwinwstr (WINDOW *, int, int, wchar_t *);       /* generated:WIDEC */
1830 extern NCURSES_EXPORT(int) mvwvline_set (WINDOW *, int,int, const cchar_t *,int); /* generated:WIDEC */
1831 extern NCURSES_EXPORT(int) pecho_wchar (WINDOW *, const cchar_t *); /* implemented */
1832 extern NCURSES_EXPORT(int) setcchar (cchar_t *, const wchar_t *, const attr_t, NCURSES_PAIRS_T, const void *);  /* implemented */
1833 extern NCURSES_EXPORT(int) slk_wset (int, const wchar_t *, int);    /* implemented */
1834 extern NCURSES_EXPORT(attr_t) term_attrs (void);            /* implemented */
1835 extern NCURSES_EXPORT(int) unget_wch (const wchar_t);           /* implemented */
1836 extern NCURSES_EXPORT(int) vid_attr (attr_t, NCURSES_PAIRS_T, void *);      /* implemented */
1837 extern NCURSES_EXPORT(int) vid_puts (attr_t, NCURSES_PAIRS_T, void *, NCURSES_OUTC); /* implemented */
1838 extern NCURSES_EXPORT(int) vline_set (const cchar_t *, int);        /* generated:WIDEC */
1839 extern NCURSES_EXPORT(int) wadd_wch (WINDOW *,const cchar_t *);     /* implemented */
1840 extern NCURSES_EXPORT(int) wadd_wchnstr (WINDOW *,const cchar_t *,int); /* implemented */
1841 extern NCURSES_EXPORT(int) wadd_wchstr (WINDOW *,const cchar_t *);  /* generated:WIDEC */
1842 extern NCURSES_EXPORT(int) waddnwstr (WINDOW *,const wchar_t *,int);    /* implemented */
1843 extern NCURSES_EXPORT(int) waddwstr (WINDOW *,const wchar_t *);     /* generated:WIDEC */
1844 extern NCURSES_EXPORT(int) wbkgrnd (WINDOW *,const cchar_t *);      /* implemented */
1845 extern NCURSES_EXPORT(void) wbkgrndset (WINDOW *,const cchar_t *);  /* implemented */
1846 extern NCURSES_EXPORT(int) wborder_set (WINDOW *,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*);  /* implemented */
1847 extern NCURSES_EXPORT(int) wecho_wchar (WINDOW *, const cchar_t *); /* implemented */
1848 extern NCURSES_EXPORT(int) wget_wch (WINDOW *, wint_t *);       /* implemented */
1849 extern NCURSES_EXPORT(int) wget_wstr (WINDOW *, wint_t *);      /* generated:WIDEC */
1850 extern NCURSES_EXPORT(int) wgetbkgrnd (WINDOW *, cchar_t *);        /* generated:WIDEC */
1851 extern NCURSES_EXPORT(int) wgetn_wstr (WINDOW *, wint_t *, int);    /* implemented */
1852 extern NCURSES_EXPORT(int) whline_set (WINDOW *, const cchar_t *, int); /* implemented */
1853 extern NCURSES_EXPORT(int) win_wch (WINDOW *, cchar_t *);       /* implemented */
1854 extern NCURSES_EXPORT(int) win_wchnstr (WINDOW *, cchar_t *, int);  /* implemented */
1855 extern NCURSES_EXPORT(int) win_wchstr (WINDOW *, cchar_t *);        /* generated:WIDEC */
1856 extern NCURSES_EXPORT(int) winnwstr (WINDOW *, wchar_t *, int);     /* implemented */
1857 extern NCURSES_EXPORT(int) wins_nwstr (WINDOW *, const wchar_t *, int); /* implemented */
1858 extern NCURSES_EXPORT(int) wins_wch (WINDOW *, const cchar_t *);    /* implemented */
1859 extern NCURSES_EXPORT(int) wins_wstr (WINDOW *, const wchar_t *);   /* generated:WIDEC */
1860 extern NCURSES_EXPORT(int) winwstr (WINDOW *, wchar_t *);       /* generated:WIDEC */
1861 extern NCURSES_EXPORT(wchar_t*) wunctrl (cchar_t *);            /* implemented */
1862 extern NCURSES_EXPORT(int) wvline_set (WINDOW *, const cchar_t *, int); /* implemented */
1863 
1864 #if NCURSES_SP_FUNCS
1865 extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(term_attrs) (SCREEN*);        /* implemented:SP_FUNC */
1866 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(erasewchar) (SCREEN*, wchar_t *);    /* implemented:SP_FUNC */
1867 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(killwchar) (SCREEN*, wchar_t *); /* implemented:SP_FUNC */
1868 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(unget_wch) (SCREEN*, const wchar_t); /* implemented:SP_FUNC */
1869 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_attr) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *);    /* implemented:SP_FUNC */
1870 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_puts) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *, NCURSES_SP_OUTC);   /* implemented:SP_FUNC */
1871 extern NCURSES_EXPORT(wchar_t*) NCURSES_SP_NAME(wunctrl) (SCREEN*, cchar_t *);  /* implemented:SP_FUNC */
1872 #endif
1873 
1874 #ifndef NCURSES_NOMACROS
1875 
1876 /*
1877  * XSI curses macros for XPG4 conformance.
1878  */
1879 #define add_wch(c)          wadd_wch(stdscr,(c))
1880 #define add_wchnstr(str,n)      wadd_wchnstr(stdscr,(str),(n))
1881 #define add_wchstr(str)         wadd_wchstr(stdscr,(str))
1882 #define addnwstr(wstr,n)        waddnwstr(stdscr,(wstr),(n))
1883 #define addwstr(wstr)           waddwstr(stdscr,(wstr))
1884 #define bkgrnd(c)           wbkgrnd(stdscr,(c))
1885 #define bkgrndset(c)            wbkgrndset(stdscr,(c))
1886 #define border_set(l,r,t,b,tl,tr,bl,br) wborder_set(stdscr,(l),(r),(t),(b),tl,tr,bl,br)
1887 #define box_set(w,v,h)          wborder_set((w),(v),(v),(h),(h),NULL,NULL,NULL,NULL)
1888 #define echo_wchar(c)           wecho_wchar(stdscr,(c))
1889 #define get_wch(c)          wget_wch(stdscr,(c))
1890 #define get_wstr(t)         wget_wstr(stdscr,(t))
1891 #define getbkgrnd(wch)          wgetbkgrnd(stdscr,(wch))
1892 #define getn_wstr(t,n)          wgetn_wstr(stdscr,(t),(n))
1893 #define hline_set(c,n)          whline_set(stdscr,(c),(n))
1894 #define in_wch(c)           win_wch(stdscr,(c))
1895 #define in_wchnstr(c,n)         win_wchnstr(stdscr,(c),(n))
1896 #define in_wchstr(c)            win_wchstr(stdscr,(c))
1897 #define innwstr(c,n)            winnwstr(stdscr,(c),(n))
1898 #define ins_nwstr(t,n)          wins_nwstr(stdscr,(t),(n))
1899 #define ins_wch(c)          wins_wch(stdscr,(c))
1900 #define ins_wstr(t)         wins_wstr(stdscr,(t))
1901 #define inwstr(c)           winwstr(stdscr,(c))
1902 #define vline_set(c,n)          wvline_set(stdscr,(c),(n))
1903 #define wadd_wchstr(win,str)        wadd_wchnstr((win),(str),-1)
1904 #define waddwstr(win,wstr)      waddnwstr((win),(wstr),-1)
1905 #define wget_wstr(w,t)          wgetn_wstr((w),(t),-1)
1906 #define win_wchstr(w,c)         win_wchnstr((w),(c),-1)
1907 #define wins_wstr(w,t)          wins_nwstr((w),(t),-1)
1908 #define winwstr(w,c)            winnwstr((w),(c),-1)
1909 
1910 #if !NCURSES_OPAQUE
1911 #define wgetbkgrnd(win,wch)     (NCURSES_OK_ADDR(wch) ? ((win) ? (*(wch) = (win)->_bkgrnd) : *(wch), OK) : ERR)
1912 #endif
1913 
1914 #define mvadd_wch(y,x,c)        mvwadd_wch(stdscr,(y),(x),(c))
1915 #define mvadd_wchnstr(y,x,s,n)      mvwadd_wchnstr(stdscr,(y),(x),(s),(n))
1916 #define mvadd_wchstr(y,x,s)     mvwadd_wchstr(stdscr,(y),(x),(s))
1917 #define mvaddnwstr(y,x,wstr,n)      mvwaddnwstr(stdscr,(y),(x),(wstr),(n))
1918 #define mvaddwstr(y,x,wstr)     mvwaddwstr(stdscr,(y),(x),(wstr))
1919 #define mvget_wch(y,x,c)        mvwget_wch(stdscr,(y),(x),(c))
1920 #define mvget_wstr(y,x,t)       mvwget_wstr(stdscr,(y),(x),(t))
1921 #define mvgetn_wstr(y,x,t,n)        mvwgetn_wstr(stdscr,(y),(x),(t),(n))
1922 #define mvhline_set(y,x,c,n)        mvwhline_set(stdscr,(y),(x),(c),(n))
1923 #define mvin_wch(y,x,c)         mvwin_wch(stdscr,(y),(x),(c))
1924 #define mvin_wchnstr(y,x,c,n)       mvwin_wchnstr(stdscr,(y),(x),(c),(n))
1925 #define mvin_wchstr(y,x,c)      mvwin_wchstr(stdscr,(y),(x),(c))
1926 #define mvinnwstr(y,x,c,n)      mvwinnwstr(stdscr,(y),(x),(c),(n))
1927 #define mvins_nwstr(y,x,t,n)        mvwins_nwstr(stdscr,(y),(x),(t),(n))
1928 #define mvins_wch(y,x,c)        mvwins_wch(stdscr,(y),(x),(c))
1929 #define mvins_wstr(y,x,t)       mvwins_wstr(stdscr,(y),(x),(t))
1930 #define mvinwstr(y,x,c)         mvwinwstr(stdscr,(y),(x),(c))
1931 #define mvvline_set(y,x,c,n)        mvwvline_set(stdscr,(y),(x),(c),(n))
1932 
1933 #define mvwadd_wch(win,y,x,c)       (wmove(win,(y),(x)) == ERR ? ERR : wadd_wch((win),(c)))
1934 #define mvwadd_wchnstr(win,y,x,s,n) (wmove(win,(y),(x)) == ERR ? ERR : wadd_wchnstr((win),(s),(n)))
1935 #define mvwadd_wchstr(win,y,x,s)    (wmove(win,(y),(x)) == ERR ? ERR : wadd_wchstr((win),(s)))
1936 #define mvwaddnwstr(win,y,x,wstr,n) (wmove(win,(y),(x)) == ERR ? ERR : waddnwstr((win),(wstr),(n)))
1937 #define mvwaddwstr(win,y,x,wstr)    (wmove(win,(y),(x)) == ERR ? ERR : waddwstr((win),(wstr)))
1938 #define mvwget_wch(win,y,x,c)       (wmove(win,(y),(x)) == ERR ? ERR : wget_wch((win),(c)))
1939 #define mvwget_wstr(win,y,x,t)      (wmove(win,(y),(x)) == ERR ? ERR : wget_wstr((win),(t)))
1940 #define mvwgetn_wstr(win,y,x,t,n)   (wmove(win,(y),(x)) == ERR ? ERR : wgetn_wstr((win),(t),(n)))
1941 #define mvwhline_set(win,y,x,c,n)   (wmove(win,(y),(x)) == ERR ? ERR : whline_set((win),(c),(n)))
1942 #define mvwin_wch(win,y,x,c)        (wmove(win,(y),(x)) == ERR ? ERR : win_wch((win),(c)))
1943 #define mvwin_wchnstr(win,y,x,c,n)  (wmove(win,(y),(x)) == ERR ? ERR : win_wchnstr((win),(c),(n)))
1944 #define mvwin_wchstr(win,y,x,c)     (wmove(win,(y),(x)) == ERR ? ERR : win_wchstr((win),(c)))
1945 #define mvwinnwstr(win,y,x,c,n)     (wmove(win,(y),(x)) == ERR ? ERR : winnwstr((win),(c),(n)))
1946 #define mvwins_nwstr(win,y,x,t,n)   (wmove(win,(y),(x)) == ERR ? ERR : wins_nwstr((win),(t),(n)))
1947 #define mvwins_wch(win,y,x,c)       (wmove(win,(y),(x)) == ERR ? ERR : wins_wch((win),(c)))
1948 #define mvwins_wstr(win,y,x,t)      (wmove(win,(y),(x)) == ERR ? ERR : wins_wstr((win),(t)))
1949 #define mvwinwstr(win,y,x,c)        (wmove(win,(y),(x)) == ERR ? ERR : winwstr((win),(c)))
1950 #define mvwvline_set(win,y,x,c,n)   (wmove(win,(y),(x)) == ERR ? ERR : wvline_set((win),(c),(n)))
1951 
1952 #endif /* NCURSES_NOMACROS */
1953 
1954 #if defined(TRACE) || defined(NCURSES_TEST)
1955 extern NCURSES_EXPORT(const char *) _nc_viswbuf(const wchar_t *);
1956 extern NCURSES_EXPORT(const char *) _nc_viswibuf(const wint_t *);
1957 #endif
1958 
1959 #endif /* NCURSES_WIDECHAR */
1960 /* $Id: curses.tail,v 1.28 2025/05/17 20:32:15 tom Exp $ */
1961 /*
1962  * vile:cmode:
1963  * This file is part of ncurses, designed to be appended after curses.h.in
1964  * (see that file for the relevant copyright).
1965  */
1966 
1967 /* mouse interface */
1968 
1969 #if NCURSES_MOUSE_VERSION > 1
1970 #define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 5))
1971 #else
1972 #define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6))
1973 #endif
1974 
1975 #define NCURSES_BUTTON_RELEASED 001UL
1976 #define NCURSES_BUTTON_PRESSED  002UL
1977 #define NCURSES_BUTTON_CLICKED  004UL
1978 #define NCURSES_DOUBLE_CLICKED  010UL
1979 #define NCURSES_TRIPLE_CLICKED  020UL
1980 #define NCURSES_RESERVED_EVENT  040UL
1981 
1982 /* event masks */
1983 #define BUTTON1_RELEASED    NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
1984 #define BUTTON1_PRESSED     NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
1985 #define BUTTON1_CLICKED     NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
1986 #define BUTTON1_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
1987 #define BUTTON1_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
1988 
1989 #define BUTTON2_RELEASED    NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
1990 #define BUTTON2_PRESSED     NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
1991 #define BUTTON2_CLICKED     NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
1992 #define BUTTON2_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
1993 #define BUTTON2_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
1994 
1995 #define BUTTON3_RELEASED    NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
1996 #define BUTTON3_PRESSED     NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
1997 #define BUTTON3_CLICKED     NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
1998 #define BUTTON3_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
1999 #define BUTTON3_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
2000 
2001 #define BUTTON4_RELEASED    NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
2002 #define BUTTON4_PRESSED     NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
2003 #define BUTTON4_CLICKED     NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
2004 #define BUTTON4_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
2005 #define BUTTON4_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
2006 
2007 /*
2008  * In 32 bits the version-1 scheme does not provide enough space for a 5th
2009  * button, unless we choose to change the ABI by omitting the reserved-events.
2010  */
2011 #if NCURSES_MOUSE_VERSION > 1
2012 
2013 #define BUTTON5_RELEASED    NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
2014 #define BUTTON5_PRESSED     NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
2015 #define BUTTON5_CLICKED     NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
2016 #define BUTTON5_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
2017 #define BUTTON5_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
2018 
2019 #define BUTTON_CTRL     NCURSES_MOUSE_MASK(6, 0001L)
2020 #define BUTTON_SHIFT        NCURSES_MOUSE_MASK(6, 0002L)
2021 #define BUTTON_ALT      NCURSES_MOUSE_MASK(6, 0004L)
2022 #define REPORT_MOUSE_POSITION   NCURSES_MOUSE_MASK(6, 0010L)
2023 
2024 /*
2025  * If mmask_T is 64-bits, we can define another 6 button stanzas, for a total
2026  * of 11, which happens to be the maximum number supported in the X11 protocol.
2027  */
2028 #if NCURSES_MOUSE_VERSION > 2
2029 
2030 #define BUTTON6_RELEASED    NCURSES_MOUSE_MASK(6, NCURSES_BUTTON_RELEASED)
2031 #define BUTTON6_PRESSED     NCURSES_MOUSE_MASK(6, NCURSES_BUTTON_PRESSED)
2032 #define BUTTON6_CLICKED     NCURSES_MOUSE_MASK(6, NCURSES_BUTTON_CLICKED)
2033 #define BUTTON6_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(6, NCURSES_DOUBLE_CLICKED)
2034 #define BUTTON6_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(6, NCURSES_TRIPLE_CLICKED)
2035 
2036 #define BUTTON7_RELEASED    NCURSES_MOUSE_MASK(7, NCURSES_BUTTON_RELEASED)
2037 #define BUTTON7_PRESSED     NCURSES_MOUSE_MASK(7, NCURSES_BUTTON_PRESSED)
2038 #define BUTTON7_CLICKED     NCURSES_MOUSE_MASK(7, NCURSES_BUTTON_CLICKED)
2039 #define BUTTON7_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(7, NCURSES_DOUBLE_CLICKED)
2040 #define BUTTON7_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(7, NCURSES_TRIPLE_CLICKED)
2041 
2042 #define BUTTON8_RELEASED    NCURSES_MOUSE_MASK(8, NCURSES_BUTTON_RELEASED)
2043 #define BUTTON8_PRESSED     NCURSES_MOUSE_MASK(8, NCURSES_BUTTON_PRESSED)
2044 #define BUTTON8_CLICKED     NCURSES_MOUSE_MASK(8, NCURSES_BUTTON_CLICKED)
2045 #define BUTTON8_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(8, NCURSES_DOUBLE_CLICKED)
2046 #define BUTTON8_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(8, NCURSES_TRIPLE_CLICKED)
2047 
2048 #define BUTTON9_RELEASED    NCURSES_MOUSE_MASK(9, NCURSES_BUTTON_RELEASED)
2049 #define BUTTON9_PRESSED     NCURSES_MOUSE_MASK(9, NCURSES_BUTTON_PRESSED)
2050 #define BUTTON9_CLICKED     NCURSES_MOUSE_MASK(9, NCURSES_BUTTON_CLICKED)
2051 #define BUTTON9_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(9, NCURSES_DOUBLE_CLICKED)
2052 #define BUTTON9_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(9, NCURSES_TRIPLE_CLICKED)
2053 
2054 #define BUTTON10_RELEASED   NCURSES_MOUSE_MASK(10, NCURSES_BUTTON_RELEASED)
2055 #define BUTTON10_PRESSED    NCURSES_MOUSE_MASK(10, NCURSES_BUTTON_PRESSED)
2056 #define BUTTON10_CLICKED    NCURSES_MOUSE_MASK(10, NCURSES_BUTTON_CLICKED)
2057 #define BUTTON10_DOUBLE_CLICKED NCURSES_MOUSE_MASK(10, NCURSES_DOUBLE_CLICKED)
2058 #define BUTTON10_TRIPLE_CLICKED NCURSES_MOUSE_MASK(10, NCURSES_TRIPLE_CLICKED)
2059 
2060 #define BUTTON11_RELEASED   NCURSES_MOUSE_MASK(11, NCURSES_BUTTON_RELEASED)
2061 #define BUTTON11_PRESSED    NCURSES_MOUSE_MASK(11, NCURSES_BUTTON_PRESSED)
2062 #define BUTTON11_CLICKED    NCURSES_MOUSE_MASK(11, NCURSES_BUTTON_CLICKED)
2063 #define BUTTON11_DOUBLE_CLICKED NCURSES_MOUSE_MASK(11, NCURSES_DOUBLE_CLICKED)
2064 #define BUTTON11_TRIPLE_CLICKED NCURSES_MOUSE_MASK(11, NCURSES_TRIPLE_CLICKED)
2065 
2066 #endif
2067 
2068 #else   /* NCURSES_MOUSE_VERSION == 1 */
2069 
2070 #define BUTTON1_RESERVED_EVENT  NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
2071 #define BUTTON2_RESERVED_EVENT  NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
2072 #define BUTTON3_RESERVED_EVENT  NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
2073 #define BUTTON4_RESERVED_EVENT  NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
2074 
2075 #define BUTTON_CTRL     NCURSES_MOUSE_MASK(5, 0001L)
2076 #define BUTTON_SHIFT        NCURSES_MOUSE_MASK(5, 0002L)
2077 #define BUTTON_ALT      NCURSES_MOUSE_MASK(5, 0004L)
2078 #define REPORT_MOUSE_POSITION   NCURSES_MOUSE_MASK(5, 0010L)
2079 
2080 #endif  /* NCURSES_MOUSE_VERSION >= 1 */
2081 
2082 #define ALL_MOUSE_EVENTS    (REPORT_MOUSE_POSITION - 1)
2083 
2084 /* macros to extract single event-bits from masks */
2085 #define BUTTON_RELEASE(e, x)        ((e) & NCURSES_MOUSE_MASK(x, 001))
2086 #define BUTTON_PRESS(e, x)      ((e) & NCURSES_MOUSE_MASK(x, 002))
2087 #define BUTTON_CLICK(e, x)      ((e) & NCURSES_MOUSE_MASK(x, 004))
2088 #define BUTTON_DOUBLE_CLICK(e, x)   ((e) & NCURSES_MOUSE_MASK(x, 010))
2089 #define BUTTON_TRIPLE_CLICK(e, x)   ((e) & NCURSES_MOUSE_MASK(x, 020))
2090 #define BUTTON_RESERVED_EVENT(e, x) ((e) & NCURSES_MOUSE_MASK(x, 040))
2091 
2092 typedef struct
2093 {
2094     short id;       /* ID to distinguish multiple devices */
2095     int x, y, z;    /* event coordinates (character-cell) */
2096     mmask_t bstate; /* button state bits */
2097 }
2098 MEVENT;
2099 
2100 extern NCURSES_EXPORT(bool)    has_mouse(void);
2101 extern NCURSES_EXPORT(int)     getmouse (MEVENT *);
2102 extern NCURSES_EXPORT(int)     ungetmouse (MEVENT *);
2103 extern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *);
2104 extern NCURSES_EXPORT(bool)    wenclose (const WINDOW *, int, int);
2105 extern NCURSES_EXPORT(int)     mouseinterval (int);
2106 extern NCURSES_EXPORT(bool)    wmouse_trafo (const WINDOW*, int*, int*, bool);
2107 extern NCURSES_EXPORT(bool)    mouse_trafo (int*, int*, bool);              /* generated */
2108 
2109 #if NCURSES_SP_FUNCS
2110 extern NCURSES_EXPORT(bool)    NCURSES_SP_NAME(has_mouse) (SCREEN*);
2111 extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(getmouse) (SCREEN*, MEVENT *);
2112 extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(ungetmouse) (SCREEN*,MEVENT *);
2113 extern NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (SCREEN*, mmask_t, mmask_t *);
2114 extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(mouseinterval) (SCREEN*, int);
2115 #endif
2116 
2117 #ifndef NCURSES_NOMACROS
2118 #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
2119 #endif
2120 
2121 /* other non-XSI functions */
2122 
2123 extern NCURSES_EXPORT(int) mcprint (char *, int);   /* direct data to printer */
2124 extern NCURSES_EXPORT(int) has_key (int);       /* do we have given key? */
2125 
2126 #if NCURSES_SP_FUNCS
2127 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN*, int);    /* do we have given key? */
2128 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (SCREEN*, char *, int); /* direct data to printer */
2129 #endif
2130 
2131 /* Debugging : use with libncurses_g.a */
2132 
2133 extern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
2134 extern NCURSES_EXPORT(char *) _traceattr (attr_t);
2135 extern NCURSES_EXPORT(char *) _traceattr2 (int, chtype);
2136 extern NCURSES_EXPORT(char *) _tracechar (int);
2137 extern NCURSES_EXPORT(char *) _tracechtype (chtype);
2138 extern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype);
2139 #if NCURSES_WIDECHAR
2140 #define _tracech_t      _tracecchar_t
2141 extern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *);
2142 #define _tracech_t2     _tracecchar_t2
2143 extern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *);
2144 #else
2145 #define _tracech_t      _tracechtype
2146 #define _tracech_t2     _tracechtype2
2147 #endif
2148 extern NCURSES_EXPORT(void) trace (const unsigned) GCC_DEPRECATED("use curses_trace");
2149 extern NCURSES_EXPORT(unsigned) curses_trace (const unsigned);
2150 
2151 /* trace masks */
2152 #define TRACE_DISABLE   0x0000  /* turn off tracing */
2153 #define TRACE_TIMES 0x0001  /* trace user and system times of updates */
2154 #define TRACE_TPUTS 0x0002  /* trace tputs calls */
2155 #define TRACE_UPDATE    0x0004  /* trace update actions, old & new screens */
2156 #define TRACE_MOVE  0x0008  /* trace cursor moves and scrolls */
2157 #define TRACE_CHARPUT   0x0010  /* trace all character outputs */
2158 #define TRACE_ORDINARY  0x001F  /* trace all update actions */
2159 #define TRACE_CALLS 0x0020  /* trace all curses calls */
2160 #define TRACE_VIRTPUT   0x0040  /* trace virtual character puts */
2161 #define TRACE_IEVENT    0x0080  /* trace low-level input processing */
2162 #define TRACE_BITS  0x0100  /* trace state of TTY control bits */
2163 #define TRACE_ICALLS    0x0200  /* trace internal/nested calls */
2164 #define TRACE_CCALLS    0x0400  /* trace per-character calls */
2165 #define TRACE_DATABASE  0x0800  /* trace read/write of terminfo/termcap data */
2166 #define TRACE_ATTRS 0x1000  /* trace attribute updates */
2167 
2168 #define TRACE_SHIFT 13  /* number of bits in the trace masks */
2169 #define TRACE_MAXIMUM   ((1 << TRACE_SHIFT) - 1) /* maximum trace level */
2170 
2171 #if defined(TRACE) || defined(NCURSES_TEST)
2172 extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable;     /* enable optimizations */
2173 extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
2174 #define OPTIMIZE_MVCUR      0x01    /* cursor movement optimization */
2175 #define OPTIMIZE_HASHMAP    0x02    /* diff hashing to detect scrolls */
2176 #define OPTIMIZE_SCROLL     0x04    /* scroll optimization */
2177 #define OPTIMIZE_ALL        0xff    /* enable all optimizations (dflt) */
2178 #endif
2179 
2180 extern GCC_NORETURN NCURSES_EXPORT(void) exit_curses (int);
2181 
2182 #include <ncursesw/unctrl.h>
2183 
2184 #ifdef __cplusplus
2185 
2186 #ifndef NCURSES_NOMACROS
2187 
2188 /* these names conflict with STL */
2189 #undef box
2190 #undef clear
2191 #undef erase
2192 #undef move
2193 #undef refresh
2194 
2195 #endif /* NCURSES_NOMACROS */
2196 
2197 }
2198 #endif
2199 
2200 #endif /* __NCURSES_H */