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>
		
			
				
	
	
		
			350 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			350 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Public Domain Curses */
 | 
						|
 | 
						|
#include <curspriv.h>
 | 
						|
 | 
						|
RCSID("$Id: attr.c,v 1.41 2008/07/13 16:08:17 wmcbrine Exp $")
 | 
						|
 | 
						|
/*man-start**************************************************************
 | 
						|
 | 
						|
  Name:                                                         attr
 | 
						|
 | 
						|
  Synopsis:
 | 
						|
        int attroff(chtype attrs);
 | 
						|
        int wattroff(WINDOW *win, chtype attrs);
 | 
						|
        int attron(chtype attrs);
 | 
						|
        int wattron(WINDOW *win, chtype attrs);
 | 
						|
        int attrset(chtype attrs);
 | 
						|
        int wattrset(WINDOW *win, chtype attrs);
 | 
						|
        int standend(void);
 | 
						|
        int wstandend(WINDOW *win);
 | 
						|
        int standout(void);
 | 
						|
        int wstandout(WINDOW *win);
 | 
						|
 | 
						|
        int color_set(short color_pair, void *opts);
 | 
						|
        int wcolor_set(WINDOW *win, short color_pair, void *opts);
 | 
						|
 | 
						|
        int attr_get(attr_t *attrs, short *color_pair, void *opts);
 | 
						|
        int attr_off(attr_t attrs, void *opts);
 | 
						|
        int attr_on(attr_t attrs, void *opts);
 | 
						|
        int attr_set(attr_t attrs, short color_pair, void *opts);
 | 
						|
        int wattr_get(WINDOW *win, attr_t *attrs, short *color_pair,
 | 
						|
                void *opts);
 | 
						|
        int wattr_off(WINDOW *win, attr_t attrs, void *opts);
 | 
						|
        int wattr_on(WINDOW *win, attr_t attrs, void *opts);
 | 
						|
        int wattr_set(WINDOW *win, attr_t attrs, short color_pair,
 | 
						|
                void *opts);
 | 
						|
 | 
						|
        int chgat(int n, attr_t attr, short color, const void *opts);
 | 
						|
        int mvchgat(int y, int x, int n, attr_t attr, short color,
 | 
						|
                const void *opts);
 | 
						|
        int mvwchgat(WINDOW *win, int y, int x, int n, attr_t attr,
 | 
						|
                short color, const void *opts);
 | 
						|
        int wchgat(WINDOW *win, int n, attr_t attr, short color,
 | 
						|
                const void *opts);
 | 
						|
 | 
						|
        chtype getattrs(WINDOW *win);
 | 
						|
 | 
						|
  Description:
 | 
						|
        These functions manipulate the current attributes and/or colors
 | 
						|
        of the named window.  These attributes can be any combination
 | 
						|
        of A_STANDOUT, A_REVERSE, A_BOLD, A_DIM, A_BLINK, A_UNDERLINE.
 | 
						|
 | 
						|
        These constants are defined in <curses.h> and can be combined
 | 
						|
        with the bitwise-OR operator (|).
 | 
						|
 | 
						|
        The current attributes of a window are applied to all chtypes
 | 
						|
        that are written into the window with waddch(). Attributes are
 | 
						|
        a property of the chtype, and move with the character through
 | 
						|
        any scrolling or insert/delete operations.
 | 
						|
 | 
						|
        attrset() sets the current attributes of the given window to
 | 
						|
        attrs. attroff() turns off the named attributes without
 | 
						|
        affecting any other attributes; attron() turns them on.
 | 
						|
        color_set() sets the window color to the value of color_pair.
 | 
						|
 | 
						|
        standout() is the same as attron(A_STANDOUT). standend() is the
 | 
						|
        same as attrset(A_NORMAL); that is, it turns off all attributes.
 | 
						|
 | 
						|
  Return Value:
 | 
						|
        All functions return OK on success and ERR on error.
 | 
						|
 | 
						|
  Portability                                X/Open    BSD    SYS V
 | 
						|
        attroff                                 Y       Y       Y
 | 
						|
        wattroff                                Y       Y       Y
 | 
						|
        attron                                  Y       Y       Y
 | 
						|
        wattron                                 Y       Y       Y
 | 
						|
        attrset                                 Y       Y       Y
 | 
						|
        wattrset                                Y       Y       Y
 | 
						|
        standend                                Y       Y       Y
 | 
						|
        wstandend                               Y       Y       Y
 | 
						|
        standout                                Y       Y       Y
 | 
						|
        wstandout                               Y       Y       Y
 | 
						|
        color_set                               Y
 | 
						|
        wcolor_set                              Y
 | 
						|
        attr_get                                Y
 | 
						|
        wattr_get                               Y
 | 
						|
        attr_on                                 Y
 | 
						|
        wattr_on                                Y
 | 
						|
        attr_off                                Y
 | 
						|
        wattr_off                               Y
 | 
						|
        attr_set                                Y
 | 
						|
        wattr_set                               Y
 | 
						|
        chgat                                   Y
 | 
						|
        wchgat                                  Y
 | 
						|
        mvchgat                                 Y
 | 
						|
        mvwchgat                                Y
 | 
						|
        getattrs                                -
 | 
						|
 | 
						|
**man-end****************************************************************/
 | 
						|
 | 
						|
