Normalize all the line endings

This commit is contained in:
Tino Reichardt
2020-05-31 13:08:03 +02:00
parent d8345ee3b3
commit 9c3c277ad7
1156 changed files with 292304 additions and 292304 deletions

View File

@@ -1,187 +1,187 @@
7z ANSI-C Decoder 9.35
----------------------
7z ANSI-C provides 7z/LZMA decoding.
7z ANSI-C version is simplified version ported from C++ code.
LZMA is default and general compression method of 7z format
in 7-Zip compression program (www.7-zip.org). LZMA provides high
compression ratio and very fast decompression.
LICENSE
-------
7z ANSI-C Decoder is part of the LZMA SDK.
LZMA SDK is written and placed in the public domain by Igor Pavlov.
Files
---------------------
7zDecode.* - Low level 7z decoding
7zExtract.* - High level 7z decoding
7zHeader.* - .7z format constants
7zIn.* - .7z archive opening
7zItem.* - .7z structures
7zMain.c - Test application
How To Use
----------
You can create .7z archive with 7z.exe, 7za.exe or 7zr.exe:
7z.exe a archive.7z *.htm -r -mx -m0fb=255
If you have big number of files in archive, and you need fast extracting,
you can use partly-solid archives:
7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K
In that example 7-Zip will use 512KB solid blocks. So it needs to decompress only
512KB for extracting one file from such archive.
Limitations of current version of 7z ANSI-C Decoder
---------------------------------------------------
- It reads only "FileName", "Size", "LastWriteTime" and "CRC" information for each file in archive.
- It supports only LZMA and Copy (no compression) methods with BCJ or BCJ2 filters.
- It converts original UTF-16 Unicode file names to UTF-8 Unicode file names.
These limitations will be fixed in future versions.
Using 7z ANSI-C Decoder Test application:
-----------------------------------------
Usage: 7zDec <command> <archive_name>
<Command>:
e: Extract files from archive
l: List contents of archive
t: Test integrity of archive
Example:
7zDec l archive.7z
lists contents of archive.7z
7zDec e archive.7z
extracts files from archive.7z to current folder.
How to use .7z Decoder
----------------------
Memory allocation
~~~~~~~~~~~~~~~~~
7z Decoder uses two memory pools:
1) Temporary pool
2) Main pool
Such scheme can allow you to avoid fragmentation of allocated blocks.
Steps for using 7z decoder
--------------------------
Use code at 7zMain.c as example.
1) Declare variables:
inStream /* implements ILookInStream interface */
CSzArEx db; /* 7z archive database structure */
ISzAlloc allocImp; /* memory functions for main pool */
ISzAlloc allocTempImp; /* memory functions for temporary pool */
2) call CrcGenerateTable(); function to initialize CRC structures.
3) call SzArEx_Init(&db); function to initialize db structures.
4) call SzArEx_Open(&db, inStream, &allocMain, &allocTemp) to open archive
This function opens archive "inStream" and reads headers to "db".
All items in "db" will be allocated with "allocMain" functions.
SzArEx_Open function allocates and frees temporary structures by "allocTemp" functions.
5) List items or Extract items
Listing code:
~~~~~~~~~~~~~
Use SzArEx_GetFileNameUtf16 function. Look example code in C\Util\7z\7zMain.c file.
Extracting code:
~~~~~~~~~~~~~~~~
SZ_RESULT SzAr_Extract(
CArchiveDatabaseEx *db,
ILookInStream *inStream,
UInt32 fileIndex, /* index of file */
UInt32 *blockIndex, /* index of solid block */
Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */
size_t *outBufferSize, /* buffer size for output buffer */
size_t *offset, /* offset of stream for required file in *outBuffer */
size_t *outSizeProcessed, /* size of file in *outBuffer */
ISzAlloc *allocMain,
ISzAlloc *allocTemp);
If you need to decompress more than one file, you can send these values from previous call:
blockIndex,
outBuffer,
outBufferSize,
You can consider "outBuffer" as cache of solid block. If your archive is solid,
it will increase decompression speed.
After decompressing you must free "outBuffer":
allocImp.Free(outBuffer);
6) call SzArEx_Free(&db, allocImp.Free) to free allocated items in "db".
Memory requirements for .7z decoding
------------------------------------
Memory usage for Archive opening:
- Temporary pool:
- Memory for uncompressed .7z headers
- some other temporary blocks
- Main pool:
- Memory for database:
Estimated size of one file structures in solid archive:
- Size (4 or 8 Bytes)
- CRC32 (4 bytes)
- LastWriteTime (8 bytes)
- Some file information (4 bytes)
- File Name (variable length) + pointer + allocation structures
Memory usage for archive Decompressing:
- Temporary pool:
- Memory for LZMA decompressing structures
- Main pool:
- Memory for decompressed solid block
- Memory for temprorary buffers, if BCJ2 fileter is used. Usually these
temprorary buffers can be about 15% of solid block size.
7z Decoder doesn't allocate memory for compressed blocks.
Instead of this, you must allocate buffer with desired
size before calling 7z Decoder. Use 7zMain.c as example.
Defines
-------
_SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr.
---
http://www.7-zip.org
http://www.7-zip.org/sdk.html
http://www.7-zip.org/support.html
7z ANSI-C Decoder 9.35
----------------------
7z ANSI-C provides 7z/LZMA decoding.
7z ANSI-C version is simplified version ported from C++ code.
LZMA is default and general compression method of 7z format
in 7-Zip compression program (www.7-zip.org). LZMA provides high
compression ratio and very fast decompression.
LICENSE
-------
7z ANSI-C Decoder is part of the LZMA SDK.
LZMA SDK is written and placed in the public domain by Igor Pavlov.
Files
---------------------
7zDecode.* - Low level 7z decoding
7zExtract.* - High level 7z decoding
7zHeader.* - .7z format constants
7zIn.* - .7z archive opening
7zItem.* - .7z structures
7zMain.c - Test application
How To Use
----------
You can create .7z archive with 7z.exe, 7za.exe or 7zr.exe:
7z.exe a archive.7z *.htm -r -mx -m0fb=255
If you have big number of files in archive, and you need fast extracting,
you can use partly-solid archives:
7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K
In that example 7-Zip will use 512KB solid blocks. So it needs to decompress only
512KB for extracting one file from such archive.
Limitations of current version of 7z ANSI-C Decoder
---------------------------------------------------
- It reads only "FileName", "Size", "LastWriteTime" and "CRC" information for each file in archive.
- It supports only LZMA and Copy (no compression) methods with BCJ or BCJ2 filters.
- It converts original UTF-16 Unicode file names to UTF-8 Unicode file names.
These limitations will be fixed in future versions.
Using 7z ANSI-C Decoder Test application:
-----------------------------------------
Usage: 7zDec <command> <archive_name>
<Command>:
e: Extract files from archive
l: List contents of archive
t: Test integrity of archive
Example:
7zDec l archive.7z
lists contents of archive.7z
7zDec e archive.7z
extracts files from archive.7z to current folder.
How to use .7z Decoder
----------------------
Memory allocation
~~~~~~~~~~~~~~~~~
7z Decoder uses two memory pools:
1) Temporary pool
2) Main pool
Such scheme can allow you to avoid fragmentation of allocated blocks.
Steps for using 7z decoder
--------------------------
Use code at 7zMain.c as example.
1) Declare variables:
inStream /* implements ILookInStream interface */
CSzArEx db; /* 7z archive database structure */
ISzAlloc allocImp; /* memory functions for main pool */
ISzAlloc allocTempImp; /* memory functions for temporary pool */
2) call CrcGenerateTable(); function to initialize CRC structures.
3) call SzArEx_Init(&db); function to initialize db structures.
4) call SzArEx_Open(&db, inStream, &allocMain, &allocTemp) to open archive
This function opens archive "inStream" and reads headers to "db".
All items in "db" will be allocated with "allocMain" functions.
SzArEx_Open function allocates and frees temporary structures by "allocTemp" functions.
5) List items or Extract items
Listing code:
~~~~~~~~~~~~~
Use SzArEx_GetFileNameUtf16 function. Look example code in C\Util\7z\7zMain.c file.
Extracting code:
~~~~~~~~~~~~~~~~
SZ_RESULT SzAr_Extract(
CArchiveDatabaseEx *db,
ILookInStream *inStream,
UInt32 fileIndex, /* index of file */
UInt32 *blockIndex, /* index of solid block */
Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */
size_t *outBufferSize, /* buffer size for output buffer */
size_t *offset, /* offset of stream for required file in *outBuffer */
size_t *outSizeProcessed, /* size of file in *outBuffer */
ISzAlloc *allocMain,
ISzAlloc *allocTemp);
If you need to decompress more than one file, you can send these values from previous call:
blockIndex,
outBuffer,
outBufferSize,
You can consider "outBuffer" as cache of solid block. If your archive is solid,
it will increase decompression speed.
After decompressing you must free "outBuffer":
allocImp.Free(outBuffer);
6) call SzArEx_Free(&db, allocImp.Free) to free allocated items in "db".
Memory requirements for .7z decoding
------------------------------------
Memory usage for Archive opening:
- Temporary pool:
- Memory for uncompressed .7z headers
- some other temporary blocks
- Main pool:
- Memory for database:
Estimated size of one file structures in solid archive:
- Size (4 or 8 Bytes)
- CRC32 (4 bytes)
- LastWriteTime (8 bytes)
- Some file information (4 bytes)
- File Name (variable length) + pointer + allocation structures
Memory usage for archive Decompressing:
- Temporary pool:
- Memory for LZMA decompressing structures
- Main pool:
- Memory for decompressed solid block
- Memory for temprorary buffers, if BCJ2 fileter is used. Usually these
temprorary buffers can be about 15% of solid block size.
7z Decoder doesn't allocate memory for compressed blocks.
Instead of this, you must allocate buffer with desired
size before calling 7z Decoder. Use 7zMain.c as example.
Defines
-------
_SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr.
---
http://www.7-zip.org
http://www.7-zip.org/sdk.html
http://www.7-zip.org/support.html

View File

