* Implement scrolling in tinycurses

* Fix an off by one bug

Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>




git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3578 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Stefan Reinauer 2008-09-12 21:50:57 +00:00 committed by Stefan Reinauer
parent 229c20f3e2
commit f218d97a17
1 changed files with 19 additions and 3 deletions

View File

@ -70,7 +70,7 @@ static int window_count = 1;
static struct ldat ldat_list[MAX_WINDOWS][SCREEN_Y]; static struct ldat ldat_list[MAX_WINDOWS][SCREEN_Y];
static int ldat_count = 0; static int ldat_count = 0;
/* One item bigger than SCREEN_X to reverse place for a NUL byte. */ /* One item bigger than SCREEN_X to reserve space for a NUL byte. */
static NCURSES_CH_T linebuf_list[SCREEN_Y * MAX_WINDOWS][SCREEN_X + 1]; static NCURSES_CH_T linebuf_list[SCREEN_Y * MAX_WINDOWS][SCREEN_X + 1];
static int linebuf_count = 0; static int linebuf_count = 0;
@ -305,8 +305,8 @@ WINDOW *initscr(void)
stdscr = newwin(SCREEN_Y, SCREEN_X + 1, 0, 0); stdscr = newwin(SCREEN_Y, SCREEN_X + 1, 0, 0);
// TODO: curscr, newscr? // TODO: curscr, newscr?
for (y = 0; y < stdscr->_maxy; y++) { for (y = 0; y <= stdscr->_maxy; y++) {
for (x = 0; x < stdscr->_maxx; x++) { for (x = 0; x <= stdscr->_maxx; x++) {
stdscr->_line[y].text[x].chars[0] = ' '; stdscr->_line[y].text[x].chars[0] = ' ';
stdscr->_line[y].text[x].attr = A_NORMAL; stdscr->_line[y].text[x].attr = A_NORMAL;
} }
@ -817,6 +817,22 @@ int wscrl(WINDOW *win, int n)
return ERR; return ERR;
if (n != 0) { if (n != 0) {
int x, y;
for (y = 0; y <= (win->_maxy - n); y++) {
for (x = 0; x <= win->_maxx; x++) {
win->_line[y].text[x].chars[0] = win->_line[y + n].text[x].chars[0];
win->_line[y].text[x].attr = win->_line[y + n].text[x].attr;
}
}
for (y = (win->_maxy+1 - n); y <= win->_maxy; y++) {
for (x = 0; x <= win->_maxx; x++) {
win->_line[y].text[x].chars[0] = ' ';
win->_line[y].text[x].attr = A_NORMAL;
}
}
// _nc_scroll_window(win, n, win->_regtop, win->_regbottom, win->_nc_bkgd); // _nc_scroll_window(win, n, win->_regtop, win->_regbottom, win->_nc_bkgd);
// _nc_synchook(win); // _nc_synchook(win);
} }