X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_addch.c;h=17ba6e2bcd6c1eeacff20225f8ea95d1bc6baee5;hp=9d73edfde5dea44ac6b44450560c8718394a2d8e;hb=6a5e1ae3015763934a358df2680a77458ca3e342;hpb=027ae42953e3186daed8f3882da73de48291b606 diff --git a/ncurses/base/lib_addch.c b/ncurses/base/lib_addch.c index 9d73edfd..17ba6e2b 100644 --- a/ncurses/base/lib_addch.c +++ b/ncurses/base/lib_addch.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. * + * Copyright (c) 1998-2006,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 * @@ -36,7 +36,7 @@ #include #include -MODULE_ID("$Id: lib_addch.c,v 1.104 2006/10/14 20:31:19 tom Exp $") +MODULE_ID("$Id: lib_addch.c,v 1.111 2008/03/29 18:48:02 tom Exp $") static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT); @@ -217,19 +217,19 @@ _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) { + /* + * An error occurred. We could either discard everything, + * or assume that the error was in the previous input. + * Try the latter. + */ + TR(TRACE_VIRTPUT, ("Alert! mbrtowc returns error")); + /* handle this with unctrl() */ WINDOW_EXT(win, addch_used) = 0; - } else { - if (len == -1) { - /* - * An error occurred. We could either discard everything, - * or assume that the error was in the previous input. - * Try the latter. - */ - TR(TRACE_VIRTPUT, ("Alert! mbrtowc returns error")); - buffer[0] = CharOf(CHDEREF(ch)); - WINDOW_EXT(win, addch_used) = 1; - } } return len; } @@ -264,13 +264,16 @@ waddch_literal(WINDOW *win, NCURSES_CH_T ch) if (WINDOW_EXT(win, addch_used) != 0 || !Charable(ch)) { int len = _nc_build_wch(win, CHREF(ch)); - if (len > 0) { + if (len >= -1) { + /* handle EILSEQ */ if (is8bits(CharOf(ch))) { const char *s = unctrl((chtype) CharOf(ch)); if (s[1] != 0) { return waddstr(win, s); } } + if (len == -1) + return waddch(win, ' '); } else { return OK; } @@ -473,6 +476,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; }