Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:02:11

0001 /****************************************************************************
0002  * Copyright 2018-2023,2024 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.282 2024/01/19 11:50:07 tom 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 20240427
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
0129 
0130 #undef NCURSES_INLINE
0131 #define NCURSES_INLINE inline
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
0179 #ifndef NCURSES_SIGWINCH
0180 #define NCURSES_SIGWINCH 1
0181 #endif
0182 #else
0183 #undef NCURSES_SIGWINCH
0184 #define NCURSES_SIGWINCH 0
0185 #endif
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 && 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 #else
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) (0 != 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 || 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
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
0470 #include <wchar.h>      /* ...to get mbstate_t, etc. */
0471 #endif
0472 
0473 #if 0
0474 typedef unsigned short wchar_t1;
0475 #endif
0476 
0477 #if 0
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
0493 #undef NCURSES_EXT_COLORS
0494 #define NCURSES_EXT_COLORS 20240427
0495     int     ext_color;  /* color pair, must be more than 16-bits */
0496 #endif
0497 }
0498 cchar_t;
0499 
0500 #endif /* NCURSES_WIDECHAR */
0501 
0502 #if !NCURSES_OPAQUE
0503 struct ldat;
0504 
0505 struct _win_st
0506 {
0507     NCURSES_SIZE_T _cury, _curx; /* current cursor position */
0508 
0509     /* window location and size */
0510     NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
0511     NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */
0512 
0513     short   _flags;     /* window state flags */
0514 
0515     /* attribute tracking */
0516     attr_t  _attrs;     /* current attribute for non-space character */
0517     chtype  _bkgd;      /* current background char/attribute pair */
0518 
0519     /* option values set by user */
0520     bool    _notimeout; /* no time out on function-key entry? */
0521     bool    _clear;     /* consider all data in the window invalid? */
0522     bool    _leaveok;   /* OK to not reset cursor on exit? */
0523     bool    _scroll;    /* OK to scroll this window? */
0524     bool    _idlok;     /* OK to use insert/delete line? */
0525     bool    _idcok;     /* OK to use insert/delete char? */
0526     bool    _immed;     /* window in immed mode? (not yet used) */
0527     bool    _sync;      /* window in sync mode? */
0528     bool    _use_keypad;    /* process function keys into KEY_ symbols? */
0529     int _delay;     /* 0 = nodelay, <0 = blocking, >0 = delay */
0530 
0531     struct ldat *_line; /* the actual line data */
0532 
0533     /* global screen state */
0534     NCURSES_SIZE_T _regtop; /* top line of scrolling region */
0535     NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */
0536 
0537     /* these are used only if this is a sub-window */
0538     int _parx;      /* x coordinate of this window in parent */
0539     int _pary;      /* y coordinate of this window in parent */
0540     WINDOW  *_parent;   /* pointer to parent if a sub-window */
0541 
0542     /* these are used only if this is a pad */
0543     struct pdat
0544     {
0545         NCURSES_SIZE_T _pad_y,      _pad_x;
0546         NCURSES_SIZE_T _pad_top,    _pad_left;
0547         NCURSES_SIZE_T _pad_bottom, _pad_right;
0548     } _pad;
0549 
0550     NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
0551 
0552 #if NCURSES_WIDECHAR
0553     cchar_t  _bkgrnd;   /* current background char/attribute pair */
0554 #if 1
0555     int _color;     /* current color-pair for non-space character */
0556 #endif
0557 #endif
0558 };
0559 #endif /* NCURSES_OPAQUE */
0560 
0561 /*
0562  * GCC (and some other compilers) define '__attribute__'; we're using this
0563  * macro to alert the compiler to flag inconsistencies in printf/scanf-like
0564  * function calls.  Just in case '__attribute__' isn't defined, make a dummy.
0565  * Old versions of G++ do not accept it anyway, at least not consistently with
0566  * GCC.
0567  */
0568 #if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__))
0569 #define __attribute__(p) /* nothing */
0570 #endif
0571 
0572 /*
0573  * We cannot define these in ncurses_cfg.h, since they require parameters to be
0574  * passed (that is non-portable).
0575  */
0576 #ifndef GCC_PRINTFLIKE
0577 #ifndef printf
0578 #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
0579 #else
0580 #define GCC_PRINTFLIKE(fmt,var) /*nothing*/
0581 #endif
0582 #endif
0583 
0584 #ifndef GCC_SCANFLIKE
0585 #ifndef scanf
0586 #define GCC_SCANFLIKE(fmt,var)  __attribute__((format(scanf,fmt,var)))
0587 #else
0588 #define GCC_SCANFLIKE(fmt,var)  /*nothing*/
0589 #endif
0590 #endif
0591 
0592 #ifndef GCC_NORETURN
0593 #define GCC_NORETURN /* nothing */
0594 #endif
0595 
0596 #ifndef GCC_UNUSED
0597 #define GCC_UNUSED /* nothing */
0598 #endif
0599 
0600 #undef  GCC_DEPRECATED
0601 #if (__GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 >= 2)) && !defined(NCURSES_INTERNALS)
0602 #define GCC_DEPRECATED(msg) __attribute__((deprecated))
0603 #else
0604 #define GCC_DEPRECATED(msg) /* nothing */
0605 #endif
0606 
0607 /*
0608  * Curses uses a helper function.  Define our type for this to simplify
0609  * extending it for the sp-funcs feature.
0610  */
0611 typedef int (*NCURSES_OUTC)(int);
0612 
0613 /*
0614  * Function prototypes.  This is the complete X/Open Curses list of required
0615  * functions.  Those marked `generated' will have sources generated from the
0616  * macro definitions later in this file, in order to satisfy XPG4.2
0617  * requirements.
0618  */
0619 
0620 extern NCURSES_EXPORT(int) addch (const chtype);            /* generated */
0621 extern NCURSES_EXPORT(int) addchnstr (const chtype *, int);     /* generated */
0622 extern NCURSES_EXPORT(int) addchstr (const chtype *);           /* generated */
0623 extern NCURSES_EXPORT(int) addnstr (const char *, int);         /* generated */
0624 extern NCURSES_EXPORT(int) addstr (const char *);           /* generated */
0625 extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T);            /* generated */
0626 extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T);         /* generated */
0627 extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T);            /* generated */
0628 extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *);  /* generated */
0629 extern NCURSES_EXPORT(int) attr_off (attr_t, void *);           /* generated */
0630 extern NCURSES_EXPORT(int) attr_on (attr_t, void *);            /* generated */
0631 extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *);      /* generated */
0632 extern NCURSES_EXPORT(int) baudrate (void);             /* implemented */
0633 extern NCURSES_EXPORT(int) beep  (void);                /* implemented */
0634 extern NCURSES_EXPORT(int) bkgd (chtype);               /* generated */
0635 extern NCURSES_EXPORT(void) bkgdset (chtype);               /* generated */
0636 extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);    /* generated */
0637 extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype);      /* generated */
0638 extern NCURSES_EXPORT(bool) can_change_color (void);            /* implemented */
0639 extern NCURSES_EXPORT(int) cbreak (void);               /* implemented */
0640 extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *);  /* generated */
0641 extern NCURSES_EXPORT(int) clear (void);                /* generated */
0642 extern NCURSES_EXPORT(int) clearok (WINDOW *,bool);         /* implemented */
0643 extern NCURSES_EXPORT(int) clrtobot (void);             /* generated */
0644 extern NCURSES_EXPORT(int) clrtoeol (void);             /* generated */
0645 extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*);  /* implemented */
0646 extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*);           /* generated */
0647 extern NCURSES_EXPORT(int) COLOR_PAIR (int);                /* generated */
0648 extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int); /* implemented */
0649 extern NCURSES_EXPORT(int) curs_set (int);              /* implemented */
0650 extern NCURSES_EXPORT(int) def_prog_mode (void);            /* implemented */
0651 extern NCURSES_EXPORT(int) def_shell_mode (void);           /* implemented */
0652 extern NCURSES_EXPORT(int) delay_output (int);              /* implemented */
0653 extern NCURSES_EXPORT(int) delch (void);                /* generated */
0654 extern NCURSES_EXPORT(void) delscreen (SCREEN *);           /* implemented */
0655 extern NCURSES_EXPORT(int) delwin (WINDOW *);               /* implemented */
0656 extern NCURSES_EXPORT(int) deleteln (void);             /* generated */
0657 extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int);  /* implemented */
0658 extern NCURSES_EXPORT(int) doupdate (void);             /* implemented */
0659 extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *);          /* implemented */
0660 extern NCURSES_EXPORT(int) echo (void);                 /* implemented */
0661 extern NCURSES_EXPORT(int) echochar (const chtype);         /* generated */
0662 extern NCURSES_EXPORT(int) erase (void);                /* generated */
0663 extern NCURSES_EXPORT(int) endwin (void);               /* implemented */
0664 extern NCURSES_EXPORT(char) erasechar (void);               /* implemented */
0665 extern NCURSES_EXPORT(void) filter (void);              /* implemented */
0666 extern NCURSES_EXPORT(int) flash (void);                /* implemented */
0667 extern NCURSES_EXPORT(int) flushinp (void);             /* implemented */
0668 extern NCURSES_EXPORT(chtype) getbkgd (WINDOW *);           /* generated */
0669 extern NCURSES_EXPORT(int) getch (void);                /* generated */
0670 extern NCURSES_EXPORT(int) getnstr (char *, int);           /* generated */
0671 extern NCURSES_EXPORT(int) getstr (char *);             /* generated */
0672 extern NCURSES_EXPORT(WINDOW *) getwin (FILE *);            /* implemented */
0673 extern NCURSES_EXPORT(int) halfdelay (int);             /* implemented */
0674 extern NCURSES_EXPORT(bool) has_colors (void);              /* implemented */
0675 extern NCURSES_EXPORT(bool) has_ic (void);              /* implemented */
0676 extern NCURSES_EXPORT(bool) has_il (void);              /* implemented */
0677 extern NCURSES_EXPORT(int) hline (chtype, int);             /* generated */
0678 extern NCURSES_EXPORT(void) idcok (WINDOW *, bool);         /* implemented */
0679 extern NCURSES_EXPORT(int) idlok (WINDOW *, bool);          /* implemented */
0680 extern NCURSES_EXPORT(void) immedok (WINDOW *, bool);           /* implemented */
0681 extern NCURSES_EXPORT(chtype) inch (void);              /* generated */
0682 extern NCURSES_EXPORT(int) inchnstr (chtype *, int);            /* generated */
0683 extern NCURSES_EXPORT(int) inchstr (chtype *);              /* generated */
0684 extern NCURSES_EXPORT(WINDOW *) initscr (void);             /* implemented */
0685 extern NCURSES_EXPORT(int) init_color (NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T);    /* implemented */
0686 extern NCURSES_EXPORT(int) init_pair (NCURSES_PAIRS_T,NCURSES_COLOR_T,NCURSES_COLOR_T);     /* implemented */
0687 extern NCURSES_EXPORT(int) innstr (char *, int);            /* generated */
0688 extern NCURSES_EXPORT(int) insch (chtype);              /* generated */
0689 extern NCURSES_EXPORT(int) insdelln (int);              /* generated */
0690 extern NCURSES_EXPORT(int) insertln (void);             /* generated */
0691 extern NCURSES_EXPORT(int) insnstr (const char *, int);         /* generated */
0692 extern NCURSES_EXPORT(int) insstr (const char *);           /* generated */
0693 extern NCURSES_EXPORT(int) instr (char *);              /* generated */
0694 extern NCURSES_EXPORT(int) intrflush (WINDOW *,bool);           /* implemented */
0695 extern NCURSES_EXPORT(bool) isendwin (void);                /* implemented */
0696 extern NCURSES_EXPORT(bool) is_linetouched (WINDOW *,int);      /* implemented */
0697 extern NCURSES_EXPORT(bool) is_wintouched (WINDOW *);           /* implemented */
0698 extern NCURSES_EXPORT(NCURSES_CONST char *) keyname (int);      /* implemented */
0699 extern NCURSES_EXPORT(int) keypad (WINDOW *,bool);          /* implemented */
0700 extern NCURSES_EXPORT(char) killchar (void);                /* implemented */
0701 extern NCURSES_EXPORT(int) leaveok (WINDOW *,bool);         /* implemented */
0702 extern NCURSES_EXPORT(char *) longname (void);              /* implemented */
0703 extern NCURSES_EXPORT(int) meta (WINDOW *,bool);            /* implemented */
0704 extern NCURSES_EXPORT(int) move (int, int);             /* generated */
0705 extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);        /* generated */
0706 extern NCURSES_EXPORT(int) mvaddchnstr (int, int, const chtype *, int); /* generated */
0707 extern NCURSES_EXPORT(int) mvaddchstr (int, int, const chtype *);   /* generated */
0708 extern NCURSES_EXPORT(int) mvaddnstr (int, int, const char *, int); /* generated */
0709 extern NCURSES_EXPORT(int) mvaddstr (int, int, const char *);       /* generated */
0710 extern NCURSES_EXPORT(int) mvchgat (int, int, int, attr_t, NCURSES_PAIRS_T, const void *);  /* generated */
0711 extern NCURSES_EXPORT(int) mvcur (int,int,int,int);         /* implemented */
0712 extern NCURSES_EXPORT(int) mvdelch (int, int);              /* generated */
0713 extern NCURSES_EXPORT(int) mvderwin (WINDOW *, int, int);       /* implemented */
0714 extern NCURSES_EXPORT(int) mvgetch (int, int);              /* generated */
0715 extern NCURSES_EXPORT(int) mvgetnstr (int, int, char *, int);       /* generated */
0716 extern NCURSES_EXPORT(int) mvgetstr (int, int, char *);         /* generated */
0717 extern NCURSES_EXPORT(int) mvhline (int, int, chtype, int);     /* generated */
0718 extern NCURSES_EXPORT(chtype) mvinch (int, int);            /* generated */
0719 extern NCURSES_EXPORT(int) mvinchnstr (int, int, chtype *, int);    /* generated */
0720 extern NCURSES_EXPORT(int) mvinchstr (int, int, chtype *);      /* generated */
0721 extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);        /* generated */
0722 extern NCURSES_EXPORT(int) mvinsch (int, int, chtype);          /* generated */
0723 extern NCURSES_EXPORT(int) mvinsnstr (int, int, const char *, int); /* generated */
0724 extern NCURSES_EXPORT(int) mvinsstr (int, int, const char *);       /* generated */
0725 extern NCURSES_EXPORT(int) mvinstr (int, int, char *);          /* generated */
0726 extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...)     /* implemented */
0727         GCC_PRINTFLIKE(3,4);
0728 extern NCURSES_EXPORT(int) mvscanw (int,int, const char *,...)      /* implemented */
0729         GCC_SCANFLIKE(3,4);
0730 extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int);     /* generated */
0731 extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype); /* generated */
0732 extern NCURSES_EXPORT(int) mvwaddchnstr (WINDOW *, int, int, const chtype *, int);/* generated */
0733 extern NCURSES_EXPORT(int) mvwaddchstr (WINDOW *, int, int, const chtype *);    /* generated */
0734 extern NCURSES_EXPORT(int) mvwaddnstr (WINDOW *, int, int, const char *, int);  /* generated */
0735 extern NCURSES_EXPORT(int) mvwaddstr (WINDOW *, int, int, const char *);    /* generated */
0736 extern NCURSES_EXPORT(int) mvwchgat (WINDOW *, int, int, int, attr_t, NCURSES_PAIRS_T, const void *);/* generated */
0737 extern NCURSES_EXPORT(int) mvwdelch (WINDOW *, int, int);       /* generated */
0738 extern NCURSES_EXPORT(int) mvwgetch (WINDOW *, int, int);       /* generated */
0739 extern NCURSES_EXPORT(int) mvwgetnstr (WINDOW *, int, int, char *, int);    /* generated */
0740 extern NCURSES_EXPORT(int) mvwgetstr (WINDOW *, int, int, char *);  /* generated */
0741 extern NCURSES_EXPORT(int) mvwhline (WINDOW *, int, int, chtype, int);  /* generated */
0742 extern NCURSES_EXPORT(int) mvwin (WINDOW *,int,int);            /* implemented */
0743 extern NCURSES_EXPORT(chtype) mvwinch (WINDOW *, int, int);         /* generated */
0744 extern NCURSES_EXPORT(int) mvwinchnstr (WINDOW *, int, int, chtype *, int); /* generated */
0745 extern NCURSES_EXPORT(int) mvwinchstr (WINDOW *, int, int, chtype *);       /* generated */
0746 extern NCURSES_EXPORT(int) mvwinnstr (WINDOW *, int, int, char *, int);     /* generated */
0747 extern NCURSES_EXPORT(int) mvwinsch (WINDOW *, int, int, chtype);       /* generated */
0748 extern NCURSES_EXPORT(int) mvwinsnstr (WINDOW *, int, int, const char *, int);  /* generated */
0749 extern NCURSES_EXPORT(int) mvwinsstr (WINDOW *, int, int, const char *);    /* generated */
0750 extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *);       /* generated */
0751 extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...)    /* implemented */
0752         GCC_PRINTFLIKE(4,5);
0753 extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, const char *,...)    /* implemented */
0754         GCC_SCANFLIKE(4,5);
0755 extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int);   /* generated */
0756 extern NCURSES_EXPORT(int) napms (int);                 /* implemented */
0757 extern NCURSES_EXPORT(WINDOW *) newpad (int,int);           /* implemented */
0758 extern NCURSES_EXPORT(SCREEN *) newterm (const char *,FILE *,FILE *);   /* implemented */
0759 extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int);       /* implemented */
0760 extern NCURSES_EXPORT(int) nl (void);                   /* implemented */
0761 extern NCURSES_EXPORT(int) nocbreak (void);             /* implemented */
0762 extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool);         /* implemented */
0763 extern NCURSES_EXPORT(int) noecho (void);               /* implemented */
0764 extern NCURSES_EXPORT(int) nonl (void);                 /* implemented */
0765 extern NCURSES_EXPORT(void) noqiflush (void);               /* implemented */
0766 extern NCURSES_EXPORT(int) noraw (void);                /* implemented */
0767 extern NCURSES_EXPORT(int) notimeout (WINDOW *,bool);           /* implemented */
0768 extern NCURSES_EXPORT(int) overlay (const WINDOW*,WINDOW *);        /* implemented */
0769 extern NCURSES_EXPORT(int) overwrite (const WINDOW*,WINDOW *);      /* implemented */
0770 extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*);        /* implemented */
0771 extern NCURSES_EXPORT(int) PAIR_NUMBER (int);               /* generated */
0772 extern NCURSES_EXPORT(int) pechochar (WINDOW *, const chtype);      /* implemented */
0773 extern NCURSES_EXPORT(int) pnoutrefresh (WINDOW*,int,int,int,int,int,int);/* implemented */
0774 extern NCURSES_EXPORT(int) prefresh (WINDOW *,int,int,int,int,int,int); /* implemented */
0775 extern NCURSES_EXPORT(int) printw (const char *,...)            /* implemented */
0776         GCC_PRINTFLIKE(1,2);
0777 extern NCURSES_EXPORT(int) putwin (WINDOW *, FILE *);           /* implemented */
0778 extern NCURSES_EXPORT(void) qiflush (void);             /* implemented */
0779 extern NCURSES_EXPORT(int) raw (void);                  /* implemented */
0780 extern NCURSES_EXPORT(int) redrawwin (WINDOW *);            /* generated */
0781 extern NCURSES_EXPORT(int) refresh (void);              /* generated */
0782 extern NCURSES_EXPORT(int) resetty (void);              /* implemented */
0783 extern NCURSES_EXPORT(int) reset_prog_mode (void);          /* implemented */
0784 extern NCURSES_EXPORT(int) reset_shell_mode (void);         /* implemented */
0785 extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int));    /* implemented */
0786 extern NCURSES_EXPORT(int) savetty (void);              /* implemented */
0787 extern NCURSES_EXPORT(int) scanw (const char *,...)         /* implemented */
0788         GCC_SCANFLIKE(1,2);
0789 extern NCURSES_EXPORT(int) scr_dump (const char *);         /* implemented */
0790 extern NCURSES_EXPORT(int) scr_init (const char *);         /* implemented */
0791 extern NCURSES_EXPORT(int) scrl (int);                  /* generated */
0792 extern NCURSES_EXPORT(int) scroll (WINDOW *);               /* generated */
0793 extern NCURSES_EXPORT(int) scrollok (WINDOW *,bool);            /* implemented */
0794 extern NCURSES_EXPORT(int) scr_restore (const char *);          /* implemented */
0795 extern NCURSES_EXPORT(int) scr_set (const char *);          /* implemented */
0796 extern NCURSES_EXPORT(int) setscrreg (int,int);             /* generated */
0797 extern NCURSES_EXPORT(SCREEN *) set_term (SCREEN *);            /* implemented */
0798 extern NCURSES_EXPORT(int) slk_attroff (const chtype);          /* implemented */
0799 extern NCURSES_EXPORT(int) slk_attr_off (const attr_t, void *);     /* generated:WIDEC */
0800 extern NCURSES_EXPORT(int) slk_attron (const chtype);           /* implemented */
0801 extern NCURSES_EXPORT(int) slk_attr_on (attr_t,void*);          /* generated:WIDEC */
0802 extern NCURSES_EXPORT(int) slk_attrset (const chtype);          /* implemented */
0803 extern NCURSES_EXPORT(attr_t) slk_attr (void);              /* implemented */
0804 extern NCURSES_EXPORT(int) slk_attr_set (const attr_t,NCURSES_PAIRS_T,void*);   /* implemented */
0805 extern NCURSES_EXPORT(int) slk_clear (void);                /* implemented */
0806 extern NCURSES_EXPORT(int) slk_color (NCURSES_PAIRS_T);             /* implemented */
0807 extern NCURSES_EXPORT(int) slk_init (int);              /* implemented */
0808 extern NCURSES_EXPORT(char *) slk_label (int);              /* implemented */
0809 extern NCURSES_EXPORT(int) slk_noutrefresh (void);          /* implemented */
0810 extern NCURSES_EXPORT(int) slk_refresh (void);              /* implemented */
0811 extern NCURSES_EXPORT(int) slk_restore (void);              /* implemented */
0812 extern NCURSES_EXPORT(int) slk_set (int,const char *,int);      /* implemented */
0813 extern NCURSES_EXPORT(int) slk_touch (void);                /* implemented */
0814 extern NCURSES_EXPORT(int) standout (void);             /* generated */
0815 extern NCURSES_EXPORT(int) standend (void);             /* generated */
0816 extern NCURSES_EXPORT(int) start_color (void);              /* implemented */
0817 extern NCURSES_EXPORT(WINDOW *) subpad (WINDOW *, int, int, int, int);  /* implemented */
0818 extern NCURSES_EXPORT(WINDOW *) subwin (WINDOW *, int, int, int, int);  /* implemented */
0819 extern NCURSES_EXPORT(int) syncok (WINDOW *, bool);         /* implemented */
0820 extern NCURSES_EXPORT(chtype) termattrs (void);             /* implemented */
0821 extern NCURSES_EXPORT(char *) termname (void);              /* implemented */
0822 extern NCURSES_EXPORT(void) timeout (int);              /* generated */
0823 extern NCURSES_EXPORT(int) touchline (WINDOW *, int, int);      /* generated */
0824 extern NCURSES_EXPORT(int) touchwin (WINDOW *);             /* generated */
0825 extern NCURSES_EXPORT(int) typeahead (int);             /* implemented */
0826 extern NCURSES_EXPORT(int) ungetch (int);               /* implemented */
0827 extern NCURSES_EXPORT(int) untouchwin (WINDOW *);           /* generated */
0828 extern NCURSES_EXPORT(void) use_env (bool);             /* implemented */
0829 extern NCURSES_EXPORT(void) use_tioctl (bool);              /* implemented */
0830 extern NCURSES_EXPORT(int) vidattr (chtype);                /* implemented */
0831 extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC);      /* implemented */
0832 extern NCURSES_EXPORT(int) vline (chtype, int);             /* generated */
0833 extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *, va_list) GCC_DEPRECATED(use vw_printw) /* implemented */
0834         GCC_PRINTFLIKE(2,0);
0835 extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *, va_list)  /* implemented */
0836         GCC_PRINTFLIKE(2,0);    
0837 extern NCURSES_EXPORT(int) vwscanw (WINDOW *, const char *, va_list) GCC_DEPRECATED(use vw_scanw)   /* implemented */
0838         GCC_SCANFLIKE(2,0);
0839 extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, const char *, va_list)   /* implemented */
0840         GCC_SCANFLIKE(2,0);
0841 extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype);     /* implemented */
0842 extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int);    /* implemented */
0843 extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *);     /* generated */
0844 extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int);    /* implemented */
0845 extern NCURSES_EXPORT(int) waddstr (WINDOW *,const char *);     /* generated */
0846 extern NCURSES_EXPORT(int) wattron (WINDOW *, int);         /* generated */
0847 extern NCURSES_EXPORT(int) wattroff (WINDOW *, int);            /* generated */
0848 extern NCURSES_EXPORT(int) wattrset (WINDOW *, int);            /* generated */
0849 extern NCURSES_EXPORT(int) wattr_get (WINDOW *, attr_t *, NCURSES_PAIRS_T *, void *);   /* generated */
0850 extern NCURSES_EXPORT(int) wattr_on (WINDOW *, attr_t, void *);     /* implemented */
0851 extern NCURSES_EXPORT(int) wattr_off (WINDOW *, attr_t, void *);    /* implemented */
0852 extern NCURSES_EXPORT(int) wattr_set (WINDOW *, attr_t, NCURSES_PAIRS_T, void *);   /* generated */
0853 extern NCURSES_EXPORT(int) wbkgd (WINDOW *, chtype);            /* implemented */
0854 extern NCURSES_EXPORT(void) wbkgdset (WINDOW *,chtype);         /* implemented */
0855 extern NCURSES_EXPORT(int) wborder (WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);  /* implemented */
0856 extern NCURSES_EXPORT(int) wchgat (WINDOW *, int, attr_t, NCURSES_PAIRS_T, const void *);/* implemented */
0857 extern NCURSES_EXPORT(int) wclear (WINDOW *);               /* implemented */
0858 extern NCURSES_EXPORT(int) wclrtobot (WINDOW *);            /* implemented */
0859 extern NCURSES_EXPORT(int) wclrtoeol (WINDOW *);            /* implemented */
0860 extern NCURSES_EXPORT(int) wcolor_set (WINDOW*,NCURSES_PAIRS_T,void*);      /* implemented */
0861 extern NCURSES_EXPORT(void) wcursyncup (WINDOW *);          /* implemented */
0862 extern NCURSES_EXPORT(int) wdelch (WINDOW *);               /* implemented */
0863 extern NCURSES_EXPORT(int) wdeleteln (WINDOW *);            /* generated */
0864 extern NCURSES_EXPORT(int) wechochar (WINDOW *, const chtype);      /* implemented */
0865 extern NCURSES_EXPORT(int) werase (WINDOW *);               /* implemented */
0866 extern NCURSES_EXPORT(int) wgetch (WINDOW *);               /* implemented */
0867 extern NCURSES_EXPORT(int) wgetnstr (WINDOW *,char *,int);      /* implemented */
0868 extern NCURSES_EXPORT(int) wgetstr (WINDOW *, char *);          /* generated */
0869 extern NCURSES_EXPORT(int) whline (WINDOW *, chtype, int);      /* implemented */
0870 extern NCURSES_EXPORT(chtype) winch (WINDOW *);             /* implemented */
0871 extern NCURSES_EXPORT(int) winchnstr (WINDOW *, chtype *, int);     /* implemented */
0872 extern NCURSES_EXPORT(int) winchstr (WINDOW *, chtype *);       /* generated */
0873 extern NCURSES_EXPORT(int) winnstr (WINDOW *, char *, int);     /* implemented */
0874 extern NCURSES_EXPORT(int) winsch (WINDOW *, chtype);           /* implemented */
0875 extern NCURSES_EXPORT(int) winsdelln (WINDOW *,int);            /* implemented */
0876 extern NCURSES_EXPORT(int) winsertln (WINDOW *);            /* generated */
0877 extern NCURSES_EXPORT(int) winsnstr (WINDOW *, const char *,int);   /* implemented */
0878 extern NCURSES_EXPORT(int) winsstr (WINDOW *, const char *);        /* generated */
0879 extern NCURSES_EXPORT(int) winstr (WINDOW *, char *);           /* generated */
0880 extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int);            /* implemented */
0881 extern NCURSES_EXPORT(int) wnoutrefresh (WINDOW *);         /* implemented */
0882 extern NCURSES_EXPORT(int) wprintw (WINDOW *, const char *,...)     /* implemented */
0883         GCC_PRINTFLIKE(2,3);
0884 extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int);        /* implemented */
0885 extern NCURSES_EXPORT(int) wrefresh (WINDOW *);             /* implemented */
0886 extern NCURSES_EXPORT(int) wscanw (WINDOW *, const char *,...)      /* implemented */
0887         GCC_SCANFLIKE(2,3);
0888 extern NCURSES_EXPORT(int) wscrl (WINDOW *,int);            /* implemented */
0889 extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int);       /* implemented */
0890 extern NCURSES_EXPORT(int) wstandout (WINDOW *);            /* generated */
0891 extern NCURSES_EXPORT(int) wstandend (WINDOW *);            /* generated */
0892 extern NCURSES_EXPORT(void) wsyncdown (WINDOW *);           /* implemented */
0893 extern NCURSES_EXPORT(void) wsyncup (WINDOW *);             /* implemented */
0894 extern NCURSES_EXPORT(void) wtimeout (WINDOW *,int);            /* implemented */
0895 extern NCURSES_EXPORT(int) wtouchln (WINDOW *,int,int,int);     /* implemented */
0896 extern NCURSES_EXPORT(int) wvline (WINDOW *,chtype,int);        /* implemented */
0897 
0898 /*
0899  * These are also declared in <ncursesw/term.h>:
0900  */
0901 extern NCURSES_EXPORT(int) tigetflag (const char *);            /* implemented */
0902 extern NCURSES_EXPORT(int) tigetnum (const char *);         /* implemented */
0903 extern NCURSES_EXPORT(char *) tigetstr (const char *);          /* implemented */
0904 extern NCURSES_EXPORT(int) putp (const char *);             /* implemented */
0905 
0906 #if NCURSES_TPARM_VARARGS
0907 extern NCURSES_EXPORT(char *) tparm (const char *, ...);        /* special */
0908 #else
0909 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 */
0910 #endif
0911 
0912 extern NCURSES_EXPORT(char *) tiparm (const char *, ...);       /* special */
0913 extern NCURSES_EXPORT(char *) tiparm_s (int, int, const char *, ...);   /* special */
0914 extern NCURSES_EXPORT(int) tiscan_s (int *, int *, const char *);   /* special */
0915 
0916 /*
0917  * These functions are not in X/Open, but we use them in macro definitions:
0918  */
0919 extern NCURSES_EXPORT(int) getattrs (const WINDOW *);           /* generated */
0920 extern NCURSES_EXPORT(int) getcurx (const WINDOW *);            /* generated */
0921 extern NCURSES_EXPORT(int) getcury (const WINDOW *);            /* generated */
0922 extern NCURSES_EXPORT(int) getbegx (const WINDOW *);            /* generated */
0923 extern NCURSES_EXPORT(int) getbegy (const WINDOW *);            /* generated */
0924 extern NCURSES_EXPORT(int) getmaxx (const WINDOW *);            /* generated */
0925 extern NCURSES_EXPORT(int) getmaxy (const WINDOW *);            /* generated */
0926 extern NCURSES_EXPORT(int) getparx (const WINDOW *);            /* generated */
0927 extern NCURSES_EXPORT(int) getpary (const WINDOW *);            /* generated */
0928 
0929 /*
0930  * vid_attr() was implemented originally based on a draft of X/Open curses.
0931  */
0932 #if !NCURSES_WIDECHAR
0933 #define vid_attr(a,pair,opts) vidattr(a)
0934 #endif
0935 
0936 /*
0937  * These functions are extensions - not in X/Open Curses.
0938  */
0939 #if 1
0940 #undef  NCURSES_EXT_FUNCS
0941 #define NCURSES_EXT_FUNCS 20240427
0942 typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
0943 typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
0944 extern NCURSES_EXPORT(int) alloc_pair (int, int);
0945 extern NCURSES_EXPORT(int) assume_default_colors (int, int);
0946 extern NCURSES_EXPORT(const char *) curses_version (void);
0947 extern NCURSES_EXPORT(int) define_key (const char *, int);
0948 extern NCURSES_EXPORT(int) extended_color_content(int, int *, int *, int *);
0949 extern NCURSES_EXPORT(int) extended_pair_content(int, int *, int *);
0950 extern NCURSES_EXPORT(int) extended_slk_color(int);
0951 extern NCURSES_EXPORT(int) find_pair (int, int);
0952 extern NCURSES_EXPORT(int) free_pair (int);
0953 extern NCURSES_EXPORT(int) get_escdelay (void);
0954 extern NCURSES_EXPORT(int) init_extended_color(int, int, int, int);
0955 extern NCURSES_EXPORT(int) init_extended_pair(int, int, int);
0956 extern NCURSES_EXPORT(int) is_cbreak(void);
0957 extern NCURSES_EXPORT(int) is_echo(void);
0958 extern NCURSES_EXPORT(int) is_nl(void);
0959 extern NCURSES_EXPORT(int) is_raw(void);
0960 extern NCURSES_EXPORT(bool) is_term_resized (int, int);
0961 extern NCURSES_EXPORT(int) key_defined (const char *);
0962 extern NCURSES_EXPORT(char *) keybound (int, int);
0963 extern NCURSES_EXPORT(int) keyok (int, bool);
0964 extern NCURSES_EXPORT(void) nofilter(void);
0965 extern NCURSES_EXPORT(void) reset_color_pairs (void);
0966 extern NCURSES_EXPORT(int) resize_term (int, int);
0967 extern NCURSES_EXPORT(int) resizeterm (int, int);
0968 extern NCURSES_EXPORT(int) set_escdelay (int);
0969 extern NCURSES_EXPORT(int) set_tabsize (int);
0970 extern NCURSES_EXPORT(int) use_default_colors (void);
0971 extern NCURSES_EXPORT(int) use_legacy_coding (int);
0972 extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *);
0973 extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *);
0974 extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
0975 
0976 #if 1
0977 #undef  NCURSES_XNAMES
0978 #define NCURSES_XNAMES 1
0979 extern NCURSES_EXPORT(int) use_extended_names (bool);
0980 #endif
0981 
0982 /*
0983  * These extensions provide access to information stored in the WINDOW even
0984  * when NCURSES_OPAQUE is set:
0985  */
0986 extern NCURSES_EXPORT(WINDOW *) wgetparent (const WINDOW *);    /* generated */
0987 extern NCURSES_EXPORT(bool) is_cleared (const WINDOW *);    /* generated */
0988 extern NCURSES_EXPORT(bool) is_idcok (const WINDOW *);      /* generated */
0989 extern NCURSES_EXPORT(bool) is_idlok (const WINDOW *);      /* generated */
0990 extern NCURSES_EXPORT(bool) is_immedok (const WINDOW *);    /* generated */
0991 extern NCURSES_EXPORT(bool) is_keypad (const WINDOW *);     /* generated */
0992 extern NCURSES_EXPORT(bool) is_leaveok (const WINDOW *);    /* generated */
0993 extern NCURSES_EXPORT(bool) is_nodelay (const WINDOW *);    /* generated */
0994 extern NCURSES_EXPORT(bool) is_notimeout (const WINDOW *);  /* generated */
0995 extern NCURSES_EXPORT(bool) is_pad (const WINDOW *);        /* generated */
0996 extern NCURSES_EXPORT(bool) is_scrollok (const WINDOW *);   /* generated */
0997 extern NCURSES_EXPORT(bool) is_subwin (const WINDOW *);     /* generated */
0998 extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *);     /* generated */
0999 extern NCURSES_EXPORT(int) wgetdelay (const WINDOW *);      /* generated */
1000 extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* generated */
1001 
1002 #else
1003 #define curses_version() NCURSES_VERSION
1004 #endif
1005 
1006 /*
1007  * Extra extension-functions, which pass a SCREEN pointer rather than using
1008  * a global variable SP.
1009  */
1010 #if 1
1011 #undef  NCURSES_SP_FUNCS
1012 #define NCURSES_SP_FUNCS 20240427
1013 #define NCURSES_SP_NAME(name) name##_sp
1014 
1015 /* Define the sp-funcs helper function */
1016 #define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)
1017 typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);
1018 
1019 extern NCURSES_EXPORT(SCREEN *) new_prescr (void); /* implemented:SP_FUNC */
1020 
1021 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (SCREEN*); /* implemented:SP_FUNC */
1022 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (SCREEN*); /* implemented:SP_FUNC */
1023 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (SCREEN*); /* implemented:SP_FUNC */
1024 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (SCREEN*); /* implemented:SP_FUNC */
1025 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (SCREEN*, int); /* implemented:SP_FUNC */
1026 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 */
1027 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
1028 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
1029 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (SCREEN*, int); /* implemented:SP_FUNC */
1030 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN*); /* implemented:SP_FUNC */
1031 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (SCREEN*); /* implemented:SP_FUNC */
1032 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (SCREEN*); /* implemented:SP_FUNC */
1033 extern NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (SCREEN*);/* implemented:SP_FUNC */
1034 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (SCREEN*); /* implemented:SP_FUNC */
1035 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (SCREEN*); /* implemented:SP_FUNC */
1036 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (SCREEN*); /* implemented:SP_FUNC */
1037 extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (SCREEN*, FILE *);          /* implemented:SP_FUNC */
1038 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (SCREEN*, int); /* implemented:SP_FUNC */
1039 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (SCREEN*); /* implemented:SP_FUNC */
1040 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (SCREEN*); /* implemented:SP_FUNC */
1041 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (SCREEN*); /* implemented:SP_FUNC */
1042 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 */
1043 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
1044 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (SCREEN*, WINDOW*, bool); /* implemented:SP_FUNC */
1045 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (SCREEN*); /* implemented:SP_FUNC */
1046 extern NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(keyname) (SCREEN*, int); /* implemented:SP_FUNC */
1047 extern NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (SCREEN*); /* implemented:SP_FUNC */
1048 extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (SCREEN*); /* implemented:SP_FUNC */
1049 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
1050 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */
1051 extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */
1052 extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, const char *, FILE *, FILE *); /* implemented:SP_FUNC */
1053 extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
1054 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */
1055 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */
1056 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (SCREEN*); /* implemented:SP_FUNC */
1057 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (SCREEN*); /* implemented:SP_FUNC */
1058 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (SCREEN*); /* implemented:SP_FUNC */
1059 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (SCREEN*); /* implemented:SP_FUNC */
1060 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
1061 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (SCREEN*); /* implemented:SP_FUNC */
1062 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (SCREEN*); /* implemented:SP_FUNC */
1063 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
1064 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
1065 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (SCREEN*); /* implemented:SP_FUNC */
1066 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (SCREEN*, int, int (*)(WINDOW *, int));  /* implemented:SP_FUNC */
1067 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (SCREEN*); /* implemented:SP_FUNC */
1068 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (SCREEN*, const char *); /* implemented:SP_FUNC */
1069 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (SCREEN*, const char *); /* implemented:SP_FUNC */
1070 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (SCREEN*, const char *); /* implemented:SP_FUNC */
1071 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (SCREEN*, const chtype); /* implemented:SP_FUNC */
1072 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (SCREEN*, const chtype); /* implemented:SP_FUNC */
1073 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (SCREEN*, const chtype); /* implemented:SP_FUNC */
1074 extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (SCREEN*); /* implemented:SP_FUNC */
1075 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (SCREEN*, const attr_t, NCURSES_PAIRS_T, void*); /* implemented:SP_FUNC */
1076 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (SCREEN*); /* implemented:SP_FUNC */
1077 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (SCREEN*, NCURSES_PAIRS_T); /* implemented:SP_FUNC */
1078 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (SCREEN*, int); /* implemented:SP_FUNC */
1079 extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (SCREEN*, int); /* implemented:SP_FUNC */
1080 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (SCREEN*); /* implemented:SP_FUNC */
1081 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (SCREEN*); /* implemented:SP_FUNC */
1082 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (SCREEN*); /* implemented:SP_FUNC */
1083 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (SCREEN*, int, const char *, int); /* implemented:SP_FUNC */
1084 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (SCREEN*); /* implemented:SP_FUNC */
1085 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (SCREEN*); /* implemented:SP_FUNC */
1086 extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (SCREEN*); /* implemented:SP_FUNC */
1087 extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (SCREEN*); /* implemented:SP_FUNC */
1088 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (SCREEN*, int); /* implemented:SP_FUNC */
1089 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetch) (SCREEN*, int); /* implemented:SP_FUNC */
1090 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (SCREEN*, bool); /* implemented:SP_FUNC */
1091 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (SCREEN*, bool); /* implemented:SP_FUNC */
1092 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype);  /* implemented:SP_FUNC */
1093 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */
1094 #if 1
1095 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(alloc_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
1096 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int);  /* implemented:EXT_SP_FUNC */
1097 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int);    /* implemented:EXT_SP_FUNC */
1098 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_color_content) (SCREEN*, int, int *, int *, int *); /* implemented:EXT_SP_FUNC */
1099 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_pair_content) (SCREEN*, int, int *, int *); /* implemented:EXT_SP_FUNC */
1100 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_slk_color) (SCREEN*, int);  /* implemented:EXT_SP_FUNC */
1101 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(find_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
1102 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(free_pair) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
1103 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*); /* implemented:EXT_SP_FUNC */
1104 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_color) (SCREEN*, int, int, int, int);  /* implemented:EXT_SP_FUNC */
1105 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_pair) (SCREEN*, int, int, int);    /* implemented:EXT_SP_FUNC */
1106 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_cbreak) (SCREEN*);    /* implemented:EXT_SP_FUNC */
1107 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_echo) (SCREEN*);  /* implemented:EXT_SP_FUNC */
1108 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_nl) (SCREEN*);    /* implemented:EXT_SP_FUNC */
1109 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_raw) (SCREEN*);   /* implemented:EXT_SP_FUNC */
1110 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int);   /* implemented:EXT_SP_FUNC */
1111 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *);    /* implemented:EXT_SP_FUNC */
1112 extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int);    /* implemented:EXT_SP_FUNC */
1113 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool); /* implemented:EXT_SP_FUNC */
1114 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */  /* implemented:EXT_SP_FUNC */
1115 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(reset_color_pairs) (SCREEN*); /* implemented:EXT_SP_FUNC */
1116 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int);    /* implemented:EXT_SP_FUNC */
1117 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
1118 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int);    /* implemented:EXT_SP_FUNC */
1119 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
1120 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (SCREEN*);   /* implemented:EXT_SP_FUNC */
1121 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int);   /* implemented:EXT_SP_FUNC */
1122 #endif
1123 #else
1124 #undef  NCURSES_SP_FUNCS
1125 #define NCURSES_SP_FUNCS 0
1126 #define NCURSES_SP_NAME(name) name
1127 #define NCURSES_SP_OUTC NCURSES_OUTC
1128 #endif
1129 
1130 /* attributes */
1131 
1132 #define NCURSES_ATTR_SHIFT       8
1133 #define NCURSES_BITS(mask,shift) (NCURSES_CAST(chtype,(mask)) << ((shift) + NCURSES_ATTR_SHIFT))
1134 
1135 #define A_NORMAL    (1U - 1U)
1136 #define A_ATTRIBUTES    NCURSES_BITS(~(1U - 1U),0)
1137 #define A_CHARTEXT  (NCURSES_BITS(1U,0) - 1U)
1138 #define A_COLOR     NCURSES_BITS(((1U) << 8) - 1U,0)
1139 #define A_STANDOUT  NCURSES_BITS(1U,8)
1140 #define A_UNDERLINE NCURSES_BITS(1U,9)
1141 #define A_REVERSE   NCURSES_BITS(1U,10)
1142 #define A_BLINK     NCURSES_BITS(1U,11)
1143 #define A_DIM       NCURSES_BITS(1U,12)
1144 #define A_BOLD      NCURSES_BITS(1U,13)
1145 #define A_ALTCHARSET    NCURSES_BITS(1U,14)
1146 #define A_INVIS     NCURSES_BITS(1U,15)
1147 #define A_PROTECT   NCURSES_BITS(1U,16)
1148 #define A_HORIZONTAL    NCURSES_BITS(1U,17)
1149 #define A_LEFT      NCURSES_BITS(1U,18)
1150 #define A_LOW       NCURSES_BITS(1U,19)
1151 #define A_RIGHT     NCURSES_BITS(1U,20)
1152 #define A_TOP       NCURSES_BITS(1U,21)
1153 #define A_VERTICAL  NCURSES_BITS(1U,22)
1154 
1155 #if 1
1156 #define A_ITALIC    NCURSES_BITS(1U,23) /* ncurses extension */
1157 #endif
1158 
1159 /*
1160  * Most of the pseudo functions are macros that either provide compatibility
1161  * with older versions of curses, or provide inline functionality to improve
1162  * performance.
1163  */
1164 
1165 /*
1166  * These pseudo functions are always implemented as macros:
1167  */
1168 
1169 #define getyx(win,y,x)      (y = getcury(win), x = getcurx(win))
1170 #define getbegyx(win,y,x)   (y = getbegy(win), x = getbegx(win))
1171 #define getmaxyx(win,y,x)   (y = getmaxy(win), x = getmaxx(win))
1172 #define getparyx(win,y,x)   (y = getpary(win), x = getparx(win))
1173 
1174 #define getsyx(y,x) do { if (newscr) { \
1175                  if (is_leaveok(newscr)) \
1176                 (y) = (x) = -1; \
1177                  else \
1178                  getyx(newscr,(y), (x)); \
1179             } \
1180             } while(0)
1181 
1182 #define setsyx(y,x) do { if (newscr) { \
1183                 if ((y) == -1 && (x) == -1) \
1184                 leaveok(newscr, TRUE); \
1185                 else { \
1186                 leaveok(newscr, FALSE); \
1187                 wmove(newscr, (y), (x)); \
1188                 } \
1189             } \
1190             } while(0)
1191 
1192 #ifndef NCURSES_NOMACROS
1193 
1194 /*
1195  * These miscellaneous pseudo functions are provided for compatibility:
1196  */
1197 
1198 #define wgetstr(w, s)       wgetnstr(w, s, -1)
1199 #define getnstr(s, n)       wgetnstr(stdscr, s, (n))
1200 
1201 #define setterm(term)       setupterm(term, 1, (int *)0)
1202 
1203 #define fixterm()       reset_prog_mode()
1204 #define resetterm()     reset_shell_mode()
1205 #define saveterm()      def_prog_mode()
1206 #define crmode()        cbreak()
1207 #define nocrmode()      nocbreak()
1208 #define gettmode()
1209 
1210 /* It seems older SYSV curses versions define these */
1211 #if !NCURSES_OPAQUE
1212 #define getattrs(win)       NCURSES_CAST(int, NCURSES_OK_ADDR(win) ? (win)->_attrs : A_NORMAL)
1213 #define getcurx(win)        (NCURSES_OK_ADDR(win) ? (win)->_curx : ERR)
1214 #define getcury(win)        (NCURSES_OK_ADDR(win) ? (win)->_cury : ERR)
1215 #define getbegx(win)        (NCURSES_OK_ADDR(win) ? (win)->_begx : ERR)
1216 #define getbegy(win)        (NCURSES_OK_ADDR(win) ? (win)->_begy : ERR)
1217 #define getmaxx(win)        (NCURSES_OK_ADDR(win) ? ((win)->_maxx + 1) : ERR)
1218 #define getmaxy(win)        (NCURSES_OK_ADDR(win) ? ((win)->_maxy + 1) : ERR)
1219 #define getparx(win)        (NCURSES_OK_ADDR(win) ? (win)->_parx : ERR)
1220 #define getpary(win)        (NCURSES_OK_ADDR(win) ? (win)->_pary : ERR)
1221 #endif /* NCURSES_OPAQUE */
1222 
1223 #define wstandout(win)      (wattrset(win,A_STANDOUT))
1224 #define wstandend(win)      (wattrset(win,A_NORMAL))
1225 
1226 #define wattron(win,at)     wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
1227 #define wattroff(win,at)    wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
1228 
1229 #if !NCURSES_OPAQUE
1230 #if NCURSES_WATTR_MACROS
1231 #if NCURSES_WIDECHAR && 1
1232 #define wattrset(win,at) \
1233     (NCURSES_OK_ADDR(win) \
1234       ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
1235          (win)->_attrs = NCURSES_CAST(attr_t, at), \
1236          OK) \
1237       : ERR)
1238 #else
1239 #define wattrset(win,at) \
1240     (NCURSES_OK_ADDR(win) \
1241       ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
1242          OK) \
1243       : ERR)
1244 #endif
1245 #endif /* NCURSES_WATTR_MACROS */
1246 #endif /* NCURSES_OPAQUE */
1247 
1248 #define scroll(win)     wscrl(win,1)
1249 
1250 #define touchwin(win)       wtouchln((win), 0, getmaxy(win), 1)
1251 #define touchline(win, s, c)    wtouchln((win), s, c, 1)
1252 #define untouchwin(win)     wtouchln((win), 0, getmaxy(win), 0)
1253 
1254 #define box(win, v, h)      wborder(win, v, v, h, h, 0, 0, 0, 0)
1255 #define border(ls, rs, ts, bs, tl, tr, bl, br)  wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
1256 #define hline(ch, n)        whline(stdscr, ch, (n))
1257 #define vline(ch, n)        wvline(stdscr, ch, (n))
1258 
1259 #define winstr(w, s)        winnstr(w, s, -1)
1260 #define winchstr(w, s)      winchnstr(w, s, -1)
1261 #define winsstr(w, s)       winsnstr(w, s, -1)
1262 
1263 #if !NCURSES_OPAQUE
1264 #define redrawwin(win)      wredrawln(win, 0, (NCURSES_OK_ADDR(win) ? (win)->_maxy+1 : -1))
1265 #endif /* NCURSES_OPAQUE */
1266 
1267 #define waddstr(win,str)    waddnstr(win,str,-1)
1268 #define waddchstr(win,str)  waddchnstr(win,str,-1)
1269 
1270 /*
1271  * These apply to the first 256 color pairs.
1272  */
1273 #define COLOR_PAIR(n)   (NCURSES_BITS((n), 0) & A_COLOR)
1274 #define PAIR_NUMBER(a)  (NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
1275 
1276 /*
1277  * pseudo functions for standard screen
1278  */
1279 
1280 #define addch(ch)       waddch(stdscr,(ch))
1281 #define addchnstr(str,n)    waddchnstr(stdscr,(str),(n))
1282 #define addchstr(str)       waddchstr(stdscr,(str))
1283 #define addnstr(str,n)      waddnstr(stdscr,(str),(n))
1284 #define addstr(str)     waddnstr(stdscr,(str),-1)
1285 #define attr_get(ap,cp,o)   wattr_get(stdscr,(ap),(cp),(o))
1286 #define attr_off(a,o)       wattr_off(stdscr,(a),(o))
1287 #define attr_on(a,o)        wattr_on(stdscr,(a),(o))
1288 #define attr_set(a,c,o)     wattr_set(stdscr,(a),(c),(o))
1289 #define attroff(at)     wattroff(stdscr,(at))
1290 #define attron(at)      wattron(stdscr,(at))
1291 #define attrset(at)     wattrset(stdscr,(at))
1292 #define bkgd(ch)        wbkgd(stdscr,(ch))
1293 #define bkgdset(ch)     wbkgdset(stdscr,(ch))
1294 #define chgat(n,a,c,o)      wchgat(stdscr,(n),(a),(c),(o))
1295 #define clear()         wclear(stdscr)
1296 #define clrtobot()      wclrtobot(stdscr)
1297 #define clrtoeol()      wclrtoeol(stdscr)
1298 #define color_set(c,o)      wcolor_set(stdscr,(c),(o))
1299 #define delch()         wdelch(stdscr)
1300 #define deleteln()      winsdelln(stdscr,-1)
1301 #define echochar(c)     wechochar(stdscr,(c))
1302 #define erase()         werase(stdscr)
1303 #define getch()         wgetch(stdscr)
1304 #define getstr(str)     wgetstr(stdscr,(str))
1305 #define inch()          winch(stdscr)
1306 #define inchnstr(s,n)       winchnstr(stdscr,(s),(n))
1307 #define inchstr(s)      winchstr(stdscr,(s))
1308 #define innstr(s,n)     winnstr(stdscr,(s),(n))
1309 #define insch(c)        winsch(stdscr,(c))
1310 #define insdelln(n)     winsdelln(stdscr,(n))
1311 #define insertln()      winsdelln(stdscr,1)
1312 #define insnstr(s,n)        winsnstr(stdscr,(s),(n))
1313 #define insstr(s)       winsstr(stdscr,(s))
1314 #define instr(s)        winstr(stdscr,(s))
1315 #define move(y,x)       wmove(stdscr,(y),(x))
1316 #define refresh()       wrefresh(stdscr)
1317 #define scrl(n)         wscrl(stdscr,(n))
1318 #define setscrreg(t,b)      wsetscrreg(stdscr,(t),(b))
1319 #define standend()      wstandend(stdscr)
1320 #define standout()      wstandout(stdscr)
1321 #define timeout(delay)      wtimeout(stdscr,(delay))
1322 #define wdeleteln(win)      winsdelln(win,-1)
1323 #define winsertln(win)      winsdelln(win,1)
1324 
1325 /*
1326  * mv functions
1327  */
1328 
1329 #define mvwaddch(win,y,x,ch)        (wmove((win),(y),(x)) == ERR ? ERR : waddch((win),(ch)))
1330 #define mvwaddchnstr(win,y,x,str,n) (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),(n)))
1331 #define mvwaddchstr(win,y,x,str)    (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1))
1332 #define mvwaddnstr(win,y,x,str,n)   (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n)))
1333 #define mvwaddstr(win,y,x,str)      (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1))
1334 #define mvwchgat(win,y,x,n,a,c,o)   (wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o)))
1335 #define mvwdelch(win,y,x)       (wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
1336 #define mvwgetch(win,y,x)       (wmove((win),(y),(x)) == ERR ? ERR : wgetch(win))
1337 #define mvwgetnstr(win,y,x,str,n)   (wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n)))
1338 #define mvwgetstr(win,y,x,str)      (wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str)))
1339 #define mvwhline(win,y,x,c,n)       (wmove((win),(y),(x)) == ERR ? ERR : whline((win),(c),(n)))
1340 #define mvwinch(win,y,x)        (wmove((win),(y),(x)) == ERR ? NCURSES_CAST(chtype, ERR) : winch(win))
1341 #define mvwinchnstr(win,y,x,s,n)    (wmove((win),(y),(x)) == ERR ? ERR : winchnstr((win),(s),(n)))
1342 #define mvwinchstr(win,y,x,s)       (wmove((win),(y),(x)) == ERR ? ERR : winchstr((win),(s)))
1343 #define mvwinnstr(win,y,x,s,n)      (wmove((win),(y),(x)) == ERR ? ERR : winnstr((win),(s),(n)))
1344 #define mvwinsch(win,y,x,c)     (wmove((win),(y),(x)) == ERR ? ERR : winsch((win),(c)))
1345 #define mvwinsnstr(win,y,x,s,n)     (wmove((win),(y),(x)) == ERR ? ERR : winsnstr((win),(s),(n)))
1346 #define mvwinsstr(win,y,x,s)        (wmove((win),(y),(x)) == ERR ? ERR : winsstr((win),(s)))
1347 #define mvwinstr(win,y,x,s)     (wmove((win),(y),(x)) == ERR ? ERR : winstr((win),(s)))
1348 #define mvwvline(win,y,x,c,n)       (wmove((win),(y),(x)) == ERR ? ERR : wvline((win),(c),(n)))
1349 
1350 #define mvaddch(y,x,ch)         mvwaddch(stdscr,(y),(x),(ch))
1351 #define mvaddchnstr(y,x,str,n)      mvwaddchnstr(stdscr,(y),(x),(str),(n))
1352 #define mvaddchstr(y,x,str)     mvwaddchstr(stdscr,(y),(x),(str))
1353 #define mvaddnstr(y,x,str,n)        mvwaddnstr(stdscr,(y),(x),(str),(n))
1354 #define mvaddstr(y,x,str)       mvwaddstr(stdscr,(y),(x),(str))
1355 #define mvchgat(y,x,n,a,c,o)        mvwchgat(stdscr,(y),(x),(n),(a),(c),(o))
1356 #define mvdelch(y,x)            mvwdelch(stdscr,(y),(x))
1357 #define mvgetch(y,x)            mvwgetch(stdscr,(y),(x))
1358 #define mvgetnstr(y,x,str,n)        mvwgetnstr(stdscr,(y),(x),(str),(n))
1359 #define mvgetstr(y,x,str)       mvwgetstr(stdscr,(y),(x),(str))
1360 #define mvhline(y,x,c,n)        mvwhline(stdscr,(y),(x),(c),(n))
1361 #define mvinch(y,x)         mvwinch(stdscr,(y),(x))
1362 #define mvinchnstr(y,x,s,n)     mvwinchnstr(stdscr,(y),(x),(s),(n))
1363 #define mvinchstr(y,x,s)        mvwinchstr(stdscr,(y),(x),(s))
1364 #define mvinnstr(y,x,s,n)       mvwinnstr(stdscr,(y),(x),(s),(n))
1365 #define mvinsch(y,x,c)          mvwinsch(stdscr,(y),(x),(c))
1366 #define mvinsnstr(y,x,s,n)      mvwinsnstr(stdscr,(y),(x),(s),(n))
1367 #define mvinsstr(y,x,s)         mvwinsstr(stdscr,(y),(x),(s))
1368 #define mvinstr(y,x,s)          mvwinstr(stdscr,(y),(x),(s))
1369 #define mvvline(y,x,c,n)        mvwvline(stdscr,(y),(x),(c),(n))
1370 
1371 /*
1372  * Some wide-character functions can be implemented without the extensions.
1373  */
1374 #if !NCURSES_OPAQUE
1375 #define getbkgd(win)                    (NCURSES_OK_ADDR(win) ? ((win)->_bkgd) : 0)
1376 #endif /* NCURSES_OPAQUE */
1377 
1378 #define slk_attr_off(a,v)       ((v) ? ERR : slk_attroff(a))
1379 #define slk_attr_on(a,v)        ((v) ? ERR : slk_attron(a))
1380 
1381 #if !NCURSES_OPAQUE
1382 #if NCURSES_WATTR_MACROS
1383 #if NCURSES_WIDECHAR && 1
1384 #define wattr_set(win,a,p,opts) \
1385     (NCURSES_OK_ADDR(win) \
1386      ? ((void)((win)->_attrs = ((a) & ~A_COLOR), \
1387            (win)->_color = (opts) ? *(int *)(opts) : (p)), \
1388         OK) \
1389      : ERR)
1390 #define wattr_get(win,a,p,opts) \
1391     (NCURSES_OK_ADDR(win) \
1392      ? ((void)(NCURSES_OK_ADDR(a) \
1393            ? (*(a) = (win)->_attrs) \
1394            : OK), \
1395         (void)(NCURSES_OK_ADDR(p) \
1396            ? (*(p) = (NCURSES_PAIRS_T) (win)->_color) \
1397            : OK), \
1398         (void)(NCURSES_OK_ADDR(opts) \
1399            ? (*(int *)(opts) = (win)->_color) \
1400            : OK), \
1401         OK) \
1402      : ERR)
1403 #else /* !(NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
1404 #define wattr_set(win,a,p,opts) \
1405      (NCURSES_OK_ADDR(win) \
1406       ? ((void)((win)->_attrs = (((a) & ~A_COLOR) | \
1407                      (attr_t)COLOR_PAIR(p))), \
1408          OK) \
1409       : ERR)
1410 #define wattr_get(win,a,p,opts) \
1411     (NCURSES_OK_ADDR(win) \
1412      ? ((void)(NCURSES_OK_ADDR(a) \
1413            ? (*(a) = (win)->_attrs) \
1414            : OK), \
1415         (void)(NCURSES_OK_ADDR(p) \
1416            ? (*(p) = (NCURSES_PAIRS_T) PAIR_NUMBER((win)->_attrs)) \
1417            : OK), \
1418         OK) \
1419      : ERR)
1420 #endif /* (NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
1421 #endif /* NCURSES_WATTR_MACROS */
1422 #endif /* NCURSES_OPAQUE */
1423 
1424 /*
1425  * X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
1426  * varargs.h.  It adds new calls vw_printw/vw_scanw, which are supposed to
1427  * use POSIX stdarg.h.  The ncurses versions of vwprintw/vwscanw already
1428  * use stdarg.h, so...
1429  */
1430 /* define vw_printw     vwprintw */
1431 /* define vw_scanw      vwscanw */
1432 
1433 /*
1434  * Export fallback function for use in C++ binding.
1435  */
1436 #if !1
1437 #define vsscanf(a,b,c) _nc_vsscanf(a,b,c)
1438 NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list);
1439 #endif
1440 
1441 /*
1442  * These macros are extensions - not in X/Open Curses.
1443  */
1444 #if 1
1445 #if !NCURSES_OPAQUE
1446 #define is_cleared(win)     (NCURSES_OK_ADDR(win) ? (win)->_clear : FALSE)
1447 #define is_idcok(win)       (NCURSES_OK_ADDR(win) ? (win)->_idcok : FALSE)
1448 #define is_idlok(win)       (NCURSES_OK_ADDR(win) ? (win)->_idlok : FALSE)
1449 #define is_immedok(win)     (NCURSES_OK_ADDR(win) ? (win)->_immed : FALSE)
1450 #define is_keypad(win)      (NCURSES_OK_ADDR(win) ? (win)->_use_keypad : FALSE)
1451 #define is_leaveok(win)     (NCURSES_OK_ADDR(win) ? (win)->_leaveok : FALSE)
1452 #define is_nodelay(win)     (NCURSES_OK_ADDR(win) ? ((win)->_delay == 0) : FALSE)
1453 #define is_notimeout(win)   (NCURSES_OK_ADDR(win) ? (win)->_notimeout : FALSE)
1454 #define is_pad(win)     (NCURSES_OK_ADDR(win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
1455 #define is_scrollok(win)    (NCURSES_OK_ADDR(win) ? (win)->_scroll : FALSE)
1456 #define is_subwin(win)      (NCURSES_OK_ADDR(win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
1457 #define is_syncok(win)      (NCURSES_OK_ADDR(win) ? (win)->_sync : FALSE)
1458 #define wgetdelay(win)      (NCURSES_OK_ADDR(win) ? (win)->_delay : 0)
1459 #define wgetparent(win)     (NCURSES_OK_ADDR(win) ? (win)->_parent : 0)
1460 #define wgetscrreg(win,t,b) (NCURSES_OK_ADDR(win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
1461 #endif
1462 #endif
1463 
1464 /*
1465  * X/Open says this returns a bool; SVr4 also checked for out-of-range line.
1466  * The macro provides compatibility:
1467  */
1468 #define is_linetouched(w,l) ((!(w) || ((l) > getmaxy(w)) || ((l) < 0)) ? ERR : (is_linetouched)((w),(l)))
1469 
1470 #endif /* NCURSES_NOMACROS */
1471 
1472 /*
1473  * Public variables.
1474  *
1475  * Notes:
1476  *  a. ESCDELAY was an undocumented feature under AIX curses.
1477  *     It gives the ESC expire time in milliseconds.
1478  *  b. ttytype is needed for backward compatibility
1479  */
1480 #if NCURSES_REENTRANT
1481 
1482 NCURSES_WRAPPED_VAR(WINDOW *, curscr);
1483 NCURSES_WRAPPED_VAR(WINDOW *, newscr);
1484 NCURSES_WRAPPED_VAR(WINDOW *, stdscr);
1485 NCURSES_WRAPPED_VAR(char *, ttytype);
1486 NCURSES_WRAPPED_VAR(int, COLORS);
1487 NCURSES_WRAPPED_VAR(int, COLOR_PAIRS);
1488 NCURSES_WRAPPED_VAR(int, COLS);
1489 NCURSES_WRAPPED_VAR(int, ESCDELAY);
1490 NCURSES_WRAPPED_VAR(int, LINES);
1491 NCURSES_WRAPPED_VAR(int, TABSIZE);
1492 
1493 #define curscr      NCURSES_PUBLIC_VAR(curscr())
1494 #define newscr      NCURSES_PUBLIC_VAR(newscr())
1495 #define stdscr      NCURSES_PUBLIC_VAR(stdscr())
1496 #define ttytype     NCURSES_PUBLIC_VAR(ttytype())
1497 #define COLORS      NCURSES_PUBLIC_VAR(COLORS())
1498 #define COLOR_PAIRS NCURSES_PUBLIC_VAR(COLOR_PAIRS())
1499 #define COLS        NCURSES_PUBLIC_VAR(COLS())
1500 #define ESCDELAY    NCURSES_PUBLIC_VAR(ESCDELAY())
1501 #define LINES       NCURSES_PUBLIC_VAR(LINES())
1502 #define TABSIZE     NCURSES_PUBLIC_VAR(TABSIZE())
1503 
1504 #else
1505 
1506 extern NCURSES_EXPORT_VAR(WINDOW *) curscr;
1507 extern NCURSES_EXPORT_VAR(WINDOW *) newscr;
1508 extern NCURSES_EXPORT_VAR(WINDOW *) stdscr;
1509 extern NCURSES_EXPORT_VAR(char) ttytype[];
1510 extern NCURSES_EXPORT_VAR(int) COLORS;
1511 extern NCURSES_EXPORT_VAR(int) COLOR_PAIRS;
1512 extern NCURSES_EXPORT_VAR(int) COLS;
1513 extern NCURSES_EXPORT_VAR(int) ESCDELAY;
1514 extern NCURSES_EXPORT_VAR(int) LINES;
1515 extern NCURSES_EXPORT_VAR(int) TABSIZE;
1516 
1517 #endif
1518 
1519 /*
1520  * Pseudo-character tokens outside ASCII range.  The curses wgetch() function
1521  * will return any given one of these only if the corresponding k- capability
1522  * is defined in your terminal's terminfo entry.
1523  *
1524  * Some keys (KEY_A1, etc) are arranged like this:
1525  *  a1     up    a3
1526  *  left   b2    right
1527  *  c1     down  c3
1528  *
1529  * A few key codes do not depend upon the terminfo entry.
1530  */
1531 #define KEY_CODE_YES    0400        /* A wchar_t contains a key code */
1532 #define KEY_MIN     0401        /* Minimum curses key */
1533 #define KEY_BREAK   0401        /* Break key (unreliable) */
1534 #define KEY_SRESET  0530        /* Soft (partial) reset (unreliable) */
1535 #define KEY_RESET   0531        /* Reset or hard reset (unreliable) */
1536 /*
1537  * These definitions were generated by ./MKkey_defs.sh .././../include/Caps .././../include/Caps-ncurses
1538  */
1539 #define KEY_DOWN    0402        /* down-arrow key */
1540 #define KEY_UP      0403        /* up-arrow key */
1541 #define KEY_LEFT    0404        /* left-arrow key */
1542 #define KEY_RIGHT   0405        /* right-arrow key */
1543 #define KEY_HOME    0406        /* home key */
1544 #define KEY_BACKSPACE   0407        /* backspace key */
1545 #define KEY_F0      0410        /* Function keys.  Space for 64 */
1546 #define KEY_F(n)    (KEY_F0+(n))    /* Value of function key n */
1547 #define KEY_DL      0510        /* delete-line key */
1548 #define KEY_IL      0511        /* insert-line key */
1549 #define KEY_DC      0512        /* delete-character key */
1550 #define KEY_IC      0513        /* insert-character key */
1551 #define KEY_EIC     0514        /* sent by rmir or smir in insert mode */
1552 #define KEY_CLEAR   0515        /* clear-screen or erase key */
1553 #define KEY_EOS     0516        /* clear-to-end-of-screen key */
1554 #define KEY_EOL     0517        /* clear-to-end-of-line key */
1555 #define KEY_SF      0520        /* scroll-forward key */
1556 #define KEY_SR      0521        /* scroll-backward key */
1557 #define KEY_NPAGE   0522        /* next-page key */
1558 #define KEY_PPAGE   0523        /* previous-page key */
1559 #define KEY_STAB    0524        /* set-tab key */
1560 #define KEY_CTAB    0525        /* clear-tab key */
1561 #define KEY_CATAB   0526        /* clear-all-tabs key */
1562 #define KEY_ENTER   0527        /* enter/send key */
1563 #define KEY_PRINT   0532        /* print key */
1564 #define KEY_LL      0533        /* lower-left key (home down) */
1565 #define KEY_A1      0534        /* upper left of keypad */
1566 #define KEY_A3      0535        /* upper right of keypad */
1567 #define KEY_B2      0536        /* center of keypad */
1568 #define KEY_C1      0537        /* lower left of keypad */
1569 #define KEY_C3      0540        /* lower right of keypad */
1570 #define KEY_BTAB    0541        /* back-tab key */
1571 #define KEY_BEG     0542        /* begin key */
1572 #define KEY_CANCEL  0543        /* cancel key */
1573 #define KEY_CLOSE   0544        /* close key */
1574 #define KEY_COMMAND 0545        /* command key */
1575 #define KEY_COPY    0546        /* copy key */
1576 #define KEY_CREATE  0547        /* create key */
1577 #define KEY_END     0550        /* end key */
1578 #define KEY_EXIT    0551        /* exit key */
1579 #define KEY_FIND    0552        /* find key */
1580 #define KEY_HELP    0553        /* help key */
1581 #define KEY_MARK    0554        /* mark key */
1582 #define KEY_MESSAGE 0555        /* message key */
1583 #define KEY_MOVE    0556        /* move key */
1584 #define KEY_NEXT    0557        /* next key */
1585 #define KEY_OPEN    0560        /* open key */
1586 #define KEY_OPTIONS 0561        /* options key */
1587 #define KEY_PREVIOUS    0562        /* previous key */
1588 #define KEY_REDO    0563        /* redo key */
1589 #define KEY_REFERENCE   0564        /* reference key */
1590 #define KEY_REFRESH 0565        /* refresh key */
1591 #define KEY_REPLACE 0566        /* replace key */
1592 #define KEY_RESTART 0567        /* restart key */
1593 #define KEY_RESUME  0570        /* resume key */
1594 #define KEY_SAVE    0571        /* save key */
1595 #define KEY_SBEG    0572        /* shifted begin key */
1596 #define KEY_SCANCEL 0573        /* shifted cancel key */
1597 #define KEY_SCOMMAND    0574        /* shifted command key */
1598 #define KEY_SCOPY   0575        /* shifted copy key */
1599 #define KEY_SCREATE 0576        /* shifted create key */
1600 #define KEY_SDC     0577        /* shifted delete-character key */
1601 #define KEY_SDL     0600        /* shifted delete-line key */
1602 #define KEY_SELECT  0601        /* select key */
1603 #define KEY_SEND    0602        /* shifted end key */
1604 #define KEY_SEOL    0603        /* shifted clear-to-end-of-line key */
1605 #define KEY_SEXIT   0604        /* shifted exit key */
1606 #define KEY_SFIND   0605        /* shifted find key */
1607 #define KEY_SHELP   0606        /* shifted help key */
1608 #define KEY_SHOME   0607        /* shifted home key */
1609 #define KEY_SIC     0610        /* shifted insert-character key */
1610 #define KEY_SLEFT   0611        /* shifted left-arrow key */
1611 #define KEY_SMESSAGE    0612        /* shifted message key */
1612 #define KEY_SMOVE   0613        /* shifted move key */
1613 #define KEY_SNEXT   0614        /* shifted next key */
1614 #define KEY_SOPTIONS    0615        /* shifted options key */
1615 #define KEY_SPREVIOUS   0616        /* shifted previous key */
1616 #define KEY_SPRINT  0617        /* shifted print key */
1617 #define KEY_SREDO   0620        /* shifted redo key */
1618 #define KEY_SREPLACE    0621        /* shifted replace key */
1619 #define KEY_SRIGHT  0622        /* shifted right-arrow key */
1620 #define KEY_SRSUME  0623        /* shifted resume key */
1621 #define KEY_SSAVE   0624        /* shifted save key */
1622 #define KEY_SSUSPEND    0625        /* shifted suspend key */
1623 #define KEY_SUNDO   0626        /* shifted undo key */
1624 #define KEY_SUSPEND 0627        /* suspend key */
1625 #define KEY_UNDO    0630        /* undo key */
1626 #define KEY_MOUSE   0631        /* Mouse event has occurred */
1627 
1628 #if NCURSES_SIGWINCH
1629 #define KEY_RESIZE  0632        /* Terminal resize event */
1630 #endif
1631 
1632 #define KEY_MAX     0777        /* Maximum key value is 0632 */
1633 /* $Id: curses.wide,v 1.51 2021/05/22 20:28:29 tom Exp $ */
1634 /*
1635  * vile:cmode:
1636  * This file is part of ncurses, designed to be appended after curses.h.in
1637  * (see that file for the relevant copyright).
1638  */
1639 #define _XOPEN_CURSES 1
1640 
1641 #if NCURSES_WIDECHAR
1642 
1643 extern NCURSES_EXPORT_VAR(cchar_t *) _nc_wacs;
1644 
1645 #define NCURSES_WACS(c) (&_nc_wacs[NCURSES_CAST(unsigned char,(c))])
1646 
1647 #define WACS_BSSB   NCURSES_WACS('l')
1648 #define WACS_SSBB   NCURSES_WACS('m')
1649 #define WACS_BBSS   NCURSES_WACS('k')
1650 #define WACS_SBBS   NCURSES_WACS('j')
1651 #define WACS_SBSS   NCURSES_WACS('u')
1652 #define WACS_SSSB   NCURSES_WACS('t')
1653 #define WACS_SSBS   NCURSES_WACS('v')
1654 #define WACS_BSSS   NCURSES_WACS('w')
1655 #define WACS_BSBS   NCURSES_WACS('q')
1656 #define WACS_SBSB   NCURSES_WACS('x')
1657 #define WACS_SSSS   NCURSES_WACS('n')
1658 
1659 #define WACS_ULCORNER   WACS_BSSB
1660 #define WACS_LLCORNER   WACS_SSBB
1661 #define WACS_URCORNER   WACS_BBSS
1662 #define WACS_LRCORNER   WACS_SBBS
1663 #define WACS_RTEE   WACS_SBSS
1664 #define WACS_LTEE   WACS_SSSB
1665 #define WACS_BTEE   WACS_SSBS
1666 #define WACS_TTEE   WACS_BSSS
1667 #define WACS_HLINE  WACS_BSBS
1668 #define WACS_VLINE  WACS_SBSB
1669 #define WACS_PLUS   WACS_SSSS
1670 
1671 #define WACS_S1     NCURSES_WACS('o') /* scan line 1 */
1672 #define WACS_S9     NCURSES_WACS('s') /* scan line 9 */
1673 #define WACS_DIAMOND    NCURSES_WACS('`') /* diamond */
1674 #define WACS_CKBOARD    NCURSES_WACS('a') /* checker board */
1675 #define WACS_DEGREE NCURSES_WACS('f') /* degree symbol */
1676 #define WACS_PLMINUS    NCURSES_WACS('g') /* plus/minus */
1677 #define WACS_BULLET NCURSES_WACS('~') /* bullet */
1678 
1679     /* Teletype 5410v1 symbols */
1680 #define WACS_LARROW NCURSES_WACS(',') /* arrow left */
1681 #define WACS_RARROW NCURSES_WACS('+') /* arrow right */
1682 #define WACS_DARROW NCURSES_WACS('.') /* arrow down */
1683 #define WACS_UARROW NCURSES_WACS('-') /* arrow up */
1684 #define WACS_BOARD  NCURSES_WACS('h') /* board of squares */
1685 #define WACS_LANTERN    NCURSES_WACS('i') /* lantern symbol */
1686 #define WACS_BLOCK  NCURSES_WACS('0') /* solid square block */
1687 
1688     /* ncurses extensions */
1689 #define WACS_S3     NCURSES_WACS('p') /* scan line 3 */
1690 #define WACS_S7     NCURSES_WACS('r') /* scan line 7 */
1691 #define WACS_LEQUAL NCURSES_WACS('y') /* less/equal */
1692 #define WACS_GEQUAL NCURSES_WACS('z') /* greater/equal */
1693 #define WACS_PI     NCURSES_WACS('{') /* Pi */
1694 #define WACS_NEQUAL NCURSES_WACS('|') /* not equal */
1695 #define WACS_STERLING   NCURSES_WACS('}') /* UK pound sign */
1696 
1697     /* double lines */
1698 #define WACS_BDDB   NCURSES_WACS('C')
1699 #define WACS_DDBB   NCURSES_WACS('D')
1700 #define WACS_BBDD   NCURSES_WACS('B')
1701 #define WACS_DBBD   NCURSES_WACS('A')
1702 #define WACS_DBDD   NCURSES_WACS('G')
1703 #define WACS_DDDB   NCURSES_WACS('F')
1704 #define WACS_DDBD   NCURSES_WACS('H')
1705 #define WACS_BDDD   NCURSES_WACS('I')
1706 #define WACS_BDBD   NCURSES_WACS('R')
1707 #define WACS_DBDB   NCURSES_WACS('Y')
1708 #define WACS_DDDD   NCURSES_WACS('E')
1709 
1710 #define WACS_D_ULCORNER WACS_BDDB
1711 #define WACS_D_LLCORNER WACS_DDBB
1712 #define WACS_D_URCORNER WACS_BBDD
1713 #define WACS_D_LRCORNER WACS_DBBD
1714 #define WACS_D_RTEE WACS_DBDD
1715 #define WACS_D_LTEE WACS_DDDB
1716 #define WACS_D_BTEE WACS_DDBD
1717 #define WACS_D_TTEE WACS_BDDD
1718 #define WACS_D_HLINE    WACS_BDBD
1719 #define WACS_D_VLINE    WACS_DBDB
1720 #define WACS_D_PLUS WACS_DDDD
1721 
1722     /* thick lines */
1723 #define WACS_BTTB   NCURSES_WACS('L')
1724 #define WACS_TTBB   NCURSES_WACS('M')
1725 #define WACS_BBTT   NCURSES_WACS('K')
1726 #define WACS_TBBT   NCURSES_WACS('J')
1727 #define WACS_TBTT   NCURSES_WACS('U')
1728 #define WACS_TTTB   NCURSES_WACS('T')
1729 #define WACS_TTBT   NCURSES_WACS('V')
1730 #define WACS_BTTT   NCURSES_WACS('W')
1731 #define WACS_BTBT   NCURSES_WACS('Q')
1732 #define WACS_TBTB   NCURSES_WACS('X')
1733 #define WACS_TTTT   NCURSES_WACS('N')
1734 
1735 #define WACS_T_ULCORNER WACS_BTTB
1736 #define WACS_T_LLCORNER WACS_TTBB
1737 #define WACS_T_URCORNER WACS_BBTT
1738 #define WACS_T_LRCORNER WACS_TBBT
1739 #define WACS_T_RTEE WACS_TBTT
1740 #define WACS_T_LTEE WACS_TTTB
1741 #define WACS_T_BTEE WACS_TTBT
1742 #define WACS_T_TTEE WACS_BTTT
1743 #define WACS_T_HLINE    WACS_BTBT
1744 #define WACS_T_VLINE    WACS_TBTB
1745 #define WACS_T_PLUS WACS_TTTT
1746 
1747 /*
1748  * Function prototypes for wide-character operations.
1749  *
1750  * "generated" comments should include ":WIDEC" to make the corresponding
1751  * functions ifdef'd in lib_gen.c
1752  *
1753  * "implemented" comments do not need this marker.
1754  */
1755 
1756 extern NCURSES_EXPORT(int) add_wch (const cchar_t *);           /* generated:WIDEC */
1757 extern NCURSES_EXPORT(int) add_wchnstr (const cchar_t *, int);      /* generated:WIDEC */
1758 extern NCURSES_EXPORT(int) add_wchstr (const cchar_t *);        /* generated:WIDEC */
1759 extern NCURSES_EXPORT(int) addnwstr (const wchar_t *, int);     /* generated:WIDEC */
1760 extern NCURSES_EXPORT(int) addwstr (const wchar_t *);           /* generated:WIDEC */
1761 extern NCURSES_EXPORT(int) bkgrnd (const cchar_t *);            /* generated:WIDEC */
1762 extern NCURSES_EXPORT(void) bkgrndset (const cchar_t *);        /* generated:WIDEC */
1763 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 */
1764 extern NCURSES_EXPORT(int) box_set (WINDOW *, const cchar_t *, const cchar_t *);    /* generated:WIDEC */
1765 extern NCURSES_EXPORT(int) echo_wchar (const cchar_t *);        /* generated:WIDEC */
1766 extern NCURSES_EXPORT(int) erasewchar (wchar_t*);           /* implemented */
1767 extern NCURSES_EXPORT(int) get_wch (wint_t *);              /* generated:WIDEC */
1768 extern NCURSES_EXPORT(int) get_wstr (wint_t *);             /* generated:WIDEC */
1769 extern NCURSES_EXPORT(int) getbkgrnd (cchar_t *);           /* generated:WIDEC */
1770 extern NCURSES_EXPORT(int) getcchar (const cchar_t *, wchar_t*, attr_t*, NCURSES_PAIRS_T*, void*);  /* implemented */
1771 extern NCURSES_EXPORT(int) getn_wstr (wint_t *, int);           /* generated:WIDEC */
1772 extern NCURSES_EXPORT(int) hline_set (const cchar_t *, int);        /* generated:WIDEC */
1773 extern NCURSES_EXPORT(int) in_wch (cchar_t *);              /* generated:WIDEC */
1774 extern NCURSES_EXPORT(int) in_wchnstr (cchar_t *, int);         /* generated:WIDEC */
1775 extern NCURSES_EXPORT(int) in_wchstr (cchar_t *);           /* generated:WIDEC */
1776 extern NCURSES_EXPORT(int) innwstr (wchar_t *, int);            /* generated:WIDEC */
1777 extern NCURSES_EXPORT(int) ins_nwstr (const wchar_t *, int);        /* generated:WIDEC */
1778 extern NCURSES_EXPORT(int) ins_wch (const cchar_t *);           /* generated:WIDEC */
1779 extern NCURSES_EXPORT(int) ins_wstr (const wchar_t *);          /* generated:WIDEC */
1780 extern NCURSES_EXPORT(int) inwstr (wchar_t *);              /* generated:WIDEC */
1781 extern NCURSES_EXPORT(NCURSES_CONST char*) key_name (wchar_t);      /* implemented */
1782 extern NCURSES_EXPORT(int) killwchar (wchar_t *);           /* implemented */
1783 extern NCURSES_EXPORT(int) mvadd_wch (int, int, const cchar_t *);   /* generated:WIDEC */
1784 extern NCURSES_EXPORT(int) mvadd_wchnstr (int, int, const cchar_t *, int);/* generated:WIDEC */
1785 extern NCURSES_EXPORT(int) mvadd_wchstr (int, int, const cchar_t *);    /* generated:WIDEC */
1786 extern NCURSES_EXPORT(int) mvaddnwstr (int, int, const wchar_t *, int); /* generated:WIDEC */
1787 extern NCURSES_EXPORT(int) mvaddwstr (int, int, const wchar_t *);   /* generated:WIDEC */
1788 extern NCURSES_EXPORT(int) mvget_wch (int, int, wint_t *);      /* generated:WIDEC */
1789 extern NCURSES_EXPORT(int) mvget_wstr (int, int, wint_t *);     /* generated:WIDEC */
1790 extern NCURSES_EXPORT(int) mvgetn_wstr (int, int, wint_t *, int);   /* generated:WIDEC */
1791 extern NCURSES_EXPORT(int) mvhline_set (int, int, const cchar_t *, int);    /* generated:WIDEC */
1792 extern NCURSES_EXPORT(int) mvin_wch (int, int, cchar_t *);      /* generated:WIDEC */
1793 extern NCURSES_EXPORT(int) mvin_wchnstr (int, int, cchar_t *, int); /* generated:WIDEC */
1794 extern NCURSES_EXPORT(int) mvin_wchstr (int, int, cchar_t *);       /* generated:WIDEC */
1795 extern NCURSES_EXPORT(int) mvinnwstr (int, int, wchar_t *, int);    /* generated:WIDEC */
1796 extern NCURSES_EXPORT(int) mvins_nwstr (int, int, const wchar_t *, int);    /* generated:WIDEC */
1797 extern NCURSES_EXPORT(int) mvins_wch (int, int, const cchar_t *);   /* generated:WIDEC */
1798 extern NCURSES_EXPORT(int) mvins_wstr (int, int, const wchar_t *);  /* generated:WIDEC */
1799 extern NCURSES_EXPORT(int) mvinwstr (int, int, wchar_t *);      /* generated:WIDEC */
1800 extern NCURSES_EXPORT(int) mvvline_set (int, int, const cchar_t *, int);    /* generated:WIDEC */
1801 extern NCURSES_EXPORT(int) mvwadd_wch (WINDOW *, int, int, const cchar_t *);    /* generated:WIDEC */
1802 extern NCURSES_EXPORT(int) mvwadd_wchnstr (WINDOW *, int, int, const cchar_t *, int); /* generated:WIDEC */
1803 extern NCURSES_EXPORT(int) mvwadd_wchstr (WINDOW *, int, int, const cchar_t *); /* generated:WIDEC */
1804 extern NCURSES_EXPORT(int) mvwaddnwstr (WINDOW *, int, int, const wchar_t *, int);/* generated:WIDEC */
1805 extern NCURSES_EXPORT(int) mvwaddwstr (WINDOW *, int, int, const wchar_t *);    /* generated:WIDEC */
1806 extern NCURSES_EXPORT(int) mvwget_wch (WINDOW *, int, int, wint_t *);   /* generated:WIDEC */
1807 extern NCURSES_EXPORT(int) mvwget_wstr (WINDOW *, int, int, wint_t *);  /* generated:WIDEC */
1808 extern NCURSES_EXPORT(int) mvwgetn_wstr (WINDOW *, int, int, wint_t *, int);/* generated:WIDEC */
1809 extern NCURSES_EXPORT(int) mvwhline_set (WINDOW *, int, int, const cchar_t *, int);/* generated:WIDEC */
1810 extern NCURSES_EXPORT(int) mvwin_wch (WINDOW *, int, int, cchar_t *);   /* generated:WIDEC */
1811 extern NCURSES_EXPORT(int) mvwin_wchnstr (WINDOW *, int,int, cchar_t *,int);    /* generated:WIDEC */
1812 extern NCURSES_EXPORT(int) mvwin_wchstr (WINDOW *, int, int, cchar_t *);    /* generated:WIDEC */
1813 extern NCURSES_EXPORT(int) mvwinnwstr (WINDOW *, int, int, wchar_t *, int); /* generated:WIDEC */
1814 extern NCURSES_EXPORT(int) mvwins_nwstr (WINDOW *, int,int, const wchar_t *,int); /* generated:WIDEC */
1815 extern NCURSES_EXPORT(int) mvwins_wch (WINDOW *, int, int, const cchar_t *);    /* generated:WIDEC */
1816 extern NCURSES_EXPORT(int) mvwins_wstr (WINDOW *, int, int, const wchar_t *);   /* generated:WIDEC */
1817 extern NCURSES_EXPORT(int) mvwinwstr (WINDOW *, int, int, wchar_t *);       /* generated:WIDEC */
1818 extern NCURSES_EXPORT(int) mvwvline_set (WINDOW *, int,int, const cchar_t *,int); /* generated:WIDEC */
1819 extern NCURSES_EXPORT(int) pecho_wchar (WINDOW *, const cchar_t *); /* implemented */
1820 extern NCURSES_EXPORT(int) setcchar (cchar_t *, const wchar_t *, const attr_t, NCURSES_PAIRS_T, const void *);  /* implemented */
1821 extern NCURSES_EXPORT(int) slk_wset (int, const wchar_t *, int);    /* implemented */
1822 extern NCURSES_EXPORT(attr_t) term_attrs (void);            /* implemented */
1823 extern NCURSES_EXPORT(int) unget_wch (const wchar_t);           /* implemented */
1824 extern NCURSES_EXPORT(int) vid_attr (attr_t, NCURSES_PAIRS_T, void *);      /* implemented */
1825 extern NCURSES_EXPORT(int) vid_puts (attr_t, NCURSES_PAIRS_T, void *, NCURSES_OUTC); /* implemented */
1826 extern NCURSES_EXPORT(int) vline_set (const cchar_t *, int);        /* generated:WIDEC */
1827 extern NCURSES_EXPORT(int) wadd_wch (WINDOW *,const cchar_t *);     /* implemented */
1828 extern NCURSES_EXPORT(int) wadd_wchnstr (WINDOW *,const cchar_t *,int); /* implemented */
1829 extern NCURSES_EXPORT(int) wadd_wchstr (WINDOW *,const cchar_t *);  /* generated:WIDEC */
1830 extern NCURSES_EXPORT(int) waddnwstr (WINDOW *,const wchar_t *,int);    /* implemented */
1831 extern NCURSES_EXPORT(int) waddwstr (WINDOW *,const wchar_t *);     /* generated:WIDEC */
1832 extern NCURSES_EXPORT(int) wbkgrnd (WINDOW *,const cchar_t *);      /* implemented */
1833 extern NCURSES_EXPORT(void) wbkgrndset (WINDOW *,const cchar_t *);  /* implemented */
1834 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 */
1835 extern NCURSES_EXPORT(int) wecho_wchar (WINDOW *, const cchar_t *); /* implemented */
1836 extern NCURSES_EXPORT(int) wget_wch (WINDOW *, wint_t *);       /* implemented */
1837 extern NCURSES_EXPORT(int) wget_wstr (WINDOW *, wint_t *);      /* generated:WIDEC */
1838 extern NCURSES_EXPORT(int) wgetbkgrnd (WINDOW *, cchar_t *);        /* generated:WIDEC */
1839 extern NCURSES_EXPORT(int) wgetn_wstr (WINDOW *, wint_t *, int);    /* implemented */
1840 extern NCURSES_EXPORT(int) whline_set (WINDOW *, const cchar_t *, int); /* implemented */
1841 extern NCURSES_EXPORT(int) win_wch (WINDOW *, cchar_t *);       /* implemented */
1842 extern NCURSES_EXPORT(int) win_wchnstr (WINDOW *, cchar_t *, int);  /* implemented */
1843 extern NCURSES_EXPORT(int) win_wchstr (WINDOW *, cchar_t *);        /* generated:WIDEC */
1844 extern NCURSES_EXPORT(int) winnwstr (WINDOW *, wchar_t *, int);     /* implemented */
1845 extern NCURSES_EXPORT(int) wins_nwstr (WINDOW *, const wchar_t *, int); /* implemented */
1846 extern NCURSES_EXPORT(int) wins_wch (WINDOW *, const cchar_t *);    /* implemented */
1847 extern NCURSES_EXPORT(int) wins_wstr (WINDOW *, const wchar_t *);   /* generated:WIDEC */
1848 extern NCURSES_EXPORT(int) winwstr (WINDOW *, wchar_t *);       /* implemented */
1849 extern NCURSES_EXPORT(wchar_t*) wunctrl (cchar_t *);            /* implemented */
1850 extern NCURSES_EXPORT(int) wvline_set (WINDOW *, const cchar_t *, int); /* implemented */
1851 
1852 #if NCURSES_SP_FUNCS
1853 extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(term_attrs) (SCREEN*);        /* implemented:SP_FUNC */
1854 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(erasewchar) (SCREEN*, wchar_t *);    /* implemented:SP_FUNC */
1855 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(killwchar) (SCREEN*, wchar_t *); /* implemented:SP_FUNC */
1856 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(unget_wch) (SCREEN*, const wchar_t); /* implemented:SP_FUNC */
1857 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_attr) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *);    /* implemented:SP_FUNC */
1858 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_puts) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *, NCURSES_SP_OUTC);   /* implemented:SP_FUNC */
1859 extern NCURSES_EXPORT(wchar_t*) NCURSES_SP_NAME(wunctrl) (SCREEN*, cchar_t *);  /* implemented:SP_FUNC */
1860 #endif
1861 
1862 #ifndef NCURSES_NOMACROS
1863 
1864 /*
1865  * XSI curses macros for XPG4 conformance.
1866  */
1867 #define add_wch(c)          wadd_wch(stdscr,(c))
1868 #define add_wchnstr(str,n)      wadd_wchnstr(stdscr,(str),(n))
1869 #define add_wchstr(str)         wadd_wchstr(stdscr,(str))
1870 #define addnwstr(wstr,n)        waddnwstr(stdscr,(wstr),(n))
1871 #define addwstr(wstr)           waddwstr(stdscr,(wstr))
1872 #define bkgrnd(c)           wbkgrnd(stdscr,(c))
1873 #define bkgrndset(c)            wbkgrndset(stdscr,(c))
1874 #define border_set(l,r,t,b,tl,tr,bl,br) wborder_set(stdscr,(l),(r),(t),(b),tl,tr,bl,br)
1875 #define box_set(w,v,h)          wborder_set((w),(v),(v),(h),(h),0,0,0,0)
1876 #define echo_wchar(c)           wecho_wchar(stdscr,(c))
1877 #define get_wch(c)          wget_wch(stdscr,(c))
1878 #define get_wstr(t)         wget_wstr(stdscr,(t))
1879 #define getbkgrnd(wch)          wgetbkgrnd(stdscr,(wch))
1880 #define getn_wstr(t,n)          wgetn_wstr(stdscr,(t),(n))
1881 #define hline_set(c,n)          whline_set(stdscr,(c),(n))
1882 #define in_wch(c)           win_wch(stdscr,(c))
1883 #define in_wchnstr(c,n)         win_wchnstr(stdscr,(c),(n))
1884 #define in_wchstr(c)            win_wchstr(stdscr,(c))
1885 #define innwstr(c,n)            winnwstr(stdscr,(c),(n))
1886 #define ins_nwstr(t,n)          wins_nwstr(stdscr,(t),(n))
1887 #define ins_wch(c)          wins_wch(stdscr,(c))
1888 #define ins_wstr(t)         wins_wstr(stdscr,(t))
1889 #define inwstr(c)           winwstr(stdscr,(c))
1890 #define vline_set(c,n)          wvline_set(stdscr,(c),(n))
1891 #define wadd_wchstr(win,str)        wadd_wchnstr((win),(str),-1)
1892 #define waddwstr(win,wstr)      waddnwstr((win),(wstr),-1)
1893 #define wget_wstr(w,t)          wgetn_wstr((w),(t),-1)
1894 #define win_wchstr(w,c)         win_wchnstr((w),(c),-1)
1895 #define wins_wstr(w,t)          wins_nwstr((w),(t),-1)
1896 
1897 #if !NCURSES_OPAQUE
1898 #define wgetbkgrnd(win,wch)     (NCURSES_OK_ADDR(wch) ? ((win) ? (*(wch) = (win)->_bkgrnd) : *(wch), OK) : ERR)
1899 #endif
1900 
1901 #define mvadd_wch(y,x,c)        mvwadd_wch(stdscr,(y),(x),(c))
1902 #define mvadd_wchnstr(y,x,s,n)      mvwadd_wchnstr(stdscr,(y),(x),(s),(n))
1903 #define mvadd_wchstr(y,x,s)     mvwadd_wchstr(stdscr,(y),(x),(s))
1904 #define mvaddnwstr(y,x,wstr,n)      mvwaddnwstr(stdscr,(y),(x),(wstr),(n))
1905 #define mvaddwstr(y,x,wstr)     mvwaddwstr(stdscr,(y),(x),(wstr))
1906 #define mvget_wch(y,x,c)        mvwget_wch(stdscr,(y),(x),(c))
1907 #define mvget_wstr(y,x,t)       mvwget_wstr(stdscr,(y),(x),(t))
1908 #define mvgetn_wstr(y,x,t,n)        mvwgetn_wstr(stdscr,(y),(x),(t),(n))
1909 #define mvhline_set(y,x,c,n)        mvwhline_set(stdscr,(y),(x),(c),(n))
1910 #define mvin_wch(y,x,c)         mvwin_wch(stdscr,(y),(x),(c))
1911 #define mvin_wchnstr(y,x,c,n)       mvwin_wchnstr(stdscr,(y),(x),(c),(n))
1912 #define mvin_wchstr(y,x,c)      mvwin_wchstr(stdscr,(y),(x),(c))
1913 #define mvinnwstr(y,x,c,n)      mvwinnwstr(stdscr,(y),(x),(c),(n))
1914 #define mvins_nwstr(y,x,t,n)        mvwins_nwstr(stdscr,(y),(x),(t),(n))
1915 #define mvins_wch(y,x,c)        mvwins_wch(stdscr,(y),(x),(c))
1916 #define mvins_wstr(y,x,t)       mvwins_wstr(stdscr,(y),(x),(t))
1917 #define mvinwstr(y,x,c)         mvwinwstr(stdscr,(y),(x),(c))
1918 #define mvvline_set(y,x,c,n)        mvwvline_set(stdscr,(y),(x),(c),(n))
1919 
1920 #define mvwadd_wch(win,y,x,c)       (wmove(win,(y),(x)) == ERR ? ERR : wadd_wch((win),(c)))
1921 #define mvwadd_wchnstr(win,y,x,s,n) (wmove(win,(y),(x)) == ERR ? ERR : wadd_wchnstr((win),(s),(n)))
1922 #define mvwadd_wchstr(win,y,x,s)    (wmove(win,(y),(x)) == ERR ? ERR : wadd_wchstr((win),(s)))
1923 #define mvwaddnwstr(win,y,x,wstr,n) (wmove(win,(y),(x)) == ERR ? ERR : waddnwstr((win),(wstr),(n)))
1924 #define mvwaddwstr(win,y,x,wstr)    (wmove(win,(y),(x)) == ERR ? ERR : waddwstr((win),(wstr)))
1925 #define mvwget_wch(win,y,x,c)       (wmove(win,(y),(x)) == ERR ? ERR : wget_wch((win),(c)))
1926 #define mvwget_wstr(win,y,x,t)      (wmove(win,(y),(x)) == ERR ? ERR : wget_wstr((win),(t)))
1927 #define mvwgetn_wstr(win,y,x,t,n)   (wmove(win,(y),(x)) == ERR ? ERR : wgetn_wstr((win),(t),(n)))
1928 #define mvwhline_set(win,y,x,c,n)   (wmove(win,(y),(x)) == ERR ? ERR : whline_set((win),(c),(n)))
1929 #define mvwin_wch(win,y,x,c)        (wmove(win,(y),(x)) == ERR ? ERR : win_wch((win),(c)))
1930 #define mvwin_wchnstr(win,y,x,c,n)  (wmove(win,(y),(x)) == ERR ? ERR : win_wchnstr((win),(c),(n)))
1931 #define mvwin_wchstr(win,y,x,c)     (wmove(win,(y),(x)) == ERR ? ERR : win_wchstr((win),(c)))
1932 #define mvwinnwstr(win,y,x,c,n)     (wmove(win,(y),(x)) == ERR ? ERR : winnwstr((win),(c),(n)))
1933 #define mvwins_nwstr(win,y,x,t,n)   (wmove(win,(y),(x)) == ERR ? ERR : wins_nwstr((win),(t),(n)))
1934 #define mvwins_wch(win,y,x,c)       (wmove(win,(y),(x)) == ERR ? ERR : wins_wch((win),(c)))
1935 #define mvwins_wstr(win,y,x,t)      (wmove(win,(y),(x)) == ERR ? ERR : wins_wstr((win),(t)))
1936 #define mvwinwstr(win,y,x,c)        (wmove(win,(y),(x)) == ERR ? ERR : winwstr((win),(c)))
1937 #define mvwvline_set(win,y,x,c,n)   (wmove(win,(y),(x)) == ERR ? ERR : wvline_set((win),(c),(n)))
1938 
1939 #endif /* NCURSES_NOMACROS */
1940 
1941 #if defined(TRACE) || defined(NCURSES_TEST)
1942 extern NCURSES_EXPORT(const char *) _nc_viswbuf(const wchar_t *);
1943 extern NCURSES_EXPORT(const char *) _nc_viswibuf(const wint_t *);
1944 #endif
1945 
1946 #endif /* NCURSES_WIDECHAR */
1947 /* $Id: curses.tail,v 1.27 2023/08/05 19:43:46 tom Exp $ */
1948 /*
1949  * vile:cmode:
1950  * This file is part of ncurses, designed to be appended after curses.h.in
1951  * (see that file for the relevant copyright).
1952  */
1953 
1954 /* mouse interface */
1955 
1956 #if NCURSES_MOUSE_VERSION > 1
1957 #define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 5))
1958 #else
1959 #define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6))
1960 #endif
1961 
1962 #define NCURSES_BUTTON_RELEASED 001UL
1963 #define NCURSES_BUTTON_PRESSED  002UL
1964 #define NCURSES_BUTTON_CLICKED  004UL
1965 #define NCURSES_DOUBLE_CLICKED  010UL
1966 #define NCURSES_TRIPLE_CLICKED  020UL
1967 #define NCURSES_RESERVED_EVENT  040UL
1968 
1969 /* event masks */
1970 #define BUTTON1_RELEASED    NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
1971 #define BUTTON1_PRESSED     NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
1972 #define BUTTON1_CLICKED     NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
1973 #define BUTTON1_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
1974 #define BUTTON1_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
1975 
1976 #define BUTTON2_RELEASED    NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
1977 #define BUTTON2_PRESSED     NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
1978 #define BUTTON2_CLICKED     NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
1979 #define BUTTON2_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
1980 #define BUTTON2_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
1981 
1982 #define BUTTON3_RELEASED    NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
1983 #define BUTTON3_PRESSED     NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
1984 #define BUTTON3_CLICKED     NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
1985 #define BUTTON3_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
1986 #define BUTTON3_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
1987 
1988 #define BUTTON4_RELEASED    NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
1989 #define BUTTON4_PRESSED     NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
1990 #define BUTTON4_CLICKED     NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
1991 #define BUTTON4_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
1992 #define BUTTON4_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
1993 
1994 /*
1995  * In 32 bits the version-1 scheme does not provide enough space for a 5th
1996  * button, unless we choose to change the ABI by omitting the reserved-events.
1997  */
1998 #if NCURSES_MOUSE_VERSION > 1
1999 
2000 #define BUTTON5_RELEASED    NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
2001 #define BUTTON5_PRESSED     NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
2002 #define BUTTON5_CLICKED     NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
2003 #define BUTTON5_DOUBLE_CLICKED  NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
2004 #define BUTTON5_TRIPLE_CLICKED  NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
2005 
2006 #define BUTTON_CTRL     NCURSES_MOUSE_MASK(6, 0001L)
2007 #define BUTTON_SHIFT        NCURSES_MOUSE_MASK(6, 0002L)
2008 #define BUTTON_ALT      NCURSES_MOUSE_MASK(6, 0004L)
2009 #define REPORT_MOUSE_POSITION   NCURSES_MOUSE_MASK(6, 0010L)
2010 
2011 #else
2012 
2013 #define BUTTON1_RESERVED_EVENT  NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
2014 #define BUTTON2_RESERVED_EVENT  NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
2015 #define BUTTON3_RESERVED_EVENT  NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
2016 #define BUTTON4_RESERVED_EVENT  NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
2017 
2018 #define BUTTON_CTRL     NCURSES_MOUSE_MASK(5, 0001L)
2019 #define BUTTON_SHIFT        NCURSES_MOUSE_MASK(5, 0002L)
2020 #define BUTTON_ALT      NCURSES_MOUSE_MASK(5, 0004L)
2021 #define REPORT_MOUSE_POSITION   NCURSES_MOUSE_MASK(5, 0010L)
2022 
2023 #endif
2024 
2025 #define ALL_MOUSE_EVENTS    (REPORT_MOUSE_POSITION - 1)
2026 
2027 /* macros to extract single event-bits from masks */
2028 #define BUTTON_RELEASE(e, x)        ((e) & NCURSES_MOUSE_MASK(x, 001))
2029 #define BUTTON_PRESS(e, x)      ((e) & NCURSES_MOUSE_MASK(x, 002))
2030 #define BUTTON_CLICK(e, x)      ((e) & NCURSES_MOUSE_MASK(x, 004))
2031 #define BUTTON_DOUBLE_CLICK(e, x)   ((e) & NCURSES_MOUSE_MASK(x, 010))
2032 #define BUTTON_TRIPLE_CLICK(e, x)   ((e) & NCURSES_MOUSE_MASK(x, 020))
2033 #define BUTTON_RESERVED_EVENT(e, x) ((e) & NCURSES_MOUSE_MASK(x, 040))
2034 
2035 typedef struct
2036 {
2037     short id;       /* ID to distinguish multiple devices */
2038     int x, y, z;    /* event coordinates (character-cell) */
2039     mmask_t bstate; /* button state bits */
2040 }
2041 MEVENT;
2042 
2043 extern NCURSES_EXPORT(bool)    has_mouse(void);
2044 extern NCURSES_EXPORT(int)     getmouse (MEVENT *);
2045 extern NCURSES_EXPORT(int)     ungetmouse (MEVENT *);
2046 extern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *);
2047 extern NCURSES_EXPORT(bool)    wenclose (const WINDOW *, int, int);
2048 extern NCURSES_EXPORT(int)     mouseinterval (int);
2049 extern NCURSES_EXPORT(bool)    wmouse_trafo (const WINDOW*, int*, int*, bool);
2050 extern NCURSES_EXPORT(bool)    mouse_trafo (int*, int*, bool);              /* generated */
2051 
2052 #if NCURSES_SP_FUNCS
2053 extern NCURSES_EXPORT(bool)    NCURSES_SP_NAME(has_mouse) (SCREEN*);
2054 extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(getmouse) (SCREEN*, MEVENT *);
2055 extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(ungetmouse) (SCREEN*,MEVENT *);
2056 extern NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (SCREEN*, mmask_t, mmask_t *);
2057 extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(mouseinterval) (SCREEN*, int);
2058 #endif
2059 
2060 #ifndef NCURSES_NOMACROS
2061 #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
2062 #endif
2063 
2064 /* other non-XSI functions */
2065 
2066 extern NCURSES_EXPORT(int) mcprint (char *, int);   /* direct data to printer */
2067 extern NCURSES_EXPORT(int) has_key (int);       /* do we have given key? */
2068 
2069 #if NCURSES_SP_FUNCS
2070 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN*, int);    /* do we have given key? */
2071 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (SCREEN*, char *, int); /* direct data to printer */
2072 #endif
2073 
2074 /* Debugging : use with libncurses_g.a */
2075 
2076 extern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
2077 extern NCURSES_EXPORT(char *) _traceattr (attr_t);
2078 extern NCURSES_EXPORT(char *) _traceattr2 (int, chtype);
2079 extern NCURSES_EXPORT(char *) _tracechar (int);
2080 extern NCURSES_EXPORT(char *) _tracechtype (chtype);
2081 extern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype);
2082 #if NCURSES_WIDECHAR
2083 #define _tracech_t      _tracecchar_t
2084 extern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *);
2085 #define _tracech_t2     _tracecchar_t2
2086 extern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *);
2087 #else
2088 #define _tracech_t      _tracechtype
2089 #define _tracech_t2     _tracechtype2
2090 #endif
2091 extern NCURSES_EXPORT(void) trace (const unsigned) GCC_DEPRECATED("use curses_trace");
2092 extern NCURSES_EXPORT(unsigned) curses_trace (const unsigned);
2093 
2094 /* trace masks */
2095 #define TRACE_DISABLE   0x0000  /* turn off tracing */
2096 #define TRACE_TIMES 0x0001  /* trace user and system times of updates */
2097 #define TRACE_TPUTS 0x0002  /* trace tputs calls */
2098 #define TRACE_UPDATE    0x0004  /* trace update actions, old & new screens */
2099 #define TRACE_MOVE  0x0008  /* trace cursor moves and scrolls */
2100 #define TRACE_CHARPUT   0x0010  /* trace all character outputs */
2101 #define TRACE_ORDINARY  0x001F  /* trace all update actions */
2102 #define TRACE_CALLS 0x0020  /* trace all curses calls */
2103 #define TRACE_VIRTPUT   0x0040  /* trace virtual character puts */
2104 #define TRACE_IEVENT    0x0080  /* trace low-level input processing */
2105 #define TRACE_BITS  0x0100  /* trace state of TTY control bits */
2106 #define TRACE_ICALLS    0x0200  /* trace internal/nested calls */
2107 #define TRACE_CCALLS    0x0400  /* trace per-character calls */
2108 #define TRACE_DATABASE  0x0800  /* trace read/write of terminfo/termcap data */
2109 #define TRACE_ATTRS 0x1000  /* trace attribute updates */
2110 
2111 #define TRACE_SHIFT 13  /* number of bits in the trace masks */
2112 #define TRACE_MAXIMUM   ((1 << TRACE_SHIFT) - 1) /* maximum trace level */
2113 
2114 #if defined(TRACE) || defined(NCURSES_TEST)
2115 extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable;     /* enable optimizations */
2116 extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
2117 #define OPTIMIZE_MVCUR      0x01    /* cursor movement optimization */
2118 #define OPTIMIZE_HASHMAP    0x02    /* diff hashing to detect scrolls */
2119 #define OPTIMIZE_SCROLL     0x04    /* scroll optimization */
2120 #define OPTIMIZE_ALL        0xff    /* enable all optimizations (dflt) */
2121 #endif
2122 
2123 extern GCC_NORETURN NCURSES_EXPORT(void) exit_curses (int);
2124 
2125 #include <ncursesw/unctrl.h>
2126 
2127 #ifdef __cplusplus
2128 
2129 #ifndef NCURSES_NOMACROS
2130 
2131 /* these names conflict with STL */
2132 #undef box
2133 #undef clear
2134 #undef erase
2135 #undef move
2136 #undef refresh
2137 
2138 #endif /* NCURSES_NOMACROS */
2139 
2140 }
2141 #endif
2142 
2143 #endif /* __NCURSES_H */