|
From: <sag...@us...> - 2014-01-01 22:15:02
|
Revision: 3543
http://sourceforge.net/p/modplug/code/3543
Author: saga-games
Date: 2014-01-01 22:14:52 +0000 (Wed, 01 Jan 2014)
Log Message:
-----------
[Ref] Compare more FourCCs as strings, and where it's not possible to do so, use new macros MAGIC[2|4][BE|LE] to construct the magic numbers to increase readability.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/ITTools.cpp
trunk/OpenMPT/soundlib/ITTools.h
trunk/OpenMPT/soundlib/Load_dmf.cpp
trunk/OpenMPT/soundlib/Load_gdm.cpp
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Load_itp.cpp
trunk/OpenMPT/soundlib/Load_okt.cpp
trunk/OpenMPT/soundlib/Load_psm.cpp
trunk/OpenMPT/soundlib/Load_s3m.cpp
trunk/OpenMPT/soundlib/Loaders.h
trunk/OpenMPT/soundlib/S3MTools.cpp
trunk/OpenMPT/soundlib/S3MTools.h
trunk/OpenMPT/soundlib/SampleFormats.cpp
trunk/OpenMPT/soundlib/load_j2b.cpp
Modified: trunk/OpenMPT/soundlib/ITTools.cpp
===================================================================
--- trunk/OpenMPT/soundlib/ITTools.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/ITTools.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -18,7 +18,6 @@
void ITFileHeader::ConvertEndianness()
//------------------------------------
{
- SwapBytesLE(id);
SwapBytesLE(ordnum);
SwapBytesLE(insnum);
SwapBytesLE(smpnum);
@@ -29,7 +28,6 @@
SwapBytesLE(special);
SwapBytesLE(msglength);
SwapBytesLE(msgoffset);
- SwapBytesLE(reserved);
}
@@ -118,7 +116,6 @@
void ITOldInstrument::ConvertEndianness()
//---------------------------------------
{
- SwapBytesLE(id);
SwapBytesLE(fadeout);
SwapBytesLE(trkvers);
}
@@ -129,7 +126,7 @@
//-------------------------------------------------------------
{
// Header
- if(id != ITOldInstrument::magic)
+ if(memcmp(id, "IMPI", 4))
{
return;
}
@@ -196,7 +193,6 @@
void ITInstrument::ConvertEndianness()
//------------------------------------
{
- SwapBytesLE(id);
SwapBytesLE(fadeout);
SwapBytesLE(trkvers);
SwapBytesLE(mbank);
@@ -210,7 +206,7 @@
MemsetZero(*this);
// Header
- id = ITInstrument::magic;
+ memcpy(id, "IMPI", 4);
trkvers = 0x0214;
mpt::String::Write<mpt::String::nullTerminated>(filename, mptIns.filename);
@@ -289,7 +285,7 @@
uint32 ITInstrument::ConvertToMPT(ModInstrument &mptIns, MODTYPE modFormat) const
//-------------------------------------------------------------------------------
{
- if(id != ITInstrument::magic)
+ if(memcmp(id, "IMPI", 4))
{
return 0;
}
@@ -456,7 +452,6 @@
void ITSample::ConvertEndianness()
//--------------------------------
{
- SwapBytesLE(id);
SwapBytesLE(length);
SwapBytesLE(loopbegin);
SwapBytesLE(loopend);
@@ -474,7 +469,7 @@
MemsetZero(*this);
// Header
- id = ITSample::magic;
+ memcpy(id, "IMPS", 4);
mpt::String::Write<mpt::String::nullTerminated>(filename, mptSmp.filename);
//mpt::String::Write<mpt::String::nullTerminated>(name, m_szNames[nsmp]);
@@ -546,7 +541,7 @@
uint32 ITSample::ConvertToMPT(ModSample &mptSmp) const
//----------------------------------------------------
{
- if(id != ITSample::magic)
+ if(memcmp(id, "IMPS", 4))
{
return 0;
}
Modified: trunk/OpenMPT/soundlib/ITTools.h
===================================================================
--- trunk/OpenMPT/soundlib/ITTools.h 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/ITTools.h 2014-01-01 22:14:52 UTC (rev 3543)
@@ -20,15 +20,6 @@
struct PACKED ITFileHeader
{
- // Magic Bytes
- enum Magic
- {
- itMagic = 0x4D504D49, // "IMPM" IT Header Magic Bytes
- mptmMagic = 0x2E6D7074, // "tpm." Old MPTM header magic bytes
- omptMagic = 0x54504D4F, // "OMPT" Magic Bytes for non-standard OpenMPT IT files
- chibiMagic = 0x49424843, // "CHBI" Magic Bytes in the IT header to identify ChibiTracker
- };
-
// Header Flags
enum ITHeaderFlags
{
@@ -52,7 +43,7 @@
embedMIDIConfiguration = 0x08,
};
- uint32 id; // Magic Bytes (IMPM)
+ char id[4]; // Magic Bytes (IMPM)
char songname[26]; // Song Name, null-terminated (but may also contain nulls)
uint8 highlight_minor; // Rows per Beat highlight
uint8 highlight_major; // Rows per Measure highlight
@@ -72,7 +63,7 @@
uint8 pwd; // Pitch Wheel Depth
uint16 msglength; // Length of Song Message
uint32 msgoffset; // Offset of Song Message in File (IT crops message after first null)
- uint32 reserved; // ChibiTracker writes "CHBI" here. OpenMPT writes "OMPT" here in some cases, see Load_it.cpp
+ char reserved[4]; // ChibiTracker writes "CHBI" here. OpenMPT writes "OMPT" here in some cases, see Load_it.cpp
uint8 chnpan[64]; // Initial Channel Panning
uint8 chnvol[64]; // Initial Channel Volume
@@ -116,12 +107,6 @@
// Old Impulse Instrument Format (cmwt < 0x200)
struct PACKED ITOldInstrument
{
- // Magic Bytes
- enum Magic
- {
- magic = 0x49504D49, // "IMPI" IT Instrument Header Magic Bytes
- };
-
enum ITOldInstrFlags
{
envEnabled = 0x01,
@@ -129,7 +114,7 @@
envSustain = 0x04,
};
- uint32 id; // Magic Bytes (IMPI)
+ char id[4]; // Magic Bytes (IMPI)
char filename[13]; // DOS Filename, null-terminated
uint8 flags; // Volume Envelope Flags
uint8 vls; // Envelope Loop Start
@@ -162,12 +147,6 @@
// Impulse Instrument Format
struct PACKED ITInstrument
{
- // Magic Bytes
- enum Magic
- {
- magic = 0x49504D49, // "IMPI" IT Instrument Header Magic Bytes
- };
-
enum ITInstrumentFlags
{
ignorePanning = 0x80,
@@ -175,7 +154,7 @@
enableResonance = 0x80,
};
- uint32 id; // Magic Bytes (IMPI)
+ char id[4]; // Magic Bytes (IMPI)
char filename[13]; // DOS Filename, null-terminated
uint8 nna; // New Note Action
uint8 dct; // Duplicate Note Check Type
@@ -263,7 +242,7 @@
cvtPTM8to16 = 0x08,
};
- uint32 id; // Magic Bytes (IMPS)
+ char id[4]; // Magic Bytes (IMPS)
char filename[13]; // DOS Filename, null-terminated
uint8 gvl; // Global Volume
uint8 flags; // Sample Flags
Modified: trunk/OpenMPT/soundlib/Load_dmf.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_dmf.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/Load_dmf.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -44,14 +44,14 @@
// 32-Bit chunk identifiers
enum ChunkIdentifiers
{
- idCMSG = 0x47534D43, // Song message
- idSEQU = 0x55514553, // Order list
- idPATT = 0x54544150, // Patterns
- idSMPI = 0x49504D53, // Sample headers
- idSMPD = 0x44504D53, // Sample data
- idSMPJ = 0x4A504D53, // Sample jump table (XTrakcker 32 only)
- idENDE = 0x45444E45, // Last four bytes of DMF file
- idSETT = 0x9C219DE4, // Probably contains GUI settings
+ idCMSG = MAGIC4LE('C','M','S','G'), // Song message
+ idSEQU = MAGIC4LE('S','E','Q','U'), // Order list
+ idPATT = MAGIC4LE('P','A','T','T'), // Patterns
+ idSMPI = MAGIC4LE('S','M','P','I'), // Sample headers
+ idSMPD = MAGIC4LE('S','M','P','D'), // Sample data
+ idSMPJ = MAGIC4LE('S','M','P','J'), // Sample jump table (XTrakcker 32 only)
+ idENDE = MAGIC4LE('E','N','D','E'), // Last four bytes of DMF file
+ idSETT = MAGIC4LE('S','E','T','T'), // Probably contains GUI settings
};
typedef ChunkIdentifiers id_type;
Modified: trunk/OpenMPT/soundlib/Load_gdm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_gdm.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/Load_gdm.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -24,18 +24,11 @@
// GDM File Header
struct PACKED GDMFileHeader
{
- // Header magic bytes
- enum HeaderMagic
- {
- magicGDM_ = 0xFE4D4447,
- magicGMFS = 0x53464D47,
- };
-
- uint32 magic; // ID: 'GDM\xFE'
+ char magic[4]; // ID: 'GDM\xFE'
char songTitle[32]; // Music's title
char songMusician[32]; // Name of music's composer
char dosEOF[3]; // 13, 10, 26
- uint32 magic2; // ID: 'GMFS'
+ char magic2[4]; // ID: 'GMFS'
uint8 formatMajorVer; // Format major version
uint8 formatMinorVer; // Format minor version
uint16 trackerID; // Composing Tracker ID code (00 = 2GDM)
@@ -66,8 +59,6 @@
// Convert all multi-byte numeric values to current platform's endianness or vice versa.
void ConvertEndianness()
{
- SwapBytesLE(magic);
- SwapBytesLE(magic2);
SwapBytesLE(trackerID);
SwapBytesLE(originalFormat);
SwapBytesLE(orderOffset);
@@ -143,9 +134,9 @@
GDMFileHeader fileHeader;
if(!file.ReadConvertEndianness(fileHeader)
- || fileHeader.magic != GDMFileHeader::magicGDM_
+ || memcmp(fileHeader.magic, "GDM\xFE", 4)
|| fileHeader.dosEOF[0] != 13 || fileHeader.dosEOF[1] != 10 || fileHeader.dosEOF[2] != 26
- || fileHeader.magic2 != GDMFileHeader::magicGMFS
+ || memcmp(fileHeader.magic2, "GMFS", 4)
|| fileHeader.formatMajorVer != 1 || fileHeader.formatMinorVer != 0
|| fileHeader.originalFormat >= CountOf(gdmFormatOrigin)
|| fileHeader.originalFormat == 0)
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -321,7 +321,7 @@
ITFileHeader fileHeader;
if(!file.ReadConvertEndianness(fileHeader)
- || (fileHeader.id != ITFileHeader::itMagic && fileHeader.id != ITFileHeader::mptmMagic)
+ || (memcmp(fileHeader.id, "IMPM", 4) && memcmp(fileHeader.id, "tpm.", 4))
|| fileHeader.insnum > 0xFF
|| fileHeader.smpnum >= MAX_SAMPLES
|| !file.CanRead(fileHeader.ordnum + (fileHeader.insnum + fileHeader.smpnum + fileHeader.patnum) * 4))
@@ -344,8 +344,9 @@
mptStartPos = file.GetLength();
}
- if(fileHeader.id == ITFileHeader::mptmMagic)
+ if(!memcmp(fileHeader.id, "tpm.", 4))
{
+ // Legacy MPTM files (old 1.17.02.xx releases)
ChangeModTypeTo(MOD_TYPE_MPT);
} else
{
@@ -366,7 +367,7 @@
// OpenMPT Version number (Major.Minor)
// This will only be interpreted as "made with ModPlug" (i.e. disable compatible playback etc) if the "reserved" field is set to "OMPT" - else, compatibility was used.
m_dwLastSavedWithVersion = (fileHeader.cwtv & 0x0FFF) << 16;
- if(fileHeader.reserved == ITFileHeader::omptMagic)
+ if(!memcmp(fileHeader.reserved, "OMPT", 4))
interpretModPlugMade = true;
} else if(fileHeader.cmwt == 0x888 || fileHeader.cwtv == 0x888)
{
@@ -648,7 +649,7 @@
ITSample sampleHeader;
if(smpPos[i] > 0 && file.Seek(smpPos[i]) && file.ReadConvertEndianness(sampleHeader))
{
- if(sampleHeader.id == ITSample::magic)
+ if(!memcmp(sampleHeader.id, "IMPS", 4))
{
size_t sampleOffset = sampleHeader.ConvertToMPT(Samples[i + 1]);
@@ -930,7 +931,7 @@
if(m_dwLastSavedWithVersion && madeWithTracker.empty())
{
madeWithTracker = "OpenMPT " + MptVersion::ToStr(m_dwLastSavedWithVersion);
- if(fileHeader.reserved != ITFileHeader::omptMagic && (fileHeader.cwtv & 0xF000) == 0x5000)
+ if(memcmp(fileHeader.reserved, "OMPT", 4) && (fileHeader.cwtv & 0xF000) == 0x5000)
{
madeWithTracker += " (compatibility export)";
} else if(MptVersion::IsTestBuild(m_dwLastSavedWithVersion))
@@ -958,7 +959,7 @@
m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, A5);
madeWithTracker = "ModPlug tracker 1.00a5";
interpretModPlugMade = true;
- } else if(fileHeader.cwtv == 0x0214 && fileHeader.cmwt == 0x0214 && fileHeader.reserved == ITFileHeader::chibiMagic)
+ } else if(fileHeader.cwtv == 0x0214 && fileHeader.cmwt == 0x0214 && !memcmp(fileHeader.reserved, "CHBI", 4))
{
madeWithTracker = "ChibiTracker";
} else if(fileHeader.cwtv == 0x0214 && fileHeader.cmwt == 0x0214 && !(fileHeader.special & 3) && fileHeader.reserved == 0 && !strcmp(Samples[1].filename, "XXXXXXXX.YYY"))
@@ -1122,7 +1123,7 @@
// Writing Header
MemsetZero(itHeader);
dwChnNamLen = 0;
- itHeader.id = ITFileHeader::itMagic;
+ memcpy(itHeader.id, "IMPM", 4);
mpt::String::Write<mpt::String::nullTerminated>(itHeader.songname, songName);
itHeader.highlight_minor = (uint8)std::min(m_nDefaultRowsPerBeat, ROWINDEX(uint8_max));
@@ -1177,7 +1178,7 @@
if(!compatibilityExport)
{
// This way, we indicate that the file will most likely contain OpenMPT hacks. Compatibility export puts 0 here.
- itHeader.reserved = ITFileHeader::omptMagic;
+ memcpy(itHeader.reserved, "OMPT", 4);
}
}
@@ -1885,35 +1886,35 @@
void CSoundFile::SaveExtendedInstrumentProperties(UINT nInstruments, FILE* f) const
//---------------------------------------------------------------------------------
{
- uint32 code = MULTICHAR4_LE_MSVC('M','P','T','X'); // write extension header code
+ uint32 code = MAGIC4BE('M','P','T','X'); // write extension header code
fwrite(&code, 1, sizeof(uint32), f);
if (nInstruments == 0)
return;
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('V','R','.','.'), sizeof(ModInstrument().nVolRampUp), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('M','i','P','.'), sizeof(ModInstrument().nMixPlug), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('M','C','.','.'), sizeof(ModInstrument().nMidiChannel),f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('M','P','.','.'), sizeof(ModInstrument().nMidiProgram),f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('M','B','.','.'), sizeof(ModInstrument().wMidiBank), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','.','.','.'), sizeof(ModInstrument().nPan), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('G','V','.','.'), sizeof(ModInstrument().nGlobalVol), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('F','O','.','.'), sizeof(ModInstrument().nFadeOut), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('R','.','.','.'), sizeof(ModInstrument().nResampling), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('C','S','.','.'), sizeof(ModInstrument().nCutSwing), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('R','S','.','.'), sizeof(ModInstrument().nResSwing), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('F','M','.','.'), sizeof(ModInstrument().nFilterMode), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','E','R','N'), sizeof(ModInstrument().PitchEnv.nReleaseNode ), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('A','E','R','N'), sizeof(ModInstrument().PanEnv.nReleaseNode), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('V','E','R','N'), sizeof(ModInstrument().VolEnv.nReleaseNode), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','T','T','L'), sizeof(ModInstrument().wPitchToTempoLock), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','V','E','H'), sizeof(ModInstrument().nPluginVelocityHandling), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','V','O','H'), sizeof(ModInstrument().nPluginVolumeHandling), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','R','.','.'), sizeof(ModInstrument().nVolRampUp), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','i','P','.'), sizeof(ModInstrument().nMixPlug), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','C','.','.'), sizeof(ModInstrument().nMidiChannel),f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','P','.','.'), sizeof(ModInstrument().nMidiProgram),f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','B','.','.'), sizeof(ModInstrument().wMidiBank), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','.','.','.'), sizeof(ModInstrument().nPan), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('G','V','.','.'), sizeof(ModInstrument().nGlobalVol), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('F','O','.','.'), sizeof(ModInstrument().nFadeOut), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('R','.','.','.'), sizeof(ModInstrument().nResampling), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('C','S','.','.'), sizeof(ModInstrument().nCutSwing), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('R','S','.','.'), sizeof(ModInstrument().nResSwing), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('F','M','.','.'), sizeof(ModInstrument().nFilterMode), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','E','R','N'), sizeof(ModInstrument().PitchEnv.nReleaseNode ), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('A','E','R','N'), sizeof(ModInstrument().PanEnv.nReleaseNode), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','E','R','N'), sizeof(ModInstrument().VolEnv.nReleaseNode), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','T','T','L'), sizeof(ModInstrument().wPitchToTempoLock), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','V','E','H'), sizeof(ModInstrument().nPluginVelocityHandling), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','V','O','H'), sizeof(ModInstrument().nPluginVolumeHandling), f, nInstruments);
if(!(GetType() & MOD_TYPE_XM))
{
// XM instrument headers already have support for this
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('M','P','W','D'), sizeof(ModInstrument().midiPWD), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('M','P','W','D'), sizeof(ModInstrument().midiPWD), f, nInstruments);
}
if(GetType() & MOD_TYPE_MPT)
@@ -1928,17 +1929,17 @@
// write full envelope information for MPTM files (more env points)
if(maxNodes > 25)
{
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('V','E','.','.'), sizeof(ModInstrument().VolEnv.nNodes), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('V','P','[','.'), sizeof(ModInstrument().VolEnv.Ticks), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('V','E','[','.'), sizeof(ModInstrument().VolEnv.Values), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','E','.','.'), sizeof(ModInstrument().VolEnv.nNodes), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','P','[','.'), sizeof(ModInstrument().VolEnv.Ticks), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','E','[','.'), sizeof(ModInstrument().VolEnv.Values), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','E','.','.'), sizeof(ModInstrument().PanEnv.nNodes), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','P','[','.'), sizeof(ModInstrument().PanEnv.Ticks), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','E','[','.'), sizeof(ModInstrument().PanEnv.Values), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','E','.','.'), sizeof(ModInstrument().PanEnv.nNodes), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','P','[','.'), sizeof(ModInstrument().PanEnv.Ticks), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','E','[','.'), sizeof(ModInstrument().PanEnv.Values), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','i','E','.'), sizeof(ModInstrument().PitchEnv.nNodes), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','i','P','['), sizeof(ModInstrument().PitchEnv.Ticks), f, nInstruments);
- WriteInstrumentPropertyForAllInstruments(MULTICHAR4_LE_MSVC('P','i','E','['), sizeof(ModInstrument().PitchEnv.Values), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','E','.'), sizeof(ModInstrument().PitchEnv.nNodes), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','P','['), sizeof(ModInstrument().PitchEnv.Ticks), f, nInstruments);
+ WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','E','['), sizeof(ModInstrument().PitchEnv.Values), f, nInstruments);
}
}
@@ -1967,12 +1968,12 @@
//--------------------------------------------------------
{
//Extra song data - Yet Another Hack.
- const uint32 code = MULTICHAR4_LE_MSVC('M','P','T','S');
+ const uint32 code = MAGIC4BE('M','P','T','S');
fwrite(&code, 1, sizeof(uint32), f);
#define WRITEMODULARHEADER(c1, c2, c3, c4, fsize) \
{ \
- const uint32 code = MULTICHAR4_LE_MSVC(c1, c2, c3, c4); \
+ const uint32 code = MAGIC4BE(c1, c2, c3, c4); \
fwrite(&code, 1, sizeof(code), f); \
const uint16 size = (fsize); \
fwrite(&size, 1, sizeof(size), f); \
@@ -2079,7 +2080,7 @@
{
uint32 code = file.ReadUint32LE();
- if(code == MULTICHAR4_LE_MSVC('M','P','T','S')) //Reached song extensions, break out of this loop
+ if(code == MAGIC4BE('M','P','T','S')) //Reached song extensions, break out of this loop
{
file.SkipBack(4);
return;
@@ -2153,23 +2154,23 @@
switch (code) // interpret field code
{
- case MULTICHAR4_LE_MSVC('D','T','.','.'): ReadField(chunk, size, m_nDefaultTempo); break;
- case MULTICHAR4_LE_MSVC('R','P','B','.'): ReadField(chunk, size, m_nDefaultRowsPerBeat); break;
- case MULTICHAR4_LE_MSVC('R','P','M','.'): ReadField(chunk, size, m_nDefaultRowsPerMeasure); break;
- case MULTICHAR4_LE_MSVC('C','.','.','.'): if(modtype != MOD_TYPE_XM) ReadField(chunk, size, m_nChannels); break;
- case MULTICHAR4_LE_MSVC('T','M','.','.'): ReadField(chunk, size, m_nTempoMode); break;
- case MULTICHAR4_LE_MSVC('P','M','M','.'): ReadFieldCast(chunk, size, m_nMixLevels); break;
- case MULTICHAR4_LE_MSVC('C','W','V','.'): ReadField(chunk, size, m_dwCreatedWithVersion); break;
- case MULTICHAR4_LE_MSVC('L','S','W','V'): ReadField(chunk, size, m_dwLastSavedWithVersion); break;
- case MULTICHAR4_LE_MSVC('S','P','A','.'): ReadField(chunk, size, m_nSamplePreAmp); break;
- case MULTICHAR4_LE_MSVC('V','S','T','V'): ReadField(chunk, size, m_nVSTiVolume); break;
- case MULTICHAR4_LE_MSVC('D','G','V','.'): ReadField(chunk, size, m_nDefaultGlobalVolume); break;
- case MULTICHAR4_LE_MSVC('R','P','.','.'): if(modtype != MOD_TYPE_XM) ReadField(chunk, size, m_nRestartPos); break;
- case MULTICHAR4_LE_MSVC('M','S','F','.'): ReadFieldFlagSet(chunk, size, m_ModFlags); break;
+ case MAGIC4BE('D','T','.','.'): ReadField(chunk, size, m_nDefaultTempo); break;
+ case MAGIC4BE('R','P','B','.'): ReadField(chunk, size, m_nDefaultRowsPerBeat); break;
+ case MAGIC4BE('R','P','M','.'): ReadField(chunk, size, m_nDefaultRowsPerMeasure); break;
+ case MAGIC4BE('C','.','.','.'): if(modtype != MOD_TYPE_XM) ReadField(chunk, size, m_nChannels); break;
+ case MAGIC4BE('T','M','.','.'): ReadField(chunk, size, m_nTempoMode); break;
+ case MAGIC4BE('P','M','M','.'): ReadFieldCast(chunk, size, m_nMixLevels); break;
+ case MAGIC4BE('C','W','V','.'): ReadField(chunk, size, m_dwCreatedWithVersion); break;
+ case MAGIC4BE('L','S','W','V'): ReadField(chunk, size, m_dwLastSavedWithVersion); break;
+ case MAGIC4BE('S','P','A','.'): ReadField(chunk, size, m_nSamplePreAmp); break;
+ case MAGIC4BE('V','S','T','V'): ReadField(chunk, size, m_nVSTiVolume); break;
+ case MAGIC4BE('D','G','V','.'): ReadField(chunk, size, m_nDefaultGlobalVolume); break;
+ case MAGIC4BE('R','P','.','.'): if(modtype != MOD_TYPE_XM) ReadField(chunk, size, m_nRestartPos); break;
+ case MAGIC4BE('M','S','F','.'): ReadFieldFlagSet(chunk, size, m_ModFlags); break;
#ifdef MODPLUG_TRACKER
- case MULTICHAR4_LE_MSVC('M','I','M','A'): GetMIDIMapper().Deserialize(chunk); break;
+ case MAGIC4BE('M','I','M','A'): GetMIDIMapper().Deserialize(chunk); break;
#endif
- case MULTICHAR4_LE_MSVC('C','h','n','S'):
+ case MAGIC4BE('C','h','n','S'):
if(size <= (MAX_BASECHANNELS - 64) * 2 && (size % 2u) == 0)
{
STATIC_ASSERT(CountOf(ChnSettings) >= 64);
@@ -2227,7 +2228,7 @@
}
uint32 modularInstSize = 0;
- uint32 id = MULTICHAR4_LE_MSVC('I','N','S','M');
+ uint32 id = MAGIC4BE('I','N','S','M');
SwapBytesLE(id);
fwrite(&id, 1, sizeof(id), f); // mark this as an instrument with modular extensions
long sizePos = ftell(f); // we will want to write the modular data's total size here
@@ -2235,7 +2236,7 @@
// Write chunks
{ //VST Slot chunk:
- id = MULTICHAR4_LE_MSVC('P','L','U','G');
+ id = MAGIC4BE('P','L','U','G');
SwapBytesLE(id);
fwrite(&id, 1, sizeof(uint32), f);
fwrite(&(pIns->nMixPlug), 1, sizeof(uint8), f);
@@ -2286,7 +2287,7 @@
switch (chunkID)
{
- case MULTICHAR4_LE_MSVC('P','L','U','G'):
+ case MAGIC4BE('P','L','U','G'):
// Chunks don't tell us their length - stupid!
ins.nMixPlug = modularData.ReadUint8();
break;
Modified: trunk/OpenMPT/soundlib/Load_itp.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_itp.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/Load_itp.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -34,7 +34,7 @@
// v1.01: Added option to embed instrument headers
#define ITP_VERSION 0x00000103 // v1.03
-#define ITP_FILE_ID 0x2E697470 // .itp ASCII
+#define ITP_FILE_ID MAGIC4BE('.','i','t','p') // .itp ASCII
// Read variable-length ITP string.
@@ -231,7 +231,7 @@
file.ReadConvertEndianness(sampleHeader);
size = file.ReadUint32LE();
- if(realSample >= 1 && realSample < MAX_SAMPLES && sampleHeader.id == ITSample::magic)
+ if(realSample >= 1 && realSample < MAX_SAMPLES && !memcmp(sampleHeader.id, "IMPS", 4))
{
sampleHeader.ConvertToMPT(Samples[realSample]);
mpt::String::Read<mpt::String::nullTerminated>(m_szNames[realSample], sampleHeader.name);
Modified: trunk/OpenMPT/soundlib/Load_okt.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_okt.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/Load_okt.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -21,14 +21,14 @@
// IFF chunk names
enum ChunkIdentifiers
{
- idCMOD = 0x434D4F44,
- idSAMP = 0x53414D50,
- idSPEE = 0x53504545,
- idSLEN = 0x534C454E,
- idPLEN = 0x504C454E,
- idPATT = 0x50415454,
- idPBOD = 0x50424F44,
- idSBOD = 0x53424F44,
+ idCMOD = MAGIC4BE('C','M','O','D'),
+ idSAMP = MAGIC4BE('S','A','M','P'),
+ idSPEE = MAGIC4BE('S','P','E','E'),
+ idSLEN = MAGIC4BE('S','L','E','N'),
+ idPLEN = MAGIC4BE('P','L','E','N'),
+ idPATT = MAGIC4BE('P','A','T','T'),
+ idPBOD = MAGIC4BE('P','B','O','D'),
+ idSBOD = MAGIC4BE('S','B','O','D'),
};
uint32 signature; // IFF chunk name
Modified: trunk/OpenMPT/soundlib/Load_psm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_psm.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/Load_psm.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -39,23 +39,14 @@
// PSM File Header
struct PACKED PSMFileHeader
{
- // Magic Bytes
- enum PSMMagic
- {
- magicPSM_ = 0x204D5350,
- magicFILE = 0x454C4946,
- };
-
- uint32 formatID; // "PSM " (new format)
+ char formatID[4]; // "PSM " (new format)
uint32 fileSize; // Filesize - 12
- uint32 fileInfoID; // "FILE" Start of file info
+ char fileInfoID[4]; // "FILE"
// Convert all multi-byte numeric values to current platform's endianness or vice versa.
void ConvertEndianness()
{
- SwapBytesLE(formatID);
SwapBytesLE(fileSize);
- SwapBytesLE(fileInfoID);
}
};
@@ -67,16 +58,16 @@
// 32-Bit chunk identifiers
enum ChunkIdentifiers
{
- idTITL = 0x4C544954,
- idSDFT = 0x54464453,
- idPBOD = 0x444F4250,
- idSONG = 0x474E4F53,
- idDATE = 0x45544144,
- idOPLH = 0x484C504F,
- idPPAN = 0x4E415050,
- idPATT = 0x54544150,
- idDSAM = 0x4D415344,
- idDSMP = 0x504D5344,
+ idTITL = MAGIC4LE('T','I','T','L'),
+ idSDFT = MAGIC4LE('S','D','F','T'),
+ idPBOD = MAGIC4LE('P','B','O','D'),
+ idSONG = MAGIC4LE('S','O','N','G'),
+ idDATE = MAGIC4LE('D','A','T','E'),
+ idOPLH = MAGIC4LE('O','P','L','H'),
+ idPPAN = MAGIC4LE('P','P','A','N'),
+ idPATT = MAGIC4LE('P','A','T','T'),
+ idDSAM = MAGIC4LE('D','S','A','M'),
+ idDSMP = MAGIC4LE('D','S','M','P'),
};
typedef ChunkIdentifiers id_type;
@@ -277,9 +268,9 @@
bool newFormat = false; // The game "Sinaria" uses a slightly modified PSM structure
// Check header
- if(fileHeader.formatID != PSMFileHeader::magicPSM_ // "PSM "
+ if(memcmp(fileHeader.formatID, "PSM ", 4)
|| fileHeader.fileSize != file.BytesLeft()
- || fileHeader.fileInfoID != PSMFileHeader::magicFILE) // "FILE"
+ || memcmp(fileHeader.fileInfoID, "FILE", 4))
{
return false;
} else if(loadFlags == onlyVerifyHeader)
@@ -609,7 +600,7 @@
SAMPLEINDEX smp = static_cast<SAMPLEINDEX>(sampleHeader.sampleNumber + 1);
if(smp < MAX_SAMPLES)
{
- m_nSamples = MAX(m_nSamples, smp);
+ m_nSamples = std::max(m_nSamples, smp);
mpt::String::Read<mpt::String::nullTerminated>(m_szNames[smp], sampleHeader.sampleName);
sampleHeader.ConvertToMPT(Samples[smp]);
@@ -627,7 +618,7 @@
SAMPLEINDEX smp = static_cast<SAMPLEINDEX>(sampleHeader.sampleNumber + 1);
if(smp < MAX_SAMPLES)
{
- m_nSamples = MAX(m_nSamples, smp);
+ m_nSamples = std::max(m_nSamples, smp);
mpt::String::Read<mpt::String::nullTerminated>(m_szNames[smp], sampleHeader.sampleName);
sampleHeader.ConvertToMPT(Samples[smp]);
@@ -972,15 +963,13 @@
// 32-Bit chunk identifiers
enum PSM16Magic
{
- magicPSM_ = 0xFE4D5350,
-
- idPORD = 0x44524f50,
- idPPAN = 0x4E415050,
- idPSAH = 0x48415350,
- idPPAT = 0x54415050,
+ idPORD = MAGIC4LE('P','O','R','D'),
+ idPPAN = MAGIC4LE('P','P','A','N'),
+ idPSAH = MAGIC4LE('P','S','A','H'),
+ idPPAT = MAGIC4LE('P','P','A','T'),
};
- uint32 formatID; // "PSM\xFE" (PSM16)
+ char formatID[4]; // "PSM\xFE" (PSM16)
char songName[59]; // Song title, padded with nulls
uint8 lineEnd; // $1A
uint8 songType; // Song Type bitfield
@@ -1006,7 +995,6 @@
// Convert all multi-byte numeric values to current platform's endianness or vice versa.
void ConvertEndianness()
{
- SwapBytesLE(formatID);
SwapBytesLE(songLength);
SwapBytesLE(songOrders);
SwapBytesLE(numPatterns);
@@ -1145,7 +1133,7 @@
// Is it a valid PSM16 file?
PSM16FileHeader fileHeader;
if(!file.ReadConvertEndianness(fileHeader)
- || fileHeader.formatID != PSM16FileHeader::magicPSM_ // "PSM\xFE"
+ || memcmp(fileHeader.formatID, "PSM\xFE", 4)
|| fileHeader.lineEnd != 0x1A
|| (fileHeader.formatVersion != 0x10 && fileHeader.formatVersion != 0x01) // why is this sometimes 0x01?
|| fileHeader.patternVersion != 0 // 255ch pattern version not supported (did anyone use this?)
@@ -1205,7 +1193,7 @@
}
SAMPLEINDEX smp = sampleHeader.sampleNumber;
- m_nSamples = MAX(m_nSamples, smp);
+ m_nSamples = std::max(m_nSamples, smp);
mpt::String::Read<mpt::String::nullTerminated>(m_szNames[smp], sampleHeader.name);
sampleHeader.ConvertToMPT(Samples[smp]);
@@ -1440,5 +1428,11 @@
}
}
+ if(fileHeader.commentsOffset != 0)
+ {
+ file.Seek(fileHeader.commentsOffset);
+ songMessage.Read(file, file.ReadUint16LE(), SongMessage::leAutodetect);
+ }
+
return true;
}
Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_s3m.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -189,7 +189,7 @@
S3MFileHeader fileHeader;
if(!file.ReadConvertEndianness(fileHeader)
|| !file.CanRead(fileHeader.ordNum + (fileHeader.smpNum + fileHeader.patNum) * 2)
- || fileHeader.magic != S3MFileHeader::idSCRM
+ || memcmp(fileHeader.magic, "SCRM", 4)
|| fileHeader.fileType != S3MFileHeader::idS3MType
|| (fileHeader.formatVersion != S3MFileHeader::oldVersion && fileHeader.formatVersion != S3MFileHeader::newVersion))
{
@@ -600,7 +600,7 @@
// Following: One nibble = Major version, one byte = Minor version (hex)
fileHeader.cwtv = S3MFileHeader::trkOpenMPT | static_cast<uint16>((MptVersion::num >> 16) & S3MFileHeader::versionMask);
fileHeader.formatVersion = S3MFileHeader::newVersion;
- fileHeader.magic = S3MFileHeader::idSCRM;
+ memcpy(fileHeader.magic, "SCRM", 4);
// Song Variables
fileHeader.globalVol = static_cast<uint8>(MIN(m_nDefaultGlobalVolume / 4, 64));
Modified: trunk/OpenMPT/soundlib/Loaders.h
===================================================================
--- trunk/OpenMPT/soundlib/Loaders.h 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/Loaders.h 2014-01-01 22:14:52 UTC (rev 3543)
@@ -13,3 +13,10 @@
#include "FileReader.h"
#include "Sndfile.h"
#include "SampleIO.h"
+
+// Macros to create magic bytes in little-endian format
+#define MAGIC4LE(a, b, c, d) static_cast<uint32>((static_cast<uint8>(d) << 24) | (static_cast<uint8>(c) << 16) | (static_cast<uint8>(b) << 8) | static_cast<uint8>(a))
+#define MAGIC2LE(a, b) static_cast<uint16>((static_cast<uint8>(b) << 8) | static_cast<uint8>(a))
+// Macros to create magic bytes in big-endian format
+#define MAGIC4BE(a, b, c, d) static_cast<uint32>((static_cast<uint8>(a) << 24) | (static_cast<uint8>(b) << 16) | (static_cast<uint8>(c) << 8) | static_cast<uint8>(d))
+#define MAGIC2BE(a, b) static_cast<uint16>((static_cast<uint8>(a) << 8) | static_cast<uint8>(b))
Modified: trunk/OpenMPT/soundlib/S3MTools.cpp
===================================================================
--- trunk/OpenMPT/soundlib/S3MTools.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/S3MTools.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -24,7 +24,6 @@
SwapBytesLE(flags);
SwapBytesLE(cwtv);
SwapBytesLE(formatVersion);
- SwapBytesLE(magic);
}
@@ -36,7 +35,6 @@
SwapBytesLE(loopStart);
SwapBytesLE(loopEnd);
SwapBytesLE(c5speed);
- SwapBytesLE(magic);
}
@@ -47,7 +45,7 @@
mptSmp.Initialize(MOD_TYPE_S3M);
mpt::String::Read<mpt::String::maybeNullTerminated>(mptSmp.filename, filename);
- if((sampleType == typePCM || sampleType == typeNone) && magic == idSCRS)
+ if((sampleType == typePCM || sampleType == typeNone) && !memcmp(magic, "SCRS", 4))
{
// Sample Length and Loops
if(sampleType == typePCM)
@@ -118,7 +116,7 @@
{
c5speed = ModSample::TransposeToFrequency(mptSmp.RelativeTone, mptSmp.nFineTune);
}
- magic = idSCRS;
+ memcpy(magic, "SCRS", 4);
return smpLength;
}
Modified: trunk/OpenMPT/soundlib/S3MTools.h
===================================================================
--- trunk/OpenMPT/soundlib/S3MTools.h 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/S3MTools.h 2014-01-01 22:14:52 UTC (rev 3543)
@@ -24,7 +24,6 @@
// Magic Bytes
enum S3MMagic
{
- idSCRM = 0x4D524353,
idEOF = 0x1A,
idS3MType = 0x10,
idPanning = 0xFC,
@@ -74,7 +73,7 @@
uint16 flags; // Flags, see S3MHeaderFlags
uint16 cwtv; // "Made With" Tracker ID, see S3MTrackerVersions
uint16 formatVersion; // Format Version, see S3MFormatVersion
- uint32 magic; // "SCRM" magic bytes
+ char magic[4]; // "SCRM" magic bytes
uint8 globalVol; // Default Global Volume (0...64)
uint8 speed; // Default Speed (1...254)
uint8 tempo; // Default Tempo (33...255)
@@ -95,11 +94,6 @@
// S3M Sample Header
struct PACKED S3MSampleHeader
{
- enum SampleMagic
- {
- idSCRS = 0x53524353,
- };
-
enum SampleType
{
typeNone = 0,
@@ -134,7 +128,7 @@
uint32 c5speed; // Middle-C frequency
char reserved2[12]; // Reserved + Internal ST3 stuff
char name[28]; // Sample name
- uint32 magic; // "SCRS" magic bytes ("SCRI" for Adlib instruments)
+ char magic[4]; // "SCRS" magic bytes ("SCRI" for Adlib instruments)
// Convert all multi-byte numeric values to current platform's endianness or vice versa.
void ConvertEndianness();
Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp
===================================================================
--- trunk/OpenMPT/soundlib/SampleFormats.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/SampleFormats.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -828,7 +828,7 @@
S3MSampleHeader sampleHeader;
if(!file.ReadConvertEndianness(sampleHeader)
|| sampleHeader.sampleType != S3MSampleHeader::typePCM
- || sampleHeader.magic != S3MSampleHeader::idSCRS
+ || memcmp(sampleHeader.magic, "SRCS", 4)
|| !file.Seek((sampleHeader.dataPointer[1] << 4) | (sampleHeader.dataPointer[2] << 12) | (sampleHeader.dataPointer[0] << 20)))
{
return false;
@@ -1431,7 +1431,7 @@
ITSample sampleHeader;
if(!file.ReadConvertEndianness(sampleHeader)
- || sampleHeader.id != ITSample::magic)
+ || memcmp(sampleHeader.id, "IMPS", 4))
{
return false;
}
@@ -1453,7 +1453,7 @@
file.Rewind();
if(!file.ReadConvertEndianness(instrumentHeader)
- || instrumentHeader.id != ITInstrument::magic
+ || memcmp(instrumentHeader.id, "IMPI", 4)
|| instrumentHeader.nos == 0)
{
return false;
@@ -1475,7 +1475,7 @@
file.Rewind();
if(!file.ReadConvertEndianness(instrumentHeader)
- || instrumentHeader.id != ITInstrument::magic)
+ || memcmp(instrumentHeader.id, "IMPI", 4))
{
return false;
}
Modified: trunk/OpenMPT/soundlib/load_j2b.cpp
===================================================================
--- trunk/OpenMPT/soundlib/load_j2b.cpp 2014-01-01 21:55:55 UTC (rev 3542)
+++ trunk/OpenMPT/soundlib/load_j2b.cpp 2014-01-01 22:14:52 UTC (rev 3543)
@@ -48,12 +48,11 @@
enum J2BMagic
{
// 32-Bit J2B header identifiers
- magicMUSE = 0x4553554D,
magicDEADBEAF = 0xAFBEADDE,
magicDEADBABE = 0xBEBAADDE,
};
- uint32 signature; // MUSE
+ char signature[4]; // MUSE
uint32 deadbeaf; // 0xDEADBEAF (AM) or 0xDEADBABE (AMFF)
uint32 fileLength; // complete filesize
uint32 crc32; // checksum of the compressed data block
@@ -63,7 +62,6 @@
// Convert all multi-byte numeric values to current platform's endianness or vice versa.
void ConvertEndianness()
{
- SwapBytesLE(signature);
SwapBytesLE(deadbeaf);
SwapBytesLE(fileLength);
SwapBytesLE(crc32);
@@ -82,17 +80,17 @@
// 32-Bit chunk identifiers
enum ChunkIdentifiers
{
- idRIFF = 0x46464952,
- idAMFF = 0x46464D41,
- idAM__ = 0x20204D41,
- idMAIN = 0x4E49414D,
- idINIT = 0x54494E49,
- idORDR = 0x5244524F,
- idPATT = 0x54544150,
- idINST = 0x54534E49,
- idSAMP = 0x504D4153,
- idAI__ = 0x20204941,
- idAS__ = 0x20205341,
+ idRIFF = MAGIC4LE('R','I','F','F'),
+ idAMFF = MAGIC4LE('A','M','F','F'),
+ idAM__ = MAGIC4LE('A','M',' ',' '),
+ idMAIN = MAGIC4LE('M','A','I','N'),
+ idINIT = MAGIC4LE('I','N','I','T'),
+ idORDR = MAGIC4LE('O','R','D','R'),
+ idPATT = MAGIC4LE('P','A','T','T'),
+ idINST = MAGIC4LE('I','N','S','T'),
+ idSAMP = MAGIC4LE('S','A','M','P'),
+ idAI__ = MAGIC4LE('A','I',' ',' '),
+ idAS__ = MAGIC4LE('A','S',' ',' '),
};
typedef ChunkIdentifiers id_type;
@@ -999,7 +997,7 @@
return false;
}
- if(fileHeader.signature != J2BFileHeader::magicMUSE // "MUSE"
+ if(memcmp(fileHeader.signature, "MUSE", 4)
|| (fileHeader.deadbeaf != J2BFileHeader::magicDEADBEAF // 0xDEADBEAF (RIFF AM)
&& fileHeader.deadbeaf != J2BFileHeader::magicDEADBABE) // 0xDEADBABE (RIFF AMFF)
|| fileHeader.fileLength != file.GetLength()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|