xref: /freebsd/contrib/ncurses/include/tic.h (revision 06bfebdedb0d353f1771adb65731f64461d9bd01)
10e3d5408SPeter Wemm /****************************************************************************
2*06bfebdeSXin LI  * Copyright (c) 1998-2007,2009 Free Software Foundation, Inc.              *
30e3d5408SPeter Wemm  *                                                                          *
40e3d5408SPeter Wemm  * Permission is hereby granted, free of charge, to any person obtaining a  *
50e3d5408SPeter Wemm  * copy of this software and associated documentation files (the            *
60e3d5408SPeter Wemm  * "Software"), to deal in the Software without restriction, including      *
70e3d5408SPeter Wemm  * without limitation the rights to use, copy, modify, merge, publish,      *
80e3d5408SPeter Wemm  * distribute, distribute with modifications, sublicense, and/or sell       *
90e3d5408SPeter Wemm  * copies of the Software, and to permit persons to whom the Software is    *
100e3d5408SPeter Wemm  * furnished to do so, subject to the following conditions:                 *
110e3d5408SPeter Wemm  *                                                                          *
120e3d5408SPeter Wemm  * The above copyright notice and this permission notice shall be included  *
130e3d5408SPeter Wemm  * in all copies or substantial portions of the Software.                   *
140e3d5408SPeter Wemm  *                                                                          *
150e3d5408SPeter Wemm  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
160e3d5408SPeter Wemm  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
170e3d5408SPeter Wemm  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
180e3d5408SPeter Wemm  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
190e3d5408SPeter Wemm  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
200e3d5408SPeter Wemm  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
210e3d5408SPeter Wemm  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
220e3d5408SPeter Wemm  *                                                                          *
230e3d5408SPeter Wemm  * Except as contained in this notice, the name(s) of the above copyright   *
240e3d5408SPeter Wemm  * holders shall not be used in advertising or otherwise to promote the     *
250e3d5408SPeter Wemm  * sale, use or other dealings in this Software without prior written       *
260e3d5408SPeter Wemm  * authorization.                                                           *
270e3d5408SPeter Wemm  ****************************************************************************/
280e3d5408SPeter Wemm 
290e3d5408SPeter Wemm /****************************************************************************
300e3d5408SPeter Wemm  *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
310e3d5408SPeter Wemm  *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
324a1a9510SRong-En Fan  *     and: Thomas E. Dickey 1996 on                                        *
330e3d5408SPeter Wemm  ****************************************************************************/
340e3d5408SPeter Wemm 
350e3d5408SPeter Wemm /*
36*06bfebdeSXin LI  * $Id: tic.h,v 1.65 2009/08/08 17:52:46 tom Exp $
370e3d5408SPeter Wemm  *	tic.h - Global variables and structures for the terminfo
380e3d5408SPeter Wemm  *			compiler.
390e3d5408SPeter Wemm  */
400e3d5408SPeter Wemm 
410e3d5408SPeter Wemm #ifndef __TIC_H
420e3d5408SPeter Wemm #define __TIC_H
430e3d5408SPeter Wemm 
440e3d5408SPeter Wemm #ifdef __cplusplus
450e3d5408SPeter Wemm extern "C" {
460e3d5408SPeter Wemm #endif
470e3d5408SPeter Wemm 
480e3d5408SPeter Wemm #include <curses.h>	/* for the _tracef() prototype, ERR/OK, bool defs */
490e3d5408SPeter Wemm 
500e3d5408SPeter Wemm /*
510e3d5408SPeter Wemm ** The format of compiled terminfo files is as follows:
520e3d5408SPeter Wemm **
530e3d5408SPeter Wemm **		Header (12 bytes), containing information given below
540e3d5408SPeter Wemm **		Names Section, containing the names of the terminal
550e3d5408SPeter Wemm **		Boolean Section, containing the values of all of the
560e3d5408SPeter Wemm **				boolean capabilities
570e3d5408SPeter Wemm **				A null byte may be inserted here to make
580e3d5408SPeter Wemm **				sure that the Number Section begins on an
590e3d5408SPeter Wemm **				even word boundary.
600e3d5408SPeter Wemm **		Number Section, containing the values of all of the numeric
610e3d5408SPeter Wemm **				capabilities, each as a short integer
620e3d5408SPeter Wemm **		String Section, containing short integer offsets into the
630e3d5408SPeter Wemm **				String Table, one per string capability
640e3d5408SPeter Wemm **		String Table, containing the actual characters of the string
650e3d5408SPeter Wemm **				capabilities.
660e3d5408SPeter Wemm **
670e3d5408SPeter Wemm **	NOTE that all short integers in the file are stored using VAX/PDP-style
680e3d5408SPeter Wemm **	byte-order, i.e., least-significant byte first.
690e3d5408SPeter Wemm **
700e3d5408SPeter Wemm **	There is no structure definition here because it would only confuse
710e3d5408SPeter Wemm **	matters.  Terminfo format is a raw byte layout, not a structure
720e3d5408SPeter Wemm **	dump.  If you happen to be on a little-endian machine with 16-bit
730e3d5408SPeter Wemm **	shorts that requires no padding between short members in a struct,
740e3d5408SPeter Wemm **	then there is a natural C structure that captures the header, but
750e3d5408SPeter Wemm **	not very helpfully.
760e3d5408SPeter Wemm */
770e3d5408SPeter Wemm 
780e3d5408SPeter Wemm #define MAGIC		0432	/* first two bytes of a compiled entry */
790e3d5408SPeter Wemm 
804a1a9510SRong-En Fan #undef  BYTE
814a1a9510SRong-En Fan #define BYTE(p,n)	(unsigned char)((p)[n])
824a1a9510SRong-En Fan 
834a1a9510SRong-En Fan #define IS_NEG1(p)	((BYTE(p,0) == 0377) && (BYTE(p,1) == 0377))
844a1a9510SRong-En Fan #define IS_NEG2(p)	((BYTE(p,0) == 0376) && (BYTE(p,1) == 0377))
854a1a9510SRong-En Fan #define LOW_MSB(p)	(BYTE(p,0) + 256*BYTE(p,1))
864a1a9510SRong-En Fan 
874a1a9510SRong-En Fan #define IS_TIC_MAGIC(p)	(LOW_MSB(p) == MAGIC)
884a1a9510SRong-En Fan 
890e3d5408SPeter Wemm /*
900e3d5408SPeter Wemm  * The "maximum" here is misleading; XSI guarantees minimum values, which a
910e3d5408SPeter Wemm  * given implementation may exceed.
920e3d5408SPeter Wemm  */
930e3d5408SPeter Wemm #define MAX_NAME_SIZE	512	/* maximum legal name field size (XSI:127) */
940e3d5408SPeter Wemm #define MAX_ENTRY_SIZE	4096	/* maximum legal entry size */
950e3d5408SPeter Wemm 
964a1a9510SRong-En Fan /*
974a1a9510SRong-En Fan  * The maximum size of individual name or alias is guaranteed in XSI to be at
984a1a9510SRong-En Fan  * least 14, since that corresponds to the older filename lengths.  Newer
994a1a9510SRong-En Fan  * systems allow longer aliases, though not many terminal descriptions are
1004a1a9510SRong-En Fan  * written to use them.  The MAX_ALIAS symbol is used for warnings.
1010e3d5408SPeter Wemm  */
1020e3d5408SPeter Wemm #if HAVE_LONG_FILE_NAMES
1034a1a9510SRong-En Fan #define MAX_ALIAS	32	/* smaller than POSIX minimum for PATH_MAX */
1040e3d5408SPeter Wemm #else
1050e3d5408SPeter Wemm #define MAX_ALIAS	14	/* SVr3 filename length */
1060e3d5408SPeter Wemm #endif
1070e3d5408SPeter Wemm 
1080e3d5408SPeter Wemm /* location of user's personal info directory */
1090e3d5408SPeter Wemm #define PRIVATE_INFO	"%s/.terminfo"	/* plug getenv("HOME") into %s */
1100e3d5408SPeter Wemm 
11115589c42SPeter Wemm /*
11215589c42SPeter Wemm  * Some traces are designed to be used via tic's verbose option (and similar in
11315589c42SPeter Wemm  * infocmp and toe) rather than the 'trace()' function.  So we use the bits
11415589c42SPeter Wemm  * above the normal trace() parameter as a debug-level.
11515589c42SPeter Wemm  */
11615589c42SPeter Wemm 
11715589c42SPeter Wemm #define MAX_DEBUG_LEVEL 15
1184a1a9510SRong-En Fan #define DEBUG_LEVEL(n)	((n) << TRACE_SHIFT)
11915589c42SPeter Wemm 
12015589c42SPeter Wemm #define set_trace_level(n) \
12115589c42SPeter Wemm 	_nc_tracing &= DEBUG_LEVEL(MAX_DEBUG_LEVEL), \
12215589c42SPeter Wemm 	_nc_tracing |= DEBUG_LEVEL(n)
12315589c42SPeter Wemm 
1240e3d5408SPeter Wemm #ifdef TRACE
12515589c42SPeter Wemm #define DEBUG(n, a)	if (_nc_tracing >= DEBUG_LEVEL(n)) _tracef a
1260e3d5408SPeter Wemm #else
1270e3d5408SPeter Wemm #define DEBUG(n, a)	/*nothing*/
1280e3d5408SPeter Wemm #endif
1290e3d5408SPeter Wemm 
1307a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing;
1317a69bbfbSPeter Wemm extern NCURSES_EXPORT(void) _nc_tracef (char *, ...) GCC_PRINTFLIKE(1,2);
1327a69bbfbSPeter Wemm extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
133b82face1SPeter Wemm extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *);
1340e3d5408SPeter Wemm 
1350e3d5408SPeter Wemm /*
1360e3d5408SPeter Wemm  * These are the types of tokens returned by the scanner.  The first
1370e3d5408SPeter Wemm  * three are also used in the hash table of capability names.  The scanner
1380e3d5408SPeter Wemm  * returns one of these values after loading the specifics into the global
1390e3d5408SPeter Wemm  * structure curr_token.
1400e3d5408SPeter Wemm  */
1410e3d5408SPeter Wemm 
1420e3d5408SPeter Wemm #define BOOLEAN 0		/* Boolean capability */
1430e3d5408SPeter Wemm #define NUMBER 1		/* Numeric capability */
1440e3d5408SPeter Wemm #define STRING 2		/* String-valued capability */
1450e3d5408SPeter Wemm #define CANCEL 3		/* Capability to be cancelled in following tc's */
1460e3d5408SPeter Wemm #define NAMES  4		/* The names for a terminal type */
1470e3d5408SPeter Wemm #define UNDEF  5		/* Undefined */
1480e3d5408SPeter Wemm 
1490e3d5408SPeter Wemm #define NO_PUSHBACK	-1	/* used in pushtype to indicate no pushback */
1500e3d5408SPeter Wemm 
1510e3d5408SPeter Wemm 	/*
1520e3d5408SPeter Wemm 	 *	The global structure in which the specific parts of a
1530e3d5408SPeter Wemm 	 *	scanned token are returned.
1540e3d5408SPeter Wemm 	 *
1550e3d5408SPeter Wemm 	 */
1560e3d5408SPeter Wemm 
1570e3d5408SPeter Wemm struct token
1580e3d5408SPeter Wemm {
1590e3d5408SPeter Wemm 	char	*tk_name;		/* name of capability */
1600e3d5408SPeter Wemm 	int	tk_valnumber;	/* value of capability (if a number) */
1610e3d5408SPeter Wemm 	char	*tk_valstring;	/* value of capability (if a string) */
1620e3d5408SPeter Wemm };
1630e3d5408SPeter Wemm 
1647a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(struct token)	_nc_curr_token;
1650e3d5408SPeter Wemm 
1660e3d5408SPeter Wemm 	/*
1670e3d5408SPeter Wemm 	 * Offsets to string capabilities, with the corresponding functionkey
1680e3d5408SPeter Wemm 	 * codes.
1690e3d5408SPeter Wemm 	 */
1700e3d5408SPeter Wemm struct tinfo_fkeys {
1710e3d5408SPeter Wemm 	unsigned offset;
1720e3d5408SPeter Wemm 	chtype code;
1730e3d5408SPeter Wemm 	};
1740e3d5408SPeter Wemm 
17515589c42SPeter Wemm #if	BROKEN_LINKER
1761759abf3SPeter Wemm 
1771759abf3SPeter Wemm #define	_nc_tinfo_fkeys	_nc_tinfo_fkeysf()
1785ca44d1cSRong-En Fan extern NCURSES_EXPORT(const struct tinfo_fkeys *) _nc_tinfo_fkeysf (void);
1791759abf3SPeter Wemm 
1801759abf3SPeter Wemm #else
1811759abf3SPeter Wemm 
1825ca44d1cSRong-En Fan extern NCURSES_EXPORT_VAR(const struct tinfo_fkeys) _nc_tinfo_fkeys[];
1830e3d5408SPeter Wemm 
1841759abf3SPeter Wemm #endif
1851759abf3SPeter Wemm 
186*06bfebdeSXin LI typedef short HashValue;
187*06bfebdeSXin LI 
1880e3d5408SPeter Wemm 	/*
1890e3d5408SPeter Wemm 	 * The file comp_captab.c contains an array of these structures, one
1900e3d5408SPeter Wemm 	 * per possible capability.  These are indexed by a hash table array of
1910e3d5408SPeter Wemm 	 * pointers to the same structures for use by the parser.
1920e3d5408SPeter Wemm 	 */
1930e3d5408SPeter Wemm 
1940e3d5408SPeter Wemm struct name_table_entry
1950e3d5408SPeter Wemm {
1960e3d5408SPeter Wemm 	const char *nte_name;	/* name to hash on */
1970e3d5408SPeter Wemm 	int	nte_type;	/* BOOLEAN, NUMBER or STRING */
198*06bfebdeSXin LI 	HashValue nte_index;	/* index of associated variable in its array */
199*06bfebdeSXin LI 	HashValue nte_link;	/* index in table of next hash, or -1 */
2000e3d5408SPeter Wemm };
2010e3d5408SPeter Wemm 
202*06bfebdeSXin LI 	/*
203*06bfebdeSXin LI 	 * Use this structure to hide differences between terminfo and termcap
204*06bfebdeSXin LI 	 * tables.
205*06bfebdeSXin LI 	 */
206*06bfebdeSXin LI typedef struct {
207*06bfebdeSXin LI 	unsigned table_size;
208*06bfebdeSXin LI 	const HashValue *table_data;
209*06bfebdeSXin LI 	HashValue (*hash_of)(const char *);
210*06bfebdeSXin LI 	int (*compare_names)(const char *, const char *);
211*06bfebdeSXin LI } HashData;
212*06bfebdeSXin LI 
2130e3d5408SPeter Wemm struct alias
2140e3d5408SPeter Wemm {
2150e3d5408SPeter Wemm 	const char	*from;
2160e3d5408SPeter Wemm 	const char	*to;
2170e3d5408SPeter Wemm 	const char	*source;
2180e3d5408SPeter Wemm };
2190e3d5408SPeter Wemm 
2207a69bbfbSPeter Wemm extern NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool);
221*06bfebdeSXin LI extern NCURSES_EXPORT(const HashData *) _nc_get_hash_info (bool);
222*06bfebdeSXin LI extern NCURSES_EXPORT(const HashValue *) _nc_get_hash_table (bool);
2235ca44d1cSRong-En Fan extern NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool);
2240e3d5408SPeter Wemm 
2250e3d5408SPeter Wemm #define NOTFOUND	((struct name_table_entry *) 0)
2260e3d5408SPeter Wemm 
2270e3d5408SPeter Wemm /* out-of-band values for representing absent capabilities */
2284a1a9510SRong-En Fan #define ABSENT_BOOLEAN		((signed char)-1)	/* 255 */
22939f2269fSPeter Wemm #define ABSENT_NUMERIC		(-1)
2300e3d5408SPeter Wemm #define ABSENT_STRING		(char *)0
2310e3d5408SPeter Wemm 
2320e3d5408SPeter Wemm /* out-of-band values for representing cancels */
2334a1a9510SRong-En Fan #define CANCELLED_BOOLEAN	((signed char)-2)	/* 254 */
23439f2269fSPeter Wemm #define CANCELLED_NUMERIC	(-2)
23539f2269fSPeter Wemm #define CANCELLED_STRING	(char *)(-1)
2360e3d5408SPeter Wemm 
23739f2269fSPeter Wemm #define VALID_BOOLEAN(s) ((unsigned char)(s) <= 1) /* reject "-1" */
2380e3d5408SPeter Wemm #define VALID_NUMERIC(s) ((s) >= 0)
2390e3d5408SPeter Wemm #define VALID_STRING(s)  ((s) != CANCELLED_STRING && (s) != ABSENT_STRING)
2400e3d5408SPeter Wemm 
2410e3d5408SPeter Wemm /* termcap entries longer than this may break old binaries */
2420e3d5408SPeter Wemm #define MAX_TERMCAP_LENGTH	1023
2430e3d5408SPeter Wemm 
2440e3d5408SPeter Wemm /* this is a documented limitation of terminfo */
2450e3d5408SPeter Wemm #define MAX_TERMINFO_LENGTH	4096
2460e3d5408SPeter Wemm 
2470e3d5408SPeter Wemm #ifndef TERMINFO
2480e3d5408SPeter Wemm #define TERMINFO "/usr/share/terminfo"
2490e3d5408SPeter Wemm #endif
2500e3d5408SPeter Wemm 
25118259542SPeter Wemm /* access.c */
2524a1a9510SRong-En Fan extern NCURSES_EXPORT(unsigned) _nc_pathlast (const char *);
2534a1a9510SRong-En Fan extern NCURSES_EXPORT(bool) _nc_is_abs_path (const char *);
2544a1a9510SRong-En Fan extern NCURSES_EXPORT(bool) _nc_is_dir_path (const char *);
2554a1a9510SRong-En Fan extern NCURSES_EXPORT(bool) _nc_is_file_path (const char *);
2567a69bbfbSPeter Wemm extern NCURSES_EXPORT(char *) _nc_basename (char *);
25739f2269fSPeter Wemm extern NCURSES_EXPORT(char *) _nc_rootname (char *);
25818259542SPeter Wemm 
2590e3d5408SPeter Wemm /* comp_hash.c: name lookup */
2607a69bbfbSPeter Wemm extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry
261*06bfebdeSXin LI 	(const char *, const HashValue *);
2627a69bbfbSPeter Wemm extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry
263*06bfebdeSXin LI 	(const char *, int, bool);
2640e3d5408SPeter Wemm 
2650e3d5408SPeter Wemm /* comp_scan.c: lexical analysis */
2667a69bbfbSPeter Wemm extern NCURSES_EXPORT(int)  _nc_get_token (bool);
2677a69bbfbSPeter Wemm extern NCURSES_EXPORT(void) _nc_panic_mode (char);
2687a69bbfbSPeter Wemm extern NCURSES_EXPORT(void) _nc_push_token (int);
2697a69bbfbSPeter Wemm extern NCURSES_EXPORT(void) _nc_reset_input (FILE *, char *);
2707a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(int) _nc_curr_col;
2717a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(int) _nc_curr_line;
2727a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(int) _nc_syntax;
2737a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(long) _nc_comment_end;
2747a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(long) _nc_comment_start;
2757a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(long) _nc_curr_file_pos;
2767a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(long) _nc_start_line;
2770e3d5408SPeter Wemm #define SYN_TERMINFO	0
2780e3d5408SPeter Wemm #define SYN_TERMCAP	1
2790e3d5408SPeter Wemm 
2800e3d5408SPeter Wemm /* comp_error.c: warning & abort messages */
2814a1a9510SRong-En Fan extern NCURSES_EXPORT(const char *) _nc_get_source (void);
2827a69bbfbSPeter Wemm extern NCURSES_EXPORT(void) _nc_err_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
2834a1a9510SRong-En Fan extern NCURSES_EXPORT(void) _nc_get_type (char *name);
2844a1a9510SRong-En Fan extern NCURSES_EXPORT(void) _nc_set_source (const char *const);
2854a1a9510SRong-En Fan extern NCURSES_EXPORT(void) _nc_set_type (const char *const);
2864a1a9510SRong-En Fan extern NCURSES_EXPORT(void) _nc_syserr_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
2877a69bbfbSPeter Wemm extern NCURSES_EXPORT(void) _nc_warning (const char *const,...) GCC_PRINTFLIKE(1,2);
2887a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(bool) _nc_suppress_warnings;
2890e3d5408SPeter Wemm 
2900e3d5408SPeter Wemm /* comp_expand.c: expand string into readable form */
2917a69bbfbSPeter Wemm extern NCURSES_EXPORT(char *) _nc_tic_expand (const char *, bool, int);
2920e3d5408SPeter Wemm 
2930e3d5408SPeter Wemm /* comp_scan.c: decode string from readable form */
2944a1a9510SRong-En Fan extern NCURSES_EXPORT(int) _nc_trans_string (char *, char *);
2950e3d5408SPeter Wemm 
2960e3d5408SPeter Wemm /* captoinfo.c: capability conversion */
2977a69bbfbSPeter Wemm extern NCURSES_EXPORT(char *) _nc_captoinfo (const char *, const char *, int const);
2987a69bbfbSPeter Wemm extern NCURSES_EXPORT(char *) _nc_infotocap (const char *, const char *, int const);
2990e3d5408SPeter Wemm 
3004a1a9510SRong-En Fan /* home_terminfo.c */
3014a1a9510SRong-En Fan extern NCURSES_EXPORT(char *) _nc_home_terminfo (void);
3024a1a9510SRong-En Fan 
3034a1a9510SRong-En Fan /* lib_tparm.c */
3044a1a9510SRong-En Fan #define NUM_PARM 9
3054a1a9510SRong-En Fan 
3064a1a9510SRong-En Fan extern NCURSES_EXPORT_VAR(int) _nc_tparm_err;
3074a1a9510SRong-En Fan 
3084a1a9510SRong-En Fan extern NCURSES_EXPORT(int) _nc_tparm_analyze(const char *, char **, int *);
3094a1a9510SRong-En Fan 
3100e3d5408SPeter Wemm /* lib_tputs.c */
3117a69bbfbSPeter Wemm extern NCURSES_EXPORT_VAR(int) _nc_nulls_sent;		/* Add one for every null sent */
3120e3d5408SPeter Wemm 
3130e3d5408SPeter Wemm /* comp_main.c: compiler main */
3140e3d5408SPeter Wemm extern const char * _nc_progname;
3150e3d5408SPeter Wemm 
3164a1a9510SRong-En Fan /* db_iterator.c */
3174a1a9510SRong-En Fan typedef enum {
3184a1a9510SRong-En Fan     dbdTIC = 0,
3194a1a9510SRong-En Fan #if USE_DATABASE
3204a1a9510SRong-En Fan     dbdEnvOnce,
3214a1a9510SRong-En Fan     dbdHome,
3224a1a9510SRong-En Fan     dbdEnvList,
3234a1a9510SRong-En Fan     dbdCfgList,
3244a1a9510SRong-En Fan     dbdCfgOnce,
3254a1a9510SRong-En Fan #endif
3264a1a9510SRong-En Fan #if USE_TERMCAP
3274a1a9510SRong-En Fan     dbdEnvOnce2,
3284a1a9510SRong-En Fan     dbdEnvList2,
3294a1a9510SRong-En Fan     dbdCfgList2,
3304a1a9510SRong-En Fan #endif
3314a1a9510SRong-En Fan     dbdLAST
3324a1a9510SRong-En Fan } DBDIRS;
3334a1a9510SRong-En Fan 
3344a1a9510SRong-En Fan extern NCURSES_EXPORT(const char *) _nc_next_db(DBDIRS *, int *);
3357a69bbfbSPeter Wemm extern NCURSES_EXPORT(const char *) _nc_tic_dir (const char *);
3364a1a9510SRong-En Fan extern NCURSES_EXPORT(void) _nc_first_db(DBDIRS *, int *);
3374a1a9510SRong-En Fan extern NCURSES_EXPORT(void) _nc_last_db(void);
3380e3d5408SPeter Wemm 
3390e3d5408SPeter Wemm /* write_entry.c */
3407a69bbfbSPeter Wemm extern NCURSES_EXPORT(int) _nc_tic_written (void);
3410e3d5408SPeter Wemm 
3420e3d5408SPeter Wemm #ifdef __cplusplus
3430e3d5408SPeter Wemm }
3440e3d5408SPeter Wemm #endif
3450e3d5408SPeter Wemm 
3460e3d5408SPeter Wemm #endif /* __TIC_H */
347