X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fcurses.priv.h;h=839d5b359d70644f801a62fafc5cc19cd6cec0bc;hp=f6c4879f40c4a92df81c08cc0ac7d13094417bf6;hb=71244b7927a8918c0b09a8eb13b017ef0ebb6de8;hpb=2560bc3dae7f4919060c02c91a593566c908091c diff --git a/ncurses/curses.priv.h b/ncurses/curses.priv.h index f6c4879f..839d5b35 100644 --- a/ncurses/curses.priv.h +++ b/ncurses/curses.priv.h @@ -34,7 +34,7 @@ ****************************************************************************/ /* - * $Id: curses.priv.h,v 1.573 2017/06/02 23:19:52 tom Exp $ + * $Id: curses.priv.h,v 1.583 2017/07/22 23:19:00 tom Exp $ * * curses.priv.h * @@ -394,6 +394,11 @@ color_t; #define TerminalType(tp) (tp)->type #endif +#ifdef CUR +#undef CUR +#define CUR TerminalType(cur_term). +#endif + /* * Reduce dependency on cur_term global by using terminfo data from SCREEN's * pointer to this data. @@ -402,7 +407,7 @@ color_t; #undef CUR #endif -#define SP_TERMTYPE TerminalOf(sp)->type. +#define SP_TERMTYPE TerminalType(TerminalOf(sp)). #include @@ -961,6 +966,9 @@ typedef struct { #ifdef USE_PTHREADS pthread_mutex_t mutex_curses; + pthread_mutex_t mutex_prescreen; + pthread_mutex_t mutex_screen; + pthread_mutex_t mutex_update; pthread_mutex_t mutex_tst_tracef; pthread_mutex_t mutex_tracef; int nested_tracef; @@ -979,12 +987,24 @@ extern NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals; #define N_RIPS 5 +#ifdef USE_PTHREADS +typedef struct _prescreen_list { + struct _prescreen_list *next; + pthread_t id; + struct screen *sp; +} PRESCREEN_LIST; +#endif + /* * Global data which can be swept up into a SCREEN when one is created. * It may be modified before the next SCREEN is created. */ typedef struct { +#ifdef USE_PTHREADS + PRESCREEN_LIST *allocated; +#else struct screen * allocated; +#endif bool use_env; bool filter_mode; attr_t previous_attr; @@ -1026,6 +1046,12 @@ typedef struct { extern NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen; +typedef enum { + ewInitial = 0, + ewRunning, + ewSuspend +} ENDWIN; + /* * The SCREEN structure. */ @@ -1335,7 +1361,7 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; sp->_cbreak = 0; \ sp->_echo = TRUE; \ sp->_fifohead = -1; \ - sp->_endwin = TRUE; \ + sp->_endwin = ewSuspend; \ sp->_cursor = -1; \ SP_INIT_WINDOWLIST(sp); \ sp->_outch = NCURSES_OUTC_FUNC; \ @@ -1453,6 +1479,8 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; && (a).chars[3] == (b).chars[3] \ && (a).chars[4] == (b).chars[4] \ if_EXT_COLORS(&& (a).ext_color == (b).ext_color)) +#elif CCHARW_MAX > 0 +#error Inconsistent values for CCHARW_MAX #else #define CharEq(a,b) (!memcmp(&(a), &(b), sizeof(a))) #endif @@ -1680,7 +1708,7 @@ extern NCURSES_EXPORT(void) _nc_locked_tracef (const char *, ...) GCC_PRINTFLIKE typedef void VoidFunc(void); -#define TR_FUNC(value) ((const char*) &(value)) +#define TR_FUNC(value) ((const char*) (value)) #define NonNull(s) ((s) != 0 ? s : "") #define returnAttr(code) TRACE_RETURN(code,attr_t) @@ -1918,6 +1946,14 @@ extern NCURSES_EXPORT(void) _nc_expanded (void); #define getcwd(buf,len) getwd(buf) #endif +#define save_ttytype(termp) \ + if (TerminalType(termp).term_names != 0) { \ + _nc_STRNCPY(ttytype, \ + TerminalType(termp).term_names, \ + NAMESIZE - 1); \ + ttytype[NAMESIZE - 1] = '\0'; \ + } + /* charable.c */ #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(bool) _nc_is_charable(wchar_t); @@ -2006,17 +2042,32 @@ extern NCURSES_EXPORT(int) _nc_locale_breaks_acs(TERMINAL *); extern NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *, int, int *, int); extern NCURSES_EXPORT(void) _nc_tinfo_cmdch(TERMINAL *, int); +#ifdef USE_PTHREADS +extern NCURSES_EXPORT(SCREEN *) _nc_find_prescr(void); +extern NCURSES_EXPORT(void) _nc_forget_prescr(void); +#else +#define _nc_find_prescr() _nc_prescreen.allocated +#define _nc_forget_prescr() _nc_prescreen.allocated = 0 +#endif + /* lib_set_term.c */ extern NCURSES_EXPORT(int) _nc_ripoffline(int, int(*)(WINDOW*, int)); /* lib_setup.c */ +#if NO_LEAKS +#define ExitTerminfo(code) _nc_free_tinfo(code) +#else +#define ExitTerminfo(code) exit(code) +#endif + #define SETUP_FAIL ERR + #define ret_error(code, fmt, arg) if (errret) {\ *errret = code;\ returnCode(SETUP_FAIL);\ } else {\ fprintf(stderr, fmt, arg);\ - exit(EXIT_FAILURE);\ + ExitTerminfo(EXIT_FAILURE);\ } #define ret_error1(code, fmt, arg) ret_error(code, "'%s': " fmt, arg) @@ -2026,7 +2077,7 @@ extern NCURSES_EXPORT(int) _nc_ripoffline(int, int(*)(WINDOW*, int)); returnCode(SETUP_FAIL);\ } else {\ fprintf(stderr, msg);\ - exit(EXIT_FAILURE);\ + ExitTerminfo(EXIT_FAILURE);\ } /* lib_tstp.c */ @@ -2125,6 +2176,8 @@ extern NCURSES_EXPORT(void) _nc_import_termtype2(TERMTYPE2 *, const TERMTYPE *); #define _nc_export_termtype2(dst,src) /* nothing */ #define _nc_import_termtype2(dst,src) /* nothing */ #define _nc_free_termtype2(t) _nc_free_termtype(t) +/* also... */ +#define _nc_read_entry2 _nc_read_entry #endif #if NO_LEAKS