From: <rel...@us...> - 2009-05-09 23:01:43
|
Revision: 257 http://modplug.svn.sourceforge.net/modplug/?rev=257&view=rev Author: relabsoluness Date: 2009-05-09 23:01:26 +0000 (Sat, 09 May 2009) Log Message: ----------- . IT load: Macro config should now be loaded correctly also when loading IT files not made with MPT. . IT compatibility export: tentative fix to hidden last sequence item when opened in IT. . IT compatibility play: tentative fix to vibrato with ramp down waveform. / Misc: Minor changes to load functions. / Misc: Removed tremor effect description. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/soundlib/LOAD_AMF.CPP trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Load_okt.cpp trunk/OpenMPT/soundlib/Load_stm.cpp trunk/OpenMPT/soundlib/Sampleio.cpp trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -2495,12 +2495,6 @@ wsprintf(s, "%dbpm", param); break; - case CMD_TREMOR: - if(param) - wsprintf(s, "ontime %d, offtime %d", param >> 4, param & 0x0F); - else - strcpy(s, "continue"); - break; case CMD_RETRIG: switch(param >> 4) { Modified: trunk/OpenMPT/soundlib/LOAD_AMF.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2009-05-09 23:01:26 UTC (rev 257) @@ -174,7 +174,7 @@ DWORD dwMemPos; if ((!lpStream) || (dwMemLength < 2048)) return FALSE; - if ((!strncmp((LPCTSTR)lpStream, "ASYLUM Music Format V1.0", 25)) && (dwMemLength > 4096)) + if ((!strncmp((LPCSTR)lpStream, "ASYLUM Music Format V1.0", 25)) && (dwMemLength > 4096)) { UINT numorders, numpats, numsamples; @@ -370,7 +370,7 @@ // Store tracks positions BYTE **pTrackData = new BYTE *[realtrackcnt]; memset(pTrackData, 0, sizeof(pTrackData)); - for (UINT iTrack=0; iTrack<realtrackcnt; iTrack++) if (dwMemPos + 3 <= dwMemLength) + for (UINT iTrack=0; iTrack<realtrackcnt; iTrack++) if (dwMemPos <= dwMemLength-3) { UINT nTrkSize = LittleEndianW(*(USHORT *)(lpStream+dwMemPos)); nTrkSize += (UINT)lpStream[dwMemPos+2] << 16; Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -980,7 +980,7 @@ if (pifh->flags & 0x08) m_dwSongFlags |= SONG_LINEARSLIDES; if (pifh->flags & 0x10) m_dwSongFlags |= SONG_ITOLDEFFECTS; if (pifh->flags & 0x20) m_dwSongFlags |= SONG_ITCOMPATMODE; - if (pifh->flags & 0x80) m_dwSongFlags |= SONG_EMBEDMIDICFG; + if ((pifh->flags & 0x80) || (pifh->special & 0x08)) m_dwSongFlags |= SONG_EMBEDMIDICFG; if (pifh->flags & 0x1000) m_dwSongFlags |= SONG_EXFILTERRANGE; memcpy(m_szNames[0], pifh->songname, 26); m_szNames[0][26] = 0; @@ -1241,7 +1241,7 @@ // Reading Samples m_nSamples = pifh->smpnum; if (m_nSamples >= MAX_SAMPLES) m_nSamples = MAX_SAMPLES-1; - for (UINT nsmp=0; nsmp<pifh->smpnum; nsmp++) if ((smppos[nsmp]) && (smppos[nsmp] + sizeof(ITSAMPLESTRUCT) <= dwMemLength)) + for (UINT nsmp=0; nsmp<pifh->smpnum; nsmp++) if ((smppos[nsmp]) && (smppos[nsmp] <= dwMemLength - sizeof(ITSAMPLESTRUCT))) { lastSampleSize = 0; //ensure lastsamplesize = 0 if last sample is empty, else we'll skip the MPTX stuff. ITSAMPLESTRUCT *pis = (ITSAMPLESTRUCT *)(lpStream+smppos[nsmp]); @@ -1761,7 +1761,6 @@ memset(&itss, 0, sizeof(itss)); memcpy(itss.filename, psmp->name, 12); memcpy(itss.name, m_szNames[nsmp], 26); - SetNullTerminator(itss.name); itss.id = 0x53504D49; itss.gvl = (BYTE)psmp->nGlobalVol; @@ -2058,7 +2057,6 @@ memset(smpcount, 0, sizeof(smpcount)); memcpy(iti.filename, penv->filename, 12); memcpy(iti.name, penv->name, 26); - SetNullTerminator(iti.name); iti.mbank = penv->wMidiBank; iti.mpr = penv->nMidiProgram; iti.mch = penv->nMidiChannel; @@ -2376,7 +2374,6 @@ memset(&itss, 0, sizeof(itss)); memcpy(itss.filename, psmp->name, 12); memcpy(itss.name, m_szNames[nsmp], 26); - SetNullTerminator(itss.name); itss.id = 0x53504D49; itss.gvl = (BYTE)psmp->nGlobalVol; if (m_nInstruments) @@ -2545,6 +2542,10 @@ while (header.ordnum>0 && Order[header.ordnum-1]==0xFF) { header.ordnum--; } + + if(header.ordnum + 1 < MAX_ORDERS) + header.ordnum++; + header.patnum = MAX_PATTERNS; while ((header.patnum > 0) && (!Patterns[header.patnum-1])) { header.patnum--; Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -328,7 +328,6 @@ INSTRUMENTHEADER *penv = Headers[nins]; memset(penv, 0, sizeof(INSTRUMENTHEADER)); memcpy(penv->name, lpStream+dwPos+2, 32); - SetNullTerminator(penv->name); penv->nGlobalVol = 64; penv->nPPC = 5*12; SetDefaultInstrumentValues(penv); @@ -458,7 +457,7 @@ { DWORD dwLen = *((DWORD *)(lpStream+dwPos)); dwPos += 4; - if ((dwPos+dwLen <= dwMemLength) && (dwLen > 4)) + if ( (dwLen <= dwMemLength) && (dwPos <= dwMemLength - dwLen) && (dwLen > 4) ) { flags = (pins->uFlags & CHN_16BIT) ? RS_MDL16 : RS_MDL8; ReadSample(pins, flags, (LPSTR)(lpStream+dwPos), dwLen); Modified: trunk/OpenMPT/soundlib/Load_med.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Load_med.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -521,7 +521,7 @@ dwBlockArr = BigEndian(pmmh->blockarr); dwSmplArr = BigEndian(pmmh->smplarr); dwExpData = BigEndian(pmmh->expdata); - if ((dwExpData) && (dwExpData+sizeof(MMD0EXP) < dwMemLength)) + if ((dwExpData) && (dwExpData < dwMemLength - sizeof(MMD0EXP))) pmex = (MMD0EXP *)(lpStream+dwExpData); else pmex = NULL; @@ -659,7 +659,7 @@ } UINT pseq = 0; - if ((playseqtable) && (playseqtable + nplayseq*4 < dwMemLength)) + if ((playseqtable) && (playseqtable < dwMemLength) && (nplayseq*4 < dwMemLength - playseqtable)) { pseq = BigEndian(((LPDWORD)(lpStream+playseqtable))[nplayseq]); } @@ -737,7 +737,7 @@ } // Track Names DWORD trackinfo_ofs = BigEndian(pmex->trackinfo_ofs); - if ((trackinfo_ofs) && (trackinfo_ofs + m_nChannels * 4 < dwMemLength)) + if ((trackinfo_ofs) && (trackinfo_ofs < dwMemLength) && (m_nChannels * 4 < dwMemLength - trackinfo_ofs)) { DWORD *ptrktags = (DWORD *)(lpStream + trackinfo_ofs); for (UINT i=0; i<m_nChannels; i++) @@ -866,7 +866,7 @@ { DWORD nameofs = BigEndian(pbi->blockname); UINT namelen = BigEndian(pbi->blocknamelen); - if ((nameofs < dwMemLength) && (nameofs+namelen < dwMemLength)) + if ((nameofs < dwMemLength) && (namelen < dwMemLength - nameofs)) { SetPatternName(iBlk, (LPCSTR)(lpStream+nameofs)); } Modified: trunk/OpenMPT/soundlib/Load_mid.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mid.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Load_mid.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -590,7 +590,7 @@ pmth = (MIDITRACKHEADER *)(lpStream+dwMemPos); if (dwMemPos + 8 >= dwMemLength) break; DWORD len = BigEndian(pmth->len); - if ((pmth->id == 0x6B72544D) && (dwMemPos + 8 + len <= dwMemLength)) + if ((pmth->id == 0x6B72544D) && (len <= dwMemLength - (dwMemPos + 8))) { #ifdef MIDI_DETAILED_LOG Log(" track%d at offset %d len=%d ", itrk, dwMemPos+8, len); Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mt2.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -418,7 +418,7 @@ #ifdef MT2DEBUG if (iIns <= pfh->wInstruments) Log(" Instrument #%d at offset %04X: %d bytes\n", iIns, dwMemPos, pmi->dwDataLen); #endif - if (((LONG)pmi->dwDataLen > 0) && (dwMemPos + pmi->dwDataLen + 40 <= dwMemLength)) + if (((LONG)pmi->dwDataLen > 0) && (dwMemPos <= dwMemLength - 40) && (pmi->dwDataLen <= dwMemLength - (dwMemPos + 40))) { InstrMap[iIns-1] = pmi; if (penv) Modified: trunk/OpenMPT/soundlib/Load_okt.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_okt.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Load_okt.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -113,7 +113,7 @@ } // PBOD UINT npat = 0; - while ((dwMemPos+10 < dwMemLength) && (*((DWORD *)(lpStream + dwMemPos)) == 0x444F4250)) + while ((dwMemPos < dwMemLength-10) && (*((DWORD *)(lpStream + dwMemPos)) == 0x444F4250)) { DWORD dwPos = dwMemPos + 10; UINT rows = lpStream[dwMemPos+9]; @@ -189,7 +189,7 @@ } // SBOD UINT nsmp = 1; - while ((dwMemPos+10 < dwMemLength) && (*((DWORD *)(lpStream + dwMemPos)) == 0x444F4253)) + while ((dwMemPos < dwMemLength - 10) && (*((DWORD *)(lpStream + dwMemPos)) == 0x444F4253)) { if (nsmp < MAX_SAMPLES) ReadSample(&Ins[nsmp], RS_PCM8S, (LPSTR)(lpStream+dwMemPos+8), dwMemLength-dwMemPos-8); dwMemPos += BigEndian(*((DWORD *)(lpStream + dwMemPos + 4))) + 8; Modified: trunk/OpenMPT/soundlib/Load_stm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_stm.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Load_stm.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -177,7 +177,7 @@ if (pIns->nLength) { UINT nPos = ((UINT)phdr->sample[nSmp-1].reserved) << 4; - if ((nPos >= sizeof(STMHEADER)) && (nPos+pIns->nLength <= dwMemLength)) dwMemPos = nPos; + if ((nPos >= sizeof(STMHEADER)) && (nPos <= dwMemLength) && (pIns->nLength <= dwMemLength-nPos)) dwMemPos = nPos; if (dwMemPos < dwMemLength) { dwMemPos += ReadSample(pIns, RS_PCM8S, (LPSTR)(lpStream+dwMemPos),dwMemLength-dwMemPos); Modified: trunk/OpenMPT/soundlib/Sampleio.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sampleio.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Sampleio.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -566,7 +566,6 @@ if (xtrabytes >= 22) { memcpy(pins->name, pszTextEx, 22); - SetNullTerminator(pins->name); xtrabytes -= 22; } } Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2009-05-02 20:42:19 UTC (rev 256) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2009-05-09 23:01:26 UTC (rev 257) @@ -1276,7 +1276,10 @@ switch (pChn->nVibratoType & 0x03) { case 1: - vdelta = ModRampDownTable[vibpos]; + if(GetModFlag(MSF_IT_COMPATIBLE_PLAY) == true) + vdelta = -ModRampDownTable[(vibpos+16) % 64]; + else + vdelta = ModRampDownTable[vibpos]; break; case 2: vdelta = ModSquareTable[vibpos]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |