Skip to content

Commit

Permalink
Final work to move libmodplug from C++ to C. Whew!
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Jul 19, 2018
1 parent c8b7e6e commit c9b57b1
Show file tree
Hide file tree
Showing 34 changed files with 171 additions and 189 deletions.
64 changes: 32 additions & 32 deletions CMakeLists.txt
Expand Up @@ -63,38 +63,38 @@ endif()

if(SDLSOUND_DECODER_MODPLUG)
set(LIBMODPLUG_SRCS
src/libmodplug/fastmix.cpp
src/libmodplug/load_669.cpp
src/libmodplug/load_abc.cpp
src/libmodplug/load_amf.cpp
src/libmodplug/load_ams.cpp
src/libmodplug/load_dbm.cpp
src/libmodplug/load_dmf.cpp
src/libmodplug/load_dsm.cpp
src/libmodplug/load_far.cpp
src/libmodplug/load_it.cpp
src/libmodplug/load_mdl.cpp
src/libmodplug/load_med.cpp
src/libmodplug/load_mid.cpp
src/libmodplug/load_mod.cpp
src/libmodplug/load_mt2.cpp
src/libmodplug/load_mtm.cpp
src/libmodplug/load_okt.cpp
src/libmodplug/load_pat.cpp
src/libmodplug/load_psm.cpp
src/libmodplug/load_ptm.cpp
src/libmodplug/load_s3m.cpp
src/libmodplug/load_stm.cpp
src/libmodplug/load_ult.cpp
src/libmodplug/load_umx.cpp
src/libmodplug/load_xm.cpp
src/libmodplug/mmcmp.cpp
src/libmodplug/modplug.cpp
src/libmodplug/snd_dsp.cpp
src/libmodplug/snd_flt.cpp
src/libmodplug/snd_fx.cpp
src/libmodplug/sndfile.cpp
src/libmodplug/sndmix.cpp
src/libmodplug/fastmix.c
src/libmodplug/load_669.c
src/libmodplug/load_abc.c
src/libmodplug/load_amf.c
src/libmodplug/load_ams.c
src/libmodplug/load_dbm.c
src/libmodplug/load_dmf.c
src/libmodplug/load_dsm.c
src/libmodplug/load_far.c
src/libmodplug/load_it.c
src/libmodplug/load_mdl.c
src/libmodplug/load_med.c
src/libmodplug/load_mid.c
src/libmodplug/load_mod.c
src/libmodplug/load_mt2.c
src/libmodplug/load_mtm.c
src/libmodplug/load_okt.c
src/libmodplug/load_pat.c
src/libmodplug/load_psm.c
src/libmodplug/load_ptm.c
src/libmodplug/load_s3m.c
src/libmodplug/load_stm.c
src/libmodplug/load_ult.c
src/libmodplug/load_umx.c
src/libmodplug/load_xm.c
src/libmodplug/mmcmp.c
src/libmodplug/modplug.c
src/libmodplug/snd_dsp.c
src/libmodplug/snd_flt.c
src/libmodplug/snd_fx.c
src/libmodplug/sndfile.c
src/libmodplug/sndmix.c
)
endif()

