BeagleRescue/libsdl2_mixer/external/libmodplug-0.8.9.0/libmodplug-0.8.9.0.patch

906 lines
30 KiB
Diff

- disable wav formats handling: SDL_mixer has its own code for it.
- disable midi formats handling: SDL_mixer has timidity or native midi for it.
- disable experimental file save support: no one uses it, ever.
- don't export cplusplus interface from shared libs. SDL_mixer doesn't use it.
- disable mmcmp unpacking. disable broken pp20 unpacking.
- merge https://github.com/Konstanty/libmodplug/pull/36 (fix PSM loader overwrites const data)
- merge https://github.com/Konstanty/libmodplug/pull/39 (case-sensitive STM signature checks)
- merge https://github.com/Konstanty/libmodplug/pull/40 (big-endian-friendly MDL track length read)
- merge https://github.com/Konstanty/libmodplug/pull/24 (make some stuff static)
- merge https://github.com/Konstanty/libmodplug/pull/14 (NO_PACKING / MODPLUG_NO_FILESAVE ifdefs)
- merge https://github.com/Konstanty/libmodplug/pull/32 (replace setenv)
- merge https://github.com/Konstanty/libmodplug/pull/41 (timidity paths update)
diff -u libmodplug-0.8.9.0/configure.ac~ libmodplug-0.8.9.0/configure.ac
--- libmodplug-0.8.9.0/configure.ac~
+++ libmodplug-0.8.9.0/configure.ac
@@ -29,7 +29,7 @@ LT_INIT([win32-dll])
AC_HEADER_STDC
AC_CHECK_HEADERS([inttypes.h stdint.h malloc.h])
-AC_CHECK_FUNCS(setenv sinf)
+AC_CHECK_FUNCS(sinf)
CXXFLAGS="$CXXFLAGS -fno-exceptions -Wall -ffast-math -fno-common -D_REENTRANT"
@@ -99,6 +99,6 @@ MODPLUG_LIBRARY_VERSION=1:0:0
AC_SUBST(MODPLUG_LIBRARY_VERSION)
AC_CONFIG_FILES([Makefile
- src/Makefile
+ src/Makefile
libmodplug.pc])
AC_OUTPUT
diff -u libmodplug-0.8.9.0/configure~ libmodplug-0.8.9.0/configure
--- libmodplug-0.8.9.0/configure~
+++ libmodplug-0.8.9.0/configure
@@ -16702,13 +16702,12 @@ fi
done
-for ac_func in setenv sinf
+for ac_func in sinf
do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ ac_fn_cxx_check_func "$LINENO" "sinf" "ac_cv_func_sinf"
+if test "x$ac_cv_func_sinf" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_SINF 1
_ACEOF
fi
diff -u libmodplug-0.8.9.0/src/config.h.in~ libmodplug-0.8.9.0/src/config.h.in
--- libmodplug-0.8.9.0/src/config.h.in~
+++ libmodplug-0.8.9.0/src/config.h.in
@@ -15,9 +15,6 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
-/* Define to 1 if you have the `setenv' function. */
-#undef HAVE_SETENV
-
/* Define to 1 if you have the `sinf' function. */
#undef HAVE_SINF
diff -up libmodplug-0.8.9.0/src/libmodplug/it_defs.h~ libmodplug-0.8.9.0/src/libmodplug/it_defs.h
--- libmodplug-0.8.9.0/src/libmodplug/it_defs.h~
+++ libmodplug-0.8.9.0/src/libmodplug/it_defs.h
@@ -128,7 +128,9 @@ typedef struct ITSAMPLESTRUCT
#pragma pack()
-extern BYTE autovibit2xm[8];
-extern BYTE autovibxm2it[8];
+#if 0/* made these two static to load_it.cpp */
+extern const BYTE autovibit2xm[8];
+extern const BYTE autovibxm2it[8];
+#endif
#endif
diff -up libmodplug-0.8.9.0/src/libmodplug/sndfile.h~ libmodplug-0.8.9.0/src/libmodplug/sndfile.h
--- libmodplug-0.8.9.0/src/libmodplug/sndfile.h~
+++ libmodplug-0.8.9.0/src/libmodplug/sndfile.h
@@ -456,7 +456,7 @@ typedef struct _MODCOMMAND
// Mix Plugins
#define MIXPLUG_MIXREADY 0x01 // Set when cleared
-class MODPLUG_EXPORT IMixPlugin
+class /*MODPLUG_EXPORT*/ IMixPlugin
{
public:
virtual ~IMixPlugin() {};
@@ -535,7 +535,7 @@ typedef VOID (* LPSNDMIXHOOKPROC)(int *,
//==============
-class MODPLUG_EXPORT CSoundFile
+class /*MODPLUG_EXPORT*/ CSoundFile
//==============
{
public: // Static Members
@@ -638,7 +638,9 @@ public:
BOOL ReadIT(LPCBYTE lpStream, DWORD dwMemLength);
BOOL Read669(LPCBYTE lpStream, DWORD dwMemLength);
BOOL ReadUlt(LPCBYTE lpStream, DWORD dwMemLength);
+#ifndef NO_WAVFORMAT
BOOL ReadWav(LPCBYTE lpStream, DWORD dwMemLength);
+#endif
BOOL ReadDSM(LPCBYTE lpStream, DWORD dwMemLength);
BOOL ReadFAR(LPCBYTE lpStream, DWORD dwMemLength);
BOOL ReadAMS(LPCBYTE lpStream, DWORD dwMemLength);
@@ -653,12 +655,14 @@ public:
BOOL ReadPSM(LPCBYTE lpStream, DWORD dwMemLength);
BOOL ReadJ2B(LPCBYTE lpStream, DWORD dwMemLength);
BOOL ReadUMX(LPCBYTE lpStream, DWORD dwMemLength);
+#ifndef NO_MIDIFORMATS
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);
+#endif
// Save Functions
#ifndef MODPLUG_NO_FILESAVE
UINT WriteSample(FILE *f, MODINSTRUMENT *pins, UINT nFlags, UINT nMaxLen=0);
@@ -666,14 +670,16 @@ public:
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;
+#endif
+ // MOD Convert function
void ConvertModCommand(MODCOMMAND *) const;
void S3MConvert(MODCOMMAND *m, BOOL bIT) const;
+#ifndef MODPLUG_NO_FILESAVE
void S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT) const;
WORD ModSaveCommand(const MODCOMMAND *m, BOOL bXM) const;
+#endif
public:
// Real-time sound functions
@@ -759,8 +765,11 @@ public:
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]); }
+#if !(defined(MODPLUG_NO_FILESAVE)||defined(NO_PACKING))
UINT PackSample(int &sample, int next);
BOOL CanPackSample(LPSTR pSample, UINT nLen, UINT nPacking, BYTE *result=NULL);
+#endif // NO_FILESAVE, NO_PACKING
+
UINT ReadSample(MODINSTRUMENT *pIns, UINT nFlags, LPCSTR pMemFile, DWORD dwMemLength);
BOOL DestroySample(UINT nSample);
BOOL DestroyInstrument(UINT nInstr);
diff -up libmodplug-0.8.9.0/src/libmodplug/stdafx.h~ libmodplug-0.8.9.0/src/libmodplug/stdafx.h
--- libmodplug-0.8.9.0/src/libmodplug/stdafx.h~
+++ libmodplug-0.8.9.0/src/libmodplug/stdafx.h
@@ -21,9 +21,15 @@
# include <stdint.h>
#endif
+/*#define MMCMP_SUPPORT*/
+
/* disable AGC and FILESAVE for all targets for uniformity. */
#define NO_AGC
#define MODPLUG_NO_FILESAVE
+/*#define NO_PACKING*/
+/*#define NO_FILTER */
+#define NO_MIDIFORMATS
+#define NO_WAVFORMAT
#ifdef _WIN32
@@ -88,12 +94,6 @@ 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 LPCTSTR LPCSTR
#define lstrcpyn strncpy
#define lstrcpy strcpy
diff -up libmodplug-0.8.9.0/src/load_669.cpp~ libmodplug-0.8.9.0/src/load_669.cpp
--- libmodplug-0.8.9.0/src/load_669.cpp~
+++ libmodplug-0.8.9.0/src/load_669.cpp
@@ -17,7 +17,7 @@
typedef struct tagFILEHEADER669
{
WORD sig; // 'if' or 'JN'
- signed char songmessage[108]; // Song Message
+ signed char songmessage[108]; // Song Message
BYTE samples; // number of samples (1-64)
BYTE patterns; // number of patterns (1-128)
BYTE restartpos;
@@ -35,7 +35,7 @@ typedef struct tagSAMPLE669
BYTE loopend[4];
} SAMPLE669;
-DWORD lengthArrayToDWORD(const BYTE length[4]) {
+static DWORD lengthArrayToDWORD(const BYTE length[4]) {
DWORD len = (length[3] << 24) +
(length[2] << 16) +
(length[1] << 8) +
diff -up libmodplug-0.8.9.0/src/load_abc.cpp~ libmodplug-0.8.9.0/src/load_abc.cpp
--- libmodplug-0.8.9.0/src/load_abc.cpp~
+++ libmodplug-0.8.9.0/src/load_abc.cpp
@@ -37,9 +37,11 @@
#include "stdafx.h"
#include "sndfile.h"
+#ifndef NO_MIDIFORMATS
+
#include "load_pat.h"
-#if _MSC_VER >= 1600
+#if defined(_MSC_VER) && (_MSC_VER >= 1300)
#define putenv _putenv
#define strdup _strdup
#endif
@@ -256,16 +258,6 @@ static void abc_add_setjumploop(ABCHANDL
static uint32_t abc_pattracktime(ABCHANDLE *h, uint32_t tracktime);
static int abc_patno(ABCHANDLE *h, uint32_t tracktime);
-#ifndef HAVE_SETENV
-static void setenv(const char *name, const char *value, int overwrite)
-{
- int len = strlen(name)+1+strlen(value)+1;
- char *str = (char *)malloc(len);
- sprintf(str, "%s=%s", name, value);
- putenv(str);
- free(str);
-}
-#endif
static int abc_isvalidchar(char c) {
return(isalpha(c) || isdigit(c) || isspace(c) || c == '%' || c == ':');
@@ -2345,9 +2337,9 @@ BOOL CSoundFile::TestABC(const BYTE *lpS
// =====================================================================================
static ABCHANDLE *ABC_Init(void)
{
+ static char buf[40];
ABCHANDLE *retval;
char *p;
- char buf[10];
retval = (ABCHANDLE *)calloc(1,sizeof(ABCHANDLE));
if( !retval ) return NULL;
retval->track = NULL;
@@ -2365,16 +2357,16 @@ static ABCHANDLE *ABC_Init(void)
retval->pickrandom = atoi(p);
if( *p == '-' ) {
retval->pickrandom = atoi(p+1)-1; // xmms preloads the file
- sprintf(buf,"-%ld",retval->pickrandom+2);
- setenv(ABC_ENV_NORANDOMPICK, buf, 1);
+ sprintf(buf,"%s=-%ld",ABC_ENV_NORANDOMPICK,retval->pickrandom+2);
+ putenv(buf);
}
}
else {
srandom((uint32_t)time(0)); // initialize random generator with seed
retval->pickrandom = 1+(int)(10000.0*random()/(RAND_MAX+1.0));
// can handle pickin' from songbooks with 10.000 songs
- sprintf(buf,"-%ld",retval->pickrandom); // xmms preloads the file
- setenv(ABC_ENV_NORANDOMPICK, buf, 1);
+ sprintf(buf,"%s=-%ld",ABC_ENV_NORANDOMPICK,retval->pickrandom); // xmms preloads the file
+ putenv(buf);
}
return retval;
}
@@ -4878,3 +4870,4 @@ BOOL CSoundFile::ReadABC(const uint8_t *
ABC_Cleanup(h); // we dont need it anymore
return 1;
}
+#endif // NO_MIDIFORMATS
diff -up libmodplug-0.8.9.0/src/load_amf.cpp~ libmodplug-0.8.9.0/src/load_amf.cpp
--- libmodplug-0.8.9.0/src/load_amf.cpp~
+++ libmodplug-0.8.9.0/src/load_amf.cpp
@@ -44,7 +44,6 @@ typedef struct _AMFSAMPLE
UCHAR volume;
} AMFSAMPLE;
-
#pragma pack()
@@ -52,7 +51,7 @@ typedef struct _AMFSAMPLE
extern void Log(LPCSTR, ...);
#endif
-VOID AMF_Unpack(MODCOMMAND *pPat, const BYTE *pTrack, UINT nRows, UINT nChannels)
+static VOID AMF_Unpack(MODCOMMAND *pPat, const BYTE *pTrack, UINT nRows, UINT nChannels)
//-------------------------------------------------------------------------------
{
UINT lastinstr = 0;
@@ -163,7 +162,6 @@ VOID AMF_Unpack(MODCOMMAND *pPat, const
}
-
BOOL CSoundFile::ReadAMF(LPCBYTE lpStream, const DWORD dwMemLength)
//-----------------------------------------------------------
{
diff -up libmodplug-0.8.9.0/src/load_dmf.cpp~ libmodplug-0.8.9.0/src/load_dmf.cpp
--- libmodplug-0.8.9.0/src/load_dmf.cpp~
+++ libmodplug-0.8.9.0/src/load_dmf.cpp
@@ -509,7 +509,7 @@ typedef struct DMF_HTREE
// DMF Huffman ReadBits
-BYTE DMFReadBits(DMF_HTREE *tree, UINT nbits)
+static BYTE DMFReadBits(DMF_HTREE *tree, UINT nbits)
//-------------------------------------------
{
BYTE x = 0, bitv = 1;
@@ -534,7 +534,7 @@ BYTE DMFReadBits(DMF_HTREE *tree, UINT n
// tree: [8-bit value][12-bit index][12-bit index] = 32-bit
//
-void DMFNewNode(DMF_HTREE *tree)
+static void DMFNewNode(DMF_HTREE *tree)
//------------------------------
{
BYTE isleft, isright;
diff -up libmodplug-0.8.9.0/src/load_it.cpp~ libmodplug-0.8.9.0/src/load_it.cpp
--- libmodplug-0.8.9.0/src/load_it.cpp~
+++ libmodplug-0.8.9.0/src/load_it.cpp
@@ -15,19 +15,18 @@
#pragma warning(disable:4244)
#endif
+static const
BYTE autovibit2xm[8] =
{ 0, 3, 1, 4, 2, 0, 0, 0 };
-
+#ifndef MODPLUG_NO_FILESAVE
+static const
BYTE autovibxm2it[8] =
{ 0, 2, 4, 1, 3, 0, 0, 0 };
+#endif
//////////////////////////////////////////////////////////
// Impulse Tracker IT file support
-// for conversion of XM samples
-extern WORD XMPeriodTable[96+8];
-extern UINT XMLinearTable[768];
-
static inline UINT ConvertVolParam(UINT value)
//--------------------------------------------
{
diff -up libmodplug-0.8.9.0/src/load_mdl.cpp~ libmodplug-0.8.9.0/src/load_mdl.cpp
--- libmodplug-0.8.9.0/src/load_mdl.cpp~
+++ libmodplug-0.8.9.0/src/load_mdl.cpp
@@ -42,7 +42,7 @@ typedef struct MDLPATTERNDATA
} MDLPATTERNDATA;
-void ConvertMDLCommand(MODCOMMAND *m, UINT eff, UINT data)
+static void ConvertMDLCommand(MODCOMMAND *m, UINT eff, UINT data)
//--------------------------------------------------------
{
UINT command = 0, param = data;
@@ -91,7 +91,7 @@ void ConvertMDLCommand(MODCOMMAND *m, UI
}
-void UnpackMDLTrack(MODCOMMAND *pat, UINT nChannels, UINT nRows, UINT nTrack, const BYTE *lpTracks, UINT len)
+static void UnpackMDLTrack(MODCOMMAND *pat, UINT nChannels, UINT nRows, UINT nTrack, const BYTE *lpTracks, UINT len)
//-------------------------------------------------------------------------------------------------
{
MODCOMMAND cmd, *m = pat;
@@ -168,7 +168,6 @@ void UnpackMDLTrack(MODCOMMAND *pat, UIN
}
-
BOOL CSoundFile::ReadMDL(const BYTE *lpStream, DWORD dwMemLength)
//---------------------------------------------------------------
{
@@ -429,12 +428,13 @@ BOOL CSoundFile::ReadMDL(const BYTE *lpS
for (UINT ipat=0; ipat<npatterns; ipat++)
{
if ((Patterns[ipat] = AllocatePattern(PatternSize[ipat], m_nChannels)) == NULL) break;
- for (UINT chn=0; chn<m_nChannels; chn++) if ((patterntracks[ipat*32+chn]) && (patterntracks[ipat*32+chn] <= ntracks) && (*(WORD *)lpStream+dwTrackPos) < dwMemLength-dwTrackPos)
+ for (UINT chn=0; chn<m_nChannels; chn++) if ((patterntracks[ipat*32+chn]) && (patterntracks[ipat*32+chn] <= ntracks))
{
+ const BYTE *lpTracks = lpStream + dwTrackPos;
+ UINT len = lpTracks[0] | (lpTracks[1] << 8);
+ if (len < dwMemLength-dwTrackPos) {
MODCOMMAND *m = Patterns[ipat] + chn;
UINT nTrack = patterntracks[ipat*32+chn];
- const BYTE *lpTracks = lpStream + dwTrackPos;
- UINT len = lpTracks[0] | (lpTracks[1] << 8);
lpTracks += 2;
for (UINT ntrk=1; ntrk<nTrack && lpTracks < (dwMemLength + lpStream - len); ntrk++)
@@ -447,6 +447,7 @@ BOOL CSoundFile::ReadMDL(const BYTE *lpS
if ( len > dwMemLength - dwTrackPos ) len = 0;
UnpackMDLTrack(m, m_nChannels, PatternSize[ipat], nTrack, lpTracks, len);
+ }
}
}
}
diff -up libmodplug-0.8.9.0/src/load_mid.cpp~ libmodplug-0.8.9.0/src/load_mid.cpp
--- libmodplug-0.8.9.0/src/load_mid.cpp~
+++ libmodplug-0.8.9.0/src/load_mid.cpp
@@ -35,6 +35,9 @@
#include "stdafx.h"
#include "sndfile.h"
+
+#ifndef NO_MIDIFORMATS
+
#define PAN_LEFT 0x30
#define PAN_RIGHT 0xD0
#define MAX_POLYPHONY 16 // max notes in one midi channel
@@ -92,7 +95,7 @@ typedef struct _MIDTRACK
#undef _mm_free
#endif
-#define MMSTREAM FILE
+#define MMSTREAM FILE
#define _mm_fseek(f,pos,whence) fseek(f,pos,whence)
#define _mm_read_UBYTES(buf,sz,f) fread(buf,sz,1,f)
#define _mm_read_SBYTES(buf,sz,f) fread(buf,sz,1,f)
@@ -1582,3 +1585,4 @@ BOOL CSoundFile::ReadMID(const BYTE *lpS
avoid_reentry = 0; // it is safe now, I'm finished
return TRUE;
}
+#endif // NO_MIDIFORMATS
diff -up libmodplug-0.8.9.0/src/load_mod.cpp~ libmodplug-0.8.9.0/src/load_mod.cpp
--- libmodplug-0.8.9.0/src/load_mod.cpp~
+++ libmodplug-0.8.9.0/src/load_mod.cpp
@@ -60,6 +60,7 @@ void CSoundFile::ConvertModCommand(MODCO
}
+#ifndef MODPLUG_NO_FILESAVE
WORD CSoundFile::ModSaveCommand(const MODCOMMAND *m, BOOL bXM) const
//------------------------------------------------------------------
{
@@ -144,6 +145,7 @@ WORD CSoundFile::ModSaveCommand(const MO
}
return (WORD)((command << 8) | (param));
}
+#endif // MODPLUG_NO_FILESAVE
#pragma pack(1)
@@ -184,7 +186,7 @@ static BOOL IsValidName(LPCSTR s, int le
return TRUE;
}
-BOOL IsMagic(LPCSTR s1, LPCSTR s2)
+static BOOL IsMagic(LPCSTR s1, LPCSTR s2)
{
return ((*(DWORD *)s1) == (*(DWORD *)s2)) ? TRUE : FALSE;
}
diff -up libmodplug-0.8.9.0/src/load_pat.cpp~ libmodplug-0.8.9.0/src/load_pat.cpp
--- libmodplug-0.8.9.0/src/load_pat.cpp~
+++ libmodplug-0.8.9.0/src/load_pat.cpp
@@ -44,16 +44,18 @@
#include "stdafx.h"
#include "sndfile.h"
+#ifndef NO_MIDIFORMATS
+
#include "load_pat.h"
-#ifdef MSC_VER
+#ifdef _WIN32
#define DIRDELIM '\\'
#define TIMIDITYCFG "C:\\TIMIDITY\\TIMIDITY.CFG"
#define PATHFORPAT "C:\\TIMIDITY\\INSTRUMENTS"
#else
#define DIRDELIM '/'
-#define TIMIDITYCFG "/usr/local/share/timidity/timidity.cfg"
-#define PATHFORPAT "/usr/local/share/timidity/instruments"
+#define TIMIDITYCFG "/etc/timidity.cfg" /*"/usr/share/timidity/timidity.cfg"*/
+#define PATHFORPAT "/usr/share/timidity/instruments"
#endif
#define PAT_ENV_PATH2CFG "MMPAT_PATH_TO_CFG"
@@ -764,10 +766,7 @@ BOOL CSoundFile::TestPAT(const BYTE *lpS
// =====================================================================================
static PATHANDLE *PAT_Init(void)
{
- PATHANDLE *retval;
- retval = (PATHANDLE *)calloc(1,sizeof(PATHANDLE));
- if( !retval ) return NULL;
- return retval;
+ return (PATHANDLE *)calloc(1,sizeof(PATHANDLE));
}
// =====================================================================================
@@ -1259,3 +1258,4 @@ BOOL CSoundFile::ReadPAT(const BYTE *lpS
PAT_Cleanup(h); // we dont need it anymore
return 1;
}
+#endif // NO_MIDIFORMATS
diff -up libmodplug-0.8.9.0/src/load_psm.cpp~ libmodplug-0.8.9.0/src/load_psm.cpp
--- libmodplug-0.8.9.0/src/load_psm.cpp~
+++ libmodplug-0.8.9.0/src/load_psm.cpp
@@ -84,7 +84,9 @@ typedef struct _PSMSAMPLE
BYTE reserved6[19];
} PSMSAMPLE;
-void swap_PSMSAMPLE(PSMSAMPLE* p){
+#pragma pack()
+
+static void swap_PSMSAMPLE(PSMSAMPLE* p){
p->smpid = bswapLE32(p->smpid);
p->length = bswapLE32(p->length);
p->loopstart = bswapLE32(p->loopstart);
@@ -92,13 +94,11 @@ void swap_PSMSAMPLE(PSMSAMPLE* p){
p->samplerate = bswapLE32(p->samplerate);
}
-#pragma pack()
-
BOOL CSoundFile::ReadPSM(LPCBYTE lpStream, DWORD dwMemLength)
//-----------------------------------------------------------
{
- PSMCHUNK *pfh = (PSMCHUNK *)lpStream;
+ PSMCHUNK pfh = *(const PSMCHUNK *)lpStream;
DWORD dwMemPos, dwSongPos;
DWORD smpnames[MAX_SAMPLES];
DWORD patptrs[MAX_PATTERNS];
@@ -108,17 +108,17 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
if (dwMemLength < 256) return FALSE;
// Swap chunk
- swap_PSMCHUNK(pfh);
+ swap_PSMCHUNK(&pfh);
// Chunk0: "PSM ",filesize,"FILE"
- if (pfh->id == PSM_ID_OLD)
+ if (pfh.id == PSM_ID_OLD)
{
#ifdef PSM_LOG
Log("Old PSM format not supported\n");
#endif
return FALSE;
}
- if ((pfh->id != PSM_ID_NEW) || (pfh->len+12 > dwMemLength) || (pfh->listid != IFFID_FILE)) return FALSE;
+ if ((pfh.id != PSM_ID_NEW) || (pfh.len+12 > dwMemLength) || (pfh.listid != IFFID_FILE)) return FALSE;
m_nType = MOD_TYPE_PSM;
m_nChannels = 16;
m_nSamples = 0;
@@ -132,13 +132,13 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
}
while (dwMemPos+8 < dwMemLength)
{
- PSMCHUNK *pchunk = (PSMCHUNK *)(lpStream+dwMemPos);
- swap_PSMCHUNK(pchunk);
- if ((pchunk->len >= dwMemLength - 8) || (dwMemPos + pchunk->len + 8 > dwMemLength)) break;
+ PSMCHUNK pchunk = *(const PSMCHUNK *)(lpStream+dwMemPos);
+ swap_PSMCHUNK(&pchunk);
+ if ((pchunk.len >= dwMemLength - 8) || (dwMemPos + pchunk.len + 8 > dwMemLength)) break;
dwMemPos += 8;
PUCHAR pdata = (PUCHAR)(lpStream+dwMemPos);
- ULONG len = pchunk->len;
- if (len) switch(pchunk->id)
+ ULONG len = pchunk.len;
+ if (len) switch(pchunk.id)
{
// "TITL": Song title
case IFFID_TITL:
@@ -166,21 +166,21 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
{
m_nSamples++;
MODINSTRUMENT *pins = &Ins[m_nSamples];
- PSMSAMPLE *psmp = (PSMSAMPLE *)pdata;
- swap_PSMSAMPLE(psmp);
- smpnames[m_nSamples] = psmp->smpid;
- memcpy(m_szNames[m_nSamples], psmp->samplename, 31);
+ PSMSAMPLE psmp = *(PSMSAMPLE *)pdata;
+ swap_PSMSAMPLE(&psmp);
+ smpnames[m_nSamples] = psmp.smpid;
+ memcpy(m_szNames[m_nSamples], psmp.samplename, 31);
m_szNames[m_nSamples][31] = 0;
samplemap[m_nSamples-1] = (BYTE)m_nSamples;
// Init sample
pins->nGlobalVol = 0x40;
- pins->nC4Speed = psmp->samplerate;
- pins->nLength = psmp->length;
- pins->nLoopStart = psmp->loopstart;
- pins->nLoopEnd = psmp->loopend;
+ pins->nC4Speed = psmp.samplerate;
+ pins->nLength = psmp.length;
+ pins->nLoopStart = psmp.loopstart;
+ pins->nLoopEnd = psmp.loopend;
pins->nPan = 128;
- pins->nVolume = (psmp->defvol+1) * 2;
- pins->uFlags = (psmp->flags & 0x80) ? CHN_LOOP : 0;
+ pins->nVolume = (psmp.defvol+1) * 2;
+ pins->uFlags = (psmp.flags & 0x80) ? CHN_LOOP : 0;
if (pins->nLoopStart > 0) pins->nLoopStart--;
// Point to sample data
pdata += 0x60;
@@ -199,17 +199,17 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
default:
{
CHAR s[8], s2[64];
- *(DWORD *)s = pchunk->id;
+ *(DWORD *)s = pchunk.id;
s[4] = 0;
- wsprintf(s2, "%s: %4d bytes @ %4d\n", s, pchunk->len, dwMemPos);
+ wsprintf(s2, "%s: %4d bytes @ %4d\n", s, pchunk.len, dwMemPos);
OutputDebugString(s2);
}
#endif
}
- dwMemPos += pchunk->len;
+ dwMemPos += pchunk.len;
}
// Step #1: convert song structure
- PSMSONGHDR *pSong = (PSMSONGHDR *)(lpStream+dwSongPos+8);
+ const PSMSONGHDR *pSong = (const PSMSONGHDR *)(lpStream+dwSongPos+8);
if ((!dwSongPos) || (pSong->channels < 2) || (pSong->channels > 32)) return TRUE;
m_nChannels = pSong->channels;
// Valid song header -> convert attached chunks
@@ -218,13 +218,13 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
dwMemPos = dwSongPos + 8 + 11; // sizeof(PSMCHUNK)+sizeof(PSMSONGHDR)
while (dwMemPos + 8 < dwSongEnd)
{
- PSMCHUNK *pchunk = (PSMCHUNK *)(lpStream+dwMemPos);
- swap_PSMCHUNK(pchunk);
+ PSMCHUNK pchunk = *(const PSMCHUNK *)(lpStream+dwMemPos);
+ swap_PSMCHUNK(&pchunk);
dwMemPos += 8;
- if ((pchunk->len > dwSongEnd) || (dwMemPos + pchunk->len > dwSongEnd)) break;
+ if ((pchunk.len > dwSongEnd) || (dwMemPos + pchunk.len > dwSongEnd)) break;
PUCHAR pdata = (PUCHAR)(lpStream+dwMemPos);
- ULONG len = pchunk->len;
- switch(pchunk->id)
+ ULONG len = pchunk.len;
+ switch(pchunk.id)
{
case IFFID_OPLH:
if (len >= 0x20)
@@ -237,7 +237,7 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
DWORD dwName = *(DWORD *)(pdata+pos);
for (UINT i=0; i<nPatterns; i++)
{
- DWORD dwPatName = ((PSMPATTERN *)(lpStream+patptrs[i]+8))->name;
+ DWORD dwPatName = ((const PSMPATTERN *)(lpStream+patptrs[i]+8))->name;
if (dwName == dwPatName)
{
bFound = TRUE;
@@ -258,7 +258,7 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
DWORD dwName = *(DWORD *)(pdata+pos);
for (UINT i=0; i<nPatterns; i++)
{
- DWORD dwPatName = ((PSMPATTERN *)(lpStream+patptrs[i]+8))->name;
+ DWORD dwPatName = ((const PSMPATTERN *)(lpStream+patptrs[i]+8))->name;
if (dwName == dwPatName)
{
Order[iOrd++] = i;
@@ -270,23 +270,23 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
}
break;
}
- dwMemPos += pchunk->len;
+ dwMemPos += pchunk.len;
}
}
// Step #2: convert patterns
for (UINT nPat=0; nPat<nPatterns; nPat++)
{
- PSMPATTERN *pPsmPat = (PSMPATTERN *)(lpStream+patptrs[nPat]+8);
- swap_PSMPATTERN(pPsmPat);
+ PSMPATTERN pPsmPat = *(const PSMPATTERN *)(lpStream+patptrs[nPat]+8);
+ swap_PSMPATTERN(&pPsmPat);
ULONG len = *(DWORD *)(lpStream+patptrs[nPat]+4) - 12;
- UINT nRows = pPsmPat->rows;
- if (len > pPsmPat->size) len = pPsmPat->size;
+ UINT nRows = pPsmPat.rows;
+ if (len > pPsmPat.size) len = pPsmPat.size;
if ((nRows < 64) || (nRows > 256)) nRows = 64;
PatternSize[nPat] = nRows;
if ((Patterns[nPat] = AllocatePattern(nRows, m_nChannels)) == NULL) break;
MODCOMMAND *m = Patterns[nPat];
- BYTE *p = pPsmPat->data;
+ BYTE *p = pPsmPat.data;
MODCOMMAND *sp, dummy;
UINT pos = 0;
UINT row = 0;
@@ -295,7 +295,7 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
Log("Pattern %d at offset 0x%04X\n", nPat, (DWORD)(p - (BYTE *)lpStream));
#endif
UINT flags, ch;
- rowlim = bswapLE16(pPsmPat->reserved1)-2;
+ rowlim = bswapLE16(pPsmPat.reserved1)-2;
while ((row < nRows) && (pos+3 < len))
{
if ((pos+1) >= rowlim) {
@@ -393,7 +393,7 @@ BOOL CSoundFile::ReadPSM(LPCBYTE lpStrea
#ifdef PSM_LOG
if (pos < len)
{
- Log("Pattern %d: %d/%d[%d] rows (%d bytes) -> %d bytes left\n", nPat, row, nRows, pPsmPat->rows, pPsmPat->size, len-pos);
+ Log("Pattern %d: %d/%d[%d] rows (%d bytes) -> %d bytes left\n", nPat, row, nRows, pPsmPat.rows, pPsmPat.size, len-pos);
}
#endif
}
diff -up libmodplug-0.8.9.0/src/load_s3m.cpp~ libmodplug-0.8.9.0/src/load_s3m.cpp
--- libmodplug-0.8.9.0/src/load_s3m.cpp~
+++ libmodplug-0.8.9.0/src/load_s3m.cpp
@@ -105,6 +105,7 @@ void CSoundFile::S3MConvert(MODCOMMAND *
}
+#ifndef MODPLUG_NO_FILESAVE
void CSoundFile::S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT) const
//---------------------------------------------------------------------
{
@@ -182,6 +183,7 @@ void CSoundFile::S3MSaveConvert(UINT *pc
*pcmd = command;
*pprm = param;
}
+#endif // MODPLUG_NO_FILESAVE
static DWORD boundInput(DWORD input, DWORD smin, DWORD smax)
{
diff -up libmodplug-0.8.9.0/src/load_stm.cpp~ libmodplug-0.8.9.0/src/load_stm.cpp
--- libmodplug-0.8.9.0/src/load_stm.cpp~
+++ libmodplug-0.8.9.0/src/load_stm.cpp
@@ -64,8 +64,8 @@ BOOL CSoundFile::ReadSTM(const BYTE *lpS
if ((!lpStream) || (dwMemLength < sizeof(STMHEADER))) return FALSE;
if ((phdr->filetype != 2) || (phdr->unused != 0x1A)
- || ((strncasecmp(phdr->trackername, "!SCREAM!", 8))
- && (strncasecmp(phdr->trackername, "BMOD2STM", 8)))) return FALSE;
+ || ((strncmp(phdr->trackername, "!Scream!", 8))
+ && (strncmp(phdr->trackername, "BMOD2STM", 8)))) return FALSE;
memcpy(m_szNames[0], phdr->songname, 20);
// Read STM header
m_nType = MOD_TYPE_STM;
diff -up libmodplug-0.8.9.0/src/load_wav.cpp~ libmodplug-0.8.9.0/src/load_wav.cpp
--- libmodplug-0.8.9.0/src/load_wav.cpp~
+++ libmodplug-0.8.9.0/src/load_wav.cpp
@@ -7,6 +7,8 @@
#include "stdafx.h"
#include "sndfile.h"
+#ifndef NO_WAVFORMAT
+
#ifndef WAVE_FORMAT_EXTENSIBLE
#define WAVE_FORMAT_EXTENSIBLE 0xFFFE
#endif
@@ -170,7 +172,6 @@ static const int gIMAUnpackTable[90] =
32767, 0
};
-
BOOL IMAADPCMUnpack16(signed short *pdest, UINT nLen, LPBYTE psrc, DWORD dwBytes, UINT pkBlkAlign)
//------------------------------------------------------------------------------------------------
{
@@ -215,3 +216,4 @@ BOOL IMAADPCMUnpack16(signed short *pdes
}
return TRUE;
}
+#endif // NO_WAVFORMAT
diff -up libmodplug-0.8.9.0/src/mmcmp.cpp~ libmodplug-0.8.9.0/src/mmcmp.cpp
--- libmodplug-0.8.9.0/src/mmcmp.cpp~
+++ libmodplug-0.8.9.0/src/mmcmp.cpp
@@ -8,6 +8,7 @@
#include "stdafx.h"
#include "sndfile.h"
+#ifdef MMCMP_SUPPORT
BOOL PP20_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength);
#pragma pack(1)
@@ -501,3 +502,4 @@ BOOL PP20_Unpack(LPCBYTE *ppMemFile, LPD
*pdwMemLength = dwDstLen;
return TRUE;
}
+#endif /* MMCMP_SUPPORT */
diff -up libmodplug-0.8.9.0/src/sndfile.cpp~ libmodplug-0.8.9.0/src/sndfile.cpp
--- libmodplug-0.8.9.0/src/sndfile.cpp~
+++ libmodplug-0.8.9.0/src/sndfile.cpp
@@ -9,8 +9,6 @@
#include "libmodplug/stdafx.h"
#include "libmodplug/sndfile.h"
-#define MMCMP_SUPPORT
-
#ifdef MMCMP_SUPPORT
extern BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength);
#endif
@@ -24,9 +22,11 @@ extern void ITUnpack8Bit(signed char *pS
extern void ITUnpack16Bit(signed char *pSample, DWORD dwLen, LPBYTE lpMemFile, DWORD dwMemLength, BOOL b215);
+#ifndef MODPLUG_NO_FILESAVE
+#ifndef NO_PACKING
+
#define MAX_PACK_TABLES 3
-
// Compression table
static const signed char UnpackTable[MAX_PACK_TABLES][16] =
//--------------------------------------------
@@ -40,6 +40,8 @@ static const signed char UnpackTable[MAX
{0, 1, 2, 3, 5, 7, 12, 19,
-1, -2, -3, -5, -7, -12, -19, -31}
};
+#endif
+#endif
//////////////////////////////////////////////////////////
@@ -140,12 +142,16 @@ BOOL CSoundFile::Create(LPCBYTE lpStream
if ((!ReadXM(lpStream, dwMemLength))
&& (!ReadS3M(lpStream, dwMemLength))
&& (!ReadIT(lpStream, dwMemLength))
+#ifndef NO_WAVFORMAT
&& (!ReadWav(lpStream, dwMemLength))
+#endif
#ifndef MODPLUG_BASIC_SUPPORT
+#ifndef NO_MIDIFORMATS
/* Sequencer File Format Support */
&& (!ReadABC(lpStream, dwMemLength))
&& (!ReadMID(lpStream, dwMemLength))
&& (!ReadPAT(lpStream, dwMemLength))
+#endif
&& (!ReadSTM(lpStream, dwMemLength))
&& (!ReadMed(lpStream, dwMemLength))
&& (!ReadMTM(lpStream, dwMemLength))
@@ -753,6 +759,7 @@ void CSoundFile::LoopPattern(int nPat, i
}
+#ifndef MODPLUG_NO_FILESAVE
UINT CSoundFile::GetBestSaveFormat() const
//----------------------------------------
{
@@ -767,7 +774,6 @@ UINT CSoundFile::GetBestSaveFormat() con
return MOD_TYPE_IT;
}
-
UINT CSoundFile::GetSaveFormats() const
//-------------------------------------
{
@@ -786,6 +792,7 @@ UINT CSoundFile::GetSaveFormats() const
}
return n;
}
+#endif // MODPLUG_NO_FILESAVE
UINT CSoundFile::GetSampleName(UINT nSample,LPSTR s) const
@@ -817,6 +824,8 @@ UINT CSoundFile::GetInstrumentName(UINT
}
+#ifndef MODPLUG_NO_FILESAVE
+
#ifndef NO_PACKING
UINT CSoundFile::PackSample(int &sample, int next)
//------------------------------------------------
@@ -877,8 +886,6 @@ BOOL CSoundFile::CanPackSample(LPSTR pSa
}
#endif // NO_PACKING
-#ifndef MODPLUG_NO_FILESAVE
-
UINT CSoundFile::WriteSample(FILE *f, MODINSTRUMENT *pins, UINT nFlags, UINT nMaxLen)
//-----------------------------------------------------------------------------------
{
diff -up libmodplug-0.8.9.0/src/sndmix.cpp~ libmodplug-0.8.9.0/src/sndmix.cpp
--- libmodplug-0.8.9.0/src/sndmix.cpp~
+++ libmodplug-0.8.9.0/src/sndmix.cpp
@@ -60,7 +60,7 @@ UINT gnReverbSend;
// Log tables for pre-amp
// We don't want the tracker to get too loud
-const UINT PreAmpTable[16] =
+static const UINT PreAmpTable[16] =
{
0x60, 0x60, 0x60, 0x70, // 0-7
0x80, 0x88, 0x90, 0x98, // 8-15
@@ -68,7 +68,7 @@ const UINT PreAmpTable[16] =
0xB4, 0xB8, 0xBC, 0xC0, // 24-31
};
-const UINT PreAmpAGCTable[16] =
+static const UINT PreAmpAGCTable[16] =
{
0x60, 0x60, 0x60, 0x60,
0x68, 0x70, 0x78, 0x80,