#ifndef COMPOUNDFILE_H #define COMPOUNDFILE_H #include "Sector.h" #include "DirectoryEntry.h" #include "../HWPStream.h" #include "../../../DesktopEditor/common/File.h" namespace HWP { class CCompoundFile { NSFile::CFileBinary m_oFile; int m_nMinorVersion; int m_nMajorVersion; int m_nSectorSize; int m_nShortSectorSize; int m_nNumDirectory; // Support only in version 4 int m_nNumSAT; int m_nFirstSecIDDirectory; int m_nMiniStreamCutoffSize; int m_nFirstSecIDSSAT; int m_nNumSSAT; int m_nFirstSecIDMSAT; int m_nNumMSAT; VECTOR m_arSectors; VECTOR m_arSATs; VECTOR m_arSSATSecIDs; VECTOR m_arDirectorySecIDs; VECTOR m_arSStreamSecIDs; VECTOR m_arSStreams; VECTOR m_arDirectoryEntries; public: CCompoundFile(const HWP_STRING& sFileName); ~CCompoundFile(); const CDirectoryEntry* GetEntry(const HWP_STRING& sFileName) const; bool GetComponent(const HWP_STRING& sEntryName, CHWPStream& oBuffer); VECTOR GetChildEntries(const CDirectoryEntry* pBaseEntry) const; VECTOR GetChildEntries(const HWP_STRING& sBaseEntryName) const; bool Read(const CDirectoryEntry& oEntry, CHWPStream& oBuffer); bool Open(); void Close(); private: void AddSiblings(VECTOR& arIndexs, int nCurrentIndex) const; VECTOR GetSecIDsFromSAT(int nSecID, int nSatIndex, int nSecIDSSAT); void ReadDirectorySector(int nSecID); void ReadSSATSector(int nSecID); void ReadMSATSector(int nSecID); void ParseSectors(int nSecID, CHWPStream& oBuffer); void ParseSATSector(int nSecID, CHWPStream& oBuffer); void ParseDirectorySector(CHWPStream& oBuffer); void ParseSSATSector(CHWPStream& oBuffer); void ParseMSATSector(CHWPStream& oBuffer); bool ParseHeader(CHWPStream& oBuffer); bool CheckSignature(CHWPStream& oBuffer); ESectorType LookupSectorType(CHWPStream& oBuffer); }; } #endif // COMPOUNDFILE_H