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 */
|
|