X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_addch.c;h=cc3e8781dac801687b52fdd41508a181125a3c11;hp=1ef6cc5803d3f3dca39cd370d1faad2c57e00fcb;hb=a21e1b511e3c79ea7c4786f6b0e48850e7fa94f0;hpb=b779f5fb4516b3e6d1bc8880ea68923efb761e1d diff --git a/ncurses/base/lib_addch.c b/ncurses/base/lib_addch.c index 1ef6cc58..cc3e8781 100644 --- a/ncurses/base/lib_addch.c +++ b/ncurses/base/lib_addch.c @@ -36,7 +36,7 @@ #include #include -MODULE_ID("$Id: lib_addch.c,v 1.108 2008/02/03 18:50:27 tom Exp $") +MODULE_ID("$Id: lib_addch.c,v 1.112 2008/05/17 19:08:40 Miroslav.Lichvar Exp $") static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT); @@ -217,7 +217,9 @@ _nc_build_wch(WINDOW *win, ARG_CH_T ch) buffer, WINDOW_EXT(win, addch_used), &state)) > 0) { attr_t attrs = AttrOf(CHDEREF(ch)); + if_EXT_COLORS(int pair = GetPair(CHDEREF(ch))); SetChar(CHDEREF(ch), result, attrs); + if_EXT_COLORS(SetPair(CHDEREF(ch), pair)); WINDOW_EXT(win, addch_used) = 0; } else if (len == -1) { /* @@ -288,12 +290,15 @@ waddch_literal(WINDOW *win, NCURSES_CH_T ch) int len = wcwidth(CharOf(ch)); int i; int j; + wchar_t *chars; if (len == 0) { /* non-spacing */ if ((x > 0 && y >= 0) - || ((y = win->_cury - 1) >= 0 && - (x = win->_maxx) > 0)) { - wchar_t *chars = (win->_line[y].text[x - 1].chars); + || (win->_maxx >= 0 && win->_cury >= 1)) { + if (x > 0 && y >= 0) + chars = (win->_line[y].text[x - 1].chars); + else + chars = (win->_line[y - 1].text[win->_maxx].chars); for (i = 0; i < CCHARW_MAX; ++i) { if (chars[i] == 0) { TR(TRACE_VIRTPUT, @@ -474,6 +479,7 @@ waddch_nosync(WINDOW *win, const NCURSES_CH_T ch) while (*s) { NCURSES_CH_T sch; SetChar(sch, *s++, AttrOf(ch)); + if_EXT_COLORS(SetPair(sch, GetPair(ch))); if (waddch_literal(win, sch) == ERR) return ERR; }