]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - man/curs_attr.3x
ncurses 6.4 - patch 20240113
[ncurses.git] / man / curs_attr.3x
index e6db84bf6a8124bce3200b970a3fef205b5d43ab..3053c350be89ecbb84957a365aafea02e10fe4f6 100644 (file)
@@ -1,6 +1,6 @@
 '\" t
 .\"***************************************************************************
-.\" Copyright 2018-2022,2023 Thomas E. Dickey                                *
+.\" Copyright 2018-2023,2024 Thomas E. Dickey                                *
 .\" Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
 .\"                                                                          *
 .\" Permission is hereby granted, free of charge, to any person obtaining a  *
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: curs_attr.3x,v 1.86 2023/09/30 21:38:11 tom Exp $
-.TH curs_attr 3X 2023-09-30 "ncurses 6.4" "Library calls"
-.ie \n(.g .ds `` \(lq
-.el       .ds `` ``
-.ie \n(.g .ds '' \(rq
-.el       .ds '' ''
-.ie n .ds CW R
-.el   \{
-.ie \n(.g .ds CW CR
-.el       .ds CW CW
+.\" $Id: curs_attr.3x,v 1.96 2024/01/13 22:05:39 tom Exp $
+.TH curs_attr 3X 2024-01-13 "ncurses 6.4" "Library calls"
+.ie \n(.g \{\
+.ds `` \(lq
+.ds '' \(rq
 .\}
-.de NS
-.ie n  .sp
-.el    .sp .5
-.ie n  .in +4
-.el    .in +2
-.nf
-.ft \*(CW
-..
-.de NE
-.fi
-.ft R
-.ie n  .in -4
-.el    .in -2
-..
+.el \{\
+.ie t .ds `` ``
+.el   .ds `` ""
+.ie t .ds '' ''
+.el   .ds '' ""
+.\}
+.
 .de bP
 .ie n  .IP \(bu 4
 .el    .IP \(bu 2
 manipulate attributes of character cells in \fIcurses\fR windows
 .\" ---------------------------------------------------------------------------
 .SH SYNOPSIS
-\fB#include <curses.h>\fP
-.sp
-\fBint attr_get(attr_t *\fIattrs\fB, short *\fIpair\fB, void *\fIopts\fB);\fR
-.br
-\fBint wattr_get(WINDOW *\fIwin\fB, attr_t *\fIattrs\fB, short *\fIpair\fB,\fR \fBvoid *\fIopts\fB);\fR
-.br
-\fBint attr_set(attr_t \fIattrs\fB, short \fIpair\fB, void *\fIopts\fB);\fR
-.br
-\fBint wattr_set(WINDOW *\fIwin\fB, attr_t \fIattrs\fB, short \fIpair\fB, void *\fIopts\fB);\fR
-.sp
-\fBint attr_off(attr_t \fIattrs\fB, void *\fIopts\fB);\fR
-.br
-\fBint wattr_off(WINDOW *\fIwin\fB, attr_t \fIattrs\fB, void *\fIopts\fB);\fR
-.br
-\fBint attr_on(attr_t \fIattrs\fB, void *\fIopts\fB);\fR
-.br
-\fBint wattr_on(WINDOW *\fIwin\fB, attr_t \fIattrs\fB, void *\fIopts\fB);\fR
-.sp
-\fBint attroff(int \fIattrs);\fR
-.br
-\fBint wattroff(WINDOW *\fIwin\fB, int \fIattrs\fB);\fR
-.br
-\fBint attron(int \fIattrs\fB);\fR
-.br
-\fBint wattron(WINDOW *\fIwin\fB, int \fIattrs\fB);\fR
-.br
-\fBint attrset(int \fIattrs\fB);\fR
-.br
-\fBint wattrset(WINDOW *\fIwin\fB, int \fIattrs\fB);\fR
-.sp
-\fBint chgat(int \fIn\fB, attr_t \fIattr\fB, short \fIpair\fB,\fR \fBconst void *\fIopts\fB);\fR
-.br
-\fBint wchgat(WINDOW *\fIwin\fB,\fR
+.nf
+\fB#include <curses.h>
+.PP
+\fBint attr_get(attr_t *\fIattrs\fP, short *\fIpair\fP, void *\fIopts\fP);
+\fBint wattr_get(WINDOW *\fIwin\fP, attr_t *\fIattrs\fP, short *\fIpair\fP,\fR \fPvoid *\fIopts\fP);
+\fBint attr_set(attr_t \fIattrs\fP, short \fIpair\fP, void *\fIopts\fP);
+\fBint wattr_set(WINDOW *\fIwin\fP, attr_t \fIattrs\fP, short \fIpair\fP, void *\fIopts\fP);
+.PP
+\fBint attr_off(attr_t \fIattrs\fP, void *\fIopts\fP);
+\fBint wattr_off(WINDOW *\fIwin\fP, attr_t \fIattrs\fP, void *\fIopts\fP);
+\fBint attr_on(attr_t \fIattrs\fP, void *\fIopts\fP);
+\fBint wattr_on(WINDOW *\fIwin\fP, attr_t \fIattrs\fP, void *\fIopts\fP);
+.PP
+\fBint attroff(int \fIattrs\fP);
+\fBint wattroff(WINDOW *\fIwin\fP, int \fIattrs\fP);
+\fBint attron(int \fIattrs\fP);
+\fBint wattron(WINDOW *\fIwin\fP, int \fIattrs\fP);
+\fBint attrset(int \fIattrs\fP);
+\fBint wattrset(WINDOW *\fIwin\fP, int \fIattrs\fP);
+.PP
+\fBint chgat(int \fIn\fP, attr_t \fIattr\fP, short \fIpair\fP,\fR \fPconst void *\fIopts\fP);
+\fBint wchgat(WINDOW *\fIwin\fP,
       \fBint \fIn\fB, attr_t \fIattr\fB,\fR \fBshort \fIpair\fB, const void *\fIopts\fB);\fR
-.br
 \fBint mvchgat(int \fIy\fB, int \fIx\fB,\fR
-      \fBint \fIn\fB, attr_t \fIattr\fB,\fR \fBshort \fIpair\fB, const void *\fIopts\fB);\fR
-.br
-\fBint mvwchgat(WINDOW *\fIwin, int \fIy, int \fIx\fB,\fR
-      \fBint \fIn,\fR \fBattr_t \fIattr\fB, short \fIpair\fB, const void *\fIopts\fB);\fR
-.sp
+      \fBint \fIn\fB, attr_t \fIattr\fB, short \fIpair\fB, const void *\fIopts\fB);\fR
+\fBint mvwchgat(WINDOW *\fIwin\fB, int \fIy\fB, int \fIx\fB,\fR
+      \fBint \fIn\fB, attr_t \fIattr\fB, short \fIpair\fB, const void *\fIopts\fB);\fR
+.PP
 \fBint color_set(short \fIpair\fB, void* \fIopts\fB);\fR
-.br
-\fBint wcolor_set(WINDOW *\fIwin\fB, short \fIpair\fB,\fR \fBvoid* \fIopts);\fR
-.sp
+\fBint wcolor_set(WINDOW *\fIwin\fB, short \fIpair\fB,\fR \fBvoid* \fIopts\fP);\fR
+.PP
 \fBint standend(void);\fP
-.br
 \fBint wstandend(WINDOW *\fIwin\fB);\fR
-.br
 \fBint standout(void);\fP
-.br
 \fBint wstandout(WINDOW *\fIwin\fB);\fR
+.fi
 .\" ---------------------------------------------------------------------------
 .SH DESCRIPTION
 These routines manipulate the current attributes of the named window,
@@ -154,12 +126,8 @@ These routines do not affect the attributes used
 when erasing portions of the window.
 See \fBcurs_bkgd\fP(3X) for functions which modify the attributes used for
 erasing and clearing.
-.PP
-Routines which do not have a \fBWINDOW*\fP parameter apply to \fBstdscr\fP.
-For example,
-\fBattr_set\fP is the \fBstdscr\fP variant of \fBwattr_set\fP.
 .\" ---------------------------------------------------------------------------
-.SS Window attributes
+.SS "Window Attributes"
 There are two sets of functions:
 .bP
 functions for manipulating the window attributes and color:
@@ -180,7 +148,7 @@ Use \fBattr_off\fP and \fBwattr_off\fP to turn off window attributes,
 again values OR'd together in \fIattr\fP,
 without affecting other attributes.
 .\" ---------------------------------------------------------------------------
-.SS Legacy window attributes
+.SS "Legacy Window Attributes"
 The X/Open window attribute routines which \fIset\fP or \fIget\fP,
 turn \fIon\fP or \fIoff\fP
 are extensions of older routines
@@ -198,14 +166,18 @@ the attribute parameter.
 For example,
 as long as that value fits into the \fBA_COLOR\fP mask,
 then these calls produce similar results:
-.NS
+.PP
+.RS 4
+.EX
 attrset(A_BOLD | COLOR_PAIR(\fIpair\fP));
 attr_set(A_BOLD, \fIpair\fP, NULL);
-.NE
+.EE
+.RE
 .PP
 However, if the value does not fit, then the \fBCOLOR_PAIR\fP macro
 uses only the bits that fit.
-For example, because in ncurses \fBA_COLOR\fP has eight (8) bits,
+For example,
+because in \fI\%ncurses\fP \fBA_COLOR\fP has eight (8) bits,
 then \fBCOLOR_PAIR(\fI259\fB)\fR is 4
 (i.e., 259 is 4 more than the limit 255).
 .PP
@@ -213,10 +185,13 @@ The \fBPAIR_NUMBER\fP macro extracts a pair number from an \fBint\fP
 (or \fBchtype\fP).
 For example, the \fIinput\fP and \fIoutput\fP values in these statements
 would be the same:
-.NS
+.PP
+.RS 4
+.EX
 int value = A_BOLD | COLOR_PAIR(\fIinput\fP);
 int \fIoutput\fP = PAIR_NUMBER(value);
-.NE
+.EE
+.RE
 .PP
 The \fBattrset\fP routine is a legacy feature predating SVr4 curses
 but kept in X/Open Curses for the same reason that SVr4 curses kept it:
@@ -226,10 +201,12 @@ The remaining \fBattr\fP* functions operate exactly like the corresponding
 \fBattr_\fP* functions, except that they take arguments of type \fBint\fP
 rather than \fBattr_t\fP.
 .PP
-There is no corresponding \fBattrget\fP function as such in X/Open Curses,
-although ncurses provides \fBgetattrs\fP (see curs_legacy(3X)).
+There is no corresponding \fB\%attrget\fP function as such
+in X/Open Curses,
+although \fI\%ncurses\fP provides \fB\%getattrs\fP
+(see \fB\%curs_legacy\fP(3X)).
 .\" ---------------------------------------------------------------------------
-.SS Change character rendition
+.SS "Change Character Rendition"
 The routine \fBchgat\fP changes the attributes of a given number of characters
 starting at the current cursor location of \fBstdscr\fP.
 It does not update
@@ -241,10 +218,10 @@ The \fBwchgat\fP function generalizes this to any window;
 the \fBmvwchgat\fP function does a cursor move before acting.
 .PP
 In these functions,
-the color \fIpair\fP argument is a color-pair index
+the color \fIpair\fP argument is a color pair index
 (as in the first argument of \fBinit_pair\fP, see \fBcurs_color\fP(3X)).
 .\" ---------------------------------------------------------------------------
-.SS Change window color
+.SS "Change Window Color"
 The routine \fBcolor_set\fP sets the current color of the given window to the
 foreground/background combination described by the color \fIpair\fP parameter.
 .\" ---------------------------------------------------------------------------
@@ -262,30 +239,35 @@ they have well established legacy use, and
 there is no ambiguity about the way the attributes
 might be combined with a color pair.
 .\" ---------------------------------------------------------------------------
-.SH VIDEO ATTRIBUTES
+.SS "Video Attributes"
 The following video attributes, defined in \fB<curses.h>\fP, can be passed to
 the routines \fBattron\fP, \fBattroff\fP, and \fBattrset\fP, or OR'd with the
 characters passed to \fBaddch\fP (see \fBcurs_addch\fP(3X)).
 .PP
+.ne 15
 .RS
 .TS
-l l
-_ _ _
-l l .
-\fBName\fP     \fBDescription\fP
-\fBA_NORMAL\fP Normal display (no highlight)
-\fBA_STANDOUT\fP       Best highlighting mode of the terminal.
-\fBA_UNDERLINE\fP      Underlining
-\fBA_REVERSE\fP        Reverse video
-\fBA_BLINK\fP  Blinking
-\fBA_DIM\fP    Half bright
-\fBA_BOLD\fP   Extra bright or bold
-\fBA_PROTECT\fP        Protected mode
-\fBA_INVIS\fP  Invisible or blank mode
-\fBA_ALTCHARSET\fP     Alternate character set
-\fBA_ITALIC\fP Italics (non-X/Open extension)
-\fBA_CHARTEXT\fP       Bit-mask to extract a character
-\fBA_COLOR\fP  Bit-mask to extract a color (legacy routines)
+Lb Lb
+Lb Lx.
+Name   Description
+_
+A_NORMAL       Normal display (no highlight)
+A_STANDOUT     T{
+Best highlighting mode of the terminal
+T}
+A_UNDERLINE    Underlining
+A_REVERSE      Reverse video
+A_BLINK        Blinking
+A_DIM  Half bright
+A_BOLD Extra bright or bold
+A_PROTECT      Protected mode
+A_INVIS        Invisible or blank mode
+A_ALTCHARSET   Alternate character set
+A_ITALIC       Italics (non-X/Open extension)
+A_CHARTEXT     Bit-mask to extract a character
+A_COLOR        T{
+Bit-mask to extract a color (legacy routines)
+T}
 .TE
 .RE
 .PP
@@ -294,16 +276,16 @@ These video attributes are supported by \fBattr_on\fP and related functions
 .PP
 .RS
 .TS
-l l
-_ _ _
-l l .
-\fBName\fP     \fBDescription\fP
-\fBWA_HORIZONTAL\fP    Horizontal highlight
-\fBWA_LEFT\fP  Left highlight
-\fBWA_LOW\fP   Low highlight
-\fBWA_RIGHT\fP Right highlight
-\fBWA_TOP\fP   Top highlight
-\fBWA_VERTICAL\fP      Vertical highlight
+Lb Lb
+Lb Lx.
+Name   Description
+_
+WA_HORIZONTAL  Horizontal highlight
+WA_LEFT        Left highlight
+WA_LOW Low highlight
+WA_RIGHT       Right highlight
+WA_TOP Top highlight
+WA_VERTICAL    Vertical highlight
 .TE
 .RE
 .PP
@@ -311,6 +293,25 @@ 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 \fB1\fP.
 .\" ---------------------------------------------------------------------------
+.SH RETURN VALUE
+All routines return the integer \fBOK\fP on success, or \fBERR\fP on failure.
+.PP
+X/Open does not define any error conditions.
+.PP
+This implementation
+.bP
+returns an error if the window pointer is null.
+.bP
+returns an error if the color pair parameter
+for \fBwcolor_set\fP is outside the range 0..COLOR_PAIRS\-1.
+.bP
+does not return an error if either of the parameters of \fBwattr_get\fP
+used for retrieving attribute or color pair values is \fBNULL\fP.
+.PP
+Functions with a \*(``mv\*('' prefix first perform a cursor movement using
+\fBwmove\fP, and return an error if the position is outside the window,
+or if the window pointer is null.
+.\" ---------------------------------------------------------------------------
 .SH NOTES
 These functions may be macros:
 .sp
@@ -323,142 +324,9 @@ Color pair values can only be OR'd with attributes if the pair
 number is less than 256.
 The alternate functions such as \fBcolor_set\fP can pass a color pair
 value directly.
-However, ncurses ABI 4 and 5 simply OR this value
+However, \fI\%ncurses\fP 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.
-.\" ---------------------------------------------------------------------------
-.SH HISTORY
-X/Open Curses is largely based on SVr4 curses,
-adding support for \*(``wide-characters\*('' (not specific to Unicode).
-Some of the X/Open differences from SVr4 curses address the way
-video attributes can be applied to wide-characters.
-But aside from that, \fBattrset\fP and \fBattr_set\fP are similar.
-SVr4 curses provided the basic features for manipulating video attributes.
-However, earlier versions of curses provided a part of these features.
-.PP
-As seen in 2.8BSD, curses assumed 7-bit characters,
-using the eighth bit of a byte to represent the \fIstandout\fP
-feature (often implemented as bold and/or reverse video).
-The BSD curses library provided functions \fBstandout\fP and \fBstandend\fP
-which were carried along into X/Open Curses due to their pervasive use
-in legacy applications.
-.PP
-Some terminals in the 1980s could support a variety of video attributes,
-although the BSD curses library could do nothing with those.
-System V (1983) provided an improved curses library.
-It defined the \fBA_\fP symbols for use by applications to manipulate the
-other attributes.
-There are few useful references for the chronology.
-.PP
-Goodheart's book
-\fIUNIX Curses Explained\fP (1991) describes SVr3 (1987),
-commenting on several functions:
-.bP
-the \fBattron\fP, \fBattroff\fP, \fBattrset\fP functions
-(and most of the functions found in SVr4 but not in BSD curses) were
-introduced by System V,
-.bP
-the alternate character set feature with \fBA_ALTCHARSET\fP was
-added in SVr2 and improved in SVr3 (by adding \fBacs_map[]\fP),
-.bP
-\fBstart_color\fP and related color-functions were introduced by System V.3.2,
-.bP
-pads, soft-keys were added in SVr3, and
-.PP
-Goodheart did not mention the background character or the \fBcchar_t\fP type.
-Those are respectively SVr4 and X/Open features.
-He did mention the \fBA_\fP constants, but did not indicate their values.
-Those were not the same in different systems,
-even for those marked as System V.
-.PP
-Different Unix systems used different sizes for the bit-fields in \fBchtype\fP
-for \fIcharacters\fP and \fIcolors\fP, and took into account the different
-integer sizes (32-bit versus 64-bit).
-.PP
-This table showing the number of bits for \fBA_COLOR\fP
-and \fBA_CHARTEXT\fP
-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 alternate character set implementation.
-A 32-bit library can be used on a 64-bit system,
-but not necessarily the reverse.
-.PP
-.RS
-.TS
-l l l l l l
-_ _ _ _ _ _
-l l l l l l .
-\fBYear\fP     \fBSystem\fP    \fBArch\fP      \fBColor\fP     \fBChar\fP      \fBNotes\fP
-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 \fBchtype\fP
-.TE
-.RE
-.PP
-Notes:
-.RS 3
-.PP
-Regarding HP-UX,
-.bP
-HP-UX 10.20 (1996) added support for 64-bit PA-RISC processors in 1996.
-.bP
-HP-UX 10.30 (1997) marked \*(``curses_colr\*('' obsolete.
-That version of curses was dropped with HP-UX 11.30 in 2006.
-.PP
-Regarding OSF/1 (and Tru64),
-.bP
-These used 64-bit hardware.
-Like ncurses, the OSF/1 curses interface is not customized for 32-bit
-and 64-bit versions.
-.bP
-Unlike other systems which evolved from AT&T code,
-OSF/1 provided a new implementation for X/Open curses.
-.PP
-Regarding Solaris,
-.bP
-The initial release of Solaris was in 1992.
-.bP
-The \fIxpg4\fP (X/Open) curses was developed by MKS from 1990 to 1995.
-Sun's copyright began in 1996.
-.bP
-Sun updated the X/Open curses interface
-after 64-bit support was introduced in 1997,
-but did not modify the SVr4 curses interface.
-.PP
-Regarding U/Win,
-.bP
-Development of the curses library began in 1991, stopped in 2000.
-.bP
-Color support was added in 1998.
-.bP
-The library uses only \fBchtype\fP (no \fBcchar_t\fP).
-.RE
-.PP
-Once X/Open curses was adopted in the mid-1990s, the constraint of
-a 32-bit interface with many colors and wide-characters for \fBchtype\fP
-became a moot point.
-The \fBcchar_t\fP structure (whose size and
-members are not specified in X/Open Curses) could be extended as needed.
-.PP
-Other interfaces are rarely used now:
-.bP
-BSD curses was improved slightly in 1993/1994 using Keith Bostic's
-modification to make the library 8-bit clean for \fBnvi\fP(1).
-He moved \fIstandout\fP attribute to a structure member.
-.IP
-The resulting 4.4BSD curses was replaced by ncurses over the next ten years.
-.bP
-U/Win is rarely used now.
+You must use \fI\%ncurses\fP ABI 6 to support more than 256 color pairs.
 .\" ---------------------------------------------------------------------------
 .SH EXTENSIONS
 This implementation provides the \fBA_ITALIC\fP attribute for terminals
@@ -474,7 +342,7 @@ Each of the functions added by XSI Curses has a parameter \fIopts\fP,
 which X/Open Curses still (after more than twenty years) documents
 as reserved for future use, saying that it should be \fBNULL\fP.
 This implementation uses that parameter in ABI 6 for the functions which
-have a color-pair parameter to support \fIextended color pairs\fP:
+have a color pair parameter to support \fIextended color pairs\fP:
 .bP
 For functions which modify the color, e.g.,
 \fBwattr_set\fP and \fBwattr_on\fP,
@@ -494,7 +362,7 @@ the \fIopts\fP parameter is ignored except
 except to check that it is \fBNULL\fP.
 .\" ---------------------------------------------------------------------------
 .SH PORTABILITY
-These functions are supported in the XSI Curses standard, Issue 4.
+These functions are described in the XSI Curses standard, Issue 4.
 The standard defined the dedicated type for highlights,
 \fBattr_t\fP, which was not defined in SVr4 curses.
 The functions taking \fBattr_t\fP arguments were not supported under SVr4.
@@ -526,18 +394,20 @@ The older macros have direct counterparts in the newer set of names:
 .RS
 .ne 9
 .TS
-l l
-_ _ _
-l l .
-\fBName\fP     \fBDescription\fP
-\fBWA_NORMAL\fP        Normal display (no highlight)
-\fBWA_STANDOUT\fP      Best highlighting mode of the terminal.
-\fBWA_UNDERLINE\fP     Underlining
-\fBWA_REVERSE\fP       Reverse video
-\fBWA_BLINK\fP Blinking
-\fBWA_DIM\fP   Half bright
-\fBWA_BOLD\fP  Extra bright or bold
-\fBWA_ALTCHARSET\fP    Alternate character set
+Lb Lb
+Lb Lx.
+Name   Description
+_
+WA_NORMAL      Normal display (no highlight)
+WA_STANDOUT    T{
+Best highlighting mode of the terminal
+T}
+WA_UNDERLINE   Underlining
+WA_REVERSE     Reverse video
+WA_BLINK       Blinking
+WA_DIM Half bright
+WA_BOLD        Extra bright or bold
+WA_ALTCHARSET  Alternate character set
 .TE
 .RE
 .PP
@@ -562,7 +432,7 @@ In this implementation (as in many others), the values happen to be
 the same because it simplifies copying information between
 \fBchtype\fP and \fBcchar_t\fP variables.
 .bP
-Because ncurses's \fBattr_t\fP can hold a color pair
+Because \fI\%ncurses\fP's \fBattr_t\fP can hold a color pair
 (in the \fBA_COLOR\fP field),
 a call to
 \fBwattr_on\fP,
@@ -582,24 +452,140 @@ As of August 2013,
 no known terminal provides these highlights
 (i.e., via the \fBsgr1\fP capability).
 .\" ---------------------------------------------------------------------------
-.SH RETURN VALUE
-All routines return the integer \fBOK\fP on success, or \fBERR\fP on failure.
+.SH HISTORY
+X/Open Curses is largely based on SVr4 curses,
+adding support for \*(``wide-characters\*('' (not specific to Unicode).
+Some of the X/Open differences from SVr4 curses address the way
+video attributes can be applied to wide-characters.
+But aside from that, \fBattrset\fP and \fBattr_set\fP are similar.
+SVr4 curses provided the basic features for manipulating video attributes.
+However, earlier versions of curses provided a part of these features.
 .PP
-X/Open does not define any error conditions.
+As seen in 2.8BSD, curses assumed 7-bit characters,
+using the eighth bit of a byte to represent the \fIstandout\fP
+feature (often implemented as bold and/or reverse video).
+The BSD curses library provided functions \fBstandout\fP and \fBstandend\fP
+which were carried along into X/Open Curses due to their pervasive use
+in legacy applications.
 .PP
-This implementation
+Some terminals in the 1980s could support a variety of video attributes,
+although the BSD curses library could do nothing with those.
+System V (1983) provided an improved curses library.
+It defined the \fBA_\fP symbols for use by applications to manipulate the
+other attributes.
+There are few useful references for the chronology.
+.PP
+Goodheart's book
+\fIUNIX Curses Explained\fP (1991) describes SVr3 (1987),
+commenting on several functions:
 .bP
-returns an error if the window pointer is null.
+the \fBattron\fP, \fBattroff\fP, \fBattrset\fP functions
+(and most of the functions found in SVr4 but not in BSD curses) were
+introduced by System V,
 .bP
-returns an error if the color pair parameter
-for \fBwcolor_set\fP is outside the range 0..COLOR_PAIRS\-1.
+the alternate character set feature with \fBA_ALTCHARSET\fP was
+added in SVr2 and improved in SVr3 (by adding \fBacs_map[]\fP),
 .bP
-does not return an error if either of the parameters of \fBwattr_get\fP
-used for retrieving attribute or color-pair values is \fBNULL\fP.
+\fBstart_color\fP and related color-functions were introduced by System V.3.2,
+.bP
+pads, soft-keys were added in SVr3, and
 .PP
-Functions with a \*(``mv\*('' prefix first perform a cursor movement using
-\fBwmove\fP, and return an error if the position is outside the window,
-or if the window pointer is null.
+Goodheart did not mention the background character or the \fBcchar_t\fP type.
+Those are respectively SVr4 and X/Open features.
+He did mention the \fBA_\fP constants, but did not indicate their values.
+Those were not the same in different systems,
+even for those marked as System V.
+.PP
+Different Unix systems used different sizes for the bit-fields in \fBchtype\fP
+for \fIcharacters\fP and \fIcolors\fP, and took into account the different
+integer sizes (32-bit versus 64-bit).
+.PP
+This table showing the number of bits for \fBA_COLOR\fP
+and \fBA_CHARTEXT\fP
+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 alternate character set implementation.
+A 32-bit library can be used on a 64-bit system,
+but not necessarily the reverse.
+.PP
+.TS
+Lb  Lb Lb  Cb  S   Lb
+Lb2 Lb Lb2 Lbz Lb2 Lb
+L   L  L   L   L   Lx.
+\&     \&      \&      Bits    \&
+Year   System  Arch    Color   Char    Notes
+_
+1992   Solaris 5.2     32      6       17      SVr4 \fIcurses\fP
+1992   HP-UX 9 32      no      8       SVr2 \fIcurses\fP
+1992   AIX 3.2 32      no      23      SVr2 \fIcurses\fP
+1994   OSF/1 r3        32      no      23      SVr2 \fIcurses\fP
+1995   HP-UX 10.00     32      6       16      SVr3 \fIcurses_colr\fP
+1995   HP-UX 10.00     32      6       8       SVr4, X/Open \fIcurses\fP
+1995   Solaris 5.4     32/64   7       16      X/Open \fIcurses\fP
+1996   AIX 4.2 32      7       16      X/Open \fIcurses\fP
+1996   OSF/1 r4        32      6       16      X/Open \fIcurses\fP
+1997   HP-UX 11.00     32      6       8       X/Open \fIcurses\fP
+2000   U/Win   32/64   7/31    16      uses \fIchtype\fP
+.TE
+.PP
+Notes:
+.RS 3
+.PP
+Regarding HP-UX,
+.bP
+HP-UX 10.20 (1996) added support for 64-bit PA-RISC processors in 1996.
+.bP
+HP-UX 10.30 (1997) marked \*(``curses_colr\*('' obsolete.
+That version of curses was dropped with HP-UX 11.30 in 2006.
+.PP
+Regarding OSF/1 (and Tru64),
+.bP
+These used 64-bit hardware.
+Like \fI\%ncurses\fP,
+the OSF/1 curses interface is not customized for 32-bit and 64-bit
+versions.
+.bP
+Unlike other systems which evolved from AT&T code,
+OSF/1 provided a new implementation for X/Open curses.
+.PP
+Regarding Solaris,
+.bP
+The initial release of Solaris was in 1992.
+.bP
+The \fIxpg4\fP (X/Open) curses was developed by MKS from 1990 to 1995.
+Sun's copyright began in 1996.
+.bP
+Sun updated the X/Open curses interface
+after 64-bit support was introduced in 1997,
+but did not modify the SVr4 curses interface.
+.PP
+Regarding U/Win,
+.bP
+Development of the curses library began in 1991, stopped in 2000.
+.bP
+Color support was added in 1998.
+.bP
+The library uses only \fBchtype\fP (no \fBcchar_t\fP).
+.RE
+.PP
+Once X/Open curses was adopted in the mid-1990s, the constraint of
+a 32-bit interface with many colors and wide-characters for \fBchtype\fP
+became a moot point.
+The \fBcchar_t\fP structure (whose size and
+members are not specified in X/Open Curses) could be extended as needed.
+.PP
+Other interfaces are rarely used now:
+.bP
+BSD curses was improved slightly in 1993/1994 using Keith Bostic's
+modification to make the library 8-bit clean for \fBnvi\fP(1).
+He moved \fIstandout\fP attribute to a structure member.
+.IP
+The resulting 4.4BSD curses was replaced by \fI\%ncurses\fP over the
+next ten years.
+.bP
+U/Win is rarely used now.
 .\" ---------------------------------------------------------------------------
 .SH SEE ALSO
 \fB\%curses\fP(3X),