diff options
| author | Steven Fuller <relnev@icculus.org> | 2001-07-01 00:55:22 +0000 |
|---|---|---|
| committer | Patryk Obara <dreamer.tan@gmail.com> | 2019-08-20 02:09:04 +0200 |
| commit | 2186d5f3f95cd74a070a490d899291648d58667a (patch) | |
| tree | 55241a1afa3e1a22e0b6593a8dead0b703800f44 /3dc/win95/iff.hpp | |
| parent | 218ca90543758a20ac326e444ca0643174ca7384 (diff) | |
Initial revision
Diffstat (limited to '3dc/win95/iff.hpp')
| -rw-r--r-- | 3dc/win95/iff.hpp | 991 |
1 files changed, 0 insertions, 991 deletions
diff --git a/3dc/win95/iff.hpp b/3dc/win95/iff.hpp deleted file mode 100644 index 9250171..0000000 --- a/3dc/win95/iff.hpp +++ /dev/null @@ -1,991 +0,0 @@ -#ifndef _INCLUDED_IFF_HPP_ -#define _INCLUDED_IFF_HPP_ - -#if defined(_WIN32) || defined(WIN32) || defined(WINDOWS) || defined(_WINDOWS) - #define _IFF_WIN_TARGET - #include <windows.h> -#else // ! WIN32 && ! _WIN32 && ! WINDOWS && ! _WINDOWS - #include <stdio.h> - #include <conio.h> -#endif // ! WIN32 && ! _WIN32 && ! WINDOWS && ! _WINDOWS - -#include "media.hpp" - -namespace IFF -{ - /*************************/ - /* Class Hierarchy: */ - /* */ - /* + Unknown */ - /* + SerializableObj */ - /* + GenericFile */ - /* + File */ - /* + Chunk */ - /* + Composite */ - /* + Form */ - /* + Cat */ - /* + List */ - /* + Prop */ - /* + MiscChunk */ - /* + <user chunks> */ - /* + Arvhive */ - /* + ArchvIn */ - /* + ArchvOut(*) */ - /* + DataBlock */ - /* + DataNode */ - /* + SerialData */ - /* + ArchvOut(*) */ - /* + ChildNode */ - /* + DeviceHandle */ - /*************************/ - - #ifdef _IFF_WIN_TARGET - inline void DisplayMessage(TCHAR const * pszTitle,TCHAR const * pszText) - { - ::MessageBox(NULL,pszText,pszTitle,MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND); - } - #else - inline void DisplayMessage(char const * pszTitle,char const * pszText) - { - ::printf("%s\n%s\n",pszTitle,pszText); - while (::kbhit()) - ::getch(); - while (!::kbhit() || '\r' != ::getch()) - ; - } - #endif - - // forward refs - //class Unknown; - //class SerializableObj; - //class GenericFile; - //class File; - //class Chunk; - class Composite; - //class Form; - //class Cat; - //class List; - //class Prop; - //class MiscChunk; - //class Archive; - //class ArchvIn; - //class ArchvOut; - //class DataBlock; - //class DataNode; - //class SerialData; - class ChildNode; - //class DeviceHandle; - - /*****************************/ - /* Original File: iffObj.hpp */ - /*****************************/ - - class Unknown - { - public: - unsigned AddRef() { return ++m_nRefCnt; } - unsigned Release() { if (0==(--m_nRefCnt)) { delete this; return 0;} else return m_nRefCnt; } - protected: - virtual ~Unknown() { - #ifndef NDEBUG - DbForget(this); - #endif - } - Unknown() : m_nRefCnt(1) { - #ifndef NDEBUG - DbRemember(this); - #endif - } - Unknown(Unknown const &) : m_nRefCnt(1) { - #ifndef NDEBUG - DbRemember(this); - #endif - } - private: - unsigned m_nRefCnt; - - #ifndef NDEBUG - friend void DbRemember(Unknown * pObj); - friend void DbForget(Unknown * pObj); - friend class AllocList; - #endif - }; - - /*******************************/ - /* Original File: iffTypes.hpp */ - /*******************************/ - - // deal with any silly bastard who's put #define BYTE ... in a header, etc. - #ifdef BYTE - #undef BYTE - #pragma message("BYTE was defined - undefining") - #endif - typedef signed char BYTE; - typedef unsigned char UBYTE; - - typedef signed short INT16; - typedef unsigned short UINT16; - - typedef signed INT32; - typedef unsigned UINT32; - - typedef signed __int64 INT64; - typedef unsigned __int64 UINT64; - - struct RGBTriple - { - UBYTE r; - UBYTE g; - UBYTE b; - }; - - union ID - { - UINT32 m_nID; - char m_sID[4]; - - inline ID(){} - inline ID(char const * pszID) { m_nID = *reinterpret_cast<UINT32 const *>(pszID); } - inline ID(UINT32 nID) : m_nID(nID) {} - inline operator UINT32 () const { return m_nID; } - inline operator char const * () const { return &m_sID[0]; } - inline bool operator == (ID const & rId) const { return !m_nID || !rId.m_nID || m_nID == rId.m_nID; } - inline bool operator != (ID const & rId) const { return ! operator == (rId); } - inline bool operator ! () const { return !m_nID; } - }; - - ID const ID_ANY(0U); - - #ifndef IFF_READ_ONLY - - /*******************************/ - /* Original File: iffSData.hpp */ - /*******************************/ - - class DataBlock : public Unknown - { - public: - virtual ~DataBlock(); - DataBlock() : m_pBlock(new UBYTE [128]), m_nMaxSize(128), m_nCurSize(0) {} - - unsigned GetDataSize() const; - UBYTE const * GetDataPtr() const; - - bool WriteToFile(::MediaMedium * pMedium) const; - - void Append(UBYTE byte); - void Append(void const * pData, unsigned nSize); - - private: - void Expand(unsigned nMinSize); - - UBYTE * m_pBlock; - unsigned m_nMaxSize; - unsigned m_nCurSize; - }; - - inline unsigned DataBlock::GetDataSize() const - { - return m_nCurSize; - } - - inline UBYTE const * DataBlock::GetDataPtr() const - { - return m_pBlock; - } - - inline void DataBlock::Append(UBYTE byte) - { - if (m_nCurSize >= m_nMaxSize) - Expand(m_nCurSize+1); - - m_pBlock[m_nCurSize++] = byte; - } - - inline void DataBlock::Append(void const * pData, unsigned nSize) - { - if (m_nCurSize+nSize > m_nMaxSize) - Expand(m_nCurSize+nSize+32); - - memcpy(&m_pBlock[m_nCurSize],pData,nSize); - - m_nCurSize += nSize; - } - - class DataNode : public Unknown - { - public: - DataNode(DataNode * pNext, DataBlock * pData, DataNode * pPrev) - : m_pNext(pNext) - , m_pData(pData) - , m_pPrev(pPrev) - { - if (pNext) pNext->AddRef(); - if (pData) pData->AddRef(); - if (pPrev) pPrev->AddRef(); - } - virtual ~DataNode(); - - unsigned GetDataSize() const; - - bool WriteToFile(::MediaMedium * pMedium) const; - - private: - DataNode * m_pNext; - DataBlock * m_pData; - DataNode * m_pPrev; - }; - - class SerialData : public Unknown - { - public: - virtual ~SerialData(); - SerialData() : m_pPrev(NULL), m_pData(new DataBlock) {}; - - void Clear(); - - unsigned GetDataSize() const; - - bool WriteToFile(::MediaMedium * pMedium) const; - - void Append(UBYTE byte); - void Append(void const * pData, unsigned nSize); - - void Append(SerialData * pData); - - private: - DataBlock * m_pData; - DataNode * m_pPrev; - }; - - inline void SerialData::Append(UBYTE byte) - { - m_pData->Append(byte); - } - - inline void SerialData::Append(void const * pData, unsigned nSize) - { - m_pData->Append(pData,nSize); - } - - inline void SerialData::Append(SerialData * pIns) - { - DataNode * pNewNode = new DataNode(pIns->m_pPrev,m_pData,m_pPrev); - - m_pData->Release(); - m_pData = pIns->m_pData; - pIns->m_pData->AddRef(); - - if (m_pPrev) - m_pPrev->Release(); - m_pPrev = pNewNode; - } - - /*******************************/ - /* Original File: iffArchv.hpp */ - /*******************************/ - - class Archive : public Unknown - { - public: - // constructor - construct with true iff the archive is for loading data - Archive(bool bIsLoading) : m_bIsLoading(bIsLoading), m_bError(false) {} - - // to determine easily whenever necessary if the archive is loading data - bool const m_bIsLoading; - bool m_bError; - - // returns either the size in bytes of the data so far written to a storing archive - // or the number of bytes remaining to be read from a loading archive, could be negative - // if too many bytes were read - virtual signed GetSize() const = 0; - - // if the archive is loading, nSize bytes are sectioned off to be read from a sub-archive - // or if the archive is storing, nSize is ignored and data written to the sub-archive - // will be stored when the sub-archive is closed - virtual Archive * OpenSubArchive(unsigned nSize = 0) = 0; - - // commits data written temporarily to a sub-archive (if storing) - // and advances the archive to the next byte after the sub-archive's data - virtual void CloseSubArchive(Archive * pSub) = 0; - - virtual void Open(::MediaMedium * pMedium) = 0; - virtual void Close() = 0; - - virtual void Transfer(RGBTriple &) = 0; - virtual void Transfer(BYTE &) = 0; - virtual void Transfer(UBYTE &) = 0; - virtual void Transfer(INT16 &) = 0; - virtual void Transfer(UINT16 &) = 0; - virtual void Transfer(INT32 &) = 0; - virtual void Transfer(UINT32 &) = 0; - virtual void Transfer(INT64 &) = 0; - virtual void Transfer(UINT64 &) = 0; - virtual void Transfer(ID &) = 0; - - virtual void TransferBlock(void * pData,unsigned nSize) = 0; - }; - - /*******************************/ - /* Original File: iffArchO.hpp */ - /*******************************/ - - class ArchvOut : public Archive, public SerialData - { - public: - ArchvOut() : Archive(false), m_pMedium(NULL) {} - ~ArchvOut(); - - signed GetSize() const; - - Archive * OpenSubArchive(unsigned nSize = 0); - - void CloseSubArchive(Archive * pSub); - - void Open(::MediaMedium * pMedium); - void Close(); - - void Transfer(RGBTriple &); - void Transfer(BYTE &); - void Transfer(UBYTE &); - void Transfer(INT16 &); - void Transfer(UINT16 &); - void Transfer(INT32 &); - void Transfer(UINT32 &); - void Transfer(INT64 &); - void Transfer(UINT64 &); - void Transfer(ID &); - - void TransferBlock(void * pData,unsigned nSize); - - private: - ::MediaMedium * m_pMedium; - }; - - inline signed ArchvOut::GetSize() const - { - return GetDataSize(); - } - - inline void ArchvOut::Transfer(RGBTriple & n) - { - Append(n.r); - Append(n.g); - Append(n.b); - } - - inline void ArchvOut::Transfer(BYTE & n) - { - Append(n); - } - - inline void ArchvOut::Transfer(UBYTE & n) - { - Append(n); - } - - inline void ArchvOut::Transfer(INT16 & n) - { - Append(static_cast<BYTE>(n >> 8)); - Append(static_cast<BYTE>(n)); - } - - inline void ArchvOut::Transfer(UINT16 & n) - { - Append(static_cast<UBYTE>(n >> 8)); - Append(static_cast<UBYTE>(n)); - } - - inline void ArchvOut::Transfer(INT32 & n) - { - Append(static_cast<BYTE>(n >> 24)); - Append(static_cast<BYTE>(n >> 16)); - Append(static_cast<BYTE>(n >> 8)); - Append(static_cast<BYTE>(n)); - } - - inline void ArchvOut::Transfer(UINT32 & n) - { - Append(static_cast<UBYTE>(n >> 24)); - Append(static_cast<UBYTE>(n >> 16)); - Append(static_cast<UBYTE>(n >> 8)); - Append(static_cast<UBYTE>(n)); - } - - inline void ArchvOut::Transfer(INT64 & n) - { - Append(static_cast<BYTE>(n >> 56)); - Append(static_cast<BYTE>(n >> 48)); - Append(static_cast<BYTE>(n >> 40)); - Append(static_cast<BYTE>(n >> 32)); - Append(static_cast<BYTE>(n >> 24)); - Append(static_cast<BYTE>(n >> 16)); - Append(static_cast<BYTE>(n >> 8)); - Append(static_cast<BYTE>(n)); - } - - inline void ArchvOut::Transfer(UINT64 & n) - { - Append(static_cast<UBYTE>(n >> 56)); - Append(static_cast<UBYTE>(n >> 48)); - Append(static_cast<UBYTE>(n >> 40)); - Append(static_cast<UBYTE>(n >> 32)); - Append(static_cast<UBYTE>(n >> 24)); - Append(static_cast<UBYTE>(n >> 16)); - Append(static_cast<UBYTE>(n >> 8)); - Append(static_cast<UBYTE>(n)); - } - - inline void ArchvOut::Transfer(ID & n) - { - Append(&n,4); - } - - inline void ArchvOut::TransferBlock(void * pData,unsigned nSize) - { - Append(pData,nSize); - } - - #endif // ! IFF_READ_ONLY - - /*******************************/ - /* Original File: iffArchI.hpp */ - /*******************************/ - - #ifdef IFF_READ_ONLY - #define _IFF_ARCHI_BASE Unknown - #define _IFF_ARCHI_GENR ArchvIn - #define _IFF_ARCHI_FLAG m_bIsLoading - #define _IFF_ARCHI_INIT ,m_bError(false) - #else // ! IFF_READ_ONLY - #define _IFF_ARCHI_BASE Archive - #define _IFF_ARCHI_GENR Archive - #define _IFF_ARCHI_FLAG Archive - #define _IFF_ARCHI_INIT - #endif // ! IFF_READ_ONLY - - class ArchvIn : public _IFF_ARCHI_BASE - { - public: - ArchvIn() : _IFF_ARCHI_FLAG(true), m_pMedium(NULL) _IFF_ARCHI_INIT {} - ~ArchvIn(); - - #ifdef IFF_READ_ONLY - bool const m_bIsLoading; - bool m_bError; - #endif // IFF_READ_ONLY - - signed GetSize() const; - - _IFF_ARCHI_GENR * OpenSubArchive(unsigned nSize = 0); - - void CloseSubArchive(_IFF_ARCHI_GENR * pSub); - - void Open(::MediaMedium * pMedium); - void Close(); - - void Transfer(RGBTriple &); - void Transfer(BYTE &); - void Transfer(UBYTE &); - void Transfer(INT16 &); - void Transfer(UINT16 &); - void Transfer(INT32 &); - void Transfer(UINT32 &); - void Transfer(INT64 &); - void Transfer(UINT64 &); - void Transfer(ID &); - - void TransferBlock(void * pData,unsigned nSize); - - private: - ArchvIn(ArchvIn * pParent, unsigned nSize); - - ::MediaMedium * m_pMedium; - signed m_nBytesRemaining; - unsigned m_nEndPos; - }; - - #ifdef IFF_READ_ONLY - typedef ArchvIn Archive; - #endif // IFF_READ_ONLY - - inline signed ArchvIn::GetSize() const - { - return m_nBytesRemaining; - } - - inline void ArchvIn::Transfer(RGBTriple & n) - { - m_nBytesRemaining -= 3; - if (m_nBytesRemaining >= 0) - { - ::MediaRead(m_pMedium, &n.r); - ::MediaRead(m_pMedium, &n.g); - ::MediaRead(m_pMedium, &n.b); - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(UBYTE & n) - { - m_nBytesRemaining -= 1; - if (m_nBytesRemaining >= 0) - { - ::MediaRead(m_pMedium, &n); - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(BYTE & n) - { - m_nBytesRemaining -= 1; - if (m_nBytesRemaining >= 0) - { - ::MediaRead(m_pMedium, &n); - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(UINT16 & n) - { - m_nBytesRemaining -= 2; - if (m_nBytesRemaining >= 0) - { - UBYTE byte; - ::MediaRead(m_pMedium, &byte); - n = byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(INT16 & n) - { - m_nBytesRemaining -= 2; - if (m_nBytesRemaining >= 0) - { - BYTE byte; - ::MediaRead(m_pMedium, &byte); - n = byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(UINT32 & n) - { - m_nBytesRemaining -= 4; - if (m_nBytesRemaining >= 0) - { - UBYTE byte; - ::MediaRead(m_pMedium, &byte); - n = byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(INT32 & n) - { - m_nBytesRemaining -= 4; - if (m_nBytesRemaining >= 0) - { - BYTE byte; - ::MediaRead(m_pMedium, &byte); - n = byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(UINT64 & n) - { - m_nBytesRemaining -= 8; - if (m_nBytesRemaining >= 0) - { - UBYTE byte; - ::MediaRead(m_pMedium, &byte); - n = byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(INT64 & n) - { - m_nBytesRemaining -= 8; - if (m_nBytesRemaining >= 0) - { - BYTE byte; - ::MediaRead(m_pMedium, &byte); - n = byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - ::MediaRead(m_pMedium, &byte); - n <<= 8; - n |= byte; - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::Transfer(ID & n) - { - m_nBytesRemaining -= 4; - if (m_nBytesRemaining >= 0) - { - // cast pointer to pointer to 4 byte data type to force 4 byte 'fast' read - ::MediaRead(m_pMedium, reinterpret_cast<UINT32 *>(&n.m_sID[0])); - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - inline void ArchvIn::TransferBlock(void * pData,unsigned nSize) - { - m_nBytesRemaining -= nSize; - if (m_nBytesRemaining >= 0) - { - m_pMedium->ReadBlock(pData,nSize); - if (m_pMedium->m_fError) m_bError = true; - } - else m_bError = true; - } - - /*******************************/ - /* Original File: iffSrlOb.hpp */ - /*******************************/ - - class SerializableObj : public Unknown - { - public: - virtual void Serialize(Archive * pArchv) = 0; - }; - - /*******************************/ - /* Original File: iffChunk.hpp */ - /*******************************/ - - class Chunk : public SerializableObj - { - public: - ID m_idCk; - - Chunk * GetProperty(ID idProp) const; - - virtual bool IsUnknown() const { return false; } - - void Write(Archive * pArchv); - static Chunk * Load(ID idParent, Archive * pArchv, ID idChunk = ID_ANY, bool bKnown = true); - - static Chunk * DynCreate(ID idParent, ID idChunk); - static void Register(ID idParent, ID idChunk, Chunk * (* pfnCreate) () ); - - Composite const * GetParent() const { return m_pParent; } - - protected: - Chunk() : m_pParent(NULL) {} - - private: - Composite const * m_pParent; // mot reference counted - ChildNode const * m_pNode; // not reference counted either - - friend class Composite; - }; - - #define IFF_IMPLEMENT_DYNCREATE(idParent,idChunk,tokenClassName) _IFF_IMPLEMENT_DYNCREATE_LINE_EX(idParent,idChunk,tokenClassName,__LINE__) - #define _IFF_IMPLEMENT_DYNCREATE_LINE_EX(idParent,idChunk,tokenClassName,nLine) _IFF_IMPLEMENT_DYNCREATE_LINE(idParent,idChunk,tokenClassName,nLine) - - #define _IFF_IMPLEMENT_DYNCREATE_LINE(idParent,idChunk,tokenClassName,nLine) \ - static IFF::Chunk * CreateClassObject ## tokenClassName ##_## nLine () { \ - IFF::Chunk * pChunk = new IFF::tokenClassName; \ - pChunk->m_idCk = idChunk; \ - return pChunk; \ - } \ - class RegisterChunkClass ## tokenClassName ##_## nLine { \ - public: RegisterChunkClass ## tokenClassName ##_## nLine () { \ - IFF::Chunk::Register(idParent , idChunk , CreateClassObject ## tokenClassName ##_## nLine); \ - } \ - } rcc ## tokenClassName ##_## nLine; - - /*******************************/ - /* Original File: iffBlock.hpp */ - /*******************************/ - - class ChildNode : public Unknown - { - public: - Chunk * GetChunk() const { return m_pChunk; } - private: - ChildNode * m_pNext; - ChildNode * m_pPrev; - Chunk * m_pChunk; - - friend class Composite; - }; - - class Composite : public Chunk - { - public: - ID m_idData; - - Composite() : m_pFirst(NULL), m_pLast(NULL) {} - virtual ~Composite(); - - ChildNode * GetFirstChild() const { return m_pFirst; } - ChildNode * GetFirstChild(ID idMatch) const; - ChildNode * GetLastChild() const { return m_pLast; } - ChildNode * GetLastChild(ID idMatch) const; - static ChildNode * GetNextChild(ChildNode const * pNode) { return pNode->m_pNext; } - static ChildNode * GetNextChild(ChildNode const * pNode, ID idMatch); - static ChildNode * GetPrevChild(ChildNode const * pNode) { return pNode->m_pPrev; } - static ChildNode * GetPrevChild(ChildNode const * pNode, ID idMatch); - - Chunk * GetProperty(ChildNode const * pNode, ID idProp) const; - - void DeleteChild(ChildNode * pNode); - void DeleteAllChildren(); - - ChildNode * InsertChildFirst(Chunk * pChunk); - ChildNode * InsertChildLast(Chunk * pChunk); - ChildNode * InsertChildAfter(ChildNode * pNode, Chunk * pChunk); - ChildNode * InsertChildBefore(ChildNode * pNode, Chunk * pChunk); - - // pfnCallback should return true to continue the enumeration, false to finish - virtual bool EnumChildren(ID idData, ID idChunk, bool (* pfnCallback) (Chunk *, void *), void * pData) const; - - protected: - virtual void Serialize(Archive * pArchv); - - virtual Chunk * LoadChunk(Archive * pArchv) const; - virtual bool IsValidChildID(ID id) const; - - private: - ChildNode * m_pFirst; - ChildNode * m_pLast; - }; - - class Form : public Composite - { - public: - Form() { m_idCk = "FORM"; } - protected: - virtual bool IsValidChildID(ID id) const; - }; - - class Cat : public Composite - { - public: - Cat() { m_idCk = "CAT "; } - virtual bool EnumChildren(ID idData, ID idChunk, bool (* pfnCallback) (Chunk *, void *), void * pData) const; - protected: - virtual bool IsValidChildID(ID id) const; - }; - - class List : public Composite - { - public: - List() { m_idCk = "LIST"; } - virtual bool EnumChildren(ID idData, ID idChunk, bool (* pfnCallback) (Chunk *, void *), void * pData) const; - protected: - virtual bool IsValidChildID(ID id) const; - }; - - class Prop : public Composite - { - public: - Prop() { m_idCk = "PROP"; } - protected: - virtual bool IsValidChildID(ID id) const; - }; - - /*******************************/ - /* Original File: iffMscCk.hpp */ - /*******************************/ - - class MiscChunk : public Chunk - { - public: - MiscChunk(ID id) - #ifndef IFF_READ_ONLY - : m_pData(NULL) - #endif // ! IFF_READ_ONLY - { - m_idCk = id; - } - - virtual bool IsUnknown() const { return true; } - - protected: - virtual void Serialize(Archive * pArchv); - #ifndef IFF_READ_ONLY - virtual ~MiscChunk(); - #endif // ! IFF_READ_ONLY - - private: - #ifndef IFF_READ_ONLY - BYTE * m_pData; - unsigned m_nSize; - #endif // ! IFF_READ_ONLY - }; - - /******************************/ - /* Original File: iffFile.hpp */ - /******************************/ - - class GenericFile : public SerializableObj - { - public: - #ifndef IFF_READ_ONLY - GenericFile() : m_pszFileName(NULL) {} - virtual ~GenericFile() { if (m_pszFileName) delete[] m_pszFileName; } - #endif - - bool Load(TCHAR const * pszFileName); - bool Load(::MediaMedium * pMedium); - - #ifndef IFF_READ_ONLY - bool Write(TCHAR const * pszFileName = NULL); - bool Write(::MediaMedium * pMedium); - #endif // ! IFF_READ_ONLY - - private: - #ifndef IFF_READ_ONLY - TCHAR * m_pszFileName; - #endif // ! IFF_READ_ONLY - }; - - class File : public GenericFile - { - public: - virtual ~File(); - File() : m_pContents(NULL) {} - - Composite * GetContents() const; - void SetContents(Composite * pContents); - - protected: - virtual void Serialize(Archive * pArchv); - - private: - ID m_idType; - Composite * m_pContents; - }; - - inline Composite * File::GetContents() const - { - return m_pContents; - } - - inline void File::SetContents(Composite * pContents) - { - if (m_pContents) m_pContents->Release(); - if (pContents) - { - pContents->AddRef(); - m_idType = pContents->m_idCk; - } - m_pContents = pContents; - } - - // Have a static object of this in each file: - // It will detect if some files are compiled with - // IFF_READ_ONLY defined differently to each other - static class ConsistencyCheck - { - public: inline ConsistencyCheck() - { - #ifdef IFF_READ_ONLY - static bool bReadOnly = true; - if (!bReadOnly) - #else - static bool bReadOnly = false; - if (bReadOnly) - #endif - { - DisplayMessage - ( - #ifdef NDEBUG - TEXT("Error"), - TEXT("IFF_READ_ONLY definition not consistent") - #else - TEXT("IFF Compile Option Error"), - TEXT("Some files which #include \"iff.hpp\"\n") - TEXT("have the macro IFF_READ_ONLY defined\n") - TEXT("and some don't.\n\n") - TEXT("Please ensure this is consistent and recompile.") - #endif - ); - exit(-45); - } - } - } - consistencyCheck; - -} // namespace IFF - -#endif // ! _INCLUDED_IFF_HPP_ |
