These functions are an extension to the curses library. They permit an application to dynamically
allocate a color pair using the foreground/background colors rather than assign a fixed color pair
number, and return an unused pair to the pool.
The number of colors may be related to the number of possible color pairs for a given terminal, or it may
not:
• While almost all terminals allow setting the color attributes independently, it is unlikely that your
terminal allows you to modify the attributes of a given character cell without rewriting it. That
is, the foreground and background colors are applied as a pair.
• Color pairs are the curses library's way of managing a color palette on a terminal. If the library
does not keep track of the combinations of colors which are displayed, it will be inefficient.
• For simple terminal emulators with only a few dozen color combinations, it is convenient to use the
maximum number of combinations as the limit on color pairs:
COLORS*COLORS
• Terminals which support defaultcolors distinct from “ANSI colors” add to the possible combinations,
producing this total:
(COLORS+1)*(COLORS+1)
• An application might use up to a few dozen color pairs to implement a predefined color scheme.
Beyond that lies in the realm of programs using the foreground and background colors for “ASCII art”
(or some other non-textual application).
Also beyond those few dozen pairs, the required size for a table to represent the combinations grows
rapidly with an increasing number of colors.
These functions allow a developer to let the screen library manage color pairs.
alloc_pair
The alloc_pair function accepts parameters for foreground and background color, and checks whether that
color combination is already associated with a color pair.
• If the combination already exists, alloc_pair returns the existing pair.
• If the combination does not exist, alloc_pair allocates a new color pair and returns that.
• If the table fills up, alloc_pair discards the least-recently allocated entry using free_pair and
allocates a new color pair.
All of the color pairs are allocated from a table of possible color pairs. The size of the table is
determined by the terminfo pairs capability. The table is shared with init_pair; in fact alloc_pair
calls init_pair after updating the ncurses library's fast index to the colors versus color pairs.
find_pair
The find_pair function accepts parameters for foreground and background color, and checks whether that
color combination is already associated with a color pair, returning the pair number if it has been
allocated. Otherwise it returns -1.
free_pair
Marks the given color pair as unused, i.e., like color pair 0.