X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=include%2Ftic.h;h=f91d771d7bf1c21c61e02c082a900f9e3f9ded82;hp=e8660958dc0b14a792c9bb60c310701eb27f9ab8;hb=d803343ca3e2a419085e76fc9f04a6fbd14498b8;hpb=661078ddbde3ce0f3b06e95642fbb9b5fef7dca1 diff --git a/include/tic.h b/include/tic.h index e8660958..f91d771d 100644 --- a/include/tic.h +++ b/include/tic.h @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -29,12 +29,13 @@ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * + * and: Thomas E. Dickey 1996 on * ****************************************************************************/ /* + * $Id: tic.h,v 1.63 2009/07/11 18:11:15 tom Exp $ * tic.h - Global variables and structures for the terminfo * compiler. - * */ #ifndef __TIC_H @@ -76,6 +77,15 @@ extern "C" { #define MAGIC 0432 /* first two bytes of a compiled entry */ +#undef BYTE +#define BYTE(p,n) (unsigned char)((p)[n]) + +#define IS_NEG1(p) ((BYTE(p,0) == 0377) && (BYTE(p,1) == 0377)) +#define IS_NEG2(p) ((BYTE(p,0) == 0376) && (BYTE(p,1) == 0377)) +#define LOW_MSB(p) (BYTE(p,0) + 256*BYTE(p,1)) + +#define IS_TIC_MAGIC(p) (LOW_MSB(p) == MAGIC) + /* * The "maximum" here is misleading; XSI guarantees minimum values, which a * given implementation may exceed. @@ -83,13 +93,14 @@ extern "C" { #define MAX_NAME_SIZE 512 /* maximum legal name field size (XSI:127) */ #define MAX_ENTRY_SIZE 4096 /* maximum legal entry size */ -/* The maximum size of individual name or alias is guaranteed in XSI to - * be 14, since that corresponds to the older filename lengths. Newer - * systems allow longer aliases, though not many terminal descriptions - * are written to use them. +/* + * The maximum size of individual name or alias is guaranteed in XSI to be at + * least 14, since that corresponds to the older filename lengths. Newer + * systems allow longer aliases, though not many terminal descriptions are + * written to use them. The MAX_ALIAS symbol is used for warnings. */ #if HAVE_LONG_FILE_NAMES -#define MAX_ALIAS 32 /* POSIX minimum for PATH_MAX */ +#define MAX_ALIAS 32 /* smaller than POSIX minimum for PATH_MAX */ #else #define MAX_ALIAS 14 /* SVr3 filename length */ #endif @@ -97,10 +108,29 @@ extern "C" { /* location of user's personal info directory */ #define PRIVATE_INFO "%s/.terminfo" /* plug getenv("HOME") into %s */ -#define DEBUG(n, a) if (_nc_tracing & (1 << (n - 1))) _tracef a -extern unsigned _nc_tracing; -extern void _nc_tracef(char *, ...) GCC_PRINTFLIKE(1,2); -extern const char *_nc_visbuf(const char *); +/* + * Some traces are designed to be used via tic's verbose option (and similar in + * infocmp and toe) rather than the 'trace()' function. So we use the bits + * above the normal trace() parameter as a debug-level. + */ + +#define MAX_DEBUG_LEVEL 15 +#define DEBUG_LEVEL(n) ((n) << TRACE_SHIFT) + +#define set_trace_level(n) \ + _nc_tracing &= DEBUG_LEVEL(MAX_DEBUG_LEVEL), \ + _nc_tracing |= DEBUG_LEVEL(n) + +#ifdef TRACE +#define DEBUG(n, a) if (_nc_tracing >= DEBUG_LEVEL(n)) _tracef a +#else +#define DEBUG(n, a) /*nothing*/ +#endif + +extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing; +extern NCURSES_EXPORT(void) _nc_tracef (char *, ...) GCC_PRINTFLIKE(1,2); +extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *); +extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *); /* * These are the types of tokens returned by the scanner. The first @@ -131,7 +161,27 @@ struct token char *tk_valstring; /* value of capability (if a string) */ }; -extern struct token _nc_curr_token; +extern NCURSES_EXPORT_VAR(struct token) _nc_curr_token; + + /* + * Offsets to string capabilities, with the corresponding functionkey + * codes. + */ +struct tinfo_fkeys { + unsigned offset; + chtype code; + }; + +#if BROKEN_LINKER + +#define _nc_tinfo_fkeys _nc_tinfo_fkeysf() +extern NCURSES_EXPORT(const struct tinfo_fkeys *) _nc_tinfo_fkeysf (void); + +#else + +extern NCURSES_EXPORT_VAR(const struct tinfo_fkeys) _nc_tinfo_fkeys[]; + +#endif /* * The file comp_captab.c contains an array of these structures, one @@ -154,27 +204,25 @@ struct alias const char *source; }; -extern const struct name_table_entry * const _nc_info_hash_table[]; -extern const struct name_table_entry * const _nc_cap_hash_table[]; - -extern const struct alias _nc_capalias_table[]; -extern const struct alias _nc_infoalias_table[]; - -extern const struct name_table_entry *_nc_get_table(bool); +extern NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool); +extern NCURSES_EXPORT(const short *) _nc_get_hash_table (bool); +extern NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool); #define NOTFOUND ((struct name_table_entry *) 0) /* out-of-band values for representing absent capabilities */ -#define ABSENT_BOOLEAN -1 -#define ABSENT_NUMERIC -1 +#define ABSENT_BOOLEAN ((signed char)-1) /* 255 */ +#define ABSENT_NUMERIC (-1) #define ABSENT_STRING (char *)0 /* out-of-band values for representing cancels */ -#define CANCELLED_BOOLEAN (char)(-2) -#define CANCELLED_NUMERIC -2 -#define CANCELLED_STRING (char *)-1 +#define CANCELLED_BOOLEAN ((signed char)-2) /* 254 */ +#define CANCELLED_NUMERIC (-2) +#define CANCELLED_STRING (char *)(-1) -#define VALID_STRING(s) ((s) != CANCELLED_STRING && (s) != ABSENT_STRING) +#define VALID_BOOLEAN(s) ((unsigned char)(s) <= 1) /* reject "-1" */ +#define VALID_NUMERIC(s) ((s) >= 0) +#define VALID_STRING(s) ((s) != CANCELLED_STRING && (s) != ABSENT_STRING) /* termcap entries longer than this may break old binaries */ #define MAX_TERMCAP_LENGTH 1023 @@ -186,57 +234,96 @@ extern const struct name_table_entry *_nc_get_table(bool); #define TERMINFO "/usr/share/terminfo" #endif +/* access.c */ +extern NCURSES_EXPORT(unsigned) _nc_pathlast (const char *); +extern NCURSES_EXPORT(bool) _nc_is_abs_path (const char *); +extern NCURSES_EXPORT(bool) _nc_is_dir_path (const char *); +extern NCURSES_EXPORT(bool) _nc_is_file_path (const char *); +extern NCURSES_EXPORT(char *) _nc_basename (char *); +extern NCURSES_EXPORT(char *) _nc_rootname (char *); + /* comp_hash.c: name lookup */ -struct name_table_entry const *_nc_find_entry(const char *, - const struct name_table_entry *const *); -struct name_table_entry const *_nc_find_type_entry(const char *, - int, - const struct name_table_entry *); +extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry + (const char *, const short *); +extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry + (const char *, int, bool); /* comp_scan.c: lexical analysis */ -extern int _nc_get_token(void); -extern void _nc_push_token(int); -extern void _nc_reset_input(FILE *, char *); -extern void _nc_panic_mode(char); -extern int _nc_curr_line; -extern int _nc_curr_col; -extern long _nc_curr_file_pos; -extern long _nc_comment_start, _nc_comment_end; -extern int _nc_syntax; -extern long _nc_start_line; +extern NCURSES_EXPORT(int) _nc_get_token (bool); +extern NCURSES_EXPORT(void) _nc_panic_mode (char); +extern NCURSES_EXPORT(void) _nc_push_token (int); +extern NCURSES_EXPORT(void) _nc_reset_input (FILE *, char *); +extern NCURSES_EXPORT_VAR(int) _nc_curr_col; +extern NCURSES_EXPORT_VAR(int) _nc_curr_line; +extern NCURSES_EXPORT_VAR(int) _nc_syntax; +extern NCURSES_EXPORT_VAR(long) _nc_comment_end; +extern NCURSES_EXPORT_VAR(long) _nc_comment_start; +extern NCURSES_EXPORT_VAR(long) _nc_curr_file_pos; +extern NCURSES_EXPORT_VAR(long) _nc_start_line; #define SYN_TERMINFO 0 #define SYN_TERMCAP 1 /* comp_error.c: warning & abort messages */ -extern void _nc_set_source(const char *const name); -extern void _nc_get_type(char *name); -extern void _nc_set_type(const char *const name); -extern void _nc_syserr_abort(const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; -extern void _nc_err_abort(const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; -extern void _nc_warning(const char *const,...) GCC_PRINTFLIKE(1,2); -extern bool _nc_suppress_warnings; +extern NCURSES_EXPORT(const char *) _nc_get_source (void); +extern NCURSES_EXPORT(void) _nc_err_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; +extern NCURSES_EXPORT(void) _nc_get_type (char *name); +extern NCURSES_EXPORT(void) _nc_set_source (const char *const); +extern NCURSES_EXPORT(void) _nc_set_type (const char *const); +extern NCURSES_EXPORT(void) _nc_syserr_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; +extern NCURSES_EXPORT(void) _nc_warning (const char *const,...) GCC_PRINTFLIKE(1,2); +extern NCURSES_EXPORT_VAR(bool) _nc_suppress_warnings; /* comp_expand.c: expand string into readable form */ -extern char *_nc_tic_expand(const char *, bool); +extern NCURSES_EXPORT(char *) _nc_tic_expand (const char *, bool, int); /* comp_scan.c: decode string from readable form */ -extern char _nc_trans_string(char *); +extern NCURSES_EXPORT(int) _nc_trans_string (char *, char *); /* captoinfo.c: capability conversion */ -extern char *_nc_captoinfo(const char *, const char *, int const); -extern char *_nc_infotocap(const char *, const char *, int const); +extern NCURSES_EXPORT(char *) _nc_captoinfo (const char *, const char *, int const); +extern NCURSES_EXPORT(char *) _nc_infotocap (const char *, const char *, int const); + +/* home_terminfo.c */ +extern NCURSES_EXPORT(char *) _nc_home_terminfo (void); + +/* lib_tparm.c */ +#define NUM_PARM 9 + +extern NCURSES_EXPORT_VAR(int) _nc_tparm_err; + +extern NCURSES_EXPORT(int) _nc_tparm_analyze(const char *, char **, int *); /* lib_tputs.c */ -extern int _nc_nulls_sent; /* Add one for every null sent */ +extern NCURSES_EXPORT_VAR(int) _nc_nulls_sent; /* Add one for every null sent */ /* comp_main.c: compiler main */ -extern const char *_nc_progname; +extern const char * _nc_progname; + +/* db_iterator.c */ +typedef enum { + dbdTIC = 0, +#if USE_DATABASE + dbdEnvOnce, + dbdHome, + dbdEnvList, + dbdCfgList, + dbdCfgOnce, +#endif +#if USE_TERMCAP + dbdEnvOnce2, + dbdEnvList2, + dbdCfgList2, +#endif + dbdLAST +} DBDIRS; -/* read_entry.c */ -extern const char *_nc_tic_dir(const char *); +extern NCURSES_EXPORT(const char *) _nc_next_db(DBDIRS *, int *); +extern NCURSES_EXPORT(const char *) _nc_tic_dir (const char *); +extern NCURSES_EXPORT(void) _nc_first_db(DBDIRS *, int *); +extern NCURSES_EXPORT(void) _nc_last_db(void); /* write_entry.c */ -extern int _nc_tic_written(void); +extern NCURSES_EXPORT(int) _nc_tic_written (void); #ifdef __cplusplus }