Expand Down
3 changes: 2 additions & 1 deletion src/libmodplug/fastmix.cpp → src/libmodplug/fastmix.c
Expand Up @@ -1447,6 +1447,7 @@ UINT CSoundFile_CreateStereoMix(CSoundFile *_this, int count)
{
LPLONG pOfsL, pOfsR;
DWORD nchused, nchmixed;
UINT nrampsamples;

if (!count) return 0;
if (CSoundFile_gnChannels > 2) X86_InitMixBuffer(MixRearBuffer, count*2);
Expand Down Expand Up @@ -1505,7 +1506,7 @@ UINT CSoundFile_CreateStereoMix(CSoundFile *_this, int count)
nchused++;
////////////////////////////////////////////////////
SampleLooping:
UINT nrampsamples = nsamples;
nrampsamples = nsamples;
if (pChannel->nRampLength > 0)
{
if ((LONG)nrampsamples > pChannel->nRampLength) nrampsamples = pChannel->nRampLength;
Expand Down
52 changes: 18 additions & 34 deletions src/libmodplug/libmodplug.h
Expand Up @@ -95,7 +95,7 @@ typedef struct {
} MMFILE;

void mmfclose(MMFILE *mmfile);
bool mmfeof(MMFILE *mmfile);
int mmfeof(MMFILE *mmfile);
int mmfgetc(MMFILE *mmfile);
void mmfgets(char buf[], unsigned int bufsz, MMFILE *mmfile);
long mmftell(MMFILE *mmfile);
Expand Down Expand Up @@ -346,7 +346,6 @@ typedef const BYTE * LPCBYTE;
#define DNA_NOTEFADE 2

// Mixer Hardware-Dependent features
#define SYSMIX_ENABLEMMX 0x01
#define SYSMIX_WINDOWSNT 0x02
#define SYSMIX_SLOWCPU 0x04
#define SYSMIX_FASTCPU 0x08
Expand Down Expand Up @@ -384,7 +383,6 @@ typedef const BYTE * LPCBYTE;
#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

Expand Down Expand Up @@ -592,11 +590,8 @@ extern UINT CSoundFile_m_nMaxMixChannels;
extern DWORD CSoundFile_gdwSoundSetup, CSoundFile_gdwMixingFreq, CSoundFile_gnBitsPerSample, CSoundFile_gnChannels;
extern UINT CSoundFile_gnVolumeRampSamples;

//==============
struct MODPLUG_EXPORT CSoundFile
//==============
typedef struct CSoundFile
{
//public: // for Editing
MODCHANNEL Chn[MAX_CHANNELS]; // Channels
UINT ChnMix[MAX_CHANNELS]; // Channels to be mixed
MODINSTRUMENT Ins[MAX_SAMPLES]; // Instruments
Expand All @@ -622,14 +617,13 @@ struct MODPLUG_EXPORT CSoundFile
UINT m_nPatternNames;
LPSTR m_lpszPatternNames;
CHAR CompressionTable[16];
};
} CSoundFile;

//public:
CSoundFile *CSoundFile_Create(CSoundFile *retval, LPCBYTE lpStream, DWORD dwMemLength=0);
CSoundFile *CSoundFile_Create(CSoundFile *retval, LPCBYTE lpStream, DWORD dwMemLength);
void CSoundFile_Destroy(CSoundFile *_this);
UINT CSoundFile_GetMaxPosition(CSoundFile *_this);
void CSoundFile_SetCurrentPos(CSoundFile *_this, UINT nPos);
DWORD CSoundFile_GetLength(CSoundFile *_this, BOOL bAdjust, BOOL bTotal=FALSE);
DWORD CSoundFile_GetLength(CSoundFile *_this, BOOL bAdjust, BOOL bTotal);
void CSoundFile_SetRepeatCount(CSoundFile *_this, int n);
BOOL CSoundFile_SetPatternName(CSoundFile *_this, UINT nPat, LPCSTR lpszName);
// Module Loaders
Expand Down Expand Up @@ -668,18 +662,16 @@ struct MODPLUG_EXPORT CSoundFile
void CSoundFile_ConvertModCommand(CSoundFile *_this, MODCOMMAND *);
void CSoundFile_S3MConvert(MODCOMMAND *m, BOOL bIT);

//public:
// Real-time sound functions
UINT CSoundFile_Read(CSoundFile *_this, LPVOID lpBuffer, UINT cbBuffer);
UINT CSoundFile_CreateStereoMix(CSoundFile *_this, int count);
BOOL CSoundFile_FadeSong(CSoundFile *_this, UINT msec);
BOOL CSoundFile_GlobalFadeSong(CSoundFile *_this, UINT msec);

//public:
// Mixer Config
BOOL CSoundFile_InitPlayer(BOOL bReset=FALSE);
BOOL CSoundFile_InitPlayer(BOOL bReset);
BOOL CSoundFile_SetMixConfig(UINT nStereoSeparation, UINT nMaxMixChannels);
BOOL CSoundFile_SetWaveConfig(UINT nRate,UINT nBits,UINT nChannels,BOOL bMMX=FALSE);
BOOL CSoundFile_SetWaveConfig(UINT nRate,UINT nBits,UINT nChannels);
BOOL CSoundFile_SetResamplingMode(UINT nMode); // SRCMODE_XXXX
DWORD CSoundFile_InitSysInfo(CSoundFile *_this);

Expand All @@ -694,14 +686,14 @@ struct MODPLUG_EXPORT CSoundFile
BOOL CSoundFile_SetXBassParameters(UINT nDepth, UINT nRange);
// [Surround level 0(quiet)-100(heavy)] [delay in ms, usually 5-40ms]
BOOL CSoundFile_SetSurroundParameters(UINT nDepth, UINT nDelay);
//public:

BOOL CSoundFile_ReadNote(CSoundFile *_this);
BOOL CSoundFile_ProcessRow(CSoundFile *_this);
BOOL CSoundFile_ProcessEffects(CSoundFile *_this);
UINT CSoundFile_GetNNAChannel(CSoundFile *_this, UINT nChn);
void CSoundFile_CheckNNA(CSoundFile *_this, UINT nChn, UINT instr, int note, BOOL bForceCut);
void CSoundFile_NoteChange(CSoundFile *_this, UINT nChn, int note, BOOL bPorta=FALSE, BOOL bResetEnv=TRUE);
void CSoundFile_InstrumentChange(CSoundFile *_this, MODCHANNEL *pChn, UINT instr, BOOL bPorta=FALSE,BOOL bUpdVol=TRUE,BOOL bResetEnv=TRUE);
void CSoundFile_NoteChange(CSoundFile *_this, UINT nChn, int note, BOOL bPorta, BOOL bResetEnv);
void CSoundFile_InstrumentChange(CSoundFile *_this, MODCHANNEL *pChn, UINT instr, BOOL bPorta,BOOL bUpdVol,BOOL bResetEnv);
// Channel Effects
void CSoundFile_PortamentoUp(CSoundFile *_this, MODCHANNEL *pChn, UINT param);
void CSoundFile_PortamentoDown(CSoundFile *_this, MODCHANNEL *pChn, UINT param);
Expand All @@ -726,8 +718,8 @@ struct MODPLUG_EXPORT CSoundFile
void CSoundFile_ExtendedMODCommands(CSoundFile *_this, UINT nChn, UINT param);
void CSoundFile_ExtendedS3MCommands(CSoundFile *_this, UINT nChn, UINT param);
void CSoundFile_ExtendedChannelEffect(CSoundFile *_this, MODCHANNEL *, UINT param);
void CSoundFile_ProcessMidiMacro(CSoundFile *_this, UINT nChn, LPCSTR pszMidiMacro, UINT param=0);
void CSoundFile_SetupChannelFilter(CSoundFile *_this, MODCHANNEL *pChn, BOOL bReset, int flt_modifier=256);
void CSoundFile_ProcessMidiMacro(CSoundFile *_this, UINT nChn, LPCSTR pszMidiMacro, UINT param);
void CSoundFile_SetupChannelFilter(CSoundFile *_this, MODCHANNEL *pChn, BOOL bReset, int flt_modifier);
// Low-Level effect processing
void CSoundFile_DoFreqSlide(CSoundFile *_this, MODCHANNEL *pChn, LONG nFreqSlide);
// Global Effects
Expand All @@ -751,34 +743,26 @@ struct MODPLUG_EXPORT CSoundFile
// Period/Note functions
UINT CSoundFile_GetNoteFromPeriod(CSoundFile *_this, UINT period);
UINT CSoundFile_GetPeriodFromNote(CSoundFile *_this, UINT note, int nFineTune, UINT nC4Speed);
UINT CSoundFile_GetFreqFromPeriod(CSoundFile *_this, UINT period, UINT nC4Speed, int nPeriodFrac=0);
UINT CSoundFile_GetFreqFromPeriod(CSoundFile *_this, UINT period, UINT nC4Speed, int nPeriodFrac);
// Misc functions
void CSoundFile_ResetMidiCfg(CSoundFile *_this);
UINT CSoundFile_MapMidiInstrument(CSoundFile *_this, DWORD dwProgram, UINT nChannel, UINT nNote);
BOOL CSoundFile_ITInstrToMPT(CSoundFile *_this, void *p, INSTRUMENTHEADER *penv, UINT trkvers);
BOOL CSoundFile_ITInstrToMPT(const void *p, INSTRUMENTHEADER *penv, UINT trkvers);

UINT CSoundFile_LoadMixPlugins(CSoundFile *_this, const void *pData, UINT nLen);
#ifndef NO_FILTER
DWORD CSoundFile_CutOffToFrequency(CSoundFile *_this, UINT nCutOff, int flt_modifier=256); // [0-255] => [1-10KHz]
DWORD CSoundFile_CutOffToFrequency(CSoundFile *_this, UINT nCutOff, int flt_modifier); // [0-255] => [1-10KHz]
#endif

// Static helper functions
//public:
DWORD CSoundFile_TransposeToFrequency(int transp, int ftune=0);
DWORD CSoundFile_TransposeToFrequency(int transp, int ftune);
int CSoundFile_FrequencyToTranspose(DWORD freq);
void CSoundFile_FrequencyToTranspose(MODINSTRUMENT *psmp);
void CSoundFile_FrequencyToTransposeInstrument(MODINSTRUMENT *psmp);

// System-Dependant functions
//public:
MODCOMMAND *CSoundFile_AllocatePattern(UINT rows, UINT nchns);
signed char* CSoundFile_AllocateSample(UINT nbytes);
void CSoundFile_FreePattern(LPVOID pat);
void CSoundFile_FreeSample(LPVOID p);
UINT CSoundFile_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)); }


