int init_pair(short pair, short f, short b);
int init_color(short color, short r, short g, short b);
int color_content(short color, short *r, short *g, short *b);
int pair_content(short pair, short *f, short *b);
Curses supports color attributes on terminals with that capability.
To use these routines start_color() must be
called, usually right after initscr(). Colors are always
used in pairs (referred to as color-pairs). A color-pair
consists of a foreground color (for characters) and a
background color (for the blank field on which the characters are
displayed). A programmer initializes a color-pair with the routine
init_pair(). After it has been initialized,
COLOR_PAIR(n), a macro defined in
can be used as a new video attribute.
If a terminal is capable of redefining colors, the programmer can use the
routine init_color() to change the definition of a color.
The routines has_colors() and
can_change_color() return TRUE or
FALSE, depending on
whether the terminal has color capabilities and whether
the programmer can change the colors. The routine
color_content() allows a programmer to extract the amounts
of red, green, and blue components in an initialized
color. The routine pair_content() allows a programmer to
find out how a given color-pair is currently defined.
The start_color() routine requires no arguments. It must
be called if the programmer wants to use colors, and before
any other color manipulation routine is called. It is
good practice to call this routine right after initscr().
start_color initializes eight basic colors (black, red,
green, yellow, blue, magenta, cyan, and white), and two
global variables, COLORS and COLOR_PAIRS (respectively
defining the maximum number of colors and color-pairs the
terminal can support). It also restores the colors on the
terminal to the values they had when the terminal was just turned on.
The init_pair() routine changes the definition of a
color-pair. It takes three arguments: the number of the color-pair to be
changed, the foreground color number, and the
background color number. The value of the first argument
must be between 1 and COLOR_PAIRS-1. The value of the
second and third arguments must be between 0 and COLORS
(the 0 color pair is wired to white on black and cannot be
changed). If the color-pair was previously initialized,
the screen is refreshed and all occurrences of that color-pair is changed to
the new definition.
The init_color() routine changes the definition of a
It takes four arguments: the number of the color to be
changed followed by three RGB values (for the amounts of
red, green, and blue components). The value of the first
argument must be between 0() and
COLORS. (See the section
Colors for the default color index.) Each of the last
three arguments must be a value between 0 and 1000. When
init_color() is used, all occurrences of that color on the
screen immediately change to the new definition.
The has_colors() routine requires no arguments. It returns
TRUE if the terminal can manipulate colors; otherwise,
it returns FALSE. This routine facilitates writing
terminal-independent programs. For example, a programmer can use
it to decide whether to use color or some other video
The can_change_color() routine requires no arguments. It
returns TRUE if the terminal supports colors and can
change their definitions; other, it returns FALSE. This
routine facilitates writing terminal-independent programs.
The color_content() routine gives programmers a way to find
the intensity of the red, green, and blue (RGB) components
in a color. It requires four arguments: the color number,
and three addresses of shorts for storing the information
about the amounts of red, green, and blue components in
the given color. The value of the first argument must be
between 0 and COLORS. The values that are stored at the
addresses pointed to by the last three arguments are
between 0 (no component) and 1000 (maximum amount of component).
The pair_content() routine allows programmers to find out
what colors a given color-pair consists of. It requires
three arguments: the color-pair number, and two addresses
of shorts for storing the foreground and the background
color numbers. The value of the first argument must be
between 1 and COLOR_PAIRS-1. The values that are stored
at the addresses pointed to by the second and third arguments are between 0
In <curses.h> the following macros are defined.
These are the default colors. curses also assumes that
COLOR_BLACK is the default background color for all terminals.
The routines can_change_color() and
TRUE or FALSE.
All other routines return the integer ERR upon failure and
an OK (SVr4 specifies only "an integer value other than
ERR") upon successful completion.
In the ncurses implementation, there is a separate color
activation flag, color palette, color pairs table, and
associated COLORS and COLOR_PAIRS counts for each screen;
the start_color() function only affects the current screen.
The SVr4/XSI interface is not really designed with this in mind, and
historical implementations may use a single shared color palette.
Note that setting an implicit background color via a color
pair affects only character cells that a character write
operation explicitly touches. To change the background
color used when parts of a window are blanked by erasing
or scrolling operations, see curs_bkgd().
Several caveats apply on 386 and 486 machines with VGA-compatible graphics:
COLOR_YELLOW is actually brown. To get yellow, use
COLOR_YELLOW combined with the A_BOLD attribute.
The A_BLINK attribute should in theory cause the background
to go bright. This often fails to work, and even
some cards for which it mostly works (such as the Paradise
and compatibles) do the wrong thing when you try to set a
bright "yellow" background (you get a blinking yellow
Color RGB values are not settable.
This implementation satisfies XSI Curses's minimum maximums for
COLORS and COLOR_PAIRS.
PTC MKS Toolkit for Professional Developers
PTC MKS Toolkit for Enterprise Developers
PTC MKS Toolkit for Enterprise Developers 64-Bit Edition
- curs_attr(), curs_initscr(), curses()
PTC MKS Toolkit 10.2 Documentation Build 28.