int wattroff(WINDOW *win, chtype attrs)
 | 
						|
{
 | 
						|
    PDC_LOG(("wattroff() - called\n"));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    win->_attrs &= (~attrs & A_ATTRIBUTES);
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int attroff(chtype attrs)
 | 
						|
{
 | 
						|
    PDC_LOG(("attroff() - called\n"));
 | 
						|
 | 
						|
    return wattroff(stdscr, attrs);
 | 
						|
}
 | 
						|
 | 
						|
int wattron(WINDOW *win, chtype attrs)
 | 
						|
{
 | 
						|
    chtype newcolr, oldcolr, newattr, oldattr;
 | 
						|
 | 
						|
    PDC_LOG(("wattron() - called\n"));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    if ((win->_attrs & A_COLOR) && (attrs & A_COLOR))
 | 
						|
    {
 | 
						|
        oldcolr = win->_attrs & A_COLOR;
 | 
						|
        oldattr = win->_attrs ^ oldcolr;
 | 
						|
        newcolr = attrs & A_COLOR;
 | 
						|
        newattr = (attrs & A_ATTRIBUTES) ^ newcolr;
 | 
						|
        newattr |= oldattr;
 | 
						|
        win->_attrs = newattr | newcolr;
 | 
						|
    }
 | 
						|
    else
 | 
						|
        win->_attrs |= (attrs & A_ATTRIBUTES);
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int attron(chtype attrs)
 | 
						|
{
 | 
						|
    PDC_LOG(("attron() - called\n"));
 | 
						|
 | 
						|
    return wattron(stdscr, attrs);
 | 
						|
}
 | 
						|
 | 
						|
int wattrset(WINDOW *win, chtype attrs)
 | 
						|
{
 | 
						|
    PDC_LOG(("wattrset() - called\n"));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    win->_attrs = attrs & A_ATTRIBUTES;
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int attrset(chtype attrs)
 | 
						|
{
 | 
						|
    PDC_LOG(("attrset() - called\n"));
 | 
						|
 | 
						|
    return wattrset(stdscr, attrs);
 | 
						|
}
 | 
						|
 | 
						|
int standend(void)
 | 
						|
{
 | 
						|
    PDC_LOG(("standend() - called\n"));
 | 
						|
 | 
						|
    return wattrset(stdscr, A_NORMAL);
 | 
						|
}
 | 
						|
 | 
						|
int standout(void)
 | 
						|
{
 | 
						|
    PDC_LOG(("standout() - called\n"));
 | 
						|
 | 
						|
    return wattrset(stdscr, A_STANDOUT);
 | 
						|
}
 | 
						|
 | 
						|
int wstandend(WINDOW *win)
 | 
						|
{
 | 
						|
    PDC_LOG(("wstandend() - called\n"));
 | 
						|
 | 
						|
    return wattrset(win, A_NORMAL);
 | 
						|
}
 | 
						|
 | 
						|
int wstandout(WINDOW *win)
 | 
						|
{
 | 
						|
    PDC_LOG(("wstandout() - called\n"));
 | 
						|
 | 
						|
    return wattrset(win, A_STANDOUT);
 | 
						|
}
 | 
						|
 | 
						|
chtype getattrs(WINDOW *win)
 | 
						|
{
 | 
						|
    return win ? win->_attrs : 0;
 | 
						|
}
 | 
						|
 | 
						|
int wcolor_set(WINDOW *win, short color_pair, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("wcolor_set() - called\n"));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    win->_attrs = (win->_attrs & ~A_COLOR) | COLOR_PAIR(color_pair);
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int color_set(short color_pair, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("color_set() - called\n"));
 | 
						|
 | 
						|
    return wcolor_set(stdscr, color_pair, opts);
 | 
						|
}
 | 
						|
 | 
						|
int wattr_get(WINDOW *win, attr_t *attrs, short *color_pair, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("wattr_get() - called\n"));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    if (attrs)
 | 
						|
        *attrs = win->_attrs & (A_ATTRIBUTES & ~A_COLOR);
 | 
						|
 | 
						|
    if (color_pair)
 | 
						|
        *color_pair = PAIR_NUMBER(win->_attrs);
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int attr_get(attr_t *attrs, short *color_pair, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("attr_get() - called\n"));
 | 
						|
 | 
						|
    return wattr_get(stdscr, attrs, color_pair, opts);
 | 
						|
}
 | 
						|
 | 
						|
int wattr_off(WINDOW *win, attr_t attrs, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("wattr_off() - called\n"));
 | 
						|
 | 
						|
    return wattroff(win, attrs);
 | 
						|
}
 | 
						|
 | 
						|
