X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftty%2Flib_vidattr.c;h=ab7a165ae3226861b1966374a3b086fe2d7e9df1;hp=dbbbc978a05467bb724a05cd6fb0a1e016929a6e;hb=78e49873c69dc0494bb34c62f897f8b446584a33;hpb=027ae42953e3186daed8f3882da73de48291b606 diff --git a/ncurses/tty/lib_vidattr.c b/ncurses/tty/lib_vidattr.c index dbbbc978..ab7a165a 100644 --- a/ncurses/tty/lib_vidattr.c +++ b/ncurses/tty/lib_vidattr.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2009 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 * @@ -29,7 +29,8 @@ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * - * and: Thomas E. Dickey 1996 on * + * and: Thomas E. Dickey 1996-on * + * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* @@ -65,7 +66,7 @@ #include #include -MODULE_ID("$Id: lib_vidattr.c,v 1.46 2006/01/21 23:39:40 tom Exp $") +MODULE_ID("$Id: lib_vidattr.c,v 1.50 2009/02/15 00:51:03 tom Exp $") #define doPut(mode) TPUTS_TRACE(#mode); tputs(mode, 1, outc) @@ -87,10 +88,11 @@ MODULE_ID("$Id: lib_vidattr.c,v 1.46 2006/01/21 23:39:40 tom Exp $") } \ } +#define PreviousAttr _nc_prescreen.previous_attr + NCURSES_EXPORT(int) vidputs(chtype newmode, int (*outc) (int)) { - static attr_t previous_attr = A_NORMAL; attr_t turn_on, turn_off; int pair; bool reverse = FALSE; @@ -101,18 +103,19 @@ vidputs(chtype newmode, int (*outc) (int)) #define fix_pair0 FALSE #endif + newmode &= A_ATTRIBUTES; T((T_CALLED("vidputs(%s)"), _traceattr(newmode))); /* this allows us to go on whether or not newterm() has been called */ if (SP) - previous_attr = AttrOf(SCREEN_ATTRS(SP)); + PreviousAttr = AttrOf(SCREEN_ATTRS(SP)); - TR(TRACE_ATTRS, ("previous attribute was %s", _traceattr(previous_attr))); + TR(TRACE_ATTRS, ("previous attribute was %s", _traceattr(PreviousAttr))); if ((SP != 0) && (magic_cookie_glitch > 0)) { #if USE_XMC_SUPPORT - static chtype table[] = + static const chtype table[] = { A_STANDOUT, A_UNDERLINE, @@ -183,7 +186,7 @@ vidputs(chtype newmode, int (*outc) (int)) newmode &= ~mask; } - if (newmode == previous_attr) + if (newmode == PreviousAttr) returnCode(OK); pair = PAIR_NUMBER(newmode); @@ -192,17 +195,17 @@ vidputs(chtype newmode, int (*outc) (int)) newmode &= ~A_REVERSE; } - turn_off = (~newmode & previous_attr) & ALL_BUT_COLOR; - turn_on = (newmode & ~previous_attr) & ALL_BUT_COLOR; + turn_off = (~newmode & PreviousAttr) & ALL_BUT_COLOR; + turn_on = (newmode & ~PreviousAttr) & ALL_BUT_COLOR; - SetColorsIf(((pair == 0) && !fix_pair0), previous_attr); + SetColorsIf(((pair == 0) && !fix_pair0), PreviousAttr); if (newmode == A_NORMAL) { - if ((previous_attr & A_ALTCHARSET) && exit_alt_charset_mode) { + if ((PreviousAttr & A_ALTCHARSET) && exit_alt_charset_mode) { doPut(exit_alt_charset_mode); - previous_attr &= ~A_ALTCHARSET; + PreviousAttr &= ~A_ALTCHARSET; } - if (previous_attr) { + if (PreviousAttr) { if (exit_attribute_mode) { doPut(exit_attribute_mode); } else { @@ -213,10 +216,10 @@ vidputs(chtype newmode, int (*outc) (int)) TurnOff(A_STANDOUT, exit_standout_mode); } } - previous_attr &= ALL_BUT_COLOR; + PreviousAttr &= ALL_BUT_COLOR; } - SetColorsIf((pair != 0) || fix_pair0, previous_attr); + SetColorsIf((pair != 0) || fix_pair0, PreviousAttr); } else if (set_attributes) { if (turn_on || turn_off) { TPUTS_TRACE("set_attributes"); @@ -230,9 +233,9 @@ vidputs(chtype newmode, int (*outc) (int)) (newmode & A_INVIS) != 0, (newmode & A_PROTECT) != 0, (newmode & A_ALTCHARSET) != 0), 1, outc); - previous_attr &= ALL_BUT_COLOR; + PreviousAttr &= ALL_BUT_COLOR; } - SetColorsIf((pair != 0) || fix_pair0, previous_attr); + SetColorsIf((pair != 0) || fix_pair0, PreviousAttr); } else { TR(TRACE_ATTRS, ("turning %s off", _traceattr(turn_off))); @@ -250,9 +253,9 @@ vidputs(chtype newmode, int (*outc) (int)) if (turn_off && exit_attribute_mode) { doPut(exit_attribute_mode); turn_on |= (newmode & ALL_BUT_COLOR); - previous_attr &= ALL_BUT_COLOR; + PreviousAttr &= ALL_BUT_COLOR; } - SetColorsIf((pair != 0) || fix_pair0, previous_attr); + SetColorsIf((pair != 0) || fix_pair0, PreviousAttr); TR(TRACE_ATTRS, ("turning %s on", _traceattr(turn_on))); /* *INDENT-OFF* */ @@ -283,7 +286,7 @@ vidputs(chtype newmode, int (*outc) (int)) if (SP) SetAttr(SCREEN_ATTRS(SP), newmode); else - previous_attr = newmode; + PreviousAttr = newmode; returnCode(OK); } @@ -297,7 +300,7 @@ vidattr(chtype newmode) } NCURSES_EXPORT(chtype) -termattrs(void) +NCURSES_SP_NAME(termattrs) (NCURSES_SP_DCL0) { chtype attrs = A_NORMAL; @@ -329,8 +332,16 @@ termattrs(void) if (enter_underline_mode) attrs |= A_UNDERLINE; - if (SP->_coloron) + if (SP_PARM->_coloron) attrs |= A_COLOR; returnChar(attrs); } + +#if NCURSES_SP_FUNCS +NCURSES_EXPORT(chtype) +termattrs(void) +{ + return NCURSES_SP_NAME(termattrs) (CURRENT_SCREEN); +} +#endif