1*f6dc9357SAndroid Build Coastguard Worker7z ANSI-C Decoder 9.35 2*f6dc9357SAndroid Build Coastguard Worker---------------------- 3*f6dc9357SAndroid Build Coastguard Worker 4*f6dc9357SAndroid Build Coastguard Worker7z ANSI-C provides 7z/LZMA decoding. 5*f6dc9357SAndroid Build Coastguard Worker7z ANSI-C version is simplified version ported from C++ code. 6*f6dc9357SAndroid Build Coastguard Worker 7*f6dc9357SAndroid Build Coastguard WorkerLZMA is default and general compression method of 7z format 8*f6dc9357SAndroid Build Coastguard Workerin 7-Zip compression program (www.7-zip.org). LZMA provides high 9*f6dc9357SAndroid Build Coastguard Workercompression ratio and very fast decompression. 10*f6dc9357SAndroid Build Coastguard Worker 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard WorkerLICENSE 13*f6dc9357SAndroid Build Coastguard Worker------- 14*f6dc9357SAndroid Build Coastguard Worker 15*f6dc9357SAndroid Build Coastguard Worker7z ANSI-C Decoder is part of the LZMA SDK. 16*f6dc9357SAndroid Build Coastguard WorkerLZMA SDK is written and placed in the public domain by Igor Pavlov. 17*f6dc9357SAndroid Build Coastguard Worker 18*f6dc9357SAndroid Build Coastguard WorkerFiles 19*f6dc9357SAndroid Build Coastguard Worker--------------------- 20*f6dc9357SAndroid Build Coastguard Worker 21*f6dc9357SAndroid Build Coastguard Worker7zDecode.* - Low level 7z decoding 22*f6dc9357SAndroid Build Coastguard Worker7zExtract.* - High level 7z decoding 23*f6dc9357SAndroid Build Coastguard Worker7zHeader.* - .7z format constants 24*f6dc9357SAndroid Build Coastguard Worker7zIn.* - .7z archive opening 25*f6dc9357SAndroid Build Coastguard Worker7zItem.* - .7z structures 26*f6dc9357SAndroid Build Coastguard Worker7zMain.c - Test application 27*f6dc9357SAndroid Build Coastguard Worker 28*f6dc9357SAndroid Build Coastguard Worker 29*f6dc9357SAndroid Build Coastguard WorkerHow To Use 30*f6dc9357SAndroid Build Coastguard Worker---------- 31*f6dc9357SAndroid Build Coastguard Worker 32*f6dc9357SAndroid Build Coastguard WorkerYou can create .7z archive with 7z.exe, 7za.exe or 7zr.exe: 33*f6dc9357SAndroid Build Coastguard Worker 34*f6dc9357SAndroid Build Coastguard Worker 7z.exe a archive.7z *.htm -r -mx -m0fb=255 35*f6dc9357SAndroid Build Coastguard Worker 36*f6dc9357SAndroid Build Coastguard WorkerIf you have big number of files in archive, and you need fast extracting, 37*f6dc9357SAndroid Build Coastguard Workeryou can use partly-solid archives: 38*f6dc9357SAndroid Build Coastguard Worker 39*f6dc9357SAndroid Build Coastguard Worker 7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K 40*f6dc9357SAndroid Build Coastguard Worker 41*f6dc9357SAndroid Build Coastguard WorkerIn that example 7-Zip will use 512KB solid blocks. So it needs to decompress only 42*f6dc9357SAndroid Build Coastguard Worker512KB for extracting one file from such archive. 43*f6dc9357SAndroid Build Coastguard Worker 44*f6dc9357SAndroid Build Coastguard Worker 45*f6dc9357SAndroid Build Coastguard WorkerLimitations of current version of 7z ANSI-C Decoder 46*f6dc9357SAndroid Build Coastguard Worker--------------------------------------------------- 47*f6dc9357SAndroid Build Coastguard Worker 48*f6dc9357SAndroid Build Coastguard Worker - It reads only "FileName", "Size", "LastWriteTime" and "CRC" information for each file in archive. 49*f6dc9357SAndroid Build Coastguard Worker - It supports only LZMA and Copy (no compression) methods with BCJ or BCJ2 filters. 50*f6dc9357SAndroid Build Coastguard Worker - It converts original UTF-16 Unicode file names to UTF-8 Unicode file names. 51*f6dc9357SAndroid Build Coastguard Worker 52*f6dc9357SAndroid Build Coastguard WorkerThese limitations will be fixed in future versions. 53*f6dc9357SAndroid Build Coastguard Worker 54*f6dc9357SAndroid Build Coastguard Worker 55*f6dc9357SAndroid Build Coastguard WorkerUsing 7z ANSI-C Decoder Test application: 56*f6dc9357SAndroid Build Coastguard Worker----------------------------------------- 57*f6dc9357SAndroid Build Coastguard Worker 58*f6dc9357SAndroid Build Coastguard WorkerUsage: 7zDec <command> <archive_name> 59*f6dc9357SAndroid Build Coastguard Worker 60*f6dc9357SAndroid Build Coastguard Worker<Command>: 61*f6dc9357SAndroid Build Coastguard Worker e: Extract files from archive 62*f6dc9357SAndroid Build Coastguard Worker l: List contents of archive 63*f6dc9357SAndroid Build Coastguard Worker t: Test integrity of archive 64*f6dc9357SAndroid Build Coastguard Worker 65*f6dc9357SAndroid Build Coastguard WorkerExample: 66*f6dc9357SAndroid Build Coastguard Worker 67*f6dc9357SAndroid Build Coastguard Worker 7zDec l archive.7z 68*f6dc9357SAndroid Build Coastguard Worker 69*f6dc9357SAndroid Build Coastguard Workerlists contents of archive.7z 70*f6dc9357SAndroid Build Coastguard Worker 71*f6dc9357SAndroid Build Coastguard Worker 7zDec e archive.7z 72*f6dc9357SAndroid Build Coastguard Worker 73*f6dc9357SAndroid Build Coastguard Workerextracts files from archive.7z to current folder. 74*f6dc9357SAndroid Build Coastguard Worker 75*f6dc9357SAndroid Build Coastguard Worker 76*f6dc9357SAndroid Build Coastguard WorkerHow to use .7z Decoder 77*f6dc9357SAndroid Build Coastguard Worker---------------------- 78*f6dc9357SAndroid Build Coastguard Worker 79*f6dc9357SAndroid Build Coastguard WorkerMemory allocation 80*f6dc9357SAndroid Build Coastguard Worker~~~~~~~~~~~~~~~~~ 81*f6dc9357SAndroid Build Coastguard Worker 82*f6dc9357SAndroid Build Coastguard Worker7z Decoder uses two memory pools: 83*f6dc9357SAndroid Build Coastguard Worker1) Temporary pool 84*f6dc9357SAndroid Build Coastguard Worker2) Main pool 85*f6dc9357SAndroid Build Coastguard WorkerSuch scheme can allow you to avoid fragmentation of allocated blocks. 86*f6dc9357SAndroid Build Coastguard Worker 87*f6dc9357SAndroid Build Coastguard Worker 88*f6dc9357SAndroid Build Coastguard WorkerSteps for using 7z decoder 89*f6dc9357SAndroid Build Coastguard Worker-------------------------- 90*f6dc9357SAndroid Build Coastguard Worker 91*f6dc9357SAndroid Build Coastguard WorkerUse code at 7zMain.c as example. 92*f6dc9357SAndroid Build Coastguard Worker 93*f6dc9357SAndroid Build Coastguard Worker1) Declare variables: 94*f6dc9357SAndroid Build Coastguard Worker inStream /* implements ILookInStream interface */ 95*f6dc9357SAndroid Build Coastguard Worker CSzArEx db; /* 7z archive database structure */ 96*f6dc9357SAndroid Build Coastguard Worker ISzAlloc allocImp; /* memory functions for main pool */ 97*f6dc9357SAndroid Build Coastguard Worker ISzAlloc allocTempImp; /* memory functions for temporary pool */ 98*f6dc9357SAndroid Build Coastguard Worker 99*f6dc9357SAndroid Build Coastguard Worker2) call CrcGenerateTable(); function to initialize CRC structures. 100*f6dc9357SAndroid Build Coastguard Worker 101*f6dc9357SAndroid Build Coastguard Worker3) call SzArEx_Init(&db); function to initialize db structures. 102*f6dc9357SAndroid Build Coastguard Worker 103*f6dc9357SAndroid Build Coastguard Worker4) call SzArEx_Open(&db, inStream, &allocMain, &allocTemp) to open archive 104*f6dc9357SAndroid Build Coastguard Worker 105*f6dc9357SAndroid Build Coastguard WorkerThis function opens archive "inStream" and reads headers to "db". 106*f6dc9357SAndroid Build Coastguard WorkerAll items in "db" will be allocated with "allocMain" functions. 107*f6dc9357SAndroid Build Coastguard WorkerSzArEx_Open function allocates and frees temporary structures by "allocTemp" functions. 108*f6dc9357SAndroid Build Coastguard Worker 109*f6dc9357SAndroid Build Coastguard Worker5) List items or Extract items 110*f6dc9357SAndroid Build Coastguard Worker 111*f6dc9357SAndroid Build Coastguard Worker Listing code: 112*f6dc9357SAndroid Build Coastguard Worker ~~~~~~~~~~~~~ 113*f6dc9357SAndroid Build Coastguard Worker 114*f6dc9357SAndroid Build Coastguard Worker Use SzArEx_GetFileNameUtf16 function. Look example code in C\Util\7z\7zMain.c file. 115*f6dc9357SAndroid Build Coastguard Worker 116*f6dc9357SAndroid Build Coastguard Worker 117*f6dc9357SAndroid Build Coastguard Worker Extracting code: 118*f6dc9357SAndroid Build Coastguard Worker ~~~~~~~~~~~~~~~~ 119*f6dc9357SAndroid Build Coastguard Worker 120*f6dc9357SAndroid Build Coastguard Worker SZ_RESULT SzAr_Extract( 121*f6dc9357SAndroid Build Coastguard Worker CArchiveDatabaseEx *db, 122*f6dc9357SAndroid Build Coastguard Worker ILookInStream *inStream, 123*f6dc9357SAndroid Build Coastguard Worker UInt32 fileIndex, /* index of file */ 124*f6dc9357SAndroid Build Coastguard Worker UInt32 *blockIndex, /* index of solid block */ 125*f6dc9357SAndroid Build Coastguard Worker Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ 126*f6dc9357SAndroid Build Coastguard Worker size_t *outBufferSize, /* buffer size for output buffer */ 127*f6dc9357SAndroid Build Coastguard Worker size_t *offset, /* offset of stream for required file in *outBuffer */ 128*f6dc9357SAndroid Build Coastguard Worker size_t *outSizeProcessed, /* size of file in *outBuffer */ 129*f6dc9357SAndroid Build Coastguard Worker ISzAlloc *allocMain, 130*f6dc9357SAndroid Build Coastguard Worker ISzAlloc *allocTemp); 131*f6dc9357SAndroid Build Coastguard Worker 132*f6dc9357SAndroid Build Coastguard Worker If you need to decompress more than one file, you can send these values from previous call: 133*f6dc9357SAndroid Build Coastguard Worker blockIndex, 134*f6dc9357SAndroid Build Coastguard Worker outBuffer, 135*f6dc9357SAndroid Build Coastguard Worker outBufferSize, 136*f6dc9357SAndroid Build Coastguard Worker You can consider "outBuffer" as cache of solid block. If your archive is solid, 137*f6dc9357SAndroid Build Coastguard Worker it will increase decompression speed. 138*f6dc9357SAndroid Build Coastguard Worker 139*f6dc9357SAndroid Build Coastguard Worker After decompressing you must free "outBuffer": 140*f6dc9357SAndroid Build Coastguard Worker allocImp.Free(outBuffer); 141*f6dc9357SAndroid Build Coastguard Worker 142*f6dc9357SAndroid Build Coastguard Worker6) call SzArEx_Free(&db, allocImp.Free) to free allocated items in "db". 143*f6dc9357SAndroid Build Coastguard Worker 144*f6dc9357SAndroid Build Coastguard Worker 145*f6dc9357SAndroid Build Coastguard Worker 146*f6dc9357SAndroid Build Coastguard Worker 147*f6dc9357SAndroid Build Coastguard WorkerMemory requirements for .7z decoding 148*f6dc9357SAndroid Build Coastguard Worker------------------------------------ 149*f6dc9357SAndroid Build Coastguard Worker 150*f6dc9357SAndroid Build Coastguard WorkerMemory usage for Archive opening: 151*f6dc9357SAndroid Build Coastguard Worker - Temporary pool: 152*f6dc9357SAndroid Build Coastguard Worker - Memory for uncompressed .7z headers 153*f6dc9357SAndroid Build Coastguard Worker - some other temporary blocks 154*f6dc9357SAndroid Build Coastguard Worker - Main pool: 155*f6dc9357SAndroid Build Coastguard Worker - Memory for database: 156*f6dc9357SAndroid Build Coastguard Worker Estimated size of one file structures in solid archive: 157*f6dc9357SAndroid Build Coastguard Worker - Size (4 or 8 Bytes) 158*f6dc9357SAndroid Build Coastguard Worker - CRC32 (4 bytes) 159*f6dc9357SAndroid Build Coastguard Worker - LastWriteTime (8 bytes) 160*f6dc9357SAndroid Build Coastguard Worker - Some file information (4 bytes) 161*f6dc9357SAndroid Build Coastguard Worker - File Name (variable length) + pointer + allocation structures 162*f6dc9357SAndroid Build Coastguard Worker 163*f6dc9357SAndroid Build Coastguard WorkerMemory usage for archive Decompressing: 164*f6dc9357SAndroid Build Coastguard Worker - Temporary pool: 165*f6dc9357SAndroid Build Coastguard Worker - Memory for LZMA decompressing structures 166*f6dc9357SAndroid Build Coastguard Worker - Main pool: 167*f6dc9357SAndroid Build Coastguard Worker - Memory for decompressed solid block 168*f6dc9357SAndroid Build Coastguard Worker - Memory for temprorary buffers, if BCJ2 fileter is used. Usually these 169*f6dc9357SAndroid Build Coastguard Worker temprorary buffers can be about 15% of solid block size. 170*f6dc9357SAndroid Build Coastguard Worker 171*f6dc9357SAndroid Build Coastguard Worker 172*f6dc9357SAndroid Build Coastguard Worker7z Decoder doesn't allocate memory for compressed blocks. 173*f6dc9357SAndroid Build Coastguard WorkerInstead of this, you must allocate buffer with desired 174*f6dc9357SAndroid Build Coastguard Workersize before calling 7z Decoder. Use 7zMain.c as example. 175*f6dc9357SAndroid Build Coastguard Worker 176*f6dc9357SAndroid Build Coastguard Worker 177*f6dc9357SAndroid Build Coastguard WorkerDefines 178*f6dc9357SAndroid Build Coastguard Worker------- 179*f6dc9357SAndroid Build Coastguard Worker 180*f6dc9357SAndroid Build Coastguard Worker_SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr. 181*f6dc9357SAndroid Build Coastguard Worker 182*f6dc9357SAndroid Build Coastguard Worker 183*f6dc9357SAndroid Build Coastguard Worker--- 184*f6dc9357SAndroid Build Coastguard Worker 185*f6dc9357SAndroid Build Coastguard Workerhttp://www.7-zip.org 186*f6dc9357SAndroid Build Coastguard Workerhttp://www.7-zip.org/sdk.html 187*f6dc9357SAndroid Build Coastguard Workerhttp://www.7-zip.org/support.html 188