X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fcurses.priv.h;h=5fbb7b9ae692c7b5e67bc621610426ce715bbe39;hp=0018291d860c0d0fc79aad10b8168bff1c9c9618;hb=ba39fbc2e0cee4681395df4079d9e61c27262132;hpb=d49a800c7f54c8d9e77f745423c821a8535ada59 diff --git a/ncurses/curses.priv.h b/ncurses/curses.priv.h index 0018291d..5fbb7b9a 100644 --- a/ncurses/curses.priv.h +++ b/ncurses/curses.priv.h @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * + * Copyright (c) 1998-2011,2012 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 * @@ -33,9 +33,8 @@ * and: Juergen Pfeifer * ****************************************************************************/ - /* - * $Id: curses.priv.h,v 1.452 2010/03/06 19:15:50 tom Exp $ + * $Id: curses.priv.h,v 1.499 2012/03/10 21:16:32 tom Exp $ * * curses.priv.h * @@ -46,6 +45,7 @@ #ifndef CURSES_PRIV_H #define CURSES_PRIV_H 1 +/* *INDENT-OFF* */ #include @@ -65,6 +65,7 @@ extern "C" { #include #include #include +#include #if HAVE_UNISTD_H #include @@ -111,6 +112,14 @@ extern int errno; #define USE_FUNC_POLL 0 #endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif + /* include signal.h before curses.h to work-around defect in glibc 2.1.3 */ #include @@ -135,6 +144,15 @@ extern int errno; #define USE_EMX_MOUSE 0 #endif +/* kLIBC keyboard/mouse support */ +#if defined(__OS2__) && defined(__KLIBC__) +#define USE_KLIBC_KBD 1 +#define USE_KLIBC_MOUSE 1 +#else +#define USE_KLIBC_KBD 0 +#define USE_KLIBC_MOUSE 0 +#endif + #define DEFAULT_MAXCLICK 166 #define EV_MAX 8 /* size of mouse circular event queue */ @@ -191,6 +209,18 @@ extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t); #define end_va_copy(dst) /* nothing */ #endif +/* + * Either/both S_ISxxx and/or S_IFxxx are defined in sys/types.h; some systems + * lack one or the other. + */ +#ifndef S_ISDIR +#define S_ISDIR(mode) ((mode & S_IFMT) == S_IFDIR) +#endif + +#ifndef S_ISREG +#define S_ISREG(mode) ((mode & S_IFMT) == S_IFREG) +#endif + /* * Scroll hints are useless when hashmap is used */ @@ -208,6 +238,8 @@ extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t); #define if_USE_SCROLL_HINTS(stmt) /*nothing*/ #endif +#include + /* * Options for terminal drivers, etc... */ @@ -270,6 +302,7 @@ color_t; #define _nc_bkgd _bkgrnd #else #undef _XOPEN_SOURCE_EXTENDED +#undef _XPG5 #define _nc_bkgd _bkgd #define wgetbkgrnd(win, wch) *wch = win->_bkgd #define wbkgrnd wbkgd @@ -285,6 +318,10 @@ color_t; * If curses.h did not expose the SCREEN-functions, then we do not need the * parameter in the corresponding unextended functions. */ + +#define USE_SP_FUNC_SUPPORT NCURSES_SP_FUNCS +#define USE_EXT_SP_FUNC_SUPPORT (NCURSES_SP_FUNCS && NCURSES_EXT_FUNCS) + #if NCURSES_SP_FUNCS #define SP_PARM sp /* use parameter */ #define NCURSES_SP_ARG SP_PARM @@ -320,6 +357,7 @@ color_t; #endif #include +#include /* * Reduce dependency on cur_term global by using terminfo data from SCREEN's @@ -335,34 +373,54 @@ color_t; #include -#if NCURSES_EXT_COLORS && USE_WIDEC_SUPPORT +/* + * Use these macros internally, to make tracing less verbose. But leave the + * option for compiling the tracing into the library. + */ +#if 1 +#define ColorPair(n) NCURSES_BITS(n, 0) +#define PairNumber(a) (NCURSES_CAST(int,(((unsigned long)(a) & A_COLOR) >> NCURSES_ATTR_SHIFT))) +#else +#define ColorPair(pair) COLOR_PAIR(pair) +#define PairNumber(attr) PAIR_NUMBER(attr) +#endif + +#define unColor(n) unColor2(AttrOf(n)) +#define unColor2(a) ((a) & ALL_BUT_COLOR) + +/* + * Extended-colors stores the color pair in a separate struct-member than the + * attributes. But for compatibility, we handle most cases where a program + * written for non-extended colors stores the color in the attributes by + * checking for a color pair in both places. + */ +#if NCURSES_EXT_COLORS #define if_EXT_COLORS(stmt) stmt -#define NetPair(value,p) (value).ext_color = (p), \ - AttrOf(value) &= ALL_BUT_COLOR, \ - AttrOf(value) |= (A_COLOR & COLOR_PAIR((p > 255) ? 255 : p)) -#define SetPair(value,p) (value).ext_color = (p) -#define GetPair(value) (value).ext_color -#define unColor(n) (AttrOf(n) & ALL_BUT_COLOR) -#define GET_WINDOW_PAIR(w) (w)->_color +#define SetPair(value,p) SetPair2((value).ext_color, AttrOf(value), p) +#define SetPair2(c,a,p) c = (p), \ + a = (unColor2(a) | (A_COLOR & (unsigned) ColorPair(oldColor(c)))) +#define GetPair(value) GetPair2((value).ext_color, AttrOf(value)) +#define GetPair2(c,a) ((c) ? (c) : PairNumber(a)) +#define oldColor(p) (((p) > 255) ? 255 : (p)) +#define GET_WINDOW_PAIR(w) GetPair2((w)->_color, (w)->_attrs) #define SET_WINDOW_PAIR(w,p) (w)->_color = (p) #define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b) && GetPair(a) == GetPair(b)) #if NCURSES_SP_FUNCS -#define VIDATTR(sp,attr,pair) NCURSES_SP_NAME(vid_attr)(sp, attr, pair, 0) +#define VIDATTR(sp,attr,pair) NCURSES_SP_NAME(vid_attr)(sp, attr, (short) pair, 0) #else -#define VIDATTR(sp,attr,pair) vid_attr(attr, pair, 0) +#define VIDATTR(sp,attr,pair) vid_attr(attr, (short) pair, 0) #endif -#else /* !(NCURSES_EXT_COLORS && USE_WIDEC_SUPPORT) */ +#else /* !NCURSES_EXT_COLORS */ #define if_EXT_COLORS(stmt) /* nothing */ #define SetPair(value,p) RemAttr(value, A_COLOR), \ - SetAttr(value, AttrOf(value) | (A_COLOR & COLOR_PAIR(p))) -#define GetPair(value) PAIR_NUMBER(AttrOf(value)) -#define unColor(n) (AttrOf(n) & ALL_BUT_COLOR) -#define GET_WINDOW_PAIR(w) PAIR_NUMBER(WINDOW_ATTRS(w)) + SetAttr(value, AttrOf(value) | (A_COLOR & (attr_t) ColorPair(p))) +#define GetPair(value) PairNumber(AttrOf(value)) +#define GET_WINDOW_PAIR(w) PairNumber(WINDOW_ATTRS(w)) #define SET_WINDOW_PAIR(w,p) WINDOW_ATTRS(w) &= ALL_BUT_COLOR, \ - WINDOW_ATTRS(w) |= (A_COLOR & COLOR_PAIR(p)) + WINDOW_ATTRS(w) |= (A_COLOR & (attr_t) ColorPair(p)) #define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b)) #if NCURSES_SP_FUNCS @@ -371,7 +429,7 @@ color_t; #define VIDATTR(sp,attr,pair) vidattr(attr) #endif -#endif /* NCURSES_EXT_COLORS && USE_WIDEC_SUPPORT */ +#endif /* NCURSES_EXT_COLORS */ #if NCURSES_NO_PADDING #define GetNoPadding(sp) ((sp) ? (sp)->_no_padding : _nc_prescreen._no_padding) @@ -432,6 +490,22 @@ NCURSES_EXPORT(int *) _nc_ptr_Escdelay (SCREEN *); data.__data.__nusers) #define TR_GLOBAL_MUTEX(name) TR_MUTEX(_nc_globals.mutex_##name) +#if USE_WEAK_SYMBOLS +#if defined(__GNUC__) +# if defined __USE_ISOC99 +# define _cat_pragma(exp) _Pragma(#exp) +# define _weak_pragma(exp) _cat_pragma(weak name) +# else +# define _weak_pragma(exp) +# endif +# define _declare(name) __extension__ extern __typeof__(name) name +# define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak)) +#else +# undef USE_WEAK_SYMBOLS +# define USE_WEAK_SYMBOLS 0 +#endif +#endif + #ifdef USE_PTHREADS #if USE_REENTRANT @@ -449,22 +523,10 @@ extern NCURSES_EXPORT(int) _nc_mutex_unlock(pthread_mutex_t *); #error POSIX threads requires --enable-reentrant option #endif -#if USE_WEAK_SYMBOLS -#if defined(__GNUC__) -# if defined __USE_ISOC99 -# define _cat_pragma(exp) _Pragma(#exp) -# define _weak_pragma(exp) _cat_pragma(weak name) -# else -# define _weak_pragma(exp) -# endif -# define _declare(name) __extension__ extern __typeof__(name) name -# define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak)) -#endif -#endif - #ifdef USE_PTHREADS # if USE_WEAK_SYMBOLS weak_symbol(pthread_sigmask); +weak_symbol(pthread_kill); weak_symbol(pthread_self); weak_symbol(pthread_equal); weak_symbol(pthread_mutex_init); @@ -486,6 +548,19 @@ extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *); #else /* !USE_PTHREADS */ +#if USE_PTHREADS_EINTR +# if USE_WEAK_SYMBOLS +#include +weak_symbol(pthread_sigmask); +weak_symbol(pthread_kill); +weak_symbol(pthread_self); +weak_symbol(pthread_equal); +extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *); +# undef sigprocmask +# define sigprocmask _nc_sigprocmask +# endif +#endif /* USE_PTHREADS_EINTR */ + #define _nc_init_pthreads() /* nothing */ #define _nc_mutex_init(obj) /* nothing */ @@ -539,14 +614,14 @@ extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *); typedef unsigned colorpair_t; /* type big enough to store PAIR_OF() */ #define C_SHIFT 9 /* we need more bits than there are colors */ #define C_MASK ((1 << C_SHIFT) - 1) -#define PAIR_OF(fg, bg) ((((fg) & C_MASK) << C_SHIFT) | ((bg) & C_MASK)) +#define PAIR_OF(fg, bg) (colorpair_t) ((((fg) & C_MASK) << C_SHIFT) | ((bg) & C_MASK)) #define FORE_OF(c) (((c) >> C_SHIFT) & C_MASK) #define BACK_OF(c) ((c) & C_MASK) #define isDefaultColor(c) ((c) >= COLOR_DEFAULT || (c) < 0) #define COLOR_DEFAULT C_MASK -#if defined(USE_TERMLIB) && !defined(NEED_NCURSES_CH_T) +#if defined(USE_BUILD_CC) || (defined(USE_TERMLIB) && !defined(NEED_NCURSES_CH_T)) #undef NCURSES_CH_T /* this is not a termlib feature */ #define NCURSES_CH_T void /* ...but we need a pointer in SCREEN */ @@ -593,7 +668,7 @@ typedef struct { struct _SLK; -#ifndef USE_TERMLIB +#if !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) typedef struct { @@ -626,6 +701,9 @@ typedef struct { #if USE_GPM_SUPPORT #undef buttons /* term.h defines this, and gpm uses it! */ #include +#if USE_WEAK_SYMBOLS +weak_symbol(Gpm_Wgetch); +#endif #ifdef HAVE_LIBDL /* link dynamically to GPM */ @@ -727,6 +805,11 @@ struct DriverTCB; /* Terminal Control Block forward declaration */ #define INIT_TERM_DRIVER() /* nothing */ #endif +typedef struct { + const char *name; + char *value; +} ITERATOR_VARS; + /* * Global data which is not specific to a screen. */ @@ -737,7 +820,7 @@ typedef struct { bool init_signals; bool init_screen; - const char *comp_sourcename; + char *comp_sourcename; char *comp_termtype; bool have_tic_directory; @@ -759,6 +842,12 @@ typedef struct { int tgetent_index; long tgetent_sequence; + char *dbd_blob; /* string-heap for dbd_list[] */ + char **dbd_list; /* distinct places to look for data */ + int dbd_size; /* length of dbd_list[] */ + time_t dbd_time; /* cache last updated */ + ITERATOR_VARS dbd_vars[dbdLAST]; + #ifndef USE_SP_WINDOWLIST WINDOWLIST *_nc_windowlist; #define WindowList(sp) _nc_globals._nc_windowlist @@ -813,6 +902,9 @@ typedef struct { int use_pthreads; #define _nc_use_pthreads _nc_globals.use_pthreads #endif +#if USE_PTHREADS_EINTR + pthread_t read_thread; /* The reading thread */ +#endif } NCURSES_GLOBALS; extern NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals; @@ -973,6 +1065,7 @@ struct screen { int _pair_count; /* count of color pairs */ int _pair_limit; /* actual limit of color-pairs */ #if NCURSES_EXT_FUNCS + bool _assumed_color; /* use assumed colors */ bool _default_color; /* use default colors */ bool _has_sgr_39_49; /* has ECMA default color support */ int _default_fg; /* assumed default foreground */ @@ -990,6 +1083,10 @@ struct screen { bool _use_rmso; /* true if we may use 'rmso' */ bool _use_rmul; /* true if we may use 'rmul' */ +#if USE_KLIBC_KBD + bool _extended_key; /* true if an extended key */ +#endif + /* * These data correspond to the state of the idcok() and idlok() * functions. A caveat is in order here: the XSI and SVr4 @@ -1013,7 +1110,9 @@ struct screen { void (*_mouse_wrap) (SCREEN *); int _mouse_fd; /* file-descriptor, if any */ bool _mouse_active; /* true if initialized */ - mmask_t _mouse_mask; + mmask_t _mouse_mask; /* set via mousemask() */ + mmask_t _mouse_mask2; /* OR's in press/release bits */ + mmask_t _mouse_bstate; NCURSES_CONST char *_mouse_xtermcap; /* string to enable/disable mouse */ MEVENT _mouse_events[EV_MAX]; /* hold the last mouse event seen */ MEVENT *_mouse_eventp; /* next free slot in event queue */ @@ -1126,7 +1225,7 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; WINDOWLIST *next; SCREEN *screen; /* screen containing the window */ WINDOW win; /* WINDOW_EXT() needs to account for offset */ -#ifdef _XOPEN_SOURCE_EXTENDED +#if NCURSES_WIDECHAR char addch_work[(MB_LEN_MAX * 9) + 1]; unsigned addch_used; /* number of bytes in addch_work[] */ int addch_x; /* x-position for addch_work[] */ @@ -1134,7 +1233,7 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #endif }; -#define WINDOW_EXT(w,m) (((WINDOWLIST *)((char *)(w) - offsetof(WINDOWLIST, win)))->m) +#define WINDOW_EXT(w,m) (((WINDOWLIST *)((void *)((char *)(w) - offsetof(WINDOWLIST, win))))->m) #define SP_PRE_INIT(sp) \ sp->_cursrow = -1; \ @@ -1224,6 +1323,7 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #define RESET_OUTCHARS() COUNT_OUTCHARS(-_nc_outchars) #define UChar(c) ((unsigned char)(c)) +#define UShort(c) ((unsigned short)(c)) #define ChCharOf(c) ((c) & (chtype)A_CHARTEXT) #define ChAttrOf(c) ((c) & (chtype)A_ATTRIBUTES) @@ -1268,9 +1368,9 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #define SetChar(ch,c,a) do { \ NCURSES_CH_T *_cp = &ch; \ memset(_cp, 0, sizeof(ch)); \ - _cp->chars[0] = (c); \ + _cp->chars[0] = (wchar_t) (c); \ _cp->attr = (a); \ - if_EXT_COLORS(SetPair(ch, PAIR_NUMBER(a))); \ + if_EXT_COLORS(SetPair(ch, PairNumber(a))); \ } while (0) #define CHREF(wch) (&wch) #define CHDEREF(wch) (*wch) @@ -1289,14 +1389,14 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; PUTC_ch = (ch).chars[PUTC_i]; \ if (PUTC_ch == L'\0') \ break; \ - PUTC_n = wcrtomb(PUTC_buf, \ - (ch).chars[PUTC_i], &PUT_st); \ + PUTC_n = (int) wcrtomb(PUTC_buf, \ + (ch).chars[PUTC_i], &PUT_st); \ if (PUTC_n <= 0) { \ if (PUTC_ch && is8bits(PUTC_ch) && PUTC_i == 0) \ putc(PUTC_ch,b); \ break; \ } \ - IGNORE_RC(fwrite(PUTC_buf, (unsigned) PUTC_n, 1, b)); \ + IGNORE_RC(fwrite(PUTC_buf, (size_t) PUTC_n, (size_t) 1, b)); \ } \ COUNT_OUTCHARS(PUTC_i); \ } } } while (0) @@ -1312,11 +1412,11 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; * zero. Otherwise we can use those bits to tell if a cell is the * first or extension part of a wide character. */ -#define WidecExt(ch) (AttrOf(ch) & A_CHARTEXT) +#define WidecExt(ch) (int) (AttrOf(ch) & A_CHARTEXT) #define isWidecBase(ch) (WidecExt(ch) == 1) #define isWidecExt(ch) (WidecExt(ch) > 1 && WidecExt(ch) < 32) #define SetWidecExt(dst, ext) AttrOf(dst) &= ~A_CHARTEXT, \ - AttrOf(dst) |= (ext + 1) + AttrOf(dst) |= (attr_t) (ext + 1) #define if_WIDEC(code) code #define Charable(ch) ((SP_PARM != 0 && SP_PARM->_legacy_coding) \ @@ -1369,25 +1469,25 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #define CHANGED_CELL(line,col) \ if (line->firstchar == _NOCHANGE) \ - line->firstchar = line->lastchar = col; \ + line->firstchar = line->lastchar = (NCURSES_SIZE_T) (col); \ else if ((col) < line->firstchar) \ - line->firstchar = col; \ + line->firstchar = (NCURSES_SIZE_T) (col); \ else if ((col) > line->lastchar) \ - line->lastchar = col + line->lastchar = (NCURSES_SIZE_T) (col) #define CHANGED_RANGE(line,start,end) \ if (line->firstchar == _NOCHANGE \ || line->firstchar > (start)) \ - line->firstchar = start; \ + line->firstchar = (NCURSES_SIZE_T) (start); \ if (line->lastchar == _NOCHANGE \ || line->lastchar < (end)) \ - line->lastchar = end + line->lastchar = (NCURSES_SIZE_T) (end) #define CHANGED_TO_EOL(line,start,end) \ if (line->firstchar == _NOCHANGE \ || line->firstchar > (start)) \ - line->firstchar = start; \ - line->lastchar = end + line->firstchar = (NCURSES_SIZE_T) (start); \ + line->lastchar = (NCURSES_SIZE_T) (end) #define SIZEOF(v) (sizeof(v)/sizeof(v[0])) @@ -1463,7 +1563,9 @@ extern NCURSES_EXPORT(void) _nc_locked_tracef (const char *, ...) GCC_PRINTFLIKE #define TR(n, a) if (USE_TRACEF(n)) _nc_locked_tracef a #define T(a) TR(TRACE_CALLS, a) -#define TRACE_RETURN(value,type) return _nc_retrace_##type(value) +#define TRACE_RETURN(value,type) return _nc_retrace_##type(value) +#define TRACE_RETURN2(value,dst,src) return _nc_retrace_##dst##_##src(value) +#define TRACE_RETURN_SP(value,type) return _nc_retrace_##type(SP_PARM, value) #define NonNull(s) ((s) != 0 ? s : "") @@ -1475,13 +1577,15 @@ extern NCURSES_EXPORT(void) _nc_locked_tracef (const char *, ...) GCC_PRINTFLIKE #define returnChar(code) TRACE_RETURN(code,char) #define returnChtype(code) TRACE_RETURN(code,chtype) #define returnCode(code) TRACE_RETURN(code,int) +#define returnIntAttr(code) TRACE_RETURN2(code,int,attr_t) +#define returnMMask(code) TRACE_RETURN_SP(code,mmask_t) #define returnPtr(code) TRACE_RETURN(code,ptr) #define returnSP(code) TRACE_RETURN(code,sp) #define returnVoid T((T_RETURN(""))); return #define returnVoidPtr(code) TRACE_RETURN(code,void_ptr) #define returnWin(code) TRACE_RETURN(code,win) -extern NCURSES_EXPORT(NCURSES_BOOL) _nc_retrace_bool (NCURSES_BOOL); +extern NCURSES_EXPORT(NCURSES_BOOL) _nc_retrace_bool (int); extern NCURSES_EXPORT(NCURSES_CONST void *) _nc_retrace_cvoid_ptr (NCURSES_CONST void *); extern NCURSES_EXPORT(SCREEN *) _nc_retrace_sp (SCREEN *); extern NCURSES_EXPORT(WINDOW *) _nc_retrace_win (WINDOW *); @@ -1492,8 +1596,10 @@ 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); extern NCURSES_EXPORT(const char *) _nc_retrace_cptr (const char *); -extern NCURSES_EXPORT(char) _nc_retrace_char (char); +extern NCURSES_EXPORT(char) _nc_retrace_char (int); extern NCURSES_EXPORT(int) _nc_retrace_int (int); +extern NCURSES_EXPORT(int) _nc_retrace_int_attr_t (attr_t); +extern NCURSES_EXPORT(mmask_t) _nc_retrace_mmask_t (SCREEN *, mmask_t); extern NCURSES_EXPORT(unsigned) _nc_retrace_unsigned (unsigned); extern NCURSES_EXPORT(void *) _nc_retrace_void_ptr (void *); extern NCURSES_EXPORT(void) _nc_fifo_dump (SCREEN *); @@ -1536,6 +1642,8 @@ extern NCURSES_EXPORT(const char *) _nc_viscbuf (const NCURSES_CH_T *, int); #define returnChar(code) return ((char) code) #define returnChtype(code) return code #define returnCode(code) return code +#define returnIntAttr(code) return code +#define returnMMask(code) return code #define returnPtr(code) return code #define returnSP(code) return code #define returnVoid return @@ -1548,7 +1656,7 @@ extern NCURSES_EXPORT(const char *) _nc_viscbuf (const NCURSES_CH_T *, int); * Workaround for defective implementation of gcc attribute warn_unused_result */ #if defined(__GNUC__) && defined(_FORTIFY_SOURCE) -#define IGNORE_RC(func) errno = func +#define IGNORE_RC(func) errno = (int) func #else #define IGNORE_RC(func) (void) func #endif /* gcc workarounds */ @@ -1572,16 +1680,16 @@ extern NCURSES_EXPORT(void) name (void); \ #define XMC_CHANGES(c) ((c) & SP_PARM->_xmc_suppress) #define toggle_attr_on(S,at) {\ - if (PAIR_NUMBER(at) > 0) {\ - (S) = ((S) & ALL_BUT_COLOR) | (at);\ + if (PairNumber(at) > 0) {\ + (S) = ((S) & ALL_BUT_COLOR) | (attr_t) (at);\ } else {\ - (S) |= (at);\ + (S) |= (attr_t) (at);\ }\ TR(TRACE_ATTRS, ("new attribute is %s", _traceattr((S))));} #define toggle_attr_off(S,at) {\ - if (PAIR_NUMBER(at) > 0) {\ + if (PairNumber(at) > 0) {\ (S) &= ~(at|A_COLOR);\ } else {\ (S) &= ~(at);\ @@ -1605,7 +1713,7 @@ extern NCURSES_EXPORT(void) name (void); \ : INFINITY))) #if USE_XMC_SUPPORT -#define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \ +#define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \ attr_t chg = AttrOf(SCREEN_ATTRS(sp)); \ VIDATTR(sp, AttrOf(c), GetPair(c)); \ if (magic_cookie_glitch > 0 \ @@ -1618,8 +1726,9 @@ extern NCURSES_EXPORT(void) name (void); \ } \ } #else -#define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) \ - VIDATTR(sp, AttrOf(c), GetPair(c)); +#define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \ + VIDATTR(sp, AttrOf(c), GetPair(c)); \ + } #endif /* @@ -1629,10 +1738,12 @@ extern NCURSES_EXPORT(void) name (void); \ #define EVENTLIST_0th(param) param #define EVENTLIST_1st(param) param #define EVENTLIST_2nd(param) , param +#define TWAIT_MASK (TW_ANY | TW_EVENT) #else #define EVENTLIST_0th(param) void #define EVENTLIST_1st(param) /* nothing */ #define EVENTLIST_2nd(param) /* nothing */ +#define TWAIT_MASK TW_ANY #endif #if NCURSES_EXPANDED && NCURSES_EXT_FUNCS @@ -1657,7 +1768,7 @@ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_InsCharCost) (NCURSES_SP_DCLx int #undef UpdateAttrs #define UpdateAttrs(sp,c) NCURSES_SP_NAME(_nc_UpdateAttrs)(NCURSES_SP_ARGx CHREF(c)) -#if defined(NEED_NCURSES_CH_T) +#if USE_WIDEC_SUPPORT || defined(NEED_NCURSES_CH_T) extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_UpdateAttrs) (NCURSES_SP_DCLx CARG_CH_T _c); #else extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_UpdateAttrs) (NCURSES_SP_DCLx chtype c); @@ -1725,7 +1836,7 @@ NCURSES_EXPORT(int) _nc_build_wch(WINDOW *win, ARG_CH_T ch); #endif /* lib_addstr.c */ -#if USE_WIDEC_SUPPORT && !defined(USE_TERMLIB) +#if USE_WIDEC_SUPPORT && !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) extern NCURSES_EXPORT(int) _nc_wchstrlen(const cchar_t *); #endif @@ -1733,7 +1844,7 @@ extern NCURSES_EXPORT(int) _nc_wchstrlen(const cchar_t *); extern NCURSES_EXPORT(bool) _nc_reset_colors(void); /* lib_getch.c */ -extern NCURSES_EXPORT(int) _nc_wgetch(WINDOW *, unsigned long *, int EVENTLIST_2nd(_nc_eventlist *)); +extern NCURSES_EXPORT(int) _nc_wgetch(WINDOW *, int *, int EVENTLIST_2nd(_nc_eventlist *)); /* lib_insch.c */ extern NCURSES_EXPORT(int) _nc_insert_ch(SCREEN *, WINDOW *, chtype); @@ -1762,12 +1873,31 @@ extern NCURSES_EXPORT(bool) _nc_has_mouse (SCREEN *); extern NCURSES_EXPORT(char *) _nc_get_locale(void); extern NCURSES_EXPORT(int) _nc_unicode_locale(void); extern NCURSES_EXPORT(int) _nc_locale_breaks_acs(TERMINAL *); -extern NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *, int, int *, bool); -extern NCURSES_EXPORT(void) _nc_tinfo_cmdch(TERMINAL *, char); +extern NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *, int, int *, int); +extern NCURSES_EXPORT(void) _nc_tinfo_cmdch(TERMINAL *, int); /* lib_set_term.c */ extern NCURSES_EXPORT(int) _nc_ripoffline(int, int(*)(WINDOW*, int)); +/* lib_setup.c */ +#define ret_error(code, fmt, arg) if (errret) {\ + *errret = code;\ + returnCode(ERR);\ + } else {\ + fprintf(stderr, fmt, arg);\ + exit(EXIT_FAILURE);\ + } + +#define ret_error1(code, fmt, arg) ret_error(code, "'%s': " fmt, arg) + +#define ret_error0(code, msg) if (errret) {\ + *errret = code;\ + returnCode(ERR);\ + } else {\ + fprintf(stderr, msg);\ + exit(EXIT_FAILURE);\ + } + /* lib_tstp.c */ #if USE_SIGWINCH extern NCURSES_EXPORT(int) _nc_handle_sigwinch(SCREEN *); @@ -1821,15 +1951,16 @@ extern NCURSES_EXPORT(int) _nc_access (const char *, int); extern NCURSES_EXPORT(int) _nc_baudrate (int); extern NCURSES_EXPORT(int) _nc_freewin (WINDOW *); extern NCURSES_EXPORT(int) _nc_getenv_num (const char *); -extern NCURSES_EXPORT(int) _nc_keypad (SCREEN *, bool); +extern NCURSES_EXPORT(int) _nc_keypad (SCREEN *, int); extern NCURSES_EXPORT(int) _nc_ospeed (int); extern NCURSES_EXPORT(int) _nc_outch (int); extern NCURSES_EXPORT(int) _nc_putp(const char *, const char *); extern NCURSES_EXPORT(int) _nc_putp_flush(const char *, const char *); extern NCURSES_EXPORT(int) _nc_read_termcap_entry (const char *const, TERMTYPE *const); -extern NCURSES_EXPORT(int) _nc_setupscreen (int, int, FILE *, bool, int); +extern NCURSES_EXPORT(int) _nc_setupscreen (int, int, FILE *, int, int); +extern NCURSES_EXPORT(int) _nc_setup_tinfo(const char *, TERMTYPE *); extern NCURSES_EXPORT(int) _nc_timed_wait (SCREEN *, int, int, int * EVENTLIST_2nd(_nc_eventlist *)); -extern NCURSES_EXPORT(void) _nc_do_color (short, short, bool, NCURSES_OUTC); +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 *, TERMTYPE *); @@ -1840,8 +1971,8 @@ extern NCURSES_EXPORT(void) _nc_keep_tic_dir (const char *); extern NCURSES_EXPORT(void) _nc_make_oldhash (int i); extern NCURSES_EXPORT(void) _nc_scroll_oldhash (int n, int top, int bot); 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_set_buffer (FILE *, int); +extern NCURSES_EXPORT(void) _nc_signal_handler (int); extern NCURSES_EXPORT(void) _nc_synchook (WINDOW *); extern NCURSES_EXPORT(void) _nc_trace_tries (TRIES *); @@ -1850,23 +1981,25 @@ extern NCURSES_EXPORT(void) _nc_alloc_entry_leaks(void); extern NCURSES_EXPORT(void) _nc_captoinfo_leaks(void); extern NCURSES_EXPORT(void) _nc_codes_leaks(void); extern NCURSES_EXPORT(void) _nc_comp_captab_leaks(void); +extern NCURSES_EXPORT(void) _nc_comp_error_leaks(void); extern NCURSES_EXPORT(void) _nc_comp_scan_leaks(void); +extern NCURSES_EXPORT(void) _nc_db_iterator_leaks(void); extern NCURSES_EXPORT(void) _nc_keyname_leaks(void); extern NCURSES_EXPORT(void) _nc_names_leaks(void); extern NCURSES_EXPORT(void) _nc_tgetent_leaks(void); #endif -#ifndef USE_TERMLIB +#if !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) extern NCURSES_EXPORT(NCURSES_CH_T) _nc_render (WINDOW *, NCURSES_CH_T); extern NCURSES_EXPORT(int) _nc_waddch_nosync (WINDOW *, const NCURSES_CH_T); -extern NCURSES_EXPORT(void) _nc_scroll_window (WINDOW *, int const, NCURSES_SIZE_T const, NCURSES_SIZE_T const, NCURSES_CH_T); +extern NCURSES_EXPORT(void) _nc_scroll_window (WINDOW *, int const, int const, int const, NCURSES_CH_T); #endif #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(int) _nc_insert_wch(WINDOW *, const cchar_t *); #endif -#if USE_WIDEC_SUPPORT && !defined(USE_TERMLIB) +#if USE_WIDEC_SUPPORT && !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) extern NCURSES_EXPORT(size_t) _nc_wcrtomb (char *, wchar_t, mbstate_t *); #endif @@ -1892,7 +2025,7 @@ extern NCURSES_EXPORT(int) _nc_eventlist_timeout(_nc_eventlist *); */ #if USE_WIDEC_SUPPORT #if HAVE_MBTOWC && HAVE_MBLEN -#define reset_mbytes(state) IGNORE_RC(mblen(NULL, 0)), IGNORE_RC(mbtowc(NULL, NULL, 0)) +#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) @@ -1930,6 +2063,7 @@ extern NCURSES_EXPORT_VAR(int *) _nc_oldnums; #define _nc_alloc_screen_sp() typeCalloc(SCREEN, 1) #if BROKEN_LINKER +#define SP _nc_screen() extern NCURSES_EXPORT(SCREEN *) _nc_screen (void); extern NCURSES_EXPORT(int) _nc_alloc_screen (void); extern NCURSES_EXPORT(void) _nc_set_screen (SCREEN *); @@ -2018,6 +2152,7 @@ typedef struct _termInfo int maxpairs; int nocolorvideo; + int numbuttons; int numlabels; int labelwidth; int labelheight; @@ -2027,38 +2162,39 @@ typedef struct _termInfo typedef struct term_driver { bool isTerminfo; - bool (*CanHandle)(struct DriverTCB*,const char*,int*); + bool (*CanHandle)(struct DriverTCB*, const char*, int*); void (*init)(struct DriverTCB*); void (*release)(struct DriverTCB*); int (*size)(struct DriverTCB*, int* Line, int *Cols); - int (*sgmode)(struct DriverTCB*, bool setFlag, TTY*); + int (*sgmode)(struct DriverTCB*, int setFlag, TTY*); chtype (*conattr)(struct DriverTCB*); int (*hwcur)(struct DriverTCB*, int yold, int xold, int y, int x); - int (*mode)(struct DriverTCB*, bool progFlag, bool defFlag); + int (*mode)(struct DriverTCB*, int progFlag, int defFlag); bool (*rescol)(struct DriverTCB*); bool (*rescolors)(struct DriverTCB*); - void (*color)(struct DriverTCB*,bool fore, int color, int(*)(SCREEN*,int)); - int (*doBeepOrFlash)(struct DriverTCB*, bool); - void (*initpair)(struct DriverTCB*,short,short,short); - void (*initcolor)(struct DriverTCB*,short,short,short,short); - void (*docolor)(struct DriverTCB*,short,short,bool,int(*)(SCREEN*,int)); + void (*color)(struct DriverTCB*, int fore, int color, int(*)(SCREEN*, int)); + int (*doBeepOrFlash)(struct DriverTCB*, int); + void (*initpair)(struct DriverTCB*, int, int, int); + void (*initcolor)(struct DriverTCB*, int, int, int, int); + void (*docolor)(struct DriverTCB*, int, int, int, int(*)(SCREEN*, int)); void (*initmouse)(struct DriverTCB*); + int (*testmouse)(struct DriverTCB*, int EVENTLIST_2nd(_nc_eventlist*)); void (*setfilter)(struct DriverTCB*); - void (*hwlabel)(struct DriverTCB*,int,char*); - void (*hwlabelOnOff)(struct DriverTCB*,bool); + void (*hwlabel)(struct DriverTCB*, int, char*); + void (*hwlabelOnOff)(struct DriverTCB*, int); int (*update)(struct DriverTCB*); - int (*defaultcolors)(struct DriverTCB*,int,int); - int (*print)(struct DriverTCB*,char*,int); - int (*getsize)(struct DriverTCB*,int*,int*); - int (*setsize)(struct DriverTCB*,int,int); - void (*initacs)(struct DriverTCB*,chtype*,chtype*); + int (*defaultcolors)(struct DriverTCB*, int, int); + int (*print)(struct DriverTCB*, char*, int); + int (*getsize)(struct DriverTCB*, int*, int*); + int (*setsize)(struct DriverTCB*, int, int); + void (*initacs)(struct DriverTCB*, chtype*, chtype*); void (*scinit)(SCREEN *); void (*scexit)(SCREEN *); - int (*twait)(struct DriverTCB*,int,int,int* EVENTLIST_2nd(_nc_eventlist*)); - int (*read)(struct DriverTCB*,int*); - int (*nap)(struct DriverTCB*,int); - int (*kpad)(struct DriverTCB*, bool); - int (*kyOk)(struct DriverTCB*, int, bool); + int (*twait)(struct DriverTCB*, int, int, int* EVENTLIST_2nd(_nc_eventlist*)); + int (*read)(struct DriverTCB*, int*); + int (*nap)(struct DriverTCB*, int); + int (*kpad)(struct DriverTCB*, int); + int (*kyOk)(struct DriverTCB*, int, int); bool (*kyExist)(struct DriverTCB*, int); } TERM_DRIVER; @@ -2116,7 +2252,7 @@ extern NCURSES_EXPORT(int) TINFO_MVCUR(SCREEN*, int, int, int, int); */ #ifdef USE_TERM_DRIVER extern NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *, TERMINAL *, int *, int *); -extern NCURSES_EXPORT(int) _nc_setupterm_ex(TERMINAL **, NCURSES_CONST char *, int , int *, bool); +extern NCURSES_EXPORT(int) _nc_setupterm_ex(TERMINAL **, NCURSES_CONST char *, int , int *, int); #define TINFO_GET_SIZE(sp, tp, lp, cp) \ _nc_get_screensize(sp, tp, lp, cp) #define TINFO_SET_CURTERM(sp, tp) \ @@ -2192,12 +2328,12 @@ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_scr_init)(SCREEN*,const char extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_scr_restore)(SCREEN*, const char*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_scrolln)(SCREEN*, int, int, int, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_set_tty_mode)(SCREEN*, TTY*); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_setupscreen)(SCREEN**, int, int, FILE *, bool, int); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_setupscreen)(SCREEN**, int, int, FILE *, int, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_tgetent)(SCREEN*,char*,const char *); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_tigetnum)(SCREEN*,NCURSES_CONST char*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_vid_attr)(SCREEN *, attr_t, short, void *); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_vidputs)(SCREEN*,chtype,int(*) (SCREEN*, int)); -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_color)(SCREEN*, short, short, bool, NCURSES_SP_OUTC); +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; @@ -2213,7 +2349,7 @@ extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_resume)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_wrap)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_scroll_oldhash)(SCREEN*, int n, int top, int bot); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_scroll_optimize)(SCREEN*); -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_set_buffer)(SCREEN*, FILE *, bool); +extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_set_buffer)(SCREEN*, FILE *, int); extern NCURSES_EXPORT(void) _nc_cookie_init(SCREEN *sp); @@ -2249,4 +2385,6 @@ extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_unctrl (SCREEN *, chtype); } #endif +/* *INDENT-ON* */ + #endif /* CURSES_PRIV_H */