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>
		
			
				
	
	
		
			155 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Public Domain Curses */
 | |
| 
 | |
| #include <curspriv.h>
 | |
| 
 | |
| RCSID("$Id: clear.c,v 1.35 2008/07/13 16:08:18 wmcbrine Exp $")
 | |
| 
 | |
| /*man-start**************************************************************
 | |
| 
 | |
|   Name:                                                         clear
 | |
| 
 | |
|   Synopsis:
 | |
|         int clear(void);
 | |
|         int wclear(WINDOW *win);
 | |
|         int erase(void);
 | |
|         int werase(WINDOW *win);
 | |
|         int clrtobot(void);
 | |
|         int wclrtobot(WINDOW *win);
 | |
|         int clrtoeol(void);
 | |
|         int wclrtoeol(WINDOW *win);
 | |
| 
 | |
|   Description:
 | |
|         erase() and werase() copy blanks (i.e. the background chtype) to
 | |
|         every cell of the window.
 | |
| 
 | |
|         clear() and wclear() are similar to erase() and werase(), but
 | |
|         they also call clearok() to ensure that the the window is
 | |
|         cleared on the next wrefresh().
 | |
| 
 | |
|         clrtobot() and wclrtobot() clear the window from the current
 | |
|         cursor position to the end of the window.
 | |
| 
 | |
|         clrtoeol() and wclrtoeol() clear the window from the current
 | |
|         cursor position to the end of the current line.
 | |
| 
 | |
|   Return Value:
 | |
|         All functions return OK on success and ERR on error.
 | |
| 
 | |
|   Portability                                X/Open    BSD    SYS V
 | |
|         clear                                   Y       Y       Y
 | |
|         wclear                                  Y       Y       Y
 | |
|         erase                                   Y       Y       Y
 | |
|         werase                                  Y       Y       Y
 | |
|         clrtobot                                Y       Y       Y
 | |
|         wclrtobot                               Y       Y       Y
 | |
|         clrtoeol                                Y       Y       Y
 | |
|         wclrtoeol                               Y       Y       Y
 | |
| 
 | |
| **man-end****************************************************************/
 | |
| 
 | |
| int wclrtoeol(WINDOW *win)
 | |
| {
 | |
|     int x, y, minx;
 | |
|     chtype blank, *ptr;
 | |
| 
 | |
|     PDC_LOG(("wclrtoeol() - called: Row: %d Col: %d\n",
 | |
|              win->_cury, win->_curx));
 | |
| 
 | |
|     if (!win)
 | |
|         return ERR;
 | |
| 
 | |
|     y = win->_cury;
 | |
|     x = win->_curx;
 | |
| 
 | |
|     /* wrs (4/10/93) account for window background */
 | |
| 
 | |
|     blank = win->_bkgd;
 | |
| 
 | |
|     for (minx = x, ptr = &win->_y[y][x]; minx < win->_maxx; minx++, ptr++)
 | |
|         *ptr = blank;
 | |
| 
 | |
|     if (x < win->_firstch[y] || win->_firstch[y] == _NO_CHANGE)
 | |
|         win->_firstch[y] = x;
 | |
| 
 | |
|     win->_lastch[y] = win->_maxx - 1;
 | |
| 
 | |
|     PDC_sync(win);
 | |
|     return OK;
 | |
| }
 | |
| 
 | |
| int clrtoeol(void)
 | |
| {
 | |
|     PDC_LOG(("clrtoeol() - called\n"));
 | |
| 
 | |
|     return wclrtoeol(stdscr);
 | |
| }
 | |
| 
 | |
| int wclrtobot(WINDOW *win)
 | |
| {
 | |
|     PDC_LOG(("wclrtobot() - called\n"));
 | |
| 
 | |
|     if (!win)
 | |
|         return ERR;
 | |
| 
 | |
|     int savey = win->_cury;
 | |
|     int savex = win->_curx;
 | |
| 
 | |
|     /* should this involve scrolling region somehow ? */
 | |
| 
 | |
|     if (win->_cury + 1 < win->_maxy)
 | |
|     {
 | |
|         win->_curx = 0;
 | |
|         win->_cury++;
 | |
|         for (; win->_maxy > win->_cury; win->_cury++)
 | |
|             wclrtoeol(win);
 | |
|         win->_cury = savey;
 | |
|         win->_curx = savex;
 | |
|     }
 | |
|     wclrtoeol(win);
 | |
| 
 | |
|     PDC_sync(win);
 | |
|     return OK;
 | |
| }
 | |
| 
 | |
| int clrtobot(void)
 | |
| {
 | |
|     PDC_LOG(("clrtobot() - called\n"));
 | |
| 
 | |
|     return wclrtobot(stdscr);
 | |
| }
 | |
| 
 | |
| int werase(WINDOW *win)
 | |
| {
 | |
|     PDC_LOG(("werase() - called\n"));
 | |
| 
 | |
|     if (wmove(win, 0, 0) == ERR)
 | |
|         return ERR;
 | |
| 
 | |
|     return wclrtobot(win);
 | |
| }
 | |
| 
 | |
| int erase(void)
 | |
| {
 | |
|     PDC_LOG(("erase() - called\n"));
 | |
| 
 | |
|     return werase(stdscr);
 | |
| }
 | |
| 
 | |
| int wclear(WINDOW *win)
 | |
| {
 | |
|     PDC_LOG(("wclear() - called\n"));
 | |
| 
 | |
|     if (!win)
 | |
|         return ERR;
 | |
| 
 | |
|     win->_clear = TRUE;
 | |
|     return werase(win);
 | |
| }
 | |
| 
 | |
| int clear(void)
 | |
| {
 | |
|     PDC_LOG(("clear() - called\n"));
 | |
| 
 | |
|     return wclear(stdscr);
 | |
| }
 |