/*=========================================================================== * * DFPal.CPP - Dave Humphrey (uesp@m0use.net), 9 November 2000 * *=========================================================================*/ /* Include Files */ #include "dfpal.h" #include "dfcommon.h" #undef __FUNC__ #define __FUNC__ "CDFPalette::CDFPalette()" /*=========================================================================== * * Class CDFPalette Constructor * *=========================================================================*/ CDFPalette::CDFPalette() { COLFile = FALSE; NumPalEntries = 256; /* Copy the default palette data to initialize palette data array */ memcpy (PalData, DFPalette, 768); } /*=========================================================================== * End of Class CDFPalette Constructor *=========================================================================*/ #undef __FUNC__ #define __FUNC__ "CDFPalette::Load()" /*=========================================================================== * * Class CDFPalette Method - boolean Load (pFilename); * * Attempt to load the specified PAL or COL file. Returns FALSE on any * error. Attempts to determine the filetype by first the file extension * and then by the filesize. Use LoadPAL() or LoadCOL() to bypass this. * *=========================================================================*/ boolean CDFPalette::Load (const char* pFilename) { long FileSize; /* Ensure a valid filename before we operate on it */ if (pFilename == NULL) { SET_EXT_ERROR2(ERR_NULL, "Invalid NULL filename received!"); return (FALSE); } /* Check for extension matches */ if (CompareExtension(pFilename, "COL")) return LoadCOL(pFilename); else if (CompareExtension(pFilename, "PAL")) return LoadPAL(pFilename); /* Check for filesize matches */ FileSize = GetFilesize(pFilename); if (FileSize == DF_PAL_FILESIZE) return LoadPAL(pFilename); else if (FileSize == DF_COL_FILESIZE) return LoadCOL(pFilename); /* Oh-oh, no idea what the filetype is, try COL */ SystemLog.Printf ("No idea what file type is for DFPalette %s!", pFilename); return LoadCOL(pFilename); } /*=========================================================================== * End of Class Method CDFPalette::Load() *=========================================================================*/ #undef __FUNC__ #define __FUNC__ "CDFPalette::LoadCOL()" /*=========================================================================== * * Class CDFPalette Method - boolean LoadCOL (pFilename); * * Attempt to load the specified COL file. Returns FALSE on any * error. * *=========================================================================*/ boolean CDFPalette::LoadCOL (const char* pFilename) { FILE* pFileHandle; int Result; /* Attempt to open the file for input */ pFileHandle = openfile(pFilename, "rb"); if (pFileHandle == NULL) { SET_EXT_ERROR3(ERR_FILE, "Failed to open file %s!", pFilename); return (FALSE); } /* Read the header all at once */ Result = fread (&COLHeader, 1, DF_COL_HEADERSIZE, pFileHandle); if (Result != DF_COL_HEADERSIZE) { SET_EXT_ERROR4(ERR_READ, "Error reading COL header (%d of %d bytes)!", Result, DF_COL_HEADERSIZE); fclose (pFileHandle); return (FALSE); } COLFile = TRUE; NumPalEntries = (COLHeader.FileSize - 8)/3; /* Ensure a valid number of colors */ if (NumPalEntries < 0 || NumPalEntries >= DF_MAX_PALENTRIES) { SET_EXT_ERROR3(ERR_INDEX, "Invalid number of palette colors received (%d)!", NumPalEntries); NumPalEntries = 0; fclose (pFileHandle); return (FALSE); } /* Read the palette data all at once */ Result = fread (PalData, 3, NumPalEntries, pFileHandle); if (Result != NumPalEntries) { SET_EXT_ERROR4(ERR_READ, "Failed to read the palette data (%d of %d colors)!", Result, NumPalEntries); fclose (pFileHandle); NumPalEntries = 0; return (FALSE); } return (TRUE); } /*=========================================================================== * End of Class Method CDFPalette::LoadCOL() *=========================================================================*/ #undef __FUNC__ #define __FUNC__ "CDFPalette::LoadPAL()" /*=========================================================================== * * Class CDFPalette Method - boolean LoadPAL (pFilename); * * Attempt to load the specified PAL file. Returns FALSE on any * error. * *=========================================================================*/ boolean CDFPalette::LoadPAL (const char* pFilename) { FILE* pFileHandle; int Result; /* Attempt to open the file for input */ pFileHandle = openfile(pFilename, "rb"); if (pFileHandle == NULL) { SET_EXT_ERROR3(ERR_FILE, "Failed to open file %s!", pFilename); return (FALSE); } /* Read the data all at once */ Result = fread (PalData, 1, 768, pFileHandle); if (Result != 768) { SET_EXT_ERROR4(ERR_READ, "Failed to read the palette data (%d of %d colors)!", Result, NumPalEntries); fclose (pFileHandle); return (FALSE); } COLFile = FALSE; NumPalEntries = 256; return (TRUE); } /*=========================================================================== * End of Class Method CDFPalette::LoadPAL() *=========================================================================*/