annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/ncurses/ncurses.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
rev   line source
jpayne@69 1 /****************************************************************************
jpayne@69 2 * Copyright 2018-2023,2024 Thomas E. Dickey *
jpayne@69 3 * Copyright 1998-2016,2017 Free Software Foundation, Inc. *
jpayne@69 4 * *
jpayne@69 5 * Permission is hereby granted, free of charge, to any person obtaining a *
jpayne@69 6 * copy of this software and associated documentation files (the *
jpayne@69 7 * "Software"), to deal in the Software without restriction, including *
jpayne@69 8 * without limitation the rights to use, copy, modify, merge, publish, *
jpayne@69 9 * distribute, distribute with modifications, sublicense, and/or sell *
jpayne@69 10 * copies of the Software, and to permit persons to whom the Software is *
jpayne@69 11 * furnished to do so, subject to the following conditions: *
jpayne@69 12 * *
jpayne@69 13 * The above copyright notice and this permission notice shall be included *
jpayne@69 14 * in all copies or substantial portions of the Software. *
jpayne@69 15 * *
jpayne@69 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
jpayne@69 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
jpayne@69 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
jpayne@69 19 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
jpayne@69 20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
jpayne@69 21 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
jpayne@69 22 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
jpayne@69 23 * *
jpayne@69 24 * Except as contained in this notice, the name(s) of the above copyright *
jpayne@69 25 * holders shall not be used in advertising or otherwise to promote the *
jpayne@69 26 * sale, use or other dealings in this Software without prior written *
jpayne@69 27 * authorization. *
jpayne@69 28 ****************************************************************************/
jpayne@69 29
jpayne@69 30 /****************************************************************************
jpayne@69 31 * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
jpayne@69 32 * and: Eric S. Raymond <esr@snark.thyrsus.com> *
jpayne@69 33 * and: Thomas E. Dickey 1996-on *
jpayne@69 34 ****************************************************************************/
jpayne@69 35
jpayne@69 36 /* $Id: curses.h.in,v 1.282 2024/01/19 11:50:07 tom Exp $ */
jpayne@69 37
jpayne@69 38 #ifndef __NCURSES_H
jpayne@69 39 #define __NCURSES_H
jpayne@69 40
jpayne@69 41 /*
jpayne@69 42 The symbols beginning NCURSES_ or USE_ are configuration choices.
jpayne@69 43 A few of the former can be overridden by applications at compile-time.
jpayne@69 44 Most of the others correspond to configure-script options (or checks
jpayne@69 45 by the configure-script for features of the system on which it is built).
jpayne@69 46
jpayne@69 47 These symbols can be overridden by applications at compile-time:
jpayne@69 48 NCURSES_NOMACROS suppresses macro definitions in favor of functions
jpayne@69 49 NCURSES_WATTR_MACROS suppresses wattr_* macro definitions
jpayne@69 50 NCURSES_WIDECHAR is an alternative for declaring wide-character functions.
jpayne@69 51
jpayne@69 52 These symbols are used only when building ncurses:
jpayne@69 53 NCURSES_ATTR_T
jpayne@69 54 NCURSES_FIELD_INTERNALS
jpayne@69 55 NCURSES_INTERNALS
jpayne@69 56
jpayne@69 57 These symbols are set by the configure script:
jpayne@69 58 NCURSES_ENABLE_STDBOOL_H
jpayne@69 59 NCURSES_EXPANDED
jpayne@69 60 NCURSES_EXT_COLORS
jpayne@69 61 NCURSES_EXT_FUNCS
jpayne@69 62 NCURSES_EXT_PUTWIN
jpayne@69 63 NCURSES_NO_PADDING
jpayne@69 64 NCURSES_OSPEED_COMPAT
jpayne@69 65 NCURSES_PATHSEP
jpayne@69 66 NCURSES_REENTRANT
jpayne@69 67 NCURSES_SIGWINCH
jpayne@69 68 */
jpayne@69 69
jpayne@69 70 #define CURSES 1
jpayne@69 71 #define CURSES_H 1
jpayne@69 72
jpayne@69 73 /* These are defined only in curses.h, and are used for conditional compiles */
jpayne@69 74 #define NCURSES_VERSION_MAJOR 6
jpayne@69 75 #define NCURSES_VERSION_MINOR 5
jpayne@69 76 #define NCURSES_VERSION_PATCH 20240427
jpayne@69 77
jpayne@69 78 /* This is defined in more than one ncurses header, for identification */
jpayne@69 79 #undef NCURSES_VERSION
jpayne@69 80 #define NCURSES_VERSION "6.5"
jpayne@69 81
jpayne@69 82 /*
jpayne@69 83 * Identify the mouse encoding version.
jpayne@69 84 */
jpayne@69 85 #define NCURSES_MOUSE_VERSION 2
jpayne@69 86
jpayne@69 87 /*
jpayne@69 88 * Definitions to facilitate DLL's.
jpayne@69 89 */
jpayne@69 90 #include <ncursesw/ncurses_dll.h>
jpayne@69 91
jpayne@69 92 /*
jpayne@69 93 * Extra headers.
jpayne@69 94 */
jpayne@69 95 #if 1
jpayne@69 96 #include <stdint.h>
jpayne@69 97 #endif
jpayne@69 98
jpayne@69 99 #ifdef __cplusplus
jpayne@69 100 #else
jpayne@69 101 #if 0
jpayne@69 102 #include <stdnoreturn.h>
jpayne@69 103 #undef GCC_NORETURN
jpayne@69 104 #define GCC_NORETURN _Noreturn
jpayne@69 105 #endif
jpayne@69 106 #endif
jpayne@69 107
jpayne@69 108 /*
jpayne@69 109 * User-definable tweak to disable the include of <stdbool.h>.
jpayne@69 110 */
jpayne@69 111 #ifndef NCURSES_ENABLE_STDBOOL_H
jpayne@69 112 #define NCURSES_ENABLE_STDBOOL_H 1
jpayne@69 113 #endif
jpayne@69 114
jpayne@69 115 /*
jpayne@69 116 * NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses
jpayne@69 117 * configured using --disable-macros.
jpayne@69 118 */
jpayne@69 119 #ifndef NCURSES_ATTR_T
jpayne@69 120 #define NCURSES_ATTR_T int
jpayne@69 121 #endif
jpayne@69 122
jpayne@69 123 /*
jpayne@69 124 * Expands to 'const' if ncurses is configured using --enable-const. Note that
jpayne@69 125 * doing so makes it incompatible with other implementations of X/Open Curses.
jpayne@69 126 */
jpayne@69 127 #undef NCURSES_CONST
jpayne@69 128 #define NCURSES_CONST const
jpayne@69 129
jpayne@69 130 #undef NCURSES_INLINE
jpayne@69 131 #define NCURSES_INLINE inline
jpayne@69 132
jpayne@69 133 /*
jpayne@69 134 * The standard type used for color values, and for color-pairs. The latter
jpayne@69 135 * allows the curses library to enumerate the combinations of foreground and
jpayne@69 136 * background colors used by an application, and is normally the product of the
jpayne@69 137 * total foreground and background colors.
jpayne@69 138 *
jpayne@69 139 * X/Open uses "short" for both of these types, ultimately because they are
jpayne@69 140 * numbers from the SVr4 terminal database, which uses 16-bit signed values.
jpayne@69 141 */
jpayne@69 142 #undef NCURSES_COLOR_T
jpayne@69 143 #define NCURSES_COLOR_T short
jpayne@69 144
jpayne@69 145 #undef NCURSES_PAIRS_T
jpayne@69 146 #define NCURSES_PAIRS_T short
jpayne@69 147
jpayne@69 148 /*
jpayne@69 149 * Definitions used to make WINDOW and similar structs opaque.
jpayne@69 150 */
jpayne@69 151 #ifndef NCURSES_INTERNALS
jpayne@69 152 #define NCURSES_OPAQUE 1
jpayne@69 153 #define NCURSES_OPAQUE_FORM 1
jpayne@69 154 #define NCURSES_OPAQUE_MENU 1
jpayne@69 155 #define NCURSES_OPAQUE_PANEL 1
jpayne@69 156 #endif
jpayne@69 157
jpayne@69 158 /*
jpayne@69 159 * Definition used to optionally suppress wattr* macros to help with the
jpayne@69 160 * transition from ncurses5 to ncurses6 by allowing the header files to
jpayne@69 161 * be shared across development packages for ncursesw in both ABIs.
jpayne@69 162 */
jpayne@69 163 #ifndef NCURSES_WATTR_MACROS
jpayne@69 164 #define NCURSES_WATTR_MACROS 0
jpayne@69 165 #endif
jpayne@69 166
jpayne@69 167 /*
jpayne@69 168 * The reentrant code relies on the opaque setting, but adds features.
jpayne@69 169 */
jpayne@69 170 #ifndef NCURSES_REENTRANT
jpayne@69 171 #define NCURSES_REENTRANT 0
jpayne@69 172 #endif
jpayne@69 173
jpayne@69 174 /*
jpayne@69 175 * KEY_RESIZE is an extended feature that relies upon the SIGWINCH handler
jpayne@69 176 * in ncurses.
jpayne@69 177 */
jpayne@69 178 #if 1
jpayne@69 179 #ifndef NCURSES_SIGWINCH
jpayne@69 180 #define NCURSES_SIGWINCH 1
jpayne@69 181 #endif
jpayne@69 182 #else
jpayne@69 183 #undef NCURSES_SIGWINCH
jpayne@69 184 #define NCURSES_SIGWINCH 0
jpayne@69 185 #endif
jpayne@69 186
jpayne@69 187 /*
jpayne@69 188 * In certain environments, we must work around linker problems for data
jpayne@69 189 */
jpayne@69 190 #undef NCURSES_BROKEN_LINKER
jpayne@69 191 #if 0
jpayne@69 192 #define NCURSES_BROKEN_LINKER 1
jpayne@69 193 #endif
jpayne@69 194
jpayne@69 195 /*
jpayne@69 196 * Control whether bindings for interop support are added.
jpayne@69 197 */
jpayne@69 198 #undef NCURSES_INTEROP_FUNCS
jpayne@69 199 #define NCURSES_INTEROP_FUNCS 1
jpayne@69 200
jpayne@69 201 /*
jpayne@69 202 * The internal type used for window dimensions.
jpayne@69 203 */
jpayne@69 204 #undef NCURSES_SIZE_T
jpayne@69 205 #define NCURSES_SIZE_T short
jpayne@69 206
jpayne@69 207 /*
jpayne@69 208 * Control whether tparm() supports varargs or fixed-parameter list.
jpayne@69 209 */
jpayne@69 210 #undef NCURSES_TPARM_VARARGS
jpayne@69 211 #define NCURSES_TPARM_VARARGS 1
jpayne@69 212
jpayne@69 213 /*
jpayne@69 214 * Control type used for tparm's arguments. While X/Open equates long and
jpayne@69 215 * char* values, this is not always workable for 64-bit platforms.
jpayne@69 216 */
jpayne@69 217 #undef NCURSES_TPARM_ARG
jpayne@69 218 #define NCURSES_TPARM_ARG intptr_t
jpayne@69 219
jpayne@69 220 /*
jpayne@69 221 * Control whether ncurses uses wcwidth() for checking width of line-drawing
jpayne@69 222 * characters.
jpayne@69 223 */
jpayne@69 224 #undef NCURSES_WCWIDTH_GRAPHICS
jpayne@69 225 #define NCURSES_WCWIDTH_GRAPHICS 1
jpayne@69 226
jpayne@69 227 /*
jpayne@69 228 * NCURSES_CH_T is used in building the library, but not used otherwise in
jpayne@69 229 * this header file, since that would make the normal/wide-character versions
jpayne@69 230 * of the header incompatible.
jpayne@69 231 */
jpayne@69 232 #undef NCURSES_CH_T
jpayne@69 233 #define NCURSES_CH_T cchar_t
jpayne@69 234
jpayne@69 235 #if 1 && defined(_LP64)
jpayne@69 236 typedef unsigned chtype;
jpayne@69 237 typedef unsigned mmask_t;
jpayne@69 238 #else
jpayne@69 239 typedef uint32_t chtype;
jpayne@69 240 typedef uint32_t mmask_t;
jpayne@69 241 #endif
jpayne@69 242
jpayne@69 243 /*
jpayne@69 244 * We need FILE, etc. Include this before checking any feature symbols.
jpayne@69 245 */
jpayne@69 246 #include <stdio.h>
jpayne@69 247
jpayne@69 248 /*
jpayne@69 249 * With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
jpayne@69 250 * conflicting) when _XOPEN_SOURCE is 500 or greater. If NCURSES_WIDECHAR is
jpayne@69 251 * not already defined, e.g., if the platform relies upon nonstandard feature
jpayne@69 252 * test macros, define it at this point if the standard feature test macros
jpayne@69 253 * indicate that it should be defined.
jpayne@69 254 */
jpayne@69 255 #ifndef NCURSES_WIDECHAR
jpayne@69 256 #if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
jpayne@69 257 #define NCURSES_WIDECHAR 1
jpayne@69 258 #else
jpayne@69 259 #define NCURSES_WIDECHAR 0
jpayne@69 260 #endif
jpayne@69 261 #endif /* NCURSES_WIDECHAR */
jpayne@69 262
jpayne@69 263 #include <stdarg.h> /* we need va_list */
jpayne@69 264 #if NCURSES_WIDECHAR
jpayne@69 265 #include <stddef.h> /* we want wchar_t */
jpayne@69 266 #endif
jpayne@69 267
jpayne@69 268 /* X/Open and SVr4 specify that curses implements 'bool'. However, C++ may also
jpayne@69 269 * implement it. If so, we must use the C++ compiler's type to avoid conflict
jpayne@69 270 * with other interfaces.
jpayne@69 271 *
jpayne@69 272 * A further complication is that <stdbool.h> may declare 'bool' to be a
jpayne@69 273 * different type, such as an enum which is not necessarily compatible with
jpayne@69 274 * C++. If we have <stdbool.h>, make 'bool' a macro, so users may #undef it.
jpayne@69 275 * Otherwise, let it remain a typedef to avoid conflicts with other #define's.
jpayne@69 276 * In either case, make a typedef for NCURSES_BOOL which can be used if needed
jpayne@69 277 * from either C or C++.
jpayne@69 278 */
jpayne@69 279
jpayne@69 280 #undef TRUE
jpayne@69 281 #define TRUE 1
jpayne@69 282
jpayne@69 283 #undef FALSE
jpayne@69 284 #define FALSE 0
jpayne@69 285
jpayne@69 286 typedef unsigned char NCURSES_BOOL;
jpayne@69 287
jpayne@69 288 #if defined(__cplusplus) /* __cplusplus, etc. */
jpayne@69 289
jpayne@69 290 /* use the C++ compiler's bool type */
jpayne@69 291 #define NCURSES_BOOL bool
jpayne@69 292
jpayne@69 293 #else /* c89, c99, etc. */
jpayne@69 294
jpayne@69 295 #if NCURSES_ENABLE_STDBOOL_H
jpayne@69 296 #include <stdbool.h>
jpayne@69 297 /* use whatever the C compiler decides bool really is */
jpayne@69 298 #define NCURSES_BOOL bool
jpayne@69 299 #else
jpayne@69 300 /* there is no predefined bool - use our own */
jpayne@69 301 #undef bool
jpayne@69 302 #define bool NCURSES_BOOL
jpayne@69 303 #endif
jpayne@69 304
jpayne@69 305 #endif /* !__cplusplus, etc. */
jpayne@69 306
jpayne@69 307 #ifdef __cplusplus
jpayne@69 308 extern "C" {
jpayne@69 309 #define NCURSES_CAST(type,value) static_cast<type>(value)
jpayne@69 310 #else
jpayne@69 311 #define NCURSES_CAST(type,value) (type)(value)
jpayne@69 312 #endif
jpayne@69 313
jpayne@69 314 #define NCURSES_OK_ADDR(p) (0 != NCURSES_CAST(const void *, (p)))
jpayne@69 315
jpayne@69 316 /*
jpayne@69 317 * X/Open attributes. In the ncurses implementation, they are identical to the
jpayne@69 318 * A_ attributes.
jpayne@69 319 */
jpayne@69 320 #define WA_ATTRIBUTES A_ATTRIBUTES
jpayne@69 321 #define WA_NORMAL A_NORMAL
jpayne@69 322 #define WA_STANDOUT A_STANDOUT
jpayne@69 323 #define WA_UNDERLINE A_UNDERLINE
jpayne@69 324 #define WA_REVERSE A_REVERSE
jpayne@69 325 #define WA_BLINK A_BLINK
jpayne@69 326 #define WA_DIM A_DIM
jpayne@69 327 #define WA_BOLD A_BOLD
jpayne@69 328 #define WA_ALTCHARSET A_ALTCHARSET
jpayne@69 329 #define WA_INVIS A_INVIS
jpayne@69 330 #define WA_PROTECT A_PROTECT
jpayne@69 331 #define WA_HORIZONTAL A_HORIZONTAL
jpayne@69 332 #define WA_LEFT A_LEFT
jpayne@69 333 #define WA_LOW A_LOW
jpayne@69 334 #define WA_RIGHT A_RIGHT
jpayne@69 335 #define WA_TOP A_TOP
jpayne@69 336 #define WA_VERTICAL A_VERTICAL
jpayne@69 337
jpayne@69 338 #if 1
jpayne@69 339 #define WA_ITALIC A_ITALIC /* ncurses extension */
jpayne@69 340 #endif
jpayne@69 341
jpayne@69 342 /* colors */
jpayne@69 343 #define COLOR_BLACK 0
jpayne@69 344 #define COLOR_RED 1
jpayne@69 345 #define COLOR_GREEN 2
jpayne@69 346 #define COLOR_YELLOW 3
jpayne@69 347 #define COLOR_BLUE 4
jpayne@69 348 #define COLOR_MAGENTA 5
jpayne@69 349 #define COLOR_CYAN 6
jpayne@69 350 #define COLOR_WHITE 7
jpayne@69 351
jpayne@69 352 /* line graphics */
jpayne@69 353
jpayne@69 354 #if 0 || NCURSES_REENTRANT
jpayne@69 355 NCURSES_WRAPPED_VAR(chtype*, acs_map);
jpayne@69 356 #define acs_map NCURSES_PUBLIC_VAR(acs_map())
jpayne@69 357 #else
jpayne@69 358 extern NCURSES_EXPORT_VAR(chtype) acs_map[];
jpayne@69 359 #endif
jpayne@69 360
jpayne@69 361 #define NCURSES_ACS(c) (acs_map[NCURSES_CAST(unsigned char,(c))])
jpayne@69 362
jpayne@69 363 /* VT100 symbols begin here */
jpayne@69 364 #define ACS_ULCORNER NCURSES_ACS('l') /* upper left corner */
jpayne@69 365 #define ACS_LLCORNER NCURSES_ACS('m') /* lower left corner */
jpayne@69 366 #define ACS_URCORNER NCURSES_ACS('k') /* upper right corner */
jpayne@69 367 #define ACS_LRCORNER NCURSES_ACS('j') /* lower right corner */
jpayne@69 368 #define ACS_LTEE NCURSES_ACS('t') /* tee pointing right */
jpayne@69 369 #define ACS_RTEE NCURSES_ACS('u') /* tee pointing left */
jpayne@69 370 #define ACS_BTEE NCURSES_ACS('v') /* tee pointing up */
jpayne@69 371 #define ACS_TTEE NCURSES_ACS('w') /* tee pointing down */
jpayne@69 372 #define ACS_HLINE NCURSES_ACS('q') /* horizontal line */
jpayne@69 373 #define ACS_VLINE NCURSES_ACS('x') /* vertical line */
jpayne@69 374 #define ACS_PLUS NCURSES_ACS('n') /* large plus or crossover */
jpayne@69 375 #define ACS_S1 NCURSES_ACS('o') /* scan line 1 */
jpayne@69 376 #define ACS_S9 NCURSES_ACS('s') /* scan line 9 */
jpayne@69 377 #define ACS_DIAMOND NCURSES_ACS('`') /* diamond */
jpayne@69 378 #define ACS_CKBOARD NCURSES_ACS('a') /* checker board (stipple) */
jpayne@69 379 #define ACS_DEGREE NCURSES_ACS('f') /* degree symbol */
jpayne@69 380 #define ACS_PLMINUS NCURSES_ACS('g') /* plus/minus */
jpayne@69 381 #define ACS_BULLET NCURSES_ACS('~') /* bullet */
jpayne@69 382 /* Teletype 5410v1 symbols begin here */
jpayne@69 383 #define ACS_LARROW NCURSES_ACS(',') /* arrow pointing left */
jpayne@69 384 #define ACS_RARROW NCURSES_ACS('+') /* arrow pointing right */
jpayne@69 385 #define ACS_DARROW NCURSES_ACS('.') /* arrow pointing down */
jpayne@69 386 #define ACS_UARROW NCURSES_ACS('-') /* arrow pointing up */
jpayne@69 387 #define ACS_BOARD NCURSES_ACS('h') /* board of squares */
jpayne@69 388 #define ACS_LANTERN NCURSES_ACS('i') /* lantern symbol */
jpayne@69 389 #define ACS_BLOCK NCURSES_ACS('0') /* solid square block */
jpayne@69 390 /*
jpayne@69 391 * These aren't documented, but a lot of System Vs have them anyway
jpayne@69 392 * (you can spot pprryyzz{{||}} in a lot of AT&T terminfo strings).
jpayne@69 393 * The ACS_names may not match AT&T's, our source didn't know them.
jpayne@69 394 */
jpayne@69 395 #define ACS_S3 NCURSES_ACS('p') /* scan line 3 */
jpayne@69 396 #define ACS_S7 NCURSES_ACS('r') /* scan line 7 */
jpayne@69 397 #define ACS_LEQUAL NCURSES_ACS('y') /* less/equal */
jpayne@69 398 #define ACS_GEQUAL NCURSES_ACS('z') /* greater/equal */
jpayne@69 399 #define ACS_PI NCURSES_ACS('{') /* Pi */
jpayne@69 400 #define ACS_NEQUAL NCURSES_ACS('|') /* not equal */
jpayne@69 401 #define ACS_STERLING NCURSES_ACS('}') /* UK pound sign */
jpayne@69 402
jpayne@69 403 /*
jpayne@69 404 * Line drawing ACS names are of the form ACS_trbl, where t is the top, r
jpayne@69 405 * is the right, b is the bottom, and l is the left. t, r, b, and l might
jpayne@69 406 * be B (blank), S (single), D (double), or T (thick). The subset defined
jpayne@69 407 * here only uses B and S.
jpayne@69 408 */
jpayne@69 409 #define ACS_BSSB ACS_ULCORNER
jpayne@69 410 #define ACS_SSBB ACS_LLCORNER
jpayne@69 411 #define ACS_BBSS ACS_URCORNER
jpayne@69 412 #define ACS_SBBS ACS_LRCORNER
jpayne@69 413 #define ACS_SBSS ACS_RTEE
jpayne@69 414 #define ACS_SSSB ACS_LTEE
jpayne@69 415 #define ACS_SSBS ACS_BTEE
jpayne@69 416 #define ACS_BSSS ACS_TTEE
jpayne@69 417 #define ACS_BSBS ACS_HLINE
jpayne@69 418 #define ACS_SBSB ACS_VLINE
jpayne@69 419 #define ACS_SSSS ACS_PLUS
jpayne@69 420
jpayne@69 421 #undef ERR
jpayne@69 422 #define ERR (-1)
jpayne@69 423
jpayne@69 424 #undef OK
jpayne@69 425 #define OK (0)
jpayne@69 426
jpayne@69 427 /* values for the _flags member */
jpayne@69 428 #define _SUBWIN 0x01 /* is this a sub-window? */
jpayne@69 429 #define _ENDLINE 0x02 /* is the window flush right? */
jpayne@69 430 #define _FULLWIN 0x04 /* is the window full-screen? */
jpayne@69 431 #define _SCROLLWIN 0x08 /* bottom edge is at screen bottom? */
jpayne@69 432 #define _ISPAD 0x10 /* is this window a pad? */
jpayne@69 433 #define _HASMOVED 0x20 /* has cursor moved since last refresh? */
jpayne@69 434 #define _WRAPPED 0x40 /* cursor was just wrappped */
jpayne@69 435
jpayne@69 436 /*
jpayne@69 437 * this value is used in the firstchar and lastchar fields to mark
jpayne@69 438 * unchanged lines
jpayne@69 439 */
jpayne@69 440 #define _NOCHANGE -1
jpayne@69 441
jpayne@69 442 /*
jpayne@69 443 * this value is used in the oldindex field to mark lines created by insertions
jpayne@69 444 * and scrolls.
jpayne@69 445 */
jpayne@69 446 #define _NEWINDEX -1
jpayne@69 447
jpayne@69 448 #ifdef NCURSES_INTERNALS
jpayne@69 449 #undef SCREEN
jpayne@69 450 #define SCREEN struct screen
jpayne@69 451 SCREEN;
jpayne@69 452 #else
jpayne@69 453 typedef struct screen SCREEN;
jpayne@69 454 #endif
jpayne@69 455
jpayne@69 456 typedef struct _win_st WINDOW;
jpayne@69 457
jpayne@69 458 typedef chtype attr_t; /* ...must be at least as wide as chtype */
jpayne@69 459
jpayne@69 460 #if NCURSES_WIDECHAR
jpayne@69 461
jpayne@69 462 #if 0
jpayne@69 463 #ifdef mblen /* libutf8.h defines it w/o undefining first */
jpayne@69 464 #undef mblen
jpayne@69 465 #endif
jpayne@69 466 #include <libutf8.h>
jpayne@69 467 #endif
jpayne@69 468
jpayne@69 469 #if 1
jpayne@69 470 #include <wchar.h> /* ...to get mbstate_t, etc. */
jpayne@69 471 #endif
jpayne@69 472
jpayne@69 473 #if 0
jpayne@69 474 typedef unsigned short wchar_t1;
jpayne@69 475 #endif
jpayne@69 476
jpayne@69 477 #if 0
jpayne@69 478 typedef unsigned int wint_t1;
jpayne@69 479 #endif
jpayne@69 480
jpayne@69 481 /*
jpayne@69 482 * cchar_t stores an array of CCHARW_MAX wide characters. The first is
jpayne@69 483 * normally a spacing character. The others are non-spacing. If those
jpayne@69 484 * (spacing and nonspacing) do not fill the array, a null L'\0' follows.
jpayne@69 485 * Otherwise, a null is assumed to follow when extracting via getcchar().
jpayne@69 486 */
jpayne@69 487 #define CCHARW_MAX 5
jpayne@69 488 typedef struct
jpayne@69 489 {
jpayne@69 490 attr_t attr;
jpayne@69 491 wchar_t chars[CCHARW_MAX];
jpayne@69 492 #if 1
jpayne@69 493 #undef NCURSES_EXT_COLORS
jpayne@69 494 #define NCURSES_EXT_COLORS 20240427
jpayne@69 495 int ext_color; /* color pair, must be more than 16-bits */
jpayne@69 496 #endif
jpayne@69 497 }
jpayne@69 498 cchar_t;
jpayne@69 499
jpayne@69 500 #endif /* NCURSES_WIDECHAR */
jpayne@69 501
jpayne@69 502 #if !NCURSES_OPAQUE
jpayne@69 503 struct ldat;
jpayne@69 504
jpayne@69 505 struct _win_st
jpayne@69 506 {
jpayne@69 507 NCURSES_SIZE_T _cury, _curx; /* current cursor position */
jpayne@69 508
jpayne@69 509 /* window location and size */
jpayne@69 510 NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
jpayne@69 511 NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */
jpayne@69 512
jpayne@69 513 short _flags; /* window state flags */
jpayne@69 514
jpayne@69 515 /* attribute tracking */
jpayne@69 516 attr_t _attrs; /* current attribute for non-space character */
jpayne@69 517 chtype _bkgd; /* current background char/attribute pair */
jpayne@69 518
jpayne@69 519 /* option values set by user */
jpayne@69 520 bool _notimeout; /* no time out on function-key entry? */
jpayne@69 521 bool _clear; /* consider all data in the window invalid? */
jpayne@69 522 bool _leaveok; /* OK to not reset cursor on exit? */
jpayne@69 523 bool _scroll; /* OK to scroll this window? */
jpayne@69 524 bool _idlok; /* OK to use insert/delete line? */
jpayne@69 525 bool _idcok; /* OK to use insert/delete char? */
jpayne@69 526 bool _immed; /* window in immed mode? (not yet used) */
jpayne@69 527 bool _sync; /* window in sync mode? */
jpayne@69 528 bool _use_keypad; /* process function keys into KEY_ symbols? */
jpayne@69 529 int _delay; /* 0 = nodelay, <0 = blocking, >0 = delay */
jpayne@69 530
jpayne@69 531 struct ldat *_line; /* the actual line data */
jpayne@69 532
jpayne@69 533 /* global screen state */
jpayne@69 534 NCURSES_SIZE_T _regtop; /* top line of scrolling region */
jpayne@69 535 NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */
jpayne@69 536
jpayne@69 537 /* these are used only if this is a sub-window */
jpayne@69 538 int _parx; /* x coordinate of this window in parent */
jpayne@69 539 int _pary; /* y coordinate of this window in parent */
jpayne@69 540 WINDOW *_parent; /* pointer to parent if a sub-window */
jpayne@69 541
jpayne@69 542 /* these are used only if this is a pad */
jpayne@69 543 struct pdat
jpayne@69 544 {
jpayne@69 545 NCURSES_SIZE_T _pad_y, _pad_x;
jpayne@69 546 NCURSES_SIZE_T _pad_top, _pad_left;
jpayne@69 547 NCURSES_SIZE_T _pad_bottom, _pad_right;
jpayne@69 548 } _pad;
jpayne@69 549
jpayne@69 550 NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
jpayne@69 551
jpayne@69 552 #if NCURSES_WIDECHAR
jpayne@69 553 cchar_t _bkgrnd; /* current background char/attribute pair */
jpayne@69 554 #if 1
jpayne@69 555 int _color; /* current color-pair for non-space character */
jpayne@69 556 #endif
jpayne@69 557 #endif
jpayne@69 558 };
jpayne@69 559 #endif /* NCURSES_OPAQUE */
jpayne@69 560
jpayne@69 561 /*
jpayne@69 562 * GCC (and some other compilers) define '__attribute__'; we're using this
jpayne@69 563 * macro to alert the compiler to flag inconsistencies in printf/scanf-like
jpayne@69 564 * function calls. Just in case '__attribute__' isn't defined, make a dummy.
jpayne@69 565 * Old versions of G++ do not accept it anyway, at least not consistently with
jpayne@69 566 * GCC.
jpayne@69 567 */
jpayne@69 568 #if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__))
jpayne@69 569 #define __attribute__(p) /* nothing */
jpayne@69 570 #endif
jpayne@69 571
jpayne@69 572 /*
jpayne@69 573 * We cannot define these in ncurses_cfg.h, since they require parameters to be
jpayne@69 574 * passed (that is non-portable).
jpayne@69 575 */
jpayne@69 576 #ifndef GCC_PRINTFLIKE
jpayne@69 577 #ifndef printf
jpayne@69 578 #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
jpayne@69 579 #else
jpayne@69 580 #define GCC_PRINTFLIKE(fmt,var) /*nothing*/
jpayne@69 581 #endif
jpayne@69 582 #endif
jpayne@69 583
jpayne@69 584 #ifndef GCC_SCANFLIKE
jpayne@69 585 #ifndef scanf
jpayne@69 586 #define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
jpayne@69 587 #else
jpayne@69 588 #define GCC_SCANFLIKE(fmt,var) /*nothing*/
jpayne@69 589 #endif
jpayne@69 590 #endif
jpayne@69 591
jpayne@69 592 #ifndef GCC_NORETURN
jpayne@69 593 #define GCC_NORETURN /* nothing */
jpayne@69 594 #endif
jpayne@69 595
jpayne@69 596 #ifndef GCC_UNUSED
jpayne@69 597 #define GCC_UNUSED /* nothing */
jpayne@69 598 #endif
jpayne@69 599
jpayne@69 600 #undef GCC_DEPRECATED
jpayne@69 601 #if (__GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 >= 2)) && !defined(NCURSES_INTERNALS)
jpayne@69 602 #define GCC_DEPRECATED(msg) __attribute__((deprecated))
jpayne@69 603 #else
jpayne@69 604 #define GCC_DEPRECATED(msg) /* nothing */
jpayne@69 605 #endif
jpayne@69 606
jpayne@69 607 /*
jpayne@69 608 * Curses uses a helper function. Define our type for this to simplify
jpayne@69 609 * extending it for the sp-funcs feature.
jpayne@69 610 */
jpayne@69 611 typedef int (*NCURSES_OUTC)(int);
jpayne@69 612
jpayne@69 613 /*
jpayne@69 614 * Function prototypes. This is the complete X/Open Curses list of required
jpayne@69 615 * functions. Those marked `generated' will have sources generated from the
jpayne@69 616 * macro definitions later in this file, in order to satisfy XPG4.2
jpayne@69 617 * requirements.
jpayne@69 618 */
jpayne@69 619
jpayne@69 620 extern NCURSES_EXPORT(int) addch (const chtype); /* generated */
jpayne@69 621 extern NCURSES_EXPORT(int) addchnstr (const chtype *, int); /* generated */
jpayne@69 622 extern NCURSES_EXPORT(int) addchstr (const chtype *); /* generated */
jpayne@69 623 extern NCURSES_EXPORT(int) addnstr (const char *, int); /* generated */
jpayne@69 624 extern NCURSES_EXPORT(int) addstr (const char *); /* generated */
jpayne@69 625 extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T); /* generated */
jpayne@69 626 extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T); /* generated */
jpayne@69 627 extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T); /* generated */
jpayne@69 628 extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *); /* generated */
jpayne@69 629 extern NCURSES_EXPORT(int) attr_off (attr_t, void *); /* generated */
jpayne@69 630 extern NCURSES_EXPORT(int) attr_on (attr_t, void *); /* generated */
jpayne@69 631 extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *); /* generated */
jpayne@69 632 extern NCURSES_EXPORT(int) baudrate (void); /* implemented */
jpayne@69 633 extern NCURSES_EXPORT(int) beep (void); /* implemented */
jpayne@69 634 extern NCURSES_EXPORT(int) bkgd (chtype); /* generated */
jpayne@69 635 extern NCURSES_EXPORT(void) bkgdset (chtype); /* generated */
jpayne@69 636 extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); /* generated */
jpayne@69 637 extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype); /* generated */
jpayne@69 638 extern NCURSES_EXPORT(bool) can_change_color (void); /* implemented */
jpayne@69 639 extern NCURSES_EXPORT(int) cbreak (void); /* implemented */
jpayne@69 640 extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *); /* generated */
jpayne@69 641 extern NCURSES_EXPORT(int) clear (void); /* generated */
jpayne@69 642 extern NCURSES_EXPORT(int) clearok (WINDOW *,bool); /* implemented */
jpayne@69 643 extern NCURSES_EXPORT(int) clrtobot (void); /* generated */
jpayne@69 644 extern NCURSES_EXPORT(int) clrtoeol (void); /* generated */
jpayne@69 645 extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*); /* implemented */
jpayne@69 646 extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*); /* generated */
jpayne@69 647 extern NCURSES_EXPORT(int) COLOR_PAIR (int); /* generated */
jpayne@69 648 extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int); /* implemented */
jpayne@69 649 extern NCURSES_EXPORT(int) curs_set (int); /* implemented */
jpayne@69 650 extern NCURSES_EXPORT(int) def_prog_mode (void); /* implemented */
jpayne@69 651 extern NCURSES_EXPORT(int) def_shell_mode (void); /* implemented */
jpayne@69 652 extern NCURSES_EXPORT(int) delay_output (int); /* implemented */
jpayne@69 653 extern NCURSES_EXPORT(int) delch (void); /* generated */
jpayne@69 654 extern NCURSES_EXPORT(void) delscreen (SCREEN *); /* implemented */
jpayne@69 655 extern NCURSES_EXPORT(int) delwin (WINDOW *); /* implemented */
jpayne@69 656 extern NCURSES_EXPORT(int) deleteln (void); /* generated */
jpayne@69 657 extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int); /* implemented */
jpayne@69 658 extern NCURSES_EXPORT(int) doupdate (void); /* implemented */
jpayne@69 659 extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *); /* implemented */
jpayne@69 660 extern NCURSES_EXPORT(int) echo (void); /* implemented */
jpayne@69 661 extern NCURSES_EXPORT(int) echochar (const chtype); /* generated */
jpayne@69 662 extern NCURSES_EXPORT(int) erase (void); /* generated */
jpayne@69 663 extern NCURSES_EXPORT(int) endwin (void); /* implemented */
jpayne@69 664 extern NCURSES_EXPORT(char) erasechar (void); /* implemented */
jpayne@69 665 extern NCURSES_EXPORT(void) filter (void); /* implemented */
jpayne@69 666 extern NCURSES_EXPORT(int) flash (void); /* implemented */