Change-Id: Iffed3602456f5306711c65f06c873c58d4086e11 Signed-off-by: Stefan Reinauer <reinauer@google.com> Reviewed-on: http://review.coreboot.org/363 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Public Domain Curses */
 | 
						|
 | 
						|
#include <curspriv.h>
 | 
						|
 | 
						|
RCSID("$Id: scroll.c,v 1.36 2008/07/13 16:08:18 wmcbrine Exp $")
 | 
						|
 | 
						|
/*man-start**************************************************************
 | 
						|
 | 
						|
  Name:                                                         scroll
 | 
						|
 | 
						|
  Synopsis:
 | 
						|
        int scroll(WINDOW *win);
 | 
						|
        int scrl(int n);
 | 
						|
        int wscrl(WINDOW *win, int n);
 | 
						|
 | 
						|
  Description:
 | 
						|
        scroll() causes the window to scroll up one line.  This involves
 | 
						|
        moving the lines in the window data strcture.
 | 
						|
 | 
						|
        With a positive n, scrl() and wscrl() scroll the window up n
 | 
						|
        lines (line i + n becomes i); otherwise they scroll the window
 | 
						|
        down n lines.
 | 
						|
 | 
						|
        For these functions to work, scrolling must be enabled via
 | 
						|
        scrollok(). Note also that scrolling is not allowed if the
 | 
						|
        supplied window is a pad.
 | 
						|
 | 
						|
  Return Value:
 | 
						|
        All functions return OK on success and ERR on error.
 | 
						|
 | 
						|
  Portability                                X/Open    BSD    SYS V
 | 
						|
        scroll                                  Y       Y       Y
 | 
						|
        scrl                                    Y       -      4.0
 | 
						|
        wscrl                                   Y       -      4.0
 | 
						|
 | 
						|
**man-end****************************************************************/
 | 
						|
 | 
						|
int wscrl(WINDOW *win, int n)
 | 
						|
{
 | 
						|
    int i, l, dir, start, end;
 | 
						|
    chtype blank, *temp;
 | 
						|
 | 
						|
    /* Check if window scrolls. Valid for window AND pad */
 | 
						|
 | 
						|
    if (!win || !win->_scroll || !n)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    blank = win->_bkgd;
 | 
						|
 | 
						|
    if (n > 0)
 | 
						|
    {
 | 
						|
        start = win->_tmarg;
 | 
						|
        end = win->_bmarg;
 | 
						|
        dir = 1;
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        start = win->_bmarg;
 | 
						|
        end = win->_tmarg;
 | 
						|
        dir = -1;
 | 
						|
    }
 | 
						|
 | 
						|
    for (l = 0; l < (n * dir); l++)
 | 
						|
    {
 | 
						|
        temp = win->_y[start];
 | 
						|
 | 
						|
        /* re-arrange line pointers */
 | 
						|
 | 
						|
        for (i = start; i != end; i += dir)
 | 
						|
            win->_y[i] = win->_y[i + dir];
 | 
						|
 | 
						|
        win->_y[end] = temp;
 | 
						|
 | 
						|
        /* make a blank line */
 | 
						|
 | 
						|
        for (i = 0; i < win->_maxx; i++)
 | 
						|
            *temp++ = blank;
 | 
						|
    }
 | 
						|
 | 
						|
    touchline(win, win->_tmarg, win->_bmarg - win->_tmarg + 1);
 | 
						|
 | 
						|
    PDC_sync(win);
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int scrl(int n)
 | 
						|
{
 | 
						|
    PDC_LOG(("scrl() - called\n"));
 | 
						|
 | 
						|
    return wscrl(stdscr, n);
 | 
						|
}
 | 
						|
 | 
						|
int scroll(WINDOW *win)
 | 
						|
{
 | 
						|
    PDC_LOG(("scroll() - called\n"));
 | 
						|
 | 
						|
    return wscrl(win, 1);
 | 
						|
}
 |