diff options
Diffstat (limited to 'ncurses/curses.priv.h')
-rw-r--r-- | ncurses/curses.priv.h | 878 |
1 files changed, 144 insertions, 734 deletions
diff --git a/ncurses/curses.priv.h b/ncurses/curses.priv.h index 49346c122a70..29e131953415 100644 --- a/ncurses/curses.priv.h +++ b/ncurses/curses.priv.h @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 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 * @@ -30,11 +30,11 @@ * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * * and: Eric S. Raymond <esr@snark.thyrsus.com> * * and: Thomas E. Dickey 1996-on * - * and: Juergen Pfeifer * ****************************************************************************/ + /* - * $Id: curses.priv.h,v 1.475 2011/01/22 21:10:19 tom Exp $ + * $Id: curses.priv.h,v 1.394 2008/10/04 21:37:45 tom Exp $ * * curses.priv.h * @@ -45,7 +45,6 @@ #ifndef CURSES_PRIV_H #define CURSES_PRIV_H 1 -/* *INDENT-OFF* */ #include <ncurses_dll.h> @@ -61,7 +60,6 @@ extern "C" { #define MODULE_ID(id) /*nothing*/ #endif -#include <stddef.h> /* for offsetof */ #include <stdlib.h> #include <string.h> #include <sys/types.h> @@ -99,6 +97,8 @@ extern "C" { extern int errno; #endif +#include <nc_panel.h> + /* Some systems have a broken 'select()', but workable 'poll()'. Use that */ #if HAVE_WORKING_POLL #define USE_FUNC_POLL 1 @@ -178,20 +178,6 @@ extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t); #endif /* - * If we have va_copy(), use it for assigning va_list's. - */ -#if defined(HAVE___VA_COPY) -#define begin_va_copy(dst,src) __va_copy(dst, src) -#define end_va_copy(dst) va_end(dst) -#elif defined(va_copy) || defined(HAVE_VA_COPY) -#define begin_va_copy(dst,src) va_copy(dst, src) -#define end_va_copy(dst) va_end(dst) -#else -#define begin_va_copy(dst,src) (dst) = (src) -#define end_va_copy(dst) /* nothing */ -#endif - -/* * Scroll hints are useless when hashmap is used */ #if !USE_SCROLL_HINTS @@ -209,15 +195,6 @@ extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t); #endif /* - * Options for terminal drivers, etc... - */ -#ifdef USE_TERM_DRIVER -#define USE_SP_RIPOFF 1 -#define USE_SP_TERMTYPE 1 -#define USE_SP_WINDOWLIST 1 -#endif - -/* * 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 * this, re-enable USE_HARD_TABS and run worm for a while. Other systems @@ -270,7 +247,6 @@ 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 @@ -281,127 +257,39 @@ color_t; #define NCURSES_OPAQUE 0 #include <curses.h> /* we'll use -Ipath directive to get the right one! */ - -/* - * 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 -#define NCURSES_SP_DCL SCREEN *NCURSES_SP_ARG -#define NCURSES_SP_DCL0 NCURSES_SP_DCL -#define NCURSES_SP_ARGx NCURSES_SP_ARG, -#define NCURSES_SP_DCLx SCREEN *NCURSES_SP_ARGx -#else -#define SP_PARM SP /* use global variable */ -#define NCURSES_SP_ARG -#define NCURSES_SP_DCL -#define NCURSES_SP_DCL0 void -#define NCURSES_SP_ARGx -#define NCURSES_SP_DCLx -#endif - -#include <nc_panel.h> - -#define IsPreScreen(sp) (((sp) != 0) && sp->_prescreen) -#define HasTerminal(sp) (((sp) != 0) && (0 != ((sp)->_term))) -#define IsValidScreen(sp) (HasTerminal(sp) && !IsPreScreen(sp)) - -#if BROKEN_LINKER || USE_REENTRANT -#define CurTerm _nc_prescreen._cur_term -#else -#define CurTerm cur_term -#endif - -#if NCURSES_SP_FUNCS -#define TerminalOf(sp) ((sp) ? ((sp)->_term ? (sp)->_term : CurTerm) : CurTerm) -#else -#define TerminalOf(sp) CurTerm -#endif - #include <term.h> - -/* - * Reduce dependency on cur_term global by using terminfo data from SCREEN's - * pointer to this data. - */ -#ifdef USE_SP_TERMTYPE -#undef CUR -#endif - -#define SP_TERMTYPE TerminalOf(sp)->type. - #include <term_entry.h> - #include <nc_tparm.h> -/* - * 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 +#if NCURSES_EXT_COLORS && USE_WIDEC_SUPPORT #define if_EXT_COLORS(stmt) stmt -#define SetPair(value,p) SetPair2((value).ext_color, AttrOf(value), p) -#define SetPair2(c,a,p) c = (p), \ - a = (unColor2(a) | (A_COLOR & 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 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 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(attr, pair) vid_attr(attr, pair, 0) #else -#define VIDATTR(sp,attr,pair) vid_attr(attr, pair, 0) -#endif - -#else /* !NCURSES_EXT_COLORS */ - #define if_EXT_COLORS(stmt) /* nothing */ #define SetPair(value,p) RemAttr(value, A_COLOR), \ - 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)) + 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)) #define SET_WINDOW_PAIR(w,p) WINDOW_ATTRS(w) &= ALL_BUT_COLOR, \ - WINDOW_ATTRS(w) |= (A_COLOR & (attr_t) ColorPair(p)) + WINDOW_ATTRS(w) |= (A_COLOR & COLOR_PAIR(p)) #define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b)) - -#if NCURSES_SP_FUNCS -#define VIDATTR(sp,attr,pair) NCURSES_SP_NAME(vidattr)(sp, attr) -#else -#define VIDATTR(sp,attr,pair) vidattr(attr) +#define VIDATTR(attr, pair) vidattr(attr) #endif -#endif /* NCURSES_EXT_COLORS */ - #if NCURSES_NO_PADDING #define GetNoPadding(sp) ((sp) ? (sp)->_no_padding : _nc_prescreen._no_padding) #define SetNoPadding(sp) _nc_set_no_padding(sp) -extern NCURSES_EXPORT(void) _nc_set_no_padding(SCREEN *); +extern NCURSES_EXPORT(void) _nc_set_no_padding(SCREEN *); #else #define GetNoPadding(sp) FALSE #define SetNoPadding(sp) /*nothing*/ @@ -413,37 +301,18 @@ extern NCURSES_EXPORT(void) _nc_set_no_padding(SCREEN *); #define GET_SCREEN_PAIR(s) GetPair(SCREEN_ATTRS(s)) #define SET_SCREEN_PAIR(s,p) SetPair(SCREEN_ATTRS(s), p) -#if USE_REENTRANT || NCURSES_SP_FUNCS -NCURSES_EXPORT(int *) _nc_ptr_Lines (SCREEN *); -NCURSES_EXPORT(int *) _nc_ptr_Cols (SCREEN *); -NCURSES_EXPORT(int *) _nc_ptr_Tabsize (SCREEN *); -NCURSES_EXPORT(int *) _nc_ptr_Escdelay (SCREEN *); -#endif - #if USE_REENTRANT - -#define ptrLines(sp) (sp ? &(sp->_LINES) : &(_nc_prescreen._LINES)) -#define ptrCols(sp) (sp ? &(sp->_COLS) : &(_nc_prescreen._COLS)) -#define ptrTabsize(sp) (sp ? &(sp->_TABSIZE) : &(_nc_prescreen._TABSIZE)) -#define ptrEscdelay(sp) (sp ? &(sp->_ESCDELAY) : &(_nc_prescreen._ESCDELAY)) - -#define SET_LINES(value) *_nc_ptr_Lines(SP_PARM) = value -#define SET_COLS(value) *_nc_ptr_Cols(SP_PARM) = value -#define SET_TABSIZE(value) *_nc_ptr_Tabsize(SP_PARM) = value -#define SET_ESCDELAY(value) *_nc_ptr_Escdelay(SP_PARM) = value - +NCURSES_EXPORT(int *) _nc_ptr_Lines (void); +NCURSES_EXPORT(int *) _nc_ptr_Cols (void); +#define ptrLines() (SP ? &(SP->_LINES) : &(_nc_prescreen._LINES)) +#define ptrCols() (SP ? &(SP->_COLS) : &(_nc_prescreen._COLS)) +#define SET_LINES(value) *_nc_ptr_Lines() = value +#define SET_COLS(value) *_nc_ptr_Cols() = value #else - -#define ptrLines(sp) &LINES -#define ptrCols(sp) &COLS -#define ptrTabsize(sp) &TABSIZE -#define ptrEscdelay(sp) &ESCDELAY - -#define SET_LINES(value) LINES = value -#define SET_COLS(value) COLS = value -#define SET_TABSIZE(value) TABSIZE = value -#define SET_ESCDELAY(value) ESCDELAY = value - +#define ptrLines() &LINES +#define ptrCols() &COLS +#define SET_LINES(value) LINES = value +#define SET_COLS(value) COLS = value #endif #define TR_MUTEX(data) _tracef("%s@%d: me:%08lX COUNT:%2u/%2d/%6d/%2d/%s%9u: " #data, \ @@ -457,19 +326,6 @@ 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)) -#endif -#endif - #ifdef USE_PTHREADS #if USE_REENTRANT @@ -487,10 +343,22 @@ 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); @@ -512,19 +380,6 @@ extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *); #else /* !USE_PTHREADS */ -#if USE_PTHREADS_EINTR -# if USE_WEAK_SYMBOLS -#include <pthread.h> -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 */ @@ -534,36 +389,6 @@ extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *); #endif /* USE_PTHREADS */ -/* - * When using sp-funcs, locks are targeted to SCREEN-level granularity. - * So the locking is done in the non-sp-func (which calls the sp-func) rather - * than in the sp-func itself. - * - * Use the _nc_nonsp_XXX functions in the function using "NCURSES_SP_NAME()". - * Use the _nc_sp_XXX functions in the function using "#if NCURSES_SP_FUNCS". - */ -#if NCURSES_SP_FUNCS - -#define _nc_nonsp_lock_global(name) /* nothing */ -#define _nc_nonsp_try_global(name) 0 -#define _nc_nonsp_unlock_global(name) /* nothing */ - -#define _nc_sp_lock_global(name) _nc_lock_global(name) -#define _nc_sp_try_global(name) _nc_try_global(name) -#define _nc_sp_unlock_global(name) _nc_unlock_global(name) - -#else - -#define _nc_nonsp_lock_global(name) _nc_lock_global(name) -#define _nc_nonsp_try_global(name) _nc_try_global(name) -#define _nc_nonsp_unlock_global(name) _nc_unlock_global(name) - -#define _nc_sp_lock_global(name) /* nothing */ -#define _nc_sp_try_global(name) 0 -#define _nc_sp_unlock_global(name) /* nothing */ - -#endif - #if HAVE_GETTIMEOFDAY # define PRECISE_GETTIME 1 # define TimeType struct timeval @@ -578,14 +403,12 @@ 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) (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 PAIR_OF(fg, bg) ((((fg) & C_MASK) << C_SHIFT) | ((bg) & C_MASK)) #define isDefaultColor(c) ((c) >= COLOR_DEFAULT || (c) < 0) #define COLOR_DEFAULT C_MASK -#if defined(USE_BUILD_CC) || (defined(USE_TERMLIB) && !defined(NEED_NCURSES_CH_T)) +#if 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 */ @@ -611,9 +434,6 @@ typedef enum { #if USE_SYSMOUSE ,M_SYSMOUSE /* FreeBSD sysmouse on console */ #endif -#ifdef USE_TERM_DRIVER - ,M_TERM_DRIVER /* Win32 console, etc */ -#endif } MouseType; /* @@ -632,7 +452,7 @@ typedef struct { struct _SLK; -#if !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) +#ifndef USE_TERMLIB typedef struct { @@ -644,13 +464,13 @@ typedef struct } slk_ent; typedef struct _SLK { - bool dirty; /* all labels have changed */ - bool hidden; /* soft labels are hidden */ - WINDOW *win; + char dirty; /* all labels have changed */ + char hidden; /* soft labels are hidden */ + WINDOW *win; slk_ent *ent; - short maxlab; /* number of available labels */ - short labcnt; /* number of allocated labels */ - short maxlen; /* length of labels */ + short maxlab; /* number of available labels */ + short labcnt; /* number of allocated labels */ + short maxlen; /* length of labels */ NCURSES_CH_T attr; /* soft label attribute */ } SLK; @@ -673,10 +493,10 @@ typedef int (*TYPE_Gpm_Open) (Gpm_Connect *, int); typedef int (*TYPE_Gpm_Close) (void); typedef int (*TYPE_Gpm_GetEvent) (Gpm_Event *); -#define my_gpm_fd SP_PARM->_mouse_gpm_fd -#define my_Gpm_Open SP_PARM->_mouse_Gpm_Open -#define my_Gpm_Close SP_PARM->_mouse_Gpm_Close -#define my_Gpm_GetEvent SP_PARM->_mouse_Gpm_GetEvent +#define my_gpm_fd SP->_mouse_gpm_fd +#define my_Gpm_Open SP->_mouse_Gpm_Open +#define my_Gpm_Close SP->_mouse_Gpm_Close +#define my_Gpm_GetEvent SP->_mouse_Gpm_GetEvent #else /* link statically to GPM */ #define my_gpm_fd &gpm_fd @@ -743,10 +563,8 @@ typedef struct { */ #if MIXEDCASE_FILENAMES #define LEAF_FMT "%c" -#define LEAF_LEN 1 #else #define LEAF_FMT "%02x" -#define LEAF_LEN 2 #endif /* @@ -759,13 +577,6 @@ typedef struct { #define TRACEMSE_MAX (80 + (5 * 10) + (32 * 15)) #define TRACEMSE_FMT "id %2d at (%2d, %2d, %2d) state %4lx = {" /* } */ -#ifdef USE_TERM_DRIVER -struct DriverTCB; /* Terminal Control Block forward declaration */ -#define INIT_TERM_DRIVER() _nc_globals.term_driver = _nc_get_driver -#else -#define INIT_TERM_DRIVER() /* nothing */ -#endif - /* * Global data which is not specific to a screen. */ @@ -798,10 +609,8 @@ typedef struct { int tgetent_index; long tgetent_sequence; -#ifndef USE_SP_WINDOWLIST WINDOWLIST *_nc_windowlist; -#define WindowList(sp) _nc_globals._nc_windowlist -#endif +#define _nc_windows _nc_globals._nc_windowlist #if USE_HOME_TERMINFO char *home_terminfo; @@ -812,10 +621,6 @@ typedef struct { int safeprint_rows; #endif -#ifdef USE_TERM_DRIVER - int (*term_driver)(struct DriverTCB*, const char*, int*); -#endif - #ifdef TRACE bool init_trace; char trace_fname[PATH_MAX]; @@ -839,9 +644,7 @@ typedef struct { char traceatr_color_buf[2][80]; int traceatr_color_sel; int traceatr_color_last; -#if !defined(USE_PTHREADS) && USE_REENTRANT - int nested_tracef; -#endif + #endif /* TRACE */ #ifdef USE_PTHREADS @@ -852,9 +655,6 @@ 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; @@ -869,22 +669,17 @@ typedef struct { bool use_env; bool filter_mode; attr_t previous_attr; -#ifndef USE_SP_RIPOFF ripoff_t rippedoff[N_RIPS]; ripoff_t *rsp; -#endif TPARM_STATE tparm_state; TTY *saved_tty; /* savetty/resetty information */ #if NCURSES_NO_PADDING bool _no_padding; /* flag to set if padding disabled */ #endif - NCURSES_SP_OUTC _outch; /* output handler if not putc */ #if BROKEN_LINKER || USE_REENTRANT chtype *real_acs_map; int _LINES; int _COLS; - int _TABSIZE; - int _ESCDELAY; TERMINAL *_cur_term; #ifdef TRACE long _outchars; @@ -893,16 +688,8 @@ typedef struct { #endif } NCURSES_PRESCREEN; -/* - * Use screen-specific ripoff data (for softkeys) rather than global. - */ -#ifdef USE_SP_RIPOFF -#define safe_ripoff_sp (sp)->rsp -#define safe_ripoff_stack (sp)->rippedoff -#else -#define safe_ripoff_sp _nc_prescreen.rsp -#define safe_ripoff_stack _nc_prescreen.rippedoff -#endif +#define ripoff_sp _nc_prescreen.rsp +#define ripoff_stack _nc_prescreen.rippedoff extern NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen; @@ -916,8 +703,6 @@ struct screen { char *_setbuf; /* buffered I/O for output */ bool _filtered; /* filter() was called */ bool _buffered; /* setvbuf uses _setbuf data */ - bool _prescreen; /* is in prescreen phase */ - bool _use_env; /* LINES & COLS from environment? */ int _checkfd; /* filedesc for typeahead check */ TERMINAL *_term; /* terminal type information */ TTY _saved_tty; /* savetty/resetty information */ @@ -931,10 +716,6 @@ struct screen { WINDOW *_newscr; /* virtual screen to be updated to */ WINDOW *_stdscr; /* screen's full-window context */ -#define CurScreen(sp) (sp)->_curscr -#define NewScreen(sp) (sp)->_newscr -#define StdScreen(sp) (sp)->_stdscr - TRIES *_keytry; /* "Try" for use with keypad mode */ TRIES *_key_ok; /* Disabled keys via keyok(,FALSE) */ bool _tried; /* keypad mode was initialized */ @@ -1013,13 +794,11 @@ struct screen { int _color_count; /* count of colors in palette */ colorpair_t *_color_pairs; /* screen's color pair list */ int _pair_count; /* count of color pairs */ - int _pair_limit; /* actual limit of color-pairs */ #if NCURSES_EXT_FUNCS bool _default_color; /* use default colors */ bool _has_sgr_39_49; /* has ECMA default color support */ int _default_fg; /* assumed default foreground */ int _default_bg; /* assumed default background */ - int _default_pairs; /* count pairs using default color */ #endif chtype _ok_attributes; /* valid attributes for terminal */ chtype _xmc_suppress; /* attributes to suppress if xmc */ @@ -1041,6 +820,8 @@ struct screen { */ bool _nc_sp_idlok; bool _nc_sp_idcok; +#define _nc_idlok SP->_nc_sp_idlok +#define _nc_idcok SP->_nc_sp_idcok /* * These are the data that support the mouse interface. @@ -1090,18 +871,11 @@ struct screen { int _sysmouse_new_buttons; #endif -#ifdef USE_TERM_DRIVER - MEVENT _drv_mouse_fifo[FIFO_SIZE]; - int _drv_mouse_head; - int _drv_mouse_tail; - int _drv_mouse_old_buttons; - int _drv_mouse_new_buttons; -#endif /* * This supports automatic resizing */ #if USE_SIZECHANGE - int (*_resize)(NCURSES_SP_DCLx int y, int x); + int (*_resize)(int,int); #endif /* @@ -1121,7 +895,7 @@ struct screen { int _oldnum_size; bool _cleanup; /* cleanup after int/quit signal */ - NCURSES_SP_OUTC _outch; /* output handler if not putc */ + int (*_outch)(int); /* output handler if not putc */ int _legacy_coding; /* see use_legacy_coding() */ @@ -1141,15 +915,6 @@ struct screen { char tracechr_buf[40]; char tracemse_buf[TRACEMSE_MAX]; #endif -#ifdef USE_SP_WINDOWLIST - WINDOWLIST* _windowlist; -#define WindowList(sp) (sp)->_windowlist -#endif - NCURSES_OUTC jump; - - ripoff_t rippedoff[N_RIPS]; - ripoff_t *rsp; - /* * ncurses/ncursesw are the same up to this point. */ @@ -1165,10 +930,10 @@ 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 */ WINDOWLIST *next; SCREEN *screen; /* screen containing the window */ - WINDOW win; /* WINDOW_EXT() needs to account for offset */ -#ifdef NCURSES_WIDECHAR +#ifdef _XOPEN_SOURCE_EXTENDED 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[] */ @@ -1176,21 +941,7 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #endif }; -#define WINDOW_EXT(w,m) (((WINDOWLIST *)((void *)((char *)(w) - offsetof(WINDOWLIST, win))))->m) - -#define SP_PRE_INIT(sp) \ - sp->_cursrow = -1; \ - sp->_curscol = -1; \ - sp->_nl = TRUE; \ - sp->_raw = FALSE; \ - sp->_cbreak = 0; \ - sp->_echo = TRUE; \ - sp->_fifohead = -1; \ - sp->_endwin = TRUE; \ - sp->_cursor = -1; \ - WindowList(sp) = 0; \ - sp->_outch = NCURSES_SP_NAME(_nc_outch); \ - sp->jump = 0 \ +#define WINDOW_EXT(win,field) (((WINDOWLIST *)(win))->field) /* usually in <limits.h> */ #ifndef UCHAR_MAX @@ -1266,7 +1017,6 @@ 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) @@ -1311,9 +1061,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] = (wchar_t) (c); \ + _cp->chars[0] = (c); \ _cp->attr = (a); \ - if_EXT_COLORS(SetPair(ch, PairNumber(a))); \ + if_EXT_COLORS(SetPair(ch, PAIR_NUMBER(a))); \ } while (0) #define CHREF(wch) (&wch) #define CHDEREF(wch) (*wch) @@ -1332,14 +1082,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 = (int) wcrtomb(PUTC_buf, \ - (ch).chars[PUTC_i], &PUT_st); \ + PUTC_n = 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)); \ + fwrite(PUTC_buf, (unsigned) PUTC_n, 1, b); \ } \ COUNT_OUTCHARS(PUTC_i); \ } } } while (0) @@ -1355,14 +1105,14 @@ 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) (int) (AttrOf(ch) & A_CHARTEXT) +#define WidecExt(ch) (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) |= (attr_t) (ext + 1) + AttrOf(dst) |= (ext + 1) #define if_WIDEC(code) code -#define Charable(ch) ((SP_PARM != 0 && SP_PARM->_legacy_coding) \ +#define Charable(ch) ((SP != 0 && SP->_legacy_coding) \ || (AttrOf(ch) & A_ALTCHARSET) \ || (!isWidecExt(ch) && \ (ch).chars[1] == L'\0' && \ @@ -1412,25 +1162,25 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; #define CHANGED_CELL(line,col) \ if (line->firstchar == _NOCHANGE) \ - line->firstchar = line->lastchar = (NCURSES_SIZE_T) col; \ + line->firstchar = line->lastchar = col; \ else if ((col) < line->firstchar) \ - line->firstchar = (NCURSES_SIZE_T) col; \ + line->firstchar = col; \ else if ((col) > line->lastchar) \ - line->lastchar = (NCURSES_SIZE_T) col + line->lastchar = col #define CHANGED_RANGE(line,start,end) \ if (line->firstchar == _NOCHANGE \ || line->firstchar > (start)) \ - line->firstchar = (NCURSES_SIZE_T) start; \ + line->firstchar = start; \ if (line->lastchar == _NOCHANGE \ || line->lastchar < (end)) \ - line->lastchar = (NCURSES_SIZE_T) end + line->lastchar = end #define CHANGED_TO_EOL(line,start,end) \ if (line->firstchar == _NOCHANGE \ || line->firstchar > (start)) \ - line->firstchar = (NCURSES_SIZE_T) start; \ - line->lastchar = (NCURSES_SIZE_T) end + line->firstchar = start; \ + line->lastchar = end #define SIZEOF(v) (sizeof(v)/sizeof(v[0])) @@ -1464,8 +1214,8 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; * Standardize/simplify common loops */ #define each_screen(p) p = _nc_screen_chain; p != 0; p = (p)->_next_screen -#define each_window(sp,p) p = WindowList(sp); p != 0; p = (p)->next -#define each_ripoff(p) p = safe_ripoff_stack; (p - safe_ripoff_stack) < N_RIPS; ++p +#define each_window(p) p = _nc_windows; p != 0; p = (p)->next +#define each_ripoff(p) p = ripoff_stack; (p - ripoff_stack) < N_RIPS; ++p /* * Prefixes for call/return points of library function traces. We use these to @@ -1506,22 +1256,15 @@ 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_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 : "<null>") +#define TRACE_RETURN(value,type) return _nc_retrace_##type(value) #define returnAttr(code) TRACE_RETURN(code,attr_t) #define returnBits(code) TRACE_RETURN(code,unsigned) #define returnBool(code) TRACE_RETURN(code,bool) #define returnCPtr(code) TRACE_RETURN(code,cptr) #define returnCVoidPtr(code) TRACE_RETURN(code,cvoid_ptr) -#define returnChar(code) TRACE_RETURN(code,char) -#define returnChtype(code) TRACE_RETURN(code,chtype) +#define returnChar(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 @@ -1539,10 +1282,7 @@ 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(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 *); @@ -1582,11 +1322,8 @@ extern NCURSES_EXPORT(const char *) _nc_viscbuf (const NCURSES_CH_T *, int); #define returnBool(code) return code #define returnCPtr(code) return code #define returnCVoidPtr(code) return code -#define returnChar(code) return ((char) code) -#define returnChtype(code) return code +#define returnChar(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 @@ -1596,15 +1333,6 @@ extern NCURSES_EXPORT(const char *) _nc_viscbuf (const NCURSES_CH_T *, int); #endif /* TRACE/!TRACE */ /* - * Workaround for defective implementation of gcc attribute warn_unused_result - */ -#if defined(__GNUC__) && defined(_FORTIFY_SOURCE) -#define IGNORE_RC(func) errno = (int) func -#else -#define IGNORE_RC(func) (void) func -#endif /* gcc workarounds */ - -/* * Return-codes for tgetent() and friends. */ #define TGETENT_YES 1 /* entry is found */ @@ -1620,58 +1348,57 @@ extern NCURSES_EXPORT(void) name (void); \ #define ALL_BUT_COLOR ((chtype)~(A_COLOR)) #define NONBLANK_ATTR (A_NORMAL|A_BOLD|A_DIM|A_BLINK) -#define XMC_CHANGES(c) ((c) & SP_PARM->_xmc_suppress) +#define XMC_CHANGES(c) ((c) & SP->_xmc_suppress) #define toggle_attr_on(S,at) {\ - if (PairNumber(at) > 0) {\ - (S) = ((S) & ALL_BUT_COLOR) | (attr_t) (at);\ + if (PAIR_NUMBER(at) > 0) {\ + (S) = ((S) & ALL_BUT_COLOR) | (at);\ } else {\ - (S) |= (attr_t) (at);\ + (S) |= (at);\ }\ TR(TRACE_ATTRS, ("new attribute is %s", _traceattr((S))));} #define toggle_attr_off(S,at) {\ - if (PairNumber(at) > 0) {\ + if (PAIR_NUMBER(at) > 0) {\ (S) &= ~(at|A_COLOR);\ } else {\ (S) &= ~(at);\ }\ TR(TRACE_ATTRS, ("new attribute is %s", _traceattr((S))));} -#define DelCharCost(sp,count) \ +#define DelCharCost(count) \ ((parm_dch != 0) \ - ? sp->_dch_cost \ + ? SP->_dch_cost \ : ((delete_character != 0) \ - ? (sp->_dch1_cost * count) \ + ? (SP->_dch1_cost * count) \ : INFINITY)) -#define InsCharCost(sp,count) \ +#define InsCharCost(count) \ ((parm_ich != 0) \ - ? sp->_ich_cost \ + ? SP->_ich_cost \ : ((enter_insert_mode && exit_insert_mode) \ - ? sp->_smir_cost + sp->_rmir_cost + (sp->_ip_cost * count) \ + ? SP->_smir_cost + SP->_rmir_cost + (SP->_ip_cost * count) \ : ((insert_character != 0) \ - ? ((sp->_ich1_cost + sp->_ip_cost) * count) \ + ? ((SP->_ich1_cost + SP->_ip_cost) * count) \ : INFINITY))) #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)); \ +#define UpdateAttrs(c) if (!SameAttrOf(SCREEN_ATTRS(SP), c)) { \ + attr_t chg = AttrOf(SCREEN_ATTRS(SP)); \ + VIDATTR(AttrOf(c), GetPair(c)); \ if (magic_cookie_glitch > 0 \ - && XMC_CHANGES((chg ^ AttrOf(SCREEN_ATTRS(sp))))) { \ + && XMC_CHANGES((chg ^ AttrOf(SCREEN_ATTRS(SP))))) { \ T(("%s @%d before glitch %d,%d", \ __FILE__, __LINE__, \ - sp->_cursrow, \ - sp->_curscol)); \ - NCURSES_SP_NAME(_nc_do_xmc_glitch)(NCURSES_SP_ARGx chg); \ + SP->_cursrow, \ + SP->_curscol)); \ + _nc_do_xmc_glitch(chg); \ } \ } #else -#define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \ - VIDATTR(sp, AttrOf(c), GetPair(c)); \ - } +#define UpdateAttrs(c) if (!SameAttrOf(SCREEN_ATTRS(SP), c)) \ + VIDATTR(AttrOf(c), GetPair(c)); #endif /* @@ -1681,12 +1408,10 @@ 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 @@ -1700,28 +1425,16 @@ extern NCURSES_EXPORT(void) _nc_toggle_attr_on (attr_t *, attr_t); extern NCURSES_EXPORT(void) _nc_toggle_attr_off (attr_t *, attr_t); #undef DelCharCost -#define DelCharCost(sp, count) NCURSES_SP_NAME(_nc_DelCharCost)(NCURSES_SP_ARGx count) +#define DelCharCost(count) _nc_DelCharCost(count) +extern NCURSES_EXPORT(int) _nc_DelCharCost (int); #undef InsCharCost -#define InsCharCost(sp, count) NCURSES_SP_NAME(_nc_InsCharCost)(NCURSES_SP_ARGx count) - -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_DelCharCost) (NCURSES_SP_DCLx int _c); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_InsCharCost) (NCURSES_SP_DCLx int _c); +#define InsCharCost(count) _nc_InsCharCost(count) +extern NCURSES_EXPORT(int) _nc_InsCharCost (int); #undef UpdateAttrs -#define UpdateAttrs(sp,c) NCURSES_SP_NAME(_nc_UpdateAttrs)(NCURSES_SP_ARGx CHREF(c)) - -#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); -#endif - -#if NCURSES_SP_FUNCS -extern NCURSES_EXPORT(int) _nc_DelCharCost (int); -extern NCURSES_EXPORT(int) _nc_InsCharCost (int); -extern NCURSES_EXPORT(void) _nc_UpdateAttrs (CARG_CH_T); -#endif /* NCURSES_SP_FUNCS */ +#define UpdateAttrs(c) _nc_UpdateAttrs(c) +extern NCURSES_EXPORT(void) _nc_UpdateAttrs (NCURSES_CH_T); #else @@ -1770,8 +1483,8 @@ extern NCURSES_EXPORT(void) _nc_linedump (void); #endif /* lib_acs.c */ -extern NCURSES_EXPORT(void) _nc_init_acs (void); /* corresponds to traditional 'init_acs()' */ -extern NCURSES_EXPORT(int) _nc_msec_cost (const char *const, int); /* used by 'tack' program */ +extern NCURSES_EXPORT(void) _nc_init_acs (void); /* corresponds to traditional 'init_acs()' */ +extern NCURSES_EXPORT(int) _nc_msec_cost (const char *const, int); /* used by 'tack' program */ /* lib_addch.c */ #if USE_WIDEC_SUPPORT @@ -1779,7 +1492,7 @@ NCURSES_EXPORT(int) _nc_build_wch(WINDOW *win, ARG_CH_T ch); #endif /* lib_addstr.c */ -#if USE_WIDEC_SUPPORT && !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) +#if USE_WIDEC_SUPPORT && !defined(USE_TERMLIB) extern NCURSES_EXPORT(int) _nc_wchstrlen(const cchar_t *); #endif @@ -1787,10 +1500,10 @@ 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 *, int *, int EVENTLIST_2nd(_nc_eventlist *)); +extern NCURSES_EXPORT(int) _nc_wgetch(WINDOW *, unsigned long *, int EVENTLIST_2nd(_nc_eventlist *)); /* lib_insch.c */ -extern NCURSES_EXPORT(int) _nc_insert_ch(SCREEN *, WINDOW *, chtype); +extern NCURSES_EXPORT(int) _nc_insert_ch(WINDOW *, chtype); /* lib_mvcur.c */ #define INFINITY 1000000 /* cost: too high to use */ @@ -1806,7 +1519,7 @@ extern NCURSES_EXPORT(void) _nc_screen_resume (void); extern NCURSES_EXPORT(void) _nc_screen_wrap (void); /* lib_mouse.c */ -extern NCURSES_EXPORT(bool) _nc_has_mouse (SCREEN *); +extern NCURSES_EXPORT(int) _nc_has_mouse (void); /* lib_mvcur.c */ #define INFINITY 1000000 /* cost: too high to use */ @@ -1814,13 +1527,10 @@ extern NCURSES_EXPORT(bool) _nc_has_mouse (SCREEN *); /* lib_setup.c */ 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); - -/* lib_set_term.c */ -extern NCURSES_EXPORT(int) _nc_ripoffline(int, int(*)(WINDOW*, int)); +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_get_screensize(SCREEN *, int *, int *); /* lib_tstp.c */ #if USE_SIGWINCH @@ -1829,6 +1539,9 @@ extern NCURSES_EXPORT(int) _nc_handle_sigwinch(SCREEN *); #define _nc_handle_sigwinch(a) /* nothing */ #endif +/* lib_ungetch.c */ +extern NCURSES_EXPORT(int) _nc_ungetch (SCREEN *, int); + /* lib_wacs.c */ #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(void) _nc_init_wacs(void); @@ -1864,8 +1577,9 @@ extern NCURSES_EXPORT(int) _nc_remove_string (TRIES **, const char *); /* elsewhere ... */ extern NCURSES_EXPORT(ENTRY *) _nc_delink_entry (ENTRY *, TERMTYPE *); +extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_keyname (SCREEN *, int); +extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_unctrl (SCREEN *, chtype); extern NCURSES_EXPORT(SCREEN *) _nc_screen_of (WINDOW *); -extern NCURSES_EXPORT(TERMINAL*) _nc_get_cur_term (void); extern NCURSES_EXPORT(WINDOW *) _nc_makenew (int, int, int, int, int); extern NCURSES_EXPORT(char *) _nc_trace_buf (int, size_t); extern NCURSES_EXPORT(char *) _nc_trace_bufcat (int, const char *); @@ -1878,15 +1592,12 @@ extern NCURSES_EXPORT(int) _nc_getenv_num (const char *); extern NCURSES_EXPORT(int) _nc_keypad (SCREEN *, bool); 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_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 (short, short, bool, int (*)(int)); extern NCURSES_EXPORT(void) _nc_flush (void); -extern NCURSES_EXPORT(void) _nc_free_and_exit (int) GCC_NORETURN; +extern NCURSES_EXPORT(void) _nc_free_and_exit (int); extern NCURSES_EXPORT(void) _nc_free_entry (ENTRY *, TERMTYPE *); extern NCURSES_EXPORT(void) _nc_freeall (void); extern NCURSES_EXPORT(void) _nc_hash_map (void); @@ -1911,17 +1622,13 @@ extern NCURSES_EXPORT(void) _nc_names_leaks(void); extern NCURSES_EXPORT(void) _nc_tgetent_leaks(void); #endif -#if !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) +#ifndef USE_TERMLIB 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); #endif -#if USE_WIDEC_SUPPORT -extern NCURSES_EXPORT(int) _nc_insert_wch(WINDOW *, const cchar_t *); -#endif - -#if USE_WIDEC_SUPPORT && !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) +#if USE_WIDEC_SUPPORT && !defined(USE_TERMLIB) extern NCURSES_EXPORT(size_t) _nc_wcrtomb (char *, wchar_t, mbstate_t *); #endif @@ -1943,26 +1650,6 @@ extern NCURSES_EXPORT(int) _nc_eventlist_timeout(_nc_eventlist *); #endif /* - * Wide-character macros to hide some platform-differences. - */ -#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 count_mbytes(buffer,length,state) mblen(buffer,length) -#define check_mbytes(wch,buffer,length,state) \ - (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 check_mbytes(wch,buffer,length,state) \ - (int) mbrtowc(&wch, buffer, length, &state) -#else -make an error -#endif -#endif - -/* * Not everyone has vsscanf(), but we'd like to use it for scanw(). */ #if !HAVE_VSSCANF @@ -1974,34 +1661,24 @@ extern NCURSES_EXPORT_VAR(int *) _nc_oldnums; #define USE_SETBUF_0 0 -#define NC_BUFFERED(sp,flag) NCURSES_SP_NAME(_nc_set_buffer)(NCURSES_SP_ARGx sp->_ofp, flag) +#define NC_BUFFERED(flag) _nc_set_buffer(SP->_ofp, flag) -#define NC_OUTPUT(sp) ((sp != 0) ? sp->_ofp : stdout) +#define NC_OUTPUT ((SP != 0) ? SP->_ofp : stdout) /* * On systems with a broken linker, define 'SP' as a function to force the * linker to pull in the data-only module with 'SP'. */ -#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 *); -#define CURRENT_SCREEN _nc_screen() +extern NCURSES_EXPORT(int) _nc_alloc_screen (void); +extern NCURSES_EXPORT(void) _nc_set_screen (SCREEN *); #else /* current screen is private data; avoid possible linking conflicts too */ extern NCURSES_EXPORT_VAR(SCREEN *) SP; -#define CURRENT_SCREEN SP -#define _nc_alloc_screen() ((SP = _nc_alloc_screen_sp()) != 0) -#define _nc_set_screen(sp) SP = sp -#endif - -#if NCURSES_SP_FUNCS -#define CURRENT_SCREEN_PRE (IsPreScreen(CURRENT_SCREEN) ? CURRENT_SCREEN : new_prescr()) -#else -#define CURRENT_SCREEN_PRE CURRENT_SCREEN +#define _nc_alloc_screen() ((SP = typeCalloc(SCREEN, 1)) != 0) +#define _nc_set_screen(sp) SP = sp #endif /* @@ -2009,11 +1686,10 @@ extern NCURSES_EXPORT_VAR(SCREEN *) SP; * if the application is running multiple screens under X, it's quite possible * they could all have type xterm but have different sizes! So... */ -#define screen_lines(sp) (sp)->_lines -#define screen_columns(sp) (sp)->_columns +#define screen_lines SP->_lines +#define screen_columns SP->_columns extern NCURSES_EXPORT(int) _nc_slk_initialize (WINDOW *, int); -extern NCURSES_EXPORT(int) _nc_format_slks (NCURSES_SP_DCLx int _c); /* * Some constants related to SLK's @@ -2031,282 +1707,16 @@ extern NCURSES_EXPORT(int) _nc_format_slks (NCURSES_SP_DCLx int _c); #define MAX_SKEY(fmt) (SLK_STDFMT(fmt)? MAX_SKEY_OLD : MAX_SKEY_PC) #define MAX_SKEY_LEN(fmt) (SLK_STDFMT(fmt)? MAX_SKEY_LEN_OLD : MAX_SKEY_LEN_PC) +extern NCURSES_EXPORT(int) _nc_ripoffline (int line, int (*init)(WINDOW *,int)); + /* * Common error messages */ #define MSG_NO_MEMORY "Out of memory" #define MSG_NO_INPUTS "Premature EOF" -extern NCURSES_EXPORT(int) _nc_set_tty_mode(TTY *); -extern NCURSES_EXPORT(int) _nc_get_tty_mode(TTY *); - -/* timed_wait flag definitions */ -#define TW_NONE 0 -#define TW_INPUT 1 -#define TW_MOUSE 2 -#define TW_ANY (TW_INPUT | TW_MOUSE) -#define TW_EVENT 4 - -#define SetSafeOutcWrapper(outc) \ - SCREEN* sp = CURRENT_SCREEN; \ - if (sp==0) { \ - struct screen dummy; \ - sp = &dummy; \ - memset(sp,0,sizeof(struct screen)); \ - sp->_outch = _nc_outc_wrapper; \ - }\ - sp->jump = outc - -#ifdef USE_TERM_DRIVER -typedef void* TERM_HANDLE; - -typedef struct _termInfo -{ - bool caninit; - - bool hascolor; - bool initcolor; - bool canchange; - - int tabsize; - - int maxcolors; - int maxpairs; - int nocolorvideo; - - int numbuttons; - int numlabels; - int labelwidth; - int labelheight; - - const color_t* defaultPalette; -} TerminalInfo; - -typedef struct term_driver { - bool isTerminfo; - 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*); - chtype (*conattr)(struct DriverTCB*); - int (*hwcur)(struct DriverTCB*, int yold, int xold, int y, int x); - int (*mode)(struct DriverTCB*, bool progFlag, bool 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 (*initmouse)(struct DriverTCB*); - int (*testmouse)(struct DriverTCB*,int); - void (*setfilter)(struct DriverTCB*); - void (*hwlabel)(struct DriverTCB*,int,char*); - void (*hwlabelOnOff)(struct DriverTCB*,bool); - 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*); - 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); - bool (*kyExist)(struct DriverTCB*, int); -} TERM_DRIVER; - -typedef struct DriverTCB -{ - TERMINAL term; /* needs to be the first Element !!! */ - TERM_HANDLE inp; /* The input handle of the Terminal */ - TERM_HANDLE out; /* The output handle of the Terminal in shell mode */ - TERM_HANDLE hdl; /* The output handle of the Terminal in prog mode */ - TERM_DRIVER* drv; /* The driver for that Terminal */ - SCREEN* csp; /* The screen that owns that Terminal */ - TerminalInfo info; /* Driver independent core capabilities of the Terminal */ - void* prop; /* Driver dependent property storage to be used by the Driver */ - long magic; -} TERMINAL_CONTROL_BLOCK; - -#define NCDRV_MAGIC(id) (0x47110000 | (id&0xffff)) -#define NCDRV_TINFO 0x01 -#define NCDRV_WINCONSOLE 0x02 - -#define TCBOf(sp) ((TERMINAL_CONTROL_BLOCK*)(TerminalOf(sp))) -#define InfoOf(sp) TCBOf(sp)->info -#define CallDriver(sp,method) TCBOf(sp)->drv->method(TCBOf(sp)) -#define CallDriver_1(sp,method,arg1) TCBOf(sp)->drv->method(TCBOf(sp),arg1) -#define CallDriver_2(sp,method,arg1,arg2) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2) -#define CallDriver_3(sp,method,arg1,arg2,arg3) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2,arg3) -#define CallDriver_4(sp,method,arg1,arg2,arg3,arg4) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2,arg3,arg4) - -extern NCURSES_EXPORT_VAR(const color_t*) _nc_cga_palette; -extern NCURSES_EXPORT_VAR(const color_t*) _nc_hls_palette; - -extern NCURSES_EXPORT(int) _nc_get_driver(TERMINAL_CONTROL_BLOCK*, const char*, int*); -extern NCURSES_EXPORT(void) _nc_get_screensize_ex(SCREEN *, TERMINAL *, int *, int *); -#endif /* USE_TERM_DRIVER */ - -/* - * Entrypoints which are actually provided in the terminal driver, which would - * be an sp-name otherwise. - */ -#ifdef USE_TERM_DRIVER -#define TINFO_HAS_KEY _nc_tinfo_has_key -#define TINFO_DOUPDATE _nc_tinfo_doupdate -#define TINFO_MVCUR _nc_tinfo_mvcur -extern NCURSES_EXPORT(int) TINFO_HAS_KEY(SCREEN*, int); -extern NCURSES_EXPORT(int) TINFO_DOUPDATE(SCREEN *); -extern NCURSES_EXPORT(int) TINFO_MVCUR(SCREEN*, int, int, int, int); -#else -#define TINFO_HAS_KEY NCURSES_SP_NAME(has_key) -#define TINFO_DOUPDATE NCURSES_SP_NAME(doupdate) -#define TINFO_MVCUR NCURSES_SP_NAME(mvcur) -#endif - -/* - * Entrypoints using an extra parameter with the terminal driver. - */ -#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); -#define TINFO_GET_SIZE(sp, tp, lp, cp) \ - _nc_get_screensize(sp, tp, lp, cp) -#define TINFO_SET_CURTERM(sp, tp) \ - NCURSES_SP_NAME(set_curterm)(sp, tp) -#define TINFO_SETUP_TERM(tpp, name, fd, err, reuse) \ - _nc_setupterm_ex(tpp, name, fd, err, reuse) -#else /* !USE_TERM_DRIVER */ -extern NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *, int *, int *); -#define TINFO_GET_SIZE(sp, tp, lp, cp) \ - _nc_get_screensize(sp, lp, cp) -#define TINFO_SET_CURTERM(sp, tp) \ - set_curterm(tp) -#define TINFO_SETUP_TERM(tpp, name, fd, err, reuse) \ - _nc_setupterm(name, fd, err, reuse) -#endif /* !USE_TERM_DRIVER */ - -#ifdef USE_TERM_DRIVER -#ifdef __MINGW32__ -#include <nc_mingw.h> -extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_WIN_DRIVER; -#endif -extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_TINFO_DRIVER; -#endif - -#ifdef USE_TERM_DRIVER -#define IsTermInfo(sp) (TCBOf(sp) && ((TCBOf(sp)->drv->isTerminfo))) -#else -#define IsTermInfo(sp) TRUE -#endif - -#define HasTInfoTerminal(sp) ((0 != TerminalOf(sp)) && IsTermInfo(sp)) -#define IsValidTIScreen(sp) (HasTInfoTerminal(sp)) - -/* - * Exported entrypoints beyond the published API - */ -#if NCURSES_SP_FUNCS -extern NCURSES_EXPORT(WINDOW *) _nc_curscr_of(SCREEN*); -extern NCURSES_EXPORT(WINDOW *) _nc_newscr_of(SCREEN*); -extern NCURSES_EXPORT(WINDOW *) _nc_stdscr_of(SCREEN*); -extern NCURSES_EXPORT(int) _nc_outc_wrapper(SCREEN*,int); - -#if USE_REENTRANT -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_TABSIZE)(SCREEN*); -extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname)(SCREEN*); -#endif - -#if NCURSES_EXT_FUNCS -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_set_tabsize)(SCREEN*, int); -#endif - -/* - * We put the safe versions of various calls here as they are not published - * part of the API up to now - */ -extern NCURSES_EXPORT(TERMINAL*) NCURSES_SP_NAME(_nc_get_cur_term) (SCREEN *sp); -extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(_nc_makenew) (SCREEN*, int, int, int, int, int); -extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(_nc_reset_colors)(SCREEN*); -extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(_nc_printf_string)(SCREEN*, const char *, va_list); -extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(_nc_acs_char)(SCREEN*,int); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_curs_set)(SCREEN*,int); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_get_tty_mode)(SCREEN*,TTY*); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_mcprint)(SCREEN*,char*, int); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_msec_cost)(SCREEN*, const char *, int); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_outch)(SCREEN*, int); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putp)(SCREEN*, const char *, const char*); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putp_flush)(SCREEN*, const char *, const char *); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_resetty)(SCREEN*); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_resize_term)(SCREEN*,int,int); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_ripoffline)(SCREEN*, int, int (*)(WINDOW *,int)); -extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_savetty)(SCREEN*); -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_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_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 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*); -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_make_oldhash)(SCREEN*, int i); -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_init)(SCREEN*); -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_resume)(SCREEN*); -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_wrap)(SCREEN*); -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_init)(SCREEN*); -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) _nc_cookie_init(SCREEN *sp); - -#if defined(TRACE) || defined(SCROLLDEBUG) || defined(HASHDEBUG) -extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_linedump)(SCREEN*); -#endif - -#if USE_WIDEC_SUPPORT -extern NCURSES_EXPORT(wchar_t *) NCURSES_SP_NAME(_nc_wunctrl)(SCREEN*, cchar_t *); -#endif - -#endif /* NCURSES_SP_FUNCS */ - -#if NCURSES_SP_FUNCS - -#define safe_keyname NCURSES_SP_NAME(keyname) -#define safe_unctrl NCURSES_SP_NAME(unctrl) -#define safe_ungetch NCURSES_SP_NAME(ungetch) - -#else - -#define safe_keyname _nc_keyname -#define safe_unctrl _nc_unctrl -#define safe_ungetch _nc_ungetch - -extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_keyname (SCREEN *, int); -extern NCURSES_EXPORT(int) _nc_ungetch (SCREEN *, int); -extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_unctrl (SCREEN *, chtype); - -#endif - #ifdef __cplusplus } #endif -/* *INDENT-ON* */ - #endif /* CURSES_PRIV_H */ |