+</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
+ These routines manipulate the current attributes of the named window,
+ which then apply to all characters that are written into the window
+ with <B>waddch</B>, <B>waddstr</B> and <B>wprintw</B>. Attributes are a property of the
+ character, and move with the character through any scrolling and in-
+ sert/delete line/character operations. To the extent possible, they
+ are displayed as appropriate modifications to the graphic rendition of
+ characters put on the screen.
+
+ These routines do not affect the attributes used when erasing portions
+ of the window. See <B><A HREF="curs_bkgd.3X.html">curs_bkgd(3X)</A></B> for functions which modify the at-
+ tributes used for erasing and clearing.
+
+ Routines which do not have a <B>WINDOW*</B> parameter apply to <B>stdscr</B>. For
+ example, <B>attr_set</B> is the <B>stdscr</B> variant of <B>wattr_set</B>.
+
+
+</PRE><H3><a name="h3-Window-attributes">Window attributes</a></H3><PRE>
+ There are two sets of functions:
+
+ <B>o</B> functions for manipulating the window attributes and color: <B>wat-</B>
+ <B>tr_set</B> and <B>wattr_get</B>.
+
+ <B>o</B> functions for manipulating only the window attributes (not color):
+ <B>wattr_on</B> and <B>wattr_off</B>.
+
+ The <B>wattr_set</B> function sets the current attributes of the given window
+ to <I>attrs</I>, with color specified by <I>pair</I>.
+
+ Use <B>wattr_get</B> to retrieve attributes for the given window.
+
+ Use <B>attr_on</B> and <B>wattr_on</B> to turn on window attributes, i.e., values
+ OR'd together in <I>attr</I>, without affecting other attributes. Use <B>at-</B>
+ <B>tr_off</B> and <B>wattr_off</B> to turn off window attributes, again values OR'd
+ together in <I>attr</I>, without affecting other attributes.
+
+
+</PRE><H3><a name="h3-Legacy-window-attributes">Legacy window attributes</a></H3><PRE>
+ The X/Open window attribute routines which <I>set</I> or <I>get</I>, turn <I>on</I> or <I>off</I>
+ are extensions of older routines which assume that color pairs are OR'd
+ into the attribute parameter. These newer routines use similar names,
+ because X/Open simply added an underscore (<B>_</B>) for the newer names.
+
+ The <B>int</B> datatype used in the legacy routines is treated as if it is the
+ same size as <B>chtype</B> (used by <B><A HREF="curs_addch.3X.html">addch(3X)</A></B>). It holds the common video at-
+ tributes (such as bold, reverse), as well as a few bits for color.
+ Those bits correspond to the <B>A_COLOR</B> symbol. The <B>COLOR_PAIR</B> macro pro-
+ vides a value which can be OR'd into the attribute parameter. For ex-
+ ample, as long as that value fits into the <B>A_COLOR</B> mask, then these
+ calls produce similar results:
+
+ attrset(A_BOLD | COLOR_PAIR(<I>pair</I>));
+ attr_set(A_BOLD, <I>pair</I>, NULL);
+
+ However, if the value does not fit, then the <B>COLOR_PAIR</B> macro uses only
+ the bits that fit. For example, because in ncurses <B>A_COLOR</B> has eight
+ (8) bits, then <B>COLOR_PAIR(</B><I>259</I><B>)</B> is 4 (i.e., 259 is 4 more than the limit
+ 255).
+
+ The <B>PAIR_NUMBER</B> macro extracts a pair number from an <B>int</B> (or <B>chtype</B>).
+ For example, the <I>input</I> and <I>output</I> values in these statements would be
+ the same:
+
+ int value = A_BOLD | COLOR_PAIR(<I>input</I>);
+ int <I>output</I> = PAIR_NUMBER(value);
+
+ The <B>attrset</B> routine is a legacy feature predating SVr4 curses but kept
+ in X/Open Curses for the same reason that SVr4 curses kept it: compati-
+ bility.
+
+ The remaining <B>attr</B>* functions operate exactly like the corresponding
+ <B>attr_</B>* functions, except that they take arguments of type <B>int</B> rather
+ than <B>attr_t</B>.
+
+ There is no corresponding <B>attrget</B> function as such in X/Open Curses,
+ although ncurses provides <B>getattrs</B> (see <B><A HREF="curs_legacy.3X.html">curs_legacy(3X)</A></B>).
+
+
+</PRE><H3><a name="h3-Change-character-rendition">Change character rendition</a></H3><PRE>
+ The routine <B>chgat</B> changes the attributes of a given number of charac-
+ ters starting at the current cursor location of <B>stdscr</B>. It does not
+ update the cursor and does not perform wrapping. A character count of
+ -1 or greater than the remaining window width means to change at-
+ tributes all the way to the end of the current line. The <B>wchgat</B> func-
+ tion generalizes this to any window; the <B>mvwchgat</B> function does a cur-
+ sor move before acting.
+
+ In these functions, the color <I>pair</I> argument is a color-pair index (as
+ in the first argument of <B>init_pair</B>, see <B><A HREF="curs_color.3X.html">curs_color(3X)</A></B>).
+
+
+</PRE><H3><a name="h3-Change-window-color">Change window color</a></H3><PRE>
+ The routine <B>color_set</B> sets the current color of the given window to the
+ foreground/background combination described by the color <I>pair</I> parame-
+ ter.
+
+
+</PRE><H3><a name="h3-Standout">Standout</a></H3><PRE>
+ The routine <B>standout</B> is the same as <B>attron(A_STANDOUT)</B>. The routine
+ <B>standend</B> is the same as <B>attrset(A_NORMAL)</B> or <B>attrset(0)</B>, that is, it
+ turns off all attributes.
+
+ X/Open does not mark these "restricted", because
+
+ <B>o</B> they have well established legacy use, and
+
+ <B>o</B> there is no ambiguity about the way the attributes might be com-
+ bined with a color pair.
+
+
+</PRE><H2><a name="h2-VIDEO-ATTRIBUTES">VIDEO ATTRIBUTES</a></H2><PRE>
+ The following video attributes, defined in <B><curses.h></B>, can be passed to
+ the routines <B>attron</B>, <B>attroff</B>, and <B>attrset</B>, or OR'd with the characters
+ passed to <B>addch</B> (see <B><A HREF="curs_addch.3X.html">curs_addch(3X)</A></B>).
+
+ <I>Name</I> <I>Description</I>
+ -----------------------------------------------------------------
+ <B>A_NORMAL</B> Normal display (no highlight)
+ <B>A_STANDOUT</B> Best highlighting mode of the terminal.
+ <B>A_UNDERLINE</B> Underlining
+ <B>A_REVERSE</B> Reverse video
+ <B>A_BLINK</B> Blinking
+ <B>A_DIM</B> Half bright
+ <B>A_BOLD</B> Extra bright or bold
+ <B>A_PROTECT</B> Protected mode
+ <B>A_INVIS</B> Invisible or blank mode
+ <B>A_ALTCHARSET</B> Alternate character set
+ <B>A_ITALIC</B> Italics (non-X/Open extension)
+ <B>A_CHARTEXT</B> Bit-mask to extract a character
+ <B>A_COLOR</B> Bit-mask to extract a color (legacy routines)
+
+ These video attributes are supported by <B>attr_on</B> and related functions
+ (which also support the attributes recognized by <B>attron</B>, etc.):
+
+ <I>Name</I> <I>Description</I>
+ -----------------------------------------
+ <B>WA_HORIZONTAL</B> Horizontal highlight
+ <B>WA_LEFT</B> Left highlight
+ <B>WA_LOW</B> Low highlight
+ <B>WA_RIGHT</B> Right highlight
+ <B>WA_TOP</B> Top highlight
+ <B>WA_VERTICAL</B> Vertical highlight
+
+ The return values of many of these routines are not meaningful (they
+ are implemented as macro-expanded assignments and simply return their
+ argument). The SVr4 manual page claims (falsely) that these routines
+ always return <B>1</B>.
+
+
+</PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
+ These functions may be macros:
+
+ <B>attroff</B>, <B>wattroff</B>, <B>attron</B>, <B>wattron</B>, <B>attrset</B>, <B>wattrset</B>, <B>standend</B>
+ and <B>standout</B>.
+
+ Color pair values can only be OR'd with attributes if the pair number
+ is less than 256. The alternate functions such as <B>color_set</B> can pass a
+ color pair value directly. However, ncurses ABI 4 and 5 simply OR this
+ value within the alternate functions. You must use ncurses ABI 6 to
+ support more than 256 color pairs.
+
+
+</PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
+ X/Open Curses is largely based on SVr4 curses, adding support for
+ "wide-characters" (not specific to Unicode). Some of the X/Open dif-
+ ferences from SVr4 curses address the way video attributes can be ap-
+ plied to wide-characters. But aside from that, <B>attrset</B> and <B>attr_set</B>
+ are similar. SVr4 curses provided the basic features for manipulating
+ video attributes. However, earlier versions of curses provided a part
+ of these features.
+
+ As seen in 2.8BSD, curses assumed 7-bit characters, using the eighth
+ bit of a byte to represent the <I>standout</I> feature (often implemented as
+ bold and/or reverse video). The BSD curses library provided functions
+ <B>standout</B> and <B>standend</B> which were carried along into X/Open Curses due
+ to their pervasive use in legacy applications.
+
+ Some terminals in the 1980s could support a variety of video at-
+ tributes, although the BSD curses library could do nothing with those.
+ System V (1983) provided an improved curses library. It defined the <B>A_</B>
+ symbols for use by applications to manipulate the other attributes.
+ There are few useful references for the chronology.
+
+ Goodheart's book <I>UNIX</I> <I>Curses</I> <I>Explained</I> (1991) describes SVr3 (1987),
+ commenting on several functions:
+
+ <B>o</B> the <B>attron</B>, <B>attroff</B>, <B>attrset</B> functions (and most of the functions
+ found in SVr4 but not in BSD curses) were introduced by System V,
+
+ <B>o</B> the alternate character set feature with <B>A_ALTCHARSET</B> was added in
+ SVr2 and improved in SVr3 (by adding <B>acs_map[]</B>),
+
+ <B>o</B> <B>start_color</B> and related color-functions were introduced by System
+ V.3.2,
+
+ <B>o</B> pads, soft-keys were added in SVr3, and
+
+ Goodheart did not mention the background character or the <B>cchar_t</B> type.
+ Those are respectively SVr4 and X/Open features. He did mention the <B>A_</B>
+ constants, but did not indicate their values. Those were not the same
+ in different systems, even for those marked as System V.
+
+ Different Unix systems used different sizes for the bit-fields in
+ <B>chtype</B> for <I>characters</I> and <I>colors</I>, and took into account the different
+ integer sizes (32-bit versus 64-bit).
+
+ This table showing the number of bits for <B>A_COLOR</B> and <B>A_CHARTEXT</B> was
+ gleaned from the curses header files for various operating systems and
+ architectures. The inferred architecture and notes reflect the format
+ and size of the defined constants as well as clues such as the alter-
+ nate character set implementation. A 32-bit library can be used on a
+ 64-bit system, but not necessarily the reverse.
+
+ <I>Year</I> <I>System</I> <I>Arch</I> <I>Color</I> <I>Char</I> <I>Notes</I>
+ ----------------------------------------------------------------
+ 1992 Solaris 5.2 32 6 17 SVr4 curses
+ 1992 HPUX 9 32 no 8 SVr2 curses
+ 1992 AIX 3.2 32 no 23 SVr2 curses
+ 1994 OSF/1 r3 32 no 23 SVr2 curses
+ 1995 HP-UX 10.00 32 6 16 SVr3 "curses_colr"
+ 1995 HP-UX 10.00 32 6 8 SVr4, X/Open curses
+ 1995 Solaris 5.4 32/64 7 16 X/Open curses
+ 1996 AIX 4.2 32 7 16 X/Open curses
+ 1996 OSF/1 r4 32 6 16 X/Open curses
+
+ 1997 HP-UX 11.00 32 6 8 X/Open curses
+ 2000 U/Win 32/64 7/31 16 uses <B>chtype</B>
+
+ Notes:
+
+ Regarding HP-UX,
+
+ <B>o</B> HP-UX 10.20 (1996) added support for 64-bit PA-RISC processors
+ in 1996.
+
+ <B>o</B> HP-UX 10.30 (1997) marked "curses_colr" obsolete. That version
+ of curses was dropped with HP-UX 11.30 in 2006.
+
+ Regarding OSF/1 (and Tru64),
+
+ <B>o</B> These used 64-bit hardware. Like ncurses, the OSF/1 curses in-
+ terface is not customized for 32-bit and 64-bit versions.
+
+ <B>o</B> Unlike other systems which evolved from AT&T code, OSF/1 provid-
+ ed a new implementation for X/Open curses.
+
+ Regarding Solaris,
+
+ <B>o</B> The initial release of Solaris was in 1992.
+
+ <B>o</B> The <I>xpg4</I> (X/Open) curses was developed by MKS from 1990 to 1995.
+ Sun's copyright began in 1996.
+
+ <B>o</B> Sun updated the X/Open curses interface after 64-bit support was
+ introduced in 1997, but did not modify the SVr4 curses inter-
+ face.
+
+ Regarding U/Win,
+
+ <B>o</B> Development of the curses library began in 1991, stopped in
+ 2000.
+
+ <B>o</B> Color support was added in 1998.
+
+ <B>o</B> The library uses only <B>chtype</B> (no <B>cchar_t</B>).
+
+ Once X/Open curses was adopted in the mid-1990s, the constraint of a
+ 32-bit interface with many colors and wide-characters for <B>chtype</B> became
+ a moot point. The <B>cchar_t</B> structure (whose size and members are not
+ specified in X/Open Curses) could be extended as needed.
+
+ Other interfaces are rarely used now:
+
+ <B>o</B> BSD curses was improved slightly in 1993/1994 using Keith Bostic's
+ modification to make the library 8-bit clean for <B>nvi</B>. He moved
+ <I>standout</I> attribute to a structure member.
+
+ The resulting 4.4BSD curses was replaced by ncurses over the next
+ ten years.
+
+ <B>o</B> U/Win is rarely used now.
+
+
+</PRE><H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
+ This implementation provides the <B>A_ITALIC</B> attribute for terminals which
+ have the <B>enter_italics_mode</B> (<B>sitm</B>) and <B>exit_italics_mode</B> (<B>ritm</B>) capa-
+ bilities. Italics are not mentioned in X/Open Curses. Unlike the oth-
+ er video attributes, <B>A_ITALIC</B> is unrelated to the <B>set_attributes</B> capa-
+ bilities. This implementation makes the assumption that <B>exit_attri-</B>
+ <B>bute_mode</B> may also reset italics.
+
+ Each of the functions added by XSI Curses has a parameter <I>opts</I>, which
+ X/Open Curses still (after more than twenty years) documents as re-
+ served for future use, saying that it should be <B>NULL</B>. This implementa-
+ tion uses that parameter in ABI 6 for the functions which have a color-
+ pair parameter to support <I>extended</I> <I>color</I> <I>pairs</I>:
+
+ <B>o</B> For functions which modify the color, e.g., <B>wattr_set</B>, if <I>opts</I> is
+ set it is treated as a pointer to <B>int</B>, and used to set the color
+ pair instead of the <B>short</B> <I>pair</I> parameter.
+
+ <B>o</B> For functions which retrieve the color, e.g., <B>wattr_get</B>, if <I>opts</I> is
+ set it is treated as a pointer to <B>int</B>, and used to retrieve the
+ color pair as an <B>int</B> value, in addition retrieving it via the stan-
+ dard pointer to <B>short</B> parameter.
+
+ The remaining functions which have <I>opts</I>, but do not manipulate color,
+ e.g., <B>wattr_on</B> and <B>wattr_off</B> are not used by this implementation except
+ to check that they are <B>NULL</B>.
+
+
+</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
+ These functions are supported in the XSI Curses standard, Issue 4. The
+ standard defined the dedicated type for highlights, <B>attr_t</B>, which was
+ not defined in SVr4 curses. The functions taking <B>attr_t</B> arguments were
+ not supported under SVr4.
+
+ Very old versions of this library did not force an update of the screen
+ when changing the attributes. Use <B>touchwin</B> to force the screen to
+ match the updated attributes.
+
+ The XSI Curses standard states that whether the traditional functions
+ <B>attron</B>/<B>attroff</B>/<B>attrset</B> can manipulate attributes other than <B>A_BLINK</B>,
+ <B>A_BOLD</B>, <B>A_DIM</B>, <B>A_REVERSE</B>, <B>A_STANDOUT</B>, or <B>A_UNDERLINE</B> is "unspecified".
+ Under this implementation as well as SVr4 curses, these functions cor-
+ rectly manipulate all other highlights (specifically, <B>A_ALTCHARSET</B>,
+ <B>A_PROTECT</B>, and <B>A_INVIS</B>).
+
+ XSI Curses added these entry points:
+
+ <B>attr_get</B>, <B>attr_on</B>, <B>attr_off</B>, <B>attr_set</B>, <B>wattr_on</B>, <B>wattr_off</B>, <B>wat-</B>
+ <B>tr_get</B>, <B>wattr_set</B>
+
+ The new functions are intended to work with a new series of highlight
+ macros prefixed with <B>WA_</B>. The older macros have direct counterparts in
+ the newer set of names:
+
+ <I>Name</I> <I>Description</I>
+ ------------------------------------------------------------
+ <B>WA_NORMAL</B> Normal display (no highlight)
+ <B>WA_STANDOUT</B> Best highlighting mode of the terminal.
+ <B>WA_UNDERLINE</B> Underlining
+ <B>WA_REVERSE</B> Reverse video
+ <B>WA_BLINK</B> Blinking
+ <B>WA_DIM</B> Half bright
+ <B>WA_BOLD</B> Extra bright or bold
+ <B>WA_ALTCHARSET</B> Alternate character set
+
+ XSI curses does not assign values to these symbols, nor does it state
+ whether or not they are related to the similarly-named A_NORMAL, etc.:
+
+ <B>o</B> The XSI curses standard specifies that each pair of corresponding
+ <B>A_</B> and <B>WA_</B>-using functions operates on the same current-highlight
+ information.
+
+ <B>o</B> However, in some implementations, those symbols have unrelated val-
+ ues.
+
+ For example, the Solaris <I>xpg4</I> (X/Open) curses declares <B>attr_t</B> to be
+ an unsigned short integer (16-bits), while <B>chtype</B> is a unsigned in-
+ teger (32-bits). The <B>WA_</B> symbols in this case are different from
+ the <B>A_</B> symbols because they are used for a smaller datatype which
+ does not represent <B>A_CHARTEXT</B> or <B>A_COLOR</B>.
+
+ In this implementation (as in many others), the values happen to be
+ the same because it simplifies copying information between <B>chtype</B>
+ and <B>cchar_t</B> variables.
+
+ The XSI standard extended conformance level adds new highlights <B>A_HORI-</B>
+ <B>ZONTAL</B>, <B>A_LEFT</B>, <B>A_LOW</B>, <B>A_RIGHT</B>, <B>A_TOP</B>, <B>A_VERTICAL</B> (and corresponding
+ <B>WA_</B> macros for each). As of August 2013, no known terminal provides
+ these highlights (i.e., via the <B>sgr1</B> capability).
+
+
+</PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
+ All routines return the integer <B>OK</B> on success, or <B>ERR</B> on failure.
+
+ X/Open does not define any error conditions.
+
+ This implementation
+
+ <B>o</B> returns an error if the window pointer is null.
+
+ <B>o</B> returns an error if the color pair parameter for <B>wcolor_set</B> is out-
+ side the range 0..COLOR_PAIRS-1.
+
+ <B>o</B> does not return an error if either of the parameters of <B>wattr_get</B>
+ used for retrieving attribute or color-pair values is <B>NULL</B>.
+
+ Functions with a "mv" prefix first perform a cursor movement using
+ <B>wmove</B>, and return an error if the position is outside the window, or if
+ the window pointer is null.
+
+
+</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
+ <B><A HREF="curses.3X.html">curses(3X)</A></B>, <B><A HREF="curs_addch.3X.html">curs_addch(3X)</A></B>, <B><A HREF="curs_addstr.3X.html">curs_addstr(3X)</A></B>, <B><A HREF="curs_bkgd.3X.html">curs_bkgd(3X)</A></B>,
+ <B><A HREF="curs_printw.3X.html">curs_printw(3X)</A></B>, <B><A HREF="curs_variables.3X.html">curs_variables(3X)</A></B>