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. |