rlm@1: // RarItem.h rlm@1: rlm@1: #ifndef __ARCHIVE_RAR_ITEM_H rlm@1: #define __ARCHIVE_RAR_ITEM_H rlm@1: rlm@1: #include "Common/Types.h" rlm@1: #include "Common/MyString.h" rlm@1: rlm@1: #include "RarHeader.h" rlm@1: rlm@1: namespace NArchive{ rlm@1: namespace NRar{ rlm@1: rlm@1: struct CRarTime rlm@1: { rlm@1: UInt32 DosTime; rlm@1: Byte LowSecond; rlm@1: Byte SubTime[3]; rlm@1: }; rlm@1: rlm@1: struct CItem rlm@1: { rlm@1: UInt64 Size; rlm@1: UInt64 PackSize; rlm@1: rlm@1: CRarTime CTime; rlm@1: CRarTime ATime; rlm@1: CRarTime MTime; rlm@1: rlm@1: UInt32 FileCRC; rlm@1: UInt32 Attrib; rlm@1: rlm@1: UInt16 Flags; rlm@1: Byte HostOS; rlm@1: Byte UnPackVersion; rlm@1: Byte Method; rlm@1: rlm@1: bool CTimeDefined; rlm@1: bool ATimeDefined; rlm@1: rlm@1: AString Name; rlm@1: UString UnicodeName; rlm@1: rlm@1: Byte Salt[8]; rlm@1: rlm@1: bool IsEncrypted() const { return (Flags & NHeader::NFile::kEncrypted) != 0; } rlm@1: bool IsSolid() const { return (Flags & NHeader::NFile::kSolid) != 0; } rlm@1: bool IsCommented() const { return (Flags & NHeader::NFile::kComment) != 0; } rlm@1: bool IsSplitBefore() const { return (Flags & NHeader::NFile::kSplitBefore) != 0; } rlm@1: bool IsSplitAfter() const { return (Flags & NHeader::NFile::kSplitAfter) != 0; } rlm@1: bool HasSalt() const { return (Flags & NHeader::NFile::kSalt) != 0; } rlm@1: bool HasExtTime() const { return (Flags & NHeader::NFile::kExtTime) != 0; } rlm@1: bool HasUnicodeName()const { return (Flags & NHeader::NFile::kUnicodeName) != 0; } rlm@1: bool IsOldVersion() const { return (Flags & NHeader::NFile::kOldVersion) != 0; } rlm@1: rlm@1: UInt32 GetDictSize() const { return (Flags >> NHeader::NFile::kDictBitStart) & NHeader::NFile::kDictMask; } rlm@1: bool IsDir() const; rlm@1: bool IgnoreItem() const; rlm@1: UInt32 GetWinAttributes() const; rlm@1: rlm@1: CItem(): CTimeDefined(false), ATimeDefined(false) {} rlm@1: }; rlm@1: rlm@1: class CItemEx: public CItem rlm@1: { rlm@1: public: rlm@1: UInt64 Position; rlm@1: UInt16 MainPartSize; rlm@1: UInt16 CommentSize; rlm@1: UInt16 AlignSize; rlm@1: UInt64 GetFullSize() const { return MainPartSize + CommentSize + AlignSize + PackSize; }; rlm@1: // DWORD GetHeaderWithCommentSize() const { return MainPartSize + CommentSize; }; rlm@1: UInt64 GetCommentPosition() const { return Position + MainPartSize; }; rlm@1: UInt64 GetDataPosition() const { return GetCommentPosition() + CommentSize + AlignSize; }; rlm@1: }; rlm@1: rlm@1: }} rlm@1: rlm@1: #endif