'\" 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,
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:
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
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
(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:
\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
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.
.\" ---------------------------------------------------------------------------
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
.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
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
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
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,
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.
.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
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,
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),