You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
3.6 KiB
229 lines
3.6 KiB
odecIdSize
|
|
4: Is Complex Coder
|
|
5: There Are Attributes
|
|
6: Reserved
|
|
7: There are more alternative methods. (Not used anymore, must be 0).
|
|
}
|
|
BYTE CodecId[CodecIdSize]
|
|
if (Is Complex Coder)
|
|
{
|
|
UINT64 NumInStreams;
|
|
UINT64 NumOutStreams;
|
|
}
|
|
if (There Are Attributes)
|
|
{
|
|
UINT64 PropertiesSize
|
|
BYTE Properties[PropertiesSize]
|
|
}
|
|
}
|
|
|
|
NumBindPairs = NumOutStreamsTotal - 1;
|
|
|
|
for (NumBindPairs)
|
|
{
|
|
UINT64 InIndex;
|
|
UINT64 OutIndex;
|
|
}
|
|
|
|
NumPackedStreams = NumInStreamsTotal - NumBindPairs;
|
|
if (NumPackedStreams > 1)
|
|
for(NumPackedStreams)
|
|
{
|
|
UINT64 Index;
|
|
};
|
|
|
|
|
|
|
|
|
|
Coders Info
|
|
~~~~~~~~~~~
|
|
|
|
BYTE NID::kUnPackInfo (0x07)
|
|
|
|
|
|
BYTE NID::kFolder (0x0B)
|
|
UINT64 NumFolders
|
|
BYTE External
|
|
switch(External)
|
|
{
|
|
case 0:
|
|
Folders[NumFolders]
|
|
case 1:
|
|
UINT64 DataStreamIndex
|
|
}
|
|
|
|
|
|
BYTE ID::kCodersUnPackSize (0x0C)
|
|
for(Folders)
|
|
for(Folder.NumOutStreams)
|
|
UINT64 UnPackSize;
|
|
|
|
|
|
[]
|
|
BYTE NID::kCRC (0x0A)
|
|
UnPackDigests[NumFolders]
|
|
[]
|
|
|
|
|
|
|
|
BYTE NID::kEnd
|
|
|
|
|
|
|
|
SubStreams Info
|
|
~~~~~~~~~~~~~~
|
|
BYTE NID::kSubStreamsInfo; (0x08)
|
|
|
|
[]
|
|
BYTE NID::kNumUnPackStream; (0x0D)
|
|
UINT64 NumUnPackStreamsInFolders[NumFolders];
|
|
[]
|
|
|
|
|
|
[]
|
|
BYTE NID::kSize (0x09)
|
|
UINT64 UnPackSizes[]
|
|
[]
|
|
|
|
|
|
[]
|
|
BYTE NID::kCRC (0x0A)
|
|
Digests[Number of streams with unknown CRC]
|
|
[]
|
|
|
|
|
|
BYTE NID::kEnd
|
|
|
|
|
|
Streams Info
|
|
~~~~~~~~~~~~
|
|
|
|
[]
|
|
PackInfo
|
|
[]
|
|
|
|
|
|
[]
|
|
CodersInfo
|
|
[]
|
|
|
|
|
|
[]
|
|
SubStreamsInfo
|
|
[]
|
|
|
|
BYTE NID::kEnd
|
|
|
|
|
|
FilesInfo
|
|
~~~~~~~~~
|
|
BYTE NID::kFilesInfo; (0x05)
|
|
UINT64 NumFiles
|
|
|
|
for (;;)
|
|
{
|
|
BYTE PropertyType;
|
|
if (aType == 0)
|
|
break;
|
|
|
|
UINT64 Size;
|
|
|
|
switch(PropertyType)
|
|
{
|
|
kEmptyStream: (0x0E)
|
|
for(NumFiles)
|
|
BIT IsEmptyStream
|
|
|
|
kEmptyFile: (0x0F)
|
|
for(EmptyStreams)
|
|
BIT IsEmptyFile
|
|
|
|
kAnti: (0x10)
|
|
for(EmptyStreams)
|
|
BIT IsAntiFile
|
|
|
|
case kCTime: (0x12)
|
|
case kATime: (0x13)
|
|
case kMTime: (0x14)
|
|
BYTE AllAreDefined
|
|
if (AllAreDefined == 0)
|
|
{
|
|
for(NumFiles)
|
|
BIT TimeDefined
|
|
}
|
|
BYTE External;
|
|
if(External != 0)
|
|
UINT64 DataIndex
|
|
[]
|
|
for(Definded Items)
|
|
UINT64 Time
|
|
[]
|
|
|
|
kNames: (0x11)
|
|
BYTE External;
|
|
if(External != 0)
|
|
UINT64 DataIndex
|
|
[]
|
|
for(Files)
|
|
{
|
|
wchar_t Names[NameSize];
|
|
wchar_t 0;
|
|
}
|
|
[]
|
|
|
|
kAttributes: (0x15)
|
|
BYTE AllAreDefined
|
|
if (AllAreDefined == 0)
|
|
{
|
|
for(NumFiles)
|
|
BIT AttributesAreDefined
|
|
}
|
|
BYTE External;
|
|
if(External != 0)
|
|
UINT64 DataIndex
|
|
[]
|
|
for(Definded Attributes)
|
|
UINT32 Attributes
|
|
[]
|
|
}
|
|
}
|
|
|
|
|
|
Header
|
|
~~~~~~
|
|
BYTE NID::kHeader (0x01)
|
|
|
|
[]
|
|
ArchiveProperties
|
|
[]
|
|
|
|
[]
|
|
BYTE NID::kAdditionalStreamsInfo; (0x03)
|
|
StreamsInfo
|
|
[]
|
|
|
|
[]
|
|
BYTE NID::kMainStreamsInfo; (0x04)
|
|
StreamsInfo
|
|
[]
|
|
|
|
[]
|
|
FilesInfo
|
|
[]
|
|
|
|
BYTE NID::kEnd
|
|
|
|
|
|
HeaderInfo
|
|
~~~~~~~~~~
|
|
[]
|
|
BYTE NID::kEncodedHeader; (0x17)
|
|
StreamsInfo for Encoded Header
|
|
[]
|
|
|
|
|
|
---
|
|
End of document
|
|
sample foo text �� ��
|
|
fό?�В + 7 z F o r m a t . t x t f o o . t x t ^:��U��;P{�
|
|
|