@@ -1,469 +1,469 @@
7z Format description (18.06)
----------------------------
This file contains description of 7z archive format.
7z archive can contain files compressed with any method.
See "Methods.txt" for description for defined compressing methods.
Format structure Overview
-------------------------
Some fields can be optional.
Archive structure
~~~~~~~~~~~~~~~~~
SignatureHeader
[PackedStreams]
[PackedStreamsForHeaders]
[
Header
or
{
Packed Header
HeaderInfo
}
]
Header structure
~~~~~~~~~~~~~~~~
{
ArchiveProperties
AdditionalStreams
{
PackInfo
{
PackPos
NumPackStreams
Sizes[NumPackStreams]
CRCs[NumPackStreams]
}
CodersInfo
{
NumFolders
Folders[NumFolders]
{
NumCoders
CodersInfo[NumCoders]
{
ID
NumInStreams;
NumOutStreams;
PropertiesSize
Properties[PropertiesSize]
}
NumBindPairs
BindPairsInfo[NumBindPairs]
{
InIndex;
OutIndex;
}
PackedIndices
}
UnPackSize[Folders][Folders.NumOutstreams]
CRCs[NumFolders]
}
SubStreamsInfo
{
NumUnPackStreamsInFolders[NumFolders];
UnPackSizes[]
CRCs[]
}
}
MainStreamsInfo
{
(Same as in AdditionalStreams)
}
FilesInfo
{
NumFiles
Properties[]
{
ID
Size
Data
}
}
}
HeaderInfo structure
~~~~~~~~~~~~~~~~~~~~
{
(Same as in AdditionalStreams)
}
Notes about Notation and encoding
---------------------------------
7z uses little endian encoding.
7z archive format has optional headers that are marked as
[]
Header
[]
REAL_UINT64 means real UINT64.
UINT64 means real UINT64 encoded with the following scheme:
Size of encoding sequence depends from first byte:
First_Byte Extra_Bytes Value
(binary)
0xxxxxxx : ( xxxxxxx )
10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y
110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y
...
1111110x BYTE y[6] : ( x << (8 * 6)) + y
11111110 BYTE y[7] : y
11111111 BYTE y[8] : y
Property IDs
------------
0x00 = kEnd
0x01 = kHeader
0x02 = kArchiveProperties
0x03 = kAdditionalStreamsInfo
0x04 = kMainStreamsInfo
0x05 = kFilesInfo
0x06 = kPackInfo
0x07 = kUnPackInfo
0x08 = kSubStreamsInfo
0x09 = kSize
0x0A = kCRC
0x0B = kFolder
0x0C = kCodersUnPackSize
0x0D = kNumUnPackStream
0x0E = kEmptyStream
0x0F = kEmptyFile
0x10 = kAnti
0x11 = kName
0x12 = kCTime
0x13 = kATime
0x14 = kMTime
0x15 = kWinAttributes
0x16 = kComment
0x17 = kEncodedHeader
0x18 = kStartPos
0x19 = kDummy
7z format headers
-----------------
SignatureHeader
~~~~~~~~~~~~~~~
BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};
ArchiveVersion
{
BYTE Major; // now = 0
BYTE Minor; // now = 4
};
UINT32 StartHeaderCRC;
StartHeader
{
REAL_UINT64 NextHeaderOffset
REAL_UINT64 NextHeaderSize
UINT32 NextHeaderCRC
}
...........................
ArchiveProperties
~~~~~~~~~~~~~~~~~
BYTE NID::kArchiveProperties (0x02)
for (;;)
{
BYTE PropertyType;
if (aType == 0)
break;
UINT64 PropertySize;
BYTE PropertyData[PropertySize];
}
Digests (NumStreams)
~~~~~~~~~~~~~~~~~~~~~
BYTE AllAreDefined
if (AllAreDefined == 0)
{
for(NumStreams)
BIT Defined
}
UINT32 CRCs[NumDefined]
PackInfo
~~~~~~~~~~~~
BYTE NID::kPackInfo (0x06)
UINT64 PackPos
UINT64 NumPackStreams
[]
BYTE NID::kSize (0x09)
UINT64 PackSizes[NumPackStreams]
[]
[]
BYTE NID::kCRC (0x0A)
PackStreamDigests[NumPackStreams]
[]
BYTE NID::kEnd
Folder
~~~~~~
UINT64 NumCoders;
for (NumCoders)
{
BYTE
{
0:3 CodecIdSize
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)
REAL_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
7z Format description (18.06)
----------------------------
This file contains description of 7z archive format.
7z archive can contain files compressed with any method.
See "Methods.txt" for description for defined compressing methods.
Format structure Overview
-------------------------
Some fields can be optional.
Archive structure
~~~~~~~~~~~~~~~~~
SignatureHeader
[PackedStreams]
[PackedStreamsForHeaders]
[
Header
or
{
Packed Header
HeaderInfo
}
]
Header structure
~~~~~~~~~~~~~~~~
{
ArchiveProperties
AdditionalStreams
{
PackInfo
{
PackPos
NumPackStreams
Sizes[NumPackStreams]
CRCs[NumPackStreams]
}
CodersInfo
{
NumFolders
Folders[NumFolders]
{
NumCoders
CodersInfo[NumCoders]
{
ID
NumInStreams;
NumOutStreams;
PropertiesSize
Properties[PropertiesSize]
}
NumBindPairs
BindPairsInfo[NumBindPairs]
{
InIndex;
OutIndex;
}
PackedIndices
}
UnPackSize[Folders][Folders.NumOutstreams]
CRCs[NumFolders]
}
SubStreamsInfo
{
NumUnPackStreamsInFolders[NumFolders];
UnPackSizes[]
CRCs[]
}
}
MainStreamsInfo
{
(Same as in AdditionalStreams)
}
FilesInfo
{
NumFiles
Properties[]
{
ID
Size
Data
}
}
}
HeaderInfo structure
~~~~~~~~~~~~~~~~~~~~
{
(Same as in AdditionalStreams)
}
Notes about Notation and encoding
---------------------------------
7z uses little endian encoding.
7z archive format has optional headers that are marked as
[]
Header
[]
REAL_UINT64 means real UINT64.
UINT64 means real UINT64 encoded with the following scheme:
Size of encoding sequence depends from first byte:
First_Byte Extra_Bytes Value
(binary)
0xxxxxxx : ( xxxxxxx )
10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y
110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y
...
1111110x BYTE y[6] : ( x << (8 * 6)) + y
11111110 BYTE y[7] : y
11111111 BYTE y[8] : y
Property IDs
------------
0x00 = kEnd
0x01 = kHeader
0x02 = kArchiveProperties
0x03 = kAdditionalStreamsInfo
0x04 = kMainStreamsInfo
0x05 = kFilesInfo
0x06 = kPackInfo
0x07 = kUnPackInfo
0x08 = kSubStreamsInfo
0x09 = kSize
0x0A = kCRC
0x0B = kFolder
0x0C = kCodersUnPackSize
0x0D = kNumUnPackStream
0x0E = kEmptyStream
0x0F = kEmptyFile
0x10 = kAnti
0x11 = kName
0x12 = kCTime
0x13 = kATime
0x14 = kMTime
0x15 = kWinAttributes
0x16 = kComment
0x17 = kEncodedHeader
0x18 = kStartPos
0x19 = kDummy
7z format headers
-----------------
SignatureHeader
~~~~~~~~~~~~~~~
BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};
ArchiveVersion
{
BYTE Major; // now = 0
BYTE Minor; // now = 4
};
UINT32 StartHeaderCRC;
StartHeader
{
REAL_UINT64 NextHeaderOffset
REAL_UINT64 NextHeaderSize
UINT32 NextHeaderCRC
}
...........................
ArchiveProperties
~~~~~~~~~~~~~~~~~
BYTE NID::kArchiveProperties (0x02)
for (;;)
{
BYTE PropertyType;
if (aType == 0)
break;
UINT64 PropertySize;
BYTE PropertyData[PropertySize];
}
Digests (NumStreams)
~~~~~~~~~~~~~~~~~~~~~
BYTE AllAreDefined
if (AllAreDefined == 0)
{
for(NumStreams)
BIT Defined
}
UINT32 CRCs[NumDefined]
PackInfo
~~~~~~~~~~~~
BYTE NID::kPackInfo (0x06)
UINT64 PackPos
UINT64 NumPackStreams
[]
BYTE NID::kSize (0x09)
UINT64 PackSizes[NumPackStreams]
[]
[]
BYTE NID::kCRC (0x0A)
PackStreamDigests[NumPackStreams]
[]
BYTE NID::kEnd
Folder
~~~~~~
UINT64 NumCoders;
for (NumCoders)
{
BYTE
{
0:3 CodecIdSize
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)
REAL_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

View File

@@ -1,82 +1,82 @@
[OPTIONS]
Compatibility=1.1 or later
Compiled file=7-zip.chm
Contents file=7zip.hhc
Default topic=start.htm
Display compile progress=No
Full-text search=Yes
Index file=7zip.hhk
Language=0x409 English (United States)
[FILES]
start.htm
general\thanks.htm
general\faq.htm
general\formats.htm
general\index.htm
general\license.htm
general\performance.htm
general\7z.htm
cmdline\index.htm
cmdline\syntax.htm
cmdline\exit_codes.htm
cmdline\commands\add.htm
cmdline\commands\bench.htm
cmdline\commands\delete.htm
cmdline\commands\extract.htm
cmdline\commands\extract_full.htm
cmdline\commands\update.htm
cmdline\commands\hash.htm
cmdline\commands\index.htm
cmdline\commands\list.htm
cmdline\commands\rename.htm
cmdline\commands\test.htm
cmdline\switches\index.htm
cmdline\switches\yes.htm
cmdline\switches\include.htm
cmdline\switches\method.htm
cmdline\switches\ar_include.htm
cmdline\switches\ar_exclude.htm
cmdline\switches\ar_no.htm
cmdline\switches\bb.htm
cmdline\switches\bs.htm
cmdline\switches\charset.htm
cmdline\switches\email.htm
cmdline\switches\list_tech.htm
cmdline\switches\large_pages.htm
cmdline\switches\output_dir.htm
cmdline\switches\overwrite.htm
cmdline\switches\password.htm
cmdline\switches\recurse.htm
cmdline\switches\sa.htm
cmdline\switches\scc.htm
cmdline\switches\scrc.htm
cmdline\switches\sdel.htm
cmdline\switches\sfx.htm
cmdline\switches\shared.htm
cmdline\switches\sni.htm
cmdline\switches\sns.htm
cmdline\switches\spf.htm
cmdline\switches\ssc.htm
cmdline\switches\stdin.htm
cmdline\switches\stdout.htm
cmdline\switches\stl.htm
cmdline\switches\stop_switch.htm
cmdline\switches\stx.htm
cmdline\switches\type.htm
cmdline\switches\update.htm
cmdline\switches\working_dir.htm
cmdline\switches\exclude.htm
fm\options.htm
fm\benchmark.htm
fm\index.htm
fm\menu.htm
fm\about.htm
fm\plugins\index.htm
fm\plugins\7-zip\extract.htm
fm\plugins\7-zip\index.htm
fm\plugins\7-zip\add.htm
[INFOTYPES]
[OPTIONS]
Compatibility=1.1 or later
Compiled file=7-zip.chm
Contents file=7zip.hhc
Default topic=start.htm
Display compile progress=No
Full-text search=Yes
Index file=7zip.hhk
Language=0x409 English (United States)
[FILES]
start.htm
general\thanks.htm
general\faq.htm
general\formats.htm
general\index.htm
general\license.htm
general\performance.htm
general\7z.htm
cmdline\index.htm
cmdline\syntax.htm
cmdline\exit_codes.htm
cmdline\commands\add.htm
cmdline\commands\bench.htm
cmdline\commands\delete.htm
cmdline\commands\extract.htm
cmdline\commands\extract_full.htm
cmdline\commands\update.htm
cmdline\commands\hash.htm
cmdline\commands\index.htm
cmdline\commands\list.htm
cmdline\commands\rename.htm
cmdline\commands\test.htm
cmdline\switches\index.htm
cmdline\switches\yes.htm
cmdline\switches\include.htm
cmdline\switches\method.htm
cmdline\switches\ar_include.htm
cmdline\switches\ar_exclude.htm
cmdline\switches\ar_no.htm
cmdline\switches\bb.htm
cmdline\switches\bs.htm
cmdline\switches\charset.htm
cmdline\switches\email.htm
cmdline\switches\list_tech.htm
cmdline\switches\large_pages.htm
cmdline\switches\output_dir.htm
cmdline\switches\overwrite.htm
cmdline\switches\password.htm
cmdline\switches\recurse.htm
cmdline\switches\sa.htm
cmdline\switches\scc.htm
cmdline\switches\scrc.htm
cmdline\switches\sdel.htm
cmdline\switches\sfx.htm
cmdline\switches\shared.htm
cmdline\switches\sni.htm
cmdline\switches\sns.htm
cmdline\switches\spf.htm
cmdline\switches\ssc.htm
cmdline\switches\stdin.htm
cmdline\switches\stdout.htm
cmdline\switches\stl.htm
cmdline\switches\stop_switch.htm
cmdline\switches\stx.htm
cmdline\switches\type.htm
cmdline\switches\update.htm
cmdline\switches\working_dir.htm
cmdline\switches\exclude.htm
fm\options.htm
fm\benchmark.htm
fm\index.htm
fm\menu.htm
fm\about.htm
fm\plugins\index.htm
fm\plugins\7-zip\extract.htm
fm\plugins\7-zip\index.htm
fm\plugins\7-zip\add.htm
[INFOTYPES]

View File

@@ -1,55 +1,55 @@
[CODE]
[Version]
Signature = "$Windows NT$"
Provider = "7-zip.org"
CESignature = "$Windows CE$"
[CEStrings]
AppName = "7-Zip"
InstallDir = %CE1%\%AppName%
[Strings]
AppVer = "19.00"
AppDate = "2019-01-21"
[CEDevice]
; ProcessorType = 2577 ; ARM
VersionMin = 3.0
BuildMin = 0.0
VersionMax = 1000.0
BuildMax = 0xE0000000
[DefaultInstall]
CopyFiles = CopyFilesSection,CopyFilesSection.Lang
AddReg = RegSettings
CEShortcuts = Shortcuts
[SourceDisksNames]
1 = ,"Common files",,"."
2 = ,"Lang files",,"Lang"
[SourceDisksFiles]
7zFM.exe = 1
7z.sfx = 1
7zS2.sfx = 1
ru.txt = 2
[DestinationDirs]
DefaultDestDir = ,%InstallDir%
CopyFilesSection = ,%InstallDir%
CopyFilesSection.Lang = ,"%InstallDir%\Lang"
Shortcuts = ,%CE11%
[CopyFilesSection]
7zFM.exe
7z.sfx
7zS2.sfx
[CopyFilesSection.Lang]
ru.txt
[RegSettings]
[Shortcuts]
7-Zip,0,7zFM.exe
[CODE]
[Version]
Signature = "$Windows NT$"
Provider = "7-zip.org"
CESignature = "$Windows CE$"
[CEStrings]
AppName = "7-Zip"
InstallDir = %CE1%\%AppName%
[Strings]
AppVer = "19.00"
AppDate = "2019-01-21"
[CEDevice]
; ProcessorType = 2577 ; ARM
VersionMin = 3.0
BuildMin = 0.0
VersionMax = 1000.0
BuildMax = 0xE0000000
[DefaultInstall]
CopyFiles = CopyFilesSection,CopyFilesSection.Lang
AddReg = RegSettings
CEShortcuts = Shortcuts
[SourceDisksNames]
1 = ,"Common files",,"."
2 = ,"Lang files",,"Lang"
[SourceDisksFiles]
7zFM.exe = 1
7z.sfx = 1
7zS2.sfx = 1
ru.txt = 2
[DestinationDirs]
DefaultDestDir = ,%InstallDir%
CopyFilesSection = ,%InstallDir%
CopyFilesSection.Lang = ,"%InstallDir%\Lang"
Shortcuts = ,%CE11%
[CopyFilesSection]
7zFM.exe
7z.sfx
7zS2.sfx
[CopyFilesSection.Lang]
ru.txt
[RegSettings]
[Shortcuts]
7-Zip,0,7zFM.exe

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,399 +1,399 @@
<?xml version="1.0"?>
<?define VerMajor = "19" ?>
<?define VerMinor = "00" ?>
<?define VerBuild = "00" ?>
<?define MmVer = "$(var.VerMajor).$(var.VerMinor)" ?>
<?define MmHex = "$(var.VerMajor)$(var.VerMinor)" ?>
<?define MmmmVer = "$(var.MmVer).$(var.VerBuild).0" ?>
<?define UpgradeMinVer = "4.38" ?>
<?define ProductName = "7-Zip" ?>
<?ifndef MyCPU?>
<?define MyCPU = "Intel" ?>
<?endif?>
<?if $(var.MyCPU) = "x64" ?>
<?define CpuId = "2" ?>
<?define PFilesFolder = "ProgramFiles64Folder" ?>
<?define Platforms = "x64" ?>
<?define CpuPostfix = " (x64 edition)" ?>
<?define Is64 = "yes" ?>
<?define NumBits = "64" ?>
<?elseif $(var.MyCPU) = "ia64" ?>
<?define CpuId = "3" ?>
<?define PFilesFolder = "ProgramFiles64Folder" ?>
<?define Platforms = "Intel64" ?>
<?define CpuPostfix = " (ia64 edition)" ?>
<?define Is64 = "yes" ?>
<?define NumBits = "64" ?>
<?else ?>
<?define CpuId = "1" ?>
<?define PFilesFolder = "ProgramFilesFolder" ?>
<?define Platforms = "Intel" ?>
<?define CpuPostfix = "" ?>
<?define Is64 = "no" ?>
<?define NumBits = "32" ?>
<?endif ?>
<?define ShellExtId = "{23170F69-40C1-278A-1000-000100020000}" ?>
<?define BaseId = "23170F69-40C1-270$(var.CpuId)" ?>
<?define BaseIdVer = "$(var.BaseId)-$(var.MmHex)-$(var.VerBuild)00" ?>
<?define ProductId = "$(var.BaseIdVer)01000000" ?>
<?define PackageId = "$(var.BaseIdVer)02000000" ?>
<?define CompId = "$(var.BaseIdVer)030000" ?>
<?define UpgradeCode = "$(var.BaseId)-0000-000004000000" ?>
<?define CompFm = "$(var.CompId)01" ?>
<?define CompShellExt = "$(var.CompId)02" ?>
<?define CompCmdLine = "$(var.CompId)03" ?>
<?define CompCmdLineA = "$(var.CompId)04" ?>
<?define CompGui = "$(var.CompId)05" ?>
<?define CompGuiSfx = "$(var.CompId)06" ?>
<?define CompConSfx = "$(var.CompId)07" ?>
<?define CompHelp = "$(var.CompId)08" ?>
<?define CompDocs = "$(var.CompId)09" ?>
<?define CompFormats = "$(var.CompId)10" ?>
<?define CompCodecs = "$(var.CompId)11" ?>
<?define CompLang = "$(var.CompId)12" ?>
<?define CompShellExt2 = "$(var.CompId)13" ?>
<?define CompInstallRegCU = "$(var.CompId)80" ?>
<?define CompInstallRegLM = "$(var.CompId)81" ?>
<?define CompInstallRegWild = "$(var.CompId)82" ?>
<?define CompInstallRegDirectory = "$(var.CompId)83" ?>
<?define CompInstallRegDirDD = "$(var.CompId)84" ?>
<?define CompInstallRegDriveDD = "$(var.CompId)85" ?>
<?define CompInstallRegApproved = "$(var.CompId)86" ?>
<?define CompInstallRegAppPath = "$(var.CompId)87" ?>
<?define CompInstallRegFolder = "$(var.CompId)88" ?>
<?define Manufacturer = "Igor Pavlov" ?>
<?define HomePage = "http://www.7-zip.org/" ?>
<?define AboutURL = "$(var.HomePage)" ?>
<?define UpdatesURL = "$(var.HomePage)download.html" ?>
<?define SupportURL = "$(var.HomePage)support.html" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
<Product
Id="$(var.ProductId)"
UpgradeCode="$(var.UpgradeCode)"
Name="$(var.ProductName) $(var.MmVer)$(var.CpuPostfix)"
Language="1033"
Version="$(var.MmmmVer)"
Manufacturer="$(var.Manufacturer)">
<Package
Id="$(var.PackageId)"
Description="$(var.ProductName)$(var.CpuPostfix) Package"
Comments="$(var.ProductName)$(var.CpuPostfix) Package"
Manufacturer="$(var.Manufacturer)"
InstallerVersion="200"
Compressed="yes"
Platforms="$(var.Platforms)"
/>
<!-- Major upgrade -->
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion Minimum="$(var.UpgradeMinVer)" IncludeMinimum="yes"
Maximum="$(var.MmmmVer)" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED" />
</Upgrade>
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" CompressionLevel="high" />
<Property Id="MSIRMSHUTDOWN" Value="2"/>
<Property Id="INSTALLDIR">
<RegistrySearch Id="My7zipPathLM" Type="raw" Root="HKLM" Key="Software\7-Zip" Name="Path" />
<RegistrySearch Id="My7zipPathLM2" Type="raw" Root="HKLM" Key="Software\7-Zip" Name="Path$(var.NumBits)" />
<RegistrySearch Id="My7zipPath" Type="raw" Root="HKCU" Key="Software\7-Zip" Name="Path" />
<RegistrySearch Id="My7zipPath2" Type="raw" Root="HKCU" Key="Software\7-Zip" Name="Path$(var.NumBits)" />
</Property>
<Property Id="ALLUSERS">2</Property>
<Property Id="LicenseAccepted">1</Property>
<Property Id="ARPURLINFOABOUT" Value="$(var.AboutURL)" />
<Property Id="ARPHELPLINK" Value="$(var.SupportURL)" />
<Property Id="ARPURLUPDATEINFO" Value="$(var.UpdatesURL)" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.PFilesFolder)" Name="Files">
<Directory Id="INSTALLDIR" Name="7-Zip">
<Component Id="InstallRegCU" Guid="$(var.CompInstallRegCU)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegCU" Root="HKCU" Key="Software\7-Zip" Name="Path" Action="write" Type="string" Value="[INSTALLDIR]" />
<Registry Id="MyInstallRegCU2" Root="HKCU" Key="Software\7-Zip" Name="Path$(var.NumBits)" Action="write" Type="string" Value="[INSTALLDIR]" />
</Component>
<Component Id="InstallRegLM" Guid="$(var.CompInstallRegLM)" DiskId="1" Win64="$(var.Is64)">
<Condition>Privileged</Condition>
<Registry Id="MyInstallRegLM" Root="HKLM" Key="Software\7-Zip" Name="Path" Action="write" Type="string" Value="[INSTALLDIR]" />
<Registry Id="MyInstallRegLM2" Root="HKLM" Key="Software\7-Zip" Name="Path$(var.NumBits)" Action="write" Type="string" Value="[INSTALLDIR]" />
</Component>
<Component Id="InstallRegWild" Guid="$(var.CompInstallRegWild)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegWild" Action="write" Type="string"
Root="HKCR" Key="*\shellex\ContextMenuHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegDirectory" Guid="$(var.CompInstallRegDirectory)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegDirectory" Action="write" Type="string"
Root="HKCR" Key="Directory\shellex\ContextMenuHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegFolder" Guid="$(var.CompInstallRegFolder)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegFolder" Action="write" Type="string"
Root="HKCR" Key="Folder\shellex\ContextMenuHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegDirDD" Guid="$(var.CompInstallRegDirDD)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegDirDD" Action="write" Type="string"
Root="HKCR" Key="Directory\shellex\DragDropHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegDriveDD" Guid="$(var.CompInstallRegDriveDD)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegDriveDD" Action="write" Type="string"
Root="HKCR" Key="Drive\shellex\DragDropHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegApproved" Guid="$(var.CompInstallRegApproved)" DiskId="1" Win64="$(var.Is64)">
<Condition>Privileged</Condition>
<Registry Id="MyInstallRegApproved" Action="write" Type="string"
Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
Name="$(var.ShellExtId)" Value="7-Zip Shell Extension" />
</Component>
<Component Id="InstallRegAppPath" Guid="$(var.CompInstallRegAppPath)" DiskId="1" Win64="$(var.Is64)">
<Condition>Privileged</Condition>
<Registry Id="MyInstallRegAppPath" Action="write" Type="string"
Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe"
Value="[INSTALLDIR]7zFM.exe" />
<Registry Id="MyInstallRegAppPath2" Action="write" Type="string"
Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe" Name="Path"
Value="[INSTALLDIR]" />
</Component>
<Component Id="Fm" Guid="$(var.CompFm)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7zFM.exe" Name="7zFM.exe">
<Shortcut Id="startmenuFmShortcut" Directory="PMenu" Name="7zipFM" LongName="7-Zip File Manager" />
</File>
</Component>
<?if $(var.MyCPU) = "x64" ?>
<Component Id="ShellExt32" Guid="$(var.CompShellExt2)" DiskId="1" Win64="no">
<File Id="_7zip32.dll" Name="7-zip32.dll" />
<Registry Id="shellReg0_32" Action="write" Type="string" Root="HKCR"
Key="CLSID\$(var.ShellExtId)\InprocServer32"
Value="[INSTALLDIR]7-zip32.dll" />
<Registry Id="shellReg1_32" Action="write" Type="string" Root="HKCR"
Key="CLSID\$(var.ShellExtId)\InprocServer32"
Name="ThreadingModel"
Value="Apartment" />
</Component>
<?endif ?>
<Component Id="ShellExt" Guid="$(var.CompShellExt)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7zip.dll" Name="7-zip.dll" />
<Registry Id="shellReg0" Action="write" Type="string" Root="HKCR"
Key="CLSID\$(var.ShellExtId)\InprocServer32"
Value="[INSTALLDIR]7-zip.dll" />
<Registry Id="shellReg1" Action="write" Type="string" Root="HKCR"
Key="CLSID\$(var.ShellExtId)\InprocServer32"
Name="ThreadingModel"
Value="Apartment" />
</Component>
<Component Id="Gui" Guid="$(var.CompGui)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7zG.exe" Name="7zG.exe" />
</Component>
<Component Id="Formats" Guid="$(var.CompFormats)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7z.dll" Name="7z.dll" />
</Component>
<Component Id="CmdLine" Guid="$(var.CompCmdLine)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7z.exe" Name="7z.exe" />
</Component>
<Component Id="GuiSfx" Guid="$(var.CompGuiSfx)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7z.sfx" Name="7z.sfx" />
</Component>
<Component Id="ConSfx" Guid="$(var.CompConSfx)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7zCon.sfx" Name="7zCon.sfx" />
</Component>
<Component Id="Docs" Guid="$(var.CompDocs)" DiskId="1" Win64="$(var.Is64)">
<File Id="descript.ion" Name="descript.ion" />
<File Id="History.txt" Name="History.txt" />
<File Id="License.txt" Name="License.txt" />
<File Id="readme.txt" Name="readme.txt" />
</Component>
<Component Id="Help" Guid="$(var.CompHelp)">
<File Id="_7zip.chm" Name="7-zip.chm" DiskId="1" >
<Shortcut Id="startmenuHelpShortcut" Directory="PMenu" Name="7zipHelp" LongName="7-Zip Help" />
</File>
</Component>
<Directory Id="MyLang" Name="Lang">
<Component Id="Lang" Guid="$(var.CompLang)" DiskId="1" Win64="$(var.Is64)">
<File Id="en.ttt" Name="en.ttt" />
<File Id="af.txt" Name="af.txt" />
<File Id="an.txt" Name="an.txt" />
<File Id="ar.txt" Name="ar.txt" />
<File Id="ast.txt" Name="ast.txt" />
<File Id="az.txt" Name="az.txt" />
<File Id="ba.txt" Name="ba.txt" />
<File Id="be.txt" Name="be.txt" />
<File Id="bg.txt" Name="bg.txt" />
<File Id="bn.txt" Name="bn.txt" />
<File Id="br.txt" Name="br.txt" />
<File Id="ca.txt" Name="ca.txt" />
<File Id="co.txt" Name="co.txt" />
<File Id="cs.txt" Name="cs.txt" />
<File Id="cy.txt" Name="cy.txt" />
<File Id="da.txt" Name="da.txt" />
<File Id="de.txt" Name="de.txt" />
<File Id="el.txt" Name="el.txt" />
<File Id="eo.txt" Name="eo.txt" />
<File Id="es.txt" Name="es.txt" />
<File Id="et.txt" Name="et.txt" />
<File Id="eu.txt" Name="eu.txt" />
<File Id="ext.txt" Name="ext.txt" />
<File Id="fa.txt" Name="fa.txt" />
<File Id="fi.txt" Name="fi.txt" />
<File Id="fr.txt" Name="fr.txt" />
<File Id="fur.txt" Name="fur.txt" />
<File Id="fy.txt" Name="fy.txt" />
<File Id="ga.txt" Name="ga.txt" />
<File Id="gl.txt" Name="gl.txt" />
<File Id="gu.txt" Name="gu.txt" />
<File Id="he.txt" Name="he.txt" />
<File Id="hi.txt" Name="hi.txt" />
<File Id="hr.txt" Name="hr.txt" />
<File Id="hu.txt" Name="hu.txt" />
<File Id="hy.txt" Name="hy.txt" />
<File Id="id.txt" Name="id.txt" />
<File Id="io.txt" Name="io.txt" />
<File Id="is.txt" Name="is.txt" />
<File Id="it.txt" Name="it.txt" />
<File Id="ja.txt" Name="ja.txt" />
<File Id="ka.txt" Name="ka.txt" />
<File Id="kaa.txt" Name="kaa.txt" />
<File Id="kab.txt" Name="kab.txt" />
<File Id="kk.txt" Name="kk.txt" />
<File Id="ko.txt" Name="ko.txt" />
<File Id="ku.txt" Name="ku.txt" />
<File Id="ku_ckb.txt" Name="ku-ckb.txt" />
<File Id="ky.txt" Name="ky.txt" />
<File Id="lij.txt" Name="lij.txt" />
<File Id="lt.txt" Name="lt.txt" />
<File Id="lv.txt" Name="lv.txt" />
<File Id="mk.txt" Name="mk.txt" />
<File Id="mn.txt" Name="mn.txt" />
<File Id="mng.txt" Name="mng.txt" />
<File Id="mng2.txt" Name="mng2.txt" />
<File Id="mr.txt" Name="mr.txt" />
<File Id="ms.txt" Name="ms.txt" />
<File Id="ne.txt" Name="ne.txt" />
<File Id="nl.txt" Name="nl.txt" />
<File Id="nb.txt" Name="nb.txt" />
<File Id="nn.txt" Name="nn.txt" />
<File Id="pa_in.txt" Name="pa-in.txt" />
<File Id="pl.txt" Name="pl.txt" />
<File Id="ps.txt" Name="ps.txt" />
<File Id="pt.txt" Name="pt.txt" />
<File Id="pt_br.txt" Name="pt-br.txt" />
<File Id="ro.txt" Name="ro.txt" />
<File Id="ru.txt" Name="ru.txt" />
<File Id="sa.txt" Name="sa.txt" />
<File Id="si.txt" Name="si.txt" />
<File Id="sk.txt" Name="sk.txt" />
<File Id="sl.txt" Name="sl.txt" />
<File Id="sq.txt" Name="sq.txt" />
<File Id="sr_spl.txt" Name="sr-spl.txt" />
<File Id="sr_spc.txt" Name="sr-spc.txt" />
<File Id="sv.txt" Name="sv.txt" />
<File Id="ta.txt" Name="ta.txt" />
<File Id="th.txt" Name="th.txt" />
<File Id="tr.txt" Name="tr.txt" />
<File Id="tt.txt" Name="tt.txt" />
<File Id="ug.txt" Name="ug.txt" />
<File Id="uk.txt" Name="uk.txt" />
<File Id="uz.txt" Name="uz.txt" />
<File Id="va.txt" Name="va.txt" />
<File Id="vi.txt" Name="vi.txt" />
<File Id="yo.txt" Name="yo.txt" />
<File Id="zh_cn.txt" Name="zh-cn.txt" />
<File Id="zh_tw.txt" Name="zh-tw.txt" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="PMenu" LongName="Programs">
<Directory Id="PMenu" Name="7zip" LongName="7-Zip" />
</Directory>
</Directory>
<Feature Id="Complete" Title="7-Zip" Description="The complete package."
Display="expand" Level="1" ConfigurableDirectory="INSTALLDIR"
Absent="disallow" AllowAdvertise="no" >
<Feature Id="Program" Title="Program files" Description="Program files." Level="1"
Absent="disallow" AllowAdvertise="no">
<ComponentRef Id="Fm" />
<ComponentRef Id="ShellExt" />
<?if $(var.MyCPU) = "x64" ?>
<ComponentRef Id="ShellExt32" />
<?endif ?>
<ComponentRef Id="CmdLine" />
<ComponentRef Id="Gui" />
<ComponentRef Id="GuiSfx" />
<ComponentRef Id="ConSfx" />
<ComponentRef Id="Formats" />
<ComponentRef Id="Docs" />
<ComponentRef Id="Help" />
<ComponentRef Id="InstallRegCU" />
<ComponentRef Id="InstallRegLM" />
<ComponentRef Id="InstallRegWild" />
<ComponentRef Id="InstallRegDirectory" />
<ComponentRef Id="InstallRegDirDD" />
<ComponentRef Id="InstallRegDriveDD" />
<ComponentRef Id="InstallRegApproved" />
<ComponentRef Id="InstallRegAppPath" />
<ComponentRef Id="InstallRegFolder" />
</Feature>
<Feature Id="LanguageFiles" Title="Localization files" Description="Localization files for 71 languages."
Level="1" AllowAdvertise="no">
<ComponentRef Id="Lang" />
</Feature>
</Feature>
<UIRef Id="WixUI" />
<!-- Install Sequences -->
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallValidate" />
</InstallExecuteSequence>
</Product>
</Wix>
<?xml version="1.0"?>
<?define VerMajor = "19" ?>
<?define VerMinor = "00" ?>
<?define VerBuild = "00" ?>
<?define MmVer = "$(var.VerMajor).$(var.VerMinor)" ?>
<?define MmHex = "$(var.VerMajor)$(var.VerMinor)" ?>
<?define MmmmVer = "$(var.MmVer).$(var.VerBuild).0" ?>
<?define UpgradeMinVer = "4.38" ?>
<?define ProductName = "7-Zip" ?>
<?ifndef MyCPU?>
<?define MyCPU = "Intel" ?>
<?endif?>
<?if $(var.MyCPU) = "x64" ?>
<?define CpuId = "2" ?>
<?define PFilesFolder = "ProgramFiles64Folder" ?>
<?define Platforms = "x64" ?>
<?define CpuPostfix = " (x64 edition)" ?>
<?define Is64 = "yes" ?>
<?define NumBits = "64" ?>
<?elseif $(var.MyCPU) = "ia64" ?>
<?define CpuId = "3" ?>
<?define PFilesFolder = "ProgramFiles64Folder" ?>
<?define Platforms = "Intel64" ?>
<?define CpuPostfix = " (ia64 edition)" ?>
<?define Is64 = "yes" ?>
<?define NumBits = "64" ?>
<?else ?>
<?define CpuId = "1" ?>
<?define PFilesFolder = "ProgramFilesFolder" ?>
<?define Platforms = "Intel" ?>
<?define CpuPostfix = "" ?>
<?define Is64 = "no" ?>
<?define NumBits = "32" ?>
<?endif ?>
<?define ShellExtId = "{23170F69-40C1-278A-1000-000100020000}" ?>
<?define BaseId = "23170F69-40C1-270$(var.CpuId)" ?>
<?define BaseIdVer = "$(var.BaseId)-$(var.MmHex)-$(var.VerBuild)00" ?>
<?define ProductId = "$(var.BaseIdVer)01000000" ?>
<?define PackageId = "$(var.BaseIdVer)02000000" ?>
<?define CompId = "$(var.BaseIdVer)030000" ?>
<?define UpgradeCode = "$(var.BaseId)-0000-000004000000" ?>
<?define CompFm = "$(var.CompId)01" ?>
<?define CompShellExt = "$(var.CompId)02" ?>
<?define CompCmdLine = "$(var.CompId)03" ?>
<?define CompCmdLineA = "$(var.CompId)04" ?>
<?define CompGui = "$(var.CompId)05" ?>
<?define CompGuiSfx = "$(var.CompId)06" ?>
<?define CompConSfx = "$(var.CompId)07" ?>
<?define CompHelp = "$(var.CompId)08" ?>
<?define CompDocs = "$(var.CompId)09" ?>
<?define CompFormats = "$(var.CompId)10" ?>
<?define CompCodecs = "$(var.CompId)11" ?>
<?define CompLang = "$(var.CompId)12" ?>
<?define CompShellExt2 = "$(var.CompId)13" ?>
<?define CompInstallRegCU = "$(var.CompId)80" ?>
<?define CompInstallRegLM = "$(var.CompId)81" ?>
<?define CompInstallRegWild = "$(var.CompId)82" ?>
<?define CompInstallRegDirectory = "$(var.CompId)83" ?>
<?define CompInstallRegDirDD = "$(var.CompId)84" ?>
<?define CompInstallRegDriveDD = "$(var.CompId)85" ?>
<?define CompInstallRegApproved = "$(var.CompId)86" ?>
<?define CompInstallRegAppPath = "$(var.CompId)87" ?>
<?define CompInstallRegFolder = "$(var.CompId)88" ?>
<?define Manufacturer = "Igor Pavlov" ?>
<?define HomePage = "http://www.7-zip.org/" ?>
<?define AboutURL = "$(var.HomePage)" ?>
<?define UpdatesURL = "$(var.HomePage)download.html" ?>
<?define SupportURL = "$(var.HomePage)support.html" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
<Product
Id="$(var.ProductId)"
UpgradeCode="$(var.UpgradeCode)"
Name="$(var.ProductName) $(var.MmVer)$(var.CpuPostfix)"
Language="1033"
Version="$(var.MmmmVer)"
Manufacturer="$(var.Manufacturer)">
<Package
Id="$(var.PackageId)"
Description="$(var.ProductName)$(var.CpuPostfix) Package"
Comments="$(var.ProductName)$(var.CpuPostfix) Package"
Manufacturer="$(var.Manufacturer)"
InstallerVersion="200"
Compressed="yes"
Platforms="$(var.Platforms)"
/>
<!-- Major upgrade -->
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion Minimum="$(var.UpgradeMinVer)" IncludeMinimum="yes"
Maximum="$(var.MmmmVer)" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED" />
</Upgrade>
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" CompressionLevel="high" />
<Property Id="MSIRMSHUTDOWN" Value="2"/>
<Property Id="INSTALLDIR">
<RegistrySearch Id="My7zipPathLM" Type="raw" Root="HKLM" Key="Software\7-Zip" Name="Path" />
<RegistrySearch Id="My7zipPathLM2" Type="raw" Root="HKLM" Key="Software\7-Zip" Name="Path$(var.NumBits)" />
<RegistrySearch Id="My7zipPath" Type="raw" Root="HKCU" Key="Software\7-Zip" Name="Path" />
<RegistrySearch Id="My7zipPath2" Type="raw" Root="HKCU" Key="Software\7-Zip" Name="Path$(var.NumBits)" />
</Property>
<Property Id="ALLUSERS">2</Property>
<Property Id="LicenseAccepted">1</Property>
<Property Id="ARPURLINFOABOUT" Value="$(var.AboutURL)" />
<Property Id="ARPHELPLINK" Value="$(var.SupportURL)" />
<Property Id="ARPURLUPDATEINFO" Value="$(var.UpdatesURL)" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.PFilesFolder)" Name="Files">
<Directory Id="INSTALLDIR" Name="7-Zip">
<Component Id="InstallRegCU" Guid="$(var.CompInstallRegCU)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegCU" Root="HKCU" Key="Software\7-Zip" Name="Path" Action="write" Type="string" Value="[INSTALLDIR]" />
<Registry Id="MyInstallRegCU2" Root="HKCU" Key="Software\7-Zip" Name="Path$(var.NumBits)" Action="write" Type="string" Value="[INSTALLDIR]" />
</Component>
<Component Id="InstallRegLM" Guid="$(var.CompInstallRegLM)" DiskId="1" Win64="$(var.Is64)">
<Condition>Privileged</Condition>
<Registry Id="MyInstallRegLM" Root="HKLM" Key="Software\7-Zip" Name="Path" Action="write" Type="string" Value="[INSTALLDIR]" />
<Registry Id="MyInstallRegLM2" Root="HKLM" Key="Software\7-Zip" Name="Path$(var.NumBits)" Action="write" Type="string" Value="[INSTALLDIR]" />
</Component>
<Component Id="InstallRegWild" Guid="$(var.CompInstallRegWild)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegWild" Action="write" Type="string"
Root="HKCR" Key="*\shellex\ContextMenuHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegDirectory" Guid="$(var.CompInstallRegDirectory)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegDirectory" Action="write" Type="string"
Root="HKCR" Key="Directory\shellex\ContextMenuHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegFolder" Guid="$(var.CompInstallRegFolder)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegFolder" Action="write" Type="string"
Root="HKCR" Key="Folder\shellex\ContextMenuHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegDirDD" Guid="$(var.CompInstallRegDirDD)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegDirDD" Action="write" Type="string"
Root="HKCR" Key="Directory\shellex\DragDropHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegDriveDD" Guid="$(var.CompInstallRegDriveDD)" DiskId="1" Win64="$(var.Is64)">
<Registry Id="MyInstallRegDriveDD" Action="write" Type="string"
Root="HKCR" Key="Drive\shellex\DragDropHandlers\7-Zip"
Value="$(var.ShellExtId)" />
</Component>
<Component Id="InstallRegApproved" Guid="$(var.CompInstallRegApproved)" DiskId="1" Win64="$(var.Is64)">
<Condition>Privileged</Condition>
<Registry Id="MyInstallRegApproved" Action="write" Type="string"
Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
Name="$(var.ShellExtId)" Value="7-Zip Shell Extension" />
</Component>
<Component Id="InstallRegAppPath" Guid="$(var.CompInstallRegAppPath)" DiskId="1" Win64="$(var.Is64)">
<Condition>Privileged</Condition>
<Registry Id="MyInstallRegAppPath" Action="write" Type="string"
Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe"
Value="[INSTALLDIR]7zFM.exe" />
<Registry Id="MyInstallRegAppPath2" Action="write" Type="string"
Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe" Name="Path"
Value="[INSTALLDIR]" />
</Component>
<Component Id="Fm" Guid="$(var.CompFm)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7zFM.exe" Name="7zFM.exe">
<Shortcut Id="startmenuFmShortcut" Directory="PMenu" Name="7zipFM" LongName="7-Zip File Manager" />
</File>
</Component>
<?if $(var.MyCPU) = "x64" ?>
<Component Id="ShellExt32" Guid="$(var.CompShellExt2)" DiskId="1" Win64="no">
<File Id="_7zip32.dll" Name="7-zip32.dll" />
<Registry Id="shellReg0_32" Action="write" Type="string" Root="HKCR"
Key="CLSID\$(var.ShellExtId)\InprocServer32"
Value="[INSTALLDIR]7-zip32.dll" />
<Registry Id="shellReg1_32" Action="write" Type="string" Root="HKCR"
Key="CLSID\$(var.ShellExtId)\InprocServer32"
Name="ThreadingModel"
Value="Apartment" />
</Component>
<?endif ?>
<Component Id="ShellExt" Guid="$(var.CompShellExt)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7zip.dll" Name="7-zip.dll" />
<Registry Id="shellReg0" Action="write" Type="string" Root="HKCR"
Key="CLSID\$(var.ShellExtId)\InprocServer32"
Value="[INSTALLDIR]7-zip.dll" />
<Registry Id="shellReg1" Action="write" Type="string" Root="HKCR"
Key="CLSID\$(var.ShellExtId)\InprocServer32"
Name="ThreadingModel"
Value="Apartment" />
</Component>
<Component Id="Gui" Guid="$(var.CompGui)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7zG.exe" Name="7zG.exe" />
</Component>
<Component Id="Formats" Guid="$(var.CompFormats)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7z.dll" Name="7z.dll" />
</Component>
<Component Id="CmdLine" Guid="$(var.CompCmdLine)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7z.exe" Name="7z.exe" />
</Component>
<Component Id="GuiSfx" Guid="$(var.CompGuiSfx)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7z.sfx" Name="7z.sfx" />
</Component>
<Component Id="ConSfx" Guid="$(var.CompConSfx)" DiskId="1" Win64="$(var.Is64)">
<File Id="_7zCon.sfx" Name="7zCon.sfx" />
</Component>
<Component Id="Docs" Guid="$(var.CompDocs)" DiskId="1" Win64="$(var.Is64)">
<File Id="descript.ion" Name="descript.ion" />
<File Id="History.txt" Name="History.txt" />
<File Id="License.txt" Name="License.txt" />
<File Id="readme.txt" Name="readme.txt" />
</Component>
<Component Id="Help" Guid="$(var.CompHelp)">
<File Id="_7zip.chm" Name="7-zip.chm" DiskId="1" >
<Shortcut Id="startmenuHelpShortcut" Directory="PMenu" Name="7zipHelp" LongName="7-Zip Help" />
</File>
</Component>
<Directory Id="MyLang" Name="Lang">
<Component Id="Lang" Guid="$(var.CompLang)" DiskId="1" Win64="$(var.Is64)">
<File Id="en.ttt" Name="en.ttt" />
<File Id="af.txt" Name="af.txt" />
<File Id="an.txt" Name="an.txt" />
<File Id="ar.txt" Name="ar.txt" />
<File Id="ast.txt" Name="ast.txt" />
<File Id="az.txt" Name="az.txt" />
<File Id="ba.txt" Name="ba.txt" />
<File Id="be.txt" Name="be.txt" />
<File Id="bg.txt" Name="bg.txt" />
<File Id="bn.txt" Name="bn.txt" />
<File Id="br.txt" Name="br.txt" />
<File Id="ca.txt" Name="ca.txt" />
<File Id="co.txt" Name="co.txt" />
<File Id="cs.txt" Name="cs.txt" />
<File Id="cy.txt" Name="cy.txt" />
<File Id="da.txt" Name="da.txt" />
<File Id="de.txt" Name="de.txt" />
<File Id="el.txt" Name="el.txt" />
<File Id="eo.txt" Name="eo.txt" />
<File Id="es.txt" Name="es.txt" />
<File Id="et.txt" Name="et.txt" />
<File Id="eu.txt" Name="eu.txt" />
<File Id="ext.txt" Name="ext.txt" />
<File Id="fa.txt" Name="fa.txt" />
<File Id="fi.txt" Name="fi.txt" />
<File Id="fr.txt" Name="fr.txt" />
<File Id="fur.txt" Name="fur.txt" />
<File Id="fy.txt" Name="fy.txt" />
<File Id="ga.txt" Name="ga.txt" />
<File Id="gl.txt" Name="gl.txt" />
<File Id="gu.txt" Name="gu.txt" />
<File Id="he.txt" Name="he.txt" />
<File Id="hi.txt" Name="hi.txt" />
<File Id="hr.txt" Name="hr.txt" />
<File Id="hu.txt" Name="hu.txt" />
<File Id="hy.txt" Name="hy.txt" />
<File Id="id.txt" Name="id.txt" />
<File Id="io.txt" Name="io.txt" />
<File Id="is.txt" Name="is.txt" />
<File Id="it.txt" Name="it.txt" />
<File Id="ja.txt" Name="ja.txt" />
<File Id="ka.txt" Name="ka.txt" />
<File Id="kaa.txt" Name="kaa.txt" />
<File Id="kab.txt" Name="kab.txt" />
<File Id="kk.txt" Name="kk.txt" />
<File Id="ko.txt" Name="ko.txt" />
<File Id="ku.txt" Name="ku.txt" />
<File Id="ku_ckb.txt" Name="ku-ckb.txt" />
<File Id="ky.txt" Name="ky.txt" />
<File Id="lij.txt" Name="lij.txt" />
<File Id="lt.txt" Name="lt.txt" />
<File Id="lv.txt" Name="lv.txt" />
<File Id="mk.txt" Name="mk.txt" />
<File Id="mn.txt" Name="mn.txt" />
<File Id="mng.txt" Name="mng.txt" />
<File Id="mng2.txt" Name="mng2.txt" />
<File Id="mr.txt" Name="mr.txt" />
<File Id="ms.txt" Name="ms.txt" />
<File Id="ne.txt" Name="ne.txt" />
<File Id="nl.txt" Name="nl.txt" />
<File Id="nb.txt" Name="nb.txt" />
<File Id="nn.txt" Name="nn.txt" />
<File Id="pa_in.txt" Name="pa-in.txt" />
<File Id="pl.txt" Name="pl.txt" />
<File Id="ps.txt" Name="ps.txt" />
<File Id="pt.txt" Name="pt.txt" />
<File Id="pt_br.txt" Name="pt-br.txt" />
<File Id="ro.txt" Name="ro.txt" />
<File Id="ru.txt" Name="ru.txt" />
<File Id="sa.txt" Name="sa.txt" />
<File Id="si.txt" Name="si.txt" />
<File Id="sk.txt" Name="sk.txt" />
<File Id="sl.txt" Name="sl.txt" />
<File Id="sq.txt" Name="sq.txt" />
<File Id="sr_spl.txt" Name="sr-spl.txt" />
<File Id="sr_spc.txt" Name="sr-spc.txt" />
<File Id="sv.txt" Name="sv.txt" />
<File Id="ta.txt" Name="ta.txt" />
<File Id="th.txt" Name="th.txt" />
<File Id="tr.txt" Name="tr.txt" />
<File Id="tt.txt" Name="tt.txt" />
<File Id="ug.txt" Name="ug.txt" />
<File Id="uk.txt" Name="uk.txt" />
<File Id="uz.txt" Name="uz.txt" />
<File Id="va.txt" Name="va.txt" />
<File Id="vi.txt" Name="vi.txt" />
<File Id="yo.txt" Name="yo.txt" />
<File Id="zh_cn.txt" Name="zh-cn.txt" />
<File Id="zh_tw.txt" Name="zh-tw.txt" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="PMenu" LongName="Programs">
<Directory Id="PMenu" Name="7zip" LongName="7-Zip" />
</Directory>
</Directory>
<Feature Id="Complete" Title="7-Zip" Description="The complete package."
Display="expand" Level="1" ConfigurableDirectory="INSTALLDIR"
Absent="disallow" AllowAdvertise="no" >
<Feature Id="Program" Title="Program files" Description="Program files." Level="1"
Absent="disallow" AllowAdvertise="no">
<ComponentRef Id="Fm" />
<ComponentRef Id="ShellExt" />
<?if $(var.MyCPU) = "x64" ?>
<ComponentRef Id="ShellExt32" />
<?endif ?>
<ComponentRef Id="CmdLine" />
<ComponentRef Id="Gui" />
<ComponentRef Id="GuiSfx" />
<ComponentRef Id="ConSfx" />
<ComponentRef Id="Formats" />
<ComponentRef Id="Docs" />
<ComponentRef Id="Help" />
<ComponentRef Id="InstallRegCU" />
<ComponentRef Id="InstallRegLM" />
<ComponentRef Id="InstallRegWild" />
<ComponentRef Id="InstallRegDirectory" />
<ComponentRef Id="InstallRegDirDD" />
<ComponentRef Id="InstallRegDriveDD" />
<ComponentRef Id="InstallRegApproved" />
<ComponentRef Id="InstallRegAppPath" />
<ComponentRef Id="InstallRegFolder" />
</Feature>
<Feature Id="LanguageFiles" Title="Localization files" Description="Localization files for 71 languages."
Level="1" AllowAdvertise="no">
<ComponentRef Id="Lang" />
</Feature>
</Feature>
<UIRef Id="WixUI" />
<!-- Install Sequences -->
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallValidate" />
</InstallExecuteSequence>
</Product>
</Wix>

