From: <re...@us...> - 2006-04-11 23:46:56
|
Revision: 156 Author: rewbs Date: 2006-04-11 16:44:36 -0700 (Tue, 11 Apr 2006) ViewCVS: http://svn.sourceforge.net/modplug/?rev=156&view=rev Log Message: ----------- . v1.17.02.42 + <rewbs> "Compatibility export" in file menu: save as 'plain' IT, without all of OpenMPT's crap. IT only for now (not XM). . <rewbs> Set instrument in pattern editor should work when no note is specified (tx Torvus - http://lpchip.com/modplug/viewtopic.php?t=470) . <rewbs> Restart position saved in IT (tx LPChip - http://lpchip.com/modplug/viewtopic.php?t=473) . <rewbs> Loop song now works even if restart pos falls on +++ (tx LPChip - http://lpchip.com/modplug/viewtopic.php?t=463) . <rewbs> Last used tempo is applied even when playback is triggered from instrument panel. (tx LPChip - http://lpchip.com/modplug/viewtopic.php?t=480) / <rewbs> User now gets a warning when loading MDA Degrade (tx fisk0 - http://lpchip.com/modplug/viewtopic.php?t=467) Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/bin/mptrack_Generic.exe trunk/OpenMPT/mptrack/bin/mptrack_P3.exe trunk/OpenMPT/mptrack/bin/mptrack_P4-Athlon64.exe trunk/OpenMPT/mptrack/bin/mptrack_athlon32.exe trunk/OpenMPT/mptrack/bin/version trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/packageTemplate/History.txt trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Removed Paths: ------------- trunk/OpenMPT/mptrack/bin/testSvnCommitList trunk/OpenMPT/mptrack/bin/testSvnCommitList2 Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -2253,13 +2253,11 @@ commands[kcChangeLoopStatus].isDummy = false; commands[kcChangeLoopStatus].Message = "Toggle loop pattern"; + commands[kcFileExportCompat].UID = 1777; + commands[kcFileExportCompat].Message = "File/Export to standard IT/XM"; + commands[kcFileExportCompat].isHidden = false; + commands[kcFileExportCompat].isDummy = false; -/* commands[kcToggleLoopSong].UID = 1777; - commands[kcToggleLoopSong].isHidden = false; - commands[kcToggleLoopSong].isDummy = false; - commands[kcToggleLoopSong].Message = "Toggle loop song"; -*/ - #ifdef _DEBUG for (int i=0; i<kcNumCommands; i++) { if (commands[i].UID != 0) { // ignore unset UIDs Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/CommandSet.h 2006-04-11 23:44:36 UTC (rev 156) @@ -57,6 +57,7 @@ kcFileSaveAsWave, kcFileSaveAsMP3, kcFileSaveMidi, + kcFileExportCompat, kcPrevDocument, kcNextDocument, kcFileImportMidiLib, Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -330,6 +330,7 @@ case ID_FILE_SAVEASWAVE: s="Save as Wave...\t"; c=kcFileSaveAsWave; break; case ID_FILE_SAVEASMP3: s="Save as MP3...\t"; c=kcFileSaveAsMP3; break; case ID_FILE_SAVEMIDI: s="Export as Midi...\t"; c=kcFileSaveMidi; break; + case ID_FILE_SAVECOMPAT: s="Compatibility Export...\t"; c=kcFileExportCompat; break; case ID_IMPORT_MIDILIB: s="Import Midi Library...\t"; c=kcFileImportMidiLib; break; case ID_ADD_SOUNDBANK: s="Add Sound Bank...\t"; c=kcFileAddSoundBank; break; @@ -390,6 +391,7 @@ pMenu->ModifyMenu(ID_FILE_SAVEASWAVE, MF_BYCOMMAND | MF_STRING, ID_FILE_SAVEASWAVE, GetMenuText(ID_FILE_SAVEASWAVE)); pMenu->ModifyMenu(ID_FILE_SAVEASMP3, MF_BYCOMMAND | MF_STRING, ID_FILE_SAVEASMP3, GetMenuText(ID_FILE_SAVEASMP3)); pMenu->ModifyMenu(ID_FILE_SAVEMIDI, MF_BYCOMMAND | MF_STRING, ID_FILE_SAVEMIDI, GetMenuText(ID_FILE_SAVEMIDI)); + pMenu->ModifyMenu(ID_FILE_SAVECOMPAT, MF_BYCOMMAND | MF_STRING, ID_FILE_SAVECOMPAT, GetMenuText(ID_FILE_SAVECOMPAT)); pMenu->ModifyMenu(ID_IMPORT_MIDILIB, MF_BYCOMMAND | MF_STRING, ID_IMPORT_MIDILIB, GetMenuText(ID_IMPORT_MIDILIB)); pMenu->ModifyMenu(ID_ADD_SOUNDBANK, MF_BYCOMMAND | MF_STRING, ID_ADD_SOUNDBANK, GetMenuText(ID_ADD_SOUNDBANK)); Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -2707,6 +2707,7 @@ case kcFileSaveAs: case kcFileSaveAsWave: case kcFileSaveMidi: + case kcFileExportCompat: case kcFileClose: case kcFileSave: case kcViewGeneral: Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -30,6 +30,7 @@ ON_COMMAND(ID_FILE_SAVEASWAVE, OnFileWaveConvert) ON_COMMAND(ID_FILE_SAVEASMP3, OnFileMP3Convert) ON_COMMAND(ID_FILE_SAVEMIDI, OnFileMidiConvert) + ON_COMMAND(ID_FILE_SAVECOMPAT, OnFileCompatibilitySave) ON_COMMAND(ID_PLAYER_PLAY, OnPlayerPlay) ON_COMMAND(ID_PLAYER_PAUSE, OnPlayerPause) ON_COMMAND(ID_PLAYER_STOP, OnPlayerStop) @@ -386,11 +387,7 @@ case MOD_TYPE_MOD: bOk = m_SndFile.SaveMod(lpszPathName, dwPacking); break; case MOD_TYPE_S3M: bOk = m_SndFile.SaveS3M(lpszPathName, dwPacking); break; case MOD_TYPE_XM: bOk = m_SndFile.SaveXM(lpszPathName, dwPacking); break; -// -> CODE#0023 -// -> DESC="IT project files (.itp)" -// case MOD_TYPE_IT: bOk = m_SndFile.SaveIT(lpszPathName, dwPacking); break; case MOD_TYPE_IT: bOk = (m_SndFile.m_dwSongFlags & SONG_ITPROJECT || !lstrcmpi(fext, ".itp")) ? m_SndFile.SaveITProject(lpszPathName) : m_SndFile.SaveIT(lpszPathName, dwPacking); break; -// -! NEW_FEATURE#0023 } EndWaitCursor(); if (bOk) @@ -398,12 +395,8 @@ if (nType == m_SndFile.m_nType) SetPathName(lpszPathName); } else { -// -> CODE#0023 -// -> DESC="IT project files (.itp)" -// ErrorBox(IDS_ERR_SAVESONG, CMainFrame::GetMainFrame()); if(nType == MOD_TYPE_IT && m_SndFile.m_dwSongFlags & SONG_ITPROJECT) ::MessageBox(NULL,"ITP projects need to have a path set for each instrument...",NULL,MB_ICONERROR | MB_OK); else ErrorBox(IDS_ERR_SAVESONG, CMainFrame::GetMainFrame()); -// -! NEW_FEATURE#0023 } return bOk; } @@ -1499,7 +1492,7 @@ void CModDoc::OnFileMidiConvert() -//------------------------------- +//------------------------------------- { CHAR path[_MAX_PATH]="", drive[_MAX_DRIVE]=""; CHAR s[_MAX_PATH], fname[_MAX_FNAME]=""; @@ -1527,7 +1520,60 @@ } } +//HACK: This is a quick fix. Needs to be better integrated into player and GUI. +void CModDoc::OnFileCompatibilitySave() +//------------------------------- +{ + CHAR path[_MAX_PATH]="", drive[_MAX_DRIVE]=""; + CHAR s[_MAX_PATH], fname[_MAX_FNAME]=""; + CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); + CString ext, pattern; + + UINT type = m_SndFile.GetType(); + if ((!pMainFrm) || (!m_SndFile.GetType())) return; + switch (type) { + /*case MOD_TYPE_XM: + ext = "xm"; + pattern = "Fast Tracker Files (*.xm)|*.xm||"; + break;*/ + case MOD_TYPE_IT: + ext = "it"; + pattern = "Impulse Tracker Files (*.it)|*.it||"; + break; + default: + ::MessageBox(NULL,"Compatibility export is currently only available the IT format.", "Can't do compatibility export.",MB_ICONINFORMATION | MB_OK); + return; + } + + ::MessageBox(NULL,"Warning: the exported file will not contain any of MPT's file-format hacks.", "Compatibility export warning.",MB_ICONINFORMATION | MB_OK); + _splitpath(GetPathName(), drive, path, fname, NULL); + strcpy(s, drive); + strcat(s, path); + strcat(s, fname); + if (!strstr(fname, "compat")) { + strcat(s, ".compat."); + } else { + strcat(s, "."); + } + strcat(s, ext); + CFileDialog dlg(FALSE, ext, s, + OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOREADONLYRETURN, + pattern, pMainFrm); + if (dlg.DoModal() != IDOK){ + return; + } + switch (type) { + case MOD_TYPE_XM: + m_SndFile.SaveCompatXM(dlg.GetPathName()); + break; + case MOD_TYPE_IT: + m_SndFile.SaveCompatIT(dlg.GetPathName()); + break; + } +} + + void CModDoc::OnPlayerPlay() //-------------------------- { @@ -2871,6 +2917,7 @@ case kcFileSaveAsWave: OnFileWaveConvert(); break; case kcFileSaveAsMP3: OnFileMP3Convert(); break; case kcFileSaveMidi: OnFileMidiConvert(); break; + case kcFileExportCompat: OnFileCompatibilitySave(); break; case kcEstimateSongLength: OnEstimateSongLength(); break; case kcApproxRealBPM: OnApproximateBPM(); break; case kcFileSave: DoSave(m_strPathName, 0); break; Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/Moddoc.h 2006-04-11 23:44:36 UTC (rev 156) @@ -258,6 +258,7 @@ afx_msg void OnFileWaveConvert(); afx_msg void OnFileMP3Convert(); afx_msg void OnFileMidiConvert(); + afx_msg void OnFileCompatibilitySave(); afx_msg void OnPlayerPlay(); afx_msg void OnPlayerStop(); afx_msg void OnPlayerPause(); Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -2315,7 +2315,7 @@ { CModDoc *pModDoc; CSoundFile *pSndFile; - UINT nIns = GetCurrentInstrument(); + BYTE nIns = static_cast<BYTE>(GetCurrentInstrument()); MODCOMMAND *p; BOOL bModified; @@ -2334,14 +2334,15 @@ UINT startChan = GetSelectionStartChan(); UINT endChan = GetSelectionEndChan(); - for (UINT r=startRow; r<endRow+1; r++) - { - for (UINT c=startChan; c<endChan+1; c++) - { + for (UINT r=startRow; r<endRow+1; r++) { + for (UINT c=startChan; c<endChan+1; c++) { + p = pSndFile->Patterns[m_nPattern] + r * pSndFile->m_nChannels + c; - if (p->note && p->instr != (BYTE)nIns) - { - p->instr = (BYTE)nIns; + + // If a note or an instr is present on the row, do the change, if required. + // Do not set instr if note and instr are both blank. + if ( (p->note||p->instr) && (p->instr!=nIns) ) { + p->instr = nIns; bModified = TRUE; } } Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -1040,7 +1040,8 @@ #define NUM_PROBLEMPLUGS 3 static _PROBLEMATIC_PLUG gProblemPlugs[NUM_PROBLEMPLUGS] = { - {'VstP', 'Ni4S', 1, "Native Instruments B4", "*v1.1.1 hangs on playback. Do not proceed unless you have v1.1.5.*"}, + {'VstP', 'Ni4S', 1, "Native Instruments B4", "* v1.1.1 hangs on playback. Do not proceed unless you have v1.1.5. *"}, + {'VstP', 'mdaC', 1, "MDA Degrade", "* This plugin can cause OpenMPT to behave erratically.\r\nYou should try SoundHack's Decimate, ConcreteFX's Lowbit or Subtek's LoFi Plus instead. *"}, }; bool CSelectPluginDlg::VerifyPlug(PVSTPLUGINLIB plug) @@ -1048,10 +1049,10 @@ CString s; for (int p=0; p<NUM_PROBLEMPLUGS; p++) { - if ( (gProblemPlugs[p].id2 == plug->dwPluginId2) && gProblemPlugs[p].id2 + if ( (gProblemPlugs[p].id2 == plug->dwPluginId2) /*&& (gProblemPlugs[p].id1 == plug->dwPluginId1)*/) { - s.Format("WARNING: This plugin has been identified as %s,\r\n which is known to have the following problem with MPT:\r\n\r\n%s\r\n\r\n(see here for more information: http://www.modplug.com/forum/viewtopic.php?p=36930#36930)\r\n\r\nDo you want to continue to load?", gProblemPlugs[p].name, gProblemPlugs[p].problem); + s.Format("WARNING: This plugin has been identified as %s,\r\nwhich is known to have the following problem with OpenMPT:\r\n\r\n%s\r\n\r\nWould you like to continue to load this plugin?", gProblemPlugs[p].name, gProblemPlugs[p].problem); return (AfxMessageBox(s, MB_YESNO) == IDYES); } } @@ -2564,6 +2565,7 @@ pCh->uNoteOnMap[i][trackChannel]=0; MidiSend(dwMidiCode|(i<<8)); } + } // All "active" notes off on this midi and tracker channel Modified: trunk/OpenMPT/mptrack/bin/mptrack_Generic.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/bin/mptrack_P3.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/bin/mptrack_P4-Athlon64.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/bin/mptrack_athlon32.exe =================================================================== (Binary files differ) Deleted: trunk/OpenMPT/mptrack/bin/testSvnCommitList =================================================================== Deleted: trunk/OpenMPT/mptrack/bin/testSvnCommitList2 =================================================================== Modified: trunk/OpenMPT/mptrack/bin/version =================================================================== --- trunk/OpenMPT/mptrack/bin/version 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/bin/version 2006-04-11 23:44:36 UTC (rev 156) @@ -1 +1 @@ -1.17.02.41 \ No newline at end of file +1.17.02.42 \ No newline at end of file Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/mptrack.rc 2006-04-11 23:44:36 UTC (rev 156) @@ -106,6 +106,7 @@ MENUITEM "Save as &Wave...", ID_FILE_SAVEASWAVE MENUITEM "Save as M&P3...", ID_FILE_SAVEASMP3 MENUITEM "Export as M&idi...", ID_FILE_SAVEMIDI + MENUITEM "Export &unraped...", ID_FILE_SAVECOMPAT MENUITEM SEPARATOR MENUITEM "Import &midi Library...", ID_IMPORT_MIDILIB MENUITEM "Add Sound &Bank...", ID_ADD_SOUNDBANK @@ -1892,7 +1893,7 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,17,2,41 + FILEVERSION 1,17,2,42 PRODUCTVERSION 0,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG @@ -1910,7 +1911,7 @@ BEGIN VALUE "CompanyName", "Olivier Lapicque / OpenMPT team" VALUE "FileDescription", "OpenMPT / ModPlug Tracker" - VALUE "FileVersion", "1, 17, 2, 41" + VALUE "FileVersion", "1, 17, 2, 42" VALUE "InternalName", "Modplug Tracker" VALUE "LegalCopyright", "Copyright \xA91997-2003 Olivier Lapicque; \xA92004-2005 GPL." VALUE "LegalTrademarks", "M.O.D.P.L.U.G" @@ -2184,6 +2185,7 @@ ID_PATTERN_CHANNELMANAGER "Display channel manager window\nChannel manager" ID_INDICATOR_CPU "-" + ID_FILE_EXPORTCOMPAT "Export file to standard IT/XM." END STRINGTABLE @@ -2456,7 +2458,7 @@ STRINGTABLE BEGIN ID_SAMPLE_TRIM "Delete everything except the current selection\nTrim Sample" - ID_FILE_SAVEMIDI "Convert the current song to a standard midi file" + ID_FILE_SAVEMIDI "Export the current song to a standard midi file" ID_NETLINK_FORUMS "Go to the Modplug Central Music Forums" ID_INSTRUMENT_SAMPLEMAP "Edit the sample map" ID_NETLINK_PLUGINS "Go to KVR Audio to download plugins" Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/mptrack/resource.h 2006-04-11 23:44:36 UTC (rev 156) @@ -40,6 +40,7 @@ #define ID_PATTERN_CHANNELMANAGER 202 #define IDR_ENVELOPES 203 #define ID_INDICATOR_CPU 203 +#define ID_FILE_EXPORTCOMPAT 204 #define IDB_MAINBAR 300 #define IDB_IMAGELIST 301 #define IDB_PATTERNS 302 @@ -546,7 +547,6 @@ #define IDC_PATTERN_PLAYFROMSTART 2026 #define IDC_PATTERN_STOP 2027 #define IDC_PATTERN_RECORD 2028 -#define IDC_PATTERN_FOLLOWSONG 3029 #define IDC_PATTERN_NEW 2030 #define IDC_PATTERN_OCTAVELINK 2031 #define IDC_SPIN_SPACING 2032 @@ -738,6 +738,7 @@ #define IDC_TEXT_RPB 2301 #define IDC_SPIN_RPB 2302 #define IDC_EDIT_RPB 2303 +#define IDC_PATTERN_FOLLOWSONG 3029 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -939,6 +940,8 @@ #define ID_PATTERN_ADDCHANNEL_AFTER 59149 #define ID_PATTERN_REMOVECHANNEL 59150 #define ID_PATTERN_REMOVECHANNELDIALOG 59151 +#define ID_Menu 59200 +#define ID_FILE_SAVECOMPAT 59202 // Next default values for new objects // @@ -946,7 +949,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 510 -#define _APS_NEXT_COMMAND_VALUE 59200 +#define _APS_NEXT_COMMAND_VALUE 59203 #define _APS_NEXT_CONTROL_VALUE 2255 #define _APS_NEXT_SYMED_VALUE 901 #endif Modified: trunk/OpenMPT/packageTemplate/History.txt =================================================================== --- trunk/OpenMPT/packageTemplate/History.txt 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/packageTemplate/History.txt 2006-04-11 23:44:36 UTC (rev 156) @@ -8,7 +8,15 @@ ?: other (tx XYZ): thanks to XYZ for telling me about the bug +. v1.17.02.42 + + <rewbs> "Compatibility export" in file menu: save as 'plain' IT, without all of OpenMPT's crap. IT only for now (not XM). + . <rewbs> Set instrument in pattern editor should work when no note is specified (tx Torvus - http://lpchip.com/modplug/viewtopic.php?t=470) + . <rewbs> Restart position saved in IT (tx LPChip - http://lpchip.com/modplug/viewtopic.php?t=473) + . <rewbs> Loop song now works even if restart pos falls on +++ (tx LPChip - http://lpchip.com/modplug/viewtopic.php?t=463) + . <rewbs> Last used tempo is applied even when playback is triggered from instrument panel. (tx LPChip - http://lpchip.com/modplug/viewtopic.php?t=480) + / <rewbs> User now gets a warning when loading MDA Degrade (tx fisk0 - http://lpchip.com/modplug/viewtopic.php?t=467) + . v 1.17.02.41 + <rewbs> Pattern record state is now saved to ini . <rewbs> Fixed the following settings that were not saving correctly: mod document window status, row spacing, channel VU meters, channel effect visibility, Most recent files list, Toolbar settings. Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -601,6 +601,7 @@ case 'SPA.': fadr = reinterpret_cast<BYTE*>(&m_nSongPreAmp); break; case 'VSTV': fadr = reinterpret_cast<BYTE*>(&m_nVSTiVolume); break; case 'DGV.': fadr = reinterpret_cast<BYTE*>(&m_nDefaultGlobalVolume); break; + case 'RP..': fadr = reinterpret_cast<BYTE*>(&m_nRestartPos); break; } if (fadr != NULL) { // if field code recognized @@ -1007,6 +1008,7 @@ case 'SPA.': fadr = reinterpret_cast<BYTE*>(&m_nSongPreAmp); break; case 'VSTV': fadr = reinterpret_cast<BYTE*>(&m_nVSTiVolume); break; case 'DGV.': fadr = reinterpret_cast<BYTE*>(&m_nDefaultGlobalVolume); break; + case 'RP..': fadr = reinterpret_cast<BYTE*>(&m_nRestartPos); break; } if (fadr != NULL) { // if field code recognized @@ -1996,6 +1998,579 @@ #pragma warning(default:4100) #endif // MODPLUG_NO_FILESAVE +//HACK: This is a quick fix. Needs to be better integrated into player and GUI. +//And need to split into subroutines and eliminate code duplication with SaveIT. +BOOL CSoundFile::SaveCompatIT(LPCSTR lpszFileName) +//------------------------------------------------ +{ + const int IT_MAX_CHANNELS=64; + DWORD dwPatNamLen, dwChnNamLen; + ITFILEHEADER header; + ITINSTRUMENT iti; + ITSAMPLESTRUCT itss; + BYTE smpcount[(MAX_SAMPLES+7)/8]; + DWORD inspos[MAX_INSTRUMENTS]; + DWORD patpos[MAX_PATTERNS]; + DWORD smppos[MAX_SAMPLES]; + DWORD dwPos = 0, dwHdrPos = 0, dwExtra = 2; + WORD patinfo[4]; +// -> CODE#0006 +// -> DESC="misc quantity changes" + BYTE chnmask[IT_MAX_CHANNELS]; + MODCOMMAND lastvalue[IT_MAX_CHANNELS]; + UINT nChannels = min(m_nChannels, IT_MAX_CHANNELS); +// -! BEHAVIOUR_CHANGE#0006 + BYTE buf[512]; + FILE *f; + + + if ((!lpszFileName) || ((f = fopen(lpszFileName, "wb")) == NULL)) return FALSE; + memset(inspos, 0, sizeof(inspos)); + memset(patpos, 0, sizeof(patpos)); + memset(smppos, 0, sizeof(smppos)); + // Writing Header + memset(&header, 0, sizeof(header)); + dwPatNamLen = 0; + dwChnNamLen = 0; + header.id = 0x4D504D49; + lstrcpyn(header.songname, m_szNames[0], 27); + header.reserved1 = 0x1004; + header.ordnum = 0; + header.ordnum=MAX_ORDERS; + while (header.ordnum>0 && Order[header.ordnum-1]==0xFF) { + header.ordnum--; + } + header.patnum = MAX_PATTERNS; + while ((header.patnum > 0) && (!Patterns[header.patnum-1])) { + header.patnum--; + } + + header.insnum = m_nInstruments; + header.smpnum = m_nSamples; + header.cwtv = 0x888; // We don't use these version info fields any more. + header.cmwt = 0x888; // Might come up as "Impulse Tracker 8" file in XMPlay. :) + header.flags = 0x0001; + header.special = 0x0006; + if (m_nInstruments) header.flags |= 0x04; + if (m_dwSongFlags & SONG_LINEARSLIDES) header.flags |= 0x08; + if (m_dwSongFlags & SONG_ITOLDEFFECTS) header.flags |= 0x10; + if (m_dwSongFlags & SONG_ITCOMPATMODE) header.flags |= 0x20; + if (m_dwSongFlags & SONG_EXFILTERRANGE) header.flags |= 0x1000; + header.globalvol = m_nDefaultGlobalVolume >> 1; + header.mv = m_nSongPreAmp; + if (header.mv < 0x20) header.mv = 0x20; + if (header.mv > 0x7F) header.mv = 0x7F; + header.speed = m_nDefaultSpeed; + header.tempo = min(m_nDefaultTempo,255); //Limit this one to 255, we save the real one as an extension below. + header.sep = 128; + dwHdrPos = sizeof(header) + header.ordnum; + // Channel Pan and Volume + memset(header.chnpan, 0xFF, 64); + memset(header.chnvol, 64, 64); + for (UINT ich=0; ich<nChannels; ich++) + { + header.chnpan[ich] = ChnSettings[ich].nPan >> 2; + if (ChnSettings[ich].dwFlags & CHN_SURROUND) header.chnpan[ich] = 100; + header.chnvol[ich] = ChnSettings[ich].nVolume; + if (ChnSettings[ich].dwFlags & CHN_MUTE) header.chnpan[ich] |= 0x80; +/* if (ChnSettings[ich].szName[0]) + { + dwChnNamLen = (ich+1) * MAX_CHANNELNAME; + } +*/ + } +// if (dwChnNamLen) dwExtra += dwChnNamLen + 8; +/*#ifdef SAVEITTIMESTAMP + dwExtra += 8; // Time Stamp +#endif +*/ + if (m_dwSongFlags & SONG_EMBEDMIDICFG) + { + header.flags |= 0x80; + header.special |= 0x08; + dwExtra += sizeof(MODMIDICFG); + } + // Pattern Names +/* if ((m_nPatternNames) && (m_lpszPatternNames)) + { + dwPatNamLen = m_nPatternNames * MAX_PATTERNNAME; + while ((dwPatNamLen >= MAX_PATTERNNAME) && (!m_lpszPatternNames[dwPatNamLen-MAX_PATTERNNAME])) dwPatNamLen -= MAX_PATTERNNAME; + if (dwPatNamLen < MAX_PATTERNNAME) dwPatNamLen = 0; + if (dwPatNamLen) dwExtra += dwPatNamLen + 8; + } +*/ // Mix Plugins + //dwExtra += SaveMixPlugins(NULL, TRUE); + // Comments + if (m_lpszSongComments) + { + header.special |= 1; + header.msglength = strlen(m_lpszSongComments)+1; + header.msgoffset = dwHdrPos + dwExtra + header.insnum*4 + header.patnum*4 + header.smpnum*4; + } + // Write file header + fwrite(&header, 1, sizeof(header), f); + fwrite(Order, 1, header.ordnum, f); + if (header.insnum) fwrite(inspos, 4, header.insnum, f); + if (header.smpnum) fwrite(smppos, 4, header.smpnum, f); + if (header.patnum) fwrite(patpos, 4, header.patnum, f); + // Writing editor history information + { +/*#ifdef SAVEITTIMESTAMP + SYSTEMTIME systime; + FILETIME filetime; + WORD timestamp[4]; + WORD nInfoEx = 1; + memset(timestamp, 0, sizeof(timestamp)); + fwrite(&nInfoEx, 1, 2, f); + GetSystemTime(&systime); + SystemTimeToFileTime(&systime, &filetime); + FileTimeToDosDateTime(&filetime, ×tamp[0], ×tamp[1]); + fwrite(timestamp, 1, 8, f); +#else +*/ WORD nInfoEx = 0; + fwrite(&nInfoEx, 1, 2, f); +//#endif + } + // Writing midi cfg + if (header.flags & 0x80) + { + fwrite(&m_MidiCfg, 1, sizeof(MODMIDICFG), f); + } + // Writing pattern names +/* if (dwPatNamLen) + { + DWORD d = 0x4d414e50; + fwrite(&d, 1, 4, f); + fwrite(&dwPatNamLen, 1, 4, f); + fwrite(m_lpszPatternNames, 1, dwPatNamLen, f); + } +*/ // Writing channel Names +/* if (dwChnNamLen) + { + DWORD d = 0x4d414e43; + fwrite(&d, 1, 4, f); + fwrite(&dwChnNamLen, 1, 4, f); + UINT nChnNames = dwChnNamLen / MAX_CHANNELNAME; + for (UINT inam=0; inam<nChnNames; inam++) + { + fwrite(ChnSettings[inam].szName, 1, MAX_CHANNELNAME, f); + } + } +*/ // Writing mix plugins info +/* SaveMixPlugins(f, FALSE); +*/ // Writing song message + dwPos = dwHdrPos + dwExtra + (header.insnum + header.smpnum + header.patnum) * 4; + if (header.special & 1) + { + dwPos += strlen(m_lpszSongComments) + 1; + fwrite(m_lpszSongComments, 1, strlen(m_lpszSongComments)+1, f); + } + // Writing instruments + for (UINT nins=1; nins<=header.insnum; nins++) + { + BOOL bKbdEx = FALSE; + BYTE keyboardex[120]; + + memset(&iti, 0, sizeof(iti)); + iti.id = 0x49504D49; // "IMPI" + //iti.trkvers = 0x211; + iti.trkvers = 0x220; //rewbs.itVersion + if (Headers[nins]) + { + INSTRUMENTHEADER *penv = Headers[nins]; + memset(smpcount, 0, sizeof(smpcount)); + memcpy(iti.filename, penv->filename, 12); + memcpy(iti.name, penv->name, 26); + iti.mbank = penv->wMidiBank; + iti.mpr = penv->nMidiProgram; + iti.mch = penv->nMidiChannel; + iti.nna = penv->nNNA; + if (penv->nDCT<DCT_PLUGIN) iti.dct = penv->nDCT; else iti.dct =0; + iti.dca = penv->nDNA; + iti.fadeout = penv->nFadeOut >> 5; + iti.pps = penv->nPPS; + iti.ppc = penv->nPPC; + iti.gbv = (BYTE)(penv->nGlobalVol << 1); + iti.dfp = (BYTE)penv->nPan >> 2; + if (!(penv->dwFlags & ENV_SETPANNING)) iti.dfp |= 0x80; + iti.rv = penv->nVolSwing; + iti.rp = penv->nPanSwing; + iti.ifc = penv->nIFC; + iti.ifr = penv->nIFR; + iti.nos = 0; + for (UINT i=0; i<120; i++) if (penv->Keyboard[i] < MAX_SAMPLES) + { + UINT smp = penv->Keyboard[i]; + if ((smp) && (!(smpcount[smp>>3] & (1<<(smp&7))))) + { + smpcount[smp>>3] |= 1 << (smp&7); + iti.nos++; + } + iti.keyboard[i*2] = penv->NoteMap[i] - 1; + iti.keyboard[i*2+1] = smp; + if (smp > 0xff) bKbdEx = TRUE; + keyboardex[i] = (smp>>8); + } else keyboardex[i] = 0; + // Writing Volume envelope + if (penv->dwFlags & ENV_VOLUME) iti.volenv.flags |= 0x01; + if (penv->dwFlags & ENV_VOLLOOP) iti.volenv.flags |= 0x02; + if (penv->dwFlags & ENV_VOLSUSTAIN) iti.volenv.flags |= 0x04; + if (penv->dwFlags & ENV_VOLCARRY) iti.volenv.flags |= 0x08; + iti.volenv.num = (BYTE)penv->nVolEnv; + iti.volenv.lpb = (BYTE)penv->nVolLoopStart; + iti.volenv.lpe = (BYTE)penv->nVolLoopEnd; + iti.volenv.slb = penv->nVolSustainBegin; + iti.volenv.sle = penv->nVolSustainEnd; + // Writing Panning envelope + if (penv->dwFlags & ENV_PANNING) iti.panenv.flags |= 0x01; + if (penv->dwFlags & ENV_PANLOOP) iti.panenv.flags |= 0x02; + if (penv->dwFlags & ENV_PANSUSTAIN) iti.panenv.flags |= 0x04; + if (penv->dwFlags & ENV_PANCARRY) iti.panenv.flags |= 0x08; + iti.panenv.num = (BYTE)penv->nPanEnv; + iti.panenv.lpb = (BYTE)penv->nPanLoopStart; + iti.panenv.lpe = (BYTE)penv->nPanLoopEnd; + iti.panenv.slb = penv->nPanSustainBegin; + iti.panenv.sle = penv->nPanSustainEnd; + // Writing Pitch Envelope + if (penv->dwFlags & ENV_PITCH) iti.pitchenv.flags |= 0x01; + if (penv->dwFlags & ENV_PITCHLOOP) iti.pitchenv.flags |= 0x02; + if (penv->dwFlags & ENV_PITCHSUSTAIN) iti.pitchenv.flags |= 0x04; + if (penv->dwFlags & ENV_PITCHCARRY) iti.pitchenv.flags |= 0x08; + if (penv->dwFlags & ENV_FILTER) iti.pitchenv.flags |= 0x80; + iti.pitchenv.num = (BYTE)penv->nPitchEnv; + iti.pitchenv.lpb = (BYTE)penv->nPitchLoopStart; + iti.pitchenv.lpe = (BYTE)penv->nPitchLoopEnd; + iti.pitchenv.slb = (BYTE)penv->nPitchSustainBegin; + iti.pitchenv.sle = (BYTE)penv->nPitchSustainEnd; + // Writing Envelopes data + for (UINT ev=0; ev<25; ev++) + { + iti.volenv.data[ev*3] = penv->VolEnv[ev]; + iti.volenv.data[ev*3+1] = penv->VolPoints[ev] & 0xFF; + iti.volenv.data[ev*3+2] = penv->VolPoints[ev] >> 8; + iti.panenv.data[ev*3] = penv->PanEnv[ev] - 32; + iti.panenv.data[ev*3+1] = penv->PanPoints[ev] & 0xFF; + iti.panenv.data[ev*3+2] = penv->PanPoints[ev] >> 8; + iti.pitchenv.data[ev*3] = penv->PitchEnv[ev] - 32; + iti.pitchenv.data[ev*3+1] = penv->PitchPoints[ev] & 0xFF; + iti.pitchenv.data[ev*3+2] = penv->PitchPoints[ev] >> 8; + } + } else + // Save Empty Instrument + { + for (UINT i=0; i<120; i++) iti.keyboard[i*2] = i; + iti.ppc = 5*12; + iti.gbv = 128; + iti.dfp = 0x20; + iti.ifc = 0xFF; + } + if (!iti.nos) iti.trkvers = 0; + // Writing instrument + if (bKbdEx) *((int *)iti.dummy) = 'MPTX'; + inspos[nins-1] = dwPos; + dwPos += sizeof(ITINSTRUMENT); + fwrite(&iti, 1, sizeof(ITINSTRUMENT), f); + if (bKbdEx) + { + dwPos += 120; + fwrite(keyboardex, 1, 120, f); + } + + //------------ rewbs.modularInstData +/* if (Headers[nins]) + { + long modularInstSize = 0; + UINT ModInstID = 'INSM'; + fwrite(&ModInstID, 1, sizeof(ModInstID), 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 + fwrite(&modularInstSize, 1, sizeof(modularInstSize), f); // write a DUMMY size, just to move file pointer by a long + + //Write chunks + UINT ID; + { //VST Slot chunk: + ID='PLUG'; + fwrite(&ID, 1, sizeof(int), f); + INSTRUMENTHEADER *penv = Headers[nins]; + fwrite(&(penv->nMixPlug), 1, sizeof(BYTE), f); + modularInstSize += sizeof(int)+sizeof(BYTE); + } +*/ //How to save your own modular instrument chunk: + /* { + ID='MYID'; + fwrite(&ID, 1, sizeof(int), f); + instModularDataSize+=sizeof(int); + + //You can save your chunk size somwhere here if you need variable chunk size. + fwrite(myData, 1, myDataSize, f); + instModularDataSize+=myDataSize; + } + */ +/* //write modular data's total size + long curPos = ftell(f); // remember current pos + fseek(f, sizePos, SEEK_SET); // go back to sizePos + fwrite(&modularInstSize, 1, sizeof(modularInstSize), f); // write data + fseek(f, curPos, SEEK_SET); // go back to where we were. + + //move forward + dwPos+=sizeof(ModInstID)+sizeof(modularInstSize)+modularInstSize; + } +*/ //------------ end rewbs.modularInstData + } + // Writing sample headers + memset(&itss, 0, sizeof(itss)); + for (UINT hsmp=0; hsmp<header.smpnum; hsmp++) + { + smppos[hsmp] = dwPos; + dwPos += sizeof(ITSAMPLESTRUCT); + fwrite(&itss, 1, sizeof(ITSAMPLESTRUCT), f); + } + // Writing Patterns + for (UINT npat=0; npat<header.patnum; npat++) + { + DWORD dwPatPos = dwPos; + UINT len; + if (!Patterns[npat]) continue; + patpos[npat] = dwPos; + patinfo[0] = 0; + patinfo[1] = PatternSize[npat]; + patinfo[2] = 0; + patinfo[3] = 0; + // Check for empty pattern + if (PatternSize[npat] == 64) + { + MODCOMMAND *pzc = Patterns[npat]; + UINT nz = PatternSize[npat] * nChannels; + for (UINT iz=0; iz<nz; iz++) + { + if ((pzc[iz].note) || (pzc[iz].instr) + || (pzc[iz].volcmd) || (pzc[iz].command)) break; + } + if (iz == nz) + { + patpos[npat] = 0; + continue; + } + } + fwrite(patinfo, 8, 1, f); + dwPos += 8; + memset(chnmask, 0xFF, sizeof(chnmask)); + memset(lastvalue, 0, sizeof(lastvalue)); + MODCOMMAND *m = Patterns[npat]; + for (UINT row=0; row<PatternSize[npat]; row++) + { + len = 0; + for (UINT ch=0; ch<nChannels; ch++, m++) + { + BYTE b = 0; + UINT command = m->command; + UINT param = m->param; + UINT vol = 0xFF; + UINT note = m->note; + if (note) b |= 1; + if ((note) && (note < 0xFE)) note--; + if (m->instr) b |= 2; + if (m->volcmd) + { + UINT volcmd = m->volcmd; + switch(volcmd) + { + case VOLCMD_VOLUME: vol = m->vol; if (vol > 64) vol = 64; break; + case VOLCMD_PANNING: vol = m->vol + 128; if (vol > 192) vol = 192; break; + case VOLCMD_VOLSLIDEUP: vol = 85 + ConvertVolParam(m->vol); break; + case VOLCMD_VOLSLIDEDOWN: vol = 95 + ConvertVolParam(m->vol); break; + case VOLCMD_FINEVOLUP: vol = 65 + ConvertVolParam(m->vol); break; + case VOLCMD_FINEVOLDOWN: vol = 75 + ConvertVolParam(m->vol); break; + case VOLCMD_VIBRATO: vol = 203; break; + case VOLCMD_VIBRATOSPEED: vol = 203 + ConvertVolParam(m->vol); break; + case VOLCMD_TONEPORTAMENTO: vol = 193 + ConvertVolParam(m->vol); break; + case VOLCMD_PORTADOWN: vol = 105 + ConvertVolParam(m->vol); break; + case VOLCMD_PORTAUP: vol = 115 + ConvertVolParam(m->vol); break; + case VOLCMD_VELOCITY: vol = 213 + ConvertVolParam(m->vol); break; //rewbs.velocity + case VOLCMD_OFFSET: vol = 223 + ConvertVolParam(m->vol); break; //rewbs.volOff + default: vol = 0xFF; + } + } + if (vol != 0xFF) b |= 4; + if (command) + { + S3MSaveConvert(&command, ¶m, TRUE); + if (command) b |= 8; + } + // Packing information + if (b) + { + // Same note ? + if (b & 1) + { + if ((note == lastvalue[ch].note) && (lastvalue[ch].volcmd & 1)) + { + b &= ~1; + b |= 0x10; + } else + { + lastvalue[ch].note = note; + lastvalue[ch].volcmd |= 1; + } + } + // Same instrument ? + if (b & 2) + { + if ((m->instr == lastvalue[ch].instr) && (lastvalue[ch].volcmd & 2)) + { + b &= ~2; + b |= 0x20; + } else + { + lastvalue[ch].instr = m->instr; + lastvalue[ch].volcmd |= 2; + } + } + // Same volume column byte ? + if (b & 4) + { + if ((vol == lastvalue[ch].vol) && (lastvalue[ch].volcmd & 4)) + { + b &= ~4; + b |= 0x40; + } else + { + lastvalue[ch].vol = vol; + lastvalue[ch].volcmd |= 4; + } + } + // Same command / param ? + if (b & 8) + { + if ((command == lastvalue[ch].command) && (param == lastvalue[ch].param) && (lastvalue[ch].volcmd & 8)) + { + b &= ~8; + b |= 0x80; + } else + { + lastvalue[ch].command = command; + lastvalue[ch].param = param; + lastvalue[ch].volcmd |= 8; + } + } + if (b != chnmask[ch]) + { + chnmask[ch] = b; + buf[len++] = (ch+1) | 0x80; + buf[len++] = b; + } else + { + buf[len++] = ch+1; + } + if (b & 1) buf[len++] = note; + if (b & 2) buf[len++] = m->instr; + if (b & 4) buf[len++] = vol; + if (b & 8) + { + buf[len++] = command; + buf[len++] = param; + } + } + } + buf[len++] = 0; + dwPos += len; + patinfo[0] += len; + fwrite(buf, 1, len, f); + } + fseek(f, dwPatPos, SEEK_SET); + fwrite(patinfo, 8, 1, f); + fseek(f, dwPos, SEEK_SET); + } + // Writing Sample Data + for (UINT nsmp=1; nsmp<=header.smpnum; nsmp++) + { + MODINSTRUMENT *psmp = &Ins[nsmp]; + memset(&itss, 0, sizeof(itss)); + memcpy(itss.filename, psmp->name, 12); + memcpy(itss.name, m_szNames[nsmp], 26); + itss.id = 0x53504D49; + itss.gvl = (BYTE)psmp->nGlobalVol; + if (m_nInstruments) + { + for (UINT iu=1; iu<=m_nInstruments; iu++) if (Headers[iu]) + { + INSTRUMENTHEADER *penv = Headers[iu]; + for (UINT ju=0; ju<128; ju++) if (penv->Keyboard[ju] == nsmp) + { + itss.flags = 0x01; + break; + } + } + } else + { + itss.flags = 0x01; + } + if (psmp->uFlags & CHN_LOOP) itss.flags |= 0x10; + if (psmp->uFlags & CHN_SUSTAINLOOP) itss.flags |= 0x20; + if (psmp->uFlags & CHN_PINGPONGLOOP) itss.flags |= 0x40; + if (psmp->uFlags & CHN_PINGPONGSUSTAIN) itss.flags |= 0x80; + itss.C5Speed = psmp->nC4Speed; + if (!itss.C5Speed) itss.C5Speed = 8363; + itss.length = psmp->nLength; + itss.loopbegin = psmp->nLoopStart; + itss.loopend = psmp->nLoopEnd; + itss.susloopbegin = psmp->nSustainStart; + itss.susloopend = psmp->nSustainEnd; + itss.vol = psmp->nVolume >> 2; + itss.dfp = psmp->nPan >> 2; + itss.vit = autovibxm2it[psmp->nVibType & 7]; + itss.vis = psmp->nVibRate; + itss.vid = psmp->nVibDepth; + itss.vir = (psmp->nVibSweep < 64) ? psmp->nVibSweep * 4 : 255; + if (psmp->uFlags & CHN_PANNING) itss.dfp |= 0x80; + if ((psmp->pSample) && (psmp->nLength)) itss.cvt = 0x01; + UINT flags = RS_PCM8S; +#ifndef NO_PACKING + if (nPacking) + { + if ((!(psmp->uFlags & (CHN_16BIT|CHN_STEREO))) + && (CanPackSample(psmp->pSample, psmp->nLength, nPacking))) + { + flags = RS_ADPCM4; + itss.cvt = 0xFF; + } + } else +#endif // NO_PACKING + { + if (psmp->uFlags & CHN_STEREO) + { + flags = RS_STPCM8S; + itss.flags |= 0x04; + } + if (psmp->uFlags & CHN_16BIT) + { + itss.flags |= 0x02; + flags = (psmp->uFlags & CHN_STEREO) ? RS_STPCM16S : RS_PCM16S; + } + } + itss.samplepointer = dwPos; + fseek(f, smppos[nsmp-1], SEEK_SET); + fwrite(&itss, 1, sizeof(ITSAMPLESTRUCT), f); + fseek(f, dwPos, SEEK_SET); + if ((psmp->pSample) && (psmp->nLength)) + { + dwPos += WriteSample(f, psmp, flags); + } + } + + //Save hacked-on extra info +// SaveExtendedInstrumentProperties(Headers, header.insnum, f); +// SaveExtendedSongProperties(f); + + // Updating offsets + fseek(f, dwHdrPos, SEEK_SET); + if (header.insnum) fwrite(inspos, 4, header.insnum, f); + if (header.smpnum) fwrite(smppos, 4, header.smpnum, f); + if (header.patnum) fwrite(patpos, 4, header.patnum, f); + fclose(f); + return TRUE; + +} + ////////////////////////////////////////////////////////////////////////////// // IT 2.14 compression @@ -2549,5 +3124,12 @@ fwrite(&size, 1, sizeof(__int16), f); fwrite(&m_nDefaultGlobalVolume, 1, size, f); + code = 'RP..'; //write m_nRestartPos + fwrite(&code, 1, sizeof(__int32), f); + size = sizeof(m_nRestartPos); + fwrite(&size, 1, sizeof(__int16), f); + fwrite(&m_nRestartPos, 1, size, f); + + return; } \ No newline at end of file Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -988,4 +988,12 @@ return TRUE; } +//HACK: This is a quick fix. Needs to be better integrated into player and GUI. +BOOL CSoundFile::SaveCompatXM(LPCSTR lpszFileName) +//------------------------------------------------ +{ + + return TRUE; +} + #endif // MODPLUG_NO_FILESAVE Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -172,6 +172,7 @@ PSB. nPanSustainBegin; PSE. nPanSustainEnd; R... nResampling; +RP.. [EXT] nRestartPos; RPB. [EXT] nRowsPerBeat; RPM. [EXT] nRowsPerMeasure; RS.. nResSwing; Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/soundlib/Sndfile.h 2006-04-11 23:44:36 UTC (rev 156) @@ -934,6 +934,8 @@ BOOL SaveS3M(LPCSTR lpszFileName, UINT nPacking=0); BOOL SaveMod(LPCSTR lpszFileName, UINT nPacking=0); BOOL SaveIT(LPCSTR lpszFileName, UINT nPacking=0); + BOOL SaveCompatIT(LPCSTR lpszFileName); + BOOL SaveCompatXM(LPCSTR lpszFileName); // -> CODE#0023 // -> DESC="IT project files (.itp)" BOOL SaveITProject(LPCSTR lpszFileName); Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2006-03-23 01:46:21 UTC (rev 155) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2006-04-11 23:44:36 UTC (rev 156) @@ -611,7 +611,8 @@ m_nTickCount = 0; m_nRow = m_nNextRow; // Reset Pattern Loop Effect - if (m_nCurrentPattern != m_nNextPattern) m_nCurrentPattern = m_nNextPattern; + if (m_nCurrentPattern != m_nNextPattern) + m_nCurrentPattern = m_nNextPattern; // Check if pattern is valid if (!(m_dwSongFlags & SONG_PATTERNLOOP)) { @@ -629,16 +630,14 @@ //rewbs.instroVSTi: stop all VSTi at end of song, if looping. StopAllVsti(); - m_nMusicSpeed = m_nDefaultSpeed; m_nMusicTempo = m_nDefaultTempo; m_nGlobalVolume = m_nDefaultGlobalVolume; - for (UINT i=0; i<MAX_CHANNELS; i++) - { + for (UINT i=0; i<MAX_CHANNELS; i++) { Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF; Chn[i].nFadeOutVol = 0; - if (i < m_nChannels) - { + + if (i < m_nChannels) { Chn[i].nGlobalVol = ChnSettings[i].nVolume; Chn[i].nVolume = ChnSettings[i].nVolume; Chn[i].nPan = ChnSettings[i].nPan; @@ -648,8 +647,8 @@ Chn[i].nOldOffset = 0; Chn[i].nOldHiOffset = 0; Chn[i].nPortamentoDest = 0; - if (!Chn[i].nLength) - { + + if (!Chn[i].nLength) { Chn[i].dwFlags = ChnSettings[i].dwFlags; Chn[i].nLoopStart = 0; Chn[i].nLoopEnd = 0; @@ -662,31 +661,42 @@ } + + //Handle Repeat position if (m_nRepeatCount > 0) m_nRepeatCount--; m_nCurrentPattern = m_nRestartPos; - m_nRow = 0; - if ((Order[m_nCurrentPattern] >= MAX_PATTERNS) || (!Patterns[Order[m_nCurrentPattern]])) return FALSE; - } else - { + m_nRow = 0; + //If restart pos points to +++, move along + while (Order[m_nCurrentPattern] == 0xFE) { + m_nCurrentPattern++; + } + //Check for end of song or bad pattern + if ( (Order[m_nCurrentPattern] >= MAX_PATTERNS) + || (!Patterns[Order[m_nCurrentPattern]]) ) { + return FALSE; + } + + } else { m_nCurrentPattern++; } - m_nPattern = (m_nCurrentPattern < MAX_ORDERS) ? Order[m_nCurrentPattern] : 0xFF; - if ((m_nPattern < MAX_PATTERNS) && (!Patterns[m_nPattern])) m_nPattern = 0xFE; + + if (m_nCurrentPattern < MAX_ORDERS) { + m_nPattern = Order[m_nCurrentPattern]; + } else { + m_nPattern = 0xFF; + } + + if ((m_nPattern < MAX_PATTERNS) && (!Patterns[m_nPattern])) { + m_nPattern = 0xFE; + } } m_nNextPattern = m_nCurrentPattern; #ifdef MODPLUG_TRACKER -// if (m_nInstruments) ProcessMidiOut(); //rewbs.VSTnoteDelay if ((m_nMaxOrderPosition) && (m_nCurrentPattern >= m_nMaxOrderPosition)) return FALSE; #endif // MODPLUG_TRACKER } -//#ifdef MODPLUG_TRACKER -// if (m_dwSongFlags & SONG_STEP) -// { -// m_dwSongFlags &= ~SONG_STEP; -// m_dwSongFlags |= SONG_PAUSED; -// } -//#endif // MODPLUG_TRACKER + // Weird stuff? if ((m_nPattern >= MAX_PATTERNS) || (!Patterns[m_nPattern])) return FALSE; // Should never happen @@ -766,10 +776,7 @@ //////////////////////////////////////////////////////////////////////////////////// m_nTotalCount++; if (!m_nMusicTempo) return FALSE; -// -> CODE#0022 -// -> DESC="alternative BPM/Speed interpretation method" - switch(m_nTempoMode) { case tempo_mode_alternative: @@ -796,47 +803,22 @@ default: m_nBufferCount = (gdwMixingFreq * 5 * m_nTempoFactor) / (m_nMusicTempo << 8); } - /* - if (CMainFrame::m_dwPatternSetup & PATTERN_ALTERNTIVEBPMSPEED) { - m_nBufferCount = gdwMixingFreq / m_nMusicTempo; - } - else { - m_nBufferCount = (gdwMixingFreq * 5 * m_nTempoFactor) / (m_nMusicTempo << 8); - } - */ -// -! NEW_FEATURE#0022 m_nSamplesPerTick = m_nBufferCount; //rewbs.flu -#ifdef MODPLUG_TRACKER - if (m_dwSongFlags & SONG_PAUSED) - { - m_nBufferCount = gdwMixingFreq / 64; // 1/64 seconds - } -#endif + +// robinf: this block causes envelopes to behave incorrectly when +// playback is triggered from instrument panel. +// I can't see why it would be useful. Dissabling for now. +// +// if (m_dwSongFlags & SONG_PAUSED) { +// m_nBufferCount = gdwMixingFreq / 64; // 1/64 seconds +// } + + // Master Volume + Pre-Amplification / Attenuation setup DWORD nMasterVol; { -////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ericus 10/02/2005 -/* - int nchn32 = (m_nChannels < 32) ? m_nChannels : 31; - if ((m_nType & MOD_TYPE_IT) && (m_nInstruments) && (nchn32 < 6)) nchn32 = 6; - int realmastervol = m_nMasterVolume; - if (realmastervol > 0x80) - { - realmastervol = 0x80 + ((realmastervol - 0x80) * (nchn32+4)) / 16; - } - UINT attenuation = (gdwSoundSetup & SNDMIX_AGC) ? PreAmpAGCTable[nchn32>>1] : PreAmpTable[nchn32>>1]; - DWORD mastervol = (realmastervol * (m_nSongPreAmp + 0x10)) >> 6; - if (mastervol > 0x200) mastervol = 0x200; - if ((m_dwSongFlags & SONG_GLOBALFADE) && (m_nGlobalFadeMaxSamples)) - { - mastervol = _muldiv(mastervol, m_nGlobalFadeSamples, m_nGlobalFadeMaxSamples); - } - nMasterVol = (mastervol << 7) / attenuation; - if (nMasterVol > 0x180) nMasterVol = 0x180; -*/ int nchn32 = 0; MODCHANNEL *pChn = Chn; for (UINT nChn=0; nChn<m_nChannels; nChn++,pChn++) { @@ -862,8 +844,6 @@ if(attenuation < 1) attenuation = 1; nMasterVol = (mastervol << 7) / attenuation; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////// } //////////////////////////////////////////////////////////////////////////////////// // Update channels data This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2006-06-20 00:47:14
|
Revision: 157 Author: rewbs Date: 2006-06-19 17:44:57 -0700 (Mon, 19 Jun 2006) ViewCVS: http://svn.sourceforge.net/modplug/?rev=157&view=rev Log Message: ----------- . v1.17.02.43 + <rewbs> You can now load up new plugins from anywhere, not just the General tab. Select "Plugin Manager..." from the view menu. This can also be assigned to a global hotkey. Limitation: currently plugins added to a song in this manner with always be put in the first empty slot. In a future version you'll be able to choose the slot directly from that window. + <rewbs> "Cleanup Plugins" to remove any plugs that are not associated to a channel and not used by an instrument and not used as an output for any used plugs. . <rewbs> Fixed channel limits. Should be able to correctly save IT pattern data with up to 127 chans. There's only space for 64 channel headers though (channel names etc..). XMs restricted to 64 chans. . <rewbs> Added channel limit check when adding chans from the pattern editor. . <rewbs> Fixed instant crash with SampleTank 2.1. Modified Paths: -------------- trunk/OpenMPT/mptrack/Childfrm.cpp trunk/OpenMPT/mptrack/Childfrm.h trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Globals.cpp trunk/OpenMPT/mptrack/Globals.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/bin/mptrack_Generic.exe trunk/OpenMPT/mptrack/bin/mptrack_P3.exe trunk/OpenMPT/mptrack/bin/mptrack_P4-Athlon64.exe trunk/OpenMPT/mptrack/bin/mptrack_athlon32.exe trunk/OpenMPT/mptrack/bin/version trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/packageTemplate/History.txt trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mod.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/Childfrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/Childfrm.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Childfrm.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -220,7 +220,18 @@ return TRUE; } +void CChildFrame::ForceRefresh() +//------------------------------ +{ + CModControlView *pModView; + if ((pModView = (CModControlView *)m_wndSplitter.GetPane(0, 0)) != NULL) + { + pModView->ForceRefresh(); + } + return; +} + void CChildFrame::SavePosition(BOOL bForce) //----------------------------------------- { Modified: trunk/OpenMPT/mptrack/Childfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Childfrm.h 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Childfrm.h 2006-06-20 00:44:57 UTC (rev 157) @@ -102,6 +102,7 @@ // Operations public: BOOL ChangeViewClass(CRuntimeClass* pNewViewClass, CCreateContext* pContext=NULL); + void ForceRefresh(); void SavePosition(BOOL bExit=FALSE); CHAR* GetCurrentViewClassName(); //rewbs.varWindowSize LRESULT SendViewMessage(UINT uMsg, LPARAM lParam=0) const; Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -2050,7 +2050,7 @@ commands[kcNoteOffOld].Message = "Note off (don't remember instrument)"; commands[kcViewAddPlugin].UID = 1669; - commands[kcViewAddPlugin].Message = "View 'Add Plugin' Window"; + commands[kcViewAddPlugin].Message = "View Plugin Manager"; commands[kcViewAddPlugin].isHidden = false; commands[kcViewAddPlugin].isDummy = false; Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -134,6 +134,7 @@ if (m_pModDoc) m_pModDoc->SetFollowWnd(m_hWnd, MPTNOTIFY_MASTERVU); if (pMainFrm) pMainFrm->SetFollowSong(m_pModDoc, m_hWnd, TRUE, MPTNOTIFY_MASTERVU); CMainFrame::EnableLowLatencyMode(FALSE); + PostViewMessage(VIEWMSG_SETACTIVE, NULL); SetFocus(); } Modified: trunk/OpenMPT/mptrack/Globals.cpp =================================================================== --- trunk/OpenMPT/mptrack/Globals.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Globals.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -272,6 +272,18 @@ } +void CModControlView::ForceRefresh() +//--------------------------------- +{ + SetActivePage(GetActivePage()); +} + +int CModControlView::GetActivePage() +//----------------------------------- +{ + return m_nActiveDlg; +} + BOOL CModControlView::SetActivePage(int nIndex, LPARAM lParam) //------------------------------------------------------------ { Modified: trunk/OpenMPT/mptrack/Globals.h =================================================================== --- trunk/OpenMPT/mptrack/Globals.h 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Globals.h 2006-06-20 00:44:57 UTC (rev 157) @@ -143,11 +143,13 @@ void InstrumentChanged(int nInstr=-1) { m_nInstrumentChanged = nInstr; } int GetInstrumentChange() const { return m_nInstrumentChanged; } void SetMDIParentFrame(HWND hwnd) { m_hWndMDI = hwnd; } + void ForceRefresh(); protected: void RecalcLayout(); void UpdateView(DWORD dwHintMask=0, CObject *pHint=NULL); BOOL SetActivePage(int nIndex=-1, LPARAM lParam=-1); + int GetActivePage(); //{{AFX_VIRTUAL(CModControlView) public: Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -67,7 +67,7 @@ // -> CODE#0002 // -> DESC="list box to choose VST plugin presets (programs)" - ON_COMMAND(ID_PLUGIN_SETUP, OnPluginSetup) + ON_COMMAND(ID_PLUGIN_SETUP, OnPluginManager) // -! NEW_FEATURE#0002 // -> CODE#0015 @@ -2304,10 +2304,31 @@ // -> CODE#0002 // -> DESC="list box to choose VST plugin presets (programs)" -void CMainFrame::OnPluginSetup() +void CMainFrame::OnPluginManager() { - CSelectPluginDlg dlg(NULL, GetActiveDoc(), this); + int nPlugslot=-1; + CModDoc* pModDoc = GetActiveDoc(); + + if (pModDoc) { + CSoundFile *pSndFile = pModDoc->GetSoundFile(); + //Find empty plugin slot + for (int nPlug=0; nPlug<MAX_MIXPLUGINS; nPlug++) { + PSNDMIXPLUGIN pCandidatePlugin = &pSndFile->m_MixPlugins[nPlug]; + if (pCandidatePlugin->pMixPlugin == NULL) { + nPlugslot=nPlug; + break; + } + } + } + CSelectPluginDlg dlg(GetActiveDoc(), nPlugslot, this); dlg.DoModal(); + if (pModDoc) { + //Refresh views + pModDoc->UpdateAllViews(NULL, HINT_MIXPLUGINS|HINT_MODTYPE); + //Refresh Controls + CChildFrame *pActiveChild = (CChildFrame *)MDIGetActive(); + pActiveChild->ForceRefresh(); + } } // -! NEW_FEATURE#0002 @@ -2696,7 +2717,7 @@ case kcFileOpen: theApp.OnFileOpen(); break; case kcMidiRecord: OnMidiRecord(); break; case kcHelp: CMDIFrameWnd::OnHelp(); break; - case kcViewAddPlugin: OnPluginSetup(); break; + case kcViewAddPlugin: OnPluginManager(); break; case kcViewChannelManager: OnChannelManager(); break; case kcNextDocument: MDINext(); break; case kcPrevDocument: MDIPrev(); break; Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2006-06-20 00:44:57 UTC (rev 157) @@ -588,7 +588,7 @@ // -> CODE#0002 // -> DESC="list box to choose VST plugin presets (programs)" - afx_msg void OnPluginSetup(); + afx_msg void OnPluginManager(); // -! NEW_FEATURE#0002 // -> CODE#0015 Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -46,6 +46,7 @@ ON_COMMAND(ID_INSERT_INSTRUMENT, OnInsertInstrument) ON_COMMAND(ID_CLEANUP_SAMPLES, OnCleanupSamples) ON_COMMAND(ID_CLEANUP_INSTRUMENTS, OnCleanupInstruments) + ON_COMMAND(ID_CLEANUP_PLUGS, OnCleanupPlugs) ON_COMMAND(ID_CLEANUP_PATTERNS, OnCleanupPatterns) ON_COMMAND(ID_CLEANUP_SONG, OnCleanupSong) ON_COMMAND(ID_CLEANUP_REARRANGE, OnRearrangePatterns) @@ -1770,7 +1771,17 @@ ShowLog("Instrument Cleanup", CMainFrame::GetMainFrame()); } +void CModDoc::OnCleanupPlugs() +//---------------------------------- +{ + ClearLog(); + RemoveUnusedPlugs(); + UpdateAllViews(NULL, HINT_MODTYPE); + ShowLog("Plugin Cleanup", CMainFrame::GetMainFrame()); +} + + void CModDoc::OnCleanupPatterns() //------------------------------- { @@ -1788,6 +1799,7 @@ RemoveUnusedPatterns(); RemoveUnusedInstruments(); RemoveUnusedSamples(); + RemoveUnusedPlugs(); UpdateAllViews(NULL, HINT_MODTYPE|HINT_MODSEQUENCE); ShowLog("Song Cleanup", CMainFrame::GetMainFrame()); } Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Moddoc.h 2006-06-20 00:44:57 UTC (rev 157) @@ -147,6 +147,7 @@ BOOL ConvertInstrumentsToSamples();; BOOL RemoveUnusedSamples(); BOOL RemoveUnusedInstruments(); + BOOL RemoveUnusedPlugs(); BOOL RemoveUnusedPatterns(BOOL bRemove=TRUE); LONG InsertPattern(LONG nOrd=-1, UINT nRows=64); LONG InsertSample(BOOL bLimit=FALSE); @@ -274,6 +275,7 @@ afx_msg void OnInsertInstrument(); afx_msg void OnCleanupSamples(); afx_msg void OnCleanupInstruments(); + afx_msg void OnCleanupPlugs(); afx_msg void OnCleanupPatterns(); afx_msg void OnCleanupSong(); afx_msg void OnRearrangePatterns(); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -324,7 +324,24 @@ BOOL CModDoc::ChangeNumChannels(UINT nNewChannels) //------------------------------------------------ { - if (nNewChannels == m_SndFile.m_nChannels) return TRUE; + int maxChans; + if (m_SndFile.m_nType&MOD_TYPE_IT) { + maxChans=max_chans_IT; + } else if (m_SndFile.m_nType&MOD_TYPE_XM) { + maxChans=max_chans_XM; + } else if (m_SndFile.m_nType&MOD_TYPE_S3M) { + maxChans=max_chans_S3M; + } else { + maxChans=max_chans_MOD; + } + if (nNewChannels > maxChans) { + CString error; + error.Format("Error: Max number of channels for this type is %d", maxChans); + ::AfxMessageBox(error, MB_OK|MB_ICONEXCLAMATION); + return FALSE; + } + + if (nNewChannels == m_SndFile.m_nChannels) return FALSE; if (nNewChannels < m_SndFile.m_nChannels) { UINT nChnToRemove = 0; @@ -363,7 +380,7 @@ if ((--nFound) == 0) break; } } - if (rem.DoModal() != IDOK) return TRUE; + if (rem.DoModal() != IDOK) return FALSE; // Removing selected channels RemoveChannels(rem.m_bChnMask); } else @@ -379,7 +396,7 @@ { END_CRITICAL(); AddToLog("ERROR: Not enough memory to create new channels!\nPattern Data is corrupted!\n"); - return TRUE; + return FALSE; } for (UINT j=0; j<m_SndFile.PatternSize[i]; j++) { @@ -395,7 +412,7 @@ SetModified(); ClearUndo(); UpdateAllViews(NULL, HINT_MODTYPE); - return FALSE; + return TRUE; } @@ -841,7 +858,83 @@ return FALSE; } +BOOL CModDoc::RemoveUnusedPlugs() +//------------------------------- +{ + BYTE usedmap[MAX_MIXPLUGINS]; + memset(usedmap, false, MAX_MIXPLUGINS); + + for (int nPlug=0; nPlug<MAX_MIXPLUGINS; nPlug++) { + + //Is the plugin assigned to a channel? + for (int nChn=0; nChn<m_SndFile.m_nChannels; nChn++) { + if (m_SndFile.ChnSettings[nChn].nMixPlugin == nPlug+1) { + usedmap[nPlug]=true; + break; + } + } + + //Is the plugin used by an instrument? + for (int nIns=1; nIns<=m_SndFile.m_nInstruments; nIns++) { + if (m_SndFile.Headers[nIns] && (m_SndFile.Headers[nIns]->nMixPlug == nPlug+1)) { + usedmap[nPlug]=true; + break; + } + } + + //Is the plugin assigned to master? + if (m_SndFile.m_MixPlugins[nPlug].Info.dwInputRouting & MIXPLUG_INPUTF_MASTEREFFECT) { + usedmap[nPlug]=true; + } + + //all outputs of used plugins count as used + if (usedmap[nPlug]==true) { + if (m_SndFile.m_MixPlugins[nPlug].Info.dwOutputRouting & 0x80) { + int output = m_SndFile.m_MixPlugins[nPlug].Info.dwOutputRouting & 0x7f; + usedmap[output]=true; + } + } + + } + + //Remove unused plugins + int nRemoved=0; + for (int nPlug=0; nPlug<MAX_MIXPLUGINS; nPlug++) { + SNDMIXPLUGIN* pPlug = &m_SndFile.m_MixPlugins[nPlug]; + if (usedmap[nPlug] || !pPlug) { + Log("Keeping mixplug addess (%d): %X\n", nPlug, &(pPlug->pMixPlugin)); + continue; + } + + if (pPlug->pPluginData) { + delete pPlug->pPluginData; + pPlug->pPluginData = NULL; + } + if (pPlug->pMixPlugin) { + pPlug->pMixPlugin->Release(); + pPlug->pMixPlugin=NULL; + } + if (pPlug->pMixState) { + delete pPlug->pMixState; + } + + memset(&(pPlug->Info), 0, sizeof(SNDMIXPLUGININFO)); + Log("Zeroing range (%d) %X - %X\n", nPlug, &(pPlug->Info), &(pPlug->Info)+sizeof(SNDMIXPLUGININFO)); + pPlug->nPluginDataSize=0; + pPlug->fDryRatio=0; + pPlug->defaultProgram=0; + nRemoved++; + + } + + if (nRemoved) { + SetModified(); + } + + return nRemoved; +} + BOOL CModDoc::RemoveUnusedInstruments() //------------------------------------- { Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -1212,8 +1212,7 @@ if ((pModDoc) && (m_nCurrentPlugin < MAX_MIXPLUGINS)) { CSoundFile *pSndFile = pModDoc->GetSoundFile(); - PSNDMIXPLUGIN pPlugin = &pSndFile->m_MixPlugins[m_nCurrentPlugin]; - CSelectPluginDlg dlg(pPlugin, pModDoc, this); //rewbs.plugDocAware + CSelectPluginDlg dlg(pModDoc, m_nCurrentPlugin, this); if (dlg.DoModal() == IDOK) { if (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT)) Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -2401,16 +2401,17 @@ BeginWaitCursor(); //First adding channel as the last channel... - pModDoc->ChangeNumChannels(pSndFile->m_nChannels+1); - pSndFile->SetChannelSettingsToDefault(pSndFile->m_nChannels-1); - //...and then moving it to right position. - pSndFile->MoveChannel(pSndFile->m_nChannels-1, nChn); + if (pModDoc->ChangeNumChannels(pSndFile->m_nChannels+1)) { + pSndFile->SetChannelSettingsToDefault(pSndFile->m_nChannels-1); + //...and then moving it to right position. + pSndFile->MoveChannel(pSndFile->m_nChannels-1, nChn); - pModDoc->SetModified(); - pModDoc->ClearUndo(); - pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS); //refresh channel headers - pModDoc->UpdateAllViews(NULL, HINT_MODTYPE); //updates(?) the channel number to general tab display - SetCurrentPattern(m_nPattern); + pModDoc->SetModified(); + pModDoc->ClearUndo(); + pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS); //refresh channel headers + pModDoc->UpdateAllViews(NULL, HINT_MODTYPE); //updates(?) the channel number to general tab display + SetCurrentPattern(m_nPattern); + } EndWaitCursor(); } @@ -2424,15 +2425,16 @@ if (pModDoc == 0 || (pSndFile = pModDoc->GetSoundFile()) == 0) return; BeginWaitCursor(); - pModDoc->ChangeNumChannels(pSndFile->m_nChannels+1); - pSndFile->SetChannelSettingsToDefault(pSndFile->m_nChannels-1); - pSndFile->MoveChannel(pSndFile->m_nChannels-1, nChn); + if (pModDoc->ChangeNumChannels(pSndFile->m_nChannels+1)) { + pSndFile->SetChannelSettingsToDefault(pSndFile->m_nChannels-1); + pSndFile->MoveChannel(pSndFile->m_nChannels-1, nChn); - pModDoc->SetModified(); - pModDoc->ClearUndo(); - pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS); - pModDoc->UpdateAllViews(NULL, HINT_MODTYPE); - SetCurrentPattern(m_nPattern); + pModDoc->SetModified(); + pModDoc->ClearUndo(); + pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS); + pModDoc->UpdateAllViews(NULL, HINT_MODTYPE); + SetCurrentPattern(m_nPattern); + } EndWaitCursor(); } Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -999,11 +999,19 @@ } -CSelectPluginDlg::CSelectPluginDlg(PSNDMIXPLUGIN pPlugin, CModDoc *pModDoc, CWnd *parent):CDialog(IDD_SELECTMIXPLUGIN, parent) +CSelectPluginDlg::CSelectPluginDlg(CModDoc *pModDoc, int nPlugSlot, CWnd *parent):CDialog(IDD_SELECTMIXPLUGIN, parent) //---------------------------------------------------------------------------------------------------------- { - m_pModDoc = pModDoc; //rewbs.plugDocAware - m_pPlugin = pPlugin; + m_pPlugin = NULL; + m_pModDoc = pModDoc; + m_nPlugSlot = nPlugSlot; + + if (m_pModDoc) { + CSoundFile* pSndFile = pModDoc->GetSoundFile(); + if (pSndFile && (0<=m_nPlugSlot && m_nPlugSlot<MAX_MIXPLUGINS)) { + m_pPlugin = &pSndFile->m_MixPlugins[m_nPlugSlot]; + } + } } @@ -1016,6 +1024,15 @@ CDialog::OnInitDialog(); m_treePlugins.ModifyStyle(dwRemove, dwAdd); m_treePlugins.SetImageList(CMainFrame::GetMainFrame()->GetImageList(), TVSIL_NORMAL); + + if (m_pPlugin) { + CString targetSlot; + targetSlot.Format("Put in FX%02d", m_nPlugSlot+1); + SetDlgItemText(IDOK, targetSlot); + ::EnableWindow(::GetDlgItem(m_hWnd, IDOK), TRUE); + } else { + ::EnableWindow(::GetDlgItem(m_hWnd, IDOK), FALSE); + } MoveWindow(CMainFrame::GetMainFrame()->gnPlugWindowX, CMainFrame::GetMainFrame()->gnPlugWindowY, @@ -1065,7 +1082,7 @@ { // -> CODE#0002 // -> DESC="list box to choose VST plugin presets (programs)" - if(m_pPlugin == NULL) { CDialog::OnOK(); return; } + if(m_pPlugin==NULL) { CDialog::OnOK(); return; } // -! NEW_FEATURE#0002 BOOL bChanged = FALSE; @@ -1371,11 +1388,11 @@ if (m_treePlugins) { m_treePlugins.MoveWindow(11,11, cx-105, cy-40, FALSE); - ::MoveWindow(GetDlgItem(IDC_TEXT1)->m_hWnd, 11,cy-25, cx-22, 25, FALSE); - ::MoveWindow(GetDlgItem(IDOK)->m_hWnd, cx-85, 11, 75, 23, FALSE); - ::MoveWindow(GetDlgItem(IDCANCEL)->m_hWnd, cx-85, 39, 75, 23, FALSE); - ::MoveWindow(GetDlgItem(IDC_BUTTON1)->m_hWnd , cx-85, cy-80, 75, 23, FALSE); - ::MoveWindow(GetDlgItem(IDC_BUTTON2)->m_hWnd, cx-85, cy-52, 75, 23, FALSE); + ::MoveWindow(GetDlgItem(IDC_TEXT1)->m_hWnd, 11,cy-25, cx-22, 25, FALSE); + ::MoveWindow(GetDlgItem(IDOK)->m_hWnd, cx-85, 11, 75, 23, FALSE); + ::MoveWindow(GetDlgItem(IDCANCEL)->m_hWnd, cx-85, 39, 75, 23, FALSE); + ::MoveWindow(GetDlgItem(IDC_BUTTON1)->m_hWnd , cx-85, cy-80, 75, 23, FALSE); + ::MoveWindow(GetDlgItem(IDC_BUTTON2)->m_hWnd, cx-85, cy-52, 75, 23, FALSE); Invalidate(); } } @@ -1508,8 +1525,8 @@ } Dispatch(effMainsChanged, 0, 1, NULL, 0.0f); - m_nInputs = (m_pEffect->numInputs < 16) ? m_pEffect->numInputs : 16; - m_nOutputs = (m_pEffect->numOutputs < 16) ? m_pEffect->numOutputs : 16; + m_nInputs = m_pEffect->numInputs; + m_nOutputs = m_pEffect->numOutputs; m_pInputs = (float **)new char[m_nInputs*sizeof(float *)]; m_pOutputs = (float **)new char[m_nOutputs*sizeof(float *)]; m_pTempBuffer = (float **)new char[m_nOutputs*sizeof(float *)]; //rewbs.dryRatio @@ -2052,6 +2069,50 @@ m_pMixStruct->fDryRatio = 1.0-(static_cast<float>(param)/127.0f); } +/* +void CVstPlugin::Process(float **pOutputs, unsigned long nSamples) +//---------------------------------------------------------------- +{ + float wetRatio, dryRatio; + wetRatio *= m_fGain; + dryRatio *= m_fGain; + + ProcessVSTEvents(); + if ((m_pEffect) && (m_pProcessFP) && (m_pInputs) && (m_pOutputs) && (m_pMixStruct)) { + + //Merge stereo input before sending to the plug if the plug can only handle one input. + if (m_pEffect->numInputs == 1) { + for (UINT i=0; i<nSamples; i++) { + m_pInputs[0][i] = 0.5f*m_pInputs[0][i] + 0.5f*m_pInputs[1][i]; + } + } + + //Clear the buffers that will be receiving the plugin's output. + for (UINT iOut=0; iOut<m_nOutputs; iOut++) { + memset(m_pTempBuffer[iOut], 0, nSamples*sizeof(float)); + m_pOutputs[iOut] = m_pTempBuffer[iOut]; + } + + //Do the VST processing magic + m_dwTimeAtStartOfProcess = timeGetTime(); + try { + ASSERT(nSamples<=MIXBUFFERSIZE); + m_pProcessFP(m_pEffect, m_pInputs, m_pOutputs, nSamples); + } catch (char * str) { + m_pMixStruct->Info.dwInputRouting |= MIXPLUG_INPUTF_BYPASS; + CString processMethod = (m_pEffect->flags & effFlagsCanReplacing) ? "processReplacing" : "process"; + CVstPluginManager::ReportPlugException("The plugin %s threw an exception in %s: %s. It has automatically been set to \"Bypass\".", m_pMixStruct->Info.szName, processMethod, str); + ClearVSTEvents(); + SetEvent(processCalled); + } + + for(UINT i=0; i<nSamples; i++) { + pOutL[stream][i] += m_pTempBuffer[stream][i]*wetRatio + m_pInputs[stream%2][i]*dryRatio; + } + + } +} +*/ void CVstPlugin::Process(float *pOutL, float *pOutR, unsigned long nSamples) //-------------------------------------------------------------------------- { @@ -2080,7 +2141,7 @@ //RecalculateGain(); - //Merge stereo before sending to the plug if it is mono + //Merge stereo input before sending to the plug if the plug can only handle one input. if (m_pEffect->numInputs == 1) { for (UINT i=0; i<nSamples; i++) { Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/Vstplug.h 2006-06-20 00:44:57 UTC (rev 157) @@ -228,12 +228,13 @@ //==================================== { protected: + int m_nPlugSlot; PSNDMIXPLUGIN m_pPlugin; CModDoc *m_pModDoc; CTreeCtrl m_treePlugins; public: - CSelectPluginDlg(PSNDMIXPLUGIN, CModDoc *pModDoc, CWnd *parent); //rewbs.plugDocAware + CSelectPluginDlg(CModDoc *pModDoc, int nPlugSlot, CWnd *parent); //rewbs.plugDocAware VOID DoClose(); VOID UpdatePluginsList(DWORD forceSelect=0); bool VerifyPlug(PVSTPLUGINLIB plug); Modified: trunk/OpenMPT/mptrack/bin/mptrack_Generic.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/bin/mptrack_P3.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/bin/mptrack_P4-Athlon64.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/bin/mptrack_athlon32.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/bin/version =================================================================== --- trunk/OpenMPT/mptrack/bin/version 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/bin/version 2006-06-20 00:44:57 UTC (rev 157) @@ -1 +1 @@ -1.17.02.42 \ No newline at end of file +1.17.02.43 \ No newline at end of file Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -381,6 +381,25 @@ return FALSE; } + int sel = m_ChannelsBox.GetItemData(m_ChannelsBox.GetCurSel()); + int type = m_TypeBox.GetItemData(m_TypeBox.GetCurSel()); + int maxChans; + if (type&MOD_TYPE_IT) { + maxChans=max_chans_IT; + } else if (type&MOD_TYPE_XM) { + maxChans=max_chans_XM; + } else if (type&MOD_TYPE_S3M) { + maxChans=max_chans_S3M; + } else { + maxChans=max_chans_MOD; + } + if (sel > maxChans) { + CString error; + error.Format("Error: Max number of channels for this type is %d", maxChans); + ::AfxMessageBox(error, MB_OK|MB_ICONEXCLAMATION); + return FALSE; + } + return TRUE; } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/mptrack.rc 2006-06-20 00:44:57 UTC (rev 157) @@ -145,6 +145,7 @@ MENUITEM "Cleanup S&ong", ID_CLEANUP_SONG MENUITEM "Remove &All Instruments", ID_INSTRUMENTS_REMOVEALL MENUITEM "Rearrange Samples", ID_REARRANGE_SAMPLES + MENUITEM "Cleanup &Plugins", ID_CLEANUP_PLUGS END MENUITEM SEPARATOR MENUITEM "&Find\tCtrl+F", ID_EDIT_FIND @@ -1588,11 +1589,11 @@ CAPTION "Mix Plugins" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN - DEFPUSHBUTTON "OK",IDOK,161,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,161,24,50,14 + DEFPUSHBUTTON "Add to Song",IDOK,161,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,161,132,50,14 LTEXT "",IDC_TEXT1,7,151,204,8 - PUSHBUTTON "Add Plugin...",IDC_BUTTON1,161,115,50,14 - PUSHBUTTON "Remove",IDC_BUTTON2,161,132,50,14 + PUSHBUTTON "New plugin...",IDC_BUTTON1,161,46,50,14,BS_MULTILINE + PUSHBUTTON "Remove",IDC_BUTTON2,161,63,50,14 CONTROL "Tree1",IDC_TREE1,"SysTreeView32",TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | WS_TABSTOP,7,7,148,140, WS_EX_CLIENTEDGE @@ -1893,7 +1894,7 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,17,2,42 + FILEVERSION 1,17,2,43 PRODUCTVERSION 0,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG @@ -1911,7 +1912,7 @@ BEGIN VALUE "CompanyName", "Olivier Lapicque / OpenMPT team" VALUE "FileDescription", "OpenMPT / ModPlug Tracker" - VALUE "FileVersion", "1, 17, 2, 42" + VALUE "FileVersion", "1, 17, 2, 43" VALUE "InternalName", "Modplug Tracker" VALUE "LegalCopyright", "Copyright \xA91997-2003 Olivier Lapicque; \xA92004-2005 GPL." VALUE "LegalTrademarks", "M.O.D.P.L.U.G" Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2006-06-20 00:44:57 UTC (rev 157) @@ -807,6 +807,70 @@ </Filter> </Filter> <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"> + <File + RelativePath="res\bitmap1.bmp"> + </File> + <File + RelativePath=".\res\colors.bmp"> + </File> + <File + RelativePath=".\res\dragging.cur"> + </File> + <File + RelativePath=".\Res\envbar.bmp"> + </File> + <File + RelativePath=".\res\img_list.bmp"> + </File> + <File + RelativePath=".\res\mainbar.bmp"> + </File> + <File + RelativePath=".\res\moddoc.ico"> + </File> + <File + RelativePath=".\res\modplthingmorecontrast.bmp"> + </File> + <File + RelativePath=".\res\MPTRACK.bmp"> + </File> + <File + RelativePath=".\res\mptrack.ico"> + </File> + <File + RelativePath=".\res\mptrack.rc2"> + </File> + <File + RelativePath=".\Res\nodrag.cur"> + </File> + <File + RelativePath=".\res\nodrop.cur"> + </File> + <File + RelativePath=".\res\patterns.bmp"> + </File> + <File + RelativePath=".\res\rt_manif.bin"> + </File> + <File + RelativePath=".\Res\smptoolb.bmp"> + </File> + <File + RelativePath=".\Res\splash.bmp"> + </File> + <File + RelativePath=".\res\splashno.bmp"> + </File> + <File + RelativePath=".\res\view_pat.bmp"> + </File> + <File + RelativePath=".\res\vumeters.bmp"> + </File> + </Filter> + <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl"> <File @@ -966,70 +1030,6 @@ RelativePath="..\soundlib\WindowedFIR.h"> </File> </Filter> - <Filter - Name="Resource Files" - Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"> - <File - RelativePath="res\bitmap1.bmp"> - </File> - <File - RelativePath=".\res\colors.bmp"> - </File> - <File - RelativePath=".\res\dragging.cur"> - </File> - <File - RelativePath=".\Res\envbar.bmp"> - </File> - <File - RelativePath=".\res\img_list.bmp"> - </File> - <File - RelativePath=".\res\mainbar.bmp"> - </File> - <File - RelativePath=".\res\moddoc.ico"> - </File> - <File - RelativePath=".\res\modplthingmorecontrast.bmp"> - </File> - <File - RelativePath=".\res\MPTRACK.bmp"> - </File> - <File - RelativePath=".\res\mptrack.ico"> - </File> - <File - RelativePath=".\res\mptrack.rc2"> - </File> - <File - RelativePath=".\Res\nodrag.cur"> - </File> - <File - RelativePath=".\res\nodrop.cur"> - </File> - <File - RelativePath=".\res\patterns.bmp"> - </File> - <File - RelativePath=".\res\rt_manif.bin"> - </File> - <File - RelativePath=".\Res\smptoolb.bmp"> - </File> - <File - RelativePath=".\Res\splash.bmp"> - </File> - <File - RelativePath=".\res\splashno.bmp"> - </File> - <File - RelativePath=".\res\view_pat.bmp"> - </File> - <File - RelativePath=".\res\vumeters.bmp"> - </File> - </Filter> <File RelativePath=".\mptrack.reg"> </File> Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/mptrack/resource.h 2006-06-20 00:44:57 UTC (rev 157) @@ -942,6 +942,7 @@ #define ID_PATTERN_REMOVECHANNELDIALOG 59151 #define ID_Menu 59200 #define ID_FILE_SAVECOMPAT 59202 +#define ID_CLEANUP_PLUGS 59205 // Next default values for new objects // @@ -949,8 +950,8 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 510 -#define _APS_NEXT_COMMAND_VALUE 59203 -#define _APS_NEXT_CONTROL_VALUE 2255 +#define _APS_NEXT_COMMAND_VALUE 59206 +#define _APS_NEXT_CONTROL_VALUE 2256 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif Modified: trunk/OpenMPT/packageTemplate/History.txt =================================================================== --- trunk/OpenMPT/packageTemplate/History.txt 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/packageTemplate/History.txt 2006-06-20 00:44:57 UTC (rev 157) @@ -8,6 +8,14 @@ ?: other (tx XYZ): thanks to XYZ for telling me about the bug +. v1.17.02.43 + + <rewbs> You can now load up new plugins from anywhere, not just the General tab. Select "Plugin Manager..." from the view menu. This can also be assigned to a global hotkey. + Limitation: currently plugins added to a song in this manner with always be put in the first empty slot. In a future version you'll be able to choose the slot directly from that window. + + <rewbs> "Cleanup Plugins" to remove any plugs that are not associated to a channel and not used by an instrument and not used as an output for any used plugs. + . <rewbs> Fixed channel limits. Should be able to correctly save IT pattern data with up to 127 chans. There's only space for 64 channel headers though (channel names etc..). XMs restricted to 64 chans. + . <rewbs> Added channel limit check when adding chans from the pattern editor. + . <rewbs> Fixed instant crash with SampleTank 2.1. + . v1.17.02.42 + <rewbs> "Compatibility export" in file menu: save as 'plain' IT, without all of OpenMPT's crap. IT only for now (not XM). . <rewbs> Set instrument in pattern editor should work when no note is specified (tx Torvus - http://lpchip.com/modplug/viewtopic.php?t=470) @@ -22,6 +30,7 @@ . <rewbs> Fixed the following settings that were not saving correctly: mod document window status, row spacing, channel VU meters, channel effect visibility, Most recent files list, Toolbar settings. . <rewbs> Process priority no longer defaults to high. + . v 1.17.02.40 + <Relabsoluness> Added indicator of currently playing pattern to orderlist. + <Relabsoluness> 'Loop pattern' and 'follow song' keys should now work when orderlist has focus. Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb 2006-06-20 00:44:57 UTC (rev 157) @@ -280,3 +280,5 @@ //----( Instrument Context [top] (17) )------------ //----( Comments Context [top] (18) )------------ + +//----( Unknown Context (19) )------------ Modified: trunk/OpenMPT/soundlib/Fastmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Fastmix.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/soundlib/Fastmix.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -1847,6 +1847,19 @@ } } + /* + if (pPlugin->multiRouting) { + int nOutput=0; + for (int nOutput=0; nOutput<pPlugin->nOutputs/2; nOutput++) { + destinationPlug = pPlugin->multiRoutingDestinations[nOutput]; + pOutState = m_MixPlugins[destinationPlug].pMixState; + pOutputs[2*nOutput] = pOutState->pOutBufferL; + pOutputs[2*(nOutput+1)] = pOutState->pOutBufferR; + } + + } +*/ + if (pPlugin->Info.dwInputRouting & MIXPLUG_INPUTF_MASTEREFFECT) { if (!bMasterMix) Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -665,11 +665,7 @@ m_nSongPreAmp=100; } // Reading Channels Pan Positions -// -> CODE#0006 -// -> DESC="misc quantity changes" -// for (int ipan=0; ipan<64; ipan++) if (pifh->chnpan[ipan] != 0xFF) - for (int ipan=0; ipan<MAX_BASECHANNELS; ipan++) if (pifh->chnpan[ipan] != 0xFF) -// -! BEHAVIOUR_CHANGE#0006 + for (int ipan=0; ipan</*MAX_BASECHANNELS*/64; ipan++) if (pifh->chnpan[ipan] != 0xFF) //Header only has room for settings for 64 chans... { ChnSettings[ipan].nVolume = pifh->chnvol[ipan]; ChnSettings[ipan].nPan = 128; @@ -814,7 +810,8 @@ UINT ch = b & IT_bitmask_patternChanField_c; // 0x7f We have some data grab a byte keeping only 127 bits if (ch) - ch = (ch - 1) & IT_bitmask_patternChanMask_c; // 0x3f mask of the byte again, keeping only 64 bits + ch = (ch - 1);// & IT_bitmask_patternChanMask_c; // 0x3f mask of the byte again, keeping only 64 bits + if (b & IT_bitmask_patternChanEnabled_c) // 0x80 check if the upper bit is enabled. { if (i >= len) @@ -1056,9 +1053,9 @@ } UINT ch = b & IT_bitmask_patternChanField_c; // 0x7f - + if (ch) - ch = (ch - 1) & IT_bitmask_patternChanMask_c; // 0x3f + ch = (ch - 1); //& IT_bitmask_patternChanMask_c; // 0x3f if (b & IT_bitmask_patternChanEnabled_c) // 0x80 { @@ -1493,17 +1490,22 @@ // Channel Pan and Volume memset(header.chnpan, 0xFF, 64); memset(header.chnvol, 64, 64); - for (UINT ich=0; ich<m_nChannels; ich++) + for (UINT ich=0; ich</*m_nChannels*/64; ich++) //Header only has room for settings for 64 chans... { header.chnpan[ich] = ChnSettings[ich].nPan >> 2; if (ChnSettings[ich].dwFlags & CHN_SURROUND) header.chnpan[ich] = 100; header.chnvol[ich] = ChnSettings[ich].nVolume; if (ChnSettings[ich].dwFlags & CHN_MUTE) header.chnpan[ich] |= 0x80; + } + + for (UINT ich=0; ich<m_nChannels; ich++) + { if (ChnSettings[ich].szName[0]) { dwChnNamLen = (ich+1) * MAX_CHANNELNAME; } } + if (dwChnNamLen) dwExtra += dwChnNamLen + 8; #ifdef SAVEITTIMESTAMP dwExtra += 8; // Time Stamp @@ -2067,7 +2069,7 @@ // Channel Pan and Volume memset(header.chnpan, 0xFF, 64); memset(header.chnvol, 64, 64); - for (UINT ich=0; ich<nChannels; ich++) + for (UINT ich=0; ich</*m_nChannels*/64; ich++) //Header only has room for settings for 64 chans... { header.chnpan[ich] = ChnSettings[ich].nPan >> 2; if (ChnSettings[ich].dwFlags & CHN_SURROUND) header.chnpan[ich] = 100; Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2006-06-20 00:44:57 UTC (rev 157) @@ -482,7 +482,7 @@ } } //end for all rows } else { - memset(s, 0, m_nChannels*4); //if patten does not exist + memset(s, 0, m_nChannels*4); //if pattern does not exist for (UINT i=0; i<64; i++) { //invent blank pattern fwrite(s, m_nChannels, 4, f); } Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2006-04-11 23:44:36 UTC (rev 156) +++ trunk/OpenMPT/soundlib/Sndfile.h 2006-06-20 00:44:57 UTC (rev 157) @@ -34,21 +34,21 @@ // -> DESC="misc quantity changes" #define MAX_INSTRUMENTS 256 //200 // -! BEHAVIOUR_CHANGE#0006 -#ifdef FASTSOUNDLIB -#define MAX_CHANNELS 80 -#else +//#ifdef FASTSOUNDLIB +//#define MAX_CHANNELS 80 +//#else // -> CODE#0006 // -> DESC="misc quantity changes" #define MAX_CHANNELS 256 //200 // -! BEHAVIOUR_CHANGE#0006 -#endif +//#endif // -> CODE#0006 // -> DESC="misc quantity changes" -#ifdef FASTSOUNDLIB -#define MAX_BASECHANNELS 64 -#else -#define MAX_BASECHANNELS 128 // Let 128 channels between MAX_BASECHANNELS & MAX_CHANNELS -#endif +//#ifdef FASTSOUNDLIB +//#define MAX_BASECHANNELS 64 +//#else +#define MAX_BASECHANNELS 127 +//#endif // -! BEHAVIOUR_CHANGE#0006 #define MAX_ENVPOINTS 32 #define MIN_PERIOD 0x0020 @@ -770,7 +770,15 @@ MIDIOUT_PROGRAM, }; +enum { + max_chans_IT=127, + max_chans_XM=64, + max_chans_MOD=32, + max_chans_S3M=32, +}; + + typedef struct MODMIDICFG { CHAR szMidiGlb[9*32]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2006-08-13 15:49:39
|
Revision: 161 Author: rewbs Date: 2006-08-13 08:49:22 -0700 (Sun, 13 Aug 2006) ViewCVS: http://svn.sourceforge.net/modplug/?rev=161&view=rev Log Message: ----------- v1.17.02.44 + <rewbs> Added release section to volume envelope (see: http://openmpt.xwiki.com/xwiki/bin/view/Manual/InstrumentReleaseEnvelope). IT only. . <rewbs> Overflow fixes in file loading functions (see: http://aluigi.altervista.org/adv/mptho-adv.txt) . <rewbs> Greyed out irrelevant items in the orderlist context menu. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/fxp.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2006-08-13 15:49:22 UTC (rev 161) @@ -623,19 +623,25 @@ SetCurSel(m_nXScroll + (pt.x - rect.left) / m_cxFont); SetFocus(); HMENU hMenu = ::CreatePopupMenu(); + + UINT nCurrentPattern = GetCurrentPattern(); + bool patternExists = (nCurrentPattern<MAX_PATTERNS + && m_pModDoc->GetSoundFile()->Patterns[nCurrentPattern] != NULL); + DWORD greyed = patternExists?FALSE:MF_GRAYED; + if (hMenu) { AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_INSERT, "&Insert Pattern\tIns"); AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_DELETE, "&Remove Pattern\tDel"); AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_NEW, "Create &New Pattern"); - AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_COPY, "&Duplicate Pattern"); - AppendMenu(hMenu, MF_STRING, ID_PATTERNCOPY, "&Copy Pattern"); - AppendMenu(hMenu, MF_STRING, ID_PATTERNPASTE, "P&aste Pattern"); + AppendMenu(hMenu, MF_STRING|greyed, ID_ORDERLIST_COPY, "&Duplicate Pattern"); + AppendMenu(hMenu, MF_STRING|greyed, ID_PATTERNCOPY, "&Copy Pattern"); + AppendMenu(hMenu, MF_STRING|greyed, ID_PATTERNPASTE, "P&aste Pattern"); if ((m_pModDoc) && (m_pModDoc->GetSoundFile()->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT))) { AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); - AppendMenu(hMenu, MF_STRING, ID_PATTERN_PROPERTIES, "&Properties..."); + AppendMenu(hMenu, MF_STRING|greyed, ID_PATTERN_PROPERTIES, "&Properties..."); } ClientToScreen(&pt); ::TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON, pt.x, pt.y, 0, m_hWnd, NULL); Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2006-08-13 15:49:22 UTC (rev 161) @@ -212,6 +212,7 @@ HPEN CMainFrame::penHalfDarkGray = NULL; HPEN CMainFrame::penSample = NULL; HPEN CMainFrame::penEnvelope = NULL; +HPEN CMainFrame::penEnvelopeHighlight = NULL; HPEN CMainFrame::penSeparator = NULL; HBRUSH CMainFrame::brushGray = NULL; HBRUSH CMainFrame::brushBlack = NULL; @@ -220,6 +221,7 @@ //CBrush *CMainFrame::pbrushWhite = NULL;//rewbs.envRowGrid HBRUSH CMainFrame::brushHighLight = NULL; +HBRUSH CMainFrame::brushHighLightRed = NULL; HBRUSH CMainFrame::brushWindow = NULL; HCURSOR CMainFrame::curDragging = NULL; HCURSOR CMainFrame::curArrow = NULL; @@ -767,6 +769,7 @@ DeleteGDIObject(penDarkGray); DeleteGDIObject(penSample); DeleteGDIObject(penEnvelope); + DeleteGDIObject(penEnvelopeHighlight); DeleteGDIObject(m_hFixedFont); DeleteGDIObject(penScratch); DeleteGDIObject(penGray00); @@ -1672,6 +1675,9 @@ penSample = ::CreatePen(PS_SOLID, 0, rgbCustomColors[MODCOLOR_SAMPLE]); if (penEnvelope) DeleteObject(penEnvelope); penEnvelope = ::CreatePen(PS_SOLID, 0, rgbCustomColors[MODCOLOR_ENVELOPES]); + if (penEnvelopeHighlight) DeleteObject(penEnvelopeHighlight); + penEnvelopeHighlight = ::CreatePen(PS_SOLID, 0, RGB(0xFF, 0xFF, 0x00)); + for (UINT i=0; i<NUM_VUMETER_PENS*2; i++) { int r0,g0,b0, r1,g1,b1; @@ -1718,8 +1724,11 @@ COLORREF crBkgnd = GetSysColor(COLOR_WINDOW); if (brushHighLight) DeleteObject(brushHighLight); brushHighLight = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT)); + if (brushHighLightRed) DeleteObject(brushHighLight); + brushHighLightRed = CreateSolidBrush(RGB(0xFF,0x00,0x00)); + if (brushWindow) DeleteObject(brushWindow); - brushWindow = CreateSolidBrush(crBkgnd); + brushWindow = CreateSolidBrush(crBkgnd); if (penSeparator) DeleteObject(penSeparator); penSeparator = CreatePen(PS_SOLID, 0, RGB(GetRValue(crBkgnd)/2, GetGValue(crBkgnd)/2, GetBValue(crBkgnd)/2)); } Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2006-08-13 15:49:22 UTC (rev 161) @@ -379,9 +379,9 @@ // GDI static HICON m_hIcon; static HFONT m_hGUIFont, m_hFixedFont, m_hLargeFixedFont; - static HBRUSH brushGray, brushBlack, brushWhite, brushHighLight, brushWindow; + static HBRUSH brushGray, brushBlack, brushWhite, brushHighLight, brushHighLightRed, brushWindow; // static CBrush *pbrushBlack, *pbrushWhite; - static HPEN penBlack, penDarkGray, penLightGray, penWhite, penHalfDarkGray, penSample, penEnvelope, penSeparator, penScratch, penGray00, penGray33, penGray40, penGray55, penGray80, penGray99, penGraycc, penGrayff; + static HPEN penBlack, penDarkGray, penLightGray, penWhite, penHalfDarkGray, penSample, penEnvelope, penEnvelopeHighlight, penSeparator, penScratch, penGray00, penGray33, penGray40, penGray55, penGray80, penGray99, penGraycc, penGrayff; static HCURSOR curDragging, curNoDrop, curArrow, curNoDrop2, curVSplit; static COLORREF rgbCustomColors[MAX_MODCOLORS]; static LPMODPLUGDIB bmpPatterns, bmpNotes, bmpVUMeters, bmpVisNode; Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2006-08-13 15:49:22 UTC (rev 161) @@ -786,9 +786,7 @@ pChn->nNewNote = note; if (nins) { //Set instrument - pChn->nVolEnvPosition = 0; - pChn->nPanEnvPosition = 0; - pChn->nPitchEnvPosition = 0; + m_SndFile.resetEnvelopes(pChn); m_SndFile.InstrumentChange(pChn, nins); } else if ((nsmp) && (nsmp < MAX_SAMPLES)) { //Or set sample Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2006-08-13 15:49:22 UTC (rev 161) @@ -1318,8 +1318,7 @@ penv->nGlobalVol = 64; penv->nPan = 128; penv->nPPC = 5*12; - penv->nResampling = SRCMODE_DEFAULT; - penv->nFilterMode = FLTMODE_UNCHANGED; + m_SndFile.SetDefaultInstrumentValues(penv); for (UINT n=0; n<128; n++) { penv->Keyboard[n] = nsample; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2006-08-13 15:49:22 UTC (rev 161) @@ -2005,7 +2005,6 @@ Dispatch(effMainsChanged, 0, 1, NULL, 0.0f); // calls plugin's resume Dispatch(effStartProcess, 0, 0, NULL, 0.0f); m_bPlugResumed = true; -// ClearVSTEvents(); //DEBUG } catch (...) { CVstPluginManager::ReportPlugException("Exception in Resume() (Plugin=%s)\n", m_pFactory->szLibraryName); } @@ -2623,8 +2622,10 @@ dwMidiCode = 0x80|nCh|(vol<<16); //note off, on chan nCh; vol is note off velocity. for (UINT i=0; i<128; i++) //all notes { - pCh->uNoteOnMap[i][trackChannel]=0; - MidiSend(dwMidiCode|(i<<8)); + //if (!(m_pEffect->uniqueID==1413633619L) || pCh->uNoteOnMap[i][trackChannel]>0) { //only send necessary NOs for TBVS. + pCh->uNoteOnMap[i][trackChannel]=0; + MidiSend(dwMidiCode|(i<<8)); + //} } } Modified: trunk/OpenMPT/mptrack/fxp.cpp =================================================================== --- trunk/OpenMPT/mptrack/fxp.cpp 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/fxp.cpp 2006-08-13 15:49:22 UTC (rev 161) @@ -106,7 +106,7 @@ ChunkMagic == 'CcnK' && (fxMagic == 'FxCk' || fxMagic == 'FPCh'))) { - ::AfxMessageBox("Bad Magic."); + ::AfxMessageBox("Bad Magic number: this does not look like a preset file."); inStream.Close(); return false; } @@ -124,7 +124,7 @@ } } } - else if (fxMagic == 'FPCh') // load chunk list + else if (fxMagic == 'FPCh') // load chunk { if (!ReadLE(inStream, chunkSize)) { @@ -254,7 +254,7 @@ bool Cfxp::WriteLE(CFile &out, const long &l) { int size=sizeof(long); - long l2 = l; // maybe I should have made that arg a const.. + long l2 = l; if (NeedSwap()) SwapBytes(l2); out.Write(&l2, size); @@ -264,7 +264,7 @@ bool Cfxp::WriteLE(CFile &out, const float &f) { int size=sizeof(float); - float f2 = f; // maybe I should have made that arg a const.. + float f2 = f; if (NeedSwap()) SwapBytes(f2); out.Write(&f2, size); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/mptrack.rc 2006-08-13 15:49:22 UTC (rev 161) @@ -216,6 +216,8 @@ MENUITEM "C&arry envelope", ID_ENVELOPE_CARRY MENUITEM "&Insert Point", ID_ENVELOPE_INSERTPOINT MENUITEM "&Remove Point", ID_ENVELOPE_REMOVEPOINT + MENUITEM "&Toggle Release Node", ID_ENVELOPE_TOGGLERELEASENODE + MENUITEM SEPARATOR MENUITEM "&Copy envelope", ID_EDIT_COPY MENUITEM "&Paste envelope", ID_EDIT_PASTE @@ -1894,7 +1896,7 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,17,2,43 + FILEVERSION 1,17,2,44 PRODUCTVERSION 0,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG @@ -1912,9 +1914,9 @@ BEGIN VALUE "CompanyName", "Olivier Lapicque / OpenMPT team" VALUE "FileDescription", "OpenMPT / ModPlug Tracker" - VALUE "FileVersion", "1, 17, 2, 43" + VALUE "FileVersion", "1, 17, 2, 44" VALUE "InternalName", "Modplug Tracker" - VALUE "LegalCopyright", "Copyright \xA91997-2003 Olivier Lapicque; \xA92004-2005 GPL." + VALUE "LegalCopyright", "Copyright \xA91997-2003 Olivier Lapicque; \xA92004-2007 GPL." VALUE "LegalTrademarks", "M.O.D.P.L.U.G" VALUE "OriginalFilename", "mptrack.exe" VALUE "ProductName", "OpenMPT / ModPlug Tracker" @@ -2187,6 +2189,7 @@ "Display channel manager window\nChannel manager" ID_INDICATOR_CPU "-" ID_FILE_EXPORTCOMPAT "Export file to standard IT/XM." + ID_ENVELOPE_SETRELEASENODE "Set release node" END STRINGTABLE Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2006-08-13 09:05:57 UTC (rev 160) +++ trunk/OpenMPT/mptrack/resource.h 2006-08-13 15:49:22 UTC (rev 161) @@ -41,6 +41,7 @@ #define IDR_ENVELOPES 203 #define ID_INDICATOR_CPU 203 #define ID_FILE_EXPORTCOMPAT 204 +#define ID_ENVELOPE_SETRELEASENODE 205 #define IDB_MAINBAR 300 #define IDB_IMAGELIST 301 #define IDB_PATTERNS 302 @@ -943,6 +944,7 @@ #define ID_Menu 59200 #define ID_FILE_SAVECOMPAT 59202 #define ID_CLEANUP_PLUGS 59205 +#define ID_ENVELOPE_TOGGLERELEASENODE 59206 // Next default values for new objects // @@ -950,7 +952,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 510 -#define _APS_NEXT_COMMAND_VALUE 59206 +#define _APS_NEXT_COMMAND_VALUE 59207 #define _APS_NEXT_CONTROL_VALUE 2256 #define _APS_NEXT_SYMED_VALUE 901 #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2006-08-13 15:52:41
|
Revision: 163 Author: rewbs Date: 2006-08-13 08:52:29 -0700 (Sun, 13 Aug 2006) ViewCVS: http://svn.sourceforge.net/modplug/?rev=163&view=rev Log Message: ----------- v1.17.02.44 + <rewbs> Added release section to volume envelope (see: http://openmpt.xwiki.com/xwiki/bin/view/Manual/InstrumentReleaseEnvelope). IT only. . <rewbs> Overflow fixes in file loading functions (see: http://aluigi.altervista.org/adv/mptho-adv.txt) . <rewbs> Greyed out irrelevant items in the orderlist context menu. Modified Paths: -------------- trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2006-08-13 15:51:11 UTC (rev 162) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2006-08-13 15:52:29 UTC (rev 163) @@ -85,6 +85,7 @@ ON_COMMAND(ID_INSTRUMENT_SAMPLEMAP, OnEditSampleMap) ON_MESSAGE(WM_MOD_MIDIMSG, OnMidiMsg) ON_MESSAGE(WM_MOD_KEYCOMMAND, OnCustomKeyMsg) //rewbs.customKeys + ON_COMMAND(ID_ENVELOPE_TOGGLERELEASENODE, OnEnvToggleReleasNode) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -1305,6 +1306,7 @@ { maxpoint--; m_dcMemMain.SelectObject(CMainFrame::penEnvelope); + int releaseNode = EnvGetReleaseNode(); for (UINT i=0; i<=maxpoint; i++) { int x = (EnvGetTick(i) + 1) * ENV_ZOOM - nScrollPos; @@ -1313,11 +1315,18 @@ rect.top = y - 3; rect.right = x + 4; rect.bottom = y + 4; - m_dcMemMain.FrameRect(&rect, CBrush::FromHandle(CMainFrame::brushWhite)); - if (i) + if (i) { m_dcMemMain.LineTo(x, y); - else + } else { m_dcMemMain.MoveTo(x, y); + } + if (i==releaseNode) { + m_dcMemMain.FrameRect(&rect, CBrush::FromHandle(CMainFrame::brushHighLightRed)); + m_dcMemMain.SelectObject(CMainFrame::penEnvelopeHighlight); + } else { + m_dcMemMain.FrameRect(&rect, CBrush::FromHandle(CMainFrame::brushWhite)); + } + } } DrawPositionMarks(m_dcMemMain.m_hDC); @@ -1337,7 +1346,73 @@ // -! NEW_FEATURE#0015 } +BYTE CViewInstrument::EnvGetReleaseNode() +//-------------------------------------- +{ + CModDoc *pModDoc = GetDocument(); + if (pModDoc) { + CSoundFile *pSndFile = pModDoc->GetSoundFile(); + INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; + if (penv) { + switch(m_nEnv) { + case ENV_VOLUME: + return penv->nVolEnvReleaseNode; + case ENV_PANNING: + return penv->nPanEnvReleaseNode; + case ENV_PITCH: + return penv->nPitchEnvReleaseNode; + default: + return ENV_RELEASE_NODE_UNSET; + } + } + } +} +WORD CViewInstrument::EnvGetReleaseNodeValue() +//-------------------------------------- +{ + CModDoc *pModDoc = GetDocument(); + if (pModDoc) { + CSoundFile *pSndFile = pModDoc->GetSoundFile(); + INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; + if (penv) { + switch(m_nEnv) { + case ENV_VOLUME: + return penv->VolEnv[EnvGetReleaseNode()]; + case ENV_PANNING: + return penv->PanEnv[EnvGetReleaseNode()]; + case ENV_PITCH: + return penv->PitchEnv[EnvGetReleaseNode()]; + default: + return 0; + } + } + } +} + +WORD CViewInstrument::EnvGetReleaseNodeTick() +//-------------------------------------- +{ + CModDoc *pModDoc = GetDocument(); + if (pModDoc) { + CSoundFile *pSndFile = pModDoc->GetSoundFile(); + INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; + if (penv) { + switch(m_nEnv) { + case ENV_VOLUME: + return penv->VolPoints[EnvGetReleaseNode()]; + case ENV_PANNING: + return penv->PanPoints[EnvGetReleaseNode()]; + case ENV_PITCH: + return penv->PitchPoints[EnvGetReleaseNode()]; + default: + return 0; + } + } + } +} + + void CViewInstrument::DrawPositionMarks(HDC hdc) //---------------------------------------------- { @@ -1654,7 +1729,14 @@ if (nVal < 0) nVal = 0; if (nVal > 64) nVal = 64; if (nTick < 0) nTick = 0; - wsprintf(s, "Tick %d, [%d]", nTick, (m_nEnv != ENV_VOLUME) ? nVal-32 : nVal); + if (nTick<=EnvGetReleaseNodeTick()+1) { + int displayVal = (m_nEnv != ENV_VOLUME) ? nVal-32 : nVal; + wsprintf(s, "Tick %d, [%d]", nTick, displayVal); + } else { + int displayVal = (nVal-EnvGetReleaseNodeValue())*2; + displayVal = (m_nEnv != ENV_VOLUME) ? displayVal-32 : displayVal; + wsprintf(s, "Tick %d, [Rel%c%d]", nTick, displayVal>0?'+':'-', abs(displayVal)); + } UpdateIndicator(s); if ((m_dwStatus & INSSTATUS_DRAGGING) && (m_nDragItem)) { @@ -1860,9 +1942,11 @@ pSubMenu->EnableMenuItem(ID_ENVELOPE_INSERTPOINT, (lastpoint < maxpoint) ? MF_ENABLED : MF_GRAYED); pSubMenu->EnableMenuItem(ID_ENVELOPE_REMOVEPOINT, ((m_nDragItem) && (lastpoint > 1)) ? MF_ENABLED : MF_GRAYED); pSubMenu->EnableMenuItem(ID_ENVELOPE_CARRY, (pSndFile->m_nType & MOD_TYPE_IT) ? MF_ENABLED : MF_GRAYED); + pSubMenu->EnableMenuItem(ID_ENVELOPE_TOGGLERELEASENODE, (pSndFile->m_nType&MOD_TYPE_IT && m_nEnv==ENV_VOLUME) ? MF_ENABLED : MF_GRAYED); pSubMenu->CheckMenuItem(ID_ENVELOPE_SETLOOP, (EnvGetLoop()) ? MF_CHECKED : MF_UNCHECKED); pSubMenu->CheckMenuItem(ID_ENVELOPE_SUSTAIN, (EnvGetSustain()) ? MF_CHECKED : MF_UNCHECKED); pSubMenu->CheckMenuItem(ID_ENVELOPE_CARRY, (EnvGetCarry()) ? MF_CHECKED : MF_UNCHECKED); + pSubMenu->CheckMenuItem(ID_ENVELOPE_TOGGLERELEASENODE, (EnvGetReleaseNode()==m_nDragItem-1) ? MF_CHECKED : MF_UNCHECKED); m_ptMenu = pt; ClientToScreen(&pt); pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,this); @@ -1950,7 +2034,45 @@ } } +void CViewInstrument::OnEnvToggleReleasNode() +//--------------------------------------------------- +{ + int node = m_nDragItem-1; + CModDoc *pModDoc = GetDocument(); + if ((pModDoc) && (node>0) && (node <= EnvGetLastPoint())) + { + CSoundFile *pSndFile = pModDoc->GetSoundFile(); + INSTRUMENTHEADER *penv = pSndFile->Headers[m_nInstrument]; + switch(m_nEnv) { + case ENV_VOLUME: + if (penv->nVolEnvReleaseNode == node) { + penv->nVolEnvReleaseNode = ENV_RELEASE_NODE_UNSET; + } else { + penv->nVolEnvReleaseNode = node; + } + break; + case ENV_PANNING: + if (penv->nPanEnvReleaseNode == node) { + penv->nPanEnvReleaseNode = ENV_RELEASE_NODE_UNSET; + } else { + penv->nPanEnvReleaseNode = node; + } + break; + case ENV_PITCH: + if (penv->nPitchEnvReleaseNode == node) { + penv->nPitchEnvReleaseNode = ENV_RELEASE_NODE_UNSET; + } else { + penv->nPitchEnvReleaseNode = node; + } + break; + } + pModDoc->SetModified(); + InvalidateRect(NULL, FALSE); + } +} + + void CViewInstrument::OnEnvVolChanged() //------------------------------------- { @@ -2040,6 +2162,7 @@ if (penv->nVolLoopEnd > nPoint) penv->nVolLoopEnd--; if (penv->nVolSustainBegin > nPoint) penv->nVolSustainBegin--; if (penv->nVolSustainEnd > nPoint) penv->nVolSustainEnd--; + if (penv->nVolEnvReleaseNode>nPoint && penv->nVolEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) penv->nVolEnvReleaseNode--; penv->VolPoints[0] = 0; bOk = TRUE; } @@ -2058,6 +2181,7 @@ if (penv->nPanLoopEnd > nPoint) penv->nPanLoopEnd--; if (penv->nPanSustainBegin > nPoint) penv->nPanSustainBegin--; if (penv->nPanSustainEnd > nPoint) penv->nPanSustainEnd--; + if (penv->nPanEnvReleaseNode>nPoint && penv->nPanEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) penv->nPanEnvReleaseNode--; penv->PanPoints[0] = 0; bOk = TRUE; } @@ -2076,6 +2200,7 @@ if (penv->nPitchLoopEnd > nPoint) penv->nPitchLoopEnd--; if (penv->nPitchSustainBegin > nPoint) penv->nPitchSustainBegin--; if (penv->nPitchSustainEnd > nPoint) penv->nPitchSustainEnd--; + if (penv->nPitchEnvReleaseNode>nPoint && penv->nPitchEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) penv->nPitchEnvReleaseNode--; penv->PitchPoints[0] = 0; bOk = TRUE; } @@ -2131,6 +2256,7 @@ if (penv->nVolLoopEnd >= i) penv->nVolLoopEnd++; if (penv->nVolSustainBegin >= i) penv->nVolSustainBegin++; if (penv->nVolSustainEnd >= i) penv->nVolSustainEnd++; + if (penv->nVolEnvReleaseNode>=i && penv->nVolEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) penv->nVolEnvReleaseNode++; bOk = TRUE; } break; @@ -2156,6 +2282,7 @@ if (penv->nPanLoopEnd >= i) penv->nPanLoopEnd++; if (penv->nPanSustainBegin >= i) penv->nPanSustainBegin++; if (penv->nPanSustainEnd >= i) penv->nPanSustainEnd++; + if (penv->nPanEnvReleaseNode>=i && penv->nPanEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) penv->nPanEnvReleaseNode++; bOk = TRUE; } break; @@ -2181,6 +2308,7 @@ if (penv->nPitchLoopEnd >= i) penv->nPitchLoopEnd++; if (penv->nPitchSustainBegin >= i) penv->nPitchSustainBegin++; if (penv->nPitchSustainEnd >= i) penv->nPitchSustainEnd++; + if (penv->nPitchEnvReleaseNode>=i && penv->nPitchEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) penv->nPitchEnvReleaseNode++; bOk = TRUE; } break; Modified: trunk/OpenMPT/mptrack/View_ins.h =================================================================== --- trunk/OpenMPT/mptrack/View_ins.h 2006-08-13 15:51:11 UTC (rev 162) +++ trunk/OpenMPT/mptrack/View_ins.h 2006-08-13 15:52:29 UTC (rev 163) @@ -115,6 +115,7 @@ afx_msg void OnEnvLoopChanged(); afx_msg void OnEnvSustainChanged(); afx_msg void OnEnvCarryChanged(); + afx_msg void OnEnvToggleReleasNode(); afx_msg void OnEnvInsertPoint(); afx_msg void OnEnvRemovePoint(); afx_msg void OnSelectVolumeEnv(); @@ -134,6 +135,11 @@ virtual BOOL PreTranslateMessage(MSG *pMsg); //rewbs.customKeys //}}AFX_MSG DECLARE_MESSAGE_MAP() + +private: + BYTE EnvGetReleaseNode(); + WORD EnvGetReleaseNodeValue(); + WORD EnvGetReleaseNodeTick(); }; Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2006-08-13 15:51:11 UTC (rev 162) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2006-08-13 15:52:29 UTC (rev 163) @@ -437,25 +437,17 @@ || (!pChn->nLength) || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol))) { pChn->dwFlags |= CHN_FASTVOLRAMP; - if ((m_nType & MOD_TYPE_IT) && (!bInstrumentChanged) && (penv) && (!(pChn->dwFlags & (CHN_KEYOFF|CHN_NOTEFADE)))) - { - if (!(penv->dwFlags & ENV_VOLCARRY)) pChn->nVolEnvPosition = 0; - if (!(penv->dwFlags & ENV_PANCARRY)) pChn->nPanEnvPosition = 0; - if (!(penv->dwFlags & ENV_PITCHCARRY)) pChn->nPitchEnvPosition = 0; - } else - { - pChn->nVolEnvPosition = 0; - pChn->nPanEnvPosition = 0; - pChn->nPitchEnvPosition = 0; + if ((m_nType & MOD_TYPE_IT) && (!bInstrumentChanged) && (penv) && (!(pChn->dwFlags & (CHN_KEYOFF|CHN_NOTEFADE)))) { + if (!(penv->dwFlags & ENV_VOLCARRY)) resetEnvelopes(pChn, ENV_RESET_VOL); + if (!(penv->dwFlags & ENV_PANCARRY)) resetEnvelopes(pChn, ENV_RESET_PAN); + if (!(penv->dwFlags & ENV_PITCHCARRY)) resetEnvelopes(pChn, ENV_RESET_PITCH); + } else { + resetEnvelopes(pChn); } pChn->nAutoVibDepth = 0; pChn->nAutoVibPos = 0; - } else - if ((penv) && (!(penv->dwFlags & ENV_VOLUME))) - { - pChn->nVolEnvPosition = 0; - pChn->nAutoVibDepth = 0; - pChn->nAutoVibPos = 0; + } else if ((penv) && (!(penv->dwFlags & ENV_VOLUME))) { + resetEnvelopes(pChn); } } // Invalid sample ? @@ -593,9 +585,7 @@ { if ((m_nType & MOD_TYPE_IT) && (pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol)) { - pChn->nVolEnvPosition = 0; - pChn->nPanEnvPosition = 0; - pChn->nPitchEnvPosition = 0; + resetEnvelopes(pChn); pChn->nAutoVibDepth = 0; pChn->nAutoVibPos = 0; pChn->dwFlags &= ~CHN_NOTEFADE; @@ -1013,9 +1003,7 @@ if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) { pChn->dwFlags |= CHN_FASTVOLRAMP; - pChn->nVolEnvPosition = 0; - pChn->nPanEnvPosition = 0; - pChn->nPitchEnvPosition = 0; + resetEnvelopes(pChn); pChn->nAutoVibDepth = 0; pChn->nAutoVibPos = 0; pChn->dwFlags &= ~CHN_NOTEFADE; @@ -1069,9 +1057,7 @@ if ((bPorta) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) && (instr)) { pChn->dwFlags |= CHN_FASTVOLRAMP; - pChn->nVolEnvPosition = 0; - pChn->nPanEnvPosition = 0; - pChn->nPitchEnvPosition = 0; + resetEnvelopes(pChn); pChn->nAutoVibDepth = 0; pChn->nAutoVibPos = 0; } @@ -1566,7 +1552,33 @@ return TRUE; } +void CSoundFile::resetEnvelopes(MODCHANNEL* pChn, int envToReset) +{ + switch (envToReset) { + case ENV_RESET_ALL: + pChn->nVolEnvPosition = 0; + pChn->nPanEnvPosition = 0; + pChn->nPitchEnvPosition = 0; + pChn->nVolEnvValueAtReleaseJump = NOT_YET_RELEASED; + pChn->nPitchEnvValueAtReleaseJump = NOT_YET_RELEASED; + pChn->nPanEnvValueAtReleaseJump = NOT_YET_RELEASED; + break; + case ENV_RESET_VOL: + pChn->nVolEnvPosition = 0; + pChn->nVolEnvValueAtReleaseJump = NOT_YET_RELEASED; + break; + case ENV_RESET_PAN: + pChn->nPanEnvPosition = 0; + pChn->nPanEnvValueAtReleaseJump = NOT_YET_RELEASED; + break; + case ENV_RESET_PITCH: + pChn->nPitchEnvPosition = 0; + pChn->nPitchEnvValueAtReleaseJump = NOT_YET_RELEASED; + break; + } +} + //////////////////////////////////////////////////////////// // Channels effects @@ -2689,8 +2701,15 @@ if (pChn->pHeader) { INSTRUMENTHEADER *penv = pChn->pHeader; - if (((penv->dwFlags & ENV_VOLLOOP) || (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) && (penv->nFadeOut)) + if (((penv->dwFlags & ENV_VOLLOOP) || (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) && (penv->nFadeOut)) { pChn->dwFlags |= CHN_NOTEFADE; + } + + if (penv->nVolEnvReleaseNode != ENV_RELEASE_NODE_UNSET) { + pChn->nVolEnvValueAtReleaseJump=getVolEnvValueFromPosition(pChn->nVolEnvPosition, penv); + pChn->nVolEnvPosition= penv->VolPoints[penv->nVolEnvReleaseNode]; + } + } } Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2006-08-13 15:51:11 UTC (rev 162) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2006-08-13 15:52:29 UTC (rev 163) @@ -189,6 +189,9 @@ VSB. nVolSustainBegin; VSE. nVolSustainEnd; VSTV [EXT] nVSTiVolume; +PERN nPitchEnvReleaseNode +AERN nPanEnvReleaseNode +VERN nVolEnvReleaseNode ----------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------*/ @@ -265,6 +268,9 @@ WRITE_MPTHEADER_sized_member( nCutSwing , BYTE , CS.. ) WRITE_MPTHEADER_sized_member( nResSwing , BYTE , RS.. ) WRITE_MPTHEADER_sized_member( nFilterMode , BYTE , FM.. ) +WRITE_MPTHEADER_sized_member( nPitchEnvReleaseNode, BYTE , PERN ) +WRITE_MPTHEADER_sized_member( nPanEnvReleaseNode , BYTE , AERN ) +WRITE_MPTHEADER_sized_member( nVolEnvReleaseNode , BYTE , VERN ) } // -------------------------------------------------------------------------------------------- @@ -338,6 +344,9 @@ GET_MPTHEADER_sized_member( nCutSwing , BYTE , CS.. ) GET_MPTHEADER_sized_member( nResSwing , BYTE , RS.. ) GET_MPTHEADER_sized_member( nFilterMode , BYTE , FM.. ) +GET_MPTHEADER_sized_member( nPitchEnvReleaseNode, BYTE , PERN ) +GET_MPTHEADER_sized_member( nPanEnvReleaseNode , BYTE , AERN ) +GET_MPTHEADER_sized_member( nVolEnvReleaseNode , BYTE , VERN ) } return pointer; @@ -748,6 +757,8 @@ LPSTR CSoundFile::AllocateSample(UINT nbytes) //------------------------------------------- { + if (nbytes>0xFFFFFFD6) + return NULL; LPSTR p = (LPSTR)GlobalAllocPtr(GHND, (nbytes+39) & ~7); if (p) p += 16; return p; @@ -2650,8 +2661,20 @@ m_defaultInstrument.nResampling = SRCMODE_DEFAULT; m_defaultInstrument.nFilterMode = FLTMODE_UNCHANGED; m_defaultInstrument.nPPC = 5*12; - m_defaultInstrument.nGlobalVol=128; + m_defaultInstrument.nGlobalVol=64; m_defaultInstrument.nPan = 0x20 << 2; m_defaultInstrument.nIFC = 0xFF; + m_defaultInstrument.nPanEnvReleaseNode=ENV_RELEASE_NODE_UNSET; + m_defaultInstrument.nPitchEnvReleaseNode=ENV_RELEASE_NODE_UNSET; + m_defaultInstrument.nVolEnvReleaseNode=ENV_RELEASE_NODE_UNSET; } +void CSoundFile::SetDefaultInstrumentValues(INSTRUMENTHEADER *penv) +//----------------------------------------------------------------- +{ + penv->nResampling = m_defaultInstrument.nResampling; + penv->nFilterMode = m_defaultInstrument.nFilterMode; + penv->nPitchEnvReleaseNode = m_defaultInstrument.nPitchEnvReleaseNode; + penv->nPanEnvReleaseNode = m_defaultInstrument.nPanEnvReleaseNode; + penv->nVolEnvReleaseNode = m_defaultInstrument.nVolEnvReleaseNode; +} \ No newline at end of file Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2006-08-13 15:51:11 UTC (rev 162) +++ trunk/OpenMPT/soundlib/Sndfile.h 2006-08-13 15:52:29 UTC (rev 163) @@ -62,6 +62,7 @@ #define MAX_MIXPLUGINS 100 //50 // -! BEHAVIOUR_CHANGE#0006 #define MAX_PLUGPRESETS 1000 //rewbs.plugPresets +#define MED_MAX_COMMENT_LENGTH 5*1024 //I think 5kB should be enough, though I admit this is a guess. #define MOD_TYPE_NONE 0x00 #define MOD_TYPE_MOD 0x01 @@ -353,6 +354,15 @@ NUM_SRC_MODES }; +enum { + ENV_RESET_ALL, + ENV_RESET_VOL, + ENV_RESET_PAN, + ENV_RESET_PITCH, + ENV_RELEASE_NODE_UNSET=0xFF, + NOT_YET_RELEASED=-1 +}; + // Midi Continuous Controller Codes // http://www.borg.com/~jglatt/tech/midispec/ctllist.htm enum { @@ -537,6 +547,9 @@ BYTE nCutSwing; BYTE nResSwing; BYTE nFilterMode; + BYTE nPitchEnvReleaseNode; + BYTE nPanEnvReleaseNode; + BYTE nVolEnvReleaseNode; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // WHEN adding new members here, ALSO update Sndfile.cpp (instructions near the top of this file)! @@ -588,6 +601,7 @@ INSTRUMENTHEADER *pHeader; MODINSTRUMENT *pInstrument; DWORD nVolEnvPosition, nPanEnvPosition, nPitchEnvPosition; + LONG nVolEnvValueAtReleaseJump, nPanEnvValueAtReleaseJump, nPitchEnvValueAtReleaseJump; DWORD nMasterChn, nVUMeter; LONG nGlobalVol, nInsVol; LONG nFineTune, nTranspose; @@ -1153,6 +1167,10 @@ static UINT Normalize24BitBuffer(LPBYTE pbuffer, UINT cbsizebytes, DWORD lmax24, DWORD dwByteInc); UINT GetBestPlugin(UINT nChn, UINT priority, bool respectMutes); + + int getVolEnvValueFromPosition(int position, INSTRUMENTHEADER* penv); + void resetEnvelopes(MODCHANNEL* pChn, int envToReset = ENV_RESET_ALL); + void SetDefaultInstrumentValues(INSTRUMENTHEADER *penv); private: UINT __cdecl GetChannelPlugin(UINT nChan, bool respectMutes); UINT __cdecl GetActiveInstrumentPlugin(UINT nChan, bool respectMutes); @@ -1160,6 +1178,9 @@ void HandlePatternTransitionEvents(); void BuildDefaultInstrument(); + + + }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2007-05-09 19:57:23
|
Revision: 182 http://svn.sourceforge.net/modplug/?rev=182&view=rev Author: rewbs Date: 2007-05-09 12:57:16 -0700 (Wed, 09 May 2007) Log Message: ----------- <pelya & rewbs> Fix compilation in VS2k5 (http://forums.microsoft.com/msdn/showpost.aspx?postid=8663&siteid=1) Modified Paths: -------------- trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Mainbar.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_smp.h Modified: trunk/OpenMPT/mptrack/Mainbar.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp 2007-05-07 13:34:49 UTC (rev 181) +++ trunk/OpenMPT/mptrack/Mainbar.cpp 2007-05-09 19:57:16 UTC (rev 182) @@ -930,7 +930,11 @@ } +#if _MSC_VER >= 1400 +LRESULT CModTreeBar::OnNcHitTest(CPoint point) +#else UINT CModTreeBar::OnNcHitTest(CPoint point) +#endif //----------------------------------------- { CRect rect; Modified: trunk/OpenMPT/mptrack/Mainbar.h =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.h 2007-05-07 13:34:49 UTC (rev 181) +++ trunk/OpenMPT/mptrack/Mainbar.h 2007-05-09 19:57:16 UTC (rev 182) @@ -116,7 +116,11 @@ protected: //{{AFX_MSG(CModTreeBar) afx_msg void OnNcPaint(); +#if _MSC_VER >= 1400 + afx_msg LRESULT OnNcHitTest(CPoint point); +#else afx_msg UINT OnNcHitTest(CPoint point); +#endif afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point); Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2007-05-07 13:34:49 UTC (rev 181) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2007-05-09 19:57:16 UTC (rev 182) @@ -1699,7 +1699,11 @@ } +#if _MSC_VER >= 1400 +LRESULT CViewInstrument::OnNcHitTest(CPoint point) +#else UINT CViewInstrument::OnNcHitTest(CPoint point) +#endif //--------------------------------------------- { CRect rect; Modified: trunk/OpenMPT/mptrack/View_ins.h =================================================================== --- trunk/OpenMPT/mptrack/View_ins.h 2007-05-07 13:34:49 UTC (rev 181) +++ trunk/OpenMPT/mptrack/View_ins.h 2007-05-09 19:57:16 UTC (rev 182) @@ -98,7 +98,11 @@ afx_msg BOOL OnEraseBkgnd(CDC *) { return TRUE; } afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp); +#if _MSC_VER >= 1400 + afx_msg LRESULT OnNcHitTest(CPoint point); +#else afx_msg UINT OnNcHitTest(CPoint point); +#endif afx_msg void OnNcPaint(); afx_msg void OnPrevInstrument(); afx_msg void OnNextInstrument(); Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2007-05-07 13:34:49 UTC (rev 181) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2007-05-09 19:57:16 UTC (rev 182) @@ -1406,7 +1406,11 @@ } +#if _MSC_VER >= 1400 +LRESULT CViewSample::OnNcHitTest(CPoint point) +#else UINT CViewSample::OnNcHitTest(CPoint point) +#endif //----------------------------------------- { CRect rect; Modified: trunk/OpenMPT/mptrack/View_smp.h =================================================================== --- trunk/OpenMPT/mptrack/View_smp.h 2007-05-07 13:34:49 UTC (rev 181) +++ trunk/OpenMPT/mptrack/View_smp.h 2007-05-09 19:57:16 UTC (rev 182) @@ -59,7 +59,11 @@ afx_msg BOOL OnEraseBkgnd(CDC *) { return TRUE; } afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp); +#if _MSC_VER >= 1400 + afx_msg LRESULT OnNcHitTest(CPoint point); +#else afx_msg UINT OnNcHitTest(CPoint point); +#endif afx_msg void OnNcPaint(); afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2007-06-17 18:42:13
|
Revision: 190 http://svn.sourceforge.net/modplug/?rev=190&view=rev Author: rewbs Date: 2007-06-17 11:42:09 -0700 (Sun, 17 Jun 2007) Log Message: ----------- + <rewbs> Add name filter to plugin selection dialog. Useful when you have hundreds of plugins. Modified Paths: -------------- trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2007-06-17 16:24:14 UTC (rev 189) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2007-06-17 18:42:09 UTC (rev 190) @@ -985,10 +985,11 @@ // BEGIN_MESSAGE_MAP(CSelectPluginDlg, CDialog) - ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelChanged) - ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnSelDblClk) - ON_COMMAND(IDC_BUTTON1, OnAddPlugin) - ON_COMMAND(IDC_BUTTON2, OnRemovePlugin) + ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelChanged) + ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnSelDblClk) + ON_COMMAND(IDC_BUTTON1, OnAddPlugin) + ON_COMMAND(IDC_BUTTON2, OnRemovePlugin) + ON_EN_CHANGE(IDC_NAMEFILTER, OnNameFilterChanged) ON_WM_SIZE() ON_WM_GETMINMAXINFO() END_MESSAGE_MAP() @@ -996,7 +997,9 @@ void CSelectPluginDlg::DoDataExchange(CDataExchange* pDX) //------------------------------------------------------- { + CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_TREE1, m_treePlugins); + DDX_Text(pDX, IDC_NAMEFILTER, m_sNameFilter); } @@ -1199,6 +1202,14 @@ CDialog::OnCancel(); } +void CSelectPluginDlg::OnNameFilterChanged() +//------------------------------------- +{ + GetDlgItem(IDC_NAMEFILTER)->GetWindowText(m_sNameFilter); + m_sNameFilter = m_sNameFilter.MakeLower(); + UpdatePluginsList(); +} + VOID CSelectPluginDlg::UpdatePluginsList(DWORD forceSelect/*=0*/) //--------------------------------------------------------------- { @@ -1231,18 +1242,31 @@ PVSTPLUGINLIB p = pManager->GetFirstPlugin(); while (p) { - if (p->dwPluginId1 == kDmoMagic) - { + if (p->dwPluginId1 == kDmoMagic) { tvis.hParent = hDmo; - } else - { + } else { tvis.hParent = (p->bIsInstrument) ? hSynth : hVst; } + + // Apply name filter + if (m_sNameFilter != "") { + CString displayName = p->szLibraryName; + if (displayName.MakeLower().Find(m_sNameFilter) == -1) { + p = p->pNext; + continue; + } + } + tvis.hInsertAfter = TVI_SORT; tvis.item.pszText = p->szLibraryName; tvis.item.lParam = (LPARAM)p; HTREEITEM h = m_treePlugins.InsertItem(&tvis); + //If filter is active, expand nodes. + if (m_sNameFilter != "") { + m_treePlugins.EnsureVisible(h); + } + //Which plugin should be selected? if (m_pPlugin) { @@ -1279,8 +1303,7 @@ } } m_treePlugins.SetRedraw(TRUE); - if (cursel) - { + if (cursel) { m_treePlugins.SelectItem(cursel); m_treePlugins.SetItemState(cursel, TVIS_BOLD, TVIS_BOLD); m_treePlugins.EnsureVisible(cursel); @@ -1400,11 +1423,13 @@ void CSelectPluginDlg::OnSize(UINT nType, int cx, int cy) +//------------------------------------------------------- { CDialog::OnSize(nType, cx, cy); if (m_treePlugins) { - m_treePlugins.MoveWindow(11,11, cx-105, cy-40, FALSE); + m_treePlugins.MoveWindow(11, 33, cx-105, cy-63, FALSE); + ::MoveWindow(GetDlgItem(IDC_NAMEFILTER)->m_hWnd, 50, 11, cx-145, 21, FALSE); ::MoveWindow(GetDlgItem(IDC_TEXT1)->m_hWnd, 11,cy-25, cx-22, 25, FALSE); ::MoveWindow(GetDlgItem(IDOK)->m_hWnd, cx-85, 11, 75, 23, FALSE); ::MoveWindow(GetDlgItem(IDCANCEL)->m_hWnd, cx-85, 39, 75, 23, FALSE); Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2007-06-17 16:24:14 UTC (rev 189) +++ trunk/OpenMPT/mptrack/Vstplug.h 2007-06-17 18:42:09 UTC (rev 190) @@ -232,6 +232,7 @@ PSNDMIXPLUGIN m_pPlugin; CModDoc *m_pModDoc; CTreeCtrl m_treePlugins; + CString m_sNameFilter; public: CSelectPluginDlg(CModDoc *pModDoc, int nPlugSlot, CWnd *parent); //rewbs.plugDocAware @@ -244,6 +245,7 @@ virtual VOID OnCancel(); afx_msg void OnAddPlugin(); afx_msg void OnRemovePlugin(); + afx_msg void OnNameFilterChanged(); afx_msg void OnSelChanged(NMHDR *pNotifyStruct, LRESULT * result); afx_msg void OnSelDblClk(NMHDR *pNotifyStruct, LRESULT * result); DECLARE_MESSAGE_MAP() Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2007-06-17 16:24:14 UTC (rev 189) +++ trunk/OpenMPT/mptrack/mptrack.rc 2007-06-17 18:42:09 UTC (rev 190) @@ -1621,14 +1621,16 @@ CAPTION "Mix Plugins" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN + EDITTEXT IDC_NAMEFILTER,28,7,127,14,ES_AUTOHSCROLL + CONTROL "Tree1",IDC_TREE1,"SysTreeView32",TVS_DISABLEDRAGDROP | + TVS_SHOWSELALWAYS | WS_TABSTOP,7,21,148,126, + WS_EX_CLIENTEDGE DEFPUSHBUTTON "Add to Song",IDOK,161,7,50,14 + PUSHBUTTON "New plugin...",IDC_BUTTON1,161,46,50,14,BS_MULTILINE + PUSHBUTTON "Remove",IDC_BUTTON2,161,63,50,14 PUSHBUTTON "Cancel",IDCANCEL,161,132,50,14 LTEXT "",IDC_TEXT1,7,151,204,8 - PUSHBUTTON "New plugin...",IDC_BUTTON1,161,46,50,14,BS_MULTILINE - PUSHBUTTON "Remove",IDC_BUTTON2,161,63,50,14 - CONTROL "Tree1",IDC_TREE1,"SysTreeView32",TVS_DISABLEDRAGDROP | - TVS_SHOWSELALWAYS | WS_TABSTOP,7,7,148,140, - WS_EX_CLIENTEDGE + LTEXT "Filter:",IDC_STATIC,8,9,18,8 END IDD_PLUGINEDITOR DIALOGEX 0, 0, 187, 95 Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2007-06-17 16:24:14 UTC (rev 189) +++ trunk/OpenMPT/mptrack/resource.h 2007-06-17 18:42:09 UTC (rev 190) @@ -789,6 +789,7 @@ #define IDC_TEXT_RPB 2301 #define IDC_SPIN_RPB 2302 #define IDC_EDIT_RPB 2303 +#define IDC_NAMEFILTER 2304 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1015,7 +1016,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 515 #define _APS_NEXT_COMMAND_VALUE 59211 -#define _APS_NEXT_CONTROL_VALUE 2304 +#define _APS_NEXT_CONTROL_VALUE 2305 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2007-07-11 20:36:37
|
Revision: 191 http://svn.sourceforge.net/modplug/?rev=191&view=rev Author: rewbs Date: 2007-07-11 13:36:02 -0700 (Wed, 11 Jul 2007) Log Message: ----------- . <rewbs> Fix pattern search, which could search for the wrong param. Also enable typing of desired param value rather than only selecting from listbox. (http://lpchip.com/modplug/viewtopic.php?t=1799) . <rewbs> Delay-load winhttp.dll and don't die if it can't be found, e.g. on win98. (http://lpchip.com/modplug/viewtopic.php?t=1778) . <rewbs> Fix a couple of pixels on D# in the pattern editor small font bitmap. (http://lpchip.com/modplug/viewtopic.php?t=1781) Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack.vcproj trunk/OpenMPT/mptrack/res/view_pat.bmp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2007-07-11 20:36:02 UTC (rev 191) @@ -2236,7 +2236,17 @@ return gFXInfo[ndx].dwEffect; } +UINT CModDoc::GetEffectMaskFromIndex(UINT ndx) +//------------------------------------------------------- +{ + if (ndx >= MAX_FXINFO) { + return 0; + } + return gFXInfo[ndx].dwParamValue; + +} + BOOL CModDoc::GetEffectInfo(UINT ndx, LPSTR s, BOOL bXX, DWORD *prangeMin, DWORD *prangeMax) //------------------------------------------------------------------------------------------ { Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/Moddoc.h 2007-07-11 20:36:02 UTC (rev 191) @@ -125,6 +125,7 @@ BOOL GetEffectInfo(UINT ndx, LPSTR s, BOOL bXX=FALSE, DWORD *prangeMin=NULL, DWORD *prangeMax=NULL); LONG GetIndexFromEffect(UINT command, UINT param); UINT GetEffectFromIndex(UINT ndx, int &refParam); + UINT GetEffectMaskFromIndex(UINT ndx); BOOL GetEffectNameEx(LPSTR pszName, UINT ndx, UINT param); BOOL IsExtendedEffect(UINT ndx) const; UINT MapValueToPos(UINT ndx, UINT param); Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2007-07-11 20:36:02 UTC (rev 191) @@ -787,7 +787,13 @@ m_bInitialized = TRUE; if (CMainFrame::gnCheckForUpdates) { - UpdateCheck(); + try { + UpdateCheck(); + } catch (...) { + // Could not do update check. Don't compain - do nothing. + // Assuming winhttp.dll is set as delay-load in the project settings, + // we will end up here if the dll cannot be foung (e.g. on win98). + } } // Open settings if this is the previous execution was with an earlier version. Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2007-07-11 20:36:02 UTC (rev 191) @@ -2189,7 +2189,7 @@ CString processMethod = (m_pEffect->flags & effFlagsCanReplacing) ? "processReplacing" : "process"; CVstPluginManager::ReportPlugException("The plugin %s threw an exception in %s. It has automatically been set to \"Bypass\".", m_pMixStruct->Info.szName, processMethod); ClearVSTEvents(); - SetEvent(processCalled); +// SetEvent(processCalled); } //mix outputs of multi-output VSTs: Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2007-07-11 20:36:02 UTC (rev 191) @@ -753,17 +753,21 @@ m_nVol = combo->GetItemData(combo->GetCurSel()); } // Effect - m_nParam = 0; - if (((combo = (CComboBox *)GetDlgItem(IDC_COMBO5)) != NULL) && (m_pModDoc)) - { - int n = -1; - m_nCommand = m_pModDoc->GetEffectFromIndex(combo->GetItemData(combo->GetCurSel()), n); - if (n >= 0) m_nParam = n; + int effectIndex = -1; + if (((combo = (CComboBox *)GetDlgItem(IDC_COMBO5)) != NULL) && (m_pModDoc)) { + int n = -1; // unused parameter adjustment + effectIndex = combo->GetItemData(combo->GetCurSel()); + m_nCommand = m_pModDoc->GetEffectFromIndex(effectIndex, n); } // Param - if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO6)) != NULL) - { - m_nParam |= combo->GetItemData(combo->GetCurSel()); + m_nParam = 0; + if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO6)) != NULL) { + m_nParam = combo->GetItemData(combo->GetCurSel()); + + // Apply parameter value mask if required (e.g. SDx has mask D0). + if (effectIndex > -1) { + m_nParam |= m_pModDoc->GetEffectMaskFromIndex(effectIndex); + } } // Min/Max channels if (!m_bReplace) Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2007-07-11 20:36:02 UTC (rev 191) @@ -257,6 +257,7 @@ }; + //======================================= class CEditCommand: public CPropertySheet //======================================= Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/mptrack.rc 2007-07-11 20:36:02 UTC (rev 191) @@ -1133,10 +1133,10 @@ CONTROL "",IDC_TABCTRL1,"SysTabControl32",0x0,0,0,412,14 END -IDD_EDIT_FIND DIALOG 0, 0, 182, 145 +IDD_EDIT_FIND DIALOGEX 0, 0, 182, 145 STYLE DS_SETFONT | WS_CHILD | WS_CAPTION CAPTION "Find" -FONT 8, "MS Sans Serif" +FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN GROUPBOX "Search for:",IDC_STATIC,4,4,174,107 CONTROL "Note",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, @@ -1161,8 +1161,8 @@ WS_VSCROLL | WS_TABSTOP CONTROL "Effect Data",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,78,52,10 - COMBOBOX IDC_COMBO6,117,92,48,68,CBS_DROPDOWNLIST | WS_VSCROLL | - WS_TABSTOP + COMBOBOX IDC_COMBO6,117,92,48,68,CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP CONTROL "Find in current pattern",IDC_RADIO1,"Button", BS_AUTORADIOBUTTON,6,117,88,10 CONTROL "Find in the whole song",IDC_RADIO2,"Button", @@ -1264,7 +1264,6 @@ CAPTION "Effect" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - LTEXT "Value:",IDC_TEXT1,103,3,115,8 COMBOBOX IDC_COMBO1,0,15,102,83,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP CONTROL "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH | @@ -1276,6 +1275,7 @@ CONTROL "",IDC_SLIDER2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | NOT WS_VISIBLE | WS_TABSTOP,134,0,43,12 LTEXT "Effect Type:",IDC_STATIC,54,1,19,8,NOT WS_VISIBLE + LTEXT "Value:",IDC_TEXT1,103,3,23,8 END IDD_SAMPLE_AMPLIFY DIALOGEX 0, 0, 175, 66 Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2007-06-17 18:42:09 UTC (rev 190) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2007-07-11 20:36:02 UTC (rev 191) @@ -51,6 +51,7 @@ LinkIncremental="2" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\xsoundlib\Debug" + DelayLoadDLLs="winhttp.dll" GenerateDebugInformation="TRUE" AssemblyDebug="1" ProgramDatabaseFile=".\Debug/mptrack.pdb" @@ -95,7 +96,9 @@ <Tool Name="VCCLCompilerTool" AdditionalOptions="/EHsc" - InlineFunctionExpansion="1" + Optimization="3" + GlobalOptimizations="TRUE" + InlineFunctionExpansion="2" OptimizeForWindowsApplication="TRUE" AdditionalIncludeDirectories="..\unlha,..\unzip,..\unrar,..\soundlib,..\include,..\xsoundlib" PreprocessorDefinitions="NDEBUG,WIN32,_WINDOWS,ENABLE_MMX,ENABLE_EQ,MODPLUG_TRACKER,NO_PACKING,HAVE_DOT_NET,ENABLE_AMD,ENABLE_SSE,ENABLE_AMDNOW" @@ -868,9 +871,6 @@ RelativePath=".\res\moddoc.ico"> </File> <File - RelativePath=".\res\modplthingmorecontrast.bmp"> - </File> - <File RelativePath=".\res\MPTRACK.bmp"> </File> <File @@ -895,9 +895,6 @@ RelativePath=".\Res\smptoolb.bmp"> </File> <File - RelativePath=".\Res\splash.bmp"> - </File> - <File RelativePath=".\res\splashno.bmp"> </File> <File @@ -992,6 +989,9 @@ RelativePath=".\mod2wave.h"> </File> <File + RelativePath="..\soundlib\modcommand.h"> + </File> + <File RelativePath=".\moddoc.h"> </File> <File Modified: trunk/OpenMPT/mptrack/res/view_pat.bmp =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Rel...@us...> - 2007-11-17 18:31:18
|
Revision: 193 http://modplug.svn.sourceforge.net/modplug/?rev=193&view=rev Author: Relabsoluness Date: 2007-11-17 10:31:14 -0800 (Sat, 17 Nov 2007) Log Message: ----------- Project file update Modified Paths: -------------- trunk/OpenMPT/mptrack/mptrack.vcproj Property Changed: ---------------- trunk/OpenMPT/mptrack/ Property changes on: trunk/OpenMPT/mptrack ___________________________________________________________________ Name: svn:ignore - *.sln *.vcproj Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2007-11-17 17:59:58 UTC (rev 192) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2007-11-17 18:31:14 UTC (rev 193) @@ -499,6 +499,9 @@ RelativePath="..\soundlib\Load_mod.cpp"> </File> <File + RelativePath="..\soundlib\load_mptm.cpp"> + </File> + <File RelativePath="..\Soundlib\load_mt2.cpp"> </File> <File @@ -709,6 +712,9 @@ RelativePath="..\soundlib\tuning.cpp"> </File> <File + RelativePath="..\soundlib\tuningbase.cpp"> + </File> + <File RelativePath="..\soundlib\tuningCollection.cpp"> </File> <File @@ -1067,7 +1073,7 @@ RelativePath="..\soundlib\tuning.h"> </File> <File - RelativePath="..\soundlib\tuning_template.h"> + RelativePath="..\soundlib\tuningbase.h"> </File> <File RelativePath="..\soundlib\tuningcollection.h"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-02-23 12:51:26
|
Revision: 203 http://modplug.svn.sourceforge.net/modplug/?rev=203&view=rev Author: relabsoluness Date: 2008-02-23 04:51:23 -0800 (Sat, 23 Feb 2008) Log Message: ----------- Last commit missed some files: a new try. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/OrderToPatternTable.cpp trunk/OpenMPT/mptrack/OrderToPatternTable.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/misc_util.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -628,25 +628,22 @@ BOOL CCtrlGeneral::GetToolTipText(UINT uId, LPSTR pszText) { //---------------------------------------------------------- + const char moreRecentMixModeNote[] = "Use a more recent mixmode to see dB offsets."; if ((pszText) && (uId)) { - if (!m_pSndFile->m_pConfig->getDisplayDBValues()) { - wsprintf(pszText, "Use a more recent mixmode to see dB offsets."); - return TRUE; - } - + const bool displayDBValues = m_pSndFile->m_pConfig->getDisplayDBValues(); switch(uId) { case IDC_SLIDER_SAMPLEPREAMP: - setAsDecibels(pszText, m_pSndFile->m_nSamplePreAmp, m_pSndFile->m_pConfig->getNormalSamplePreAmp()); + (displayDBValues) ? setAsDecibels(pszText, m_pSndFile->m_nSamplePreAmp, m_pSndFile->m_pConfig->getNormalSamplePreAmp()) : wsprintf(pszText, moreRecentMixModeNote); return TRUE; break; case IDC_SLIDER_VSTIVOL: - setAsDecibels(pszText, m_pSndFile->m_nVSTiVolume, m_pSndFile->m_pConfig->getNormalVSTiVol()); + (displayDBValues) ? setAsDecibels(pszText, m_pSndFile->m_nVSTiVolume, m_pSndFile->m_pConfig->getNormalVSTiVol()) : wsprintf(pszText, moreRecentMixModeNote); return TRUE; break; case IDC_SLIDER_GLOBALVOL: - setAsDecibels(pszText, m_pSndFile->m_nGlobalVolume, m_pSndFile->m_pConfig->getNormalGlobalVol()); + (displayDBValues) ? setAsDecibels(pszText, m_pSndFile->m_nGlobalVolume, m_pSndFile->m_pConfig->getNormalGlobalVol()) : wsprintf(pszText, moreRecentMixModeNote); return TRUE; break; } Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -840,7 +840,6 @@ BuildTuningComboBox(); CheckDlgButton(IDC_CHECK_PITCHTEMPOLOCK, MF_UNCHECKED); - OnBnClickedCheckPitchtempolock(); m_EditPitchTempoLock.SetLimitText(4); return FALSE; Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -401,6 +401,9 @@ m_nBitsPerSample = GetPrivateProfileDWord("Sound Settings", "BitsPerSample", 16, iniFile); m_nChannels = GetPrivateProfileDWord("Sound Settings", "ChannelMode", 2, iniFile); m_nBufferLength = GetPrivateProfileDWord("Sound Settings", "BufferLength", 75, iniFile); + if(m_nBufferLength < SNDDEV_MINBUFFERLEN) m_nBufferLength = SNDDEV_MINBUFFERLEN; + if(m_nBufferLength > SNDDEV_MAXBUFFERLEN) m_nBufferLength = SNDDEV_MAXBUFFERLEN; + m_nPreAmp = GetPrivateProfileDWord("Sound Settings", "PreAmp", 128, iniFile); CSoundFile::m_nStereoSeparation = GetPrivateProfileLong("Sound Settings", "StereoSeparation", 128, iniFile); CSoundFile::m_nMaxMixChannels = GetPrivateProfileLong("Sound Settings", "MixChannels", MAX_CHANNELS, iniFile); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -1272,7 +1272,10 @@ // -> CODE#0020 // -> DESC="rearrange sample list" void CModDoc::RearrangeSampleList(void) +//------------------------------------- { + MessageBox(NULL, "Rearrange samplelist didn't work properly and has been disabled.", NULL, MB_ICONINFORMATION); + /* BEGIN_CRITICAL(); UINT i,j,k,n,l,c; @@ -1314,6 +1317,7 @@ SetModified(); UpdateAllViews(NULL, HINT_SMPNAMES); + */ } // -! NEW_FEATURE#0020 @@ -1557,7 +1561,8 @@ if ((c == 0x0D) && (len > 3)) { //if ((p[len-3] == 'I') || (p[len-4] == 'S')) bS3M = TRUE; - if ((p[len-3] == 'I') || (p[len-4] == 'S') || (p[len-4] == 'M')) bS3M = TRUE; + // IT? S3M? MPT? + if ((p[len-3] == 'I') || (p[len-4] == 'S') || (p[len-3] == 'P')) bS3M = TRUE; break; } } @@ -1715,7 +1720,7 @@ CHAR s[1024]; INSTRUMENTHEADER *penv; DWORD dwMemSize; - UINT susBegin, susEnd, loopBegin, loopEnd, bSus, bLoop, bCarry, nPoints; + UINT susBegin, susEnd, loopBegin, loopEnd, bSus, bLoop, bCarry, nPoints, releaseNode; WORD *pPoints; BYTE *pValues; @@ -1735,6 +1740,7 @@ susEnd = penv->nPanSustainEnd; loopBegin = penv->nPanLoopStart; loopEnd = penv->nPanLoopEnd; + releaseNode = penv->nPanEnvReleaseNode; break; case ENV_PITCH: @@ -1748,6 +1754,7 @@ susEnd = penv->nPitchSustainEnd; loopBegin = penv->nPitchLoopStart; loopEnd = penv->nPitchLoopEnd; + releaseNode = penv->nPitchEnvReleaseNode; break; default: @@ -1761,6 +1768,7 @@ susEnd = penv->nVolSustainEnd; loopBegin = penv->nVolLoopStart; loopEnd = penv->nVolLoopEnd; + releaseNode = penv->nVolEnvReleaseNode; break; } strcpy(s, pszEnvHdr); @@ -1770,6 +1778,11 @@ if (strlen(s) >= sizeof(s)-32) break; wsprintf(s+strlen(s), "%d,%d\x0D\x0A", pPoints[i], pValues[i]); } + + //Writing release node + if(strlen(s) < sizeof(s) - 32) + wsprintf(s+strlen(s), "%u\x0D\x0A", releaseNode); + dwMemSize = strlen(s)+1; if ((pMainFrm->OpenClipboard()) && ((hCpy = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, dwMemSize))!=NULL)) { @@ -1802,7 +1815,7 @@ if ((hCpy) && ((p = (LPSTR)GlobalLock(hCpy)) != NULL)) { INSTRUMENTHEADER *penv = m_SndFile.Headers[nIns]; - UINT susBegin=0, susEnd=0, loopBegin=0, loopEnd=0, bSus=0, bLoop=0, bCarry=0, nPoints=0; + UINT susBegin=0, susEnd=0, loopBegin=0, loopEnd=0, bSus=0, bLoop=0, bCarry=0, nPoints=0, releaseNode = ENV_RELEASE_NODE_UNSET; DWORD dwMemSize = GlobalSize(hCpy), dwPos = strlen(pszEnvHdr); if ((dwMemSize > dwPos) && (!strnicmp(p, pszEnvHdr, dwPos-2))) { @@ -1845,6 +1858,7 @@ penv->nPanSustainEnd = susEnd; penv->nPanLoopStart = loopBegin; penv->nPanLoopEnd = loopEnd; + penv->nPanEnvReleaseNode = releaseNode; break; case ENV_PITCH: @@ -1859,6 +1873,7 @@ penv->nPitchSustainEnd = susEnd; penv->nPitchLoopStart = loopBegin; penv->nPitchLoopEnd = loopEnd; + penv->nPitchEnvReleaseNode = releaseNode; break; default: @@ -1873,6 +1888,7 @@ penv->nVolSustainEnd = susEnd; penv->nVolLoopStart = loopBegin; penv->nVolLoopEnd = loopEnd; + penv->nVolEnvReleaseNode = releaseNode; break; } int oldn = 0; @@ -1892,6 +1908,27 @@ while ((dwPos < dwMemSize) && (p[dwPos] != 0x0D)) dwPos++; if (dwPos >= dwMemSize) break; } + + //Read releasenode information. + if(dwPos < dwMemSize) + { + BYTE r = static_cast<BYTE>(atoi(p + dwPos)); + if(r == 0 || r >= nPoints) r = ENV_RELEASE_NODE_UNSET; + switch(nEnv) + { + case ENV_PANNING: + penv->nPanEnvReleaseNode = r; + break; + + case ENV_PITCH: + penv->nPitchEnvReleaseNode = r; + break; + + default: + penv->nVolEnvReleaseNode = r; + break; + } + } } GlobalUnlock(hCpy); CloseClipboard(); Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -610,7 +610,7 @@ {"Always center active row", "Turn on this option to have the active row always centered in the pattern editor (requires \"Always center active row\")."}, {"Use large font for comments", "With this option enabled, the song message editor will use a larger font."}, {"Display rows in hex", "With this option enabled, row numbers and sequence numbers will be displayed in hexadecimal."}, - {"Cursor wrap in pattern editor", "When this option is active, going past the end of a pattern will move the cursor to the beginning."}, + {"Cursor wrap in pattern editor", "When this option is active, going past the end of a pattern row or channel will move the cursor to the beginning. When \"Continuous scroll\"-option is enabled, row wrap is disabled."}, {"Create backup files (*.bak)", "When this option is active, saving a file will create a backup copy of the original."}, {"Drag and Drop Editing", "Enable moving a selection in the pattern editor (copying if pressing shift while dragging)\n"}, {"Flat Buttons", "Use flat buttons in toolbars"}, Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -329,7 +329,8 @@ CHAR s[32]; m_CbnBufferLength.GetWindowText(s, sizeof(s)); m_nBufferLength = atoi(s); - if ((m_nBufferLength < 10) || (m_nBufferLength > 200)) m_nBufferLength = 100; + //if ((m_nBufferLength < 10) || (m_nBufferLength > 200)) m_nBufferLength = 100; + if ((m_nBufferLength < SNDDEV_MINBUFFERLEN) || (m_nBufferLength > SNDDEV_MAXBUFFERLEN)) m_nBufferLength = 100; } // Soft Panning if (m_dwSoundSetup & SOUNDSETUP_SOFTPANNING) @@ -1054,6 +1055,9 @@ ON_COMMAND(IDC_CHECK2, OnSettingsChanged) ON_COMMAND(IDC_CHECK3, OnSettingsChanged) ON_COMMAND(IDC_CHECK4, OnSettingsChanged) + ON_COMMAND(IDC_MIDI_TO_PLUGIN, OnSettingsChanged) + ON_COMMAND(IDC_MIDIVOL_TO_NOTEVOL, OnSettingsChanged) + ON_COMMAND(IDC_MIDIPLAYCONTROL, OnSettingsChanged) END_MESSAGE_MAP() Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -2856,13 +2856,19 @@ m_pPluginManager = new CVstPluginManager; if (!m_pPluginManager) return FALSE; nPlugins = GetPrivateProfileInt("VST Plugins", "NumPlugins", 0, m_szConfigFileName); + CString nonFoundPlugs; for (LONG iPlug=0; iPlug<nPlugins; iPlug++) { s[0] = 0; wsprintf(tmp, "Plugin%d", iPlug); GetPrivateProfileString("VST Plugins", tmp, "", s, sizeof(s), m_szConfigFileName); - if (s[0]) m_pPluginManager->AddPlugin(s); + if (s[0]) m_pPluginManager->AddPlugin(s, TRUE, true, &nonFoundPlugs); } + if(nonFoundPlugs.GetLength() > 0) + { + nonFoundPlugs.Insert(0, "Problems were encountered with plugins:\n"); + MessageBox(NULL, nonFoundPlugs, "", MB_OK); + } return FALSE; } Modified: trunk/OpenMPT/mptrack/OrderToPatternTable.cpp =================================================================== --- trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/OrderToPatternTable.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -108,6 +108,27 @@ } +ORDERINDEX COrderToPatternTable::GetNextOrderIgnoringSkips(const ORDERINDEX start) const +//------------------------------------------------------------------------------------- +{ + const ORDERINDEX count = GetCount(); + if(count == 0) return 0; + ORDERINDEX next = min(count-1, start+1); + while(next+1 < count && (*this)[next] == GetIgnoreIndex()) next++; + return next; +} + +ORDERINDEX COrderToPatternTable::GetPreviousOrderIgnoringSkips(const ORDERINDEX start) const +//------------------------------------------------------------------------------------- +{ + const ORDERINDEX count = GetCount(); + if(start == 0 || count == 0) return 0; + ORDERINDEX prev = min(start-1, count-1); + while(prev > 0 && (*this)[prev] == GetIgnoreIndex()) prev--; + return prev; +} + + PATTERNINDEX COrderToPatternTable::GetInvalidPatIndex(const MODTYPE type) {return type == MOD_TYPE_MPT ? 65535 : 0xFF;} PATTERNINDEX COrderToPatternTable::GetIgnoreIndex(const MODTYPE type) {return type == MOD_TYPE_MPT ? 65534 : 0xFE;} Modified: trunk/OpenMPT/mptrack/OrderToPatternTable.h =================================================================== --- trunk/OpenMPT/mptrack/OrderToPatternTable.h 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/OrderToPatternTable.h 2008-02-23 12:51:23 UTC (rev 203) @@ -8,6 +8,8 @@ class CSoundFile; class COrderToPatternTable; +#pragma warning(disable:4244) //conversion from 'type1' to 'type2', possible loss of data + class COrderSerialization : public srlztn::ABCSerializationStreamer //========================================================= { @@ -32,7 +34,7 @@ size_t WriteToByteArray(BYTE* dest, const UINT numOfBytes, const UINT destSize); - ORDERINDEX GetCount() const {return static_cast<ORDERINDEX>(size());} + ORDERINDEX GetCount() const {return size();} //Deprecated function used for MPTm's created in 1.17.02.46 - 1.17.02.48. DWORD Unserialize(const BYTE* const src, const DWORD memLength); @@ -48,13 +50,19 @@ PATTERNINDEX GetIgnoreIndex() const; //To correspond 0xFE static PATTERNINDEX GetIgnoreIndex(const MODTYPE type); + //Returns the previous/next order ignoring skip indeces(+++). + //If no previous/next order exists, return first/last order, and zero + //when orderlist is empty. + ORDERINDEX GetNextOrderIgnoringSkips(const ORDERINDEX start) const; + ORDERINDEX GetPreviousOrderIgnoringSkips(const ORDERINDEX start) const; + COrderSerialization* NewReadWriteObject() {return new COrderSerialization(*this);} private: const CSoundFile& m_rSndFile; }; +#pragma warning(default:4244) - #endif Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -257,11 +257,13 @@ UINT nCurOrder = SendCtrlMessage(CTRLMSG_GETCURRENTORDER); if ((nCurOrder > 0) && (nCurOrder < pSndFile->Order.size()) && (m_nPattern == pSndFile->Order[nCurOrder])) { - UINT nPrevPat = pSndFile->Order[nCurOrder-1]; + const ORDERINDEX prevOrd = pSndFile->Order.GetPreviousOrderIgnoringSkips(nCurOrder); + const PATTERNINDEX nPrevPat = pSndFile->Order[prevOrd]; if ((nPrevPat < pSndFile->Patterns.Size()) && (pSndFile->PatternSize[nPrevPat])) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nCurOrder-1); - if (SetCurrentPattern(nPrevPat)) return SetCurrentRow(pSndFile->PatternSize[nPrevPat]-1); + SendCtrlMessage(CTRLMSG_SETCURRENTORDER, prevOrd); + if (SetCurrentPattern(nPrevPat)) + return SetCurrentRow(pSndFile->PatternSize[nPrevPat] + (int)row); } } row = 0; @@ -283,11 +285,13 @@ UINT nCurOrder = SendCtrlMessage(CTRLMSG_GETCURRENTORDER); if ((nCurOrder+1 < pSndFile->Order.size()) && (m_nPattern == pSndFile->Order[nCurOrder])) { - UINT nNextPat = pSndFile->Order[nCurOrder+1]; - if ((nNextPat < pSndFile->Patterns.Size()) && (pSndFile->PatternSize[nNextPat])) + const ORDERINDEX nextOrder = pSndFile->Order.GetNextOrderIgnoringSkips(nCurOrder); + const PATTERNINDEX nextPat = pSndFile->Order[nextOrder]; + if ((nextPat < pSndFile->Patterns.Size()) && (pSndFile->PatternSize[nextPat])) { - SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nCurOrder+1); - if (SetCurrentPattern(nNextPat)) return SetCurrentRow(0); + SendCtrlMessage(CTRLMSG_SETCURRENTORDER, nextOrder); + if (SetCurrentPattern(nextPat)) + return SetCurrentRow(row - pSndFile->PatternSize[m_nPattern]); } } row = pSndFile->PatternSize[m_nPattern]-1; @@ -3951,7 +3955,8 @@ // -- Work out where to put the new note MODCOMMAND* p = pSndFile->Patterns[m_nPattern].GetpModCommand(nRow, nChn); - MODCOMMAND oldcmd = *p; //take backup copy of the command we're about to overwrite + //take backup copy of the command we're about to overwrite + MODCOMMAND oldcmd = *p; // -- write note and instrument data isSplit = HandleSplit(p, note); @@ -4369,7 +4374,7 @@ if (m_nSplitInstrument) p->instr = m_nSplitInstrument; else - p->instr = GetCurrentInstrument(); + if(GetCurrentInstrument()) p->instr = GetCurrentInstrument(); if (m_bOctaveLink) note += 12*(m_nOctaveModifier-9); if (note>120 && note<254) note=120; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2008-02-23 12:51:23 UTC (rev 203) @@ -158,9 +158,19 @@ // ID100000ID200000.Flags = Plugin Flags (for now, just isInstrument). -PVSTPLUGINLIB CVstPluginManager::AddPlugin(LPCSTR pszDllPath, BOOL bCache) -//------------------------------------------------------------------------ + +PVSTPLUGINLIB CVstPluginManager::AddPlugin(LPCSTR pszDllPath, BOOL bCache, const bool checkFileExistence, CString* const errStr) +//----------------------------------------------------------------------------------------------------------- { + if(checkFileExistence && !DoesFileExist(pszDllPath)) + { + if(errStr) + { + *errStr += "\nUnable to find "; + *errStr += pszDllPath; + } + } + PVSTPLUGINLIB pDup = m_pVstHead; while (pDup) { @@ -1569,16 +1579,19 @@ m_nInputs = m_pEffect->numInputs; m_nOutputs = m_pEffect->numOutputs; - m_pInputs = (float **)new char[m_nInputs*sizeof(float *)]; - m_pOutputs = (float **)new char[m_nOutputs*sizeof(float *)]; - m_pTempBuffer = (float **)new char[m_nOutputs*sizeof(float *)]; //rewbs.dryRatio + + //input pointer array size must be >=2 for now - the input buffer assignment might write to non allocated mem. otherwise + m_pInputs = (m_nInputs >= 2) ? new (float *[m_nInputs]) : new (float*[2]); + m_pInputs[0] = m_MixState.pOutBufferL; + m_pInputs[1] = m_MixState.pOutBufferR; + m_pOutputs = new (float *[m_nOutputs]); + m_pTempBuffer = new (float *[m_nOutputs]); //rewbs.dryRatio + for (UINT iOut=0; iOut<m_nOutputs; iOut++) { m_pTempBuffer[iOut]=(float *)((((DWORD)&m_FloatBuffer[MIXBUFFERSIZE*(2+iOut)])+7)&~7); //rewbs.dryRatio } - m_pInputs[0] = m_MixState.pOutBufferL; - m_pInputs[1] = m_MixState.pOutBufferR; #ifdef VST_LOG Log("%s: vst ver %d.0, flags=%04X, %d programs, %d parameters\n", @@ -1642,33 +1655,19 @@ FreeLibrary(m_hLibrary); m_hLibrary = NULL; } - if (m_pTempBuffer) //rewbs.dryRatio - { - delete[] m_pTempBuffer; - m_pTempBuffer = NULL; - } - //Deleting inputs causes crashes on some plugs, not deleting causes crashes in other cases. :) - //TODO: figure out what to do here.. :) - if (m_nInputs && m_pInputs) //if m_nInputs == 0, then m_pInputs will have been - { //initilised at 0 size, so we'll crash on delete. - //Even though the size is zero, - //new returns a non-NULL address and absence - //of delete can make debugger report - //of a memory leak of 0 bytes long. - delete[] m_pInputs; - m_pInputs = NULL; - } - if (m_pOutputs) - { - delete[] m_pOutputs; - m_pOutputs = NULL; - } - if (m_pEvList) - { - delete[] (char *)m_pEvList; - m_pEvList = NULL; - } + delete[] m_pTempBuffer; + m_pTempBuffer = NULL; + + delete[] m_pInputs; + m_pInputs = NULL; + + delete[] m_pOutputs; + m_pOutputs = NULL; + + delete[] (char *)m_pEvList; + m_pEvList = NULL; + CloseHandle(processCalled); } @@ -4103,3 +4102,4 @@ return CString(); } + Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/Vstplug.h 2008-02-23 12:51:23 UTC (rev 203) @@ -206,7 +206,7 @@ public: PVSTPLUGINLIB GetFirstPlugin() const { return m_pVstHead; } BOOL IsValidPlugin(const VSTPLUGINLIB *pLib); - PVSTPLUGINLIB AddPlugin(LPCSTR pszDllPath, BOOL bCache=TRUE); + PVSTPLUGINLIB AddPlugin(LPCSTR pszDllPath, BOOL bCache=TRUE, const bool checkFileExistence = false, CString* const errStr = 0); BOOL RemovePlugin(PVSTPLUGINLIB); BOOL CreateMixPlugin(PSNDMIXPLUGIN, CModDoc*); VOID OnIdle(); Modified: trunk/OpenMPT/mptrack/misc_util.h =================================================================== --- trunk/OpenMPT/mptrack/misc_util.h 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/misc_util.h 2008-02-23 12:51:23 UTC (rev 203) @@ -35,5 +35,8 @@ */ } +//Return true if file with given path is found. +bool DoesFileExist(const char* const filepath); + #endif Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-02-23 12:46:41 UTC (rev 202) +++ trunk/OpenMPT/mptrack/mptrack.rc 2008-02-23 12:51:23 UTC (rev 203) @@ -145,7 +145,6 @@ MENUITEM "Cleanup Pa&tterns", ID_CLEANUP_PATTERNS MENUITEM "Cleanup S&ong", ID_CLEANUP_SONG MENUITEM "Remove &All Instruments", ID_INSTRUMENTS_REMOVEALL - MENUITEM "Rearrange Samples", ID_REARRANGE_SAMPLES MENUITEM "Cleanup &Plugins", ID_CLEANUP_PLUGS END MENUITEM SEPARATOR @@ -491,7 +490,7 @@ CONTROL "Spin1",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,214,71, 11,14 - CONTROL "Send midi to active instrument plugin", + CONTROL "Pass MIDI to active instrument plugin (experimental)", IDC_MIDI_TO_PLUGIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 11,148,222,8 CONTROL "Combine midi volume to note velocity", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-03-29 16:08:13
|
Revision: 208 http://modplug.svn.sourceforge.net/modplug/?rev=208&view=rev Author: relabsoluness Date: 2008-03-29 09:08:03 -0700 (Sat, 29 Mar 2008) Log Message: ----------- 1.17.02.51 . Fix to crash when loading plug with long(>32) param name. . Internal: Fix to "_WIN32_WINNT settings conflicts with _WIN32_IE setting"-error when compiling with VS2008 ? Minor internal changes to get rid of some compiler warnings Modified Paths: -------------- trunk/OpenMPT/mptrack/Childfrm.cpp trunk/OpenMPT/mptrack/Ctrl_com.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/OpenGLEditor.cpp trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp trunk/OpenMPT/mptrack/Stdafx.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/bin/mptrack.exe trunk/OpenMPT/mptrack/fxp.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/mptrack/view_graph.cpp Modified: trunk/OpenMPT/mptrack/Childfrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/Childfrm.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Childfrm.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -150,7 +150,6 @@ { if (m_bInitialActivation && m_ViewPatterns.nPattern==0) { - CSoundFile *pSndFile = pModDoc->GetSoundFile(); m_ViewPatterns.nPattern=pModDoc->GetSoundFile()->Order[0]; m_ViewPatterns.nOrder=0; //just in case (should already be 0) m_ViewPatterns.nRow=0; //just in case Modified: trunk/OpenMPT/mptrack/Ctrl_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_com.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Ctrl_com.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -208,7 +208,7 @@ } //rewbs.customKeys -LRESULT CCtrlComments::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam) +LRESULT CCtrlComments::OnCustomKeyMsg(WPARAM wParam, LPARAM /*lParam*/) { if (wParam == kcNull) return NULL; Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -485,7 +485,7 @@ //Toggle loop state setLoop = !(m_pSndFile->m_dwSongFlags&SONG_PATTERNLOOP); } else { - setLoop = static_cast<bool>(lParam); + setLoop = (lParam != 0); } if (setLoop) { @@ -657,6 +657,7 @@ // -> CODE#0015 // -> DESC="channels management dlg" void CCtrlPatterns::OnChannelManager() +//------------------------------------ { if(CChannelManagerDlg::sharedInstance()){ if(CChannelManagerDlg::sharedInstance()->IsDisplayed()) @@ -758,24 +759,28 @@ } } void CCtrlPatterns::OnSplitNoteChanged() +//-------------------------------------- { m_nSplitNote = m_CbnSplitNote.GetCurSel(); SendViewMessage(VIEWMSG_SETSPLITNOTE, m_nSplitNote); SwitchToView(); } void CCtrlPatterns::OnOctaveModifierChanged() +//------------------------------------------- { m_nOctaveModifier = m_CbnOctaveModifier.GetCurSel(); SendViewMessage(VIEWMSG_SETOCTAVEMODIFIER, m_nOctaveModifier); SwitchToView(); } void CCtrlPatterns::OnOctaveLink() +//-------------------------------- { m_nOctaveLink = IsDlgButtonChecked(IDC_PATTERN_OCTAVELINK); SendViewMessage(VIEWMSG_SETOCTAVELINK, m_nOctaveLink); SwitchToView(); } void CCtrlPatterns::OnSplitVolumeChanged() +//---------------------------------------- { m_nSplitVolume = m_CbnSplitVolume.GetCurSel(); SendViewMessage(VIEWMSG_SETSPLITVOLUME, m_nSplitVolume); @@ -1167,10 +1172,12 @@ //rewbs.introVST void CCtrlPatterns::TogglePluginEditor() +//-------------------------------------- { TogglePluginEditor(false); } + void CCtrlPatterns::TogglePluginEditor(bool split) //---------------------------------------- { @@ -1195,6 +1202,7 @@ } bool CCtrlPatterns::HasValidPlug(UINT instr) +//------------------------------------------ { if ((instr) && (instr<MAX_INSTRUMENTS) && (m_pSndFile) && m_pSndFile->Headers[instr]) { Modified: trunk/OpenMPT/mptrack/OpenGLEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/OpenGLEditor.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/OpenGLEditor.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -68,12 +68,12 @@ SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Symbol in Client-Rechteck zentrieren - int cxIcon = GetSystemMetrics(SM_CXICON); - int cyIcon = GetSystemMetrics(SM_CYICON); + //int cxIcon = GetSystemMetrics(SM_CXICON); + //int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); - int x = (rect.Width() - cxIcon + 1) / 2; - int y = (rect.Height() - cyIcon + 1) / 2; + //int x = (rect.Width() - cxIcon + 1) / 2; + //int y = (rect.Height() - cyIcon + 1) / 2; // Symbol zeichnen //dc.DrawIcon(x, y, m_hIcon); Modified: trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/PatternRandomizerGUI.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -44,7 +44,7 @@ CRect rect; GetDlgItem(IDC_RANDOM_PLACEHOLDER)->GetWindowRect(rect); int hOff = 8, vOff = 86; - int width = 100, height = 200; + //int width = 100, height = 200; m_RandomizerNote.Create(CPatternRandomizerGUINote::IDD, (CWnd*)this); m_RandomizerNote.MoveWindow(hOff, vOff, rect.Width(), rect.Height()); @@ -96,7 +96,7 @@ } -void CPatternRandomizerGUI::OnRandomiserTabChange(NMHDR *pNMHDR, LRESULT *pResult) +void CPatternRandomizerGUI::OnRandomiserTabChange(NMHDR* /*pNMHDR*/, LRESULT *pResult) //-------------------------------------------------------------------------------- { int nActiveTab = m_RandomizerTabs.GetCurSel(); Modified: trunk/OpenMPT/mptrack/Stdafx.h =================================================================== --- trunk/OpenMPT/mptrack/Stdafx.h 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Stdafx.h 2008-03-29 16:08:03 UTC (rev 208) @@ -11,8 +11,13 @@ #endif // _MSC_VER >= 1000 #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers -#define WINVER 0x0401 +#if _MSC_VER >= 1500 + #define _WIN32_WINNT 0x0500 +#else + #define WINVER 0x0401 +#endif + // windows excludes #define NOMCX // mmreg excludes Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -476,7 +476,7 @@ // -> CODE#0002 // -> DESC="VST plugins presets" - CHAR s2[32]; + CHAR s2[128]; //UINT k = 0, nProg = min(pVstPlugin->GetNumPrograms(), 256); //Limit number of progs to 256 because of insane plugs like synth1 UINT k = 0, nProg = pVstPlugin->GetNumPrograms(); m_CbnPreset.SetRedraw(FALSE); Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -1971,11 +1971,11 @@ pszName[0] = 0; if ((m_pEffect) && (m_pEffect->numParams > 0) && (nIndex < (UINT)m_pEffect->numParams)) { - CHAR s[32]; + CHAR s[64]; //Increased to 64 bytes since 32 bytes doesn't seem to suffice for all plugs. s[0] = 0; Dispatch(effGetParamName, nIndex, 0, s, 0); - s[31] = 0; - lstrcpyn(pszName, s, cbSize); + s[min(sizeof(s)-1, cbSize-1)] = 0; + lstrcpyn(pszName, s, min(cbSize, sizeof(s))); } } @@ -3100,6 +3100,7 @@ //end rewbs.VSTcompliance BOOL CVstPlugin::isInstrument() // ericus 18/02/2005 +//----------------------------- { if(m_pEffect) return ((m_pEffect->flags & effFlagsIsSynth) || (!m_pEffect->numInputs)); // rewbs.dryRatio return FALSE; @@ -4114,10 +4115,9 @@ { if(pMixPlugin) { - char s[32]; - //To check: Is the cast safe? + char s[64]; ((CVstPlugin*)(pMixPlugin))->GetParamName(index, s, sizeof(s)); - s[31] = 0; + s[sizeof(s)-1] = 0; return CString(s); } else Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/Vstplug.h 2008-03-29 16:08:03 UTC (rev 208) @@ -75,7 +75,7 @@ float **m_pOutputs; int m_nEditorX, m_nEditorY; int m_MixBuffer[MIXBUFFERSIZE*2+2]; // Stereo interleaved - float m_FloatBuffer[MIXBUFFERSIZE*(2+32)+31]; // 2ch separated + up to 32 VSTi outputs... + float m_FloatBuffer[MIXBUFFERSIZE*(2+32)+34]; // 2ch separated + up to 32 VSTi outputs... VstMidiEvent m_ev_queue[VSTEVENT_QUEUE_LEN]; CModDoc* m_pModDoc; //rewbs.plugDocAware CSoundFile* m_pSndFile; //rewbs.plugDocAware Modified: trunk/OpenMPT/mptrack/bin/mptrack.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/fxp.cpp =================================================================== --- trunk/OpenMPT/mptrack/fxp.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/fxp.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -212,7 +212,7 @@ bool Cfxp::ReadLE(CFile &in, long &l) { - int size=sizeof(long); + UINT size=sizeof(long); if (in.Read(&l, size) < size) return false; @@ -223,7 +223,7 @@ bool Cfxp::ReadLE(CFile &in, float &f) { - int size=sizeof(float); + UINT size=sizeof(float); try { if (in.Read(&f, size) < size) @@ -245,7 +245,7 @@ bool Cfxp::ReadLE(CFile &in, char *c, UINT length) { - int size=sizeof(char)*length; + UINT size=sizeof(char)*length; return (in.Read(c, size) >= size); } Modified: trunk/OpenMPT/mptrack/view_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/view_com.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/view_com.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -570,9 +570,9 @@ LRESULT CViewComments::OnModViewMsg(WPARAM wParam, LPARAM lParam) //----------------------------------------------------------------- { - switch(wParam) - { - default: +// switch(wParam) +// { +// default: return CModScrollView::OnModViewMsg(wParam, lParam); - } +// } } \ No newline at end of file Modified: trunk/OpenMPT/mptrack/view_graph.cpp =================================================================== --- trunk/OpenMPT/mptrack/view_graph.cpp 2008-03-25 20:15:39 UTC (rev 207) +++ trunk/OpenMPT/mptrack/view_graph.cpp 2008-03-29 16:08:03 UTC (rev 208) @@ -56,7 +56,7 @@ } -void CViewGraph::OnUpdate(CView *pSender, LPARAM lHint, CObject *pHint) +void CViewGraph::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/) //--------------------------------------------------------------------- { } @@ -65,9 +65,9 @@ LRESULT CViewGraph::OnModViewMsg(WPARAM wParam, LPARAM lParam) //------------------------------------------------------------ { - switch(wParam) - { - default: +// switch(wParam) +// { +// default: return CModScrollView::OnModViewMsg(wParam, lParam); - } +// } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rel...@us...> - 2008-04-13 21:53:27
|
Revision: 210 http://modplug.svn.sourceforge.net/modplug/?rev=210&view=rev Author: relabsoluness Date: 2008-04-13 14:53:04 -0700 (Sun, 13 Apr 2008) Log Message: ----------- 1.17.02.52 . Shouldn't need winhttp anymore(at least now that updatecheck is disabled). Dependency caused problems in Win98. Modified Paths: -------------- trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/bin/mptrack.exe trunk/OpenMPT/mptrack/mptrack.vcproj Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2008-04-05 20:56:19 UTC (rev 209) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2008-04-13 21:53:04 UTC (rev 210) @@ -565,7 +565,6 @@ m_hBladeEnc = NULL; m_hLameEnc = NULL; m_hACMInst = NULL; - m_pRequestContext = NULL; m_hAlternateResourceHandle = NULL; m_szConfigFileName[0] = 0; for (UINT i=0; i<MAX_DLS_BANKS; i++) gpDLSBanks[i] = NULL; @@ -578,6 +577,10 @@ strcpy(&m_MidiCfg.szMidiGlb[MIDIOUT_PROGRAM*32], "Cc p"); strcpy(&m_MidiCfg.szMidiSFXExt[0], "F0F000z"); for (int iz=0; iz<16; iz++) wsprintf(&m_MidiCfg.szMidiZXXExt[iz*32], "F0F001%02X", iz*8); + + #ifdef UPDATECHECKENABLED + m_pRequestContext = NULL; + #endif } ///////////////////////////////////////////////////////////////////////////// @@ -823,6 +826,8 @@ return TRUE; } + +#ifdef UPDATECHECKENABLED void __stdcall CTrackApp::InternetRequestCallback( HINTERNET /*hInternet*/, DWORD_PTR userData, DWORD dwInternetStatus, LPVOID /*lpvStatusInformation*/, DWORD /*dwStatusInformationLength*/) //----------------------------------------------------------------------------------------------------- @@ -999,9 +1004,9 @@ } } +#endif - int CTrackApp::ExitInstance() //--------------------------- { @@ -1054,8 +1059,10 @@ UninitializeACM(); // Cleanup the internet request, in case it is still active. + #ifdef UPDATECHECKENABLED CleanupInternetRequest(m_pRequestContext); delete m_pRequestContext; + #endif return CWinApp::ExitInstance(); } Modified: trunk/OpenMPT/mptrack/Mptrack.h =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h 2008-04-05 20:56:19 UTC (rev 209) +++ trunk/OpenMPT/mptrack/Mptrack.h 2008-04-13 21:53:04 UTC (rev 210) @@ -15,9 +15,12 @@ #include "resource.h" // main symbols #include "sndfile.h" #include <windows.h> -#include <Specstrings.h> // In VC2003, '__in' was undefined in winhttp.h -#include <winhttp.h> +#ifdef UPDATECHECKENABLED + #include <Specstrings.h> // In VC2003, '__in' was undefined in winhttp.h + #include <winhttp.h> +#endif + class CModDoc; class CVstPluginManager; @@ -99,6 +102,7 @@ ///////////////////////////////////////////////////////////////////////////// // Internet connection context +#ifdef UPDATECHECKENABLED typedef struct REQUEST_CONTEXT { HINTERNET hSession; HINTERNET hConnection; @@ -106,6 +110,7 @@ LPSTR lpBuffer; // Buffer for storing read data LPSTR postData; } REQUEST_CONTEXT; +#endif ///////////////////////////////////////////////////////////////////////////// // CTrackApp: @@ -138,8 +143,11 @@ CHAR m_szConfigFileName[_MAX_PATH]; CHAR m_szPluginCacheFileName[_MAX_PATH]; CHAR m_szStringsFileName[_MAX_PATH]; + + #ifdef UPDATECHECKENABLED // Internet request context REQUEST_CONTEXT *m_pRequestContext; + #endif public: CTrackApp(); @@ -181,11 +189,14 @@ protected: VOID StartSplashScreen(); VOID StopSplashScreen(); - VOID UpdateCheck(); - static void __stdcall InternetRequestCallback( HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, - LPVOID lpvStatusInformation, DWORD dwStatusInformationLength); - static void CleanupInternetRequest(REQUEST_CONTEXT *pRequestContext); + #ifdef UPDATECHECKENABLED + VOID UpdateCheck(); + static void __stdcall InternetRequestCallback( HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, + LPVOID lpvStatusInformation, DWORD dwStatusInformationLength); + static void CleanupInternetRequest(REQUEST_CONTEXT *pRequestContext); + #endif + // Localized strings public: VOID ImportLocalizedStrings(); Modified: trunk/OpenMPT/mptrack/bin/mptrack.exe =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/mptrack.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack.vcproj 2008-04-05 20:56:19 UTC (rev 209) +++ trunk/OpenMPT/mptrack/mptrack.vcproj 2008-04-13 21:53:04 UTC (rev 210) @@ -48,13 +48,13 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="winmm.lib strmiids.lib dmoguids.lib xsoundlib.lib version.lib opengl32.lib glu32.lib Rpcrt4.lib winhttp.lib" + AdditionalDependencies="winmm.lib strmiids.lib dmoguids.lib xsoundlib.lib version.lib opengl32.lib glu32.lib Rpcrt4.lib" OutputFile=".\Debug/mptrack.exe" Version="5.0" LinkIncremental="2" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\xsoundlib\Debug" - DelayLoadDLLs="winhttp.dll" + DelayLoadDLLs="" GenerateDebugInformation="TRUE" AssemblyDebug="1" ProgramDatabaseFile=".\Debug/mptrack.pdb" @@ -124,7 +124,7 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="winmm.lib strmiids.lib dmoguids.lib xsoundlib.lib version.lib opengl32.lib glu32.lib Rpcrt4.lib winhttp.lib" + AdditionalDependencies="winmm.lib strmiids.lib dmoguids.lib xsoundlib.lib version.lib opengl32.lib glu32.lib Rpcrt4.lib" OutputFile=".\Bin/mptrack.exe" Version="5.0" LinkIncremental="1" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |