Change-Id: If881ec130833c7e7e62caa3d31e350a531f5bc8e Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-on: http://review.coreboot.org/12398 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
		
			
				
	
	
		
			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);
 | |
| }
 |