int attr_off(attr_t attrs, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("attr_off() - called\n"));
 | 
						|
 | 
						|
    return wattroff(stdscr, attrs);
 | 
						|
}
 | 
						|
 | 
						|
int wattr_on(WINDOW *win, attr_t attrs, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("wattr_off() - called\n"));
 | 
						|
 | 
						|
    return wattron(win, attrs);
 | 
						|
}
 | 
						|
 | 
						|
int attr_on(attr_t attrs, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("attr_on() - called\n"));
 | 
						|
 | 
						|
    return wattron(stdscr, attrs);
 | 
						|
}
 | 
						|
 | 
						|
int wattr_set(WINDOW *win, attr_t attrs, short color_pair, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("wattr_set() - called\n"));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    win->_attrs = (attrs & (A_ATTRIBUTES & ~A_COLOR)) | COLOR_PAIR(color_pair);
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int attr_set(attr_t attrs, short color_pair, void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("attr_get() - called\n"));
 | 
						|
 | 
						|
    return wattr_set(stdscr, attrs, color_pair, opts);
 | 
						|
}
 | 
						|
 | 
						|
int wchgat(WINDOW *win, int n, attr_t attr, short color, const void *opts)
 | 
						|
{
 | 
						|
    chtype *dest, newattr;
 | 
						|
    int startpos, endpos;
 | 
						|
 | 
						|
    PDC_LOG(("wchgat() - called\n"));
 | 
						|
 | 
						|
    if (!win)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    newattr = (attr & A_ATTRIBUTES) | COLOR_PAIR(color);
 | 
						|
 | 
						|
    startpos = win->_curx;
 | 
						|
    endpos = ((n < 0) ? win->_maxx : min(startpos + n, win->_maxx)) - 1;
 | 
						|
    dest = win->_y[win->_cury];
 | 
						|
 | 
						|
    for (n = startpos; n <= endpos; n++)
 | 
						|
        dest[n] = (dest[n] & A_CHARTEXT) | newattr;
 | 
						|
 | 
						|
    n = win->_cury;
 | 
						|
 | 
						|
    if (startpos < win->_firstch[n] || win->_firstch[n] == _NO_CHANGE)
 | 
						|
        win->_firstch[n] = startpos;
 | 
						|
 | 
						|
    if (endpos > win->_lastch[n])
 | 
						|
        win->_lastch[n] = endpos;
 | 
						|
 | 
						|
    PDC_sync(win);
 | 
						|
 | 
						|
    return OK;
 | 
						|
}
 | 
						|
 | 
						|
int chgat(int n, attr_t attr, short color, const void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("chgat() - called\n"));
 | 
						|
 | 
						|
    return wchgat(stdscr, n, attr, color, opts);
 | 
						|
}
 | 
						|
 | 
						|
int mvchgat(int y, int x, int n, attr_t attr, short color, const void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("mvchgat() - called\n"));
 | 
						|
 | 
						|
    if (move(y, x) == ERR)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    return wchgat(stdscr, n, attr, color, opts);
 | 
						|
}
 | 
						|
 | 
						|
int mvwchgat(WINDOW *win, int y, int x, int n, attr_t attr, short color,
 | 
						|
             const void *opts)
 | 
						|
{
 | 
						|
    PDC_LOG(("mvwchgat() - called\n"));
 | 
						|
 | 
						|
    if (wmove(win, y, x) == ERR)
 | 
						|
        return ERR;
 | 
						|
 | 
						|
    return wchgat(win, n, attr, color, opts);
 | 
						|
}
 |