///////////////////////////////////////////////////////////
Expand Down
File renamed without changes.
4 changes: 3 additions & 1 deletion src/libmodplug/load_abc.cpp → src/libmodplug/load_abc.c
Expand Up @@ -446,10 +446,12 @@ static void abc_new_umacro(ABCHANDLE *h, const char *m)
// =============================================================================
{
ABCMACRO *retval, *mp;
char *q;

char key[256], value[256];
abc_extractkeyvalue(key, sizeof(key), value, sizeof(value), m);
if( SDL_strlen(key) > 1 || SDL_strchr("~HIJKLMNOPQRSTUVWXY",SDL_toupper(key[0])) == 0 ) return;
while( char *q = SDL_strchr(key, '!') )
while( (q = SDL_strchr(key, '!')) != NULL )
*q = '+'; // translate oldstyle to newstyle
if( !SDL_strcmp(key,"+nil+") ) { // delete a macro
mp = NULL;
Expand Down
5 changes: 3 additions & 2 deletions src/libmodplug/load_amf.cpp → src/libmodplug/load_amf.c
Expand Up @@ -350,7 +350,8 @@ BOOL CSoundFile_ReadAMF(CSoundFile *_this, LPCBYTE lpStream, const DWORD dwMemLe
if (realtrackcnt < pTrackMap[iTrkMap]) realtrackcnt = pTrackMap[iTrkMap];
}
// Store tracks positions
BYTE **pTrackData = new BYTE *[realtrackcnt];
BYTE **pTrackData = (BYTE **) SDL_malloc(sizeof (BYTE *) * realtrackcnt);
if (!pTrackData) return TRUE;
SDL_memset(pTrackData, 0, sizeof(BYTE *) * realtrackcnt);
for (UINT iTrack=0; iTrack<realtrackcnt; iTrack++) if (dwMemPos <= dwMemLength - 3)
{
Expand Down Expand Up @@ -385,7 +386,7 @@ BOOL CSoundFile_ReadAMF(CSoundFile *_this, LPCBYTE lpStream, const DWORD dwMemLe
}
}
}
delete[] pTrackData;
SDL_free(pTrackData);
// Read Sample Data
for (UINT iSeek=1; iSeek<=maxsampleseekpos; iSeek++)
{
Expand Down
8 changes: 4 additions & 4 deletions src/libmodplug/load_ams.cpp → src/libmodplug/load_ams.c
Expand Up @@ -95,7 +95,7 @@ BOOL CSoundFile_ReadAMS(CSoundFile *_this, LPCBYTE lpStream, DWORD dwMemLength)
dwMemPos += tmp;
}
// Read Pattern Names
_this->m_lpszPatternNames = new char[pfh->patterns * 32]; // changed from CHAR
_this->m_lpszPatternNames = (char *) SDL_malloc(pfh->patterns * 32); // changed from CHAR
if (!_this->m_lpszPatternNames) return TRUE;
_this->m_nPatternNames = pfh->patterns;
SDL_memset(_this->m_lpszPatternNames, 0, _this->m_nPatternNames * 32);
Expand Down Expand Up @@ -332,7 +332,7 @@ BOOL CSoundFile_ReadAMS2(CSoundFile *_this, LPCBYTE lpStream, DWORD dwMemLength)
dwMemPos += 5 + panenv->points*3;
pitchenv = (AMS2ENVELOPE *)(lpStream+dwMemPos);
dwMemPos += 5 + pitchenv->points*3;
INSTRUMENTHEADER *penv = new INSTRUMENTHEADER;
INSTRUMENTHEADER *penv = (INSTRUMENTHEADER *) SDL_malloc(sizeof (INSTRUMENTHEADER));
if (!penv) return TRUE;
SDL_memset(smpmap, 0, sizeof(smpmap));
SDL_memset(penv, 0, sizeof(INSTRUMENTHEADER));
Expand Down Expand Up @@ -522,7 +522,7 @@ BOOL CSoundFile_ReadAMS2(CSoundFile *_this, LPCBYTE lpStream, DWORD dwMemLength)
void AMSUnpack(const char *psrc, UINT inputlen, char *pdest, UINT dmax, char packcharacter)
{
UINT tmplen = dmax;
signed char *amstmp = new signed char[tmplen];
signed char *amstmp = (signed char *) SDL_malloc(tmplen);

if (!amstmp) return;
// Unpack Loop
Expand Down Expand Up @@ -582,6 +582,6 @@ void AMSUnpack(const char *psrc, UINT inputlen, char *pdest, UINT dmax, char pac
pdest[i] = old;
}
}
delete[] amstmp;
SDL_free(amstmp);
}

