- /* Types.h -- Basic types 
- 2008-11-23 : Igor Pavlov : Public domain */ 
-   
- #ifndef __7Z_TYPES_H 
- #define __7Z_TYPES_H 
-   
- #include <stddef.h> 
-   
- #ifdef _WIN32 
- #include <windows.h> 
- #endif 
-   
- #define SZ_OK 0 
-   
- #define SZ_ERROR_DATA 1 
- #define SZ_ERROR_MEM 2 
- #define SZ_ERROR_CRC 3 
- #define SZ_ERROR_UNSUPPORTED 4 
- #define SZ_ERROR_PARAM 5 
- #define SZ_ERROR_INPUT_EOF 6 
- #define SZ_ERROR_OUTPUT_EOF 7 
- #define SZ_ERROR_READ 8 
- #define SZ_ERROR_WRITE 9 
- #define SZ_ERROR_PROGRESS 10 
- #define SZ_ERROR_FAIL 11 
- #define SZ_ERROR_THREAD 12 
-   
- #define SZ_ERROR_ARCHIVE 16 
- #define SZ_ERROR_NO_ARCHIVE 17 
-   
- typedef int SRes; 
-   
- #ifdef _WIN32 
- typedef DWORD WRes; 
- #else 
- typedef int WRes; 
- #endif 
-   
- #ifndef RINOK 
- #define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } 
- #endif 
-   
- typedef unsigned char Byte; 
- typedef short Int16; 
- typedef unsigned short UInt16; 
-   
- #ifdef _LZMA_UINT32_IS_ULONG 
- typedef long Int32; 
- typedef unsigned long UInt32; 
- #else 
- typedef int Int32; 
- typedef unsigned int UInt32; 
- #endif 
-   
- #ifdef _SZ_NO_INT_64 
-   
- /* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. 
-    NOTES: Some code will work incorrectly in that case! */ 
-   
- typedef long Int64; 
- typedef unsigned long UInt64; 
-   
- #else 
-   
- #if defined(_MSC_VER) || defined(__BORLANDC__) 
- typedef __int64 Int64; 
- typedef unsigned __int64 UInt64; 
- #else 
- typedef long long int Int64; 
- typedef unsigned long long int UInt64; 
- #endif 
-   
- #endif 
-   
- #ifdef _LZMA_NO_SYSTEM_SIZE_T 
- typedef UInt32 SizeT; 
- #else 
- typedef size_t SizeT; 
- #endif 
-   
- typedef int Bool; 
- #define True 1 
- #define False 0 
-   
-   
- #ifdef _MSC_VER 
-   
- #if _MSC_VER >= 1300 
- #define MY_NO_INLINE __declspec(noinline) 
- #else 
- #define MY_NO_INLINE 
- #endif 
-   
- #define MY_CDECL __cdecl 
- #define MY_STD_CALL __stdcall 
- #define MY_FAST_CALL MY_NO_INLINE __fastcall 
-   
- #else 
-   
- #define MY_CDECL 
- #define MY_STD_CALL 
- #define MY_FAST_CALL 
-   
- #endif 
-   
-   
- /* The following interfaces use first parameter as pointer to structure */ 
-   
- typedef struct ISeqInStream 
- { 
-   SRes (*Read)(void *p, void *buf, size_t *size); 
-     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. 
-        (output(*size) < input(*size)) is allowed */ 
- } ISeqInStream; 
-   
- /* it can return SZ_ERROR_INPUT_EOF */ 
- SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size); 
- SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType); 
- SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf); 
-   
- typedef struct ISeqOutStream 
- { 
-   size_t (*Write)(void *p, const void *buf, size_t size); 
-     /* Returns: result - the number of actually written bytes. 
-        (result < size) means error */ 
- } ISeqOutStream; 
-   
- typedef enum ESzSeek 
- { 
-   SZ_SEEK_SET = 0, 
-   SZ_SEEK_CUR = 1, 
-   SZ_SEEK_END = 2 
- } ESzSeek; 
-   
- typedef struct ISeekInStream 
- { 
-   SRes (*Read)(void *p, void *buf, size_t *size);  /* same as ISeqInStream::Read */ 
-   SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); 
- } ISeekInStream; 
-   
- typedef struct ILookInStream 
- { 
-   SRes (*Look)(void *p, void **buf, size_t *size); 
-     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. 
-        (output(*size) > input(*size)) is not allowed 
-        (output(*size) < input(*size)) is allowed */ 
-   SRes (*Skip)(void *p, size_t offset); 
-     /* offset must be <= output(*size) of Look */ 
-   
-   SRes (*Read)(void *p, void *buf, size_t *size); 
-     /* reads directly (without buffer). It's same as ISeqInStream::Read */ 
-   SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); 
- } ILookInStream; 
-   
- SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size); 
- SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); 
-   
- /* reads via ILookInStream::Read */ 
- SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); 
- SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); 
-   
- #define LookToRead_BUF_SIZE (1 << 14) 
-   
- typedef struct CLookToRead 
- { 
-   ILookInStream s; 
-   ISeekInStream *realStream; 
-   size_t pos; 
-   size_t size; 
-   Byte buf[LookToRead_BUF_SIZE]; 
- } CLookToRead; 
-   
- void LookToRead_CreateVTable(CLookToRead *p, int lookahead); 
- void LookToRead_Init(CLookToRead *p); 
-   
- typedef struct CSecToLook 
- { 
-   ISeqInStream s; 
-   ILookInStream *realStream; 
- } CSecToLook; 
-   
- void SecToLook_CreateVTable(CSecToLook *p); 
-   
- typedef struct CSecToRead 
- { 
-   ISeqInStream s; 
-   ILookInStream *realStream; 
- } CSecToRead; 
-   
- void SecToRead_CreateVTable(CSecToRead *p); 
-   
- typedef struct ICompressProgress 
- { 
-   SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); 
-     /* Returns: result. (result != SZ_OK) means break. 
-        Value (UInt64)(Int64)-1 for size means unknown value. */ 
- } ICompressProgress; 
-   
- typedef struct ISzAlloc 
- { 
-   void *(*Alloc)(void *p, size_t size); 
-   void (*Free)(void *p, void *address); /* address can be 0 */ 
- } ISzAlloc; 
-   
- #define IAlloc_Alloc(p, size) (p)->Alloc((p), size) 
- #define IAlloc_Free(p, a) (p)->Free((p), a) 
-   
- #endif 
-