Annotation of elwix/tools/oldlzma/7zC.txt, revision 1.1
1.1 ! misho 1: 7z ANSI-C Decoder 4.16
! 2: ----------------------
! 3:
! 4: 7z ANSI-C Decoder 4.16 Copyright (C) 1999-2005 Igor Pavlov
! 5:
! 6: 7z ANSI-C provides 7z/LZMA decoding.
! 7: 7z ANSI-C version is simplified version ported from C++ code.
! 8:
! 9: LZMA is default and general compression method of 7z format
! 10: in 7-Zip compression program (www.7-zip.org). LZMA provides high
! 11: compression ratio and very fast decompression.
! 12:
! 13:
! 14: LICENSE
! 15: -------
! 16:
! 17: Read lzma.txt for informaton about license.
! 18:
! 19:
! 20: Files
! 21: ---------------------
! 22:
! 23: 7zAlloc.* - Allocate and Free
! 24: 7zBuffer.* - Buffer structure
! 25: 7zCrc.* - CRC32 code
! 26: 7zDecode.* - Low level memory->memory decoding
! 27: 7zExtract.* - High level stream->memory decoding
! 28: 7zHeader.* - .7z format constants
! 29: 7zIn.* - .7z archive opening
! 30: 7zItem.* - .7z structures
! 31: 7zMain.c - Test application
! 32: 7zMethodID.* - MethodID structure
! 33: 7zTypes.h - Base types and constants
! 34:
! 35:
! 36: How To Use
! 37: ----------
! 38:
! 39: You must download 7-Zip program from www.7-zip.org.
! 40:
! 41: You can create .7z archive with 7z.exe or 7za.exe:
! 42:
! 43: 7za.exe a archive.7z *.htm -r -mx -m0fb=255
! 44:
! 45: If you have big number of files in archive, and you need fast extracting,
! 46: you can use partly-solid archives:
! 47:
! 48: 7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K
! 49:
! 50: In that example 7-Zip will use 512KB solid blocks. So it needs to decompress only
! 51: 512KB for extracting one file from such archive.
! 52:
! 53:
! 54: Limitations of current version of 7z ANSI-C Decoder
! 55: ---------------------------------------------------
! 56:
! 57: - It doesn't support separated "folder" items inside archive.
! 58: But you still can use files that are in subfolders
! 59: - It doesn't support empty files (size = 0) inside archive.
! 60: - It reads only "FileName", "Size", and "CRC" information for each file in archive.
! 61: - It supports only LZMA and Copy (no compression) methods.
! 62: - It converts original UTF-16 Unicode file names to UTF-8 Unicode file names.
! 63:
! 64: These limitations will be fixed in future versions.
! 65:
! 66:
! 67: Using 7z ANSI-C Decoder Test application:
! 68: -----------------------------------------
! 69:
! 70: Usage: 7zDec <command> <archive_name>
! 71:
! 72: <Command>:
! 73: e: Extract files from archive
! 74: l: List contents of archive
! 75: t: Test integrity of archive
! 76:
! 77: Example:
! 78:
! 79: 7zDec l archive.7z
! 80:
! 81: lists contents of archive.7z
! 82:
! 83: 7zDec e archive.7z
! 84:
! 85: extracts files from archive.7z to current folder.
! 86:
! 87:
! 88: How to use .7z Decoder
! 89: ----------------------
! 90:
! 91: .7z Decoder can be compiled in one of two modes:
! 92:
! 93: 1) Default mode. In that mode 7z Decoder will read full compressed
! 94: block to RAM before decompressing.
! 95:
! 96: 2) Mode with defined _LZMA_IN_CB. In that mode 7z Decoder can read
! 97: compressed block by parts. And you can specify desired buffer size.
! 98: So memory requirements can be reduced. But decompressing speed will
! 99: be 5-10% lower and code size is slightly larger.
! 100:
! 101:
! 102: Memory allocation
! 103: ~~~~~~~~~~~~~~~~~
! 104:
! 105: 7z Decoder uses two memory pools:
! 106: 1) Temporary pool
! 107: 2) Main pool
! 108: Such scheme can allow you to avoid fragmentation of alocated blocks.
! 109:
! 110: Steps for using 7z decoder
! 111: --------------------------
! 112:
! 113: Use code at 7zMain.c as example.
! 114:
! 115: 1) Declare variables:
! 116: inStream /* implements ISzInStream interface */
! 117: CArchiveDatabaseEx db; /* 7z archive database structure */
! 118: ISzAlloc allocImp; /* memory functions for main pool */
! 119: ISzAlloc allocTempImp; /* memory functions for temporary pool */
! 120:
! 121: 2) call InitCrcTable(); function to initialize CRC structures.
! 122:
! 123: 3) call SzArDbExInit(&db); function to initialize db structures.
! 124:
! 125: 4) call SzArchiveOpen(inStream, &db, &allocMain, &allocTemp) to open archive
! 126:
! 127: This function opens archive "inStream" and reads headers to "db".
! 128: All items in "db" will be allocated with "allocMain" functions.
! 129: SzArchiveOpen function allocates and frees temporary structures by "allocTemp" functions.
! 130:
! 131: 5) List items or Extract items
! 132:
! 133: Listing code:
! 134: ~~~~~~~~~~~~~
! 135: {
! 136: UInt32 i;
! 137: for (i = 0; i < db.Database.NumFiles; i++)
! 138: {
! 139: CFileItem *f = db.Database.Files + i;
! 140: printf("%10d %s\n", (int)f->Size, f->Name);
! 141: }
! 142: }
! 143:
! 144: Extracting code:
! 145: ~~~~~~~~~~~~~~~~
! 146:
! 147: SZ_RESULT SzExtract(
! 148: ISzInStream *inStream,
! 149: CArchiveDatabaseEx *db,
! 150: UInt32 fileIndex, /* index of file */
! 151: UInt32 *blockIndex, /* index of solid block */
! 152: Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */
! 153: size_t *outBufferSize, /* buffer size for output buffer */
! 154: size_t *offset, /* offset of stream for required file in *outBuffer */
! 155: size_t *outSizeProcessed, /* size of file in *outBuffer */
! 156: ISzAlloc *allocMain,
! 157: ISzAlloc *allocTemp);
! 158:
! 159: If you need to decompress more than one file, you can send these values from preevious call:
! 160: blockIndex,
! 161: outBuffer,
! 162: outBufferSize,
! 163: You can consider "outBuffer" as cache of solid block. If your archive is solid,
! 164: it will increase decompression speed.
! 165:
! 166: After decompressing you must free "outBuffer":
! 167: allocImp.Free(outBuffer);
! 168:
! 169: 6) call SzArDbExFree(&db, allocImp.Free) to free allocated items in "db".
! 170:
! 171:
! 172:
! 173:
! 174: Memory requirements for .7z decoding
! 175: ------------------------------------
! 176:
! 177: Memory usage for Archive openning:
! 178: - Temporary pool:
! 179: - Memory for compressed .7z headers (if _LZMA_IN_CB is not defined)
! 180: - Memory for uncompressed .7z headers
! 181: - some other temporary blocks
! 182: - Main pool:
! 183: - Memory for database:
! 184: Estimated size of one file structures in solid archive:
! 185: - Size (4 or 8 Bytes)
! 186: - CRC32 (4 bytes)
! 187: - Some file information (4 bytes)
! 188: - File Name (variable length) + pointer + allocation structures
! 189:
! 190: Memory usage for archive Decompressing:
! 191: - Temporary pool:
! 192: - Memory for compressed solid block (if _LZMA_IN_CB is not defined)
! 193: - Memory for LZMA decompressing structures
! 194: - Main pool:
! 195: - Memory for decompressed solid block
! 196:
! 197:
! 198: If _LZMA_IN_CB is defined, 7z Decoder will not allocate memory for
! 199: compressed blocks. Instead of this, you must allocate buffer with desired
! 200: size before calling 7z Decoder. Use 7zMain.c as example.
! 201:
! 202:
! 203:
! 204: EXIT codes
! 205: -----------
! 206:
! 207: 7z Decoder functions can return one of the following codes:
! 208:
! 209: #define SZ_OK (0)
! 210: #define SZE_DATA_ERROR (1)
! 211: #define SZE_OUTOFMEMORY (2)
! 212: #define SZE_CRC_ERROR (3)
! 213:
! 214: #define SZE_NOTIMPL (4)
! 215: #define SZE_FAIL (5)
! 216:
! 217: #define SZE_ARCHIVE_ERROR (6)
! 218:
! 219:
! 220:
! 221: LZMA Defines
! 222: ------------
! 223:
! 224: _LZMA_IN_CB - Use special callback mode for input stream to reduce memory requirements
! 225:
! 226: _SZ_FILE_SIZE_64 - define it if you need support for files larger than 4 GB
! 227: _SZ_NO_INT_64 - define it if your compiler doesn't support long long int
! 228:
! 229: _LZMA_PROB32 - it can increase LZMA decompressing speed on some 32-bit CPUs.
! 230:
! 231: _SZ_ONE_DIRECTORY - define it if you want to locate all source files to one direcory
! 232: _SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr.
! 233:
! 234:
! 235: ---
! 236:
! 237: http://www.7-zip.org
! 238: http://www.7-zip.org/support.html
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>