James -
An easy way is similar to using Starfalls-
just create an array that converts from 555 to the screen format and one that converts back:
unsigned short clr_555_to_fmt[32768];
unsigned short clr_fmt_to_555[65536];
All colors would pass through the first array before displaying them, and if you need to read information back, pass them through the 2nd.
The reason they are different sizes is the first only takes a 555 amount, and the second possibly uses 565.
If this doesn't make much sense, let me know and I'll type something better -- I'm at work right now.
Now, about using malloc and static arrays:
it doesn't really matter. It's just coding style. It some cases though, using a static array will bloat the .exe file.
As for using int and such, you have to remember that int is not a fixed size - it will vary from machine to machine and depending on the compiler.
Use short for 16 bit, and long for 32 bit
(on a x86 machine at least).
Jim