X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fcurses.priv.h;h=9ca0263a3033df7017f16d208f9c355d87d9beac;hp=b35f821559f5393f707b5b3adc3a153c1cc1ef0b;hb=c976a90788f3e50afc773670ff74c5270ecb48df;hpb=cdaf29481becd3e1c21baa574ac1ab88ea5f3d38 diff --git a/ncurses/curses.priv.h b/ncurses/curses.priv.h index b35f8215..9ca0263a 100644 --- a/ncurses/curses.priv.h +++ b/ncurses/curses.priv.h @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2018,2019 Free Software Foundation, Inc. * + * Copyright 2018-2019,2020 Thomas E. Dickey * + * Copyright 1998-2017,2018 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 +35,7 @@ ****************************************************************************/ /* - * $Id: curses.priv.h,v 1.618 2019/03/09 23:43:24 tom Exp $ + * $Id: curses.priv.h,v 1.628 2020/02/02 23:34:34 tom Exp $ * * curses.priv.h * @@ -239,6 +240,18 @@ extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t); #define S_ISREG(mode) ((mode & S_IFMT) == S_IFREG) #endif +/* + * POSIX ignores the "b", which c89 specified. Some very old systems do not + * accept it. + */ +#if USE_FOPEN_BIN_R +#define BIN_R "rb" +#define BIN_W "wb" +#else +#define BIN_R "r" +#define BIN_W "w" +#endif + /* * Scroll hints are useless when hashmap is used */ @@ -470,7 +483,14 @@ typedef union { #define SET_WINDOW_PAIR(w,p) (w)->_color = (p) #define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b) && GetPair(a) == GetPair(b)) -#define VIDATTR(sp,attr,pair) NCURSES_SP_NAME(vid_puts)(NCURSES_SP_ARGx attr, (NCURSES_PAIRS_T) pair, 0, NCURSES_OUTC_FUNC) +#define VIDPUTS(sp,attr,pair) do { \ + int vid_pair = pair; \ + NCURSES_SP_NAME(vid_puts)( \ + NCURSES_SP_ARGx attr, \ + (NCURSES_PAIRS_T) pair, \ + &vid_pair, \ + NCURSES_OUTC_FUNC); \ + } while (0) #else /* !NCURSES_EXT_COLORS */ @@ -483,7 +503,7 @@ typedef union { WINDOW_ATTRS(w) |= ColorPair(p) #define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b)) -#define VIDATTR(sp,attr,pair) NCURSES_SP_NAME(vidputs)(NCURSES_SP_ARGx attr, NCURSES_OUTC_FUNC) +#define VIDPUTS(sp,attr,pair) NCURSES_SP_NAME(vidputs)(NCURSES_SP_ARGx attr, NCURSES_OUTC_FUNC) #endif /* NCURSES_EXT_COLORS */ @@ -1747,12 +1767,16 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #define TPUTS_TRACE(s) _nc_tputs_trace = s; #endif +#ifdef HAVE_CONSISTENT_GETENV #define START_TRACE() \ if ((_nc_tracing & TRACE_MAXIMUM) == 0) { \ int t = _nc_getenv_num("NCURSES_TRACE"); \ if (t >= 0) \ - trace((unsigned) t); \ + curses_trace((unsigned) t); \ } +#else +#define START_TRACE() /* nothing */ +#endif /* * Many of the _tracef() calls use static buffers; lock the trace state before @@ -1939,7 +1963,7 @@ extern NCURSES_EXPORT(void) name (void); \ #if USE_XMC_SUPPORT #define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \ attr_t chg = AttrOf(SCREEN_ATTRS(sp)); \ - VIDATTR(sp, AttrOf(c), GetPair(c)); \ + VIDPUTS(sp, AttrOf(c), GetPair(c)); \ if (magic_cookie_glitch > 0 \ && XMC_CHANGES((chg ^ AttrOf(SCREEN_ATTRS(sp))))) { \ T(("%s @%d before glitch %d,%d", \ @@ -1951,7 +1975,7 @@ extern NCURSES_EXPORT(void) name (void); \ } #else #define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \ - VIDATTR(sp, AttrOf(c), GetPair(c)); \ + VIDPUTS(sp, AttrOf(c), GetPair(c)); \ } #endif @@ -2026,6 +2050,12 @@ extern NCURSES_EXPORT(void) _nc_expanded (void); ttytype[NAMESIZE - 1] = '\0'; \ } +#if !NCURSES_WCWIDTH_GRAPHICS +extern NCURSES_EXPORT(int) _nc_wacs_width(unsigned); +#else +#define _nc_wacs_width(ch) wcwidth(ch) +#endif + /* charable.c */ #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(bool) _nc_is_charable(wchar_t); @@ -2141,26 +2171,24 @@ extern NCURSES_EXPORT(void) _nc_forget_prescr(void); 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 ExitTerminfo(code) exit_terminfo(code) #define SETUP_FAIL ERR -#define ret_error(code, fmt, arg) if (errret) {\ - *errret = code;\ +#define ret_error(rc, fmt, p, q) if (errret) {\ + *errret = rc;\ + q;\ returnCode(SETUP_FAIL);\ } else {\ - fprintf(stderr, fmt, arg);\ + fprintf(stderr, fmt, p);\ + q;\ ExitTerminfo(EXIT_FAILURE);\ } -#define ret_error1(code, fmt, arg) ret_error(code, "'%s': " fmt, arg) +#define ret_error1(rc, fmt, p, q) ret_error(rc, "'%s': " fmt, p, q) -#define ret_error0(code, msg) if (errret) {\ - *errret = code;\ +#define ret_error0(rc, msg) if (errret) {\ + *errret = rc;\ returnCode(SETUP_FAIL);\ } else {\ fprintf(stderr, msg);\ @@ -2233,7 +2261,6 @@ extern NCURSES_EXPORT(int) _nc_timed_wait (SCREEN *, int, int, int * EVENTLIST_2 extern NCURSES_EXPORT(void) _nc_init_termtype (TERMTYPE2 *const); extern NCURSES_EXPORT(void) _nc_do_color (int, int, int, NCURSES_OUTC); extern NCURSES_EXPORT(void) _nc_flush (void); -extern NCURSES_EXPORT(void) _nc_free_and_exit (int) GCC_NORETURN; extern NCURSES_EXPORT(void) _nc_free_entry (ENTRY *, TERMTYPE2 *); extern NCURSES_EXPORT(void) _nc_freeall (void); extern NCURSES_EXPORT(void) _nc_hash_map (void);