75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
|
|
||
|
/* This work is copyrighted. See COPYRIGHT.OLD & COPYRIGHT.NEW for *
|
||
|
* details. If they are missing then this copy is in violation of *
|
||
|
* the copyright conditions. */
|
||
|
|
||
|
/*
|
||
|
* lib_refresh.c
|
||
|
*
|
||
|
* The routines wredrawln(), wrefresh() and wnoutrefresh().
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "curses.priv.h"
|
||
|
|
||
|
int wredrawln(WINDOW *win, int beg, int num)
|
||
|
{
|
||
|
T(("wredrawln(%x,%d,%d) called", win, beg, num));
|
||
|
touchline(win, beg, num);
|
||
|
wrefresh(win);
|
||
|
return OK;
|
||
|
}
|
||
|
|
||
|
int wrefresh(WINDOW *win)
|
||
|
{
|
||
|
T(("wrefresh(%x) called", win));
|
||
|
|
||
|
if (win == curscr)
|
||
|
curscr->_clear = TRUE;
|
||
|
else
|
||
|
wnoutrefresh(win);
|
||
|
return(doupdate());
|
||
|
}
|
||
|
|
||
|
int wnoutrefresh(WINDOW *win)
|
||
|
{
|
||
|
int i, j;
|
||
|
int begx = win->_begx;
|
||
|
int begy = win->_begy;
|
||
|
int m, n;
|
||
|
|
||
|
T(("wnoutrefresh(%x) called", win));
|
||
|
|
||
|
win->_flags &= ~_HASMOVED;
|
||
|
for (i = 0, m = begy; i <= win->_maxy; i++, m++) {
|
||
|
if (win->_firstchar[i] != _NOCHANGE) {
|
||
|
j = win->_firstchar[i];
|
||
|
n = j + begx;
|
||
|
for (; j <= win->_lastchar[i]; j++, n++) {
|
||
|
if (win->_line[i][j] != newscr->_line[m][n]) {
|
||
|
newscr->_line[m][n] = win->_line[i][j];
|
||
|
|
||
|
if (newscr->_firstchar[m] == _NOCHANGE)
|
||
|
newscr->_firstchar[m] = newscr->_lastchar[m] = n;
|
||
|
else if (n < newscr->_firstchar[m])
|
||
|
newscr->_firstchar[m] = n;
|
||
|
else if (n > newscr->_lastchar[m])
|
||
|
newscr->_lastchar[m] = n;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
win->_firstchar[i] = win->_lastchar[i] = _NOCHANGE;
|
||
|
}
|
||
|
|
||
|
if (win->_clear) {
|
||
|
win->_clear = FALSE;
|
||
|
newscr->_clear = TRUE;
|
||
|
}
|
||
|
|
||
|
if (! win->_leave) {
|
||
|
newscr->_cury = win->_cury + win->_begy;
|
||
|
newscr->_curx = win->_curx + win->_begx;
|
||
|
}
|
||
|
return(OK);
|
||
|
}
|