1/* 2 LzmaDecode.h 3 LZMA Decoder interface 4 5 LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) 6 http://www.7-zip.org/ 7 8 LZMA SDK is licensed under two licenses: 9 1) GNU Lesser General Public License (GNU LGPL) 10 2) Common Public License (CPL) 11 It means that you can select one of these two licenses and 12 follow rules of that license. 13 14 SPECIAL EXCEPTION: 15 Igor Pavlov, as the author of this code, expressly permits you to 16 statically or dynamically link your code (or bind by name) to the 17 interfaces of this file without subjecting your linked code to the 18 terms of the CPL or GNU LGPL. Any modifications or additions 19 to this file, however, are subject to the LGPL or CPL terms. 20*/ 21 22#ifndef __LZMADECODE_H 23#define __LZMADECODE_H 24 25#include "LzmaTypes.h" 26 27/* #define _LZMA_IN_CB */ 28/* Use callback for input data */ 29 30/* #define _LZMA_OUT_READ */ 31/* Use read function for output data */ 32 33/* #define _LZMA_PROB32 */ 34/* It can increase speed on some 32-bit CPUs, 35 but memory usage will be doubled in that case */ 36 37/* #define _LZMA_LOC_OPT */ 38/* Enable local speed optimizations inside code */ 39 40#ifdef _LZMA_PROB32 41#define CProb UInt32 42#else 43#define CProb UInt16 44#endif 45 46#define LZMA_RESULT_OK 0 47#define LZMA_RESULT_DATA_ERROR 1 48 49#ifdef _LZMA_IN_CB 50typedef struct _ILzmaInCallback 51{ 52 int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize); 53} ILzmaInCallback; 54#endif 55 56#define LZMA_BASE_SIZE 1846 57#define LZMA_LIT_SIZE 768 58 59#define LZMA_PROPERTIES_SIZE 5 60 61typedef struct _CLzmaProperties 62{ 63 int lc; 64 int lp; 65 int pb; 66 #ifdef _LZMA_OUT_READ 67 UInt32 DictionarySize; 68 #endif 69}CLzmaProperties; 70 71int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size); 72 73#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp))) 74 75#define kLzmaNeedInitId (-2) 76 77typedef struct _CLzmaDecoderState 78{ 79 CLzmaProperties Properties; 80 CProb *Probs; 81 82 #ifdef _LZMA_IN_CB 83 const unsigned char *Buffer; 84 const unsigned char *BufferLim; 85 #endif 86 87 #ifdef _LZMA_OUT_READ 88 unsigned char *Dictionary; 89 UInt32 Range; 90 UInt32 Code; 91 UInt32 DictionaryPos; 92 UInt32 GlobalPos; 93 UInt32 DistanceLimit; 94 UInt32 Reps[4]; 95 int State; 96 int RemainLen; 97 unsigned char TempDictionary[4]; 98 #endif 99} CLzmaDecoderState; 100 101#ifdef _LZMA_OUT_READ 102#define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; } 103#endif 104 105int LzmaDecode(CLzmaDecoderState *vs, 106 #ifdef _LZMA_IN_CB 107 ILzmaInCallback *inCallback, 108 #else 109 const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, 110 #endif 111 unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed); 112 113#endif 114