]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/curses.priv.h
ncurses 5.6 - patch 20070526
[ncurses.git] / ncurses / curses.priv.h
index cfb3e62a62b03694a78ec2f01d09a97253530377..931b0fa51a0ee023ab0f400eba6378df35fd931a 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2006,2007 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            *
@@ -34,7 +34,7 @@
 
 
 /*
- * $Id: curses.priv.h,v 1.314 2006/12/10 00:55:14 tom Exp $
+ * $Id: curses.priv.h,v 1.332 2007/05/26 18:47:51 tom Exp $
  *
  *     curses.priv.h
  *
@@ -202,12 +202,14 @@ extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t);
  * delays and expansion in raw mode.
  */
 
-struct tries {
-       struct tries    *child;     /* ptr to child.  NULL if none          */
-       struct tries    *sibling;   /* ptr to sibling.  NULL if none        */
+#define TRIES struct tries
+typedef TRIES {
+       TRIES    *child;            /* ptr to child.  NULL if none          */
+       TRIES    *sibling;          /* ptr to sibling.  NULL if none        */
        unsigned char    ch;        /* character at this node               */
        unsigned short   value;     /* code of string so far.  0 if none.   */
-};
+#undef TRIES
+} TRIES;
 
 /*
  * Common/troublesome character definitions
@@ -248,6 +250,10 @@ color_t;
 #define wbkgrnd            wbkgd
 #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! */
 #include <term.h>
 #include <term_entry.h>
@@ -284,6 +290,14 @@ color_t;
 #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
  */
@@ -366,7 +380,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
@@ -393,6 +406,159 @@ 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 */
+} 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.
  */
@@ -405,20 +571,19 @@ struct screen {
        bool            _buffered;      /* setvbuf uses _setbuf data        */
        int             _checkfd;       /* filedesc for typeahead check     */
        TERMINAL        *_term;         /* terminal type information        */
-       short           _lines;         /* screen lines                     */
-       short           _columns;       /* screen columns                   */
+       TTY             _saved_tty;     /* savetty/resetty information      */
+       NCURSES_SIZE_T  _lines;         /* screen lines                     */
+       NCURSES_SIZE_T  _columns;       /* screen columns                   */
 
-       short           _lines_avail;   /* lines available for stdscr       */
-       short           _topstolen;     /* lines stolen from top            */
-       ripoff_t        _rippedoff[5];  /* list of lines stolen             */
-       int             _rip_count;     /* ...and total lines stolen        */
+       NCURSES_SIZE_T  _lines_avail;   /* lines available for stdscr       */
+       NCURSES_SIZE_T  _topstolen;     /* lines stolen from top            */
 
        WINDOW          *_curscr;       /* current screen                   */
        WINDOW          *_newscr;       /* virtual screen to be updated to  */
        WINDOW          *_stdscr;       /* screen's full-window context     */
 
-       struct tries    *_keytry;       /* "Try" for use with keypad mode   */
-       struct tries    *_key_ok;       /* Disabled keys via keyok(,FALSE)  */
+       TRIES           *_keytry;       /* "Try" for use with keypad mode   */
+       TRIES           *_key_ok;       /* Disabled keys via keyok(,FALSE)  */
        bool            _tried;         /* keypad mode was initialized      */
        bool            _keypad_on;     /* keypad mode is currently on      */
 
@@ -597,12 +762,21 @@ struct screen {
        unsigned long   *oldhash, *newhash;
        HASHMAP         *hashtab;
        int             hashtab_len;
+       int             *_oldnum_list;
+       int             _oldnum_size;
 
        bool            _cleanup;       /* cleanup after int/quit signal */
        int             (*_outch)(int); /* output handler if not putc */
 
        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.
         */
@@ -615,6 +789,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 */
@@ -1141,6 +1316,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(void) _nc_get_screensize(int *, int *);
 
 /* lib_tstp.c */
 #if USE_SIGWINCH
@@ -1177,10 +1353,10 @@ extern NCURSES_EXPORT(char *) _nc_strstr (const char *, const char *);
 extern NCURSES_EXPORT(char *) _nc_printf_string (const char *, va_list);
 
 /* tries.c */
-extern NCURSES_EXPORT(void) _nc_add_to_try (struct tries **, const char *, unsigned);
-extern NCURSES_EXPORT(char *) _nc_expand_try (struct tries *, unsigned, int *, size_t);
-extern NCURSES_EXPORT(int) _nc_remove_key (struct tries **, unsigned);
-extern NCURSES_EXPORT(int) _nc_remove_string (struct tries **, const char *);
+extern NCURSES_EXPORT(int) _nc_add_to_try (TRIES **, const char *, unsigned);
+extern NCURSES_EXPORT(char *) _nc_expand_try (TRIES *, unsigned, int *, size_t);
+extern NCURSES_EXPORT(int) _nc_remove_key (TRIES **, unsigned);
+extern NCURSES_EXPORT(int) _nc_remove_string (TRIES **, const char *);
 
 /* elsewhere ... */
 extern NCURSES_EXPORT(ENTRY *) _nc_delink_entry(ENTRY *, TERMTYPE *);
@@ -1210,7 +1386,7 @@ extern NCURSES_EXPORT(void) _nc_scroll_optimize (void);
 extern NCURSES_EXPORT(void) _nc_set_buffer (FILE *, bool);
 extern NCURSES_EXPORT(void) _nc_signal_handler (bool);
 extern NCURSES_EXPORT(void) _nc_synchook (WINDOW *);
-extern NCURSES_EXPORT(void) _nc_trace_tries (struct tries *);
+extern NCURSES_EXPORT(void) _nc_trace_tries (TRIES *);
 
 #if NO_LEAKS
 extern NCURSES_EXPORT(void) _nc_alloc_entry_leaks(void);