X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fcurses.priv.h;h=973eb998e3fd8119840df419306f7eeadcf68d64;hp=81340c87f9a7a12b7f802b897919fe7757e0c090;hb=aabbbcb7892fd946828a4170378b13b9d12435c6;hpb=0be808514502f3149b379d036ab3a83cbb4d4c02 diff --git a/ncurses/curses.priv.h b/ncurses/curses.priv.h index 81340c87..973eb998 100644 --- a/ncurses/curses.priv.h +++ b/ncurses/curses.priv.h @@ -34,7 +34,7 @@ /* - * $Id: curses.priv.h,v 1.325 2007/03/10 23:43:50 tom Exp $ + * $Id: curses.priv.h,v 1.340 2007/09/08 21:44:40 tom Exp $ * * curses.priv.h * @@ -214,6 +214,8 @@ typedef TRIES { /* * Common/troublesome character definitions */ +#define StringOf(ch) {ch, 0} + #define L_BRACE '{' #define R_BRACE '}' #define S_QUOTE '\'' @@ -298,6 +300,25 @@ color_t; #define SET_COLS(value) COLS = value #endif +#ifdef USE_PTHREADS +#if USE_REENTRANT +#include +#define _nc_lock_global(name) pthread_mutex_lock(&_nc_globals.mutex_##name) +#define _nc_unlock_global(name) pthread_mutex_unlock(&_nc_globals.mutex_##name) +#else +#error POSIX threads requires --enable-reentrant option +#endif +#else +#define _nc_lock_global(name) /* nothing */ +#define _nc_unlock_global(name) /* nothing */ +#endif + +#define _nc_lock_screen(name) /* nothing */ +#define _nc_unlock_screen(name) /* nothing */ + +#define _nc_lock_window(name) /* nothing */ +#define _nc_unlock_window(name) /* nothing */ + /* * Definitions for color pairs */ @@ -380,7 +401,6 @@ typedef struct _SLK { typedef struct { int line; /* lines to take, < 0 => from bottom*/ int (*hook)(WINDOW *, int); /* callback for user */ - WINDOW *w; /* maybe we need this for cleanup */ } ripoff_t; #if USE_GPM_SUPPORT @@ -407,6 +427,167 @@ typedef int (*TYPE_Gpm_GetEvent) (Gpm_Event *); #endif /* HAVE_LIBDL */ #endif /* USE_GPM_SUPPORT */ +typedef struct { + long sequence; + bool last_used; + char *fix_sgr0; /* this holds the filtered sgr0 string */ + char *last_bufp; /* help with fix_sgr0 leak */ + TERMINAL *last_term; +} TGETENT_CACHE; + +#define TGETENT_MAX 4 + +/* + * State of tparm(). + */ +#define STACKSIZE 20 + +typedef struct { + union { + int num; + char *str; + } data; + bool num_type; +} STACK_FRAME; + +#define NUM_VARS 26 + +typedef struct { +#ifdef TRACE + const char *tname; +#endif + const char *tparam_base; + + STACK_FRAME stack[STACKSIZE]; + int stack_ptr; + + char *out_buff; + size_t out_size; + size_t out_used; + + char *fmt_buff; + size_t fmt_size; + + int dynamic_var[NUM_VARS]; + int static_vars[NUM_VARS]; +} TPARM_STATE; + +typedef struct { + char *text; + size_t size; +} TRACEBUF; + +/* + * TRACEMSE_FMT is no longer than 80 columns, there are 5 numbers that + * could at most have 10 digits, and the mask contains no more than 32 bits + * with each bit representing less than 15 characters. Usually the whole + * string is less than 80 columns, but this buffer size is an absolute + * limit. + */ +#define TRACEMSE_MAX (80 + (5 * 10) + (32 * 15)) +#define TRACEMSE_FMT "id %2d at (%2d, %2d, %2d) state %4lx = {" /* } */ + +/* + * Global data which is not specific to a screen. + */ +typedef struct { + SIG_ATOMIC_T have_sigwinch; + SIG_ATOMIC_T cleanup_nested; + + bool init_signals; + bool init_screen; + + const char *comp_sourcename; + char *comp_termtype; + + bool have_tic_directory; + bool keep_tic_directory; + const char *tic_directory; + + char *dbi_list; + int dbi_size; + + char *first_name; + char **keyname_table; + + char *safeprint_buf; + size_t safeprint_used; + + TGETENT_CACHE tgetent_cache[TGETENT_MAX]; + int tgetent_index; + long tgetent_sequence; + +#if USE_HOME_TERMINFO + char *home_terminfo; +#endif + +#if !USE_SAFE_SPRINTF + int safeprint_cols; + int safeprint_rows; +#endif + +#ifdef TRACE + bool init_trace; + char trace_fname[PATH_MAX]; + int trace_level; + FILE *trace_fp; + + char *tracearg_buf; + size_t tracearg_used; + + TRACEBUF *tracebuf_ptr; + size_t tracebuf_used; + + char tracechr_buf[40]; + + char *tracedmp_buf; + size_t tracedmp_used; + + char tracemse_buf[TRACEMSE_MAX]; + + unsigned char *tracetry_buf; + size_t tracetry_used; + +#ifndef USE_TERMLIB + char traceatr_color_buf[2][80]; + int traceatr_color_sel; + int traceatr_color_last; +#endif /* USE_TERMLIB */ + +#endif /* TRACE */ + +#ifdef USE_PTHREADS + pthread_mutex_t mutex_set_SP; + pthread_mutex_t mutex_use_screen; + pthread_mutex_t mutex_windowlist; +#endif +} NCURSES_GLOBALS; + +extern NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals; + +#define N_RIPS 5 + +/* + * Global data which is swept up into a SCREEN when one is created. + * It may be modified before the next SCREEN is created. + */ +typedef struct { + bool use_env; + bool filter_mode; + attr_t previous_attr; + ripoff_t rippedoff[N_RIPS]; + ripoff_t *rsp; + TPARM_STATE tparm_state; + TTY *saved_tty; /* savetty/resetty information */ +#if BROKEN_LINKER || USE_REENTRANT + chtype *real_acs_map; + int _LINES; + int _COLS; +#endif +} NCURSES_PRESCREEN; + +extern NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen; + /* * The SCREEN structure. */ @@ -425,8 +606,6 @@ struct screen { NCURSES_SIZE_T _lines_avail; /* lines available for stdscr */ NCURSES_SIZE_T _topstolen; /* lines stolen from top */ - ripoff_t _rippedoff[5]; /* list of lines stolen */ - int _rip_count; /* ...and total lines stolen */ WINDOW *_curscr; /* current screen */ WINDOW *_newscr; /* virtual screen to be updated to */ @@ -639,6 +818,7 @@ struct screen { }; extern NCURSES_EXPORT_VAR(SCREEN *) _nc_screen_chain; +extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; WINDOWLIST { WINDOW win; /* first, so WINDOW_EXT() works */ @@ -742,9 +922,9 @@ extern NCURSES_EXPORT_VAR(SCREEN *) _nc_screen_chain; #define NulChar 0,0,0,0 /* FIXME: see CCHARW_MAX */ #define CharOf(c) ((c).chars[0]) #define AttrOf(c) ((c).attr) -#define AddAttr(c,a) AttrOf(c) |= ((a) & A_ATTRIBUTES) +#define AddAttr(c,a) AttrOf(c) |= ((a) & A_ATTRIBUTES) #define RemAttr(c,a) AttrOf(c) &= ~((a) & A_ATTRIBUTES) -#define SetAttr(c,a) AttrOf(c) = ((a) & A_ATTRIBUTES) +#define SetAttr(c,a) AttrOf(c) = ((a) & A_ATTRIBUTES) | WidecExt(c) #define NewChar2(c,a) { a, { c, NulChar } NulColor } #define NewChar(ch) NewChar2(ChCharOf(ch), ChAttrOf(ch)) #define CharEq(a,b) (!memcmp(&(a), &(b), sizeof(a))) @@ -1107,6 +1287,21 @@ extern NCURSES_EXPORT(int) _nc_to_char(wint_t); extern NCURSES_EXPORT(wint_t) _nc_to_widechar(int); #endif +/* comp_captab.c */ +typedef struct { + short nte_name; /* offset of name to hash on */ + int nte_type; /* BOOLEAN, NUMBER or STRING */ + short nte_index; /* index of associated variable in its array */ + short nte_link; /* index in table of next hash, or -1 */ +} name_table_data; + +typedef struct +{ + short from; + short to; + short source; +} alias_table_data; + /* doupdate.c */ #if USE_XMC_SUPPORT extern NCURSES_EXPORT(void) _nc_do_xmc_glitch (attr_t); @@ -1240,6 +1435,7 @@ extern NCURSES_EXPORT(void) _nc_trace_tries (TRIES *); #if NO_LEAKS extern NCURSES_EXPORT(void) _nc_alloc_entry_leaks(void); extern NCURSES_EXPORT(void) _nc_captoinfo_leaks(void); +extern NCURSES_EXPORT(void) _nc_comp_captab_leaks(void); extern NCURSES_EXPORT(void) _nc_comp_scan_leaks(void); extern NCURSES_EXPORT(void) _nc_keyname_leaks(void); extern NCURSES_EXPORT(void) _nc_tgetent_leaks(void);