View File

@@ -1,90 +1,90 @@
7-Zip source code
~~~~~~~~~~~~~~~~~
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7-Zip Copyright (C) 1999-2019 Igor Pavlov.
The licenses for files are:
1) CPP/7zip/Compress/Rar* files: the "GNU LGPL" with "unRAR license restriction"
2) CPP/7zip/Compress/LzfseDecoder.cpp: the "BSD 3-clause License"
3) Some files are "public domain" files, if "public domain" status is stated in source file.
4) the "GNU LGPL" for all other files. If there is no license information in
some source file, that file is under the "GNU LGPL".
The "GNU LGPL" with "unRAR license restriction" means that you must follow both
"GNU LGPL" rules and "unRAR license restriction" rules.
GNU LGPL information
--------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
BSD 3-clause License
--------------------
The "BSD 3-clause License" is used for the code in LzfseDecoder.cpp that implements LZFSE data decompression.
That code was derived from the code in the "LZFSE compression library" developed by Apple Inc,
that also uses the "BSD 3-clause License":
----
Copyright (c) 2015-2016, Apple Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder(s) nor the names of any contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----
unRAR license restriction
-------------------------
The decompression engine for RAR archives was developed using source
code of unRAR program.
All copyrights to original unRAR code are owned by Alexander Roshal.
The license for original unRAR code has the following restriction:
The unRAR sources cannot be used to re-create the RAR compression algorithm,
which is proprietary. Distribution of modified unRAR sources in separate form
or as a part of other software is permitted, provided that it is clearly
stated in the documentation and source comments that the code may
not be used to develop a RAR (WinRAR) compatible archiver.
--
Igor Pavlov
7-Zip source code
~~~~~~~~~~~~~~~~~
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7-Zip Copyright (C) 1999-2019 Igor Pavlov.
The licenses for files are:
1) CPP/7zip/Compress/Rar* files: the "GNU LGPL" with "unRAR license restriction"
2) CPP/7zip/Compress/LzfseDecoder.cpp: the "BSD 3-clause License"
3) Some files are "public domain" files, if "public domain" status is stated in source file.
4) the "GNU LGPL" for all other files. If there is no license information in
some source file, that file is under the "GNU LGPL".
The "GNU LGPL" with "unRAR license restriction" means that you must follow both
"GNU LGPL" rules and "unRAR license restriction" rules.
GNU LGPL information
--------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
BSD 3-clause License
--------------------
The "BSD 3-clause License" is used for the code in LzfseDecoder.cpp that implements LZFSE data decompression.
That code was derived from the code in the "LZFSE compression library" developed by Apple Inc,
that also uses the "BSD 3-clause License":
----
Copyright (c) 2015-2016, Apple Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder(s) nor the names of any contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----
unRAR license restriction
-------------------------
The decompression engine for RAR archives was developed using source
code of unRAR program.
All copyrights to original unRAR code are owned by Alexander Roshal.
The license for original unRAR code has the following restriction:
The unRAR sources cannot be used to re-create the RAR compression algorithm,
which is proprietary. Distribution of modified unRAR sources in separate form
or as a part of other software is permitted, provided that it is clearly
stated in the documentation and source comments that the code may
not be used to develop a RAR (WinRAR) compatible archiver.
--
Igor Pavlov

