|
From: <Rel...@us...> - 2006-12-28 17:09:57
|
Revision: 170
http://svn.sourceforge.net/modplug/?rev=170&view=rev
Author: Relabsoluness
Date: 2006-12-28 09:09:51 -0800 (Thu, 28 Dec 2006)
Log Message:
-----------
<Relabs> Added mptrack_generic.exe to the test branch.
. <Relabs> Fixed a few possibilities of creating buffer overruns related to tuning notename handling.
. <Relabs> Fixed channelmanager not updating channel states correctly when reordering channels.
Modified Paths:
--------------
branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/bin/mptrack_Generic.exe
branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp
branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp
branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/ChannelManagerDlg.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -199,40 +199,28 @@
BeginWaitCursor();
BEGIN_CRITICAL();
- // Rearrange patterns content
- for(i = 0; i < m_pSndFile->Patterns.Size(); i++){
+ //Creating new order-vector for ReArrangeChannels.
+ vector<CHANNELINDEX> newChnOrder; newChnOrder.reserve(nChannels);
+ for(i = 0; i<nChannels; i++)
+ {
+ newChnOrder.push_back(newpat[i]);
+ }
+ if(m_pSndFile->ReArrangeChannels(newChnOrder) != nChannels)
+ {
+ MessageBox("Rearranging channels failed");
+ END_CRITICAL();
+ EndWaitCursor();
- // Allocate a new empty pattern to replace current pattern at i'th position in pattern array
- p = m_pSndFile->Patterns[i];
- if(p) newp = CSoundFile::AllocatePattern(m_pSndFile->PatternSize[i], nChannels);
+ ResetState(TRUE,TRUE,TRUE,TRUE,TRUE);
+ LeaveCriticalSection(&applying);
- if(p && !newp){
- END_CRITICAL();
- EndWaitCursor();
- LeaveCriticalSection(&applying);
- ::MessageBox(NULL, "Pattern Data is corrupted!!!", "ERROR: Not enough memory to rearrange channels!", MB_ICONERROR | MB_OK);
- return;
- }
-
- // Copy data from old pattern taking care of new channel reodering
- if(p != NULL){
- for(j = 0 ; j < m_pSndFile->PatternSize[i] ; j++){
- for(k = 0 ; k < nChannels ; k++)
- memcpy(&newp[j*nChannels + k],&p[j*m_pSndFile->m_nChannels + newpat[k]],sizeof(MODCOMMAND));
- }
- // Set new pattern in pattern array & free previous pattern
- m_pSndFile->Patterns[i] = newp;
- CSoundFile::FreePattern(p);
- }
+ return;
}
+
- // Copy channel settings
- for(i = 0 ; i < m_pSndFile->m_nChannels ; i++) settings[i] = m_pSndFile->ChnSettings[i];
-
// Redistribute channel setting & update manager internal store memory
for(i = 0 ; i < nChannels ; i++){
if(i != newpat[i]){
- m_pSndFile->ChnSettings[i] = settings[newpat[i]];
memory[0][i] = newMemory[0][newpat[i]];
memory[1][i] = newMemory[1][newpat[i]];
memory[2][i] = newMemory[2][newpat[i]];
@@ -240,23 +228,13 @@
memory[3][i] = i;
}
- // Also update record states (unfortunetely they are not part of channel settings)
- for(i = 0 ; i < nChannels ; i++) newMemory[1][i] = pModDoc->IsChannelRecord(i);
-
- pModDoc->ReinitRecordState();
- for(i = 0 ; i < nChannels ; i++){
- if(newMemory[1][newpat[i]] == 1) pModDoc->Record1Channel(i,TRUE);
- if(newMemory[1][newpat[i]] == 2) pModDoc->Record2Channel(i,TRUE);
- }
-
- // Update new number of channels
- m_pSndFile->m_nChannels = nChannels;
if(pActiveMod == pModDoc){
i = m_pSndFile->GetCurrentPos();
m_pSndFile->m_dwSongFlags &= ~SONG_STEP;
m_pSndFile->SetCurrentPos(0);
m_pSndFile->SetCurrentPos(i);
}
+
END_CRITICAL();
EndWaitCursor();
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/Ctrl_ins.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -164,8 +164,9 @@
// Note
s[0] = 0;
-
- if ((nPos >= 0) && (nPos < 120)) wsprintf(s, "%s", pSndFile->GetNoteName(nPos+1, m_nInstrument).c_str());
+ string temp = pSndFile->GetNoteName(nPos+1, m_nInstrument);
+ temp.resize(4);
+ if ((nPos >= 0) && (nPos < 120)) wsprintf(s, "%s", temp.c_str());
rect.SetRect(0, ypaint, m_cxFont, ypaint+m_cyFont);
DrawButtonRect(hdc, &rect, s, FALSE, FALSE);
// Mapped Note
@@ -178,7 +179,12 @@
UINT n = penv->NoteMap[nPos];
if (n == 0xFF) strcpy(s, "==="); else
if (n == 0xFE) strcpy(s, "^^^"); else
- if (n <= 120) wsprintf(s, "%s", pSndFile->GetNoteName(n, m_nInstrument).c_str());
+ if (n <= 120)
+ {
+ string temp = pSndFile->GetNoteName(n, m_nInstrument);
+ temp.resize(4);
+ wsprintf(s, "%s", temp.c_str());
+ }
}
FillRect(hdc, &rect, (bHighLight) ? CMainFrame::brushHighLight : CMainFrame::brushWindow);
if ((nPos == (int)m_nNote) && (!m_bIns))
@@ -1351,8 +1357,8 @@
case IDC_CHECK_PITCHTEMPOLOCK:
if ((m_pSndFile) && (m_pSndFile->Headers[m_nInstrument]))
{
- const string str = string("Tempo range: ") + Stringify(m_pSndFile->GetTempoMin()) + string(" - ") + Stringify(m_pSndFile->GetTempoMax());
- ASSERT(str.size() < 256);
+ string str = string("Tempo range: ") + Stringify(m_pSndFile->GetTempoMin()) + string(" - ") + Stringify(m_pSndFile->GetTempoMax());
+ if(str.size() >= 250) str.resize(250);
wsprintf(pszText, str.c_str());
return TRUE;
}
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/View_ins.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -1366,6 +1366,7 @@
}
}
}
+ return ENV_RELEASE_NODE_UNSET;
}
WORD CViewInstrument::EnvGetReleaseNodeValue()
@@ -1388,6 +1389,7 @@
}
}
}
+ return 0;
}
WORD CViewInstrument::EnvGetReleaseNodeTick()
@@ -1410,6 +1412,7 @@
}
}
}
+ return 0;
}
@@ -1456,7 +1459,6 @@
} else
if ((pnotify->dwType & dwType) && ((pnotify->dwType & 0xFFFF) == m_nInstrument))
{
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
BOOL bUpdate = FALSE;
for (UINT i=0; i<MAX_CHANNELS; i++)
{
@@ -2353,6 +2355,7 @@
if ((pModDoc) && (pMainFrm) && (note<128))
{
CHAR s[64];
+ const size_t sizeofS = sizeof(s) / sizeof(s[0]);
if (note >= 0xFE)
{
pModDoc->NoteOff(0, (note == 0xFE) ? TRUE : FALSE, m_nInstrument);
@@ -2379,7 +2382,14 @@
m_baPlayingNote[note] = true; //rewbs.instViewNNA
m_nPlayingChannel= pModDoc->PlayNote(note, m_nInstrument, 0, FALSE); //rewbs.instViewNNA
s[0] = 0;
- if ((note) && (note <= 120)) wsprintf(s, "%s", pModDoc->GetSoundFile()->GetNoteName(static_cast<CTuning::STEPTYPE>(note), m_nInstrument).c_str());
+ if ((note) && (note <= 120))
+ {
+ const string temp = pModDoc->GetSoundFile()->GetNoteName(static_cast<CTuning::STEPTYPE>(note), m_nInstrument);
+ if(temp.size() >= sizeofS)
+ wsprintf(s, "%s", "...");
+ else
+ wsprintf(s, "%s", temp.c_str());
+ }
pMainFrm->SetInfoText(s);
}
}
@@ -2602,7 +2612,7 @@
return CModScrollView::PreTranslateMessage(pMsg);
}
-LRESULT CViewInstrument::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam)
+LRESULT CViewInstrument::OnCustomKeyMsg(WPARAM wParam, LPARAM)
{
if (wParam == kcNull)
return NULL;
@@ -2610,7 +2620,7 @@
CModDoc *pModDoc = GetDocument();
if (!pModDoc) return NULL;
- CSoundFile *pSndFile = pModDoc->GetSoundFile();
+ //CSoundFile *pSndFile = pModDoc->GetSoundFile();
CMainFrame *pMainFrm = CMainFrame::GetMainFrame();
switch(wParam)
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/bin/mptrack_Generic.exe
===================================================================
(Binary files differ)
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/dlg_misc.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -1135,6 +1135,7 @@
//--------------------------------
{
char s[64];
+ const size_t sizeofS = sizeof(s) / sizeof(s[0]);
CComboBox *combo;
CSoundFile *pSndFile;
@@ -1147,7 +1148,12 @@
combo->SetItemData(combo->AddString("No note"), 0);
for (UINT i=1; i<=120; i++)
{
- wsprintf(s, "%s", pSndFile->GetNoteName(i, m_nInstr).c_str());
+ const string temp = pSndFile->GetNoteName(i, m_nInstr);
+ if(temp.size() >= sizeofS)
+ wsprintf(s, "%s", "...");
+ else
+ wsprintf(s, "%s", temp.c_str());
+
combo->SetItemData(combo->AddString(s), i);
}
if (pSndFile->m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT))
@@ -2577,13 +2583,18 @@
//-------------------------------------------------------------------
{
CHAR s[32] = "--";
+ const size_t sizeofS = sizeof(s)/sizeof(s[0]);
if ((lParam >= 0) && (lParam < 3*12) && (m_pSndFile))
{
UINT nSample = m_CbnSample.GetItemData(m_CbnSample.GetCurSel());
UINT nBaseOctave = m_SbOctave.GetPos() & 7;
- wsprintf(s, "%s", m_pSndFile->GetNoteName(lParam+1+12*nBaseOctave, m_nInstrument).c_str());
+ const string temp = m_pSndFile->GetNoteName(lParam+1+12*nBaseOctave, m_nInstrument).c_str();
+ if(temp.size() >= sizeofS)
+ wsprintf(s, "%s", "...");
+ else
+ wsprintf(s, "%s", temp.c_str());
INSTRUMENTHEADER *penv = m_pSndFile->Headers[m_nInstrument];
if ((wParam == KBDNOTIFY_LBUTTONDOWN) && (nSample > 0) && (nSample < MAX_SAMPLES) && (penv))
Modified: branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp
===================================================================
--- branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/mptrack/tuningRatioMapWnd.cpp 2006-12-28 17:09:51 UTC (rev 170)
@@ -46,6 +46,7 @@
{
BOOL bFocus = (::GetFocus() == m_hWnd) ? TRUE : FALSE;
CHAR s[64];
+ const size_t sizeofS = sizeof(s) / sizeof(s[0]);
CRect rect;
CTuning::STEPTYPE nNotes = static_cast<CTuning::STEPTYPE>((rcClient.bottom + m_cyFont - 1) / m_cyFont);
@@ -59,7 +60,12 @@
BOOL bHighLight;
// Note
s[0] = 0;
- wsprintf(s, "%s", m_pTuning->GetNoteName(nPos - 61).c_str());
+ const string temp = m_pTuning->GetNoteName(nPos - 61).c_str();
+ if(temp.size() >= sizeofS)
+ wsprintf(s, "%s", "...");
+ else
+ wsprintf(s, "%s", temp.c_str());
+
rect.SetRect(0, ypaint, m_cxFont, ypaint+m_cyFont);
DrawButtonRect(hdc, &rect, s, FALSE, FALSE);
// Mapped Note
Modified: branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h
===================================================================
--- branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h 2006-12-21 15:02:44 UTC (rev 169)
+++ branches/OpenMPT_MPTm_Tuning/soundlib/tuning_template.h 2006-12-28 17:09:51 UTC (rev 170)
@@ -368,7 +368,7 @@
const CTuningBase<>::SERIALIZATION_RETURN_TYPE CTuningBase<A, B, C>::SERIALIZATION_FAILURE = true;
template<class A, class B, class C>
-const string CTuningBase<A, B, C>::s_FileExtension = ".mptt";
+const string CTuningBase<A, B, C>::s_FileExtension = ".tun";
template<class A, class B, class C>
const CTuning::CEDITMASK CTuningBase<A, B, C>::EM_MAINRATIOS = 0x1; //1b
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|