Plan 9 from Bell Labs’s /usr/web/sources/contrib/fgb/root/sys/src/ape/lib/curses/pdcurses/attr.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


/************************************************************************ 
 * This file is part of PDCurses. PDCurses is public domain software;	*
 * you may use it for any purpose. This software is provided AS IS with	*
 * NO WARRANTY whatsoever.						*
 *									*
 * If you use PDCurses in an application, an acknowledgement would be	*
 * appreciated, but is not mandatory. If you make corrections or	*
 * enhancements to PDCurses, please forward them to the current		*
 * maintainer for the benefit of other users.				*
 *									*
 * See the file maintain.er for details of the current maintainer.	*
 ************************************************************************/

#include <curspriv.h>

RCSID("$Id: attr.c,v 1.38 2007/06/21 05:38:07 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 characters
	that are written into the window with waddch().  Attributes are
	a property of the character, and move with the character
	through any scrolling and insert/delete line/character operations.
	To the extent possible on the particular terminal, they will be
	displayed as the graphic rendition of characters put on the
	screen.

	The attrset() function sets the current attributes of the given
	window to attrs.  The attroff() function turns off the named
	attributes without turning on or off any other attributes.  The
	attron() function turns on the named attributes without affecting
	any others.  The color_set() function sets the window color to 
	the value of color_pair.

	The standout() function is the same as attron(A_STANDOUT).  
	The standend() function 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;
	chtype 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);
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].