/****************************************************************************
- * 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 *
/****************************************************************************
* 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: Thomas E. Dickey 1996-on *
+ * and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
#include <curses.priv.h>
#include <term.h>
-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.51 2009/02/21 21:43:40 tom Exp $")
#define doPut(mode) TPUTS_TRACE(#mode); tputs(mode, 1, outc)
} \
}
+#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;
#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,
newmode &= ~mask;
}
- if (newmode == previous_attr)
+ if (newmode == PreviousAttr)
returnCode(OK);
pair = PAIR_NUMBER(newmode);
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 {
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");
(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)));
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* */
if (SP)
SetAttr(SCREEN_ATTRS(SP), newmode);
else
- previous_attr = newmode;
+ PreviousAttr = newmode;
returnCode(OK);
}
}
NCURSES_EXPORT(chtype)
-termattrs(void)
+NCURSES_SP_NAME(termattrs) (NCURSES_SP_DCL0)
{
chtype attrs = A_NORMAL;
if (enter_underline_mode)
attrs |= A_UNDERLINE;
- if (SP->_coloron)
+ if (SP_PARM->_coloron)
attrs |= A_COLOR;
- returnChar(attrs);
+ returnChtype(attrs);
+}
+
+#if NCURSES_SP_FUNCS
+NCURSES_EXPORT(chtype)
+termattrs(void)
+{
+ return NCURSES_SP_NAME(termattrs) (CURRENT_SCREEN);
}
+#endif