View File

@@ -1,173 +1,173 @@
7-Zip method IDs for 7z and xz archives
---------------------------------------
Version: 18.06
Date: 2018-06-30
Each compression or crypto method in 7z is associated with unique binary value (ID).
The length of ID in bytes is arbitrary but it can not exceed 63 bits (8 bytes).
xz and 7z formats use same ID map.
If you want to add some new ID, you have two ways:
1) Write request for allocating IDs to 7-Zip developers.
2) Generate 8-bytes ID:
3F ZZ ZZ ZZ ZZ ZZ MM MM
3F - Prefix for random IDs (1 byte)
ZZ ZZ ZZ ZZ ZZ - Developer ID (5 bytes). Use real random bytes.
MM MM - Method ID (2 bytes)
You can notify 7-Zip developers about your Developer ID / Method ID.
Note: Use new ID, if old codec can not decode data encoded with new version.
List of defined IDs
-------------------
00 - Copy
03 - Delta
04 - BCJ (x86)
05 - PPC (big-endian)
06 - IA64
07 - ARM (little-endian)
08 - ARMT (little-endian)
09 - SPARC
21 - LZMA2
02.. - Common
03 [Swap]
- 2 Swap2
- 4 Swap4
03.. - 7z
01 -
01 - LZMA
03 - [Branch Codecs]
01 - [x86 Codecs]
03 - BCJ
1B - BCJ2 (4 packed streams)
02 -
05 - PPC (big-endian)
03 -
01 - Alpha
04 -
01 - IA64
05 -
01 - ARM (little-endian)
06 -
05 - M68 (big-endian)
07 -
01 - ARMT (little-endian)
08 -
05 - SPARC
04 -
01 - PPMD
7F -
01 - experimental method.
04.. - Misc codecs
00 - Reserved
01 - [Zip]
00 - Copy (not used. Use {00} instead)
01 - Shrink
06 - Implode
08 - Deflate
09 - Deflate64
0A - Imploding
0C - BZip2 (not used. Use {040202} instead)
0E - LZMA (LZMA-zip)
5F - xz
60 - Jpeg
61 - WavPack
62 - PPMd (PPMd-zip)
63 - wzAES
02 -
02 - BZip2
03 - [Rar]
01 - Rar1
02 - Rar2
03 - Rar3
05 - Rar5
04 - [Arj]
01 - Arj(1,2,3)
02 - Arj4
05 - [Z]
06 - [Lzh]
07 - Reserved for 7z
08 - [Cab]
09 - [NSIS]
01 - DeflateNSIS
02 - BZip2NSIS
F7 - External codecs (that are not included to 7-Zip)
0x xx - reserved
10 xx - reserved (LZHAM)
01 - LZHAM
11 xx - reserved (Tino Reichardt)
01 - ZSTD
02 - BROTLI
04 - LZ4
05 - LZ5
06 - LIZARD
12 xx - reserverd (Denis Anisimov)
01 - WavPack2
FE - eSplitter
FF - RawSplitter
06.. - Crypto
F0 - Ciphers without hashing algo
01 - [AES]
0x - AES-128
4x - AES-192
8x - AES-256
Cx - AES
x0 - ECB
x1 - CBC
x2 - CFB
x3 - OFB
x4 - CTR
F1 - Combine Ciphers
01 - [Zip]
01 - ZipCrypto (Main Zip crypto algo)
03 - [RAR]
02 -
03 - Rar29AES (AES-128 + modified SHA-1)
07 - [7z]
01 - 7zAES (AES-256 + SHA-256)
---
End of document
7-Zip method IDs for 7z and xz archives
---------------------------------------
Version: 18.06
Date: 2018-06-30
Each compression or crypto method in 7z is associated with unique binary value (ID).
The length of ID in bytes is arbitrary but it can not exceed 63 bits (8 bytes).
xz and 7z formats use same ID map.
If you want to add some new ID, you have two ways:
1) Write request for allocating IDs to 7-Zip developers.
2) Generate 8-bytes ID:
3F ZZ ZZ ZZ ZZ ZZ MM MM
3F - Prefix for random IDs (1 byte)
ZZ ZZ ZZ ZZ ZZ - Developer ID (5 bytes). Use real random bytes.
MM MM - Method ID (2 bytes)
You can notify 7-Zip developers about your Developer ID / Method ID.
Note: Use new ID, if old codec can not decode data encoded with new version.
List of defined IDs
-------------------
00 - Copy
03 - Delta
04 - BCJ (x86)
05 - PPC (big-endian)
06 - IA64
07 - ARM (little-endian)
08 - ARMT (little-endian)
09 - SPARC
21 - LZMA2
02.. - Common
03 [Swap]
- 2 Swap2
- 4 Swap4
03.. - 7z
01 -
01 - LZMA
03 - [Branch Codecs]
01 - [x86 Codecs]
03 - BCJ
1B - BCJ2 (4 packed streams)
02 -
05 - PPC (big-endian)
03 -
01 - Alpha
04 -
01 - IA64
05 -
01 - ARM (little-endian)
06 -
05 - M68 (big-endian)
07 -
01 - ARMT (little-endian)
08 -
05 - SPARC
04 -
01 - PPMD
7F -
01 - experimental method.
04.. - Misc codecs
00 - Reserved
01 - [Zip]
00 - Copy (not used. Use {00} instead)
01 - Shrink
06 - Implode
08 - Deflate
09 - Deflate64
0A - Imploding
0C - BZip2 (not used. Use {040202} instead)
0E - LZMA (LZMA-zip)
5F - xz
60 - Jpeg
61 - WavPack
62 - PPMd (PPMd-zip)
63 - wzAES
02 -
02 - BZip2
03 - [Rar]
01 - Rar1
02 - Rar2
03 - Rar3
05 - Rar5
04 - [Arj]
01 - Arj(1,2,3)
02 - Arj4
05 - [Z]
06 - [Lzh]
07 - Reserved for 7z
08 - [Cab]
09 - [NSIS]
01 - DeflateNSIS
02 - BZip2NSIS
F7 - External codecs (that are not included to 7-Zip)
0x xx - reserved
10 xx - reserved (LZHAM)
01 - LZHAM
11 xx - reserved (Tino Reichardt)
01 - ZSTD
02 - BROTLI
04 - LZ4
05 - LZ5
06 - LIZARD
12 xx - reserverd (Denis Anisimov)
01 - WavPack2
FE - eSplitter
FF - RawSplitter
06.. - Crypto
F0 - Ciphers without hashing algo
01 - [AES]
0x - AES-128
4x - AES-192
8x - AES-256
Cx - AES
x0 - ECB
x1 - CBC
x2 - CFB
x3 - OFB
x4 - CTR
F1 - Combine Ciphers
01 - [Zip]
01 - ZipCrypto (Main Zip crypto algo)
03 - [RAR]
02 -
03 - Rar29AES (AES-128 + modified SHA-1)
07 - [7z]
01 - 7zAES (AES-256 + SHA-256)
---
End of document

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,328 +1,328 @@
LZMA compression
----------------
Version: 9.35
This file describes LZMA encoding and decoding functions written in C language.
LZMA is an improved version of famous LZ77 compression algorithm.
It was improved in way of maximum increasing of compression ratio,
keeping high decompression speed and low memory requirements for
decompressing.
Note: you can read also LZMA Specification (lzma-specification.txt from LZMA SDK)
Also you can look source code for LZMA encoding and decoding:
C/Util/Lzma/LzmaUtil.c
LZMA compressed file format
---------------------------
Offset Size Description
0 1 Special LZMA properties (lc,lp, pb in encoded form)
1 4 Dictionary size (little endian)
5 8 Uncompressed size (little endian). -1 means unknown size
13 Compressed data
ANSI-C LZMA Decoder
~~~~~~~~~~~~~~~~~~~
Please note that interfaces for ANSI-C code were changed in LZMA SDK 4.58.
If you want to use old interfaces you can download previous version of LZMA SDK
from sourceforge.net site.
To use ANSI-C LZMA Decoder you need the following files:
1) LzmaDec.h + LzmaDec.c + 7zTypes.h + Precomp.h + Compiler.h
Look example code:
C/Util/Lzma/LzmaUtil.c
Memory requirements for LZMA decoding
-------------------------------------
Stack usage of LZMA decoding function for local variables is not
larger than 200-400 bytes.
LZMA Decoder uses dictionary buffer and internal state structure.
Internal state structure consumes
state_size = (4 + (1.5 << (lc + lp))) KB
by default (lc=3, lp=0), state_size = 16 KB.
How To decompress data
----------------------
LZMA Decoder (ANSI-C version) now supports 2 interfaces:
1) Single-call Decompressing
2) Multi-call State Decompressing (zlib-like interface)
You must use external allocator:
Example:
void *SzAlloc(void *p, size_t size) { p = p; return malloc(size); }
void SzFree(void *p, void *address) { p = p; free(address); }
ISzAlloc alloc = { SzAlloc, SzFree };
You can use p = p; operator to disable compiler warnings.
Single-call Decompressing
-------------------------
When to use: RAM->RAM decompressing
Compile files: LzmaDec.h + LzmaDec.c + 7zTypes.h
Compile defines: no defines
Memory Requirements:
- Input buffer: compressed size
- Output buffer: uncompressed size
- LZMA Internal Structures: state_size (16 KB for default settings)
Interface:
int LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
ELzmaStatus *status, ISzAlloc *alloc);
In:
dest - output data
destLen - output data size
src - input data
srcLen - input data size
propData - LZMA properties (5 bytes)
propSize - size of propData buffer (5 bytes)
finishMode - It has meaning only if the decoding reaches output limit (*destLen).
LZMA_FINISH_ANY - Decode just destLen bytes.
LZMA_FINISH_END - Stream must be finished after (*destLen).
You can use LZMA_FINISH_END, when you know that
current output buffer covers last bytes of stream.
alloc - Memory allocator.
Out:
destLen - processed output size
srcLen - processed input size
Output:
SZ_OK
status:
LZMA_STATUS_FINISHED_WITH_MARK
LZMA_STATUS_NOT_FINISHED
LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
SZ_ERROR_DATA - Data error
SZ_ERROR_MEM - Memory allocation error
SZ_ERROR_UNSUPPORTED - Unsupported properties
SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
If LZMA decoder sees end_marker before reaching output limit, it returns OK result,
and output value of destLen will be less than output buffer size limit.
You can use multiple checks to test data integrity after full decompression:
1) Check Result and "status" variable.
2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize.
3) Check that output(srcLen) = compressedSize, if you know real compressedSize.
You must use correct finish mode in that case. */
Multi-call State Decompressing (zlib-like interface)
----------------------------------------------------
When to use: file->file decompressing
Compile files: LzmaDec.h + LzmaDec.c + 7zTypes.h
Memory Requirements:
- Buffer for input stream: any size (for example, 16 KB)
- Buffer for output stream: any size (for example, 16 KB)
- LZMA Internal Structures: state_size (16 KB for default settings)
- LZMA dictionary (dictionary size is encoded in LZMA properties header)
1) read LZMA properties (5 bytes) and uncompressed size (8 bytes, little-endian) to header:
unsigned char header[LZMA_PROPS_SIZE + 8];
ReadFile(inFile, header, sizeof(header)
2) Allocate CLzmaDec structures (state + dictionary) using LZMA properties
CLzmaDec state;
LzmaDec_Constr(&state);
res = LzmaDec_Allocate(&state, header, LZMA_PROPS_SIZE, &g_Alloc);
if (res != SZ_OK)
return res;
3) Init LzmaDec structure before any new LZMA stream. And call LzmaDec_DecodeToBuf in loop
LzmaDec_Init(&state);
for (;;)
{
...
int res = LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen,
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode);
...
}
4) Free all allocated structures
LzmaDec_Free(&state, &g_Alloc);
Look example code:
C/Util/Lzma/LzmaUtil.c
How To compress data
--------------------
Compile files:
7zTypes.h
Threads.h
LzmaEnc.h
LzmaEnc.c
LzFind.h
LzFind.c
LzFindMt.h
LzFindMt.c
LzHash.h
Memory Requirements:
- (dictSize * 11.5 + 6 MB) + state_size
Lzma Encoder can use two memory allocators:
1) alloc - for small arrays.
2) allocBig - for big arrays.
For example, you can use Large RAM Pages (2 MB) in allocBig allocator for
better compression speed. Note that Windows has bad implementation for
Large RAM Pages.
It's OK to use same allocator for alloc and allocBig.
Single-call Compression with callbacks
--------------------------------------
Look example code:
C/Util/Lzma/LzmaUtil.c
When to use: file->file compressing
1) you must implement callback structures for interfaces:
ISeqInStream
ISeqOutStream
ICompressProgress
ISzAlloc
static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); }
static void SzFree(void *p, void *address) { p = p; MyFree(address); }
static ISzAlloc g_Alloc = { SzAlloc, SzFree };
CFileSeqInStream inStream;
CFileSeqOutStream outStream;
inStream.funcTable.Read = MyRead;
inStream.file = inFile;
outStream.funcTable.Write = MyWrite;
outStream.file = outFile;
2) Create CLzmaEncHandle object;
CLzmaEncHandle enc;
enc = LzmaEnc_Create(&g_Alloc);
if (enc == 0)
return SZ_ERROR_MEM;
3) initialize CLzmaEncProps properties;
LzmaEncProps_Init(&props);
Then you can change some properties in that structure.
4) Send LZMA properties to LZMA Encoder
res = LzmaEnc_SetProps(enc, &props);
5) Write encoded properties to header
Byte header[LZMA_PROPS_SIZE + 8];
size_t headerSize = LZMA_PROPS_SIZE;
UInt64 fileSize;
int i;
res = LzmaEnc_WriteProperties(enc, header, &headerSize);
fileSize = MyGetFileLength(inFile);
for (i = 0; i < 8; i++)
header[headerSize++] = (Byte)(fileSize >> (8 * i));
MyWriteFileAndCheck(outFile, header, headerSize)
6) Call encoding function:
res = LzmaEnc_Encode(enc, &outStream.funcTable, &inStream.funcTable,
NULL, &g_Alloc, &g_Alloc);
7) Destroy LZMA Encoder Object
LzmaEnc_Destroy(enc, &g_Alloc, &g_Alloc);
If callback function return some error code, LzmaEnc_Encode also returns that code
or it can return the code like SZ_ERROR_READ, SZ_ERROR_WRITE or SZ_ERROR_PROGRESS.
Single-call RAM->RAM Compression
--------------------------------
Single-call RAM->RAM Compression is similar to Compression with callbacks,
but you provide pointers to buffers instead of pointers to stream callbacks:
SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig);
Return code:
SZ_OK - OK
SZ_ERROR_MEM - Memory allocation error
SZ_ERROR_PARAM - Incorrect paramater
SZ_ERROR_OUTPUT_EOF - output buffer overflow
SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version)
Defines
-------
_LZMA_SIZE_OPT - Enable some optimizations in LZMA Decoder to get smaller executable code.
_LZMA_PROB32 - It can increase the speed on some 32-bit CPUs, but memory usage for
some structures will be doubled in that case.
_LZMA_UINT32_IS_ULONG - Define it if int is 16-bit on your compiler and long is 32-bit.
_LZMA_NO_SYSTEM_SIZE_T - Define it if you don't want to use size_t type.
_7ZIP_PPMD_SUPPPORT - Define it if you don't want to support PPMD method in AMSI-C .7z decoder.
C++ LZMA Encoder/Decoder
~~~~~~~~~~~~~~~~~~~~~~~~
C++ LZMA code use COM-like interfaces. So if you want to use it,
you can study basics of COM/OLE.
C++ LZMA code is just wrapper over ANSI-C code.
C++ Notes
~~~~~~~~~~~~~~~~~~~~~~~~
If you use some C++ code folders in 7-Zip (for example, C++ code for .7z handling),
you must check that you correctly work with "new" operator.
7-Zip can be compiled with MSVC 6.0 that doesn't throw "exception" from "new" operator.
So 7-Zip uses "CPP\Common\NewHandler.cpp" that redefines "new" operator:
operator new(size_t size)
{
void *p = ::malloc(size);
if (p == 0)
throw CNewException();
return p;
}
If you use MSCV that throws exception for "new" operator, you can compile without
"NewHandler.cpp". So standard exception will be used. Actually some code of
7-Zip catches any exception in internal code and converts it to HRESULT code.
So you don't need to catch CNewException, if you call COM interfaces of 7-Zip.
---
http://www.7-zip.org
http://www.7-zip.org/sdk.html
http://www.7-zip.org/support.html
LZMA compression
----------------
Version: 9.35
This file describes LZMA encoding and decoding functions written in C language.
LZMA is an improved version of famous LZ77 compression algorithm.
It was improved in way of maximum increasing of compression ratio,
keeping high decompression speed and low memory requirements for
decompressing.
Note: you can read also LZMA Specification (lzma-specification.txt from LZMA SDK)
Also you can look source code for LZMA encoding and decoding:
C/Util/Lzma/LzmaUtil.c
LZMA compressed file format
---------------------------
Offset Size Description
0 1 Special LZMA properties (lc,lp, pb in encoded form)
1 4 Dictionary size (little endian)
5 8 Uncompressed size (little endian). -1 means unknown size
13 Compressed data
ANSI-C LZMA Decoder
~~~~~~~~~~~~~~~~~~~
Please note that interfaces for ANSI-C code were changed in LZMA SDK 4.58.
If you want to use old interfaces you can download previous version of LZMA SDK
from sourceforge.net site.
To use ANSI-C LZMA Decoder you need the following files:
1) LzmaDec.h + LzmaDec.c + 7zTypes.h + Precomp.h + Compiler.h
Look example code:
C/Util/Lzma/LzmaUtil.c
Memory requirements for LZMA decoding
-------------------------------------
Stack usage of LZMA decoding function for local variables is not
larger than 200-400 bytes.
LZMA Decoder uses dictionary buffer and internal state structure.
Internal state structure consumes
state_size = (4 + (1.5 << (lc + lp))) KB
by default (lc=3, lp=0), state_size = 16 KB.
How To decompress data
----------------------
LZMA Decoder (ANSI-C version) now supports 2 interfaces:
1) Single-call Decompressing
2) Multi-call State Decompressing (zlib-like interface)
You must use external allocator:
Example:
void *SzAlloc(void *p, size_t size) { p = p; return malloc(size); }
void SzFree(void *p, void *address) { p = p; free(address); }
ISzAlloc alloc = { SzAlloc, SzFree };
You can use p = p; operator to disable compiler warnings.
Single-call Decompressing
-------------------------
When to use: RAM->RAM decompressing
Compile files: LzmaDec.h + LzmaDec.c + 7zTypes.h
Compile defines: no defines
Memory Requirements:
- Input buffer: compressed size
- Output buffer: uncompressed size
- LZMA Internal Structures: state_size (16 KB for default settings)
Interface:
int LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
ELzmaStatus *status, ISzAlloc *alloc);
In:
dest - output data
destLen - output data size
src - input data
srcLen - input data size
propData - LZMA properties (5 bytes)
propSize - size of propData buffer (5 bytes)
finishMode - It has meaning only if the decoding reaches output limit (*destLen).
LZMA_FINISH_ANY - Decode just destLen bytes.
LZMA_FINISH_END - Stream must be finished after (*destLen).
You can use LZMA_FINISH_END, when you know that
current output buffer covers last bytes of stream.
alloc - Memory allocator.
Out:
destLen - processed output size
srcLen - processed input size
Output:
SZ_OK
status:
LZMA_STATUS_FINISHED_WITH_MARK
LZMA_STATUS_NOT_FINISHED
LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
SZ_ERROR_DATA - Data error
SZ_ERROR_MEM - Memory allocation error
SZ_ERROR_UNSUPPORTED - Unsupported properties
SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
If LZMA decoder sees end_marker before reaching output limit, it returns OK result,
and output value of destLen will be less than output buffer size limit.
You can use multiple checks to test data integrity after full decompression:
1) Check Result and "status" variable.
2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize.
3) Check that output(srcLen) = compressedSize, if you know real compressedSize.
You must use correct finish mode in that case. */
Multi-call State Decompressing (zlib-like interface)
----------------------------------------------------
When to use: file->file decompressing
Compile files: LzmaDec.h + LzmaDec.c + 7zTypes.h
Memory Requirements:
- Buffer for input stream: any size (for example, 16 KB)
- Buffer for output stream: any size (for example, 16 KB)
- LZMA Internal Structures: state_size (16 KB for default settings)
- LZMA dictionary (dictionary size is encoded in LZMA properties header)
1) read LZMA properties (5 bytes) and uncompressed size (8 bytes, little-endian) to header:
unsigned char header[LZMA_PROPS_SIZE + 8];
ReadFile(inFile, header, sizeof(header)
2) Allocate CLzmaDec structures (state + dictionary) using LZMA properties
CLzmaDec state;
LzmaDec_Constr(&state);
res = LzmaDec_Allocate(&state, header, LZMA_PROPS_SIZE, &g_Alloc);
if (res != SZ_OK)
return res;
3) Init LzmaDec structure before any new LZMA stream. And call LzmaDec_DecodeToBuf in loop
LzmaDec_Init(&state);
for (;;)
{
...
int res = LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen,
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode);
...
}
4) Free all allocated structures
LzmaDec_Free(&state, &g_Alloc);
Look example code:
C/Util/Lzma/LzmaUtil.c
How To compress data
--------------------
Compile files:
7zTypes.h
Threads.h
LzmaEnc.h
LzmaEnc.c
LzFind.h
LzFind.c
LzFindMt.h
LzFindMt.c
LzHash.h
Memory Requirements:
- (dictSize * 11.5 + 6 MB) + state_size
Lzma Encoder can use two memory allocators:
1) alloc - for small arrays.
2) allocBig - for big arrays.
For example, you can use Large RAM Pages (2 MB) in allocBig allocator for
better compression speed. Note that Windows has bad implementation for
Large RAM Pages.
It's OK to use same allocator for alloc and allocBig.
Single-call Compression with callbacks
--------------------------------------
Look example code:
C/Util/Lzma/LzmaUtil.c
When to use: file->file compressing
1) you must implement callback structures for interfaces:
ISeqInStream
ISeqOutStream
ICompressProgress
ISzAlloc
static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); }
static void SzFree(void *p, void *address) { p = p; MyFree(address); }
static ISzAlloc g_Alloc = { SzAlloc, SzFree };
CFileSeqInStream inStream;
CFileSeqOutStream outStream;
inStream.funcTable.Read = MyRead;
inStream.file = inFile;
outStream.funcTable.Write = MyWrite;
outStream.file = outFile;
2) Create CLzmaEncHandle object;
CLzmaEncHandle enc;
enc = LzmaEnc_Create(&g_Alloc);
if (enc == 0)
return SZ_ERROR_MEM;
3) initialize CLzmaEncProps properties;
LzmaEncProps_Init(&props);
Then you can change some properties in that structure.
4) Send LZMA properties to LZMA Encoder
res = LzmaEnc_SetProps(enc, &props);
5) Write encoded properties to header
Byte header[LZMA_PROPS_SIZE + 8];
size_t headerSize = LZMA_PROPS_SIZE;
UInt64 fileSize;
int i;
res = LzmaEnc_WriteProperties(enc, header, &headerSize);
fileSize = MyGetFileLength(inFile);
for (i = 0; i < 8; i++)
header[headerSize++] = (Byte)(fileSize >> (8 * i));
MyWriteFileAndCheck(outFile, header, headerSize)
6) Call encoding function:
res = LzmaEnc_Encode(enc, &outStream.funcTable, &inStream.funcTable,
NULL, &g_Alloc, &g_Alloc);
7) Destroy LZMA Encoder Object
LzmaEnc_Destroy(enc, &g_Alloc, &g_Alloc);
If callback function return some error code, LzmaEnc_Encode also returns that code
or it can return the code like SZ_ERROR_READ, SZ_ERROR_WRITE or SZ_ERROR_PROGRESS.
Single-call RAM->RAM Compression
--------------------------------
Single-call RAM->RAM Compression is similar to Compression with callbacks,
but you provide pointers to buffers instead of pointers to stream callbacks:
SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig);
Return code:
SZ_OK - OK
SZ_ERROR_MEM - Memory allocation error
SZ_ERROR_PARAM - Incorrect paramater
SZ_ERROR_OUTPUT_EOF - output buffer overflow
SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version)
Defines
-------
_LZMA_SIZE_OPT - Enable some optimizations in LZMA Decoder to get smaller executable code.
_LZMA_PROB32 - It can increase the speed on some 32-bit CPUs, but memory usage for
some structures will be doubled in that case.
_LZMA_UINT32_IS_ULONG - Define it if int is 16-bit on your compiler and long is 32-bit.
_LZMA_NO_SYSTEM_SIZE_T - Define it if you don't want to use size_t type.
_7ZIP_PPMD_SUPPPORT - Define it if you don't want to support PPMD method in AMSI-C .7z decoder.
C++ LZMA Encoder/Decoder
~~~~~~~~~~~~~~~~~~~~~~~~
C++ LZMA code use COM-like interfaces. So if you want to use it,
you can study basics of COM/OLE.
C++ LZMA code is just wrapper over ANSI-C code.
C++ Notes
~~~~~~~~~~~~~~~~~~~~~~~~
If you use some C++ code folders in 7-Zip (for example, C++ code for .7z handling),
you must check that you correctly work with "new" operator.
7-Zip can be compiled with MSVC 6.0 that doesn't throw "exception" from "new" operator.
So 7-Zip uses "CPP\Common\NewHandler.cpp" that redefines "new" operator:
operator new(size_t size)
{
void *p = ::malloc(size);
if (p == 0)
throw CNewException();
return p;
}
If you use MSCV that throws exception for "new" operator, you can compile without
"NewHandler.cpp". So standard exception will be used. Actually some code of
7-Zip catches any exception in internal code and converts it to HRESULT code.
So you don't need to catch CNewException, if you call COM interfaces of 7-Zip.
---
http://www.7-zip.org
http://www.7-zip.org/sdk.html
http://www.7-zip.org/support.html

