X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fcurses.priv.h;h=179adfbf136fd16b46bd5b4bdc90b18dbe185f19;hp=9ca0263a3033df7017f16d208f9c355d87d9beac;hb=312665d3aaaf5d8e3ba34d80fdd650abf758272a;hpb=47d2fb4537d9ad5bb14f4810561a327930ca4280 diff --git a/ncurses/curses.priv.h b/ncurses/curses.priv.h index 9ca0263a..179adfbf 100644 --- a/ncurses/curses.priv.h +++ b/ncurses/curses.priv.h @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2018-2019,2020 Thomas E. Dickey * + * Copyright 2018-2020,2021 Thomas E. Dickey * * Copyright 1998-2017,2018 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * @@ -35,7 +35,7 @@ ****************************************************************************/ /* - * $Id: curses.priv.h,v 1.628 2020/02/02 23:34:34 tom Exp $ + * $Id: curses.priv.h,v 1.641 2021/04/03 22:12:56 tom Exp $ * * curses.priv.h * @@ -72,10 +72,6 @@ extern "C" { #include #endif -#if HAVE_SYS_BSDTYPES_H && !(defined(_WIN32) || defined(_WIN64)) -#include /* needed for ISC */ -#endif - #if HAVE_LIMITS_H # include #elif HAVE_SYS_PARAM_H @@ -107,6 +103,24 @@ extern "C" { extern int errno; #endif +/* Some Windows related defines */ +#undef _NC_WINDOWS +#if (defined(_WIN32) || defined(_WIN64)) +#define _NC_WINDOWS +#else +#undef EXP_WIN32_DRIVER +#endif + +#undef _NC_MINGW +#if (defined(__MINGW32__) || defined(__MINGW64__)) +#define _NC_MINGW +#endif + +#undef _NC_MSC +#ifdef _MSC_VER +#define _NC_MSC +#endif + /* Some systems have a broken 'select()', but workable 'poll()'. Use that */ #if HAVE_WORKING_POLL #define USE_FUNC_POLL 1 @@ -185,7 +199,7 @@ extern int errno; * the path separator in configure doesn't work properly. So, if building * for MinGW, we enforce the correct Windows PATH separator */ -#ifdef _WIN32 +#if defined(_NC_WINDOWS) # ifdef NCURSES_PATHSEP # undef NCURSES_PATHSEP # endif @@ -275,11 +289,20 @@ extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t); * Options for terminal drivers, etc... */ #ifdef USE_TERM_DRIVER +#define NO_TERMINAL "unknown" #define USE_SP_RIPOFF 1 #define USE_SP_TERMTYPE 1 #define USE_SP_WINDOWLIST 1 +#else +#define NO_TERMINAL 0 #endif +#define VALID_TERM_ENV(term_env, no_terminal) \ + (term_env = (NonEmpty(term_env) \ + ? term_env \ + : no_terminal), \ + NonEmpty(term_env)) + /* * Note: ht/cbt expansion flakes out randomly under Linux 1.1.47, but only * when we're throwing control codes at the screen at high volume. To see @@ -337,6 +360,10 @@ typedef TRIES { #include /* we'll use -Ipath directive to get the right one! */ +#if !(defined(NCURSES_WGETCH_EVENTS) && defined(NEED_KEY_EVENT)) +#undef KEY_EVENT /* reduce compiler-warnings with Visual C++ */ +#endif + typedef struct { int red, green, blue; /* what color_content() returns */ @@ -953,6 +980,11 @@ typedef struct { time_t dbd_time; /* cache last updated */ ITERATOR_VARS dbd_vars[dbdLAST]; +#if HAVE_TSEARCH + void *cached_tparm; + int count_tparm; +#endif /* HAVE_TSEARCH */ + #ifdef USE_TERM_DRIVER int (*term_driver)(struct DriverTCB*, const char*, int*); #endif @@ -1334,7 +1366,7 @@ struct screen { int _sysmouse_new_buttons; #endif -#ifdef USE_TERM_DRIVER +#if defined(USE_TERM_DRIVER) || defined(EXP_WIN32_DRIVER) MEVENT _drv_mouse_fifo[FIFO_SIZE]; int _drv_mouse_head; int _drv_mouse_tail; @@ -1517,7 +1549,7 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #if USE_WIDEC_SUPPORT /* { */ #define isEILSEQ(status) (((size_t)status == (size_t)-1) && (errno == EILSEQ)) -#define init_mb(state) memset(&state, 0, sizeof(state)) +#define init_mb(state) memset(&(state), 0, sizeof(state)) #if NCURSES_EXT_COLORS #define NulColor , 0 @@ -1551,14 +1583,14 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #endif #define SetChar(ch,c,a) do { \ - NCURSES_CH_T *_cp = &ch; \ + NCURSES_CH_T *_cp = &(ch); \ memset(_cp, 0, sizeof(ch)); \ _cp->chars[0] = (wchar_t) (c); \ _cp->attr = (a); \ if_EXT_COLORS(SetPair(ch, PairNumber(a))); \ } while (0) -#define CHREF(wch) (&wch) -#define CHDEREF(wch) (*wch) +#define CHREF(wch) (&(wch)) +#define CHDEREF(wch) (*(wch)) #define ARG_CH_T NCURSES_CH_T * #define CARG_CH_T const NCURSES_CH_T * #define PUTC_DATA char PUTC_buf[MB_LEN_MAX]; int PUTC_i, PUTC_n; \ @@ -1828,7 +1860,7 @@ extern NCURSES_EXPORT(SCREEN *) _nc_retrace_sp (SCREEN *); extern NCURSES_EXPORT(WINDOW *) _nc_retrace_win (WINDOW *); extern NCURSES_EXPORT(attr_t) _nc_retrace_attr_t (attr_t); extern NCURSES_EXPORT(char *) _nc_retrace_ptr (char *); -extern NCURSES_EXPORT(char *) _nc_trace_ttymode(TTY *tty); +extern NCURSES_EXPORT(char *) _nc_trace_ttymode(const TTY *tty); extern NCURSES_EXPORT(char *) _nc_varargs (const char *, va_list); extern NCURSES_EXPORT(chtype) _nc_retrace_chtype (chtype); extern NCURSES_EXPORT(const char *) _nc_altcharset_name(attr_t, chtype); @@ -2343,11 +2375,10 @@ extern NCURSES_EXPORT(int) _nc_eventlist_timeout(_nc_eventlist *); */ #if USE_WIDEC_SUPPORT -#if defined(_WIN32) +#if defined(_NC_WINDOWS) && !defined(_NC_MSC) && !defined(EXP_WIN32_DRIVER) /* * MinGW has wide-character functions, but they do not work correctly. */ - extern int __MINGW_NOTHROW _nc_wctomb(char *, wchar_t); #define wctomb(s,wc) _nc_wctomb(s,wc) #define wcrtomb(s,wc,n) _nc_wctomb(s,wc) @@ -2358,19 +2389,19 @@ extern int __MINGW_NOTHROW _nc_mbtowc(wchar_t *, const char *, size_t); extern int __MINGW_NOTHROW _nc_mblen(const char *, size_t); #define mblen(s,n) _nc_mblen(s, n) -#endif /* _WIN32 */ +#endif /* _NC_WINDOWS && !_NC_MSC */ #if HAVE_MBTOWC && HAVE_MBLEN #define reset_mbytes(state) IGNORE_RC(mblen(NULL, (size_t) 0)), IGNORE_RC(mbtowc(NULL, NULL, (size_t) 0)) #define count_mbytes(buffer,length,state) mblen(buffer,length) #define check_mbytes(wch,buffer,length,state) \ - (int) mbtowc(&wch, buffer, length) + (int) mbtowc(&(wch), buffer, length) #define state_unused #elif HAVE_MBRTOWC && HAVE_MBRLEN #define reset_mbytes(state) init_mb(state) -#define count_mbytes(buffer,length,state) mbrlen(buffer,length,&state) +#define count_mbytes(buffer,length,state) mbrlen(buffer,length,&(state)) #define check_mbytes(wch,buffer,length,state) \ - (int) mbrtowc(&wch, buffer, length, &state) + (int) mbrtowc(&(wch), buffer, length, &(state)) #else make an error #endif @@ -2580,6 +2611,10 @@ extern NCURSES_EXPORT(int) TINFO_MVCUR(SCREEN*, int, int, int, int); #define TINFO_MVCUR NCURSES_SP_NAME(_nc_mvcur) #endif +#if defined(EXP_WIN32_DRIVER) +#include +#endif + /* * Entrypoints using an extra parameter with the terminal driver. */ @@ -2602,6 +2637,9 @@ extern NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *, int *, int *); _nc_setupterm(name, fd, err, reuse) #endif /* !USE_TERM_DRIVER */ +#ifdef EXP_WIN32_DRIVER +extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_TINFO_DRIVER; +#else #ifdef USE_TERM_DRIVER #if defined(USE_WIN32CON_DRIVER) #include @@ -2619,9 +2657,12 @@ extern NCURSES_EXPORT(int) _nc_mingw_testmouse( #else #endif extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_TINFO_DRIVER; -#endif +#endif /* USE_TERM_DRIVER */ +#endif /* EXP_WIN32_DRIVER */ -#if defined(USE_TERM_DRIVER) && defined(USE_WIN32CON_DRIVER) +#if defined(USE_TERM_DRIVER) && defined(EXP_WIN32_DRIVER) +#define NC_ISATTY(fd) (0 != _nc_console_isatty(fd)) +#elif defined(USE_TERM_DRIVER) && defined(USE_WIN32CON_DRIVER) #define NC_ISATTY(fd) _nc_mingw_isatty(fd) #else #define NC_ISATTY(fd) isatty(fd) @@ -2630,15 +2671,21 @@ extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_TINFO_DRIVER; #ifdef USE_TERM_DRIVER # define IsTermInfo(sp) ((TCBOf(sp) != 0) && ((TCBOf(sp)->drv->isTerminfo))) # define HasTInfoTerminal(sp) ((0 != TerminalOf(sp)) && IsTermInfo(sp)) -# if defined(USE_WIN32CON_DRIVER) -# define IsTermInfoOnConsole(sp) (IsTermInfo(sp)&&_nc_mingw_isconsole(TerminalOf(sp)->Filedes)) -#else +# if defined(EXP_WIN32_DRIVER) +# define IsTermInfoOnConsole(sp) (IsTermInfo(sp) && _nc_console_test(TerminalOf(sp)->Filedes)) +# elif defined(USE_WIN32CON_DRIVER) +# define IsTermInfoOnConsole(sp) (IsTermInfo(sp) && _nc_mingw_isconsole(TerminalOf(sp)->Filedes)) +# else # define IsTermInfoOnConsole(sp) FALSE # endif #else # define IsTermInfo(sp) TRUE # define HasTInfoTerminal(sp) (0 != TerminalOf(sp)) -# define IsTermInfoOnConsole(sp) FALSE +# if defined(EXP_WIN32_DRIVER) +# define IsTermInfoOnConsole(sp) _nc_console_test(TerminalOf(sp)->Filedes) +# else +# define IsTermInfoOnConsole(sp) FALSE +# endif #endif #define IsValidTIScreen(sp) (HasTInfoTerminal(sp)) @@ -2686,7 +2733,7 @@ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_tgetent)(SCREEN*,char*,const extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_color)(SCREEN*, int, int, int, NCURSES_SP_OUTC); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_xmc_glitch)(SCREEN*, attr_t); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_flush)(SCREEN*); -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit)(SCREEN*, int) GCC_NORETURN; +extern GCC_NORETURN NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit)(SCREEN*, int); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_freeall)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_hash_map)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_init_acs)(SCREEN*);