Attributes are special terminal capabilities used when printing characters to the screen. Characters can be printed bold, underlined, blinking, etc. In ncurses you have the ability to turn attributes on or off to get better looking output. Possible attributes are listed in the following table.
Table 8.4: Ncurses - attributes
Ncurses defines eight colors you can use on a terminal with color support. First, initialize the color data structures with start_color(), then check the terminal capabilities with has_colors(). start_color() will initialize COLORS, the maximum colors the terminal supports, and COLOR_PAIR, the maximum number of color pairs you can define.
Table 8.5: Ncurses - colors
The attributes can be combined with the OR operator ' COLORPAIRS-1 COLORS-1.
int color_content(color, r, g, b)
Get the color components r, g and b for color.
And how to combine attributes and colors? Some terminals, as the console in Linux, have colors and some not (xterm, vs100 etc). The following code should solve the problem:
First, the function CheckColor initializes the colors with start_color(), then the function has_colors() will return TRUE if the current terminal has colors. We check this and call init_pair(...) to combine foreground and background colors and wattrset(...) to set these pairs for the specified window. Alternatively, we can use wattrset(...) alone to set attributes if we have a black and white terminal.
To get colors in an xterm the best way I found out is to use the ansi_xterm with the patched terminfo entries from the Midnight Commander. Just get the sources of ansi_xterm and Midnight Commander (mc-x.x.tar.gz). Then compile the ansi_xterm and use tic with xterm.ti and vt100.ti from the mc-x.x.tar.gz archive. Execute ansi_xterm and test it out.