Merge branch 'master' into divVerent/crypto2
authorRudolf Polzer <divverent@alientrap.org>
Mon, 26 Jul 2010 12:34:39 +0000 (14:34 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Mon, 26 Jul 2010 12:34:39 +0000 (14:34 +0200)
Conflicts:
all

43 files changed:
all
misc/builddeps/dp.linux64/bin/blind_id [new file with mode: 0755]
misc/builddeps/dp.linux64/include/d0_blind_id/d0.h [new file with mode: 0644]
misc/builddeps/dp.linux64/include/d0_blind_id/d0_blind_id.h [new file with mode: 0644]
misc/builddeps/dp.linux64/include/libmodplug/it_defs.h [new file with mode: 0644]
misc/builddeps/dp.linux64/include/libmodplug/modplug.h [new file with mode: 0644]
misc/builddeps/dp.linux64/include/libmodplug/sndfile.h [new file with mode: 0644]
misc/builddeps/dp.linux64/include/libmodplug/stdafx.h [new file with mode: 0644]
misc/builddeps/dp.linux64/lib/libd0_blind_id.a [new file with mode: 0644]
misc/builddeps/dp.linux64/lib/libd0_blind_id.la [new file with mode: 0755]
misc/builddeps/dp.linux64/lib/libd0_blind_id.so [new symlink]
misc/builddeps/dp.linux64/lib/libd0_blind_id.so.0 [new symlink]
misc/builddeps/dp.linux64/lib/libd0_blind_id.so.0.0.0 [new file with mode: 0755]
misc/builddeps/dp.linux64/lib/libmodplug.la [new file with mode: 0755]
misc/builddeps/dp.linux64/lib/libmodplug.so [new symlink]
misc/builddeps/dp.linux64/lib/libmodplug.so.1 [new symlink]
misc/builddeps/dp.linux64/lib/libmodplug.so.1.0.0 [new file with mode: 0755]
misc/builddeps/dp.linux64/lib/pkgconfig/d0_blind_id.pc [new file with mode: 0644]
misc/builddeps/dp.linux64/lib/pkgconfig/libmodplug.pc [new file with mode: 0644]
misc/buildfiles/w32/SDL.dll [deleted file]
misc/buildfiles/w32/libcurl-4.dll [deleted file]
misc/buildfiles/w32/libfreetype-6.dll [deleted file]
misc/buildfiles/w32/libjpeg.dll [deleted file]
misc/buildfiles/w32/libmodplug-0.dll [deleted file]
misc/buildfiles/w32/libpng12.dll [deleted file]
misc/buildfiles/w32/libtheora.dll [deleted file]
misc/buildfiles/w32/ogg.dll [deleted file]
misc/buildfiles/w32/vorbis.dll [deleted file]
misc/buildfiles/w32/vorbisenc.dll [deleted file]
misc/buildfiles/w32/vorbisfile.dll [deleted file]
misc/buildfiles/w32/zlib1.dll [deleted file]
misc/buildfiles/win32/SDL.dll [new file with mode: 0644]
misc/buildfiles/win32/libcurl-4.dll [new file with mode: 0644]
misc/buildfiles/win32/libfreetype-6.dll [new file with mode: 0755]
misc/buildfiles/win32/libjpeg.dll [new file with mode: 0644]
misc/buildfiles/win32/libmodplug-1.dll [new file with mode: 0755]
misc/buildfiles/win32/libpng12.dll [new file with mode: 0644]
misc/buildfiles/win32/libtheora.dll [new file with mode: 0644]
misc/buildfiles/win32/ogg.dll [new file with mode: 0644]
misc/buildfiles/win32/vorbis.dll [new file with mode: 0644]
misc/buildfiles/win32/vorbisenc.dll [new file with mode: 0644]
misc/buildfiles/win32/vorbisfile.dll [new file with mode: 0644]
misc/buildfiles/win32/zlib1.dll [new file with mode: 0644]

diff --git a/all b/all
index f841911..e1c7780 100755 (executable)
--- a/all
+++ b/all
@@ -553,7 +553,7 @@ case "$cmd" in
        run)
                if [ -n "$WE_HATE_OUR_USERS" ]; then
                        client=
-                       export PATH="$d0/misc/buildfiles/w32:$d0/d0_blind_id/.libs/$PATH"
+                       export PATH="$d0/misc/buildfiles/win64:$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
                elif [ x"`uname`" = x"Darwin" ]; then
                        export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
                        export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
@@ -860,17 +860,17 @@ case "$cmd" in
                "$SELF" release-compile-run "xonotic-build-$suffix" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "fteqcc" "$darkplaces_files"
                ;;
        release-engine-win32)