View File

@@ -1,180 +1,180 @@
7-Zip 19.00 Sources
-------------------
7-Zip is a file archiver for Windows.
7-Zip Copyright (C) 1999-2019 Igor Pavlov.
License Info
------------
7-Zip is free software distributed under the GNU LGPL
(except for unRar code).
read License.txt for more infomation about license.
Notes about unRAR license:
Please check main restriction from unRar license:
2. The unRAR sources may be used in any software to handle RAR
archives without limitations free of charge, but cannot be used
to re-create the RAR compression algorithm, which is proprietary.
Distribution of modified unRAR sources in separate form or as a
part of other software is permitted, provided that it is clearly
stated in the documentation and source comments that the code may
not be used to develop a RAR (WinRAR) compatible archiver.
In brief it means:
1) You can compile and use compiled files under GNU LGPL rules, since
unRAR license almost has no restrictions for compiled files.
You can link these compiled files to LGPL programs.
2) You can fix bugs in source code and use compiled fixed version.
3) You can not use unRAR sources to re-create the RAR compression algorithm.
LZMA SDK
--------
This package also contains some files from LZMA SDK
You can download LZMA SDK from:
http://www.7-zip.org/sdk.html
LZMA SDK is written and placed in the public domain by Igor Pavlov.
How to compile
--------------
To compile the sources to Windows binaries you need Visual Studio compiler and/or Windows SDK.
You can use latest Windows Studio 2017 to compile binaries for x86, x64 and arm64 platforms.
Also you can use old compilers for some platforms:
x86 : Visual C++ 6.0 with Platform SDK
x64 : Windows Server 2003 R2 Platform SDK
arm64 : Windows Studio 2017
arm : Windows Studio 2017
ia64 (itanium) : Windows Server 2003 R2 Platform SDK
arm for Windows CE : Standard SDK for Windows CE 5.0
If you use MSVC6, specify also Platform SDK directories at top of directories lists:
Tools / Options / Directories
- Include files
- Library files
Also you need Microsoft Macro Assembler:
- ml.exe for x86
- ml64.exe for x64
You can use ml.exe from Windows SDK for Windows Vista or some later versions.
There are two ways to compile 7-Zip binaries:
1) via makefile in command line.
2) via dsp file in Visual Studio.
The dsp file compiling can be used for development and debug purposes.
The final 7-Zip binaries are compiled via makefiles, that provide best
optimization options.
How to compile with makefile
----------------------------
Some macronames can be defined for compiling with makefile:
PLATFORM
with possible values: x64, x86, arm64, arm, ia64
OLD_COMPILER
for old VC compiler, like MSCV 6.0.
MY_DYNAMIC_LINK
for dynamic linking to the run-time library (msvcrt.dll).
The default makefile option is static linking to the run-time library.
Compiling under Unix/Linux
--------------------------
Check this site for Posix/Linux version:
http://sourceforge.net/projects/p7zip/
Notes:
------
7-Zip consists of COM modules (DLL files).
But 7-Zip doesn't use standard COM interfaces for creating objects.
Look at
7zip\UI\Client7z folder for example of using DLL files of 7-Zip.
Some DLL files can use other DLL files from 7-Zip.
If you don't like it, you must use standalone version of DLL.
To compile standalone version of DLL you must include all used parts
to project and define some defs.
For example, 7zip\Bundles\Format7z is a standalone version of 7z.dll
that works with 7z format. So you can use such DLL in your project
without additional DLL files.
Description of 7-Zip sources package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DOC Documentation
---
7zFormat.txt - 7z format description
copying.txt - GNU LGPL license
unRarLicense.txt - License for unRAR part of source code
src-history.txt - Sources history
Methods.txt - Compression method IDs
readme.txt - Readme file
lzma.txt - LZMA compression description
7zip.nsi - installer script for NSIS
7zip.wix - installer script for WIX
Asm - Source code in Assembler (optimized code for CRC calculation and Intel-AES encryption)
C - Source code in C
CPP - Source code in C++
Common common files for C++ projects
Windows common files for Windows related code
7zip
Common Common modules for 7-zip
Archive files related to archiving
Bundle Modules that are bundles of other modules (files)
Alone 7za.exe: Standalone version of 7-Zip console that supports only 7z/xz/cab/zip/gzip/bzip2/tar.
Alone7z 7zr.exe: Standalone version of 7-Zip console that supports only 7z (reduced version)
Fm Standalone version of 7-Zip File Manager
Format7z 7za.dll: .7z support
Format7zExtract 7zxa.dll: .7z support, extracting only
Format7zR 7zr.dll: .7z support, reduced version
Format7zExtractR 7zxr.dll: .7z support, reduced version, extracting only
Format7zF 7z.dll: all formats
LzmaCon lzma.exe: LZMA compression/decompression
SFXCon 7zCon.sfx: Console 7z SFX module
SFXWin 7z.sfx: Windows 7z SFX module
SFXSetup 7zS.sfx: Windows 7z SFX module for Installers
Compress files for compression/decompression
Crypto files for encryption / decompression
UI
Agent Intermediary modules for FAR plugin and Explorer plugin
Client7z Test application for 7za.dll
Common Common UI files
Console 7z.exe : Console version
Explorer 7-zip.dll: 7-Zip Shell extension
Far plugin for Far Manager
FileManager 7zFM.exe: 7-Zip File Manager
GUI 7zG.exe: 7-Zip GUI version
---
Igor Pavlov
http://www.7-zip.org
7-Zip 19.00 Sources
-------------------
7-Zip is a file archiver for Windows.
7-Zip Copyright (C) 1999-2019 Igor Pavlov.
License Info
------------
7-Zip is free software distributed under the GNU LGPL
(except for unRar code).
read License.txt for more infomation about license.
Notes about unRAR license:
Please check main restriction from unRar license:
2. The unRAR sources may be used in any software to handle RAR
archives without limitations free of charge, but cannot be used
to re-create the RAR compression algorithm, which is proprietary.
Distribution of modified unRAR sources in separate form or as a
part of other software is permitted, provided that it is clearly
stated in the documentation and source comments that the code may
not be used to develop a RAR (WinRAR) compatible archiver.
In brief it means:
1) You can compile and use compiled files under GNU LGPL rules, since
unRAR license almost has no restrictions for compiled files.
You can link these compiled files to LGPL programs.
2) You can fix bugs in source code and use compiled fixed version.
3) You can not use unRAR sources to re-create the RAR compression algorithm.
LZMA SDK
--------
This package also contains some files from LZMA SDK
You can download LZMA SDK from:
http://www.7-zip.org/sdk.html
LZMA SDK is written and placed in the public domain by Igor Pavlov.
How to compile
--------------
To compile the sources to Windows binaries you need Visual Studio compiler and/or Windows SDK.
You can use latest Windows Studio 2017 to compile binaries for x86, x64 and arm64 platforms.
Also you can use old compilers for some platforms:
x86 : Visual C++ 6.0 with Platform SDK
x64 : Windows Server 2003 R2 Platform SDK
arm64 : Windows Studio 2017
arm : Windows Studio 2017
ia64 (itanium) : Windows Server 2003 R2 Platform SDK
arm for Windows CE : Standard SDK for Windows CE 5.0
If you use MSVC6, specify also Platform SDK directories at top of directories lists:
Tools / Options / Directories
- Include files
- Library files
Also you need Microsoft Macro Assembler:
- ml.exe for x86
- ml64.exe for x64
You can use ml.exe from Windows SDK for Windows Vista or some later versions.
There are two ways to compile 7-Zip binaries:
1) via makefile in command line.
2) via dsp file in Visual Studio.
The dsp file compiling can be used for development and debug purposes.
The final 7-Zip binaries are compiled via makefiles, that provide best
optimization options.
How to compile with makefile
----------------------------
Some macronames can be defined for compiling with makefile:
PLATFORM
with possible values: x64, x86, arm64, arm, ia64
OLD_COMPILER
for old VC compiler, like MSCV 6.0.
MY_DYNAMIC_LINK
for dynamic linking to the run-time library (msvcrt.dll).
The default makefile option is static linking to the run-time library.
Compiling under Unix/Linux
--------------------------
Check this site for Posix/Linux version:
http://sourceforge.net/projects/p7zip/
Notes:
------
7-Zip consists of COM modules (DLL files).
But 7-Zip doesn't use standard COM interfaces for creating objects.
Look at
7zip\UI\Client7z folder for example of using DLL files of 7-Zip.
Some DLL files can use other DLL files from 7-Zip.
If you don't like it, you must use standalone version of DLL.
To compile standalone version of DLL you must include all used parts
to project and define some defs.
For example, 7zip\Bundles\Format7z is a standalone version of 7z.dll
that works with 7z format. So you can use such DLL in your project
without additional DLL files.
Description of 7-Zip sources package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DOC Documentation
---
7zFormat.txt - 7z format description
copying.txt - GNU LGPL license
unRarLicense.txt - License for unRAR part of source code
src-history.txt - Sources history
Methods.txt - Compression method IDs
readme.txt - Readme file
lzma.txt - LZMA compression description
7zip.nsi - installer script for NSIS
7zip.wix - installer script for WIX
Asm - Source code in Assembler (optimized code for CRC calculation and Intel-AES encryption)
C - Source code in C
CPP - Source code in C++
Common common files for C++ projects
Windows common files for Windows related code
7zip
Common Common modules for 7-zip
Archive files related to archiving
Bundle Modules that are bundles of other modules (files)
Alone 7za.exe: Standalone version of 7-Zip console that supports only 7z/xz/cab/zip/gzip/bzip2/tar.
Alone7z 7zr.exe: Standalone version of 7-Zip console that supports only 7z (reduced version)
Fm Standalone version of 7-Zip File Manager
Format7z 7za.dll: .7z support
Format7zExtract 7zxa.dll: .7z support, extracting only
Format7zR 7zr.dll: .7z support, reduced version
Format7zExtractR 7zxr.dll: .7z support, reduced version, extracting only
Format7zF 7z.dll: all formats
LzmaCon lzma.exe: LZMA compression/decompression
SFXCon 7zCon.sfx: Console 7z SFX module
SFXWin 7z.sfx: Windows 7z SFX module
SFXSetup 7zS.sfx: Windows 7z SFX module for Installers
Compress files for compression/decompression
Crypto files for encryption / decompression
UI
Agent Intermediary modules for FAR plugin and Explorer plugin
Client7z Test application for 7za.dll
Common Common UI files
Console 7z.exe : Console version
Explorer 7-zip.dll: 7-Zip Shell extension
Far plugin for Far Manager
FileManager 7zFM.exe: 7-Zip File Manager
GUI 7zG.exe: 7-Zip GUI version
---
Igor Pavlov
http://www.7-zip.org

View File

File diff suppressed because it is too large Load Diff