123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Copyright 2016 RWS Inc, All Rights Reserved
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of version 2 of the GNU General Public License as published by
- // the Free Software Foundation
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License along
- // with this program; if not, write to the Free Software Foundation, Inc.,
- // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- //
- //////////////////////////////////////////////////////////////////////////////
- //
- // PalFile.CPP
- //
- // History:
- // 12/11/96 JMI Started.
- //
- // 02/04/97 JMI Changed #include "ImageLoad.h" to "PalFile.h".
- //
- //////////////////////////////////////////////////////////////////////////////
- //
- // Handles file formats for RPal. Some of these older formats will not be
- // useful to developers of new code. To include the ability to use a certain
- // loader, define one of the macros PAL_LOAD_# where # is the number of the
- // format desired OR define the macro PAL_LOAD_ALL for all available
- // support.
- //
- // NOTES TO THOSE ADDING NEW FILE VERSIONS:
- // Please follow these steps when adding a new version Load or Save:
- // o Define a new static short RPalFile::LoadVersion#(RPal*, RFile*)
- // where # is the number of the new version.
- //
- // o Call your new LoadVersion#(...) in the switch statement in
- // RPalFile::Load().
- //
- // o Make sure the last versions' case in the switch is surrounded by a
- // #if defined(PAL_LOAD_num) #endif block where 'num' is the last version
- // number.
- //
- //
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // C Headers -- Must be included before RSPiX.h b/c RSPiX utilizes SHMalloc.
- //////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- // RSPiX Headers.
- // If PATHS_IN_INCLUDES macro is defined, we can utilize relative
- // paths to a header file. In this case we generally go off of our
- // RSPiX root directory. System.h MUST be included before this macro
- // is evaluated. System.h is the header that, based on the current
- // platform (or more so in this case on the compiler), defines
- // PATHS_IN_INCLUDES. Blue.h includes system.h so you can include that
- // instead.
- ///////////////////////////////////////////////////////////////////////////////
- #include "System.h"
- #ifdef PATHS_IN_INCLUDES
- #include "GREEN/Image/Image.h"
- #include "GREEN/Image/PalFile.h"
- #else
- #include "Image.h"
- #include "PalFile.h"
- #endif
- //////////////////////////////////////////////////////////////////////////////
- // Module specific macros.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Module specific typedefs.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Exported (extern) variables.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Module specific (static) variables / Instantiate class statics.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Module specific (static) protos.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Internal Functions.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- //
- // Loads an RPal with no file version into ppal from pfile.
- //
- //////////////////////////////////////////////////////////////////////////////
- short RPalFile::LoadNoVersion( // Returns SUCCESS on success or FAILURE on
- // failure.
- RPal* ppal, // Pal to load into.
- RFile* pfile) // File to load from.
- {
- short sRes = SUCCESS; // Assume success.
- // No RFile support for RPal::Type, so we used a U32.
- U32 u32Temp = 0;
- pfile->Read(&u32Temp);
- ppal->m_type = (RPal::Type)u32Temp;
- pfile->Read(&ppal->m_ulSize);
- pfile->Read(&ppal->m_sStartIndex);
- pfile->Read(&ppal->m_sNumEntries);
- pfile->Read(&ppal->m_sPalEntrySize);
- if (ppal->CreateData(ppal->m_ulSize) == SUCCESS)
- {
- pfile->Read(ppal->m_pData, ppal->m_ulSize);
- }
- else
- {
- TRACE("RPalFile::LoadNoVersion - Unable to allocate memory for the palette data\n");
- sRes = FAILURE;
- }
- if (pfile->Error())
- {
- TRACE("RPalFile::LoadNoVersion - Error reading palette\n");
- sRes = FAILURE;
- }
- return sRes;
- }
- //////////////////////////////////////////////////////////////////////////////
- //
- // Loads an RPal with file version 1 into ppal from pfile.
- //
- //////////////////////////////////////////////////////////////////////////////
- short RPalFile::LoadVersion1( // Returns SUCCESS on success or FAILURE on
- // failure.
- RPal* /*ppal*/, // Pal to load into.
- RFile* /*pfile*/) // File to load from.
- {
- short sRes = SUCCESS; // Assume success.
- TRACE("LoadVersion1(): No current support for version 1 RPal.\n");
- sRes = FAILURE;
- return sRes;
- }
- //////////////////////////////////////////////////////////////////////////////
- //
- // Loads an RPal with file version 2 into ppal from pfile.
- //
- //////////////////////////////////////////////////////////////////////////////
- short RPalFile::LoadVersion2( // Returns SUCCESS on success or FAILURE on
- // failure.
- RPal* /*ppal*/, // Pal to load into.
- RFile* /*pfile*/) // File to load from.
- {
- short sRes = SUCCESS; // Assume success.
- TRACE("LoadVersion2(): No current support for version 2 RPal.\n");
- sRes = FAILURE;
- return sRes;
- }
- //////////////////////////////////////////////////////////////////////////////
- //
- // Loads an RPal with file version 3 into ppal from pfile.
- //
- //////////////////////////////////////////////////////////////////////////////
- short RPalFile::LoadVersion3( // Returns SUCCESS on success or FAILURE on
- // failure.
- RPal* ppal, // Pal to load into.
- RFile* pfile) // File to load from.
- {
- short sRes = SUCCESS; // Assume success.
- // No RFile support for RPal::Type, so we used a U32.
- U32 u32Temp = 0;
- pfile->Read(&u32Temp);
- ppal->m_type = (RPal::Type)u32Temp;
- pfile->Read(&ppal->m_ulSize);
- pfile->Read(&ppal->m_sStartIndex);
- pfile->Read(&ppal->m_sNumEntries);
- pfile->Read(&ppal->m_sPalEntrySize);
- USHORT usFlag = 2;
- pfile->Read(&usFlag);
- if (usFlag == 1)
- {
- if (ppal->CreateData(ppal->m_ulSize) == SUCCESS)
- {
- pfile->Read(ppal->m_pData, ppal->m_ulSize);
- }
- else
- {
- TRACE("RPalFile::LoadVersion3 - Unable to allocate memory for the palette data\n");
- sRes = FAILURE;
- }
- }
- if (pfile->Error())
- {
- TRACE("RPalFile::LoadVersion3 - Error reading palette\n");
- sRes = FAILURE;
- }
- return sRes;
- }
- //////////////////////////////////////////////////////////////////////////////
- // External Functions.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- //
- // Maps a particular file load onto the appropriate function, if available.
- //
- //////////////////////////////////////////////////////////////////////////////
- short RPalFile::Load( // Returns SUCCESS on success or FAILURE on failure.
- RPal* ppal, // Pal to load into.
- RFile* pfile) // File to load from.
- {
- short sRes = SUCCESS; // Assume success.
- // Get finger print . . .
- ULONG ulFinger;
- if (pfile->Read(&ulFinger) == 1)
- {
- if (ulFinger == PAL_COOKIE)
- {
- ULONG ulVersion;
- if (pfile->Read(&ulVersion) == 1)
- {
- switch (ulVersion)
- {
- #if defined(PAL_LOAD_1) || defined(PAL_LOAD_ALL)
- case 1:
- sRes = LoadVersion1(ppal, pfile);
- break;
- #endif // PAL_LOAD_1
- #if defined(PAL_LOAD_2) || defined(PAL_LOAD_ALL)
- case 2:
- sRes = LoadVersion2(ppal, pfile);
- break;
- #endif // PAL_LOAD_2
- // #if defined(PAL_LOAD_3) || defined(PAL_LOAD_ALL)
- case 3:
- sRes = LoadVersion3(ppal, pfile);
- break;
- // #endif // PAL_LOAD_3
- default: // No current support.
- TRACE("RPal::Load - Error: Unsupported version.\n");
- TRACE("RPal::Load - Current RPal version %d\n", PAL_CURRENT_VERSION);
- TRACE("RPal::Load - This file's version %lu\n", ulVersion);
- TRACE("RPal::Load - See PalFile.cpp for details on "
- "supporting older RPal formats.\n");
- sRes = FAILURE;
- break;
- }
- }
- else
- {
- TRACE("RPal::Load - Error reading file version\n");
- sRes = FAILURE;
- }
- }
- else
- {
- TRACE("RPal::Load - Error: Wrong filetype, RPal files should start with"
- "\"CPAL\"\n");
- TRACE("RPal::Load - Note that some older RPal formats had no filetype, and,\n");
- TRACE("therefore, can no longer be loaded unless in an RImage file.\n");
- sRes = FAILURE;
- }
- }
- else
- {
- TRACE("ImageLoad(): Error reading RPal format finger print.\n");
- sRes = FAILURE;
- }
- return sRes;
- }
- ///////////////////////////////////////////////////////////////////////////////
- // EOF
- ///////////////////////////////////////////////////////////////////////////////
|