Mercurial > vba-linux
view src/win32/7zip/7z/CPP/7zip/Archive/Rar/RarHeader.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line source
1 // Archive/RarHeader.h3 #ifndef __ARCHIVE_RAR_HEADER_H4 #define __ARCHIVE_RAR_HEADER_H6 #include "Common/Types.h"8 namespace NArchive{9 namespace NRar{10 namespace NHeader{12 const int kMarkerSize = 7;13 extern Byte kMarker[kMarkerSize];15 const int kArchiveSolid = 0x1;17 namespace NBlockType18 {19 enum EBlockType20 {21 kMarker = 0x72,22 kArchiveHeader = 0x73,23 kFileHeader = 0x74,24 kCommentHeader = 0x75,25 kOldAuthenticity = 0x76,26 kSubBlock = 0x77,27 kRecoveryRecord = 0x78,28 kAuthenticity = 0x79,30 kEndOfArchive = 0x7B // Is not safe31 };32 }34 namespace NArchive35 {36 const UInt16 kVolume = 1;37 const UInt16 kComment = 2;38 const UInt16 kLock = 4;39 const UInt16 kSolid = 8;40 const UInt16 kNewVolName = 0x10; // ('volname.partN.rar')41 const UInt16 kAuthenticity = 0x20;42 const UInt16 kRecovery = 0x40;43 const UInt16 kBlockEncryption = 0x80;44 const UInt16 kFirstVolume = 0x100; // (set only by RAR 3.0 and later)45 const UInt16 kEncryptVer = 0x200; // RAR 3.6 there is EncryptVer Byte in End of MainHeader47 const int kHeaderSizeMin = 7;49 struct CBlock50 {51 UInt16 CRC;52 Byte Type;53 UInt16 Flags;54 UInt16 Size;55 UInt16 Reserved1;56 UInt32 Reserved2;57 // UInt16 GetRealCRC() const;58 };60 const int kArchiveHeaderSize = 13;62 const int kBlockHeadersAreEncrypted = 0x80;64 struct CHeader360: public CBlock65 {66 Byte EncryptVersion;67 bool IsEncrypted() const { return (Flags & NHeader::NArchive::kBlockEncryption) != 0; }68 bool IsThereEncryptVer() const { return (Flags & NHeader::NArchive::kEncryptVer) != 0; }69 bool IsEncryptOld() const { return (!IsThereEncryptVer() || EncryptVersion < 36); }70 UInt32 GetBaseSize() const { return kArchiveHeaderSize + (IsEncryptOld() ? 0 : 1); }71 };72 }74 namespace NFile75 {76 const int kSplitBefore = 1 << 0;77 const int kSplitAfter = 1 << 1;78 const int kEncrypted = 1 << 2;79 const int kComment = 1 << 3;80 const int kSolid = 1 << 4;82 const int kDictBitStart = 5;83 const int kNumDictBits = 3;84 const int kDictMask = (1 << kNumDictBits) - 1;85 const int kDictDirectoryValue = 0x7;87 const int kSize64Bits = 1 << 8;88 const int kUnicodeName = 1 << 9;89 const int kSalt = 1 << 10;90 const int kOldVersion = 1 << 11;91 const int kExtTime = 1 << 12;92 // const int kExtFlags = 1 << 13;93 // const int kSkipIfUnknown = 1 << 14;95 const int kLongBlock = 1 << 15;97 /*98 struct CBlock99 {100 // UInt16 HeadCRC;101 // Byte Type;102 // UInt16 Flags;103 // UInt16 HeadSize;104 UInt32 PackSize;105 UInt32 UnPackSize;106 Byte HostOS;107 UInt32 FileCRC;108 UInt32 Time;109 Byte UnPackVersion;110 Byte Method;111 UInt16 NameSize;112 UInt32 Attributes;113 };114 */116 /*117 struct CBlock32118 {119 UInt16 HeadCRC;120 Byte Type;121 UInt16 Flags;122 UInt16 HeadSize;123 UInt32 PackSize;124 UInt32 UnPackSize;125 Byte HostOS;126 UInt32 FileCRC;127 UInt32 Time;128 Byte UnPackVersion;129 Byte Method;130 UInt16 NameSize;131 UInt32 Attributes;132 UInt16 GetRealCRC(const void *aName, UInt32 aNameSize,133 bool anExtraDataDefined = false, Byte *anExtraData = 0) const;134 };135 struct CBlock64136 {137 UInt16 HeadCRC;138 Byte Type;139 UInt16 Flags;140 UInt16 HeadSize;141 UInt32 PackSizeLow;142 UInt32 UnPackSizeLow;143 Byte HostOS;144 UInt32 FileCRC;145 UInt32 Time;146 Byte UnPackVersion;147 Byte Method;148 UInt16 NameSize;149 UInt32 Attributes;150 UInt32 PackSizeHigh;151 UInt32 UnPackSizeHigh;152 UInt16 GetRealCRC(const void *aName, UInt32 aNameSize) const;153 };154 */156 const int kLabelFileAttribute = 0x08;157 const int kWinFileDirectoryAttributeMask = 0x10;159 enum CHostOS160 {161 kHostMSDOS = 0,162 kHostOS2 = 1,163 kHostWin32 = 2,164 kHostUnix = 3,165 kHostMacOS = 4,166 kHostBeOS = 5167 };168 }170 namespace NBlock171 {172 const UInt16 kLongBlock = 1 << 15;173 struct CBlock174 {175 UInt16 CRC;176 Byte Type;177 UInt16 Flags;178 UInt16 HeadSize;179 // UInt32 DataSize;180 };181 }183 /*184 struct CSubBlock185 {186 UInt16 HeadCRC;187 Byte HeadType;188 UInt16 Flags;189 UInt16 HeadSize;190 UInt32 DataSize;191 UInt16 SubType;192 Byte Level; // Reserved : Must be 0193 };195 struct CCommentBlock196 {197 UInt16 HeadCRC;198 Byte HeadType;199 UInt16 Flags;200 UInt16 HeadSize;201 UInt16 UnpSize;202 Byte UnpVer;203 Byte Method;204 UInt16 CommCRC;205 };208 struct CProtectHeader209 {210 UInt16 HeadCRC;211 Byte HeadType;212 UInt16 Flags;213 UInt16 HeadSize;214 UInt32 DataSize;215 Byte Version;216 UInt16 RecSectors;217 UInt32 TotalBlocks;218 Byte Mark[8];219 };220 */222 }}}224 #endif