]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/curses.priv.h
ncurses 5.6 - patch 20070609
[ncurses.git] / ncurses / curses.priv.h
index c06818c50b7d0943fc13268518cc01284c2e94c6..31fabb1738ca7ead9ad0a97b208435dcd3538d5b 100644 (file)
@@ -34,7 +34,7 @@
 
 
 /*
 
 
 /*
- * $Id: curses.priv.h,v 1.321 2007/03/03 21:56:33 tom Exp $
+ * $Id: curses.priv.h,v 1.334 2007/06/09 17:21:53 tom Exp $
  *
  *     curses.priv.h
  *
  *
  *     curses.priv.h
  *
@@ -214,6 +214,8 @@ typedef TRIES {
 /*
  * Common/troublesome character definitions
  */
 /*
  * Common/troublesome character definitions
  */
+#define StringOf(ch) {ch, 0}
+
 #define L_BRACE '{'
 #define R_BRACE '}'
 #define S_QUOTE '\''
 #define L_BRACE '{'
 #define R_BRACE '}'
 #define S_QUOTE '\''
@@ -251,6 +253,7 @@ color_t;
 #endif
 
 #undef NCURSES_OPAQUE
 #endif
 
 #undef NCURSES_OPAQUE
+#define NCURSES_INTERNALS 1
 #define NCURSES_OPAQUE 0
 
 #include <curses.h>    /* we'll use -Ipath directive to get the right one! */
 #define NCURSES_OPAQUE 0
 
 #include <curses.h>    /* we'll use -Ipath directive to get the right one! */
@@ -289,6 +292,14 @@ color_t;
 #define GET_SCREEN_PAIR(s)     GetPair(SCREEN_ATTRS(s))
 #define SET_SCREEN_PAIR(s,p)   SetPair(SCREEN_ATTRS(s), p)
 
 #define GET_SCREEN_PAIR(s)     GetPair(SCREEN_ATTRS(s))
 #define SET_SCREEN_PAIR(s,p)   SetPair(SCREEN_ATTRS(s), p)
 
+#if USE_REENTRANT
+#define SET_LINES(value) SP->_LINES = value
+#define SET_COLS(value)  SP->_COLS = value
+#else
+#define SET_LINES(value) LINES = value
+#define SET_COLS(value)  COLS = value
+#endif
+
 /*
  * Definitions for color pairs
  */
 /*
  * Definitions for color pairs
  */
@@ -371,7 +382,6 @@ typedef struct _SLK {
 typedef        struct {
        int     line;           /* lines to take, < 0 => from bottom*/
        int     (*hook)(WINDOW *, int); /* callback for user        */
 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
 } ripoff_t;
 
 #if USE_GPM_SUPPORT
@@ -398,6 +408,159 @@ typedef int (*TYPE_Gpm_GetEvent) (Gpm_Event *);
 #endif /* HAVE_LIBDL */
 #endif /* USE_GPM_SUPPORT */
 
 #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 */
+} 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;
+#endif
+} NCURSES_PRESCREEN;
+
+extern NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen;
+
 /*
  * The SCREEN structure.
  */
 /*
  * The SCREEN structure.
  */
@@ -416,8 +579,6 @@ struct screen {
 
        NCURSES_SIZE_T  _lines_avail;   /* lines available for stdscr       */
        NCURSES_SIZE_T  _topstolen;     /* lines stolen from top            */
 
        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  */
 
        WINDOW          *_curscr;       /* current screen                   */
        WINDOW          *_newscr;       /* virtual screen to be updated to  */
@@ -611,6 +772,13 @@ struct screen {
 
        int             _legacy_coding; /* see use_legacy_coding() */
 
 
        int             _legacy_coding; /* see use_legacy_coding() */
 
+#if USE_REENTRANT
+       char            _ttytype[NAMESIZE];
+       int             _ESCDELAY;
+       int             _TABSIZE;
+       int             _LINES;
+       int             _COLS;
+#endif
        /*
         * ncurses/ncursesw are the same up to this point.
         */
        /*
         * ncurses/ncursesw are the same up to this point.
         */
@@ -623,6 +791,7 @@ struct screen {
 };
 
 extern NCURSES_EXPORT_VAR(SCREEN *) _nc_screen_chain;
 };
 
 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 */
 
        WINDOWLIST {
        WINDOW  win;    /* first, so WINDOW_EXT() works */
@@ -726,9 +895,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 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 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)))
 #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)))
@@ -1149,6 +1318,7 @@ extern NCURSES_EXPORT(char *) _nc_get_locale(void);
 extern NCURSES_EXPORT(int) _nc_unicode_locale(void);
 extern NCURSES_EXPORT(int) _nc_locale_breaks_acs(void);
 extern NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *, int, int *, bool);
 extern NCURSES_EXPORT(int) _nc_unicode_locale(void);
 extern NCURSES_EXPORT(int) _nc_locale_breaks_acs(void);
 extern NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *, int, int *, bool);
+extern NCURSES_EXPORT(void) _nc_get_screensize(int *, int *);
 
 /* lib_tstp.c */
 #if USE_SIGWINCH
 
 /* lib_tstp.c */
 #if USE_SIGWINCH