Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* 7zTypes.h -- Basic types
  2. 2013-11-12 : Igor Pavlov : Public domain */
  3.  
  4. #ifndef __7Z_TYPES_H
  5. #define __7Z_TYPES_H
  6.  
  7. #ifdef _WIN32
  8. /* #include <windows.h> */
  9. #endif
  10.  
  11. #include <stddef.h>
  12.  
  13. #ifndef EXTERN_C_BEGIN
  14. #ifdef __cplusplus
  15. #define EXTERN_C_BEGIN extern "C" {
  16. #define EXTERN_C_END }
  17. #else
  18. #define EXTERN_C_BEGIN
  19. #define EXTERN_C_END
  20. #endif
  21. #endif
  22.  
  23. EXTERN_C_BEGIN
  24.  
  25. #define SZ_OK 0
  26.  
  27. #define SZ_ERROR_DATA 1
  28. #define SZ_ERROR_MEM 2
  29. #define SZ_ERROR_CRC 3
  30. #define SZ_ERROR_UNSUPPORTED 4
  31. #define SZ_ERROR_PARAM 5
  32. #define SZ_ERROR_INPUT_EOF 6
  33. #define SZ_ERROR_OUTPUT_EOF 7
  34. #define SZ_ERROR_READ 8
  35. #define SZ_ERROR_WRITE 9
  36. #define SZ_ERROR_PROGRESS 10
  37. #define SZ_ERROR_FAIL 11
  38. #define SZ_ERROR_THREAD 12
  39.  
  40. #define SZ_ERROR_ARCHIVE 16
  41. #define SZ_ERROR_NO_ARCHIVE 17
  42.  
  43. typedef int SRes;
  44.  
  45. #ifdef _WIN32
  46. /* typedef DWORD WRes; */
  47. typedef unsigned WRes;
  48. #else
  49. typedef int WRes;
  50. #endif
  51.  
  52. #ifndef RINOK
  53. #define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
  54. #endif
  55.  
  56. typedef unsigned char Byte;
  57. typedef short Int16;
  58. typedef unsigned short UInt16;
  59.  
  60. #ifdef _LZMA_UINT32_IS_ULONG
  61. typedef long Int32;
  62. typedef unsigned long UInt32;
  63. #else
  64. typedef int Int32;
  65. typedef unsigned int UInt32;
  66. #endif
  67.  
  68. #ifdef _SZ_NO_INT_64
  69.  
  70. /* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
  71.    NOTES: Some code will work incorrectly in that case! */
  72.  
  73. typedef long Int64;
  74. typedef unsigned long UInt64;
  75.  
  76. #else
  77.  
  78. #if defined(_MSC_VER) || defined(__BORLANDC__)
  79. typedef __int64 Int64;
  80. typedef unsigned __int64 UInt64;
  81. #define UINT64_CONST(n) n
  82. #else
  83. typedef long long int Int64;
  84. typedef unsigned long long int UInt64;
  85. #define UINT64_CONST(n) n ## ULL
  86. #endif
  87.  
  88. #endif
  89.  
  90. #ifdef _LZMA_NO_SYSTEM_SIZE_T
  91. typedef UInt32 SizeT;
  92. #else
  93. typedef size_t SizeT;
  94. #endif
  95.  
  96. typedef int Bool;
  97. #define True 1
  98. #define False 0
  99.  
  100.  
  101. #ifdef _WIN32
  102. #define MY_STD_CALL __stdcall
  103. #else
  104. #define MY_STD_CALL
  105. #endif
  106.  
  107. #ifdef _MSC_VER
  108.  
  109. #if _MSC_VER >= 1300
  110. #define MY_NO_INLINE __declspec(noinline)
  111. #else
  112. #define MY_NO_INLINE
  113. #endif
  114.  
  115. #define MY_CDECL __cdecl
  116. #define MY_FAST_CALL __fastcall
  117.  
  118. #else
  119.  
  120. #define MY_NO_INLINE
  121. #define MY_CDECL
  122. #define MY_FAST_CALL
  123.  
  124. #endif
  125.  
  126.  
  127. /* The following interfaces use first parameter as pointer to structure */
  128.  
  129. typedef struct
  130. {
  131.   Byte (*Read)(void *p); /* reads one byte, returns 0 in case of EOF or error */
  132. } IByteIn;
  133.  
  134. typedef struct
  135. {
  136.   void (*Write)(void *p, Byte b);
  137. } IByteOut;
  138.  
  139. typedef struct
  140. {
  141.   SRes (*Read)(void *p, void *buf, size_t *size);
  142.     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
  143.        (output(*size) < input(*size)) is allowed */
  144. } ISeqInStream;
  145.  
  146. /* it can return SZ_ERROR_INPUT_EOF */
  147. SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size);
  148. SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType);
  149. SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf);
  150.  
  151. typedef struct
  152. {
  153.   size_t (*Write)(void *p, const void *buf, size_t size);
  154.     /* Returns: result - the number of actually written bytes.
  155.        (result < size) means error */
  156. } ISeqOutStream;
  157.  
  158. typedef enum
  159. {
  160.   SZ_SEEK_SET = 0,
  161.   SZ_SEEK_CUR = 1,
  162.   SZ_SEEK_END = 2
  163. } ESzSeek;
  164.  
  165. typedef struct
  166. {
  167.   SRes (*Read)(void *p, void *buf, size_t *size);  /* same as ISeqInStream::Read */
  168.   SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
  169. } ISeekInStream;
  170.  
  171. typedef struct
  172. {
  173.   SRes (*Look)(void *p, const void **buf, size_t *size);
  174.     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
  175.        (output(*size) > input(*size)) is not allowed
  176.        (output(*size) < input(*size)) is allowed */
  177.   SRes (*Skip)(void *p, size_t offset);
  178.     /* offset must be <= output(*size) of Look */
  179.  
  180.   SRes (*Read)(void *p, void *buf, size_t *size);
  181.     /* reads directly (without buffer). It's same as ISeqInStream::Read */
  182.   SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
  183. } ILookInStream;
  184.  
  185. SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size);
  186. SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset);
  187.  
  188. /* reads via ILookInStream::Read */
  189. SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType);
  190. SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size);
  191.  
  192. #define LookToRead_BUF_SIZE (1 << 14)
  193.  
  194. typedef struct
  195. {
  196.   ILookInStream s;
  197.   ISeekInStream *realStream;
  198.   size_t pos;
  199.   size_t size;
  200.   Byte buf[LookToRead_BUF_SIZE];
  201. } CLookToRead;
  202.  
  203. void LookToRead_CreateVTable(CLookToRead *p, int lookahead);
  204. void LookToRead_Init(CLookToRead *p);
  205.  
  206. typedef struct
  207. {
  208.   ISeqInStream s;
  209.   ILookInStream *realStream;
  210. } CSecToLook;
  211.  
  212. void SecToLook_CreateVTable(CSecToLook *p);
  213.  
  214. typedef struct
  215. {
  216.   ISeqInStream s;
  217.   ILookInStream *realStream;
  218. } CSecToRead;
  219.  
  220. void SecToRead_CreateVTable(CSecToRead *p);
  221.  
  222. typedef struct
  223. {
  224.   SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize);
  225.     /* Returns: result. (result != SZ_OK) means break.
  226.        Value (UInt64)(Int64)-1 for size means unknown value. */
  227. } ICompressProgress;
  228.  
  229. typedef struct
  230. {
  231.   void *(*Alloc)(void *p, size_t size);
  232.   void (*Free)(void *p, void *address); /* address can be 0 */
  233. } ISzAlloc;
  234.  
  235. #define IAlloc_Alloc(p, size) (p)->Alloc((p), size)
  236. #define IAlloc_Free(p, a) (p)->Free((p), a)
  237.  
  238. #ifdef _WIN32
  239.  
  240. #define CHAR_PATH_SEPARATOR '\\'
  241. #define WCHAR_PATH_SEPARATOR L'\\'
  242. #define STRING_PATH_SEPARATOR "\\"
  243. #define WSTRING_PATH_SEPARATOR L"\\"
  244.  
  245. #else
  246.  
  247. #define CHAR_PATH_SEPARATOR '/'
  248. #define WCHAR_PATH_SEPARATOR L'/'
  249. #define STRING_PATH_SEPARATOR "/"
  250. #define WSTRING_PATH_SEPARATOR L"/"
  251.  
  252. #endif
  253.  
  254. EXTERN_C_END
  255.  
  256. #endif
  257.