the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 253 lines 6.9 kB view raw
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_ */