From: <sag...@us...> - 2012-07-14 22:16:07
|
Revision: 1327 http://modplug.svn.sourceforge.net/modplug/?rev=1327&view=rev Author: saga-games Date: 2012-07-14 22:15:55 +0000 (Sat, 14 Jul 2012) Log Message: ----------- [Ref] Introduced a new class, FlagSet, which makes working with flag sets easier. To use a flag set with this class, it has to be created with the FLAGSET macro. Modified Paths: -------------- trunk/OpenMPT/common/misc_util.cpp trunk/OpenMPT/mptrack/AutoSaver.cpp trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp trunk/OpenMPT/mptrack/Childfrm.cpp trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/EffectInfo.cpp trunk/OpenMPT/mptrack/InputHandler.cpp trunk/OpenMPT/mptrack/InputHandler.h trunk/OpenMPT/mptrack/MIDIMacroDialog.h trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/ModConvert.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/PatternClipboard.cpp trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_ins.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/fxp.cpp trunk/OpenMPT/mptrack/mod2midi.cpp trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters trunk/OpenMPT/mptrack/test/test.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/soundlib/Dlsbank.cpp trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/ITTools.cpp trunk/OpenMPT/soundlib/LOAD_AMF.CPP trunk/OpenMPT/soundlib/LOAD_DBM.CPP trunk/OpenMPT/soundlib/LOAD_DMF.CPP trunk/OpenMPT/soundlib/Load_669.cpp trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_far.cpp trunk/OpenMPT/soundlib/Load_gdm.cpp trunk/OpenMPT/soundlib/Load_imf.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_itp.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_mod.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Load_psm.cpp trunk/OpenMPT/soundlib/Load_s3m.cpp trunk/OpenMPT/soundlib/Load_stm.cpp trunk/OpenMPT/soundlib/Load_ult.cpp trunk/OpenMPT/soundlib/Load_wav.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/ModChannel.cpp trunk/OpenMPT/soundlib/ModChannel.h trunk/OpenMPT/soundlib/ModInstrument.cpp trunk/OpenMPT/soundlib/ModInstrument.h trunk/OpenMPT/soundlib/PlaybackEventer.cpp trunk/OpenMPT/soundlib/SampleFormats.cpp trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/Snd_flt.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/XMTools.cpp trunk/OpenMPT/soundlib/load_j2b.cpp trunk/OpenMPT/soundlib/mod_specifications.h trunk/OpenMPT/soundlib/modcommand.cpp trunk/OpenMPT/soundlib/modsmp_ctrl.cpp trunk/OpenMPT/soundlib/modsmp_ctrl.h trunk/OpenMPT/soundlib/patternContainer.cpp Added Paths: ----------- trunk/OpenMPT/common/FlagSet.h Added: trunk/OpenMPT/common/FlagSet.h =================================================================== --- trunk/OpenMPT/common/FlagSet.h (rev 0) +++ trunk/OpenMPT/common/FlagSet.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -0,0 +1,166 @@ +/* + * FlagSet.h + * --------- + * Purpose: A flexible and typesafe flag set class. + * Notes : Mostly taken from http://stackoverflow.com/questions/4226960/type-safer-bitflags-in-c + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#include <string> + +template <typename enum_t> +class FlagSet +{ +public: + // Default constructor (no flags set) + FlagSet() : flags(enum_t(0)) + { + + } + + // Value constructor + explicit FlagSet(enum_t value) : flags(value) + { + + } + + // Explicit conversion operator + operator enum_t() const + { + return flags; + } + + operator std::string() const + { + return to_string(); + } + + // Test if one or more flags are set. Returns true if at least one of the given flags is set. + bool operator[] (enum_t flag) const + { + return test(flag); + } + + // String representation of flag set + std::string to_string() const + { + std::string str(size(), '0'); + + for(size_t x = 0; x < size(); ++x) + { + str[size() - x - 1] = (flags & (1 << x) ? '1' : '0'); + } + + return str; + } + + // Set all flags. + FlagSet &set() + { + flags = ~enum_t(0); + return *this; + } + + // Set one or more flags. + FlagSet &set(enum_t flag) + { + flags = (flags | flag); + return *this; + } + + // Set or clear one or more flags. + FlagSet &set(enum_t flag, bool val) + { + flags = (val ? (flags | flag) : (flags & ~flag)); + return *this; + } + + // Clear or flags. + FlagSet &reset() + { + flags = enum_t(0); + return *this; + } + + // Clear one or more flags. + FlagSet &reset(enum_t flag) + { + flags &= ~flag; + return *this; + } + + // Toggle all flags. + FlagSet &flip() + { + flags = ~flags; + return *this; + } + + // Toggle one or more flags. + FlagSet &flip(enum_t flag) + { + flags ^= flag; + return *this; + } + + // Returns the size of the flag set in bits + size_t size() const + { + return sizeof(enum_t) * 8; + } + + // Test if one or more flags are set. Returns true if at least one of the given flags is set. + bool test(enum_t flag) const + { + return (flags & flag) > 0; + } + + // Test if any flag is set. + bool any() const + { + return flags > 0; + } + + // Test if no flags are set. + bool none() const + { + return flags == 0; + } + + FlagSet<enum_t> &operator = (const enum_t other) + { + flags = other; + return *this; + } + + FlagSet<enum_t> &operator &= (const enum_t other) + { + flags &= other; + return *this; + } + + FlagSet<enum_t> &operator |= (const enum_t other) + { + flags |= other; + return *this; + } + +private: + enum_t flags; + +}; + + +// Declaration of a typesafe flag set enum. +// Usage: FLAGSET(enumName) { foo = 1, bar = 2, ... } +#define FLAGSET(enum_t) \ + enum enum_t; \ + /* Declare typesafe logical operators for flag set */ \ + inline enum_t operator | (enum_t a, enum_t b) { return static_cast<enum_t>(+a | +b); } \ + inline enum_t operator & (enum_t a, enum_t b) { return static_cast<enum_t>(+a & +b); } \ + inline enum_t &operator &= (enum_t &a, enum_t b) { a = (a & b); return a; } \ + inline enum_t &operator |= (enum_t &a, enum_t b) { a = (a | b); return a; } \ + inline enum_t operator ~ (enum_t a) { return static_cast<enum_t>(~(+a)); } \ + enum enum_t Modified: trunk/OpenMPT/common/misc_util.cpp =================================================================== --- trunk/OpenMPT/common/misc_util.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/common/misc_util.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -47,7 +47,7 @@ { LPVOID lpMsgBuf; - FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, nErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), Modified: trunk/OpenMPT/mptrack/AutoSaver.cpp =================================================================== --- trunk/OpenMPT/mptrack/AutoSaver.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/AutoSaver.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -250,7 +250,7 @@ name.Append(".AutoSave."); //append backup tag name.Append(timeStamp); //append timestamp name.Append("."); //append extension - if((pModDoc->GetSoundFile()->m_dwSongFlags & SONG_ITPROJECT) != 0) + if(pModDoc->GetSoundFile()->m_SongFlags[SONG_ITPROJECT]) { name.Append("itp"); } else @@ -289,7 +289,7 @@ break; case MOD_TYPE_IT: - success = (pSndFile->m_dwSongFlags & SONG_ITPROJECT) ? + success = pSndFile->m_SongFlags[SONG_ITPROJECT] ? pSndFile->SaveITProject(fileName) : pSndFile->SaveIT(fileName); break; Modified: trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/ChannelManagerDlg.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -831,8 +831,8 @@ switch(currentTab) { case 0: - if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_MUTE) FillRect(pDC.hdc,&btn,red); - else if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_SOLO) FillRect(pDC.hdc,&btn,green); + if(m_pSndFile->ChnSettings[nThisChn].dwFlags[CHN_MUTE]) FillRect(pDC.hdc,&btn,red); + else if(m_pSndFile->ChnSettings[nThisChn].dwFlags[CHN_SOLO]) FillRect(pDC.hdc,&btn,green); else FillRect(pDC.hdc,&btn,CMainFrame::brushHighLight); break; case 1: @@ -844,7 +844,7 @@ else FillRect(pDC.hdc,&btn,CMainFrame::brushHighLight); break; case 2: - if(m_pSndFile->ChnSettings[nThisChn].dwFlags & CHN_NOFX) FillRect(pDC.hdc,&btn,red); + if(m_pSndFile->ChnSettings[nThisChn].dwFlags[CHN_NOFX]) FillRect(pDC.hdc,&btn,red); else FillRect(pDC.hdc,&btn,green); break; case 3: Modified: trunk/OpenMPT/mptrack/Childfrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/Childfrm.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Childfrm.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -311,7 +311,7 @@ if ((!wParam) && (pSndFile->m_nInstruments > 0)) { - nIns = pModDoc->FindSampleParent(nIns); + nIns = pModDoc->FindSampleParent(static_cast<SAMPLEINDEX>(nIns)); if(nIns == INSTRUMENTINDEX_INVALID) { nIns = 0; Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -542,7 +542,7 @@ EndWaitCursor(); - if(unusedInsSamples && !((pSndFile->GetType() == MOD_TYPE_IT) && (pSndFile->m_dwSongFlags & SONG_ITPROJECT))) + if(unusedInsSamples && !((pSndFile->GetType() == MOD_TYPE_IT) && pSndFile->m_SongFlags[SONG_ITPROJECT])) { // We don't remove an instrument's unused samples in an ITP. wsprintf(s, "OpenMPT detected %d sample%s referenced by an instrument,\n" @@ -722,7 +722,7 @@ if (!pSndFile->GetNumInstruments()) return false; deleteInstrumentSamples removeSamples = doNoDeleteAssociatedSamples; - if (!((pSndFile->GetType() == MOD_TYPE_IT) && (pSndFile->m_dwSongFlags & SONG_ITPROJECT))) // Never remove an instrument's samples in ITP. + if(!pSndFile->m_SongFlags[SONG_ITPROJECT]) // Never remove an instrument's samples in ITP. { if(Reporting::Confirm("Remove samples associated with an instrument if they are unused?", "Removing unused instruments") == cnfYes) { @@ -902,7 +902,7 @@ m_pModDoc->ChangeModType(MOD_TYPE_IT); pSndFile->m_nMixLevels = mixLevels_compatible; pSndFile->m_nTempoMode = tempo_mode_classic; - pSndFile->m_dwSongFlags = SONG_LINEARSLIDES; + pSndFile->m_SongFlags = SONG_LINEARSLIDES; pSndFile->m_MidiCfg.Reset(); // Global vars @@ -919,7 +919,7 @@ pSndFile->Instruments[i]->nFadeOut = 256; pSndFile->Instruments[i]->nGlobalVol = 64; pSndFile->Instruments[i]->nPan = 128; - pSndFile->Instruments[i]->dwFlags &= ~INS_SETPANNING; + pSndFile->Instruments[i]->dwFlags.reset(INS_SETPANNING); pSndFile->Instruments[i]->nMixPlug = 0; pSndFile->Instruments[i]->nVolSwing = 0; Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -260,7 +260,7 @@ // -> CODE#0023 // -> DESC="IT project files (.itp)" // case MOD_TYPE_IT: pszModType = "IT (Impulse Tracker)"; break; - case MOD_TYPE_IT: pszModType = m_pSndFile->m_dwSongFlags & SONG_ITPROJECT ? "ITP (IT Project)" : "IT (Impulse Tracker)"; break; + case MOD_TYPE_IT: pszModType = m_pSndFile->m_SongFlags[SONG_ITPROJECT] ? "ITP (IT Project)" : "IT (Impulse Tracker)"; break; case MOD_TYPE_MPT: pszModType = "MPTM (OpenMPT)"; break; // -! NEW_FEATURE#0023 Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -1257,7 +1257,7 @@ SetDlgItemInt(IDC_EDIT8, pIns->nGlobalVol); // Panning SetDlgItemInt(IDC_EDIT9, (m_pModDoc->GetModType() & MOD_TYPE_IT) ? (pIns->nPan / 4) : pIns->nPan); - m_CheckPanning.SetCheck((pIns->dwFlags & INS_SETPANNING) ? TRUE : FALSE); + m_CheckPanning.SetCheck(pIns->dwFlags[INS_SETPANNING] ? TRUE : FALSE); // Midi if (pIns->nMidiProgram>0 && pIns->nMidiProgram<=128) SetDlgItemInt(IDC_EDIT10, pIns->nMidiProgram); @@ -1927,10 +1927,9 @@ ModInstrument *pIns = m_pSndFile->Instruments[m_nInstrument]; if ((!IsLocked()) && (pIns)) { - const BOOL b = m_CheckPanning.GetCheck(); + const bool b = m_CheckPanning.GetCheck() != BST_UNCHECKED; - if (b) pIns->dwFlags |= INS_SETPANNING; - else pIns->dwFlags &= ~INS_SETPANNING; + pIns->dwFlags.set(INS_SETPANNING, b); if(b && m_pSndFile->GetType() & (MOD_TYPE_IT|MOD_TYPE_MPT)) { Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -424,7 +424,7 @@ { SendViewMessage(VIEWMSG_FOLLOWSONG, IsDlgButtonChecked(IDC_PATTERN_FOLLOWSONG)); if (m_pSndFile) { - SendViewMessage(VIEWMSG_PATTERNLOOP, (SONG_PATTERNLOOP & m_pSndFile->m_dwSongFlags)); + SendViewMessage(VIEWMSG_PATTERNLOOP, (SONG_PATTERNLOOP & m_pSndFile->m_SongFlags)); } OnSpacingChanged(); SendViewMessage(VIEWMSG_SETDETAIL, m_nDetailLevel); @@ -488,7 +488,7 @@ if (lParam == -1) { //Toggle loop state - setLoop = !(m_pSndFile->m_dwSongFlags&SONG_PATTERNLOOP); + setLoop = !m_pSndFile->m_SongFlags[SONG_PATTERNLOOP]; } else { setLoop = (lParam != 0); @@ -496,11 +496,11 @@ if (setLoop) { - m_pSndFile->m_dwSongFlags |= SONG_PATTERNLOOP; + m_pSndFile->m_SongFlags.set(SONG_PATTERNLOOP); CheckDlgButton(IDC_PATTERN_LOOP, BST_CHECKED); } else { - m_pSndFile->m_dwSongFlags &= ~SONG_PATTERNLOOP; + m_pSndFile->m_SongFlags.reset(SONG_PATTERNLOOP); CheckDlgButton(IDC_PATTERN_LOOP, BST_UNCHECKED); } @@ -1158,19 +1158,19 @@ m_pSndFile->m_MidiCfg = dlg.m_MidiCfg; if (dlg.m_bEmbed) { - m_pSndFile->m_dwSongFlags |= SONG_EMBEDMIDICFG; + m_pSndFile->m_SongFlags.set(SONG_EMBEDMIDICFG); m_pModDoc->SetModified(); } else { - if (m_pSndFile->m_dwSongFlags & SONG_EMBEDMIDICFG) m_pModDoc->SetModified(); - m_pSndFile->m_dwSongFlags &= ~SONG_EMBEDMIDICFG; + if (m_pSndFile->m_SongFlags[SONG_EMBEDMIDICFG]) m_pModDoc->SetModified(); + m_pSndFile->m_SongFlags.reset(SONG_EMBEDMIDICFG); // If this macro is not the default IT macro, display a warning. if(!m_pSndFile->m_MidiCfg.IsMacroDefaultSetupUsed()) { if(Reporting::Confirm(_T("You have chosen not to embed MIDI macros. However, the current macro configuration differs from the default macro configuration that is assumed when loading a file that has no macros embedded. This can result in data loss and broken playback.\nWould you like to embed MIDI macros now?")) == cnfYes) { - m_pSndFile->m_dwSongFlags |= SONG_EMBEDMIDICFG; + m_pSndFile->m_SongFlags.set(SONG_EMBEDMIDICFG); m_pModDoc->SetModified(); } } Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -115,7 +115,7 @@ COrderList::COrderList() //---------------------- { - m_hFont = NULL; + m_hFont = nullptr; m_pParent = nullptr; m_cxFont = m_cyFont = 0; m_pModDoc = nullptr; @@ -311,7 +311,7 @@ if ((n < pSndFile->Patterns.Size()) && (pSndFile->Patterns[n]) && !bShiftClick) { bool bIsPlaying = (pMainFrm->GetModPlaying() == m_pModDoc); - if ((bIsPlaying) && (pSndFile->m_dwSongFlags & SONG_PATTERNLOOP)) + if(bIsPlaying && pSndFile->m_SongFlags[SONG_PATTERNLOOP]) { CriticalSection cs; // update channel parameters and play time @@ -326,14 +326,14 @@ { CriticalSection cs; - DWORD dwPaused = pSndFile->m_dwSongFlags & (SONG_PAUSED|SONG_STEP|SONG_PATTERNLOOP); + SongFlags pausedFlags = pSndFile->m_SongFlags & (SONG_PAUSED | SONG_STEP | SONG_PATTERNLOOP); // update channel parameters and play time m_pModDoc->SetElapsedTime(m_nScrollPos, 0); pSndFile->m_nCurrentOrder = m_nScrollPos; pSndFile->SetCurrentOrder(m_nScrollPos); - pSndFile->m_dwSongFlags |= dwPaused; + pSndFile->m_SongFlags.set(pausedFlags); if (bIsPlaying) pMainFrm->ResetNotificationBuffer(); } Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -583,7 +583,7 @@ // ((m_bInItemRect) && ((m_nDragItem & DRAGITEM_MASK) == DRAGITEM_CHNHEADER) && ((m_nDragItem & DRAGITEM_VALUEMASK) == ncolhdr)) ? TRUE : FALSE, DT_CENTER); // rect.bottom = rect.top + COLHDR_HEIGHT; DrawButtonRect(hdc, &rect, s, - (pSndFile->ChnSettings[ncolhdr].dwFlags & CHN_MUTE) ? TRUE : FALSE, + pSndFile->ChnSettings[ncolhdr].dwFlags[CHN_MUTE] ? TRUE : FALSE, ((m_bInItemRect) && ((m_nDragItem & DRAGITEM_MASK) == DRAGITEM_CHNHEADER) && ((m_nDragItem & DRAGITEM_VALUEMASK) == ncolhdr)) ? TRUE : FALSE, pModDoc->IsChannelRecord(static_cast<CHANNELINDEX>(ncolhdr)) ? DT_RIGHT : DT_CENTER); @@ -959,11 +959,11 @@ { tx_col = MODCOLOR_NOTE; - if((pSndFile->m_dwSongFlags & SONG_PT1XMODE) && (m->note < NOTE_MIDDLEC - 12 || m->note >= NOTE_MIDDLEC + 2 * 12)) + if(pSndFile->m_SongFlags[SONG_PT1XMODE] && (m->note < NOTE_MIDDLEC - 12 || m->note >= NOTE_MIDDLEC + 2 * 12)) { // MOD "ProTracker 1.x" flag: Highlight notes that are not supported by Amiga trackers. tx_col = MODCOLOR_DODGY_COMMANDS; - } else if((pSndFile->m_dwSongFlags & SONG_AMIGALIMITS) && m->instr != 0 && m->instr <= pSndFile->GetNumSamples()) + } else if(pSndFile->m_SongFlags[SONG_AMIGALIMITS] && m->instr != 0 && m->instr <= pSndFile->GetNumSamples()) { // S3M "Force Amiga Limits": Highlight notes that exceed the Amiga's frequency range. UINT period = pSndFile->GetPeriodFromNote(m->note, 0, pSndFile->GetSample(m->instr).nC5Speed); @@ -1695,14 +1695,14 @@ //xtraInfo.Format("Chan: %d; macro: %X; cutoff: %X; reso: %X; pan: %X", xtraInfo.Format("Chn:%d; Vol:%X; Mac:%X; Cut:%X%s; Res:%X; Pan:%X%s", - nChn+1, - pSndFile->Chn[nChn].nGlobalVol, - pSndFile->Chn[nChn].nActiveMacro, - pSndFile->Chn[nChn].nCutOff, - (pSndFile->Chn[nChn].nFilterMode == FLTMODE_HIGHPASS) ? "-Hi" : "", - pSndFile->Chn[nChn].nResonance, - pSndFile->Chn[nChn].nPan, - (pSndFile->Chn[nChn].dwFlags & CHN_SURROUND) ? "-S" : ""); + nChn + 1, + pSndFile->Chn[nChn].nGlobalVol, + pSndFile->Chn[nChn].nActiveMacro, + pSndFile->Chn[nChn].nCutOff, + (pSndFile->Chn[nChn].nFilterMode == FLTMODE_HIGHPASS) ? "-Hi" : "", + pSndFile->Chn[nChn].nResonance, + pSndFile->Chn[nChn].nPan, + pSndFile->Chn[nChn].dwFlags[CHN_SURROUND] ? "-S" : ""); pMainFrm->SetXInfoText(xtraInfo); } Modified: trunk/OpenMPT/mptrack/EffectInfo.cpp =================================================================== --- trunk/OpenMPT/mptrack/EffectInfo.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/EffectInfo.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -648,13 +648,12 @@ case CMD_TREMOR: if(param) { - BYTE ontime = (BYTE)(param >> 4), offtime = (BYTE)(param & 0x0F); - if(sndFile.m_dwSongFlags & SONG_ITOLDEFFECTS) + uint8 ontime = (uint8)(param >> 4), offtime = (uint8)(param & 0x0F); + if(sndFile.m_SongFlags[SONG_ITOLDEFFECTS] || (sndFile.GetType() & MOD_TYPE_XM)) { ontime++; offtime++; - } - else + } else { if(ontime == 0) ontime = 1; if(offtime == 0) offtime = 1; Modified: trunk/OpenMPT/mptrack/InputHandler.cpp =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/InputHandler.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -117,7 +117,7 @@ CatchModifierChange(wParam, keyEventType, scancode); } - if(!InterceptSpecialKeys( wParam, lParam ) && !Bypass()) + if(!InterceptSpecialKeys( wParam, lParam ) && !IsBypassed()) { // only execute command when the input handler is not locked // and the input is not a consequence of special key interception. @@ -444,8 +444,8 @@ } -bool CInputHandler::Bypass() -//-------------------------- +bool CInputHandler::IsBypassed() +//------------------------------ { return m_bBypass; } @@ -556,7 +556,7 @@ default: return "Unknown Item."; } - s += activeCommandSet->GetKeyTextFromCommand(c, 0); + s += GetKeyTextFromCommand(c); return s; } Modified: trunk/OpenMPT/mptrack/InputHandler.h =================================================================== --- trunk/OpenMPT/mptrack/InputHandler.h 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/InputHandler.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -77,7 +77,7 @@ bool SelectionPressed(); bool CtrlPressed(); bool AltPressed(); - bool Bypass(); + bool IsBypassed(); void Bypass(bool); WORD GetModifierMask(); void SetModifierMask(WORD mask); Modified: trunk/OpenMPT/mptrack/MIDIMacroDialog.h =================================================================== --- trunk/OpenMPT/mptrack/MIDIMacroDialog.h 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/MIDIMacroDialog.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -20,10 +20,7 @@ //=================================== { public: - CMidiMacroSetup(CSoundFile &sndFile, CWnd *parent = NULL) : CDialog(IDD_MIDIMACRO, parent), m_SndFile(sndFile), m_MidiCfg(sndFile.m_MidiCfg) - { - m_bEmbed = (m_SndFile.m_dwSongFlags & SONG_EMBEDMIDICFG) != 0; - } + CMidiMacroSetup(CSoundFile &sndFile, CWnd *parent = NULL) : CDialog(IDD_MIDIMACRO, parent), m_SndFile(sndFile), m_MidiCfg(sndFile.m_MidiCfg), m_bEmbed(m_SndFile.m_SongFlags[SONG_EMBEDMIDICFG]) { } bool m_bEmbed; MIDIMacroConfig m_MidiCfg; Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp =================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -483,21 +483,24 @@ } // Check for extended filter range flag - if(m_SndFile.m_dwSongFlags & SONG_EXFILTERRANGE) + if(m_SndFile.m_SongFlags[SONG_EXFILTERRANGE]) { AddToLog("Found extended filter range\n"); foundHacks = true; if(autofix) - m_SndFile.m_dwSongFlags &= ~SONG_EXFILTERRANGE; + m_SndFile.m_SongFlags.reset(SONG_EXFILTERRANGE); } // Embedded MIDI configuration in XM files - if((m_SndFile.m_dwSongFlags & SONG_EMBEDMIDICFG) != 0 && m_SndFile.GetType() == MOD_TYPE_XM) + if(m_SndFile.m_SongFlags[SONG_EMBEDMIDICFG] != 0 && m_SndFile.GetType() == MOD_TYPE_XM) { AddToLog("Found embedded MIDI macros\n"); foundHacks = true; if(autofix) - m_SndFile.m_dwSongFlags &= ~SONG_EMBEDMIDICFG; + { + m_SndFile.m_MidiCfg.Reset(); + m_SndFile.m_SongFlags.reset(SONG_EMBEDMIDICFG); + } } // Player flags Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -1089,9 +1089,9 @@ const ModChannelEnvInfo &chnEnv = pChn->GetEnvelope(notifyEnv); - if (chnEnv.flags & ENV_ENABLED) + if(chnEnv.flags[ENV_ENABLED]) { - DWORD pos = chnEnv.nEnvPosition; + uint32 pos = chnEnv.nEnvPosition; if(m_pSndFile->IsCompatibleMode(TRK_IMPULSETRACKER | TRK_FASTTRACKER2)) { // Impulse Tracker / Fasttracker 2 envelope handling (see SndMix.cpp for details) @@ -1318,7 +1318,7 @@ CSoundFile *pSndFile = pModDoc->GetSoundFile(); if ((!pSndFile) || (!pSndFile->GetType())) return FALSE; const bool bPaused = pSndFile->IsPaused(); - const bool bPatLoop = (pSndFile->m_dwSongFlags & SONG_PATTERNLOOP) != 0; + const bool bPatLoop = pSndFile->m_SongFlags[SONG_PATTERNLOOP]; pSndFile->ResetChannels(); // Select correct bidi loop mode when playing a module. pSndFile->SetupITBidiMode(); @@ -1350,7 +1350,7 @@ { if (bPaused) { - pSndFile->m_dwSongFlags |= SONG_PAUSED; + pSndFile->m_SongFlags.set(SONG_PAUSED); } else { pModDoc->SetPause(FALSE); @@ -1405,7 +1405,7 @@ //m_pSndFile->LoopPattern(-1); //Commented above line - why loop should be disabled when pausing? - m_pSndFile->m_dwSongFlags &= ~SONG_PAUSED; + m_pSndFile->m_SongFlags.reset(SONG_PAUSED); if (m_pSndFile == &m_WaveFile) { m_pSndFile = NULL; Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -191,7 +191,7 @@ #define PATTERN_MIDIRECORD 0x100000 // MIDI Record on by default #define PATTERN_NOCLOSEDIALOG 0x200000 // Don't use OpenMPT's custom close dialog with a list of saved files when closing the main window #define PATTERN_DBLCLICKSELECT 0x400000 // Double-clicking pattern selects whole channel -#define PATTERN_OLDCTXMENUSTYLE 0x800000 // mpt 1.16 pattern context menu style +#define PATTERN_OLDCTXMENUSTYLE 0x800000 // Hide pattern context menu entries instead of greying them out. #define PATTERN_SYNCMUTE 0x1000000 // maintain sample sync on mute #define PATTERN_AUTODELAY 0x2000000 // automatically insert delay commands in pattern when entering notes #define PATTERN_NOTEFADE 0x4000000 // alt. note fade behaviour when entering notes Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -643,7 +643,7 @@ CSoundFile::gdwMixingFreq = m_pWaveFormat->nSamplesPerSec; CSoundFile::gnBitsPerSample = m_pWaveFormat->wBitsPerSample; CSoundFile::gnChannels = m_pWaveFormat->nChannels; - m_pSndFile->m_dwSongFlags &= ~(SONG_PAUSED | SONG_STEP); + m_pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); // -> CODE#0024 // -> DESC="wav export update" // if ((m_bNormalize) && (m_pWaveFormat->wBitsPerSample <= 16)) @@ -949,7 +949,7 @@ BOOL CDoAcmConvert::OnInitDialog() -//--------------------------------- +//-------------------------------- { CDialog::OnInitDialog(); SetWindowText("Encoding File..."); @@ -1059,7 +1059,7 @@ m_pSndFile->ResetChannels(); CSoundFile::InitPlayer(TRUE); CSoundFile::gdwSoundSetup |= SNDMIX_DIRECTTODISK; - m_pSndFile->m_dwSongFlags &= ~(SONG_PAUSED | SONG_STEP); + m_pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); m_pSndFile->visitedSongRows.Initialize(true); @@ -1194,37 +1194,3 @@ SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); EndDialog(retval); } - - -/* - -TEXT("IARL"), TEXT("Archival Location"), TEXT("Indicates where the subject of the file is archived."), -TEXT("IART"), TEXT("Artist"), TEXT("Lists the artist of the original subject of the file. For example, \"Michaelangelo.\""), -TEXT("ICMS"), TEXT("Commissioned"), TEXT("Lists the name of the person or organization that commissioned the subject of the file." - " For example, \"Pope Julian II.\""), -TEXT("ICMT"), TEXT("Comments"), TEXT("Provides general comments about the file or the subject of the file. If the comment is " - "several sentences long, end each sentence with a period. Do not include newline characters."), -TEXT("ICOP"), TEXT("Copyright"), TEXT("Records the copyright information for the file. For example, \"Copyright Encyclopedia " - "International 1991.\" If there are multiple copyrights, separate them by a semicolon followed " - "by a space."), -TEXT("ICRD"), TEXT("Creation date"), TEXT("Specifies the date the subject of the file was created. List dates in year-month-day " - "format, padding one-digit months and days with a zero on the left. For example, " - "'1553-05-03' for May 3, 1553."), -TEXT("IENG"), TEXT("Engineer"), TEXT("Stores the name of the engineer who worked on the file. If there are multiple engineers, " - "separate the names by a semicolon and a blank. For example, \"Smith, John; Adams, Joe.\""), -TEXT("IGNR"), TEXT("Genre"), TEXT("Describes the original work, such as, \"landscape,\" \"portrait,\" \"still life,\" etc."), -TEXT("IKEY"), TEXT("Keywords"), TEXT("Provides a list of keywords that refer to the file or subject of the file. Separate " - "multiple keywords with a semicolon and a blank. For example, \"Seattle; aerial view; scenery.\""), -TEXT("IMED"), TEXT("Medium"), TEXT("Describes the original subject of the file, such as, \"computer image,\" \"drawing,\"" - "\"lithograph,\" and so forth."), -TEXT("INAM"), TEXT("Name"), TEXT("Stores the title of the subject of the file, such as, \"Seattle From Above.\""), -TEXT("IPRD"), TEXT("Product"), TEXT("Specifies the name of the title the file was originally intended for, such as \"Encyclopedia" - " of Pacific Northwest Geography.\""), -TEXT("ISBJ"), TEXT("Subject"), TEXT("Describes the contents of the file, such as \"Aerial view of Seattle.\""), -TEXT("ISFT"), TEXT("Software"), TEXT("Identifies the name of the software package used to create the file, such as " - "\"Microsoft WaveEdit.\""), -TEXT("ISRC"), TEXT("Source"), TEXT("Identifies the name of the person or organization who supplied the original subject of the file." - " For example, \"Trey Research.\""), -TEXT("ITCH"), TEXT("Technician"), TEXT("Identifies the technician who digitized the subject file. For example, \"Smith, John.\""), - -*/ Modified: trunk/OpenMPT/mptrack/ModConvert.cpp =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/ModConvert.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -421,10 +421,10 @@ { if(newTypeIsMOD_XM || newTypeIsS3M) { - if(m_SndFile.ChnSettings[nChn].nVolume != 64 || (m_SndFile.ChnSettings[nChn].dwFlags & CHN_SURROUND)) + if(m_SndFile.ChnSettings[nChn].nVolume != 64 || m_SndFile.ChnSettings[nChn].dwFlags[CHN_SURROUND]) { m_SndFile.ChnSettings[nChn].nVolume = 64; - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SURROUND; + m_SndFile.ChnSettings[nChn].dwFlags.reset(CHN_SURROUND); CHANGEMODTYPE_WARNING(wChannelVolSurround); } } @@ -461,12 +461,12 @@ m_SndFile.ChangeModTypeTo(nNewType); // Song flags - if(!(CSoundFile::GetModSpecifications(nNewType).songFlags & SONG_LINEARSLIDES) && (m_SndFile.m_dwSongFlags & SONG_LINEARSLIDES)) + if(!(CSoundFile::GetModSpecifications(nNewType).songFlags & SONG_LINEARSLIDES) && m_SndFile.m_SongFlags[SONG_LINEARSLIDES]) { CHANGEMODTYPE_WARNING(wLinearSlides); } - if(oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATGXX; - m_SndFile.m_dwSongFlags &= SONG_PLAY_FLAGS | CSoundFile::GetModSpecifications(nNewType).songFlags; + if(oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_SongFlags.set(SONG_ITCOMPATGXX); + m_SndFile.m_SongFlags &= (CSoundFile::GetModSpecifications(nNewType).songFlags | SONG_PLAY_FLAGS); // Adjust mix levels if(newTypeIsMOD || newTypeIsS3M) Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -48,7 +48,7 @@ case MOD_TYPE_MOD: return FileFilterMOD; case MOD_TYPE_XM: return FileFilterXM; case MOD_TYPE_S3M: return FileFilterS3M; - case MOD_TYPE_IT: return (sndFile.m_dwSongFlags & SONG_ITPROJECT) ? FileFilterITP : FileFilterIT; + case MOD_TYPE_IT: return (sndFile.m_SongFlags[SONG_ITPROJECT] ? FileFilterITP : FileFilterIT); case MOD_TYPE_MPT: return FileFilterMPT; default: return FileFilterNone; } @@ -175,17 +175,17 @@ if(CTrackApp::IsProject()) { - m_SndFile.m_dwSongFlags |= SONG_ITPROJECT; + m_SndFile.m_SongFlags.set(SONG_ITPROJECT); } theApp.GetDefaultMidiMacro(&m_SndFile.m_MidiCfg); if (m_SndFile.m_nType & (MOD_TYPE_XM | MOD_TYPE_IT | MOD_TYPE_MPT)) { - m_SndFile.m_dwSongFlags |= SONG_LINEARSLIDES; + m_SndFile.m_SongFlags.set(SONG_LINEARSLIDES); if(!m_SndFile.m_MidiCfg.IsMacroDefaultSetupUsed()) { - m_SndFile.m_dwSongFlags |= SONG_EMBEDMIDICFG; + m_SndFile.m_SongFlags.set(SONG_EMBEDMIDICFG); } } @@ -452,7 +452,7 @@ case MOD_TYPE_MOD: bOk = m_SndFile.SaveMod(lpszPathName); break; case MOD_TYPE_S3M: bOk = m_SndFile.SaveS3M(lpszPathName); break; case MOD_TYPE_XM: bOk = m_SndFile.SaveXM(lpszPathName); break; - case MOD_TYPE_IT: bOk = (m_SndFile.m_dwSongFlags & SONG_ITPROJECT) ? m_SndFile.SaveITProject(lpszPathName) : m_SndFile.SaveIT(lpszPathName); break; + case MOD_TYPE_IT: bOk = (m_SndFile.m_SongFlags[SONG_ITPROJECT] ? m_SndFile.SaveITProject(lpszPathName) : m_SndFile.SaveIT(lpszPathName)); break; case MOD_TYPE_MPT: bOk = m_SndFile.SaveIT(lpszPathName); break; } EndWaitCursor(); @@ -473,7 +473,7 @@ } } else { - if(type == MOD_TYPE_IT && m_SndFile.m_dwSongFlags & SONG_ITPROJECT) + if(type == MOD_TYPE_IT && m_SndFile.m_SongFlags[SONG_ITPROJECT]) Reporting::Error(_T("ITP projects need to have a path set for each instrument...")); else ErrorBox(IDS_ERR_SAVESONG, CMainFrame::GetMainFrame()); @@ -487,7 +487,7 @@ BOOL CModDoc::SaveModified() //-------------------------- { - if((m_SndFile.m_nType & MOD_TYPE_IT) && m_SndFile.m_dwSongFlags & SONG_ITPROJECT && !(m_SndFile.m_dwSongFlags & SONG_ITPEMBEDIH)) + if((m_SndFile.GetType() & MOD_TYPE_IT) && m_SndFile.m_SongFlags[SONG_ITPROJECT] && !m_SndFile.m_SongFlags[SONG_ITPEMBEDIH]) { bool unsavedInstrument = false; @@ -572,7 +572,7 @@ // lpszDefExt = "it"; // lpszFilter = "Impulse Tracker Modules (*.it)|*.it||"; // strcpy(fext, ".it"); - if(m_SndFile.m_dwSongFlags & SONG_ITPROJECT) + if(m_SndFile.m_SongFlags[SONG_ITPROJECT]) { // Special case... defaultExtension = "itp"; @@ -717,7 +717,7 @@ for (CHANNELINDEX nChn = 0; nChn < MAX_BASECHANNELS; nChn++) { - m_SndFile.ChnSettings[nChn].dwFlags = 0; + m_SndFile.ChnSettings[nChn].dwFlags.reset(); m_SndFile.ChnSettings[nChn].nVolume = 64; m_SndFile.ChnSettings[nChn].nPan = 128; m_SndFile.Chn[nChn].nGlobalVol = 64; @@ -744,7 +744,7 @@ } if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_XM)) { - m_SndFile.m_dwSongFlags |= SONG_LINEARSLIDES; + m_SndFile.m_SongFlags.set(SONG_LINEARSLIDES); } } m_SndFile.SetCurrentPos(0); @@ -910,7 +910,7 @@ { if ((i < GetNumChannels()) || (m_SndFile.Chn[i].nMasterChn)) { - m_SndFile.Chn[i].dwFlags |= CHN_KEYOFF | CHN_NOTEFADE; + m_SndFile.Chn[i].dwFlags.set(CHN_KEYOFF | CHN_NOTEFADE); m_SndFile.Chn[i].nFadeOutVol = 0; } } @@ -918,7 +918,7 @@ if (pMainFrm->GetModPlaying() != this) { - m_SndFile.m_dwSongFlags |= SONG_PAUSED; + m_SndFile.m_SongFlags.set(SONG_PAUSED); pMainFrm->PlayMod(this, m_hWndFollow, m_dwNotifyType); } CMainFrame::EnableLowLatencyMode(); @@ -936,7 +936,7 @@ // reset channel properties; in theory the chan is completely unused anyway. pChn->nPos = pChn->nPosLo = pChn->nLength = 0; pChn->dwFlags &= CHN_SAMPLEFLAGS; - pChn->dwFlags &= ~(CHN_MUTE); + pChn->dwFlags.reset(CHN_MUTE); pChn->nGlobalVol = 64; pChn->nInsVol = 64; pChn->nPan = 128; @@ -966,7 +966,7 @@ pChn->nPos = pChn->nPosLo = pChn->nLength = 0; pChn->nLoopStart = sample.nLoopStart; pChn->nLoopEnd = sample.nLoopEnd; - pChn->dwFlags = sample.uFlags & (CHN_SAMPLEFLAGS & ~CHN_MUTE); + pChn->dwFlags = static_cast<ChannelFlags>(sample.uFlags) & (CHN_SAMPLEFLAGS & ~CHN_MUTE); pChn->nPan = 128; if (sample.uFlags & CHN_PANNING) pChn->nPan = sample.nPan; pChn->nInsVol = sample.nGlobalVol; @@ -989,13 +989,7 @@ } // Handle extra-loud flag - if ((!(CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_NOEXTRALOUD)) && (nsmp)) - { - pChn->dwFlags |= CHN_EXTRALOUD; - } else - { - pChn->dwFlags &= ~CHN_EXTRALOUD; - } + pChn->dwFlags.set(CHN_EXTRALOUD, !(CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_NOEXTRALOUD) && nsmp); // Handle custom start position if(sampleOffset > 0 && pChn->pModSample) @@ -1038,7 +1032,7 @@ { CriticalSection cs; m_SndFile.NoteChange(nChn, note); - if (pause) m_SndFile.m_dwSongFlags |= SONG_PAUSED; + if (pause) m_SndFile.m_SongFlags.set(SONG_PAUSED); } return nChn; } @@ -1074,18 +1068,18 @@ } //end rewbs.vstiLive - const DWORD mask = (fade ? CHN_NOTEFADE : (CHN_NOTEFADE | CHN_KEYOFF)); + const ChannelFlags mask = (fade ? CHN_NOTEFADE : (CHN_NOTEFADE | CHN_KEYOFF)); ModChannel *pChn = &m_SndFile.Chn[m_SndFile.m_nChannels]; for (CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++, pChn++) if (!pChn->nMasterChn) { // Fade all channels > m_nChannels which are playing this note. // Could conflict with NNAs. - if ((!(pChn->dwFlags & mask)) && (pChn->nLength) && ((note == pChn->nNewNote) || (!note))) + if(!pChn->dwFlags[mask] && pChn->nLength && (note == pChn->nNewNote || !note)) { m_SndFile.KeyOff(i); - if (!m_SndFile.m_nInstruments) pChn->dwFlags &= ~CHN_LOOP; - if (fade) pChn->dwFlags |= CHN_NOTEFADE; + if (!m_SndFile.m_nInstruments) pChn->dwFlags.reset(CHN_LOOP); + if (fade) pChn->dwFlags.set(CHN_NOTEFADE); if (note) break; } } @@ -1102,10 +1096,10 @@ ModChannel *pChn = &m_SndFile.Chn[m_SndFile.GetNumChannels()]; for (CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++, pChn++) if (!pChn->nMasterChn) { - if ((pChn->nLength) && (!(pChn->dwFlags & (CHN_NOTEFADE|CHN_KEYOFF|CHN_MUTE))) - && ((note == pChn->nNewNote) || (!note)) - && ((pChn->pModSample == &m_SndFile.GetSample(nsmp)) || (!nsmp)) - && ((pChn->pModInstrument == m_SndFile.Instruments[nins]) || (!nins))) return true; + if(pChn->nLength != 0 && !pChn->dwFlags[CHN_NOTEFADE | CHN_KEYOFF| CHN_MUTE] + && (note == pChn->nNewNote || !note) + && (pChn->pModSample == &m_SndFile.GetSample(nsmp) || !nsmp) + && (pChn->pModInstrument == m_SndFile.Instruments[nins] || !nins)) return true; } return false; } @@ -1120,19 +1114,13 @@ } // Mark channel as muted in channel settings - if (doMute) - { - m_SndFile.ChnSettings[nChn].dwFlags |= CHN_MUTE; - } else - { - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_MUTE; - } + m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_MUTE, doMute); const bool success = UpdateChannelMuteStatus(nChn); if(success) { //Mark IT/MPTM/S3M as modified - if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_S3M)) + if(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_S3M)) { CMainFrame::GetMainFrame()->ThreadSafeSetModified(this); } @@ -1145,19 +1133,19 @@ bool CModDoc::UpdateChannelMuteStatus(CHANNELINDEX nChn) //------------------------------------------------------ { - const DWORD muteType = (CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_SYNCMUTE) ? CHN_SYNCMUTE : CHN_MUTE; + const ChannelFlags muteType = (CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_SYNCMUTE) ? CHN_SYNCMUTE : CHN_MUTE; if (nChn >= m_SndFile.GetNumChannels()) { return false; } - const bool doMute = (m_SndFile.ChnSettings[nChn].dwFlags & CHN_MUTE) != 0; + const bool doMute = m_SndFile.ChnSettings[nChn].dwFlags[CHN_MUTE]; // Mute pattern channel if (doMute) { - m_SndFile.Chn[nChn].dwFlags |= muteType; + m_SndFile.Chn[nChn].dwFlags.set(muteType); // Kill VSTi notes on muted channel. PLUGINDEX nPlug = m_SndFile.GetBestPlugin(nChn, PrioritiseInstrument, EvenIfMuted); if ((nPlug) && (nPlug<=MAX_MIXPLUGINS)) @@ -1172,7 +1160,7 @@ } else { // On unmute alway cater for both mute types - this way there's no probs if user changes mute mode. - m_SndFile.Chn[nChn].dwFlags &= ~(CHN_SYNCMUTE|CHN_MUTE); + m_SndFile.Chn[nChn].dwFlags.reset(CHN_SYNCMUTE | CHN_MUTE); } // Mute any NNA'd channels @@ -1182,11 +1170,11 @@ { if (doMute) { - m_SndFile.Chn[i].dwFlags |= muteType; + m_SndFile.Chn[i].dwFlags.set(muteType); } else { // On unmute alway cater for both mute types - this way there's no probs if user changes mute mode. - m_SndFile.Chn[i].dwFlags &= ~(CHN_SYNCMUTE|CHN_MUTE); + m_SndFile.Chn[i].dwFlags.reset(CHN_SYNCMUTE | CHN_MUTE); } } } @@ -1200,16 +1188,15 @@ //-------------------------------------------------- { if (nChn >= m_SndFile.m_nChannels) return true; - return (m_SndFile.ChnSettings[nChn].dwFlags & CHN_SOLO) != 0; + return m_SndFile.ChnSettings[nChn].dwFlags[CHN_SOLO]; } bool CModDoc::SoloChannel(CHANNELINDEX nChn, bool bSolo) //------------------------------------------------------ { if (nChn >= m_SndFile.m_nChannels) return false; - if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); - if (bSolo) m_SndFile.ChnSettings[nChn].dwFlags |= CHN_SOLO; - else m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SOLO; + if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_SOLO, bSolo); return true; } // -! NEW_FEATURE#0012 @@ -1218,25 +1205,22 @@ // -> CODE#0015 // -> DESC="channels management dlg" bool CModDoc::IsChannelNoFx(CHANNELINDEX nChn) const -//------------------------------------------ +//-------------------------------------------------- { if (nChn >= m_SndFile.m_nChannels) return true; - return (m_SndFile.ChnSettings[nChn].dwFlags & CHN_NOFX) != 0; + return m_SndFile.ChnSettings[nChn].dwFlags[CHN_NOFX]; } + bool CModDoc::NoFxChannel(CHANNELINDEX nChn, bool bNoFx, bool updateMix) //---------------------------------------------------------------------- { if (nChn >= m_SndFile.m_nChannels) return false; - if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); - if (bNoFx){ - m_SndFile.ChnSettings[nChn].dwFlags |= CHN_NOFX; - if(updateMix) m_SndFile.Chn[nChn].dwFlags |= CHN_NOFX; - } - else{ - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_NOFX; - if(updateMix) m_SndFile.Chn[nChn].dwFlags &= ~CHN_NOFX; - } + if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + + m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_NOFX, bNoFx); + if(updateMix) m_SndFile.Chn[nChn].dwFlags.set(CHN_NOFX, bNoFx); + return true; } @@ -1320,53 +1304,49 @@ //-------------------------------------------------------------- { if ((nInstr < 1) || (nInstr > m_SndFile.GetNumInstruments()) || (!m_SndFile.Instruments[nInstr])) return false; - if (bMute) m_SndFile.Instruments[nInstr]->dwFlags |= INS_MUTE; - else m_SndFile.Instruments[nInstr]->dwFlags &= ~INS_MUTE; + m_SndFile.Instruments[nInstr]->dwFlags.set(INS_MUTE, bMute); return true; } -bool CModDoc::SurroundChannel(CHANNELINDEX nChn, bool bSurround) +bool CModDoc::SurroundChannel(CHANNELINDEX nChn, bool surround) //-------------------------------------------------------------- { - DWORD d = (bSurround ? CHN_SURROUND : 0); - - if (nChn >= m_SndFile.GetNumChannels()) return false; - if (!(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT))) d = 0; - if (d != (m_SndFile.ChnSettings[nChn].dwFlags & CHN_SURROUND)) + if(nChn >= m_SndFile.GetNumChannels()) return false; + + if(!(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT))) surround = false; + + if(surround != m_SndFile.ChnSettings[nChn].dwFlags[CHN_SURROUND]) { - if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); - if (d) + // Update channel configuration + if(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + + m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_SURROUND, surround); + if(surround) { - m_SndFile.ChnSettings[nChn].dwFlags |= CHN_SURROUND; m_SndFile.ChnSettings[nChn].nPan = 128; - } else - { - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SURROUND; } - } - if (d) + + // Update playing channel + m_SndFile.Chn[nChn].dwFlags.set(CHN_SURROUND, surround); + if(surround) { - m_SndFile.Chn[nChn].dwFlags |= CHN_SURROUND; m_SndFile.Chn[nChn].nPan = 128; - } else - { - m_SndFile.Chn[nChn].dwFlags &= ~CHN_SURROUND; } return true; } -bool CModDoc::SetChannelGlobalVolume(CHANNELINDEX nChn, UINT nVolume) -//------------------------------------------------------------------- +bool CModDoc::SetChannelGlobalVolume(CHANNELINDEX nChn, uint16 nVolume) +//--------------------------------------------------------------------- { bool bOk = false; if ((nChn >= m_SndFile.GetNumChannels()) || (nVolume > 64)) return false; if (m_SndFile.ChnSettings[nChn].nVolume != nVolume) { m_SndFile.ChnSettings[nChn].nVolume = nVolume; - if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); bOk = true; } m_SndFile.Chn[nChn].nGlobalVol = nVolume; @@ -1374,16 +1354,16 @@ } -bool CModDoc::SetChannelDefaultPan(CHANNELINDEX nChn, UINT nPan) -//-------------------------------------------------------------- +bool CModDoc::SetChannelDefaultPan(CHANNELINDEX nChn, uint16 nPan) +//---------------------------------------------------------------- { bool bOk = false; if ((nChn >= m_SndFile.GetNumChannels()) || (nPan > 256)) return false; if (m_SndFile.ChnSettings[nChn].nPan != nPan) { m_SndFile.ChnSettings[nChn].nPan = nPan; - m_SndFile.ChnSettings[nChn].dwFlags &= ~CHN_SURROUND; - if (m_SndFile.m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); + m_SndFile.ChnSettings[nChn].dwFlags.reset(CHN_SURROUND); + if (m_SndFile.GetType() & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); bOk = true; } m_SndFile.Chn[nChn].nPan = nPan; @@ -1395,7 +1375,7 @@ //--------------------------------------------------- { if (nChn >= m_SndFile.GetNumChannels()) return true; - return (m_SndFile.ChnSettings[nChn].dwFlags & CHN_MUTE) != 0; + return m_SndFile.ChnSettings[nChn].dwFlags[CHN_MUTE]; } @@ -1411,7 +1391,7 @@ //----------------------------------------------------------- { if ((!nInstr) || (nInstr > m_SndFile.GetNumInstruments()) || (!m_SndFile.Instruments[nInstr])) return false; - return (m_SndFile.Instruments[nInstr]->dwFlags & INS_MUTE) != 0; + return m_SndFile.Instruments[nInstr]->dwFlags[INS_MUTE]; } @@ -1574,7 +1554,7 @@ int nRenderPasses = 1; // Channel mode vector<bool> usedChannels; - vector<DWORD> channelFlags; + vector<ChannelFlags> channelFlags; // Instrument mode vector<bool> instrMuteState; @@ -1585,7 +1565,7 @@ CheckUsedChannels(usedChannels); nRenderPasses = m_SndFile.GetNumChannels(); - channelFlags.resize(nRenderPasses, 0); + channelFlags.resize(nRenderPasses, ChannelFlags(0)); for(CHANNELINDEX i = 0; i < m_SndFile.GetNumChannels(); i++) { // Save channels' flags @@ -1593,7 +1573,7 @@ // Ignore muted channels if(channelFlags[i] & CHN_MUTE) usedChannels[i] = false; // Mute each channel - m_SndFile.ChnSettings[i].dwFlags |= CHN_MUTE; + m_SndFile.ChnSettings[i].dwFlags.set(CHN_MUTE); } } // Instrument mode: Same as channel mode, but renders per instrument (or sample) @@ -1637,7 +1617,7 @@ if(wsdlg.m_bChannelMode) { // Re-mute previously processed channel - if(i > 0) m_SndFile.ChnSettings[i - 1].dwFlags |= CHN_MUTE; + if(i > 0) m_SndFile.ChnSettings[i - 1].dwFlags.set(CHN_MUTE); // Was this channel actually muted? Don't process it then. if(usedChannels[i] == false) @@ -1648,7 +1628,7 @@ else wsprintf(sFilenameAdd, "-%03d.wav", i + 1); // Unmute channel to process - m_SndFile.ChnSettings[i].dwFlags &= ~CHN_MUTE; + m_SndFile.ChnSettings[i].dwFlags.reset(CHN_MUTE); } // Instrument mode if(wsdlg.m_bInstrumentMode) @@ -1693,7 +1673,7 @@ // Render song (or current channel, or current sample/instrument) m_SndFile.visitedSongRows.Initialize(true); m_SndFile.SetCurrentPos(0); - m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; + m_SndFile.m_SongFlags.reset(SONG_PATTERNLOOP); if (wsdlg.m_bSelectPlay) { m_SndFile.SetCurrentOrder(wsdlg.m_nMinOrder); @@ -1779,7 +1759,7 @@ pMainFrm->PauseMod(); m_SndFile.SetCurrentPos(0); - m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; + m_SndFile.m_SongFlags.reset(SONG_PATTERNLOOP); // Saving file CFileTagging *pTag = (wsdlg.m_bSaveInfoField) ? &wsdlg.m_FileTags : NULL; @@ -1893,7 +1873,7 @@ } bool isPlaying = (pMainFrm->GetModPlaying() == this); - if ((isPlaying) && (!(m_SndFile.m_dwSongFlags & (SONG_PAUSED|SONG_STEP/*|SONG_PATTERNLOOP*/)))) + if(isPlaying && !m_SndFile.m_SongFlags[SONG_PAUSED | SONG_STEP/*|SONG_PATTERNLOOP*/]) { OnPlayerPause(); return; @@ -1903,7 +1883,7 @@ for(CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++) if (!m_SndFile.Chn[i].nMasterChn) { - m_SndFile.Chn[i].dwFlags |= (CHN_NOTEFADE|CHN_KEYOFF); + m_SndFile.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); if (!isPlaying) m_SndFile.Chn[i].nLength = 0; } @@ -1919,8 +1899,7 @@ cs.Leave(); - //m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED); - m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PAUSED|SONG_PATTERNLOOP); + m_SndFile.m_SongFlags.reset(SONG_STEP | SONG_PAUSED | SONG_PATTERNLOOP); pMainFrm->PlayMod(this, m_hWndFollow, m_dwNotifyType); } } @@ -1934,7 +1913,7 @@ { if (pMainFrm->GetModPlaying() == this) { - bool isLooping = (m_SndFile.m_dwSongFlags & SONG_PATTERNLOOP) != 0; + bool isLooping = m_SndFile.m_SongFlags[SONG_PATTERNLOOP]; UINT nPat = m_SndFile.m_nPattern; UINT nRow = m_SndFile.m_nRow; UINT nNextRow = m_SndFile.m_nNextRow; @@ -1996,8 +1975,7 @@ pMainFrm->PauseMod(); - //m_SndFile.m_dwSongFlags &= ~SONG_STEP; - m_SndFile.m_dwSongFlags &= ~(SONG_STEP|SONG_PATTERNLOOP); + m_SndFile.m_SongFlags.reset(SONG_STEP | SONG_PATTERNLOOP); m_SndFile.SetCurrentPos(0); m_SndFile.visitedSongRows.Initialize(true); pMainFrm->ResetElapsedTime(); @@ -2306,10 +2284,10 @@ pSndFile->Chn[i].nPatternLoopCount = 0; pSndFile->Chn[i].nPatternLoop = 0; pSndFile->Chn[i].nFadeOutVol = 0; - pSndFile->Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF; + pSndFile->Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } if ((nOrd < m_SndFile.Order.size()) && (pSndFile->Order[nOrd] == nPat)) pSndFile->m_nCurrentOrder = pSndFile->m_nNextOrder = nOrd; - pSndFile->m_dwSongFlags &= ~(SONG_PAUSED|SONG_STEP); + pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); pSndFile->LoopPattern(nPat); pSndFile->m_nNextRow = 0; @@ -2364,10 +2342,10 @@ // Cut instruments/samples for(CHANNELINDEX i = pSndFile->GetNumChannels(); i < MAX_CHANNELS; i++) { - pSndFile->Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF; + pSndFile->Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } if ((nOrd < m_SndFile.Order.size()) && (pSndFile->Order[nOrd] == nPat)) pSndFile->m_nCurrentOrder = pSndFile->m_nNextOrder = nOrd; - pSndFile->m_dwSongFlags &= ~(SONG_PAUSED|SONG_STEP); + pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); pSndFile->LoopPattern(nPat); pSndFile->m_nNextRow = nRow; @@ -2422,9 +2400,9 @@ // Cut instruments/samples for(CHANNELINDEX i = pSndFile->GetNumChannels(); i < MAX_CHANNELS; i++) { - pSndFile->Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF; + pSndFile->Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } - pSndFile->m_dwSongFlags &= ~(SONG_PAUSED|SONG_STEP); + pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); pSndFile->SetCurrentOrder(nOrd); if (pSndFile->Order[nOrd] == nPat) pSndFile->DontLoopPattern(nPat, nRow); @@ -2555,7 +2533,7 @@ switch(nNewType) { case MOD_TYPE_XM: newPath += ".xm"; break; - case MOD_TYPE_IT: newPath += m_SndFile.m_dwSongFlags & SONG_ITPROJECT ? ".itp" : ".it"; break; + case MOD_TYPE_IT: newPath += m_SndFile.m_SongFlags[SONG_ITPROJECT] ? ".itp" : ".it"; break; case MOD_TYPE_MPT: newPath += ".mptm"; break; case MOD_TYPE_S3M: newPath += ".s3m"; break; case MOD_TYPE_MOD: newPath += ".mod"; break; @@ -2565,8 +2543,8 @@ if(nNewType != MOD_TYPE_IT || (nNewType == MOD_TYPE_IT && ( - (!strcmp(ext, ".it") && (m_SndFile.m_dwSongFlags & SONG_ITPROJECT)) || - (!strcmp(ext, ".itp") && !(m_SndFile.m_dwSongFlags & SONG_ITPROJECT)) + (!strcmp(ext, ".it") && m_SndFile.m_SongFlags[SONG_ITPROJECT]) || + (!strcmp(ext, ".itp") && !m_SndFile.m_SongFlags[SONG_ITPROJECT]) ) ) ) @@ -2590,12 +2568,12 @@ { CHANNELINDEX nStoppedChannel = CHANNELINDEX_INVALID; // Search for available channel - for (CHANNELINDEX j = m_SndFile.m_nChannels; j < MAX_CHANNELS; j++) + for(CHANNELINDEX j = m_SndFile.m_nChannels; j < MAX_CHANNELS; j++) { ModChannel *p = &m_SndFile.Chn[j]; - if (!p->nLength) + if(!p->nLength) return j; - else if(p->dwFlags & CHN_NOTEFADE) + else if(p->dwFlags[CHN_NOTEFADE]) nStoppedChannel = j; } Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Moddoc.h 2012-07-14 22:15:55 UTC (rev 1327) @@ -260,8 +260,8 @@ bool IsChannelSolo(CHANNELINDEX nChn) const; // -! NEW_FEATURE#0012 bool SurroundChannel(CHANNELINDEX nChn, bool bSurround); - bool SetChannelGlobalVolume(CHANNELINDEX nChn, UINT nVolume); - bool SetChannelDefaultPan(CHANNELINDEX nChn, UINT nPan); + bool SetChannelGlobalVolume(CHANNELINDEX nChn, uint16 nVolume); + bool SetChannelDefaultPan(CHANNELINDEX nChn, uint16 nPan); bool IsChannelMuted(CHANNELINDEX nChn) const; bool IsSampleMuted(SAMPLEINDEX nSample) const; bool IsInstrumentMuted(INSTRUMENTINDEX nInstr) const; Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -246,7 +246,7 @@ for(CHANNELINDEX nChn = GetNumChannels(); nChn < MAX_BASECHANNELS; nChn++) { m_SndFile.InitChannel(nChn); - m_SndFile.Chn[nChn].dwFlags |= CHN_MUTE; + m_SndFile.Chn[nChn].dwFlags.set(CHN_MUTE); } return GetNumChannels(); @@ -760,7 +760,8 @@ } strcpy(s, pszEnvHdr); - wsprintf(s + strlen(s), pszEnvFmt, env.nNodes, env.nSustainStart, env.nSustainEnd, env.nLoopStart, env.nLoopEnd, (env.dwFlags & ENV_SUSTAIN) ? 1 : 0, (env.dwFlags & ENV_LOOP) ? 1 : 0, (env.dwFlags & ENV_CARRY) ? 1 : 0); + wsprintf(s + strlen(s), pszEnvFmt, env.nNodes, env.nSustainStart, env.nSustainEnd, env.nLoopStart, env.nLoopEnd, + env.dwFlags[ENV_SUSTAIN] ? 1 : 0, env.dwFlags[ENV_LOOP] ? 1 : 0, env.dwFlags[ENV_CARRY] ? 1 : 0); for (UINT i = 0; i < env.nNodes; i++) { if (strlen(s) >= sizeof(s)-32) break; @@ -825,7 +826,10 @@ env.nLoopStart = loopBegin; env.nLoopEnd = loopEnd; env.nReleaseNode = releaseNode; - env.dwFlags = (env.dwFlags & ~(ENV_LOOP|ENV_SUSTAIN|ENV_CARRY)) | (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0) | (nPoints > 0 ? ENV_ENABLED : 0); + env.dwFlags.set(ENV_LOOP, bLoop != 0); + env.dwFlags.set(ENV_SUSTAIN, bSus != 0); + env.dwFlags.set(ENV_CARRY, bCarry != 0); + env.dwFlags.set(ENV_ENABLED, nPoints > 0); int oldn = 0; for (UINT i=0; i<nPoints; i++) Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -1074,7 +1074,7 @@ if(pSndFile != nullptr) { nNewType = pSndFile->GetBestSaveFormat(); - bIsProject = ((pSndFile->m_dwSongFlags & SONG_ITPROJECT) != 0); + bIsProject = pSndFile->m_SongFlags[SONG_ITPROJECT]; } } Modified: trunk/OpenMPT/mptrack/PatternClipboard.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternClipboard.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/PatternClipboard.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -489,11 +489,24 @@ { case CMD_SPEED: case CMD_TEMPO: - if(!clipboardHasS3MCommands) m[col].command = (m[col].param < tempoMin) ? CMD_SPEED : CMD_TEMPO; - else + if(!clipboardHasS3MCommands) { - if ((m[col].command == CMD_SPEED) && (m[col].param >= tempoMin)) m[col].param = CMD_TEMPO; else - if ((m[col].command == CMD_TEMPO) && (m[col].param < tempoMin)) m[col].param = CMD_SPEED; + if(m[col].param < tempoMin) + { + m[col].command = CMD_SPEED; + } else + { + m[col].command = CMD_TEMPO; + } + } else + { + if(m[col].command == CMD_SPEED && m[col].param >= tempoMin) + { + m[col].param = CMD_TEMPO; + } else if(m[col].command == CMD_TEMPO && m[col].param < tempoMin) + { + m[col].param = CMD_SPEED; + } } break; } @@ -503,7 +516,16 @@ { case CMD_SPEED: case CMD_TEMPO: - if(!clipboardHasS3MCommands) m[col].command = (m[col].param < tempoMin) ? CMD_SPEED : CMD_TEMPO; + if(!clipboardHasS3MCommands) + { + if(m[col].param < tempoMin) + { + m[col].command = CMD_SPEED; + } else + { + m[col].command = CMD_TEMPO; + } + } break; } } @@ -545,7 +567,6 @@ } return success; - } Modified: trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp =================================================================== --- trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp 2012-07-14 18:18:48 UTC (rev 1326) +++ trunk/OpenMPT/mptrack/PatternEditorDialogs.cpp 2012-07-14 22:15:55 UTC (rev 1327) @@ -1708,8 +1708,8 @@ SetDlgItemInt(IDC_EDIT2, settings.nPan, FALSE); volSlider.SetPos(settings.nVolume); panSlider.SetPos(settings.nPan / 4u); - CheckDlgButton(IDC_CHECK1, (settings.dwFlags & CHN_MUTE) ? TRUE : FALSE); - CheckDlgButton(IDC_CHECK2, (settings.dwFlags & CHN_SURROUND) ? TRUE : FALSE); + CheckDlgButton(IDC_CHECK1, (settings.dwFlags[CHN_MUTE]) ? TRUE : FALSE); + CheckDlgButton(IDC_CHECK2, (settings.dwFlags[CHN_SURROUND]) ? TRUE : FALSE); char description[16]; sprintf(description, "Channel %d:", channel + 1); Modified: trunk/OpenMPT/mptrack/View_gen.cpp ===========================... [truncated message content] |