// wzarchive.h #ifndef _PROGRAMCOMMON_WZARCHIVE_H_ #define _PROGRAMCOMMON_WZARCHIVE_H_ #include "discaccess.h" #include "wzlist.h" // Chunk Á¤º¸ #pragma pack (1) struct St_ChunkInfo { unsigned short m_nID; unsigned int m_nSize; }; #pragma pack () // Chunk º¸°ü ½ºÅà struct St_ChunkStack { unsigned short m_nID; DWORD m_dwBeginning; }; //------------------------------------------------------------------------------ /** @class CWzArchive */ class CWzArchive { public: // »ý¼ºÀÚ/¼Ò¸êÀÚ CWzArchive( void ); ~CWzArchive( void ); // DiscAccess Æ÷ÀÎÅÍ ¼³Á¤/¾ò±â void SetDiscAccess( CDiscAccess* pDiscAccess ); void GetDiscAccess( CDiscAccess** ppDiscAccess ); // ÆÄÀÏ ·Îµù(³»ºÎ ¹öÆÛ »ý¼º) BOOL LoadFile( const char* lpszFileName ); // ÆÄÀÏ ·Îµù(¿ÜºÎ¿¡¼­ ¹öÆÛ Á¦°ø) BOOL LoadFile( const char* lpszFileName, BYTE* pbyBuffer, int iSize ); // ÆÄÀÏ ÀúÀå(³»ºÎ¿¡¼­ ¿­±â) BOOL SaveFile( const char* lpszFileName ); // ÆÄÀÏ ÀúÀå(¿ÜºÎ¿¡¼­ ¿­¸° ÆÄÀÏ) BOOL SaveFile( const char* lpszFileName, DA_FILE dfHandle ); // ÆÄÀÏ ´Ý±â void Close( void ); // ¹öÀü ¼³Á¤/¾ò±â void SetVersion( DWORD dwVersion ); DWORD GetVersion( void ) const; // ÀúÀå ÁßÀΰ¡? BOOL IsStoring( void ) const; // Àбâ/¾²±â UINT Read( void* lpBuffer, UINT iSize ); UINT Write( const void* lpBuffer, UINT iSize ); // À̸§ Àбâ/¾²±â UINT ReadName( char* lpszName, char** ppNameAlloc = NULL ); UINT WriteName( const char* lpszName ); // ÅØ½ºÆ® ¾²±â void WriteText( const char* lpszFormat, ... ); void WriteHexText( const void* pBuffer, int iSize ); // ÆÄÀÏ Æ÷ÀÎÅÍ À̵¿ DWORD Seek( LONG lDistanceToMove, ENUM_SEEK_ORIGIN eSeekOrigin ); // ûũ ½ÃÀÛ ¼³Á¤(ÀúÀå½Ã) void SetBeginningOfChunk( unsigned short nID ); // ûũ ³¡ ¼³Á¤(ÀúÀå½Ã) void SetEndOfChunk( void ); // ÇöÀç ûũ Àбâ St_ChunkInfo ReadChunk( void ); // ÇØ´ç ûũ °Ç³Ê¶Ù±â void SkipCurrentChunk( St_ChunkInfo ci ); // ÆÄÀÏ¸í ¾ò±â const char* GetFileName( void ); // operator >> template CWzArchive& operator >> ( T& Data ); // operator << template CWzArchive& operator << ( const T& Data ); private: // µ¥ÀÌŸ ÃʱâÈ­ void Clear( void ); // ³»ºÎ DiscAccess »ý¼º/Á¦°Å void CreateDiscAccess( void ); void ReleaseDiscAccess( void ); private: CDiscAccess* m_pDiscAccess; BOOL m_bDiscAccessGenerated; CWzList m_lstChunkStack; char m_szFileName[MAX_PATH]; DA_FILE m_dfFile; DWORD m_dwVersion; // ÆÄÀÏ ¹öÁ¯ BOOL m_bStoring; // ÀúÀåÁßÀΰ¡? BOOL m_bInnerData; // ³»ºÎ µ¥ÀÌŸ »ç¿ë ¿©ºÎ BYTE* m_pBuffer; // ³»ºÎ ¹öÆÛ int m_iBufferSize; // ¹öÆÛ Å©±â int m_iPosInBuffer; // ¹öÆÛ»óÀÇ ÇöÀç À§Ä¡ }; //------------------------------------------------------------------------------ /** */ inline void CWzArchive::SetVersion( DWORD dwVersion ) { m_dwVersion = dwVersion; } //------------------------------------------------------------------------------ /** */ inline DWORD CWzArchive::GetVersion( void ) const { return m_dwVersion; } //------------------------------------------------------------------------------ /** */ inline BOOL CWzArchive::IsStoring( void ) const { return m_bStoring; } //------------------------------------------------------------------------------ /** */ inline const char* CWzArchive::GetFileName( void ) { return m_szFileName; } //------------------------------------------------------------------------------ /** */ template inline CWzArchive& CWzArchive::operator >> ( T& Data ) { Read( &Data, sizeof( T ) ); return *this; } //------------------------------------------------------------------------------ /** */ template inline CWzArchive& CWzArchive::operator << ( const T& Data ) { Write( &Data, sizeof( T ) ); return *this; } #endif // _PROGRAMCOMMON_WZARCHIVE_H_