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>
		
			
				
	
	
		
			161 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Public Domain Curses */
 | 
						|
 | 
						|
#include <curspriv.h>
 | 
						|
 | 
						|
RCSID("$Id: touch.c,v 1.29 2008/07/13 16:08:18 wmcbrine Exp $")
 | 
						|
 | 
						|
/*man-start**************************************************************
 | 
						|
 | 
						|
  Name:                                                         touch
 | 
						|
 | 
						|
  Synopsis:
 | 
						|
        int touchwin(WINDOW *win);
 | 
						|
        int touchline(WINDOW *win, int start, int count);
 | 
						|
        int untouchwin(WINDOW *win);
 | 
						|
        int wtouchln(WINDOW *win, int y, int n, int changed);
 | 
						|
        bool is_linetouched(WINDOW *win, int line);
 | 
						|
        bool is_wintouched(WINDOW *win);
 | 
						|
 | 
						|
  Description:
 | 
						|
        touchwin() and touchline() throw away all information about
 | 
						|
        which parts of the window have been touched, pretending that the
 | 
						|
        entire window has been drawn on.  This is sometimes necessary
 | 
						|
        when using overlapping windows, since a change to one window
 | 
						|
        will affect the other window, but the records of which lines
 | 
						|
        have been changed in the other window will not reflect the
 | 
						|
        change.
 | 
						|
 | 
						|
        untouchwin() marks all lines in the window as unchanged since
 | 
						|
        the last call to wrefresh().
 | 
						|
 | 
						|
        wtouchln() makes n lines in the window, starting at line y, look
 | 
						|
        as if they have (changed == 1) or have not (changed == 0) been
 | 
						|
        changed since the last call to wrefresh().
 | 
						|
 | 
						|
        is_linetouched() returns TRUE if the specified line in the
 | 
						|
        specified window has been changed since the last call to
 | 
						|
        wrefresh().
 | 
						|
 | 
						|
        is_wintouched() returns TRUE if the specified window
 | 
						|
        has been changed since the last call to wrefresh().
 | 
						|
 | 
						|
  Return Value:
 | 
						|
        All functions return OK on success and ERR on error except
 | 
						|
        is_wintouched() and is_linetouched().
 | 
						|
 | 
						|
  Portability                                X/Open    BSD    SYS V
 | 
						|
        touchwin                                Y       Y       Y
 | 
						|
        touchline                               Y       -      3.0
 | 
						|
        untouchwin                              Y       -      4.0
 | 
						|
        wtouchln                                Y       Y       Y
 | 
						|
        is_linetouched                          Y       -      4.0
 | 
						|
        is_wintouched                           Y       -      4.0
 | 
						|
 | 
						|
**man-end****************************************************************/
 | 
						|
 | 
						|
int touchwin(WINDOW *win)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
 | 
						|
    PDC_LOG(("touchwin() - called: Win=%x\n", win));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    for (i = 0; i < win->_maxy; i++)
 | 
						|
    {
 | 
						|
        win->_firstch[i] = 0;
 | 
						|
        win->_lastch[i] = win->_maxx - 1;
 | 
						|
    }
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int touchline(WINDOW *win, int start, int count)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
 | 
						|
    PDC_LOG(("touchline() - called: win=%p start %d count %d\n",
 | 
						|
             win, start, count));
 | 
						|
 | 
						|
    if (!win || start > win->_maxy || start + count > win->_maxy)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    for (i = start; i < start + count; i++)
 | 
						|
    {
 | 
						|
        win->_firstch[i] = 0;
 | 
						|
        win->_lastch[i] = win->_maxx - 1;
 | 
						|
    }
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int untouchwin(WINDOW *win)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
 | 
						|
    PDC_LOG(("untouchwin() - called: win=%p", win));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    for (i = 0; i < win->_maxy; i++)
 | 
						|
    {
 | 
						|
        win->_firstch[i] = _NO_CHANGE;
 | 
						|
        win->_lastch[i] = _NO_CHANGE;
 | 
						|
    }
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int wtouchln(WINDOW *win, int y, int n, int changed)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
 | 
						|
    PDC_LOG(("wtouchln() - called: win=%p y=%d n=%d changed=%d\n",
 | 
						|
             win, y, n, changed));
 | 
						|
 | 
						|
    if (!win || y > win->_maxy || y + n > win->_maxy)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    for (i = y; i < y + n; i++)
 | 
						|
    {
 | 
						|
        if (changed)
 | 
						|
        {
 | 
						|
            win->_firstch[i] = 0;
 | 
						|
            win->_lastch[i] = win->_maxx - 1;
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            win->_firstch[i] = _NO_CHANGE;
 | 
						|
            win->_lastch[i] = _NO_CHANGE;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
bool is_linetouched(WINDOW *win, int line)
 | 
						|
{
 | 
						|
    PDC_LOG(("is_linetouched() - called: win=%p line=%d\n", win, line));
 | 
						|
 | 
						|
    if (!win || line > win->_maxy || line < 0)
 | 
						|
        return FALSE;
 | 
						|
 | 
						|
    return (win->_firstch[line] != _NO_CHANGE) ? TRUE : FALSE;
 | 
						|
}
 | 
						|
 | 
						|
bool is_wintouched(WINDOW *win)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
 | 
						|
    PDC_LOG(("is_wintouched() - called: win=%p\n", win));
 | 
						|
 | 
						|
    if (win)
 | 
						|
        for (i = 0; i < win->_maxy; i++)
 | 
						|
            if (win->_firstch[i] != _NO_CHANGE)
 | 
						|
                return TRUE;
 | 
						|
 | 
						|
    return FALSE;
 | 
						|
}
 |