X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_refresh.c;h=d8444289c1528efc5ea2934b9a3c127c34e320f7;hp=2a9cafb7b0ad97dfbe5fdef4b56dc13fc44693b4;hb=790a85dbd4a81d5f5d8dd02a44d84f01512ef443;hpb=e6c7286022d8a7a7ea7f15a6ffa7f9addb00e42d diff --git a/ncurses/base/lib_refresh.c b/ncurses/base/lib_refresh.c index 2a9cafb7..d8444289 100644 --- a/ncurses/base/lib_refresh.c +++ b/ncurses/base/lib_refresh.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright 2020 Thomas E. Dickey * + * Copyright 1998-2010,2011 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 * @@ -30,6 +31,7 @@ * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * + * and: Juergen Pfeifer * ****************************************************************************/ /* @@ -41,24 +43,27 @@ #include -MODULE_ID("$Id: lib_refresh.c,v 1.41 2007/09/29 20:39:34 tom Exp $") +MODULE_ID("$Id: lib_refresh.c,v 1.46 2020/02/02 23:34:34 tom Exp $") NCURSES_EXPORT(int) wrefresh(WINDOW *win) { int code; +#if NCURSES_SP_FUNCS + SCREEN *SP_PARM = _nc_screen_of(win); +#endif - T((T_CALLED("wrefresh(%p)"), win)); + T((T_CALLED("wrefresh(%p)"), (void *) win)); if (win == 0) { code = ERR; - } else if (win == curscr) { - curscr->_clear = TRUE; - code = doupdate(); + } else if (win == CurScreen(SP_PARM)) { + CurScreen(SP_PARM)->_clear = TRUE; + code = NCURSES_SP_NAME(doupdate) (NCURSES_SP_ARG); } else if ((code = wnoutrefresh(win)) == OK) { if (win->_clear) - newscr->_clear = TRUE; - code = doupdate(); + NewScreen(SP_PARM)->_clear = TRUE; + code = NCURSES_SP_NAME(doupdate) (NCURSES_SP_ARG); /* * Reset the clearok() flag in case it was set for the special * case in hardscroll.c (if we don't reset it here, we'll get 2 @@ -73,22 +78,19 @@ wrefresh(WINDOW *win) NCURSES_EXPORT(int) wnoutrefresh(WINDOW *win) { - NCURSES_SIZE_T limit_x; - NCURSES_SIZE_T src_row, src_col; - NCURSES_SIZE_T begx; - NCURSES_SIZE_T begy; - NCURSES_SIZE_T dst_row, dst_col; + int limit_x; + int src_row, src_col; + int begx; + int begy; + int dst_row, dst_col; #if USE_SCROLL_HINTS bool wide; #endif +#if NCURSES_SP_FUNCS + SCREEN *SP_PARM = _nc_screen_of(win); +#endif - T((T_CALLED("wnoutrefresh(%p)"), win)); -#ifdef TRACE - if (USE_TRACEF(TRACE_UPDATE)) { - _tracedump("...win", win); - _nc_unlock_global(tracef); - } -#endif /* TRACE */ + T((T_CALLED("wnoutrefresh(%p)"), (void *) win)); /* * This function will break badly if we try to refresh a pad. @@ -97,12 +99,19 @@ wnoutrefresh(WINDOW *win) || (win->_flags & _ISPAD)) returnCode(ERR); +#ifdef TRACE + if (USE_TRACEF(TRACE_UPDATE)) { + _tracedump("...win", win); + _nc_unlock_global(tracef); + } +#endif /* TRACE */ + /* put them here so "win == 0" won't break our code */ begx = win->_begx; begy = win->_begy; - newscr->_nc_bkgd = win->_nc_bkgd; - WINDOW_ATTRS(newscr) = WINDOW_ATTRS(win); + NewScreen(SP_PARM)->_nc_bkgd = win->_nc_bkgd; + WINDOW_ATTRS(NewScreen(SP_PARM)) = WINDOW_ATTRS(win); /* merge in change information from all subwindows of this window */ wsyncdown(win); @@ -122,7 +131,7 @@ wnoutrefresh(WINDOW *win) * windows). Note that changing this formula will not break any code, * merely change the costs of various update cases. */ - wide = (begx <= 1 && win->_maxx >= (newscr->_maxx - 1)); + wide = (begx <= 1 && win->_maxx >= (NewScreen(SP_PARM)->_maxx - 1)); #endif win->_flags &= ~_HASMOVED; @@ -137,14 +146,14 @@ wnoutrefresh(WINDOW *win) /* limit(dst_col) */ limit_x = win->_maxx; /* limit(src_col) */ - if (limit_x > newscr->_maxx - begx) - limit_x = newscr->_maxx - begx; + if (limit_x > NewScreen(SP_PARM)->_maxx - begx) + limit_x = NewScreen(SP_PARM)->_maxx - begx; for (src_row = 0, dst_row = begy + win->_yoffset; - src_row <= win->_maxy && dst_row <= newscr->_maxy; + src_row <= win->_maxy && dst_row <= NewScreen(SP_PARM)->_maxy; src_row++, dst_row++) { - register struct ldat *nline = &newscr->_line[dst_row]; - register struct ldat *oline = &win->_line[src_row]; + struct ldat *nline = &(NewScreen(SP_PARM)->_line[dst_row]); + struct ldat *oline = &win->_line[src_row]; if (oline->firstchar != _NOCHANGE) { int last_src = oline->lastchar; @@ -156,7 +165,7 @@ wnoutrefresh(WINDOW *win) dst_col = src_col + begx; if_WIDEC({ - register int j; + int j; /* * Ensure that we will copy complete multi-column characters @@ -197,7 +206,7 @@ wnoutrefresh(WINDOW *win) : win->_maxx); int fix_left = dst_col; int fix_right = last_dst; - register int j; + int j; /* * Check for boundary cases where we may overwrite part of a @@ -225,7 +234,8 @@ wnoutrefresh(WINDOW *win) * this character. Find the end of the character. */ ++j; - while (j <= newscr->_maxx && isWidecExt(nline->text[j])) { + while (j <= NewScreen(SP_PARM)->_maxx && + isWidecExt(nline->text[j])) { fix_right = j++; } } @@ -269,18 +279,19 @@ wnoutrefresh(WINDOW *win) if (win->_clear) { win->_clear = FALSE; - newscr->_clear = TRUE; + NewScreen(SP_PARM)->_clear = TRUE; } if (!win->_leaveok) { - newscr->_cury = win->_cury + win->_begy + win->_yoffset; - newscr->_curx = win->_curx + win->_begx; + NewScreen(SP_PARM)->_cury = (NCURSES_SIZE_T) (win->_cury + + win->_begy + win->_yoffset); + NewScreen(SP_PARM)->_curx = (NCURSES_SIZE_T) (win->_curx + win->_begx); } - newscr->_leaveok = win->_leaveok; + NewScreen(SP_PARM)->_leaveok = win->_leaveok; #ifdef TRACE if (USE_TRACEF(TRACE_UPDATE)) { - _tracedump("newscr", newscr); + _tracedump("newscr", NewScreen(SP_PARM)); _nc_unlock_global(tracef); } #endif /* TRACE */