X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_erase.c;h=6bac1ba1017889f6764d56f4c6c39a3ff7f6eafc;hp=5e397312ffe35b747c0c3df6ad81acb914631a6e;hb=02f1dee48fe8af6ce054388fba739aa4f975004e;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/ncurses/base/lib_erase.c b/ncurses/base/lib_erase.c index 5e397312..6bac1ba1 100644 --- a/ncurses/base/lib_erase.c +++ b/ncurses/base/lib_erase.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998,2000,2001 Free Software Foundation, Inc. * + * Copyright (c) 1998-2009,2016 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,6 +29,7 @@ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * + * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* @@ -40,24 +41,46 @@ #include -MODULE_ID("$Id: lib_erase.c,v 1.15 2001/12/19 01:06:13 tom Exp $") +MODULE_ID("$Id: lib_erase.c,v 1.18 2016/05/28 23:11:26 tom Exp $") NCURSES_EXPORT(int) werase(WINDOW *win) { int code = ERR; - int y; NCURSES_CH_T blank; - NCURSES_CH_T *sp, *end, *start; + NCURSES_CH_T *start; - T((T_CALLED("werase(%p)"), win)); + T((T_CALLED("werase(%p)"), (void *) win)); if (win) { + NCURSES_CH_T *sp; + int y; + blank = win->_nc_bkgd; for (y = 0; y <= win->_maxy; y++) { + NCURSES_CH_T *end; + start = win->_line[y].text; end = &start[win->_maxx]; + /* + * If this is a derived window, we have to handle the case where + * a multicolumn character extends into the window that we are + * erasing. + */ + if_WIDEC({ + if (isWidecExt(start[0])) { + int x = (win->_parent != 0) ? (win->_begx) : 0; + while (x-- > 0) { + if (isWidecBase(start[-1])) { + --start; + break; + } + --start; + } + } + }); + for (sp = start; sp <= end; sp++) *sp = blank;