-</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, <STRONG>attr_t</STRONG>, which is not defined in SVr4 curses.
- The functions taking <STRONG>attr_t</STRONG> arguments are not supported
- under SVr4.
-
- The XSI Curses standard states that whether the tradition-
- al functions <STRONG>attron</STRONG>/<STRONG>attroff</STRONG>/<STRONG>attrset</STRONG> can manipulate at-
- tributes other than <STRONG>A_BLINK</STRONG>, <STRONG>A_BOLD</STRONG>, <STRONG>A_DIM</STRONG>, <STRONG>A_REVERSE</STRONG>,
- <STRONG>A_STANDOUT</STRONG>, or <STRONG>A_UNDERLINE</STRONG> is "unspecified". Under this
- implementation as well as SVr4 curses, these functions
- correctly manipulate all other highlights (specifically,
- <STRONG>A_ALTCHARSET</STRONG>, <STRONG>A_PROTECT</STRONG>, and <STRONG>A_INVIS</STRONG>).
-
- This implementation provides the <STRONG>A_ITALIC</STRONG> attribute for
- terminals which have the <EM>enter</EM><STRONG>_</STRONG><EM>italics</EM><STRONG>_</STRONG><EM>mode</EM> (sitm) and <EM>ex-</EM>
- <EM>it</EM><STRONG>_</STRONG><EM>italics</EM><STRONG>_</STRONG><EM>mode</EM> (ritm) capabilities. Italics are not men-
- tioned in X/Open Curses. Unlike the other video at-
- tributes, <STRONG>I_ITALIC</STRONG> is unrelated to the <EM>set</EM><STRONG>_</STRONG><EM>attributes</EM> ca-
- pabilities. This implementation makes the assumption that
- <EM>exit</EM><STRONG>_</STRONG><EM>attribute</EM><STRONG>_</STRONG><EM>mode</EM> may also reset italics.
-
- XSI Curses added the new entry points, <STRONG>attr_get</STRONG>, <STRONG>attr_on</STRONG>,
- <STRONG>attr_off</STRONG>, <STRONG>attr_set</STRONG>, <STRONG>wattr_on</STRONG>, <STRONG>wattr_off</STRONG>, <STRONG>wattr_get</STRONG>, <STRONG>wat-</STRONG>
- <STRONG>tr_set</STRONG>. These are intended to work with a new series of
- highlight macros prefixed with <STRONG>WA_</STRONG>. The older macros have
- direct counterparts in the newer set of names:
-
- <EM>Name</EM> <EM>Description</EM>
+</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>