-               rsync --exclude=.git -vaSHPAX Xonotic/misc/buildfiles/w32/* Xonotic/
+               rsync --exclude=.git -vaSHPAX Xonotic/misc/buildfiles/win32/* Xonotic/
                "$SELF" release-compile win32 \
-                       '"DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -Wl,--dynamicbase -Wl,--nxcompat -g -DSUPPORTDIRECTX -DUSE_WSPIAPI_H -I$HOME/dp.win32/include -L$HOME/db.win32/lib" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG="$HOME/dp.win32/bin/sdl-config"' \
+                       '"DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -Wl,--dynamicbase -Wl,--nxcompat -g -DSUPPORTDIRECTX -DUSE_WSPIAPI_H -I$HOME/dp.win32/include -L$HOME/dp.win32/lib" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG="$HOME/dp.win32/bin/sdl-config"' \
                        win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
                        debug 'darkplaces.exe:xonotic.exe darkplaces-sdl.exe:xonotic-sdl.exe darkplaces-dedicated.exe:xonotic-dedicated.exe'
                ;;
        release-engine-win64)
-               rsync --exclude=.git -vaSHPAX Xonotic/misc/buildfiles/w32/* Xonotic/
+               rsync --exclude=.git -vaSHPAX Xonotic/misc/buildfiles/win64/* Xonotic/
                "$SELF" release-compile win32 \
-                       '"DP_MAKE_TARGET=mingw CC="amd64-mingw32msvc-gcc -Wl,--dynamicbase -Wl,--nxcompat -g -DSUPPORTDIRECTX -DUSE_WSPIAPI_H -I$HOME/dp.win64/include -L$HOME/db.win64/lib" WINDRES="amd64-mingw32msvc-windres" SDL_CONFIG="$HOME/dp.win64/bin/sdl-config"' \
-                       win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
+                       '"DP_MAKE_TARGET=mingw CC="amd64-mingw32msvc-gcc -Wl,--dynamicbase -Wl,--nxcompat -g -DSUPPORTDIRECTX -DUSE_WSPIAPI_H -I$HOME/dp.win64/include -L$HOME/dp.win64/lib" WINDRES="amd64-mingw32msvc-windres" SDL_CONFIG="$HOME/dp.win64/bin/sdl-config"' \
+                       win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-64.exe' \
                        debug 'darkplaces.exe:xonotic-64.exe darkplaces-sdl.exe:xonotic-sdl-64.exe darkplaces-dedicated.exe:xonotic-dedicated-64.exe'
                ;;
        release-engine-osx)
@@ -884,13 +884,13 @@ case "$cmd" in
                "$SELF" release-compile linux32 \
                        'CC="gcc -m32 -g -Wl,--hash-style=sysv -I$HOME/dp.linux32/include -L$HOME/dp.linux32/lib" DP_MODPLUG_STATIC_LIBDIR=$HOME/dp.linux32/lib DP_LINK_TO_LIBJPEG=1' \
                        all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
-                       debug 'darkplaces-glx:Xonotic/xonotic-linux-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux-linux32-dedicated'
+                       debug 'darkplaces-glx:Xonotic/xonotic-linux-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
                ;;
        release-engine-linux64)
                "$SELF" release-compile linux64 \
                        'CC="gcc -m64 -g -Wl,--hash-style=sysv -I$HOME/dp.linux64/include -L$HOME/dp.linux64/lib" DP_MODPLUG_STATIC_LIBDIR=$HOME/dp.linux64/lib DP_LINK_TO_LIBJPEG=1' \
                        all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
-                       debug 'darkplaces-glx:Xonotic/xonotic-linux-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux-linux64-dedicated'
+                       debug 'darkplaces-glx:Xonotic/xonotic-linux-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
                ;;
        release-engine)
                "$SELF" release-engine-win32 &
diff --git a/misc/builddeps/dp.linux64/bin/blind_id b/misc/builddeps/dp.linux64/bin/blind_id
new file mode 100755 (executable)
index 0000000..3a3d193
Binary files /dev/null and b/misc/builddeps/dp.linux64/bin/blind_id differ
diff --git a/misc/builddeps/dp.linux64/include/d0_blind_id/d0.h b/misc/builddeps/dp.linux64/include/d0_blind_id/d0.h
new file mode 100644 (file)
index 0000000..db7555d
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __D0_H__
+#define __D0_H__
+
+#include <unistd.h> // size_t
+
+#define EXPORT __attribute__((__visibility__("default")))
+#define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+#define BOOL int
+
+extern void *(*d0_malloc)(size_t len);
+extern void (*d0_free)(void *p);
+
+#endif
diff --git a/misc/builddeps/dp.linux64/include/d0_blind_id/d0_blind_id.h b/misc/builddeps/dp.linux64/include/d0_blind_id/d0_blind_id.h
new file mode 100644 (file)
index 0000000..d381898
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef __D0_BLIND_ID_H__
+#define __D0_BLIND_ID_H__
+
+#include "d0.h"
+
+typedef struct d0_blind_id_s d0_blind_id_t;
+typedef BOOL (*d0_fastreject_function) (const d0_blind_id_t *ctx, void *pass);
+
+EXPORT WARN_UNUSED_RESULT d0_blind_id_t *d0_blind_id_new(void);
+EXPORT void d0_blind_id_free(d0_blind_id_t *a);
+EXPORT void d0_blind_id_clear(d0_blind_id_t *ctx);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_copy(d0_blind_id_t *ctx, const d0_blind_id_t *src);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_generate_private_key(d0_blind_id_t *ctx, int k);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_generate_private_key_fastreject(d0_blind_id_t *ctx, int k, d0_fastreject_function reject, void *pass);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_read_private_key(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_read_public_key(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_write_private_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_write_public_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_fingerprint64_public_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_generate_private_id_modulus(d0_blind_id_t *ctx);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_read_private_id_modulus(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_write_private_id_modulus(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_generate_private_id_start(d0_blind_id_t *ctx);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_generate_private_id_request(d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_answer_private_id_request(const d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_finish_private_id_request(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_read_private_id_request_camouflage(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_write_private_id_request_camouflage(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_read_private_id(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_read_public_id(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_write_private_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_write_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_authenticate_with_private_id_start(d0_blind_id_t *ctx, BOOL is_first, BOOL send_modulus, char *message, size_t msglen, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_authenticate_with_private_id_challenge(d0_blind_id_t *ctx, BOOL is_first, BOOL recv_modulus, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen, BOOL *status);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_authenticate_with_private_id_response(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_authenticate_with_private_id_verify(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *msg, size_t *msglen, BOOL *status);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_fingerprint64_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen);
+EXPORT WARN_UNUSED_RESULT BOOL d0_blind_id_sessionkey_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); // can only be done after successful key exchange, this performs a modpow; key length is limited by SHA_DIGESTSIZE for now; also ONLY valid after successful d0_blind_id_authenticate_with_private_id_verify/d0_blind_id_fingerprint64_public_id
+
+EXPORT void d0_blind_id_INITIALIZE(void);
+EXPORT void d0_blind_id_SHUTDOWN(void);
+
+#endif
diff --git a/misc/builddeps/dp.linux64/include/libmodplug/it_defs.h b/misc/builddeps/dp.linux64/include/libmodplug/it_defs.h
new file mode 100644 (file)
index 0000000..89cb456
--- /dev/null
@@ -0,0 +1,134 @@
+#ifndef _ITDEFS_H_
+#define _ITDEFS_H_
+
+#pragma pack(1)
+
+typedef struct tagITFILEHEADER
+{
+       DWORD id;                       // 0x4D504D49
+       CHAR songname[26];
+       WORD reserved1;         // 0x1004
+       WORD ordnum;
+       WORD insnum;
+       WORD smpnum;
+       WORD patnum;
+       WORD cwtv;
+       WORD cmwt;
+       WORD flags;
+       WORD special;
+       BYTE globalvol;
+       BYTE mv;
+       BYTE speed;
+       BYTE tempo;
+       BYTE sep;
+       BYTE zero;
+       WORD msglength;
+       DWORD msgoffset;
+       DWORD reserved2;
+       BYTE chnpan[64];
+       BYTE chnvol[64];
+} ITFILEHEADER;
+
+
+typedef struct tagITENVELOPE
+{
+       BYTE flags;
+       BYTE num;
+       BYTE lpb;
+       BYTE lpe;
+       BYTE slb;
+       BYTE sle;
+       BYTE data[25*3];
+       BYTE reserved;
+} ITENVELOPE;
+
+// Old Impulse Instrument Format (cmwt < 0x200)
+typedef struct tagITOLDINSTRUMENT
+{
+       DWORD id;                       // IMPI = 0x49504D49
+       CHAR filename[12];      // DOS file name
+       BYTE zero;
+       BYTE flags;
+       BYTE vls;
+       BYTE vle;
+       BYTE sls;
+       BYTE sle;
+       WORD reserved1;
+       WORD fadeout;
+       BYTE nna;
+       BYTE dnc;
+       WORD trkvers;
+       BYTE nos;
+       BYTE reserved2;
+       CHAR name[26];
+       WORD reserved3[3];
+       BYTE keyboard[240];
+       BYTE volenv[200];
+       BYTE nodes[50];
+} ITOLDINSTRUMENT;
+
+
+// Impulse Instrument Format
+typedef struct tagITINSTRUMENT
+{
+       DWORD id;
+       CHAR filename[12];
+       BYTE zero;
+       BYTE nna;
+       BYTE dct;
+       BYTE dca;
+       WORD fadeout;
+       signed char pps;
+       BYTE ppc;
+       BYTE gbv;
+       BYTE dfp;
+       BYTE rv;
+       BYTE rp;
+       WORD trkvers;
+       BYTE nos;
+       BYTE reserved1;
+       CHAR name[26];
+       BYTE ifc;
+       BYTE ifr;
+       BYTE mch;
+       BYTE mpr;
+       WORD mbank;
+       BYTE keyboard[240];
+       ITENVELOPE volenv;
+       ITENVELOPE panenv;
+       ITENVELOPE pitchenv;
+       BYTE dummy[4]; // was 7, but IT v2.17 saves 554 bytes
+} ITINSTRUMENT;
+
+
+// IT Sample Format
+typedef struct ITSAMPLESTRUCT
+{
+       DWORD id;               // 0x53504D49
+       CHAR filename[12];
+       BYTE zero;
+       BYTE gvl;
+       BYTE flags;
+       BYTE vol;
+       CHAR name[26];
+       BYTE cvt;
+       BYTE dfp;
+       DWORD length;
+       DWORD loopbegin;
+       DWORD loopend;
+       DWORD C5Speed;
+       DWORD susloopbegin;
+       DWORD susloopend;
+       DWORD samplepointer;
+       BYTE vis;
+       BYTE vid;
+       BYTE vir;
+       BYTE vit;
+} ITSAMPLESTRUCT;
+
+#pragma pack()
+
+extern BYTE autovibit2xm[8];
+extern BYTE autovibxm2it[8];
+
+#endif
diff --git a/misc/builddeps/dp.linux64/include/libmodplug/modplug.h b/misc/builddeps/dp.linux64/include/libmodplug/modplug.h
new file mode 100644 (file)
index 0000000..46ea02c
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * This source code is public domain.
+ *
+ * Authors: Kenton Varda <temporal@gauge3d.org> (C interface wrapper)
+ */
+
+#ifndef MODPLUG_H__INCLUDED
+#define MODPLUG_H__INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _ModPlugFile;
+typedef struct _ModPlugFile ModPlugFile;
+
+struct _ModPlugNote {
+       unsigned char Note;
+       unsigned char Instrument;
+       unsigned char VolumeEffect;
+       unsigned char Effect;
+       unsigned char Volume;
+       unsigned char Parameter;
+};
+typedef struct _ModPlugNote ModPlugNote;
+
+typedef void (*ModPlugMixerProc)(int*, unsigned long, unsigned long);
+
+/* Load a mod file.  [data] should point to a block of memory containing the complete
+ * file, and [size] should be the size of that block.
+ * Return the loaded mod file on success, or NULL on failure. */
+ModPlugFile* ModPlug_Load(const void* data, int size);
+/* Unload a mod file. */
+void ModPlug_Unload(ModPlugFile* file);
+
+/* Read sample data into the buffer.  Returns the number of bytes read.  If the end
+ * of the mod has been reached, zero is returned. */
+int  ModPlug_Read(ModPlugFile* file, void* buffer, int size);
+
+/* Get the name of the mod.  The returned buffer is stored within the ModPlugFile
+ * structure and will remain valid until you unload the file. */
+const char* ModPlug_GetName(ModPlugFile* file);
+
+/* Get the length of the mod, in milliseconds.  Note that this result is not always
+ * accurate, especially in the case of mods with loops. */
+int ModPlug_GetLength(ModPlugFile* file);
+
+/* Seek to a particular position in the song.  Note that seeking and MODs don't mix very
+ * well.  Some mods will be missing instruments for a short time after a seek, as ModPlug
+ * does not scan the sequence backwards to find out which instruments were supposed to be
+ * playing at that time.  (Doing so would be difficult and not very reliable.)  Also,
+ * note that seeking is not very exact in some mods -- especially those for which
+ * ModPlug_GetLength() does not report the full length. */
+void ModPlug_Seek(ModPlugFile* file, int millisecond);
+
+enum _ModPlug_Flags
+{
+       MODPLUG_ENABLE_OVERSAMPLING     = 1 << 0,  /* Enable oversampling (*highly* recommended) */
+       MODPLUG_ENABLE_NOISE_REDUCTION  = 1 << 1,  /* Enable noise reduction */
+       MODPLUG_ENABLE_REVERB           = 1 << 2,  /* Enable reverb */
+       MODPLUG_ENABLE_MEGABASS         = 1 << 3,  /* Enable megabass */
+       MODPLUG_ENABLE_SURROUND         = 1 << 4   /* Enable surround sound. */
+};
+
+enum _ModPlug_ResamplingMode
+{
+       MODPLUG_RESAMPLE_NEAREST = 0,  /* No interpolation (very fast, extremely bad sound quality) */
+       MODPLUG_RESAMPLE_LINEAR  = 1,  /* Linear interpolation (fast, good quality) */
+       MODPLUG_RESAMPLE_SPLINE  = 2,  /* Cubic spline interpolation (high quality) */
+       MODPLUG_RESAMPLE_FIR     = 3   /* 8-tap fir filter (extremely high quality) */
+};
+
+typedef struct _ModPlug_Settings
+{
+       int mFlags;  /* One or more of the MODPLUG_ENABLE_* flags above, bitwise-OR'ed */
+       
+       /* Note that ModPlug always decodes sound at 44100kHz, 32 bit, stereo and then
+        * down-mixes to the settings you choose. */
+       int mChannels;       /* Number of channels - 1 for mono or 2 for stereo */
+       int mBits;           /* Bits per sample - 8, 16, or 32 */
+       int mFrequency;      /* Sampling rate - 11025, 22050, or 44100 */
+       int mResamplingMode; /* One of MODPLUG_RESAMPLE_*, above */
+
+       int mStereoSeparation; /* Stereo separation, 1 - 256 */
+       int mMaxMixChannels; /* Maximum number of mixing channels (polyphony), 32 - 256 */
+       
+       int mReverbDepth;    /* Reverb level 0(quiet)-100(loud)      */
+       int mReverbDelay;    /* Reverb delay in ms, usually 40-200ms */
+       int mBassAmount;     /* XBass level 0(quiet)-100(loud)       */
+       int mBassRange;      /* XBass cutoff in Hz 10-100            */
+       int mSurroundDepth;  /* Surround level 0(quiet)-100(heavy)   */
+       int mSurroundDelay;  /* Surround delay in ms, usually 5-40ms */
+       int mLoopCount;      /* Number of times to loop.  Zero prevents looping.
+                               -1 loops forever. */
+} ModPlug_Settings;
+
+/* Get and set the mod decoder settings.  All options, except for channels, bits-per-sample,
+ * sampling rate, and loop count, will take effect immediately.  Those options which don't
+ * take effect immediately will take effect the next time you load a mod. */
+void ModPlug_GetSettings(ModPlug_Settings* settings);
+void ModPlug_SetSettings(const ModPlug_Settings* settings);
+
+/* New ModPlug API Functions */
+/* NOTE: Master Volume (1-512) */
+unsigned int ModPlug_GetMasterVolume(ModPlugFile* file) ;
+void ModPlug_SetMasterVolume(ModPlugFile* file,unsigned int cvol) ;
+
+int ModPlug_GetCurrentSpeed(ModPlugFile* file);
+int ModPlug_GetCurrentTempo(ModPlugFile* file);
+int ModPlug_GetCurrentOrder(ModPlugFile* file);
+int ModPlug_GetCurrentPattern(ModPlugFile* file);
+int ModPlug_GetCurrentRow(ModPlugFile* file);
+int ModPlug_GetPlayingChannels(ModPlugFile* file);
+
+void ModPlug_SeekOrder(ModPlugFile* file,int order);
+int ModPlug_GetModuleType(ModPlugFile* file);
+char* ModPlug_GetMessage(ModPlugFile* file);
+
+
+#ifndef MODPLUG_NO_FILESAVE
+/*
+ * EXPERIMENTAL Export Functions
+ */
+/*Export to a Scream Tracker 3 S3M module. EXPERIMENTAL (only works on Little-Endian platforms)*/
+char ModPlug_ExportS3M(ModPlugFile* file, const char* filepath);
+
+/*Export to a Extended Module (XM). EXPERIMENTAL (only works on Little-Endian platforms)*/
+char ModPlug_ExportXM(ModPlugFile* file, const char* filepath);
+
+/*Export to a Amiga MOD file. EXPERIMENTAL.*/
+char ModPlug_ExportMOD(ModPlugFile* file, const char* filepath);
+
+/*Export to a Impulse Tracker IT file. Should work OK in Little-Endian & Big-Endian platforms :-) */
+char ModPlug_ExportIT(ModPlugFile* file, const char* filepath);
+#endif // MODPLUG_NO_FILESAVE
+
+unsigned int ModPlug_NumInstruments(ModPlugFile* file);
+unsigned int ModPlug_NumSamples(ModPlugFile* file);
+unsigned int ModPlug_NumPatterns(ModPlugFile* file);
+unsigned int ModPlug_NumChannels(ModPlugFile* file);
+unsigned int ModPlug_SampleName(ModPlugFile* file, unsigned int qual, char* buff);
+unsigned int ModPlug_InstrumentName(ModPlugFile* file, unsigned int qual, char* buff);
+
+/*
+ * Retrieve pattern note-data
+ */
+ModPlugNote* ModPlug_GetPattern(ModPlugFile* file, int pattern, unsigned int* numrows);
+
+/*
+ * =================
+ * Mixer callback
+ * =================
+ *
+ * Use this callback if you want to 'modify' the mixed data of LibModPlug.
+ * 
+ * void proc(int* buffer,unsigned long channels,unsigned long nsamples) ;
+ *
+ * 'buffer': A buffer of mixed samples
+ * 'channels': N. of channels in the buffer
+ * 'nsamples': N. of samples in the buffeer (without taking care of n.channels)
+ *
+ * (Samples are signed 32-bit integers)
+ */
+void ModPlug_InitMixerCallback(ModPlugFile* file,ModPlugMixerProc proc) ;
+void ModPlug_UnloadMixerCallback(ModPlugFile* file) ;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/misc/builddeps/dp.linux64/include/libmodplug/sndfile.h b/misc/builddeps/dp.linux64/include/libmodplug/sndfile.h
new file mode 100644 (file)
index 0000000..ed7d47e
--- /dev/null
@@ -0,0 +1,1017 @@
+/*
+ * This source code is public domain.
+ *
+ * Authors: Olivier Lapicque <olivierl@jps.net>,
+ *          Adam Goode       <adam@evdebs.org> (endian and char fixes for PPC)
+*/
+
+#if defined(HAVE_CONFIG_H) && !defined(CONFIG_H_INCLUDED)
+#include "config.h"
+#define CONFIG_H_INCLUDED 1
+#endif
+
+#ifndef __SNDFILE_H
+#define __SNDFILE_H
+
+#ifdef UNDER_CE
+int _strnicmp(const char *str1,const char *str2, int n);
+#endif
+
+#ifndef LPCBYTE
+typedef const BYTE * LPCBYTE;
+#endif
+
+#define MOD_AMIGAC2                    0x1AB
+#define MAX_SAMPLE_LENGTH      16000000
+#define MAX_SAMPLE_RATE                192000
+#define MAX_ORDERS                     256
+#define MAX_PATTERNS           240
+#define MAX_SAMPLES                    240
+#define MAX_INSTRUMENTS                MAX_SAMPLES
+#ifdef MODPLUG_FASTSOUNDLIB
+#define MAX_CHANNELS           80
+#else
+#define MAX_CHANNELS           128
+#endif
+#define MAX_BASECHANNELS       64
+#define MAX_ENVPOINTS          32
+#define MIN_PERIOD                     0x0020
+#define MAX_PERIOD                     0xFFFF
+#define MAX_PATTERNNAME                32
+#define MAX_CHANNELNAME                20
+#define MAX_INFONAME           80
+#define MAX_EQ_BANDS           6
+#define MAX_MIXPLUGINS         8
+
+
+#define MOD_TYPE_NONE          0x00
+#define MOD_TYPE_MOD           0x01
+#define MOD_TYPE_S3M           0x02
+#define MOD_TYPE_XM                    0x04
+#define MOD_TYPE_MED           0x08
+#define MOD_TYPE_MTM           0x10
+#define MOD_TYPE_IT                    0x20
+#define MOD_TYPE_669           0x40
+#define MOD_TYPE_ULT           0x80
+#define MOD_TYPE_STM           0x100
+#define MOD_TYPE_FAR           0x200
+#define MOD_TYPE_WAV           0x400
+#define MOD_TYPE_AMF           0x800
+#define MOD_TYPE_AMS           0x1000
+#define MOD_TYPE_DSM           0x2000
+#define MOD_TYPE_MDL           0x4000
+#define MOD_TYPE_OKT           0x8000
+#define MOD_TYPE_MID           0x10000
+#define MOD_TYPE_DMF           0x20000
+#define MOD_TYPE_PTM           0x40000
+#define MOD_TYPE_DBM           0x80000
+#define MOD_TYPE_MT2           0x100000
+#define MOD_TYPE_AMF0          0x200000
+#define MOD_TYPE_PSM           0x400000
+#define MOD_TYPE_J2B           0x800000
+#define MOD_TYPE_ABC           0x1000000
+#define MOD_TYPE_PAT           0x2000000
+#define MOD_TYPE_UMX           0x80000000 // Fake type
+#define MAX_MODTYPE            24
+
+
+
+// Channel flags:
+// Bits 0-7:   Sample Flags
+#define CHN_16BIT               0x01
+#define CHN_LOOP                0x02
+#define CHN_PINGPONGLOOP        0x04
+#define CHN_SUSTAINLOOP         0x08
+#define CHN_PINGPONGSUSTAIN     0x10
+#define CHN_PANNING             0x20
+#define CHN_STEREO              0x40
+#define CHN_PINGPONGFLAG       0x80
+// Bits 8-31:  Channel Flags
+#define CHN_MUTE                0x100
+#define CHN_KEYOFF              0x200
+#define CHN_NOTEFADE           0x400
+#define CHN_SURROUND            0x800
+#define CHN_NOIDO               0x1000
+#define CHN_HQSRC               0x2000
+#define CHN_FILTER              0x4000
+#define CHN_VOLUMERAMP         0x8000
+#define CHN_VIBRATO             0x10000
+#define CHN_TREMOLO             0x20000
+#define CHN_PANBRELLO          0x40000
+#define CHN_PORTAMENTO         0x80000
+#define CHN_GLISSANDO          0x100000
+#define CHN_VOLENV              0x200000
+#define CHN_PANENV              0x400000
+#define CHN_PITCHENV           0x800000
+#define CHN_FASTVOLRAMP                0x1000000
+#define CHN_EXTRALOUD          0x2000000
+#define CHN_REVERB              0x4000000
+#define CHN_NOREVERB           0x8000000
+
+
+#define ENV_VOLUME              0x0001
+#define ENV_VOLSUSTAIN         0x0002
+#define ENV_VOLLOOP             0x0004
+#define ENV_PANNING             0x0008
+#define ENV_PANSUSTAIN         0x0010
+#define ENV_PANLOOP             0x0020
+#define ENV_PITCH               0x0040
+#define ENV_PITCHSUSTAIN       0x0080
+#define ENV_PITCHLOOP          0x0100
+#define ENV_SETPANNING         0x0200
+#define ENV_FILTER              0x0400
+#define ENV_VOLCARRY           0x0800
+#define ENV_PANCARRY           0x1000
+#define ENV_PITCHCARRY         0x2000
+
+#define CMD_NONE                        0
+#define CMD_ARPEGGIO                   1
+#define CMD_PORTAMENTOUP               2
+#define CMD_PORTAMENTODOWN             3
+#define CMD_TONEPORTAMENTO             4
+#define CMD_VIBRATO                     5
+#define CMD_TONEPORTAVOL               6
+#define CMD_VIBRATOVOL                 7
+#define CMD_TREMOLO                     8
+#define CMD_PANNING8                   9
+#define CMD_OFFSET                      10
+#define CMD_VOLUMESLIDE                        11
+#define CMD_POSITIONJUMP               12
+#define CMD_VOLUME                      13
+#define CMD_PATTERNBREAK               14
+#define CMD_RETRIG                      15
+#define CMD_SPEED                       16
+#define CMD_TEMPO                       17
+#define CMD_TREMOR                      18
+#define CMD_MODCMDEX                   19
+#define CMD_S3MCMDEX                   20
+#define CMD_CHANNELVOLUME              21
+#define CMD_CHANNELVOLSLIDE            22
+#define CMD_GLOBALVOLUME               23
+#define CMD_GLOBALVOLSLIDE             24
+#define CMD_KEYOFF                      25
+#define CMD_FINEVIBRATO                        26
+#define CMD_PANBRELLO                  27
+#define CMD_XFINEPORTAUPDOWN            28
+#define CMD_PANNINGSLIDE               29
+#define CMD_SETENVPOSITION             30
+#define CMD_MIDI                        31
+
+
+// Volume Column commands
+#define VOLCMD_VOLUME                  1
+#define VOLCMD_PANNING                 2
+#define VOLCMD_VOLSLIDEUP              3
+#define VOLCMD_VOLSLIDEDOWN            4
+#define VOLCMD_FINEVOLUP               5
+#define VOLCMD_FINEVOLDOWN             6
+#define VOLCMD_VIBRATOSPEED            7
+#define VOLCMD_VIBRATO                 8
+#define VOLCMD_PANSLIDELEFT            9
+#define VOLCMD_PANSLIDERIGHT           10
+#define VOLCMD_TONEPORTAMENTO          11
+#define VOLCMD_PORTAUP                 12
+#define VOLCMD_PORTADOWN               13
+
+#define RSF_16BIT              0x04
+#define RSF_STEREO             0x08
+
+#define RS_PCM8S               0       // 8-bit signed
+#define RS_PCM8U               1       // 8-bit unsigned
+#define RS_PCM8D               2       // 8-bit delta values
+#define RS_ADPCM4              3       // 4-bit ADPCM-packed
+#define RS_PCM16D              4       // 16-bit delta values
+#define RS_PCM16S              5       // 16-bit signed
+#define RS_PCM16U              6       // 16-bit unsigned
+#define RS_PCM16M              7       // 16-bit motorola order
+#define RS_STPCM8S             (RS_PCM8S|RSF_STEREO)  // stereo 8-bit signed
+#define RS_STPCM8U             (RS_PCM8U|RSF_STEREO)  // stereo 8-bit unsigned
+#define RS_STPCM8D             (RS_PCM8D|RSF_STEREO)  // stereo 8-bit delta values
+#define RS_STPCM16S            (RS_PCM16S|RSF_STEREO) // stereo 16-bit signed
+#define RS_STPCM16U            (RS_PCM16U|RSF_STEREO) // stereo 16-bit unsigned
+#define RS_STPCM16D            (RS_PCM16D|RSF_STEREO) // stereo 16-bit delta values
+#define RS_STPCM16M            (RS_PCM16M|RSF_STEREO) // stereo 16-bit signed big endian
+// IT 2.14 compressed samples
+#define RS_IT2148              0x10
+#define RS_IT21416             0x14
+#define RS_IT2158              0x12
+#define RS_IT21516             0x16
+// AMS Packed Samples
+#define RS_AMS8                        0x11
+#define RS_AMS16               0x15
+// DMF Huffman compression
+#define RS_DMF8                        0x13
+#define RS_DMF16               0x17
+// MDL Huffman compression
+#define RS_MDL8                        0x20
+#define RS_MDL16               0x24
+#define RS_PTM8DTO16   0x25
+// Stereo Interleaved Samples
+#define RS_STIPCM8S            (RS_PCM8S|0x40|RSF_STEREO)      // stereo 8-bit signed
+#define RS_STIPCM8U            (RS_PCM8U|0x40|RSF_STEREO)      // stereo 8-bit unsigned
+#define RS_STIPCM16S   (RS_PCM16S|0x40|RSF_STEREO)     // stereo 16-bit signed
+#define RS_STIPCM16U   (RS_PCM16U|0x40|RSF_STEREO)     // stereo 16-bit unsigned
+#define RS_STIPCM16M   (RS_PCM16M|0x40|RSF_STEREO)     // stereo 16-bit signed big endian
+// 24-bit signed
+#define RS_PCM24S              (RS_PCM16S|0x80)                        // mono 24-bit signed
+#define RS_STIPCM24S   (RS_PCM16S|0x80|RSF_STEREO)     // stereo 24-bit signed
+#define RS_PCM32S              (RS_PCM16S|0xC0)                        // mono 24-bit signed
+#define RS_STIPCM32S   (RS_PCM16S|0xC0|RSF_STEREO)     // stereo 24-bit signed
+
+// NNA types
+#define NNA_NOTECUT            0
+#define NNA_CONTINUE   1
+#define NNA_NOTEOFF            2
+#define NNA_NOTEFADE   3
+
+// DCT types
+#define DCT_NONE               0
+#define DCT_NOTE               1
+#define DCT_SAMPLE             2
+#define DCT_INSTRUMENT 3
+
+// DNA types
+#define DNA_NOTECUT            0
+#define DNA_NOTEOFF            1
+#define DNA_NOTEFADE   2
+
+// Mixer Hardware-Dependent features
+#define SYSMIX_ENABLEMMX       0x01
+#define SYSMIX_WINDOWSNT       0x02
+#define SYSMIX_SLOWCPU         0x04
+#define SYSMIX_FASTCPU         0x08
+
+// Module flags
+#define SONG_EMBEDMIDICFG      0x0001
+#define SONG_FASTVOLSLIDES     0x0002
+#define SONG_ITOLDEFFECTS      0x0004
+#define SONG_ITCOMPATMODE      0x0008
+#define SONG_LINEARSLIDES      0x0010
+#define SONG_PATTERNLOOP       0x0020
+#define SONG_STEP                      0x0040
+#define SONG_PAUSED                    0x0080
+#define SONG_FADINGSONG                0x0100
+#define SONG_ENDREACHED                0x0200
+#define SONG_GLOBALFADE                0x0400
+#define SONG_CPUVERYHIGH       0x0800
+#define SONG_FIRSTTICK         0x1000
+#define SONG_MPTFILTERMODE     0x2000
+#define SONG_SURROUNDPAN       0x4000
+#define SONG_EXFILTERRANGE     0x8000
+#define SONG_AMIGALIMITS       0x10000
+
+// Global Options (Renderer)
+#define SNDMIX_REVERSESTEREO   0x0001
+#define SNDMIX_NOISEREDUCTION  0x0002
+#define SNDMIX_AGC                             0x0004
+#define SNDMIX_NORESAMPLING            0x0008
+#define SNDMIX_HQRESAMPLER             0x0010
+#define SNDMIX_MEGABASS                        0x0020
+#define SNDMIX_SURROUND                        0x0040
+#define SNDMIX_REVERB                  0x0080
+#define SNDMIX_EQ                              0x0100
+#define SNDMIX_SOFTPANNING             0x0200
+#define SNDMIX_ULTRAHQSRCMODE  0x0400
+// Misc Flags (can safely be turned on or off)
+#define SNDMIX_DIRECTTODISK            0x10000
+#define SNDMIX_ENABLEMMX               0x20000
+#define SNDMIX_NOBACKWARDJUMPS 0x40000
+#define SNDMIX_MAXDEFAULTPAN   0x80000 // Used by the MOD loader
+
+
+// Reverb Types (GM2 Presets)
+enum {
+       REVERBTYPE_SMALLROOM,
+       REVERBTYPE_MEDIUMROOM,
+       REVERBTYPE_LARGEROOM,
+       REVERBTYPE_SMALLHALL,
+       REVERBTYPE_MEDIUMHALL,
+       REVERBTYPE_LARGEHALL,
+       NUM_REVERBTYPES
+};
+
+
+enum {
+       SRCMODE_NEAREST,
+       SRCMODE_LINEAR,
+       SRCMODE_SPLINE,
+       SRCMODE_POLYPHASE,
+       NUM_SRC_MODES
+};
+
+
+// Sample Struct
+typedef struct _MODINSTRUMENT
+{
+       UINT nLength,nLoopStart,nLoopEnd;
+       UINT nSustainStart, nSustainEnd;
+       signed char *pSample;
+       UINT nC4Speed;
+       WORD nPan;
+       WORD nVolume;
+       WORD nGlobalVol;
+       WORD uFlags;
+       signed char RelativeTone;
+       signed char nFineTune;
+       BYTE nVibType;
+       BYTE nVibSweep;
+       BYTE nVibDepth;
+       BYTE nVibRate;
+       CHAR name[22];
+} MODINSTRUMENT;
+
+
+// Instrument Struct
+typedef struct _INSTRUMENTHEADER
+{
+       UINT nFadeOut;
+       DWORD dwFlags;
+       WORD nGlobalVol;
+       WORD nPan;
+       WORD VolPoints[MAX_ENVPOINTS];
+       WORD PanPoints[MAX_ENVPOINTS];
+       WORD PitchPoints[MAX_ENVPOINTS];
+       BYTE VolEnv[MAX_ENVPOINTS];
+       BYTE PanEnv[MAX_ENVPOINTS];
+       BYTE PitchEnv[MAX_ENVPOINTS];
+       BYTE Keyboard[128];
+       BYTE NoteMap[128];
+
+       BYTE nVolEnv;
+       BYTE nPanEnv;
+       BYTE nPitchEnv;
+       BYTE nVolLoopStart;
+       BYTE nVolLoopEnd;
+       BYTE nVolSustainBegin;
+       BYTE nVolSustainEnd;
+       BYTE nPanLoopStart;
+       BYTE nPanLoopEnd;
+       BYTE nPanSustainBegin;
+       BYTE nPanSustainEnd;
+       BYTE nPitchLoopStart;
+       BYTE nPitchLoopEnd;
+       BYTE nPitchSustainBegin;
+       BYTE nPitchSustainEnd;
+       BYTE nNNA;
+       BYTE nDCT;
+       BYTE nDNA;
+       BYTE nPanSwing;
+       BYTE nVolSwing;
+       BYTE nIFC;
+       BYTE nIFR;
+       WORD wMidiBank;
+       BYTE nMidiProgram;
+       BYTE nMidiChannel;
+       BYTE nMidiDrumKey;
+       signed char nPPS;
+       unsigned char nPPC;
+       CHAR name[32];
+       CHAR filename[12];
+} INSTRUMENTHEADER;
+
+
+// Channel Struct
+typedef struct _MODCHANNEL
+{
+       // First 32-bytes: Most used mixing information: don't change it
+       signed char * pCurrentSample;
+       DWORD nPos;
+       DWORD nPosLo;   // actually 16-bit
+       LONG nInc;              // 16.16
+       LONG nRightVol;
+       LONG nLeftVol;
+       LONG nRightRamp;
+       LONG nLeftRamp;
+       // 2nd cache line
+       DWORD nLength;
+       DWORD dwFlags;
+       DWORD nLoopStart;
+       DWORD nLoopEnd;
+       LONG nRampRightVol;
+       LONG nRampLeftVol;
+       LONG nFilter_Y1, nFilter_Y2, nFilter_Y3, nFilter_Y4;
+       LONG nFilter_A0, nFilter_B0, nFilter_B1;
+       LONG nROfs, nLOfs;
+       LONG nRampLength;
+       // Information not used in the mixer
+       signed char * pSample;
+       LONG nNewRightVol, nNewLeftVol;
+       LONG nRealVolume, nRealPan;
+       LONG nVolume, nPan, nFadeOutVol;
+       LONG nPeriod, nC4Speed, nPortamentoDest;
+       INSTRUMENTHEADER *pHeader;
+       MODINSTRUMENT *pInstrument;
+       DWORD nVolEnvPosition, nPanEnvPosition, nPitchEnvPosition;
+       DWORD nMasterChn, nVUMeter;
+       LONG nGlobalVol, nInsVol;
+       LONG nFineTune, nTranspose;
+       LONG nPortamentoSlide, nAutoVibDepth;
+       UINT nAutoVibPos, nVibratoPos, nTremoloPos, nPanbrelloPos;
+       // 16-bit members
+       signed short nVolSwing, nPanSwing;
+       // 8-bit members
+       BYTE nNote, nNNA;
+       BYTE nNewNote, nNewIns, nCommand, nArpeggio;
+       BYTE nOldVolumeSlide, nOldFineVolUpDown;
+       BYTE nOldPortaUpDown, nOldFinePortaUpDown;
+       BYTE nOldPanSlide, nOldChnVolSlide;
+       BYTE nVibratoType, nVibratoSpeed, nVibratoDepth;
+       BYTE nTremoloType, nTremoloSpeed, nTremoloDepth;
+       BYTE nPanbrelloType, nPanbrelloSpeed, nPanbrelloDepth;
+       BYTE nOldCmdEx, nOldVolParam, nOldTempo;
+       BYTE nOldOffset, nOldHiOffset;
+       BYTE nCutOff, nResonance;
+       BYTE nRetrigCount, nRetrigParam;
+       BYTE nTremorCount, nTremorParam;
+       BYTE nPatternLoop, nPatternLoopCount;
+       BYTE nRowNote, nRowInstr;
+       BYTE nRowVolCmd, nRowVolume;
+       BYTE nRowCommand, nRowParam;
+       BYTE nLeftVU, nRightVU;
+       BYTE nActiveMacro, nPadding;
+} MODCHANNEL;
+
+
+typedef struct _MODCHANNELSETTINGS
+{
+       UINT nPan;
+       UINT nVolume;
+       DWORD dwFlags;
+       UINT nMixPlugin;
+        char szName[MAX_CHANNELNAME];        // changed from CHAR
+} MODCHANNELSETTINGS;
+
+
+typedef struct _MODCOMMAND
+{
+       BYTE note;
+       BYTE instr;
+       BYTE volcmd;
+       BYTE command;
+       BYTE vol;
+       BYTE param;
+} MODCOMMAND, *LPMODCOMMAND;
+
+////////////////////////////////////////////////////////////////////
+// Mix Plugins
+#define MIXPLUG_MIXREADY                       0x01    // Set when cleared
+
+class IMixPlugin
+{
+public:
+       virtual ~IMixPlugin();
+       virtual int AddRef() = 0;
+       virtual int Release() = 0;
+       virtual void SaveAllParameters() = 0;
+       virtual void RestoreAllParameters() = 0;
+       virtual void Process(float *pOutL, float *pOutR, unsigned long nSamples) = 0;
+       virtual void Init(unsigned long nFreq, int bReset) = 0;
+       virtual void MidiSend(DWORD dwMidiCode) = 0;
+       virtual void MidiCommand(UINT nMidiCh, UINT nMidiProg, UINT note, UINT vol) = 0;
+};
+
+
+#define MIXPLUG_INPUTF_MASTEREFFECT            0x01    // Apply to master mix
+#define MIXPLUG_INPUTF_BYPASS                  0x02    // Bypass effect
+#define MIXPLUG_INPUTF_WETMIX                  0x04    // Wet Mix (dry added)
+
+typedef struct _SNDMIXPLUGINSTATE
+{
+       DWORD dwFlags;                                  // MIXPLUG_XXXX
+       LONG nVolDecayL, nVolDecayR;    // Buffer click removal
+       int *pMixBuffer;                                // Stereo effect send buffer
+       float *pOutBufferL;                             // Temp storage for int -> float conversion
+       float *pOutBufferR;
+} SNDMIXPLUGINSTATE, *PSNDMIXPLUGINSTATE;
+
+typedef struct _SNDMIXPLUGININFO
+{
+       DWORD dwPluginId1;
+       DWORD dwPluginId2;
+       DWORD dwInputRouting;   // MIXPLUG_INPUTF_XXXX
+       DWORD dwOutputRouting;  // 0=mix 0x80+=fx
+       DWORD dwReserved[4];    // Reserved for routing info
+       CHAR szName[32];
+       CHAR szLibraryName[64]; // original DLL name
+} SNDMIXPLUGININFO, *PSNDMIXPLUGININFO; // Size should be 128
+
+typedef struct _SNDMIXPLUGIN
+{
+       IMixPlugin *pMixPlugin;
+       PSNDMIXPLUGINSTATE pMixState;
+       ULONG nPluginDataSize;
+       PVOID pPluginData;
+       SNDMIXPLUGININFO Info;
+} SNDMIXPLUGIN, *PSNDMIXPLUGIN;
+
+typedef        BOOL (*PMIXPLUGINCREATEPROC)(PSNDMIXPLUGIN);
+
+////////////////////////////////////////////////////////////////////
+
+enum {
+       MIDIOUT_START=0,
+       MIDIOUT_STOP,
+       MIDIOUT_TICK,
+       MIDIOUT_NOTEON,
+       MIDIOUT_NOTEOFF,
+       MIDIOUT_VOLUME,
+       MIDIOUT_PAN,
+       MIDIOUT_BANKSEL,
+       MIDIOUT_PROGRAM,
+};
+
+
+typedef struct MODMIDICFG
+{
+        char szMidiGlb[9*32];      // changed from CHAR
+        char szMidiSFXExt[16*32];  // changed from CHAR
+        char szMidiZXXExt[128*32]; // changed from CHAR
+} MODMIDICFG, *LPMODMIDICFG;
+
+#define NOTE_MAX                        120 //Defines maximum notevalue as well as maximum number of notes.
+
+typedef VOID (* LPSNDMIXHOOKPROC)(int *, unsigned long, unsigned long); // buffer, samples, channels
+
+
+
+//==============
+class CSoundFile
+//==============
+{
+public:        // Static Members
+       static UINT m_nXBassDepth, m_nXBassRange;
+       static UINT m_nReverbDepth, m_nReverbDelay, gnReverbType;
+       static UINT m_nProLogicDepth, m_nProLogicDelay;
+       static UINT m_nStereoSeparation;
+       static UINT m_nMaxMixChannels;
+       static LONG m_nStreamVolume;
+       static DWORD gdwSysInfo, gdwSoundSetup, gdwMixingFreq, gnBitsPerSample, gnChannels;
+       static UINT gnAGC, gnVolumeRampSamples, gnVUMeter, gnCPUUsage;
+       static LPSNDMIXHOOKPROC gpSndMixHook;
+       static PMIXPLUGINCREATEPROC gpMixPluginCreateProc;
+
+public:        // for Editing
+       MODCHANNEL Chn[MAX_CHANNELS];                                   // Channels
+       UINT ChnMix[MAX_CHANNELS];                                              // Channels to be mixed
+       MODINSTRUMENT Ins[MAX_SAMPLES];                                 // Instruments
+       INSTRUMENTHEADER *Headers[MAX_INSTRUMENTS];             // Instrument Headers
+       MODCHANNELSETTINGS ChnSettings[MAX_BASECHANNELS]; // Channels settings
+       MODCOMMAND *Patterns[MAX_PATTERNS];                             // Patterns
+       WORD PatternSize[MAX_PATTERNS];                                 // Patterns Lengths
+       BYTE Order[MAX_ORDERS];                                                 // Pattern Orders
+       MODMIDICFG m_MidiCfg;                                                   // Midi macro config table
+       SNDMIXPLUGIN m_MixPlugins[MAX_MIXPLUGINS];              // Mix plugins
+       UINT m_nDefaultSpeed, m_nDefaultTempo, m_nDefaultGlobalVolume;
+       DWORD m_dwSongFlags;                                                    // Song flags SONG_XXXX
+       UINT m_nChannels, m_nMixChannels, m_nMixStat, m_nBufferCount;
+       UINT m_nType, m_nSamples, m_nInstruments;
+       UINT m_nTickCount, m_nTotalCount, m_nPatternDelay, m_nFrameDelay;
+       UINT m_nMusicSpeed, m_nMusicTempo;
+       UINT m_nNextRow, m_nRow;
+       UINT m_nPattern,m_nCurrentPattern,m_nNextPattern,m_nRestartPos;
+       UINT m_nMasterVolume, m_nGlobalVolume, m_nSongPreAmp;
+       UINT m_nFreqFactor, m_nTempoFactor, m_nOldGlbVolSlide;
+       LONG m_nMinPeriod, m_nMaxPeriod, m_nRepeatCount, m_nInitialRepeatCount;
+       DWORD m_nGlobalFadeSamples, m_nGlobalFadeMaxSamples;
+       UINT m_nMaxOrderPosition;
+       UINT m_nPatternNames;
+       LPSTR m_lpszSongComments, m_lpszPatternNames;
+       char m_szNames[MAX_INSTRUMENTS][32];    // changed from CHAR
+       CHAR CompressionTable[16];
+
+public:
+       CSoundFile();
+       ~CSoundFile();
+
+public:
+       BOOL Create(LPCBYTE lpStream, DWORD dwMemLength=0);
+       BOOL Destroy();
+       UINT GetType() const { return m_nType; }
+       UINT GetNumChannels() const;
+       UINT GetLogicalChannels() const { return m_nChannels; }
+       BOOL SetMasterVolume(UINT vol, BOOL bAdjustAGC=FALSE);
+       UINT GetMasterVolume() const { return m_nMasterVolume; }
+       UINT GetNumPatterns() const;
+       UINT GetNumInstruments() const;
+       UINT GetNumSamples() const { return m_nSamples; }
+       UINT GetCurrentPos() const;
+       UINT GetCurrentPattern() const { return m_nPattern; }
+       UINT GetCurrentOrder() const { return m_nCurrentPattern; }
+       UINT GetSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
+       UINT GetRawSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
+       UINT GetMaxPosition() const;
+       void SetCurrentPos(UINT nPos);
+       void SetCurrentOrder(UINT nOrder);
+       void GetTitle(LPSTR s) const { lstrcpyn(s,m_szNames[0],32); }
+       LPCSTR GetTitle() const { return m_szNames[0]; }
+       UINT GetSampleName(UINT nSample,LPSTR s=NULL) const;
+       UINT GetInstrumentName(UINT nInstr,LPSTR s=NULL) const;
+       UINT GetMusicSpeed() const { return m_nMusicSpeed; }
+       UINT GetMusicTempo() const { return m_nMusicTempo; }
+       DWORD GetLength(BOOL bAdjust, BOOL bTotal=FALSE);
+       DWORD GetSongTime() { return GetLength(FALSE, TRUE); }
+       void SetRepeatCount(int n) { m_nRepeatCount = n; m_nInitialRepeatCount = n; }
+       int GetRepeatCount() const { return m_nRepeatCount; }
+       BOOL IsPaused() const { return (m_dwSongFlags & SONG_PAUSED) ? TRUE : FALSE; }
+       void LoopPattern(int nPat, int nRow=0);
+       void CheckCPUUsage(UINT nCPU);
+       BOOL SetPatternName(UINT nPat, LPCSTR lpszName);
+       BOOL GetPatternName(UINT nPat, LPSTR lpszName, UINT cbSize=MAX_PATTERNNAME) const;
+       // Module Loaders
+       BOOL ReadXM(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadS3M(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadMod(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadMed(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadMTM(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadSTM(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadIT(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL Read669(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadUlt(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadWav(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadDSM(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadFAR(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadAMS(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadAMS2(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadMDL(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadOKT(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadDMF(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadPTM(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadDBM(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadAMF(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadMT2(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadPSM(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadJ2B(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadUMX(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadABC(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL TestABC(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadMID(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL TestMID(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL ReadPAT(LPCBYTE lpStream, DWORD dwMemLength);
+       BOOL TestPAT(LPCBYTE lpStream, DWORD dwMemLength);
+       // Save Functions
+#ifndef MODPLUG_NO_FILESAVE
+       UINT WriteSample(FILE *f, MODINSTRUMENT *pins, UINT nFlags, UINT nMaxLen=0);
+       BOOL SaveXM(LPCSTR lpszFileName, UINT nPacking=0);
+       BOOL SaveS3M(LPCSTR lpszFileName, UINT nPacking=0);
+       BOOL SaveMod(LPCSTR lpszFileName, UINT nPacking=0);
+       BOOL SaveIT(LPCSTR lpszFileName, UINT nPacking=0);
+#endif // MODPLUG_NO_FILESAVE
+       // MOD Convert function
+       UINT GetBestSaveFormat() const;
+       UINT GetSaveFormats() const;
+       void ConvertModCommand(MODCOMMAND *) const;
+       void S3MConvert(MODCOMMAND *m, BOOL bIT) const;
+       void S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT) const;
+       WORD ModSaveCommand(const MODCOMMAND *m, BOOL bXM) const;
+
+public:
+       // Real-time sound functions
+       VOID ResetChannels();
+
+       UINT Read(LPVOID lpBuffer, UINT cbBuffer);
+       UINT CreateStereoMix(int count);
+       BOOL FadeSong(UINT msec);
+       BOOL GlobalFadeSong(UINT msec);
+       UINT GetTotalTickCount() const { return m_nTotalCount; }
+       VOID ResetTotalTickCount() { m_nTotalCount = 0; }
+
+public:
+       // Mixer Config
+       static BOOL InitPlayer(BOOL bReset=FALSE);
+       static BOOL SetMixConfig(UINT nStereoSeparation, UINT nMaxMixChannels);
+       static BOOL SetWaveConfig(UINT nRate,UINT nBits,UINT nChannels,BOOL bMMX=FALSE);
+       static BOOL SetResamplingMode(UINT nMode); // SRCMODE_XXXX
+       static BOOL IsStereo() { return (gnChannels > 1) ? TRUE : FALSE; }
+       static DWORD GetSampleRate() { return gdwMixingFreq; }
+       static DWORD GetBitsPerSample() { return gnBitsPerSample; }
+       static DWORD InitSysInfo();
+       static DWORD GetSysInfo() { return gdwSysInfo; }
+       // AGC
+       static BOOL GetAGC() { return (gdwSoundSetup & SNDMIX_AGC) ? TRUE : FALSE; }
+       static void SetAGC(BOOL b);
+       static void ResetAGC();
+       static void ProcessAGC(int count);
+
+       //GCCFIX -- added these functions back in!
+       static BOOL SetWaveConfigEx(BOOL bSurround,BOOL bNoOverSampling,BOOL bReverb,BOOL hqido,BOOL bMegaBass,BOOL bNR,BOOL bEQ);
+       // DSP Effects
+       static void InitializeDSP(BOOL bReset);
+       static void ProcessStereoDSP(int count);
+       static void ProcessMonoDSP(int count);
+       // [Reverb level 0(quiet)-100(loud)], [delay in ms, usually 40-200ms]
+       static BOOL SetReverbParameters(UINT nDepth, UINT nDelay);
+       // [XBass level 0(quiet)-100(loud)], [cutoff in Hz 10-100]
+       static BOOL SetXBassParameters(UINT nDepth, UINT nRange);
+       // [Surround level 0(quiet)-100(heavy)] [delay in ms, usually 5-40ms]
+       static BOOL SetSurroundParameters(UINT nDepth, UINT nDelay);
+public:
+       BOOL ReadNote();
+       BOOL ProcessRow();
+       BOOL ProcessEffects();
+       UINT GetNNAChannel(UINT nChn) const;
+       void CheckNNA(UINT nChn, UINT instr, int note, BOOL bForceCut);
+       void NoteChange(UINT nChn, int note, BOOL bPorta=FALSE, BOOL bResetEnv=TRUE);
+       void InstrumentChange(MODCHANNEL *pChn, UINT instr, BOOL bPorta=FALSE,BOOL bUpdVol=TRUE,BOOL bResetEnv=TRUE);
+       // Channel Effects
+       void PortamentoUp(MODCHANNEL *pChn, UINT param);
+       void PortamentoDown(MODCHANNEL *pChn, UINT param);
+       void FinePortamentoUp(MODCHANNEL *pChn, UINT param);
+       void FinePortamentoDown(MODCHANNEL *pChn, UINT param);
+       void ExtraFinePortamentoUp(MODCHANNEL *pChn, UINT param);
+       void ExtraFinePortamentoDown(MODCHANNEL *pChn, UINT param);
+       void TonePortamento(MODCHANNEL *pChn, UINT param);
+       void Vibrato(MODCHANNEL *pChn, UINT param);
+       void FineVibrato(MODCHANNEL *pChn, UINT param);
+       void VolumeSlide(MODCHANNEL *pChn, UINT param);
+       void PanningSlide(MODCHANNEL *pChn, UINT param);
+       void ChannelVolSlide(MODCHANNEL *pChn, UINT param);
+       void FineVolumeUp(MODCHANNEL *pChn, UINT param);
+       void FineVolumeDown(MODCHANNEL *pChn, UINT param);
+       void Tremolo(MODCHANNEL *pChn, UINT param);
+       void Panbrello(MODCHANNEL *pChn, UINT param);
+       void RetrigNote(UINT nChn, UINT param);
+       void NoteCut(UINT nChn, UINT nTick);
+       void KeyOff(UINT nChn);
+       int PatternLoop(MODCHANNEL *, UINT param);
+       void ExtendedMODCommands(UINT nChn, UINT param);
+       void ExtendedS3MCommands(UINT nChn, UINT param);
+       void ExtendedChannelEffect(MODCHANNEL *, UINT param);
+       void ProcessMidiMacro(UINT nChn, LPCSTR pszMidiMacro, UINT param=0);
+       void SetupChannelFilter(MODCHANNEL *pChn, BOOL bReset, int flt_modifier=256) const;
+       // Low-Level effect processing
+       void DoFreqSlide(MODCHANNEL *pChn, LONG nFreqSlide);
+       // Global Effects
+       void SetTempo(UINT param);
+       void SetSpeed(UINT param);
+       void GlobalVolSlide(UINT param);
+       DWORD IsSongFinished(UINT nOrder, UINT nRow) const;
+       BOOL IsValidBackwardJump(UINT nStartOrder, UINT nStartRow, UINT nJumpOrder, UINT nJumpRow) const;
+       // Read/Write sample functions
+       signed char GetDeltaValue(signed char prev, UINT n) const { return (signed char)(prev + CompressionTable[n & 0x0F]); }
+       UINT PackSample(int &sample, int next);
+       BOOL CanPackSample(LPSTR pSample, UINT nLen, UINT nPacking, BYTE *result=NULL);
+       UINT ReadSample(MODINSTRUMENT *pIns, UINT nFlags, LPCSTR pMemFile, DWORD dwMemLength);
+       BOOL DestroySample(UINT nSample);
+       BOOL DestroyInstrument(UINT nInstr);
+       BOOL IsSampleUsed(UINT nSample);
+       BOOL IsInstrumentUsed(UINT nInstr);
+       BOOL RemoveInstrumentSamples(UINT nInstr);
+       UINT DetectUnusedSamples(BOOL *);
+       BOOL RemoveSelectedSamples(BOOL *);
+       void AdjustSampleLoop(MODINSTRUMENT *pIns);
+       // I/O from another sound file
+       BOOL ReadInstrumentFromSong(UINT nInstr, CSoundFile *, UINT nSrcInstrument);
+       BOOL ReadSampleFromSong(UINT nSample, CSoundFile *, UINT nSrcSample);
+       // Period/Note functions
+       UINT GetNoteFromPeriod(UINT period) const;
+       UINT GetPeriodFromNote(UINT note, int nFineTune, UINT nC4Speed) const;
+       UINT GetFreqFromPeriod(UINT period, UINT nC4Speed, int nPeriodFrac=0) const;
+       // Misc functions
+       MODINSTRUMENT *GetSample(UINT n) { return Ins+n; }
+       void ResetMidiCfg();
+       UINT MapMidiInstrument(DWORD dwProgram, UINT nChannel, UINT nNote);
+       BOOL ITInstrToMPT(const void *p, INSTRUMENTHEADER *penv, UINT trkvers);
+       UINT SaveMixPlugins(FILE *f=NULL, BOOL bUpdate=TRUE);
+       UINT LoadMixPlugins(const void *pData, UINT nLen);
+#ifndef NO_FILTER
+       DWORD CutOffToFrequency(UINT nCutOff, int flt_modifier=256) const; // [0-255] => [1-10KHz]
+#endif
+
+       // Static helper functions
+public:
+       static DWORD TransposeToFrequency(int transp, int ftune=0);
+       static int FrequencyToTranspose(DWORD freq);
+       static void FrequencyToTranspose(MODINSTRUMENT *psmp);
+
+       // System-Dependant functions
+public:
+       static MODCOMMAND *AllocatePattern(UINT rows, UINT nchns);
+       static signed char* AllocateSample(UINT nbytes);
+       static void FreePattern(LPVOID pat);
+       static void FreeSample(LPVOID p);
+       static UINT Normalize24BitBuffer(LPBYTE pbuffer, UINT cbsizebytes, DWORD lmax24, DWORD dwByteInc);
+};
+
+
+// inline DWORD BigEndian(DWORD x) { return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | ((x & 0xFF0000) >> 8) | ((x & 0xFF000000) >> 24); }
+// inline WORD BigEndianW(WORD x) { return (WORD)(((x >> 8) & 0xFF) | ((x << 8) & 0xFF00)); }
+
+
+//////////////////////////////////////////////////////////
+// WAVE format information
+
+#pragma pack(1)
+
+// Standard IFF chunks IDs
+#define IFFID_FORM             0x4d524f46
+#define IFFID_RIFF             0x46464952
+#define IFFID_WAVE             0x45564157
+#define IFFID_LIST             0x5453494C
+#define IFFID_INFO             0x4F464E49
+
+// IFF Info fields
+#define IFFID_ICOP             0x504F4349
+#define IFFID_IART             0x54524149
+#define IFFID_IPRD             0x44525049
+#define IFFID_INAM             0x4D414E49
+#define IFFID_ICMT             0x544D4349
+#define IFFID_IENG             0x474E4549
+#define IFFID_ISFT             0x54465349
+#define IFFID_ISBJ             0x4A425349
+#define IFFID_IGNR             0x524E4749
+#define IFFID_ICRD             0x44524349
+
+// Wave IFF chunks IDs
+#define IFFID_wave             0x65766177
+#define IFFID_fmt              0x20746D66
+#define IFFID_wsmp             0x706D7377
+#define IFFID_pcm              0x206d6370
+#define IFFID_data             0x61746164
+#define IFFID_smpl             0x6C706D73
+#define IFFID_xtra             0x61727478
+
+typedef struct WAVEFILEHEADER
+{
+       DWORD id_RIFF;          // "RIFF"
+       DWORD filesize;         // file length-8
+       DWORD id_WAVE;
+} WAVEFILEHEADER;
+
+
+typedef struct WAVEFORMATHEADER
+{
+       DWORD id_fmt;           // "fmt "
+       DWORD hdrlen;           // 16
+       WORD format;            // 1
+       WORD channels;          // 1:mono, 2:stereo
+       DWORD freqHz;           // sampling freq
+       DWORD bytessec;         // bytes/sec=freqHz*samplesize
+       WORD samplesize;        // sizeof(sample)
+       WORD bitspersample;     // bits per sample (8/16)
+} WAVEFORMATHEADER;
+
+
+typedef struct WAVEDATAHEADER
+{
+       DWORD id_data;          // "data"
+       DWORD length;           // length of data
+} WAVEDATAHEADER;
+
+
+typedef struct WAVESMPLHEADER
+{
+       // SMPL
+       DWORD smpl_id;          // "smpl"       -> 0x6C706D73
+       DWORD smpl_len;         // length of smpl: 3Ch  (54h with sustain loop)
+       DWORD dwManufacturer;
+       DWORD dwProduct;
+       DWORD dwSamplePeriod;   // 1000000000/freqHz
+       DWORD dwBaseNote;       // 3Ch = C-4 -> 60 + RelativeTone
+       DWORD dwPitchFraction;
+       DWORD dwSMPTEFormat;
+       DWORD dwSMPTEOffset;
+       DWORD dwSampleLoops;    // number of loops
+       DWORD cbSamplerData;
+} WAVESMPLHEADER;
+
+
+typedef struct SAMPLELOOPSTRUCT
+{
+       DWORD dwIdentifier;
+       DWORD dwLoopType;               // 0=normal, 1=bidi
+       DWORD dwLoopStart;
+       DWORD dwLoopEnd;                // Byte offset ?
+       DWORD dwFraction;
+       DWORD dwPlayCount;              // Loop Count, 0=infinite
+} SAMPLELOOPSTRUCT;
+
+
+typedef struct WAVESAMPLERINFO
+{
+       WAVESMPLHEADER wsiHdr;
+       SAMPLELOOPSTRUCT wsiLoops[2];
+} WAVESAMPLERINFO;
+
+
+typedef struct WAVELISTHEADER
+{
+       DWORD list_id;  // "LIST" -> 0x5453494C
+       DWORD list_len;
+       DWORD info;             // "INFO"
+} WAVELISTHEADER;
+
+
+typedef struct WAVEEXTRAHEADER
+{
+       DWORD xtra_id;  // "xtra"       -> 0x61727478
+       DWORD xtra_len;
+       DWORD dwFlags;
+       WORD  wPan;
+       WORD  wVolume;
+       WORD  wGlobalVol;
+       WORD  wReserved;
+       BYTE nVibType;
+       BYTE nVibSweep;
+       BYTE nVibDepth;
+       BYTE nVibRate;
+} WAVEEXTRAHEADER;
+
+#pragma pack()
+
+///////////////////////////////////////////////////////////
+// Low-level Mixing functions
+
+#define MIXBUFFERSIZE          512
+#define MIXING_ATTENUATION     4
+#define MIXING_CLIPMIN         (-0x08000000)
+#define MIXING_CLIPMAX         (0x07FFFFFF)
+#define VOLUMERAMPPRECISION    12
+#define FADESONGDELAY          100
+#define EQ_BUFFERSIZE          (MIXBUFFERSIZE)
+#define AGC_PRECISION          9
+#define AGC_UNITY                      (1 << AGC_PRECISION)
+
+// Calling conventions
+#ifdef MSC_VER
+#define MPPASMCALL     __cdecl
+#define MPPFASTCALL    __fastcall
+#else
+#define MPPASMCALL
+#define MPPFASTCALL
+#endif
+
+#define MOD2XMFineTune(k)      ((int)( (signed char)((k)<<4) ))
+#define XM2MODFineTune(k)      ((int)( (k>>4)&0x0f ))
+
+int _muldiv(long a, long b, long c);
+int _muldivr(long a, long b, long c);
+
+
+// Byte swapping functions from the GNU C Library and libsdl
+
+/* Swap bytes in 16 bit value.  */
+#ifdef __GNUC__
+# define bswap_16(x) \
+    (__extension__                                                           \
+     ({ unsigned short int __bsx = (x);                                              \
+        ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); }))
+#else
+static __inline unsigned short int
+bswap_16 (unsigned short int __bsx)
+{
+  return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
+}
+#endif
+
+/* Swap bytes in 32 bit value.  */
+#ifdef __GNUC__
+# define bswap_32(x) \
+    (__extension__                                                           \
+     ({ unsigned int __bsx = (x);                                            \
+        ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >>  8) |    \
+        (((__bsx) & 0x0000ff00) <<  8) | (((__bsx) & 0x000000ff) << 24)); }))
+#else
+static __inline unsigned int
+bswap_32 (unsigned int __bsx)
+{
+  return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >>  8) |
+         (((__bsx) & 0x0000ff00) <<  8) | (((__bsx) & 0x000000ff) << 24));
+}
+#endif
+
+#if (defined ARM) && (defined _WIN32_WCE)
+static __inline unsigned short int
+ARM_get16(const void *data)
+{
+       unsigned short int s;
+       memcpy(&s,data,sizeof(s));
+       return s;
+}
+
+static __inline unsigned int
+ARM_get32(const void *data)
+{
+       unsigned int s;
+       memcpy(&s,data,sizeof(s));
+       return s;
+}
+
+#define bswapLE16(X) ARM_get16(&X)
+#define bswapLE32(X) ARM_get32(&X)
+#define bswapBE16(X) bswap_16(ARM_get16(&X))
+#define bswapBE32(X) bswap_32(ARM_get32(&X))
+
+// From libsdl
+#elif defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
+#define bswapLE16(X) bswap_16(X)
+#define bswapLE32(X) bswap_32(X)
+#define bswapBE16(X) (X)
+#define bswapBE32(X) (X)
+#else
+#define bswapLE16(X) (X)
+#define bswapLE32(X) (X)
+#define bswapBE16(X) bswap_16(X)
+#define bswapBE32(X) bswap_32(X)
+#endif
+
+#endif
diff --git a/misc/builddeps/dp.linux64/include/libmodplug/stdafx.h b/misc/builddeps/dp.linux64/include/libmodplug/stdafx.h
new file mode 100644 (file)
index 0000000..6631b8b
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * This source code is public domain.
+ *
+ * Authors: Rani Assaf <rani@magic.metawire.com>,
+ *          Olivier Lapicque <olivierl@jps.net>,
+ *          Adam Goode       <adam@evdebs.org> (endian and char fixes for PPC)
+ */
+
+#ifndef _STDAFX_H_
+#define _STDAFX_H_
+
+/* Autoconf detection of stdint/inttypes */
+#if defined(HAVE_CONFIG_H) && !defined(CONFIG_H_INCLUDED)
+# include "config.h"
+# define CONFIG_H_INCLUDED 1
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+
+#ifdef _WIN32
+
+#ifdef MSC_VER
+#pragma warning (disable:4201)
+#pragma warning (disable:4514)
+#endif
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <windowsx.h>
+#include <mmsystem.h>
+#include <stdio.h>
+#include <malloc.h>
+
+#define srandom(_seed)  srand(_seed)
+#define random()        rand()
+#define sleep(_ms)      Sleep(_ms)
+
+inline void ProcessPlugins(int n) {}
+
+#else
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+
+typedef int8_t CHAR;
+typedef uint8_t UCHAR;
+typedef uint8_t* PUCHAR;
+typedef uint16_t USHORT;
+typedef uint32_t ULONG;
+typedef uint32_t UINT;
+typedef uint32_t DWORD;
+typedef int32_t LONG;
+typedef int64_t LONGLONG;
+typedef int32_t* LPLONG;
+typedef uint32_t* LPDWORD;
+typedef uint16_t WORD;
+typedef uint8_t BYTE;
+typedef uint8_t* LPBYTE;
+typedef bool BOOL;
+typedef char* LPSTR;
+typedef void* LPVOID;
+typedef uint16_t* LPWORD;
+typedef const char* LPCSTR;
+typedef void* PVOID;
+typedef void VOID;
+
+inline LONG MulDiv (long a, long b, long c)
+{
+  // if (!c) return 0;
+  return ((uint64_t) a * (uint64_t) b ) / c;
+}
+
+#define MODPLUG_NO_FILESAVE
+#define NO_AGC
+#define LPCTSTR LPCSTR
+#define lstrcpyn strncpy
+#define lstrcpy strcpy
+#define lstrcmp strcmp
+#define WAVE_FORMAT_PCM 1
+//#define ENABLE_EQ
+
+#define  GHND   0
+
+inline int8_t * GlobalAllocPtr(unsigned int, size_t size)
+{
+  int8_t * p = (int8_t *) malloc(size);
+
+  if (p != NULL) memset(p, 0, size);
+  return p;
+}
+
+inline void ProcessPlugins(int n) {}
+
+#define GlobalFreePtr(p) free((void *)(p))
+
+#define strnicmp(a,b,c)                strncasecmp(a,b,c)
+#define wsprintf                       sprintf
+
+#ifndef FALSE
+#define FALSE  false
+#endif
+
+#ifndef TRUE
+#define TRUE   true
+#endif
+
+#endif // _WIN32
+
+#endif
+
+
+
diff --git a/misc/builddeps/dp.linux64/lib/libd0_blind_id.a b/misc/builddeps/dp.linux64/lib/libd0_blind_id.a
new file mode 100644 (file)
index 0000000..d735917
Binary files /dev/null and b/misc/builddeps/dp.linux64/lib/libd0_blind_id.a differ
diff --git a/misc/builddeps/dp.linux64/lib/libd0_blind_id.la b/misc/builddeps/dp.linux64/lib/libd0_blind_id.la
new file mode 100755 (executable)
index 0000000..416ec91
--- /dev/null
@@ -0,0 +1,41 @@
+# libd0_blind_id.la - a libtool library file
+# Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-4
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libd0_blind_id.so.0'
+
+# Names of this library.
+library_names='libd0_blind_id.so.0.0.0 libd0_blind_id.so.0 libd0_blind_id.so'
+
+# The name of the static archive.
+old_library='libd0_blind_id.a'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=' /usr/lib/libgmp.la'
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libd0_blind_id.
+current=0
+age=0
+revision=0
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/rpolzer/Games/Xonotic/misc/builddeps/dp.linux64/lib'
diff --git a/misc/builddeps/dp.linux64/lib/libd0_blind_id.so b/misc/builddeps/dp.linux64/lib/libd0_blind_id.so
new file mode 120000 (symlink)
index 0000000..6adf4aa
--- /dev/null
@@ -0,0 +1 @@
+libd0_blind_id.so.0.0.0
\ No newline at end of file
diff --git a/misc/builddeps/dp.linux64/lib/libd0_blind_id.so.0 b/misc/builddeps/dp.linux64/lib/libd0_blind_id.so.0
new file mode 120000 (symlink)
index 0000000..6adf4aa
--- /dev/null
@@ -0,0 +1 @@
+libd0_blind_id.so.0.0.0
\ No newline at end of file
diff --git a/misc/builddeps/dp.linux64/lib/libd0_blind_id.so.0.0.0 b/misc/builddeps/dp.linux64/lib/libd0_blind_id.so.0.0.0
new file mode 100755 (executable)
index 0000000..3fc64cf
Binary files /dev/null and b/misc/builddeps/dp.linux64/lib/libd0_blind_id.so.0.0.0 differ
diff --git a/misc/builddeps/dp.linux64/lib/libmodplug.la b/misc/builddeps/dp.linux64/lib/libmodplug.la
new file mode 100755 (executable)
index 0000000..def35f4
--- /dev/null
@@ -0,0 +1,41 @@
+# libmodplug.la - a libtool library file
+# Generated by ltmain.sh (GNU libtool) 2.2.6b
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libmodplug.so.1'
+
+# Names of this library.
+library_names='libmodplug.so.1.0.0 libmodplug.so.1 libmodplug.so'
+
+# The name of the static archive.
+old_library=''
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libmodplug.
+current=1
+age=0
+revision=0
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/rpolzer/Games/Xonotic/misc/builddeps/dp.linux64/lib'
diff --git a/misc/builddeps/dp.linux64/lib/libmodplug.so b/misc/builddeps/dp.linux64/lib/libmodplug.so
new file mode 120000 (symlink)
index 0000000..a123b08
--- /dev/null
@@ -0,0 +1 @@
+libmodplug.so.1.0.0
\ No newline at end of file
diff --git a/misc/builddeps/dp.linux64/lib/libmodplug.so.1 b/misc/builddeps/dp.linux64/lib/libmodplug.so.1
new file mode 120000 (symlink)
index 0000000..a123b08
--- /dev/null
@@ -0,0 +1 @@
+libmodplug.so.1.0.0
\ No newline at end of file
diff --git a/misc/builddeps/dp.linux64/lib/libmodplug.so.1.0.0 b/misc/builddeps/dp.linux64/lib/libmodplug.so.1.0.0
new file mode 100755 (executable)
index 0000000..4f58de2
Binary files /dev/null and b/misc/builddeps/dp.linux64/lib/libmodplug.so.1.0.0 differ
diff --git a/misc/builddeps/dp.linux64/lib/pkgconfig/d0_blind_id.pc b/misc/builddeps/dp.linux64/lib/pkgconfig/d0_blind_id.pc
new file mode 100644 (file)
index 0000000..395de78
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=/home/rpolzer/Games/Xonotic/misc/builddeps/dp.linux64
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: Blind-ID
+Description: Library for user identification using RSA blind signatures
+Requires: 
+Version: 0.1
+Libs: -L${libdir} -lblind_id
+Cflags: -I${includedir}/blind_id
diff --git a/misc/builddeps/dp.linux64/lib/pkgconfig/libmodplug.pc b/misc/builddeps/dp.linux64/lib/pkgconfig/libmodplug.pc
new file mode 100644 (file)
index 0000000..50a2cd7
--- /dev/null
@@ -0,0 +1,12 @@
+prefix=/home/rpolzer/Games/Xonotic/misc/builddeps/dp.linux64
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: libmodplug
+Description: The ModPlug mod file playing library.
+Version: 0.8.8.1
+Requires: 
+Libs: -L${libdir} -lmodplug 
+Libs.private: -lstdc++ -lm
+Cflags: -I${includedir} -I${includedir}/libmodplug
diff --git a/misc/buildfiles/w32/SDL.dll b/misc/buildfiles/w32/SDL.dll
deleted file mode 100644 (file)
index 3ce97a5..0000000
Binary files a/misc/buildfiles/w32/SDL.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/libcurl-4.dll b/misc/buildfiles/w32/libcurl-4.dll
deleted file mode 100755 (executable)
index 1e41b76..0000000
Binary files a/misc/buildfiles/w32/libcurl-4.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/libfreetype-6.dll b/misc/buildfiles/w32/libfreetype-6.dll
deleted file mode 100755 (executable)
index 8413207..0000000
Binary files a/misc/buildfiles/w32/libfreetype-6.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/libjpeg.dll b/misc/buildfiles/w32/libjpeg.dll
deleted file mode 100644 (file)
index 99c0215..0000000
Binary files a/misc/buildfiles/w32/libjpeg.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/libmodplug-0.dll b/misc/buildfiles/w32/libmodplug-0.dll
deleted file mode 100755 (executable)
index 8390535..0000000
Binary files a/misc/buildfiles/w32/libmodplug-0.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/libpng12.dll b/misc/buildfiles/w32/libpng12.dll
deleted file mode 100644 (file)
index db30450..0000000
Binary files a/misc/buildfiles/w32/libpng12.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/libtheora.dll b/misc/buildfiles/w32/libtheora.dll
deleted file mode 100644 (file)
index ef66bd7..0000000
Binary files a/misc/buildfiles/w32/libtheora.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/ogg.dll b/misc/buildfiles/w32/ogg.dll
deleted file mode 100644 (file)
index 76bc621..0000000
Binary files a/misc/buildfiles/w32/ogg.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/vorbis.dll b/misc/buildfiles/w32/vorbis.dll
deleted file mode 100644 (file)
index d19353b..0000000
Binary files a/misc/buildfiles/w32/vorbis.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/vorbisenc.dll b/misc/buildfiles/w32/vorbisenc.dll
deleted file mode 100644 (file)
index feb0808..0000000
Binary files a/misc/buildfiles/w32/vorbisenc.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/vorbisfile.dll b/misc/buildfiles/w32/vorbisfile.dll
deleted file mode 100644 (file)
index 2892040..0000000
Binary files a/misc/buildfiles/w32/vorbisfile.dll and /dev/null differ
diff --git a/misc/buildfiles/w32/zlib1.dll b/misc/buildfiles/w32/zlib1.dll
deleted file mode 100644 (file)
index 2b0072b..0000000
Binary files a/misc/buildfiles/w32/zlib1.dll and /dev/null differ
diff --git a/misc/buildfiles/win32/SDL.dll b/misc/buildfiles/win32/SDL.dll
new file mode 100644 (file)
index 0000000..3ce97a5
Binary files /dev/null and b/misc/buildfiles/win32/SDL.dll differ
diff --git a/misc/buildfiles/win32/libcurl-4.dll b/misc/buildfiles/win32/libcurl-4.dll
new file mode 100644 (file)
index 0000000..1e41b76
Binary files /dev/null and b/misc/buildfiles/win32/libcurl-4.dll differ
diff --git a/misc/buildfiles/win32/libfreetype-6.dll b/misc/buildfiles/win32/libfreetype-6.dll
new file mode 100755 (executable)
index 0000000..8413207
Binary files /dev/null and b/misc/buildfiles/win32/libfreetype-6.dll differ
diff --git a/misc/buildfiles/win32/libjpeg.dll b/misc/buildfiles/win32/libjpeg.dll
new file mode 100644 (file)
index 0000000..99c0215
Binary files /dev/null and b/misc/buildfiles/win32/libjpeg.dll differ
diff --git a/misc/buildfiles/win32/libmodplug-1.dll b/misc/buildfiles/win32/libmodplug-1.dll
new file mode 100755 (executable)
index 0000000..c1c8482
Binary files /dev/null and b/misc/buildfiles/win32/libmodplug-1.dll differ
diff --git a/misc/buildfiles/win32/libpng12.dll b/misc/buildfiles/win32/libpng12.dll
new file mode 100644 (file)
index 0000000..db30450
Binary files /dev/null and b/misc/buildfiles/win32/libpng12.dll differ
diff --git a/misc/buildfiles/win32/libtheora.dll b/misc/buildfiles/win32/libtheora.dll
new file mode 100644 (file)
index 0000000..ef66bd7
Binary files /dev/null and b/misc/buildfiles/win32/libtheora.dll differ
diff --git a/misc/buildfiles/win32/ogg.dll b/misc/buildfiles/win32/ogg.dll
new file mode 100644 (file)
index 0000000..76bc621
Binary files /dev/null and b/misc/buildfiles/win32/ogg.dll differ
diff --git a/misc/buildfiles/win32/vorbis.dll b/misc/buildfiles/win32/vorbis.dll
new file mode 100644 (file)
index 0000000..d19353b
Binary files /dev/null and b/misc/buildfiles/win32/vorbis.dll differ
diff --git a/misc/buildfiles/win32/vorbisenc.dll b/misc/buildfiles/win32/vorbisenc.dll
new file mode 100644 (file)
index 0000000..feb0808
Binary files /dev/null and b/misc/buildfiles/win32/vorbisenc.dll differ
diff --git a/misc/buildfiles/win32/vorbisfile.dll b/misc/buildfiles/win32/vorbisfile.dll
new file mode 100644 (file)
index 0000000..2892040
Binary files /dev/null and b/misc/buildfiles/win32/vorbisfile.dll differ
diff --git a/misc/buildfiles/win32/zlib1.dll b/misc/buildfiles/win32/zlib1.dll
new file mode 100644 (file)
index 0000000..2b0072b
Binary files /dev/null and b/misc/buildfiles/win32/zlib1.dll differ