From: <sag...@us...> - 2013-03-23 16:22:35
|
Revision: 1640 http://sourceforge.net/p/modplug/code/1640 Author: saga-games Date: 2013-03-23 16:22:25 +0000 (Sat, 23 Mar 2013) Log Message: ----------- [Ref] Converted CHAR m_szInstrumentPath[MAX_INSTRUMENTS][_MAX_PATH] into mpt::String array to reduce memory usage. Maybe we should also make it a vector instead of an array later... Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/soundlib/Load_itp.cpp trunk/OpenMPT/soundlib/SampleFormats.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2013-03-23 16:22:25 UTC (rev 1640) @@ -1469,9 +1469,7 @@ m_pModDoc->UpdateAllViews(NULL, HINT_SAMPLEINFO | HINT_MODTYPE, NULL); // -> CODE#0023 // -> DESC="IT project files (.itp)" - const size_t n = max(strlen(lpszFileName), size_t(_MAX_PATH - 1)); - strncpy(m_pSndFile->m_szInstrumentPath[m_nInstrument - 1], lpszFileName, n); - m_pSndFile->m_szInstrumentPath[m_nInstrument-1][n] = '\0'; + m_pSndFile->m_szInstrumentPath[m_nInstrument - 1] = lpszFileName; SetInstrumentModified(false); // -! NEW_FEATURE#0023 bOk = TRUE; @@ -1836,9 +1834,7 @@ // -> CODE#0023 // -> DESC="IT project files (.itp)" - int n = strlen(files.first_file.c_str()); - if(n > _MAX_PATH) n = _MAX_PATH; - strncpy(m_pSndFile->m_szInstrumentPath[m_nInstrument-1], files.first_file.c_str(),n); + m_pSndFile->m_szInstrumentPath[m_nInstrument - 1] = files.first_file; SetInstrumentModified(false); // -! NEW_FEATURE#0023 Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2013-03-23 16:22:25 UTC (rev 1640) @@ -488,33 +488,24 @@ { if((m_SndFile.GetType() & MOD_TYPE_IT) && m_SndFile.m_SongFlags[SONG_ITPROJECT] && !m_SndFile.m_SongFlags[SONG_ITPEMBEDIH]) { - bool unsavedInstrument = false; - for(INSTRUMENTINDEX i = 0 ; i < m_SndFile.GetNumInstruments() ; i++) + for(INSTRUMENTINDEX i = 0 ; i < m_SndFile.GetNumInstruments(); i++) { if(m_bsInstrumentModified[i]) { unsavedInstrument = true; - break; + break; } } if(unsavedInstrument && Reporting::Confirm("Do you want to save modified instruments?") == cnfYes) { - - for(INSTRUMENTINDEX i = 0 ; i < m_SndFile.m_nInstruments ; i++) + for(INSTRUMENTINDEX i = 0; i < m_SndFile.GetNumInstruments(); i++) { - if(m_SndFile.m_szInstrumentPath[i][0] != '\0') + if(m_bsInstrumentModified[i]) { - const size_t len = strlen(m_SndFile.m_szInstrumentPath[i]); - const bool iti = _stricmp(&m_SndFile.m_szInstrumentPath[i][len - 3],"iti") == 0; - const bool xi = _stricmp(&m_SndFile.m_szInstrumentPath[i][len - 2],"xi") == 0; - - if(iti || (!iti && !xi && m_SndFile.m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) - m_SndFile.SaveITIInstrument(i+1, m_SndFile.m_szInstrumentPath[i], false); - if(xi || (!xi && !iti && m_SndFile.m_nType == MOD_TYPE_XM)) - m_SndFile.SaveXIInstrument(i+1, m_SndFile.m_szInstrumentPath[i]); + SaveInstrument(i + 1); } } } @@ -522,6 +513,31 @@ return CDocument::SaveModified(); } + + +bool CModDoc::SaveInstrument(INSTRUMENTINDEX instr) +//------------------------------------------------- +{ + if(instr > 0 && instr <= GetNumInstruments()) + { + instr--; + if(!m_SndFile.m_szInstrumentPath[instr].IsEmpty()) + { + const size_t len = m_SndFile.m_szInstrumentPath[instr].length(); + const bool iti = _stricmp(&m_SndFile.m_szInstrumentPath[instr][len - 3], "iti") == 0; + const bool xi = _stricmp(&m_SndFile.m_szInstrumentPath[instr][len - 2], "xi") == 0; + + if(iti || (!iti && !xi && m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT))) + m_SndFile.SaveITIInstrument(instr + 1, m_SndFile.m_szInstrumentPath[instr], false); + if(xi || (!xi && !iti && m_SndFile.GetType() == MOD_TYPE_XM)) + m_SndFile.SaveXIInstrument(instr + 1, m_SndFile.m_szInstrumentPath[instr]); + m_bsInstrumentModified.reset(instr); + return true; + } + } + return false; +} + // -! NEW_FEATURE#0023 Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/mptrack/Moddoc.h 2013-03-23 16:22:25 UTC (rev 1640) @@ -340,6 +340,7 @@ // -> CODE#0023 // -> DESC="IT project files (.itp)" virtual BOOL SaveModified(); + bool SaveInstrument(INSTRUMENTINDEX instr); // -! NEW_FEATURE#0023 virtual BOOL DoSave(LPCSTR lpszPathName, BOOL bSaveAs=TRUE); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2013-03-23 16:22:25 UTC (rev 1640) @@ -738,7 +738,7 @@ *pIns = *pDup; // -> CODE#0023 // -> DESC="IT project files (.itp)" - strcpy(m_SndFile.m_szInstrumentPath[newins - 1], m_SndFile.m_szInstrumentPath[nDuplicate - 1]); + m_SndFile.m_szInstrumentPath[newins - 1] = m_SndFile.m_szInstrumentPath[nDuplicate - 1]; m_bsInstrumentModified.reset(newins - 1); // -! NEW_FEATURE#0023 } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2013-03-23 16:22:25 UTC (rev 1640) @@ -993,7 +993,7 @@ if(sndFile.m_SongFlags[SONG_ITPROJECT]) { // path info for ITP instruments - const bool pathOk = sndFile.m_szInstrumentPath[nIns - 1][0] != '\0'; + const bool pathOk = !sndFile.m_szInstrumentPath[nIns - 1].IsEmpty(); const bool instMod = pDoc->m_bsInstrumentModified.test(nIns - 1); wsprintf(s, pathOk ? (instMod ? "%3d: * %s" : "%3d: %s") : "%3d: ? %s", nIns, (LPCTSTR)sndFile.GetInstrumentName(nIns)); } else @@ -3157,7 +3157,7 @@ "All files(*.*)|*.*||"); if(files.abort) return; - strcpy(pSndFile->m_szInstrumentPath[modItemID - 1], files.first_file.c_str()); + pSndFile->m_szInstrumentPath[modItemID - 1] = files.first_file; OnRefreshTree(); } } @@ -3173,9 +3173,10 @@ //const uint32 modItemType = GetModItemType(modItem); const uint32 modItemID = GetModItemID(modItem); - if(pSndFile && modItemID){ + if(pSndFile && modItemID) + { - if(pSndFile->m_szInstrumentPath[modItemID - 1][0] == '\0') + if(pSndFile->m_szInstrumentPath[modItemID - 1].IsEmpty()) { FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog(false, (pSndFile->GetType() == MOD_TYPE_XM) ? "xi" : "iti", "", (pSndFile->GetType() == MOD_TYPE_XM) ? @@ -3185,23 +3186,11 @@ "FastTracker II Instruments (*.xi)|*.xi||"); if(files.abort) return; - strcpy(pSndFile->m_szInstrumentPath[modItemID - 1], files.first_file.c_str()); + pSndFile->m_szInstrumentPath[modItemID - 1] = files.first_file; } - if(pSndFile->m_szInstrumentPath[modItemID - 1][0] != '\0') - { - int size = strlen(pSndFile->m_szInstrumentPath[modItemID - 1]); - BOOL iti = _stricmp(&pSndFile->m_szInstrumentPath[modItemID - 1][size-3],"iti") == 0; - BOOL xi = _stricmp(&pSndFile->m_szInstrumentPath[modItemID - 1][size-2],"xi") == 0; + pModDoc->SaveInstrument(modItemID); - if(iti || (!iti && !xi && pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) - pSndFile->SaveITIInstrument((INSTRUMENTINDEX)modItemID, pSndFile->m_szInstrumentPath[modItemID - 1], false); - if(xi || (!xi && !iti && pSndFile->m_nType == MOD_TYPE_XM)) - pSndFile->SaveXIInstrument((INSTRUMENTINDEX)modItemID, pSndFile->m_szInstrumentPath[modItemID - 1]); - - pModDoc->m_bsInstrumentModified.reset(modItemID - 1); - } - if(pModDoc) pModDoc->UpdateAllViews(NULL, HINT_MODTYPE); OnRefreshTree(); } Modified: trunk/OpenMPT/mptrack/view_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/view_com.cpp 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/mptrack/view_com.cpp 2013-03-23 16:22:25 UTC (rev 1640) @@ -416,7 +416,7 @@ case INSLIST_PATH: if (pIns) { - memcpy(s, pSndFile->m_szInstrumentPath[iIns], _MAX_PATH); + strncpy(s, pSndFile->m_szInstrumentPath[iIns], _MAX_PATH); s[_MAX_PATH] = 0; } break; Modified: trunk/OpenMPT/soundlib/Load_itp.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_itp.cpp 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/soundlib/Load_itp.cpp 2013-03-23 16:22:25 UTC (rev 1640) @@ -109,7 +109,9 @@ size = file.ReadUint32LE(); // path string length for(INSTRUMENTINDEX ins = 0; ins < GetNumInstruments(); ins++) { - file.ReadString<StringFixer::maybeNullTerminated>(m_szInstrumentPath[ins], size); + char path[_MAX_PATH]; + file.ReadString<StringFixer::maybeNullTerminated>(path, size); + m_szInstrumentPath[ins] = path; } // Song Orders @@ -199,7 +201,7 @@ for(INSTRUMENTINDEX ins = 0; ins < GetNumInstruments(); ins++) { - if(m_szInstrumentPath[ins][0] == '\0' || !f.Open(m_szInstrumentPath[ins])) continue; + if(m_szInstrumentPath[ins].IsEmpty() || !f.Open(m_szInstrumentPath[ins])) continue; size = f.GetLength(); LPBYTE lpFile = f.Lock(size); @@ -263,7 +265,7 @@ if(!m_SongFlags[SONG_ITPROJECT]) return false; UINT i,j = 0; - for(i = 0 ; i < m_nInstruments ; i++) { if(m_szInstrumentPath[i][0] != '\0' || !Instruments[i+1]) j++; } + for(i = 0 ; i < m_nInstruments ; i++) { if(!m_szInstrumentPath[i].IsEmpty() || !Instruments[i+1]) j++; } if(m_nInstruments && j != m_nInstruments) return false; // Open file @@ -363,7 +365,13 @@ fwrite(&id, 1, sizeof(id), f); // instruments' path - for(i=0; i<m_nInstruments; i++) fwrite(&m_szInstrumentPath[i][0], 1, _MAX_PATH, f); + for(i = 0; i < m_nInstruments; i++) + { + char path[_MAX_PATH]; + MemsetZero(path); + strncpy(path, m_szInstrumentPath[i], _MAX_PATH); + fwrite(path, 1, _MAX_PATH, f); + } // Song Orders @@ -419,26 +427,21 @@ id = m_nSamples; fwrite(&id, 1, sizeof(id), f); - vector<bool> sampleUsed(m_nSamples, false); + vector<bool> sampleUsed(GetNumSamples() + 1, false); // Mark samples used in instruments - for(i=0; i<m_nInstruments; i++) + for(i = 0; i < m_nInstruments; i++) { if(Instruments[i + 1] != nullptr) { - ModInstrument *p = Instruments[i + 1]; - for(j = 0; j < 128; j++) - { - if(p->Keyboard[j] > 0 && p->Keyboard[j] <= m_nSamples) - sampleUsed[p->Keyboard[j] - 1] = true; - } + Instruments[i + 1]->GetSamples(sampleUsed); } } // Count samples not used in any instrument i = 0; for(j = 1; j <= m_nSamples; j++) - if(!sampleUsed[j - 1] && Samples[j].pSample) i++; + if(!sampleUsed[j] && Samples[j].pSample) i++; id = i; fwrite(&id, 1, sizeof(id), f); @@ -446,7 +449,7 @@ // Write samples not used in any instrument (help, this looks like duplicate code!) for(UINT nsmp=1; nsmp<=m_nSamples; nsmp++) { - if(!sampleUsed[nsmp - 1] && Samples[nsmp].pSample) + if(!sampleUsed[nsmp] && Samples[nsmp].pSample) { ITSample itss; itss.ConvertToIT(Samples[nsmp], GetType(), false, false); Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp =================================================================== --- trunk/OpenMPT/soundlib/SampleFormats.cpp 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/soundlib/SampleFormats.cpp 2013-03-23 16:22:25 UTC (rev 1640) @@ -150,7 +150,7 @@ // -> CODE#0023 // -> DESC="IT project files (.itp)" - m_szInstrumentPath[nInstr - 1][0] = '\0'; + m_szInstrumentPath[nInstr - 1].Empty(); #ifdef MODPLUG_TRACKER if(GetpModDoc()) { Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-03-23 16:22:25 UTC (rev 1640) @@ -454,15 +454,6 @@ m_dwCreatedWithVersion=0; m_bChannelMuteTogglePending.reset(); - -// -> CODE#0023 -// -> DESC="IT project files (.itp)" - for(UINT i = 0; i < MAX_INSTRUMENTS; i++) - { - MemsetZero(m_szInstrumentPath[i]); - } -// -! NEW_FEATURE#0023 - MemsetZero(ChnMix); MemsetZero(Instruments); MemsetZero(m_szNames); Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2013-03-23 16:14:44 UTC (rev 1639) +++ trunk/OpenMPT/soundlib/Sndfile.h 2013-03-23 16:22:25 UTC (rev 1640) @@ -313,7 +313,7 @@ // -> CODE#0023 // -> DESC="IT project files (.itp)" - CHAR m_szInstrumentPath[MAX_INSTRUMENTS][_MAX_PATH]; + mpt::String m_szInstrumentPath[MAX_INSTRUMENTS]; // -! NEW_FEATURE#0023 public: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |