xref: /freebsd-src/contrib/ncurses/ncurses/term.priv.h (revision 21817992b3314c908ab50f0bb88d2ee750b9c4ac)
1*21817992SBaptiste Daroussin /****************************************************************************
2*21817992SBaptiste Daroussin  * Copyright 2021-2023,2024 Thomas E. Dickey                                *
3*21817992SBaptiste Daroussin  *                                                                          *
4*21817992SBaptiste Daroussin  * Permission is hereby granted, free of charge, to any person obtaining a  *
5*21817992SBaptiste Daroussin  * copy of this software and associated documentation files (the            *
6*21817992SBaptiste Daroussin  * "Software"), to deal in the Software without restriction, including      *
7*21817992SBaptiste Daroussin  * without limitation the rights to use, copy, modify, merge, publish,      *
8*21817992SBaptiste Daroussin  * distribute, distribute with modifications, sublicense, and/or sell       *
9*21817992SBaptiste Daroussin  * copies of the Software, and to permit persons to whom the Software is    *
10*21817992SBaptiste Daroussin  * furnished to do so, subject to the following conditions:                 *
11*21817992SBaptiste Daroussin  *                                                                          *
12*21817992SBaptiste Daroussin  * The above copyright notice and this permission notice shall be included  *
13*21817992SBaptiste Daroussin  * in all copies or substantial portions of the Software.                   *
14*21817992SBaptiste Daroussin  *                                                                          *
15*21817992SBaptiste Daroussin  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
16*21817992SBaptiste Daroussin  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
17*21817992SBaptiste Daroussin  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
18*21817992SBaptiste Daroussin  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
19*21817992SBaptiste Daroussin  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
20*21817992SBaptiste Daroussin  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
21*21817992SBaptiste Daroussin  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
22*21817992SBaptiste Daroussin  *                                                                          *
23*21817992SBaptiste Daroussin  * Except as contained in this notice, the name(s) of the above copyright   *
24*21817992SBaptiste Daroussin  * holders shall not be used in advertising or otherwise to promote the     *
25*21817992SBaptiste Daroussin  * sale, use or other dealings in this Software without prior written       *
26*21817992SBaptiste Daroussin  * authorization.                                                           *
27*21817992SBaptiste Daroussin  ****************************************************************************/
28*21817992SBaptiste Daroussin 
29*21817992SBaptiste Daroussin /*
30*21817992SBaptiste Daroussin  * $Id: term.priv.h,v 1.13 2024/03/02 20:43:06 tom Exp $
31*21817992SBaptiste Daroussin  *
32*21817992SBaptiste Daroussin  *	term.priv.h
33*21817992SBaptiste Daroussin  *
34*21817992SBaptiste Daroussin  *	Header file for terminfo library objects which are private to
35*21817992SBaptiste Daroussin  *	the library.
36*21817992SBaptiste Daroussin  */
37*21817992SBaptiste Daroussin 
38*21817992SBaptiste Daroussin #ifndef _TERM_PRIV_H
39*21817992SBaptiste Daroussin #define _TERM_PRIV_H 1
40*21817992SBaptiste Daroussin /* *INDENT-OFF* */
41*21817992SBaptiste Daroussin 
42*21817992SBaptiste Daroussin #ifdef __cplusplus
43*21817992SBaptiste Daroussin extern "C" {
44*21817992SBaptiste Daroussin #endif
45*21817992SBaptiste Daroussin 
46*21817992SBaptiste Daroussin #include <ncurses_cfg.h>
47*21817992SBaptiste Daroussin 
48*21817992SBaptiste Daroussin #ifndef __NCURSES_H
49*21817992SBaptiste Daroussin #include <curses.h>
50*21817992SBaptiste Daroussin #endif
51*21817992SBaptiste Daroussin 
52*21817992SBaptiste Daroussin #undef NCURSES_OPAQUE
53*21817992SBaptiste Daroussin #define NCURSES_INTERNALS 1
54*21817992SBaptiste Daroussin #define NCURSES_OPAQUE 0
55*21817992SBaptiste Daroussin 
56*21817992SBaptiste Daroussin #if HAVE_LIMITS_H
57*21817992SBaptiste Daroussin # include <limits.h>		/* PATH_MAX, MB_LEN_MAX, etc */
58*21817992SBaptiste Daroussin #elif HAVE_SYS_PARAM_H
59*21817992SBaptiste Daroussin # include <sys/param.h>
60*21817992SBaptiste Daroussin #endif
61*21817992SBaptiste Daroussin 
62*21817992SBaptiste Daroussin #include <signal.h>		/* sig_atomic_t */
63*21817992SBaptiste Daroussin #include <time.h>		/* time_t */
64*21817992SBaptiste Daroussin #include <term.h>		/* time_t */
65*21817992SBaptiste Daroussin 
66*21817992SBaptiste Daroussin #ifdef USE_PTHREADS
67*21817992SBaptiste Daroussin #if USE_REENTRANT
68*21817992SBaptiste Daroussin #include <pthread.h>
69*21817992SBaptiste Daroussin #endif
70*21817992SBaptiste Daroussin #endif
71*21817992SBaptiste Daroussin 
72*21817992SBaptiste Daroussin /*
73*21817992SBaptiste Daroussin  * If not properly configured to use the system's limits.h, we get gcc's
74*21817992SBaptiste Daroussin  * fallback for limits.h which sets MB_LEN_MAX to 1, which is never correct.
75*21817992SBaptiste Daroussin  */
76*21817992SBaptiste Daroussin #if !HAVE_CONSISTENT_MB_LEN_MAX
77*21817992SBaptiste Daroussin #undef MB_LEN_MAX
78*21817992SBaptiste Daroussin #endif
79*21817992SBaptiste Daroussin 
80*21817992SBaptiste Daroussin #ifndef MB_LEN_MAX
81*21817992SBaptiste Daroussin #define MB_LEN_MAX 16	/* should be >= MB_CUR_MAX, but that may be a function */
82*21817992SBaptiste Daroussin #endif
83*21817992SBaptiste Daroussin 
84*21817992SBaptiste Daroussin #ifndef PATH_MAX
85*21817992SBaptiste Daroussin # if defined(_POSIX_PATH_MAX)
86*21817992SBaptiste Daroussin #  define PATH_MAX _POSIX_PATH_MAX
87*21817992SBaptiste Daroussin # elif defined(MAXPATHLEN)
88*21817992SBaptiste Daroussin #  define PATH_MAX MAXPATHLEN
89*21817992SBaptiste Daroussin # else
90*21817992SBaptiste Daroussin #  define PATH_MAX 255	/* the Posix minimum path-size */
91*21817992SBaptiste Daroussin # endif
92*21817992SBaptiste Daroussin #endif
93*21817992SBaptiste Daroussin 
94*21817992SBaptiste Daroussin /*
95*21817992SBaptiste Daroussin  * State of tparm().
96*21817992SBaptiste Daroussin  */
97*21817992SBaptiste Daroussin #define STACKSIZE 20
98*21817992SBaptiste Daroussin 
99*21817992SBaptiste Daroussin typedef struct {
100*21817992SBaptiste Daroussin 	union {
101*21817992SBaptiste Daroussin 		int	num;
102*21817992SBaptiste Daroussin 		char *	str;
103*21817992SBaptiste Daroussin 	} data;
104*21817992SBaptiste Daroussin 	bool num_type;
105*21817992SBaptiste Daroussin } STACK_FRAME;
106*21817992SBaptiste Daroussin 
107*21817992SBaptiste Daroussin #define NUM_VARS 26
108*21817992SBaptiste Daroussin 
109*21817992SBaptiste Daroussin typedef struct {
110*21817992SBaptiste Daroussin 	const char *	tparam_base;
111*21817992SBaptiste Daroussin 
112*21817992SBaptiste Daroussin 	STACK_FRAME	stack[STACKSIZE];
113*21817992SBaptiste Daroussin 	int		stack_ptr;
114*21817992SBaptiste Daroussin 
115*21817992SBaptiste Daroussin 	char *		out_buff;
116*21817992SBaptiste Daroussin 	size_t		out_size;
117*21817992SBaptiste Daroussin 	size_t		out_used;
118*21817992SBaptiste Daroussin 
119*21817992SBaptiste Daroussin 	char *		fmt_buff;
120*21817992SBaptiste Daroussin 	size_t		fmt_size;
121*21817992SBaptiste Daroussin 
122*21817992SBaptiste Daroussin 	int		static_vars[NUM_VARS];
123*21817992SBaptiste Daroussin #ifdef TRACE
124*21817992SBaptiste Daroussin 	const char *	tname;
125*21817992SBaptiste Daroussin #endif
126*21817992SBaptiste Daroussin } TPARM_STATE;
127*21817992SBaptiste Daroussin 
128*21817992SBaptiste Daroussin typedef struct {
129*21817992SBaptiste Daroussin 	char *		text;
130*21817992SBaptiste Daroussin 	size_t		size;
131*21817992SBaptiste Daroussin } TRACEBUF;
132*21817992SBaptiste Daroussin 
133*21817992SBaptiste Daroussin typedef struct {
134*21817992SBaptiste Daroussin 	const char *	name;
135*21817992SBaptiste Daroussin 	char *		value;
136*21817992SBaptiste Daroussin } ITERATOR_VARS;
137*21817992SBaptiste Daroussin 
138*21817992SBaptiste Daroussin /*
139*21817992SBaptiste Daroussin  * Internals for term.h
140*21817992SBaptiste Daroussin  */
141*21817992SBaptiste Daroussin typedef struct term {			/* describe an actual terminal */
142*21817992SBaptiste Daroussin 	TERMTYPE	type;		/* terminal type description */
143*21817992SBaptiste Daroussin 	short		Filedes;	/* file description being written to */
144*21817992SBaptiste Daroussin 	TTY		Ottyb;		/* original state of the terminal */
145*21817992SBaptiste Daroussin 	TTY		Nttyb;		/* current state of the terminal */
146*21817992SBaptiste Daroussin 	int		_baudrate;	/* used to compute padding */
147*21817992SBaptiste Daroussin 	char *		_termname;	/* used for termname() */
148*21817992SBaptiste Daroussin 	TPARM_STATE	tparm_state;
149*21817992SBaptiste Daroussin #if NCURSES_EXT_COLORS
150*21817992SBaptiste Daroussin 	TERMTYPE2	type2;		/* extended terminal type description */
151*21817992SBaptiste Daroussin #endif
152*21817992SBaptiste Daroussin #undef TERMINAL
153*21817992SBaptiste Daroussin } TERMINAL;
154*21817992SBaptiste Daroussin 
155*21817992SBaptiste Daroussin /*
156*21817992SBaptiste Daroussin  * Internals for soft-keys
157*21817992SBaptiste Daroussin  */
158*21817992SBaptiste Daroussin typedef	struct {
159*21817992SBaptiste Daroussin 	WINDOW *	win;		/* the window used in the hook      */
160*21817992SBaptiste Daroussin 	int		line;		/* lines to take, < 0 => from bottom*/
161*21817992SBaptiste Daroussin 	int		(*hook)(WINDOW *, int); /* callback for user	    */
162*21817992SBaptiste Daroussin } ripoff_t;
163*21817992SBaptiste Daroussin 
164*21817992SBaptiste Daroussin /*
165*21817992SBaptiste Daroussin  * Internals for tgetent
166*21817992SBaptiste Daroussin  */
167*21817992SBaptiste Daroussin typedef struct {
168*21817992SBaptiste Daroussin 	long		sequence;
169*21817992SBaptiste Daroussin 	bool		last_used;
170*21817992SBaptiste Daroussin 	char *		fix_sgr0;	/* this holds the filtered sgr0 string */
171*21817992SBaptiste Daroussin 	char *		last_bufp;	/* help with fix_sgr0 leak */
172*21817992SBaptiste Daroussin 	TERMINAL *	last_term;
173*21817992SBaptiste Daroussin } TGETENT_CACHE;
174*21817992SBaptiste Daroussin 
175*21817992SBaptiste Daroussin #define TGETENT_MAX 4
176*21817992SBaptiste Daroussin 
177*21817992SBaptiste Daroussin #include <term_entry.h>		/* dbdLAST */
178*21817992SBaptiste Daroussin 
179*21817992SBaptiste Daroussin #ifdef USE_TERM_DRIVER
180*21817992SBaptiste Daroussin struct DriverTCB; /* Terminal Control Block forward declaration */
181*21817992SBaptiste Daroussin #endif
182*21817992SBaptiste Daroussin 
183*21817992SBaptiste Daroussin /*
184*21817992SBaptiste Daroussin  * Global data which is not specific to a screen.
185*21817992SBaptiste Daroussin  */
186*21817992SBaptiste Daroussin typedef struct {
187*21817992SBaptiste Daroussin 	SIG_ATOMIC_T	have_sigtstp;
188*21817992SBaptiste Daroussin 	SIG_ATOMIC_T	have_sigwinch;
189*21817992SBaptiste Daroussin 	SIG_ATOMIC_T	cleanup_nested;
190*21817992SBaptiste Daroussin 
191*21817992SBaptiste Daroussin 	bool		init_signals;
192*21817992SBaptiste Daroussin 	bool		init_screen;
193*21817992SBaptiste Daroussin 
194*21817992SBaptiste Daroussin 	char *		comp_sourcename;
195*21817992SBaptiste Daroussin 	char *		comp_termtype;
196*21817992SBaptiste Daroussin 
197*21817992SBaptiste Daroussin 	bool		have_tic_directory;
198*21817992SBaptiste Daroussin 	bool		keep_tic_directory;
199*21817992SBaptiste Daroussin 	const char *	tic_directory;
200*21817992SBaptiste Daroussin 
201*21817992SBaptiste Daroussin 	char *		dbi_list;
202*21817992SBaptiste Daroussin 	int		dbi_size;
203*21817992SBaptiste Daroussin 
204*21817992SBaptiste Daroussin 	char *		first_name;
205*21817992SBaptiste Daroussin 	char **		keyname_table;
206*21817992SBaptiste Daroussin 	int		init_keyname;
207*21817992SBaptiste Daroussin 
208*21817992SBaptiste Daroussin 	int		slk_format;
209*21817992SBaptiste Daroussin 
210*21817992SBaptiste Daroussin 	int		getstr_limit;	/* getstr_limit based on POSIX LINE_MAX */
211*21817992SBaptiste Daroussin 
212*21817992SBaptiste Daroussin 	char *		safeprint_buf;
213*21817992SBaptiste Daroussin 	size_t		safeprint_used;
214*21817992SBaptiste Daroussin 
215*21817992SBaptiste Daroussin 	TGETENT_CACHE	tgetent_cache[TGETENT_MAX];
216*21817992SBaptiste Daroussin 	int		tgetent_index;
217*21817992SBaptiste Daroussin 	long		tgetent_sequence;
218*21817992SBaptiste Daroussin 	int		terminal_count;
219*21817992SBaptiste Daroussin 
220*21817992SBaptiste Daroussin 	char *		dbd_blob;	/* string-heap for dbd_list[] */
221*21817992SBaptiste Daroussin 	char **		dbd_list;	/* distinct places to look for data */
222*21817992SBaptiste Daroussin 	int		dbd_size;	/* length of dbd_list[] */
223*21817992SBaptiste Daroussin 	time_t		dbd_time;	/* cache last updated */
224*21817992SBaptiste Daroussin 	ITERATOR_VARS	dbd_vars[dbdLAST];
225*21817992SBaptiste Daroussin 
226*21817992SBaptiste Daroussin #if HAVE_TSEARCH
227*21817992SBaptiste Daroussin 	void *		cached_tparm;
228*21817992SBaptiste Daroussin 	int		count_tparm;
229*21817992SBaptiste Daroussin #endif /* HAVE_TSEARCH */
230*21817992SBaptiste Daroussin 
231*21817992SBaptiste Daroussin #ifdef USE_TERM_DRIVER
232*21817992SBaptiste Daroussin 	int		(*term_driver)(struct DriverTCB*, const char*, int*);
233*21817992SBaptiste Daroussin #endif
234*21817992SBaptiste Daroussin 
235*21817992SBaptiste Daroussin #define WINDOWLIST struct _win_list
236*21817992SBaptiste Daroussin 
237*21817992SBaptiste Daroussin #ifndef USE_SP_WINDOWLIST
238*21817992SBaptiste Daroussin 	WINDOWLIST *	_nc_windowlist;
239*21817992SBaptiste Daroussin #define WindowList(sp)	_nc_globals._nc_windowlist
240*21817992SBaptiste Daroussin #endif
241*21817992SBaptiste Daroussin 
242*21817992SBaptiste Daroussin #if USE_HOME_TERMINFO
243*21817992SBaptiste Daroussin 	char *		home_terminfo;
244*21817992SBaptiste Daroussin #endif
245*21817992SBaptiste Daroussin 
246*21817992SBaptiste Daroussin #if !USE_SAFE_SPRINTF
247*21817992SBaptiste Daroussin 	int		safeprint_cols;
248*21817992SBaptiste Daroussin 	int		safeprint_rows;
249*21817992SBaptiste Daroussin #endif
250*21817992SBaptiste Daroussin 
251*21817992SBaptiste Daroussin #ifdef USE_PTHREADS
252*21817992SBaptiste Daroussin 	pthread_mutex_t	mutex_curses;
253*21817992SBaptiste Daroussin 	pthread_mutex_t	mutex_prescreen;
254*21817992SBaptiste Daroussin 	pthread_mutex_t	mutex_screen;
255*21817992SBaptiste Daroussin 	pthread_mutex_t	mutex_update;
256*21817992SBaptiste Daroussin 	pthread_mutex_t	mutex_tst_tracef;
257*21817992SBaptiste Daroussin 	pthread_mutex_t	mutex_tracef;
258*21817992SBaptiste Daroussin 	int		nested_tracef;
259*21817992SBaptiste Daroussin 	int		use_pthreads;
260*21817992SBaptiste Daroussin #define _nc_use_pthreads	_nc_globals.use_pthreads
261*21817992SBaptiste Daroussin #if USE_PTHREADS_EINTR
262*21817992SBaptiste Daroussin 	pthread_t	read_thread;	/* The reading thread */
263*21817992SBaptiste Daroussin #endif
264*21817992SBaptiste Daroussin #endif
265*21817992SBaptiste Daroussin #if USE_WIDEC_SUPPORT
266*21817992SBaptiste Daroussin 	char		key_name[MB_LEN_MAX + 1];
267*21817992SBaptiste Daroussin #endif
268*21817992SBaptiste Daroussin 
269*21817992SBaptiste Daroussin #ifdef TRACE
270*21817992SBaptiste Daroussin 	bool		trace_opened;
271*21817992SBaptiste Daroussin 	int		trace_level;
272*21817992SBaptiste Daroussin 	FILE *		trace_fp;
273*21817992SBaptiste Daroussin 	int		trace_fd;
274*21817992SBaptiste Daroussin 
275*21817992SBaptiste Daroussin 	char *		tracearg_buf;
276*21817992SBaptiste Daroussin 	size_t		tracearg_used;
277*21817992SBaptiste Daroussin 
278*21817992SBaptiste Daroussin 	TRACEBUF *	tracebuf_ptr;
279*21817992SBaptiste Daroussin 	size_t		tracebuf_used;
280*21817992SBaptiste Daroussin 
281*21817992SBaptiste Daroussin 	char		tracechr_buf[40];
282*21817992SBaptiste Daroussin 
283*21817992SBaptiste Daroussin 	char *		tracedmp_buf;
284*21817992SBaptiste Daroussin 	size_t		tracedmp_used;
285*21817992SBaptiste Daroussin 
286*21817992SBaptiste Daroussin 	unsigned char *	tracetry_buf;
287*21817992SBaptiste Daroussin 	size_t		tracetry_used;
288*21817992SBaptiste Daroussin 
289*21817992SBaptiste Daroussin 	char		traceatr_color_buf[2][80];
290*21817992SBaptiste Daroussin 	int		traceatr_color_sel;
291*21817992SBaptiste Daroussin 	int		traceatr_color_last;
292*21817992SBaptiste Daroussin #if !defined(USE_PTHREADS) && USE_REENTRANT
293*21817992SBaptiste Daroussin 	int		nested_tracef;
294*21817992SBaptiste Daroussin #endif
295*21817992SBaptiste Daroussin #endif	/* TRACE */
296*21817992SBaptiste Daroussin 
297*21817992SBaptiste Daroussin #if NO_LEAKS
298*21817992SBaptiste Daroussin 	bool		leak_checking;
299*21817992SBaptiste Daroussin #endif
300*21817992SBaptiste Daroussin } NCURSES_GLOBALS;
301*21817992SBaptiste Daroussin 
302*21817992SBaptiste Daroussin extern NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals;
303*21817992SBaptiste Daroussin 
304*21817992SBaptiste Daroussin #define N_RIPS 5
305*21817992SBaptiste Daroussin 
306*21817992SBaptiste Daroussin #ifdef USE_PTHREADS
307*21817992SBaptiste Daroussin typedef struct _prescreen_list {
308*21817992SBaptiste Daroussin 	struct _prescreen_list *next;
309*21817992SBaptiste Daroussin 	pthread_t	id;
310*21817992SBaptiste Daroussin 	struct screen *	sp;
311*21817992SBaptiste Daroussin } PRESCREEN_LIST;
312*21817992SBaptiste Daroussin #endif
313*21817992SBaptiste Daroussin 
314*21817992SBaptiste Daroussin /*
315*21817992SBaptiste Daroussin  * Global data which can be swept up into a SCREEN when one is created.
316*21817992SBaptiste Daroussin  * It may be modified before the next SCREEN is created.
317*21817992SBaptiste Daroussin  */
318*21817992SBaptiste Daroussin typedef struct {
319*21817992SBaptiste Daroussin #ifdef USE_PTHREADS
320*21817992SBaptiste Daroussin 	PRESCREEN_LIST *allocated;
321*21817992SBaptiste Daroussin #else
322*21817992SBaptiste Daroussin 	struct screen * allocated;
323*21817992SBaptiste Daroussin #endif
324*21817992SBaptiste Daroussin 	bool		use_env;
325*21817992SBaptiste Daroussin 	bool		filter_mode;
326*21817992SBaptiste Daroussin 	attr_t		previous_attr;
327*21817992SBaptiste Daroussin 	TPARM_STATE	tparm_state;
328*21817992SBaptiste Daroussin 	TTY *		saved_tty;	/* savetty/resetty information	  */
329*21817992SBaptiste Daroussin 	bool		use_tioctl;
330*21817992SBaptiste Daroussin 	NCURSES_SP_OUTC	_outch;		/* output handler if not putc */
331*21817992SBaptiste Daroussin #ifndef USE_SP_RIPOFF
332*21817992SBaptiste Daroussin 	ripoff_t	rippedoff[N_RIPS];
333*21817992SBaptiste Daroussin 	ripoff_t *	rsp;
334*21817992SBaptiste Daroussin #endif
335*21817992SBaptiste Daroussin #if NCURSES_NO_PADDING
336*21817992SBaptiste Daroussin 	bool		_no_padding;	/* flag to set if padding disabled */
337*21817992SBaptiste Daroussin #endif
338*21817992SBaptiste Daroussin #if BROKEN_LINKER || USE_REENTRANT
339*21817992SBaptiste Daroussin 	chtype *	real_acs_map;
340*21817992SBaptiste Daroussin 	int		_LINES;
341*21817992SBaptiste Daroussin 	int		_COLS;
342*21817992SBaptiste Daroussin 	int		_TABSIZE;
343*21817992SBaptiste Daroussin 	int		_ESCDELAY;
344*21817992SBaptiste Daroussin 	TERMINAL *	_cur_term;
345*21817992SBaptiste Daroussin #endif
346*21817992SBaptiste Daroussin #ifdef TRACE
347*21817992SBaptiste Daroussin #if BROKEN_LINKER || USE_REENTRANT
348*21817992SBaptiste Daroussin 	long		_outchars;
349*21817992SBaptiste Daroussin 	const char *	_tputs_trace;
350*21817992SBaptiste Daroussin #endif
351*21817992SBaptiste Daroussin #endif
352*21817992SBaptiste Daroussin } NCURSES_PRESCREEN;
353*21817992SBaptiste Daroussin 
354*21817992SBaptiste Daroussin extern NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen;
355*21817992SBaptiste Daroussin 
356*21817992SBaptiste Daroussin extern NCURSES_EXPORT(void) _nc_free_tparm(TERMINAL*);
357*21817992SBaptiste Daroussin 
358*21817992SBaptiste Daroussin #ifdef __cplusplus
359*21817992SBaptiste Daroussin }
360*21817992SBaptiste Daroussin #endif
361*21817992SBaptiste Daroussin 
362*21817992SBaptiste Daroussin /* *INDENT-ON* */
363*21817992SBaptiste Daroussin 
364*21817992SBaptiste Daroussin #endif /* _TERM_PRIV_H */
365