Palette routines
All the Allegro drawing functions use integer parameters to represent
colors. In truecolor resolutions these numbers encode the color directly as
a collection of red, green, and blue bits, but in a regular 256-color mode
the values are treated as indexes into the current palette, which is a table
listing the red, green and blue intensities for each of the 256 possible
colors.
Palette entries are stored in an RGB structure, which contains red, green
and blue intensities in the VGA hardware format, ranging from 0-63, and is
defined as:
typedef struct RGB
{
unsigned char r, g, b;
} RGB;
It contains an additional field for the purpose of padding but you should
not usually care about it. For example:
RGB black = { 0, 0, 0 };
RGB white = { 63, 63, 63 };
RGB green = { 0, 63, 0 };
RGB grey = { 32, 32, 32 };
The type PALETTE is defined to be an array of PAL_SIZE RGB structures, where
PAL_SIZE is a preprocessor constant equal to 256.
You may notice that a lot of the code in Allegro spells 'palette' as
'pallete'. This is because the headers from my old Mark Williams compiler on
the Atari spelt it with two l's, so that is what I'm used to. Allegro will
happily accept either spelling, due to some #defines in allegro/alcompat.h
(which can be turned off by defining the ALLEGRO_NO_COMPATIBILITY symbol
before including Allegro headers).