the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1/************************************************************************
2* *
3* xcompress.h -- This module defines the Xbox Compression APIs *
4* *
5* Copyright (c) Microsoft Corp. All rights reserved. *
6* *
7************************************************************************/
8#pragma once
9
10#ifndef _XCOMPRESS_H_
11#define _XCOMPRESS_H_
12
13#include <sal.h>
14
15#ifndef XBOXAPI
16#define XBOXAPI
17#endif
18
19#ifdef __cplusplus
20#define XCTDEXTERN extern "C"
21#else
22#define XCTDEXTERN extern
23#endif
24
25#ifdef __cplusplus
26extern "C"
27{
28#endif
29
30#pragma warning(push)
31#pragma warning(disable: 4200) // zero-sized array
32
33typedef enum _XMEMCODEC_TYPE
34{
35 XMEMCODEC_DEFAULT = 0,
36 XMEMCODEC_LZX = 1
37} XMEMCODEC_TYPE;
38
39/*
40 * Data compression flags
41 */
42
43#define XMEMCOMPRESS_STREAM 0x00000001
44
45/*
46 * Data compression functions
47 */
48
49typedef VOID* XMEMCOMPRESSION_CONTEXT;
50
51XBOXAPI
52HRESULT
53WINAPI
54XMemCreateCompressionContext(
55 __in XMEMCODEC_TYPE CodecType,
56 __in_opt CONST VOID* pCodecParams,
57 __in DWORD Flags,
58 __deref_out XMEMCOMPRESSION_CONTEXT* pContext
59 );
60
61XBOXAPI
62XMEMCOMPRESSION_CONTEXT
63WINAPI
64XMemInitializeCompressionContext(
65 __in XMEMCODEC_TYPE CodecType,
66 __in_opt CONST VOID* pCodecParams,
67 __in DWORD Flags,
68 __out_bcount(ContextSize) VOID* pContextData,
69 __in SIZE_T ContextSize
70 );
71
72XBOXAPI
73VOID
74WINAPI
75XMemDestroyCompressionContext(
76 __in XMEMCOMPRESSION_CONTEXT Context
77 );
78
79XBOXAPI
80SIZE_T
81WINAPI
82XMemGetCompressionContextSize(
83 __in XMEMCODEC_TYPE CodecType,
84 __in_opt CONST VOID* pCodecParams,
85 __in DWORD Flags
86 );
87
88XBOXAPI
89HRESULT
90WINAPI
91XMemResetCompressionContext(
92 __in XMEMCOMPRESSION_CONTEXT Context);
93
94XBOXAPI
95HRESULT
96WINAPI
97XMemCompress(
98 __in XMEMCOMPRESSION_CONTEXT Context,
99 __out_bcount_opt( *pDestSize ) VOID* pDestination,
100 __inout SIZE_T* pDestSize,
101 __in_bcount( SrcSize ) CONST VOID* pSource,
102 __in SIZE_T SrcSize
103 );
104
105XBOXAPI
106HRESULT
107WINAPI
108XMemCompressStream(
109 __in XMEMCOMPRESSION_CONTEXT Context,
110 __out_bcount_opt( *pDestSize ) VOID* pDestination,
111 __inout SIZE_T* pDestSize,
112 __in_bcount( *pSrcSize ) CONST VOID* pSource,
113 __inout SIZE_T* pSrcSize
114 );
115
116/*
117 * Data decompression functions
118 */
119
120typedef VOID* XMEMDECOMPRESSION_CONTEXT;
121
122XBOXAPI
123HRESULT
124WINAPI
125XMemCreateDecompressionContext(
126 __in XMEMCODEC_TYPE CodecType,
127 __in_opt CONST VOID* pCodecParams,
128 __in DWORD Flags,
129 __deref_out XMEMDECOMPRESSION_CONTEXT* pContext
130 );
131
132XBOXAPI
133XMEMDECOMPRESSION_CONTEXT
134WINAPI
135XMemInitializeDecompressionContext(
136 __in XMEMCODEC_TYPE CodecType,
137 __in_opt CONST VOID* pCodecParams,
138 __in DWORD Flags,
139 __out_bcount( ContextSize ) VOID* pContextData,
140 __in SIZE_T ContextSize
141 );
142
143XBOXAPI
144VOID
145WINAPI
146XMemDestroyDecompressionContext(
147 __in XMEMDECOMPRESSION_CONTEXT Context
148 );
149
150XBOXAPI
151SIZE_T
152WINAPI
153XMemGetDecompressionContextSize(
154 __in XMEMCODEC_TYPE CodecType,
155 __in_opt CONST VOID* pCodecParams,
156 __in DWORD Flags
157 );
158
159XBOXAPI
160HRESULT
161WINAPI
162XMemResetDecompressionContext(
163 __in XMEMDECOMPRESSION_CONTEXT Context);
164
165XBOXAPI
166HRESULT
167WINAPI
168XMemDecompress(
169 __in XMEMDECOMPRESSION_CONTEXT Context,
170 __out_bcount( *pDestSize ) VOID* pDestination,
171 __inout SIZE_T* pDestSize,
172 __in_bcount( SrcSize) CONST VOID* pSource,
173 __in SIZE_T SrcSize
174 );
175
176XBOXAPI
177HRESULT
178WINAPI
179XMemDecompressStream(
180 __in XMEMDECOMPRESSION_CONTEXT Context,
181 __out_bcount( *pDestSize ) VOID* pDestination,
182 __inout SIZE_T* pDestSize,
183 __in_bcount( *pSrcSize ) CONST VOID* pSource,
184 __inout SIZE_T* pSrcSize
185 );
186
187/*
188 * LZX codec for lossless compression
189 */
190
191typedef struct _XMEMCODEC_PARAMETERS_LZX
192{
193 DWORD Flags;
194 DWORD WindowSize;
195 DWORD CompressionPartitionSize;
196} XMEMCODEC_PARAMETERS_LZX;
197
198#define XCOMPRESS_LZX_BLOCK_SIZE (32 * 1024)
199#define XCOMPRESS_LZX_BLOCK_GROWTH_SIZE_MAX 6155
200
201/*
202 * Error codes
203 */
204
205#define XMCDERR_MOREDATA _HRESULT_TYPEDEF_(0x81DE2001)
206
207/*
208 * Compression file headers
209 */
210
211#define XCOMPRESS_FILE_IDENTIFIER_LZXTDECODE 0x0FF512ED
212#define XCOMPRESS_FILE_IDENTIFIER_LZXNATIVE 0x0FF512EE
213
214#define XCOMPRESS_SET_FILE_VERSION(Major, Minor) ((((Major) & 0xFF) << 8) | ((Minor) & 0xFF))
215#define XCOMPRESS_GET_FILE_VERSION_MAJOR(Version) (((Version) >> 8) & 0xFF)
216#define XCOMPRESS_GET_FILE_VERSION_MINOR(Version) ((Version) & 0xFF)
217
218#define XCOMPRESS_LZXNATIVE_VERSION_MAJOR 1
219#define XCOMPRESS_LZXNATIVE_VERSION_MINOR 3
220
221typedef struct _XCOMPRESS_FILE_HEADER
222{
223 DWORD Identifier;
224 WORD Version;
225 WORD Reserved;
226} XCOMPRESS_FILE_HEADER;
227
228typedef struct _XCOMPRESS_FILE_HEADER_LZXNATIVE
229{
230 XCOMPRESS_FILE_HEADER Common;
231 DWORD ContextFlags;
232 XMEMCODEC_PARAMETERS_LZX CodecParams;
233 DWORD UncompressedSizeHigh;
234 DWORD UncompressedSizeLow;
235 DWORD CompressedSizeHigh;
236 DWORD CompressedSizeLow;
237 DWORD UncompressedBlockSize;
238 DWORD CompressedBlockSizeMax;
239} XCOMPRESS_FILE_HEADER_LZXNATIVE;
240
241typedef struct _XCOMPRESS_BLOCK_HEADER_LZXNATIVE
242{
243 DWORD CompressedBlockSize;
244 BYTE pCompressedData[0];
245} XCOMPRESS_BLOCK_HEADER_LZXNATIVE;
246
247#pragma warning(pop)
248
249#ifdef __cplusplus
250}
251#endif
252
253#endif /* _XCOMPRESS_H_ */