2 changes: 1 addition & 1 deletion src/libmodplug/load_dbm.cpp → src/libmodplug/load_dbm.c
Expand Up @@ -140,7 +140,7 @@ BOOL CSoundFile_ReadDBM(CSoundFile *_this, const BYTE *lpStream, DWORD dwMemLeng
UINT nsmp;

if (chunk_pos + sizeof(DBMINSTRUMENT) > dwMemPos) break;
if ((penv = new INSTRUMENTHEADER) == NULL) break;
if ((penv = (INSTRUMENTHEADER *) SDL_malloc(sizeof (INSTRUMENTHEADER))) == NULL) break;
pih = (DBMINSTRUMENT *)(lpStream+chunk_pos);
nsmp = bswapBE16(pih->sampleno);
psmp = ((nsmp) && (nsmp < MAX_SAMPLES)) ? &_this->Ins[nsmp] : NULL;
Expand Down
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion src/libmodplug/load_far.cpp → src/libmodplug/load_far.c
Expand Up @@ -221,7 +221,7 @@ BOOL CSoundFile_ReadFAR(CSoundFile *_this, const BYTE *lpStream, DWORD dwMemLeng
for (UINT ismp=0; ismp<64; ismp++, pins++) if (samplemap[ismp >> 3] & (1 << (ismp & 7)))
{
if (dwMemPos + sizeof(FARSAMPLE) > dwMemLength) return TRUE;
const FARSAMPLE *pfs = reinterpret_cast<const FARSAMPLE*>(lpStream + dwMemPos);
const FARSAMPLE *pfs = (const FARSAMPLE*)(lpStream + dwMemPos);
dwMemPos += sizeof(FARSAMPLE);
_this->m_nSamples = ismp + 1;
const DWORD length = bswapLE32( pfs->length ) ; /* endian fix - Toad */
Expand Down

0 comments on commit c9b57b1

Please sign in to comment.