Current News Archived News Search News Discussion Forum Old Forum Install Programs More Downloads... Troubleshooting Source Code Format Specs. Misc. Information Non-SF Stuff Links Small banner for links to this site: |
diff --git a/SComp.cpp b/SComp.cpp
--- a/SComp.cpp
+++ b/SComp.cpp
// Comment this out to disable Zlib compression support.
#define USE_ZLIB
+// Comment this out to disable bzip 2 compression support.
+#define USE_BZIP2
+
#include "SComp.h"
#include "SErr.h"
#include "SMem.h"
#include "wave.h"
#include "huffman.h"
+
#ifdef USE_ZLIB
#ifndef __SYS_ZLIB
-#include "zlib.h"
+#define ZLIB_INTERNAL
+#include "zlib/zlib.h"
#else
#include <zlib.h>
#endif
#endif
+
#include "pklib.h"
+#ifdef USE_BZIP2
+#ifndef __SYS_BZLIB
+#include "bzip2/bzlib.h"
+#else
+#include <bzlib.h>
+#endif
+#endif
+
typedef void (__fastcall *FCOMPRESS)(LPVOID lpvDestinationMem, LPDWORD lpdwCompressedSize, LPVOID lpvSourceMem, DWORD dwDecompressedSize, LPDWORD lpdwCompressionSubType, DWORD dwCompressLevel);
typedef void (__fastcall *FDECOMPRESS)(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize, LPVOID lpvSourceMem, DWORD dwCompressedSize);
void __fastcall Deflate(LPVOID lpvDestinationMem, LPDWORD lpdwCompressedSize, LPVOID lpvSourceMem, DWORD dwDecompressedSize, LPDWORD lpdwCompressionSubType, DWORD dwCompressLevel);
#endif
void __fastcall Implode(LPVOID lpvDestinationMem, LPDWORD lpdwCompressedSize, LPVOID lpvSourceMem, DWORD dwDecompressedSize, LPDWORD lpdwCompressionSubType, DWORD dwCompressLevel);
+#ifdef USE_BZIP2
+void __fastcall CompressBZ2(LPVOID lpvDestinationMem, LPDWORD lpdwCompressedSize, LPVOID lpvSourceMem, DWORD dwDecompressedSize, LPDWORD lpdwCompressionSubType, DWORD dwCompressLevel);
+#endif
void __fastcall DecompressWaveMono(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize, LPVOID lpvSourceMem, DWORD dwCompressedSize);
void __fastcall DecompressWaveStereo(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize, LPVOID lpvSourceMem, DWORD dwCompressedSize);
void __fastcall Inflate(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize, LPVOID lpvSourceMem, DWORD dwCompressedSize);
#endif
void __fastcall Explode(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize, LPVOID lpvSourceMem, DWORD dwCompressedSize);
+#ifdef USE_BZIP2
+void __fastcall DecompressBZ2(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize, LPVOID lpvSourceMem, DWORD dwCompressedSize);
+#endif
void __fastcall InitWaveCompress(DWORD dwCompressLevel, LPDWORD *lplpdwCompressionSubType, LPDWORD lpdwCompressionSubType);
#ifdef USE_ZLIB
{0x02, Deflate},
#endif
- {0x08, Implode}
+ {0x08, Implode},
+#ifdef USE_BZIP2
+ {0x10, CompressBZ2},
+#endif
};
DecompressFunc DecompressionFunctions[] =
#ifdef USE_ZLIB
{0x02, Inflate},
#endif
- {0x08, Explode}
+ {0x08, Explode},
+#ifdef USE_BZIP2
+ {0x10, DecompressBZ2},
+#endif
};
const DWORD nCompFunctions = sizeof(CompressionFunctions) / sizeof(CompressionFunctions[0]);
@@ -496,6 +522,23 @@ void __fastcall Implode(LPVOID lpvDestinationMem, LPDWORD lpdwCompressedSize, LP
SMemFree(lpvWorkBuffer);
}
+#ifdef USE_BZIP2
+
+void __fastcall CompressBZ2(LPVOID lpvDestinationMem, LPDWORD lpdwCompressedSize, LPVOID lpvSourceMem, DWORD dwDecompressedSize, LPDWORD lpdwCompressionSubType, DWORD dwCompressLevel)
+{
+ int nBlockSize;
+
+ nBlockSize = 9;
+ if (lpdwCompressionSubType)
+ if (*lpdwCompressionSubType >= 1 && *lpdwCompressionSubType <= 9)
+ nBlockSize = *lpdwCompressionSubType;
+
+ BZ2_bzBuffToBuffCompress((char *)lpvDestinationMem, (unsigned int *)lpdwCompressedSize, (char *)lpvSourceMem, (unsigned int)dwDecompressedSize, nBlockSize, 0, 0);
+ *lpdwCompressionSubType = 0;
+}
+
+#endif
+
void __fastcall DecompressWaveMono(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize, LPVOID lpvSourceMem, DWORD dwCompressedSize)
{
*lpdwDecompressedSize = DecompressWave((LPBYTE)lpvDestinationMem,*lpdwDecompressedSize,(LPBYTE)lpvSourceMem,dwCompressedSize,1);
@@ -605,6 +648,15 @@ void __fastcall Explode(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize,
SMemFree(lpvWorkBuffer);
}
+#ifdef USE_BZIP2
+
+void __fastcall DecompressBZ2(LPVOID lpvDestinationMem, LPDWORD lpdwDecompressedSize, LPVOID lpvSourceMem, DWORD dwCompressedSize)
+{
+ BZ2_bzBuffToBuffDecompress((char *)lpvDestinationMem, (unsigned int *)lpdwDecompressedSize, (char *)lpvSourceMem, (unsigned int)dwCompressedSize, 0, 0);
+}
+
+#endif
+
unsigned int FillInput(char *lpvBuffer, unsigned int *lpdwSize, void *param)
{
DWORD dwBufferSize;
lpBufferInfo->dwDestStart += dwBufferSize;
}
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef USE_BZIP2
+
+void bz_internal_error ( int errcode )
+{
+}
+
+#endif
+
+#ifdef __cplusplus
+}; // extern "C"
+#endif
|