/* * File: PALETTE.C * Purpose: This file contains routines for manipulating the VGA palette. */ #include #include #include #include "palette.h" static void fadePalette(byte fade, byte start, word iter, byte *palette); static byte tmppal[PAL_SIZE]; /* fade and flash */ void fadeOn(word fade, byte *palette) { fadePalette(-fade, 64, 64/fade+1, palette); } void fadeOff(word fade, byte *palette) { fadePalette(fade, 0, 64/fade+1, palette); } void fadeOffHalf(word fade, byte *palette) { fadePaletteHalf(fade, 0, 64/fade+1, palette); } void flashOn(word fade, byte *palette) { fadePalette(fade, -64, 64/fade+1, palette); } void flashOff(word fade, byte *palette) { fadePalette(-fade, 0, 64/fade+1, palette); } static void fadePalette(byte fade, byte start, word iter, byte *palette) { word i; byte dim = start; /* handle the case where we just update */ if(iter == 0) { palUpdate(palette); return; } while(iter > 0) { /* FadeLoop */ for(i=0; i 127) { tmppal[i] = 0; } else if(tmppal[i] > 63) { tmppal[i] = 63; } } palUpdate(tmppal); iter--; dim += fade; } } static void fadePaletteHalf(byte fade, byte start, word iter, byte *palette) { word i; byte dim = start; /* handle the case where we just update */ if(iter == 0) { palUpdate(palette); return; } while(iter > iter/2) { /* FadeLoop */ for(i=0; i 127) { tmppal[i] = 0; } else if(tmppal[i] > 63) { tmppal[i] = 63; } } palUpdate(tmppal); iter--; dim += fade; } } /* save and load */ void palSave(byte *palette) { int i; outp(PEL_READ_REG, 0); /* start at palette entry 0 */ for(i=0; i