diff --git a/Branches/MusicMod/Common/Common.vcproj b/Branches/MusicMod/Common/Common.vcproj
new file mode 100644
index 0000000000..ee0fbb43e6
--- /dev/null
+++ b/Branches/MusicMod/Common/Common.vcproj
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Branches/MusicMod/Common/Src/Console.cpp b/Branches/MusicMod/Common/Src/Console.cpp
new file mode 100644
index 0000000000..0281ed7ad4
--- /dev/null
+++ b/Branches/MusicMod/Common/Src/Console.cpp
@@ -0,0 +1,142 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Include
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
+//#include
+#include
+//#include "stdafx.h"
+#include
+#include
+//#include
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Declarations and definitions
+// ŻŻŻŻŻŻŻŻŻŻ
+
+// Enable or disable logging to screen and file
+#define MM_DEBUG
+//#define MM_DEBUG_FILEONLY
+// ---------------------------------------------------------------------------------------
+
+// _T
+/*
+#ifdef _UNICODE
+#define _T(x) L ## x
+#else // _UNICODE
+#define _T(x) x
+#endif // _UNICODE
+
+To be used with
+ //wprintf(_T("Please enter a number:"));
+ //wprintf("Please enter a number");
+ //wprintf(L"Please enter a number");
+*/
+// ---------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------
+#ifdef MM_DEBUG
+ FILE* __fStdOut = NULL;
+#endif
+#ifndef MM_DEBUG_FILEONLY
+ HANDLE __hStdOut = NULL;
+#endif
+/////////////////////////////
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Start console window
+// ŻŻŻŻŻŻŻŻŻŻ
+// Width and height is the size of console window, if you specify fname,
+// the output will also be writton to this file. The file pointer is automatically closed
+// when you close the app
+//void startConsoleWin(int width=80, int height=2225, char* fname = NULL);
+void StartConsoleWin(int width, int height, char* fname)
+{
+#ifdef MM_DEBUG
+
+#ifndef MM_DEBUG_FILEONLY
+ // ---------------------------------------------------------------------------------------
+ // Allocate console
+ AllocConsole();
+ // ---------------------------------------------------------------------------------------
+
+ //SetConsoleTitle("Debug Window");
+ SetConsoleTitle(fname);
+ __hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
+
+ COORD co = {width,height};
+ SetConsoleScreenBufferSize(__hStdOut, co);
+
+ SMALL_RECT coo = {0,0, (width - 1),50}; // Top, left, right, bottom
+ SetConsoleWindowInfo(__hStdOut, TRUE, &coo);
+#endif
+
+ if(fname)
+ {
+ // Edit the log file name
+ std::string FileEnding = ".log";
+ std::string FileName = fname;
+ std::string FullFilename = (FileName + FileEnding);
+ __fStdOut = fopen(FullFilename.c_str(), "w");
+ }
+
+#endif
+}
+
+
+// Use wprintf like TRACE0, TRACE1, ... (The arguments are the same as printf)
+//int wprintf(char *fmt, ...)
+int wprintf(char *fmt, ...)
+{
+#ifdef MM_DEBUG
+ char s[300];
+ va_list argptr;
+ int cnt;
+
+ va_start(argptr, fmt);
+ cnt = vsprintf(s, fmt, argptr);
+ va_end(argptr);
+
+ DWORD cCharsWritten;
+
+ // ---------------------------------------------------------------------------------------
+#ifndef MM_DEBUG_FILEONLY
+ if(__hStdOut)
+ {
+ WriteConsole(__hStdOut, s, strlen(s), &cCharsWritten, NULL);
+ }
+#endif
+ // ---------------------------------------------------------------------------------------
+
+ if(__fStdOut)
+ {
+ fprintf(__fStdOut, s);
+ fflush(__fStdOut); // Write file now
+ }
+
+ return(cnt);
+#else
+ return 0;
+#endif
+}
\ No newline at end of file
diff --git a/Branches/MusicMod/Common/Src/Console.h b/Branches/MusicMod/Common/Src/Console.h
new file mode 100644
index 0000000000..8add97756b
--- /dev/null
+++ b/Branches/MusicMod/Common/Src/Console.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Declarations and definitions
+// ŻŻŻŻŻŻŻŻŻŻ
+void StartConsoleWin(int width, int height, char* fname);
+int wprintf(char *fmt, ...);
+//////////////////////////////////
+
+
diff --git a/Branches/MusicMod/Data/win32/Plainamp.ini b/Branches/MusicMod/Data/win32/Plainamp.ini
new file mode 100644
index 0000000000..d82f44952a
--- /dev/null
+++ b/Branches/MusicMod/Data/win32/Plainamp.ini
@@ -0,0 +1,40 @@
+[Plainamp]
+OutputPluginActive___out_ds.dll=1
+Volume=255
+Loop=1
+WinPlaceConsole=(1,(62,441,1179,845))
+WinPlaceMain=(1,(274,203,1005,765))
+MinimizeToTray=1
+Panning=0
+CurPresetFixed=-1
+PreventDistortion=1
+Order=3
+PlaylistFollow=1
+PlaylistEntryNumberZeroPadding=1
+CurPlaylistPosition=0
+InfinitePlaylist=0
+ManagerGrid=1
+WinPlaceManager=(1,(500,400,1000,700))
+OrderBand=(0,-2,0,1)
+EqBand=(1,-2,0,1)
+SeekBand=(2,-2,0,1)
+VolBand=(3,-2,0,1)
+PanBand=(4,-2,0,1)
+ButtonsBand=(5,134,0,1)
+VisBand=(6,134,0,1)
+InvertPanSlider=0
+CurDir=C:\
+WarnPluginsMissing=1
+[out_wave_gpl]
+config=14000000002400000100000000000000FFFFFFFF0100000036
+[out_ds]
+cfg_hw_mix=1
+cfg_buf_ms=2000
+cfg_trackhack=0
+cfg_prebuf2=500
+cfg_fade_seek.on=0
+cfg_fade_pause.on=0
+cfg_fadevol=0
+cfg_wait=0
+[Interface]
+ShowConsole = False
diff --git a/Branches/MusicMod/Data/win32/PluginsMusic/in_vgmstream.dll b/Branches/MusicMod/Data/win32/PluginsMusic/in_vgmstream.dll
new file mode 100644
index 0000000000..f54a9f9e62
Binary files /dev/null and b/Branches/MusicMod/Data/win32/PluginsMusic/in_vgmstream.dll differ
diff --git a/Branches/MusicMod/Data/win32/PluginsMusic/out_ds.dll b/Branches/MusicMod/Data/win32/PluginsMusic/out_ds.dll
new file mode 100644
index 0000000000..501049b1f7
Binary files /dev/null and b/Branches/MusicMod/Data/win32/PluginsMusic/out_ds.dll differ
diff --git a/Branches/MusicMod/Data/win32/PluginsMusic/out_wave_gpl.dll b/Branches/MusicMod/Data/win32/PluginsMusic/out_wave_gpl.dll
new file mode 100644
index 0000000000..1f2c9f3b4f
Binary files /dev/null and b/Branches/MusicMod/Data/win32/PluginsMusic/out_wave_gpl.dll differ
diff --git a/Branches/MusicMod/Data/x64/Plainamp.ini b/Branches/MusicMod/Data/x64/Plainamp.ini
new file mode 100644
index 0000000000..b1a908bd6d
--- /dev/null
+++ b/Branches/MusicMod/Data/x64/Plainamp.ini
@@ -0,0 +1,29 @@
+[Plainamp]
+OutputPluginActive___out_wave_gpl.dll=1
+Volume=100
+Loop=1
+WinPlaceConsole=(1,(62,441,1179,845))
+WinPlaceMain=(1,(274,203,1005,765))
+MinimizeToTray=1
+Panning=0
+CurPresetFixed=-1
+PreventDistortion=1
+Order=3
+PlaylistFollow=1
+PlaylistEntryNumberZeroPadding=1
+CurPlaylistPosition=0
+InfinitePlaylist=1
+ManagerGrid=1
+WinPlaceManager=(1,(500,400,1000,700))
+OrderBand=(0,-2,0,1)
+EqBand=(1,-2,0,1)
+SeekBand=(2,-2,0,1)
+VolBand=(3,-2,0,1)
+PanBand=(4,-2,0,1)
+ButtonsBand=(5,134,0,1)
+VisBand=(6,134,0,1)
+InvertPanSlider=0
+CurDir=C:\
+WarnPluginsMissing=1
+[out_wave_gpl]
+config=14000000002400000100000000000000FFFFFFFF0100000036
diff --git a/Branches/MusicMod/Data/x64/PluginsMusic/in_vgmstream.dll b/Branches/MusicMod/Data/x64/PluginsMusic/in_vgmstream.dll
new file mode 100644
index 0000000000..bf2af34f79
Binary files /dev/null and b/Branches/MusicMod/Data/x64/PluginsMusic/in_vgmstream.dll differ
diff --git a/Branches/MusicMod/Data/x64/PluginsMusic/out_wave_gpl.dll b/Branches/MusicMod/Data/x64/PluginsMusic/out_wave_gpl.dll
new file mode 100644
index 0000000000..da0ccab700
Binary files /dev/null and b/Branches/MusicMod/Data/x64/PluginsMusic/out_wave_gpl.dll differ
diff --git a/Branches/MusicMod/Main/Main.vcproj b/Branches/MusicMod/Main/Main.vcproj
new file mode 100644
index 0000000000..46988cfd9a
--- /dev/null
+++ b/Branches/MusicMod/Main/Main.vcproj
@@ -0,0 +1,294 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Branches/MusicMod/Main/Src/Frame.cpp b/Branches/MusicMod/Main/Src/Frame.cpp
new file mode 100644
index 0000000000..7fb08aff3e
--- /dev/null
+++ b/Branches/MusicMod/Main/Src/Frame.cpp
@@ -0,0 +1,454 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Include
+// ŻŻŻŻŻŻŻŻŻŻ
+#include // System
+
+#include "Core.h" // Core
+
+#include "IniFile.h" // Common
+
+#include "../../../../Source/Core/DolphinWX/Src/Globals.h" // DolphinWX
+#include "../../../../Source/Core/DolphinWX/Src/Frame.h"
+
+#include "../../Common/Console.h" // Local
+#include "../../Player/Src/PlayerExport.h" // Player
+//////////////////////////////////
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Declarations and definitions
+// ŻŻŻŻŻŻŻŻŻŻ
+namespace MusicMod
+{
+ bool GlobalMute = false;
+ bool GlobalPause = false;
+ bool bShowConsole = false;
+ int GlobalVolume = 255;
+ extern bool dllloaded;
+}
+//////////////////////////////////
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Change the brightness of a wxBitmap
+// ŻŻŻŻŻŻŻŻŻŻ
+wxBitmap SetBrightness(wxBitmap _Bitmap, int _Brightness, bool Gray)
+{
+ wxImage _Image = _Bitmap.ConvertToImage();
+ wxImage _Image2 = _Bitmap.ConvertToImage();
+
+ wxString Tmp;
+
+ if(_Brightness < 0) _Brightness = 0; // Limits
+ if(_Brightness > 255) _Brightness = 255;
+
+ _Brightness = 255 - _Brightness; // Make big values brighter
+
+ // Remove the alpha layer first
+ for(int y = 0; y < _Bitmap.GetWidth(); y++)
+ {
+ for(int x = 0; x < _Bitmap.GetHeight(); x++)
+ _Image.SetAlpha(x, y, 255);
+ }
+
+ for(int y = 0; y < _Bitmap.GetWidth(); y++)
+ {
+ //Tmp += wxString::Format("\n %i: ", y);
+
+ for(int x = 0; x < _Bitmap.GetHeight(); x++)
+ {
+ u8 R = _Image.GetRed(x, y); // Get colors
+ u8 G = _Image.GetGreen(x, y);
+ u8 B = _Image.GetBlue(x, y);
+
+ //if((x == 5 | x == 6) && y == 15) Tmp += wxString::Format("%03i %03i %03i", R, G, B);
+
+ if(_Brightness > 128)
+ {
+ int Bright = _Brightness - 128;
+ R = R - Bright * (R - 0) / 128;
+ G = G - Bright * (G - 0) / 128;
+ B = B - Bright * (B - 0) / 128;
+
+ // 118 - 72 * 118 / 128 = 118 - 66.3 = 52
+ // 119 - = 119 - 66.9 = 52
+ }
+ else
+ {
+ int Bright = 128 - _Brightness;
+ R = R - Bright * (R - 255) / 128;
+ G = G - Bright * (G - 255) / 128;
+ B = B - Bright * (B - 255) / 128;
+ }
+
+ //if((x == 5 | x == 6) && y == 15) Tmp += wxString::Format(" %03i %03i %03i | ", R, G, B);
+
+ _Image.SetRGB(x, y, R, G, B);
+ }
+ }
+ // Return the alpha
+ _Image.SetAlpha(_Image2.GetAlpha(), true);
+
+ // Update the bitmap
+ if(Gray)
+ return wxBitmap(_Image.ConvertToGreyscale());
+ else
+ return wxBitmap(_Image);
+
+ //wxMessageBox(Tmp);
+}
+//////////////////////////////////
+
+
+void ShowConsole()
+{
+ StartConsoleWin(100, 2000, "Console"); // Give room for 2000 rows
+}
+
+#ifdef MUSICMOD
+void
+CFrame::MM_InitBitmaps()
+{
+ // Gray version
+
+ //m_Bitmaps[Toolbar_PluginDSP_Dis] = wxBitmap(SetBrightness(m_Bitmaps[Toolbar_PluginDSP], 165, true));
+ m_Bitmaps[Toolbar_PluginDSP_Dis] = wxBitmap(SetBrightness(m_Bitmaps[Toolbar_PluginDSP], 165, true));
+ m_Bitmaps[Toolbar_Log_Dis] = wxBitmap(SetBrightness(m_Bitmaps[Toolbar_Log], 165, true));
+}
+
+
+
+void
+CFrame::MM_PopulateGUI()
+{
+ // ---------------------------------------
+ // Load config
+ // ---------------------
+ IniFile file;
+ file.Load("Plainamp.ini");
+ file.Get("Interface", "ShowConsole", &MusicMod::bShowConsole, false);
+ // -------
+
+
+ // ---------------------------------------
+ // Make a debugging window
+ // ---------------------
+ if(MusicMod::bShowConsole) ShowConsole();
+
+ // Write version
+ #ifdef _M_X64
+ wprintf("64 bit version\n");
+ #else
+ wprintf("32 bit version\n");
+ #endif
+ // -----------
+
+
+ wxToolBar* toolBar = theToolBar; // Shortcut
+
+ toolBar->AddSeparator();
+
+
+ // ---------------------------------------
+ // Draw a rotated music label
+ // ---------------------
+ wxBitmap m_RotatedText(30, 15);
+ wxMemoryDC dc;
+ dc.SelectObject(m_RotatedText);
+ wxBrush BackgroundGrayBrush(_T("#ece9d8")); // The right color in windows
+
+ // Set outline and fill colors
+ dc.SetBackground(BackgroundGrayBrush);
+ dc.Clear();
+
+ wxFont m_font(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
+ dc.SetFont(m_font);
+ dc.SetTextForeground(wxColour(*wxLIGHT_GREY));
+
+ dc.DrawText(wxT("Music"), 0, 0);
+ m_RotatedText = wxBitmap(m_RotatedText.ConvertToImage().Rotate90(false));
+
+ wxStaticBitmap * m_StaticBitmap = new wxStaticBitmap(toolBar, wxID_ANY, m_RotatedText);
+
+ toolBar->AddControl(m_StaticBitmap);
+ // ---------------------------
+
+
+
+ mm_ToolMute = toolBar->AddTool(IDM_MUTE, _T("Mute"), m_Bitmaps[Toolbar_Play], _T("Mute music"));
+ mm_ToolPlay = toolBar->AddTool(IDM_MUSIC_PLAY, _T("Play"), m_Bitmaps[Toolbar_Play], _T("Play or pause music without pausing the game"));
+
+ // This cause the disabled tool bitmap to become some kind of monochrome version
+ /*
+ mm_ToolMute = new wxToolBarToolBase(toolBar, IDM_MUTE, _T("Mute"), m_Bitmaps[Toolbar_PluginDSP],
+ m_Bitmaps[Toolbar_PluginDSP], wxITEM_CHECK, 0, _T("Mute music"));
+ toolBar->AddTool(mm_ToolMute);
+
+ mm_ToolPlay = new wxToolBarToolBase(toolBar, IDM_MUSIC_PLAY, _T("Play"), m_Bitmaps[Toolbar_Play],
+ m_Bitmaps[Toolbar_Play], wxITEM_NORMAL, 0, _T("Play or pause music without pausing the game"));
+ toolBar->AddTool(mm_ToolPlay);
+ */
+
+
+ // ---------------------
+ /* Lots of code to get a label for the slider, in 2.9.0 AddControl accepts a label so then
+ this code can be simplified a lot */
+ // ---------
+ wxPanel * mm_SliderPanel = new wxPanel(toolBar, IDS_VOLUME_PANEL, wxDefaultPosition, wxDefaultSize);
+ wxSlider * mm_Slider = new wxSlider(mm_SliderPanel, IDS_VOLUME, 125, 0, 255, wxDefaultPosition, wxDefaultSize);
+ //m_Slider->SetToolTip("Change the music volume");
+ wxStaticText * mm_SliderText = new wxStaticText(mm_SliderPanel, IDS_VOLUME_LABEL, _T("Volume"), wxDefaultPosition, wxDefaultSize);
+ wxBoxSizer * mm_VolSizer = new wxBoxSizer(wxVERTICAL);
+ mm_VolSizer->Add(mm_Slider, 0, wxEXPAND | wxALL, 0);
+ mm_VolSizer->Add(mm_SliderText, 0, wxCENTER | wxALL, 0);
+
+ mm_SliderPanel->SetSizer(mm_VolSizer);
+ mm_SliderPanel->SetSize(mm_VolSizer->GetMinSize().GetWidth(), mm_VolSizer->GetMinSize().GetHeight());
+
+ toolBar->AddControl((wxControl*)mm_SliderPanel);
+ // ---------
+
+ mm_ToolLog = toolBar->AddTool(IDT_LOG, _T("Log"), m_Bitmaps[Toolbar_Log], _T("Show or hide log"));
+}
+
+
+void
+CFrame::MM_UpdateGUI()
+{
+ // ---------------------------------------------------------------------------------------
+ if(MusicMod::GlobalMute)
+ {
+ //m_pMenuItemMute->SetText(_T("Play"));
+ //GetToolBar()->SetToolNormalBitmap(IDM_MUTE, m_Bitmaps[Toolbar_Pause]);
+ mm_ToolMute->SetLabel("Unmute");
+ mm_ToolMute->SetNormalBitmap(m_Bitmaps[Toolbar_PluginDSP_Dis]);
+ //m_ToolMute->SetToggle(true);
+ }
+ else
+ {
+ //GetToolBar()->SetToolNormalBitmap(IDM_MUTE, m_Bitmaps[Toolbar_PluginDSP]);
+ mm_ToolMute->SetLabel("Mute");
+ mm_ToolMute->SetNormalBitmap(m_Bitmaps[Toolbar_PluginDSP]);
+ }
+
+ if(MusicMod::GlobalPause)
+ {
+ //GetToolBar()->SetToolNormalBitmap(IDM_PAUSE, m_Bitmaps[Toolbar_Pause]);
+ mm_ToolPlay->SetLabel("Play");
+ mm_ToolPlay->SetNormalBitmap(m_Bitmaps[Toolbar_Play]);
+ }
+ else
+ {
+ //GetToolBar()->SetToolNormalBitmap(IDM_PAUSE, m_Bitmaps[Toolbar_PluginDSP]);
+ mm_ToolPlay->SetLabel("Pause");
+ mm_ToolPlay->SetNormalBitmap(m_Bitmaps[Toolbar_Pause]);
+ }
+
+ if(MusicMod::bShowConsole)
+ {
+ mm_ToolLog->SetNormalBitmap(m_Bitmaps[Toolbar_Log]);
+ }
+ else
+ {
+ mm_ToolLog->SetNormalBitmap(m_Bitmaps[Toolbar_Log_Dis]);
+ }
+ // ---------------------------------------------------------------------------------------
+}
+
+
+
+
+void
+CFrame::MM_OnPlay()
+{
+ //MessageBox(0, "CFrame::OnPlay > Begin", "", 0);
+ wprintf("\nCFrame::OnPlayMusicMod > Begin\n");
+
+
+ if (Core::GetState() != Core::CORE_UNINITIALIZED)
+ {
+ if (Core::GetState() == Core::CORE_RUN)
+ {
+ wprintf("CFrame::OnPlayMusicMod > Pause\n");
+ if(!MusicMod::GlobalPause) // we may has set this elsewhere
+ {
+ MusicMod::GlobalPause = true;
+ if (MusicMod::dllloaded)
+ {
+ Player_Pause();
+ }
+
+ }
+ }
+ else
+ {
+ wprintf("CFrame::OnPlayMusicMod > Play\n");
+ if(MusicMod::GlobalPause) // we may has set this elsewhere
+ {
+ MusicMod::GlobalPause = false;
+ if (MusicMod::dllloaded)
+ {
+ Player_Unpause();
+ }
+ }
+ }
+ }
+
+}
+
+
+
+// =======================================================================================
+// Mute music
+// ---------------------------------------------------------------------------------------
+void
+CFrame::MM_OnMute(wxCommandEvent& WXUNUSED (event))
+{
+ wprintf("CFrame::OnMute > Begin\n");
+ //MessageBox(0, "", "", 0);
+
+ if(!MusicMod::GlobalMute)
+ {
+ if(MusicMod::dllloaded) // avoid crash
+ {
+ Player_Mute();
+ }
+
+ MusicMod::GlobalMute = true;
+ //m_ToolMute->Enable(false);
+ //GetToolBar()->EnableTool(IDT_LOG, false);
+ UpdateGUI();
+ }
+ else
+ {
+ if(MusicMod::dllloaded) // avoid crash
+ {
+ Player_Mute();
+ }
+ MusicMod::GlobalMute = false;
+ //m_ToolMute->Enable(true);
+ UpdateGUI();
+ }
+}
+// =======================================================================================
+
+
+// =======================================================================================
+// Pause music
+// ---------------------------------------------------------------------------------------
+void
+CFrame::MM_OnPause(wxCommandEvent& WXUNUSED (event))
+{
+ wprintf("CFrame::OnPause > Begin\n");
+ //MessageBox(0, "", "", 0);
+
+ if(!MusicMod::GlobalPause)
+ {
+ if(MusicMod::dllloaded) // avoid crash
+ {
+ Player_Pause();
+ }
+ MusicMod::GlobalPause = true;
+ UpdateGUI();
+ }
+ else
+ {
+ if(MusicMod::dllloaded) // avoid crash
+ {
+ Player_Pause();
+ }
+ MusicMod::GlobalPause = false;
+ UpdateGUI();
+ }
+}
+
+
+
+
+// =======================================================================================
+// Change volume
+// ---------------------------------------------------------------------------------------
+void CFrame::MM_OnVolume(wxScrollEvent& event)
+{
+ //wprintf("CFrame::OnVolume > Begin <%i>\n", event.GetPosition());
+ //MessageBox(0, "", "", 0);
+
+ //if(event.GetEventType() == wxEVT_SCROLL_PAGEUP || event.GetEventType() == wxEVT_SCROLL_PAGEDOWN)
+ // return;
+
+ if(MusicMod::dllloaded) // avoid crash
+ {
+
+ Player_Volume(event.GetPosition());
+ MusicMod::GlobalVolume = event.GetPosition();
+
+ MusicMod::GlobalMute = false; // Unmute to
+ mm_ToolMute->Toggle(false);
+
+ if(event.GetEventType() == wxEVT_SCROLL_CHANGED)
+ {
+ // Only update this on release, to avoid major flickering when changing volume
+ UpdateGUI();
+
+ /* Use this to avoid that the focus get stuck on the slider when the main
+ window has been replaced */
+ this->SetFocus();}
+
+ }
+}
+//=======================================================================================
+
+
+
+// =======================================================================================
+// Show log
+// ---------------------------------------------------------------------------------------
+void CFrame::MM_OnLog(wxCommandEvent& event)
+{
+ //wprintf("CFrame::OnLog > Begin\n");
+ //MessageBox(0, "", "", 0);
+
+ if(MusicMod::dllloaded) // Avoid crash
+ {
+ }
+
+ MusicMod::bShowConsole = !MusicMod::bShowConsole;
+
+ if(MusicMod::bShowConsole)
+ { ShowConsole(); Player_Console(true); }
+ else
+ {
+ #if defined (_WIN32)
+ FreeConsole(); Player_Console(false);
+ #endif
+ }
+
+ IniFile file;
+ file.Load("Plainamp.ini");
+ file.Set("Interface", "ShowConsole", MusicMod::bShowConsole);
+ file.Save("Plainamp.ini");
+
+ UpdateGUI();
+}
+//=======================================================================================
+#endif // MUSICMOD
diff --git a/Branches/MusicMod/Main/Src/Main.cpp b/Branches/MusicMod/Main/Src/Main.cpp
new file mode 100644
index 0000000000..8452833ddf
--- /dev/null
+++ b/Branches/MusicMod/Main/Src/Main.cpp
@@ -0,0 +1,283 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Include
+// ŻŻŻŻŻŻŻŻŻŻ
+#include
+#include
+#include
+#include
+
+#include "PowerPC/PowerPc.h" // Core
+
+#include "../../../../Source/Core/DiscIO/Src/FileSystemGCWii.h" // This file has #include "Filesystem.h"
+#include "../../../../Source/Core/DiscIO/Src/VolumeCreator.h"
+
+#include "../../Player/Src/PlayerExport.h" // Local player
+#include "../../Common/Console.h" // Local common
+//////////////////////////////////
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Declarations and definitions
+// ŻŻŻŻŻŻŻŻŻŻ
+namespace MusicMod
+{
+
+struct MyFilesStructure
+{
+ std::string path;
+ int offset; // Is int enough, how high does offset go?
+};
+
+std::vector MyFiles;
+void StructSort (std::vector &MyFiles);
+
+
+// Playback
+std::string currentfile;
+std::string unique_gameid;
+
+std::string MusicPath;
+
+DiscIO::CFileSystemGCWii* my_pFileSystem;
+
+extern bool bShowConsole;
+int WritingFile = false;
+bool dllloaded = false;
+std::string CurrentPlayFile;
+//////////////////////////////////
+
+
+
+// ---------------------------------------------------------------------------------------
+// A function to sort the filelist table after offset
+void StructSort (std::vector &MyFiles)
+{
+ MyFilesStructure temp;
+
+ //wprintf("StructSort > Begin\n");
+
+ for(int i = 0; i < MyFiles.size() - 1; i++)
+ {
+ for (int j = i + 1; j < MyFiles.size(); j++)
+ {
+ //if (printerStock[ i ].brand > printerStock[ j ].brand) //comparing brands
+ if (MyFiles[ i ].offset > MyFiles[ j ].offset) //comparing cost
+ {
+ temp = MyFiles[ i ]; // Swapping entire struct
+ MyFiles[ i ] = MyFiles[ j ];
+ MyFiles[ j ] = temp;
+ }
+ }
+ }
+
+
+ for (long i=1; i<(long)MyFiles.size(); ++i)
+ {
+ //cout << printerStock.at(i).brand.c_str() << printerStock.at(i).cost << "\n";
+ std::cout << i << " " << MyFiles[i].path.c_str() << "#" << MyFiles[i].offset << "\n";
+ }
+
+ //wprintf("StructSort > Done\n");
+}
+
+
+
+// =======================================================================================
+/* This will load Plainamp.dll. It's the original Plainamp.exe with removed GUI and some small
+ modifications. */
+void Main(std::string FileName)
+{
+ //
+ DiscIO::IVolume* pVolume = DiscIO::CreateVolumeFromFilename(FileName.c_str());
+
+ //
+ my_pFileSystem = new DiscIO::CFileSystemGCWii(pVolume);
+
+ /* We have to sort the files according to offset so that out scan in Blob.cpp works.
+ Because StructSort() only works for MyFilesStructure I copy the offset and filenames
+ to a new vetor first. */
+ MyFiles.resize(my_pFileSystem->m_FileInfoVector.size()); // Set size
+ for (size_t i = 0; i < my_pFileSystem->m_FileInfoVector.size(); i++)
+ {
+ MyFiles.at(i).offset = my_pFileSystem->m_FileInfoVector.at(i).m_Offset;
+ MyFiles.at(i).path = my_pFileSystem->m_FileInfoVector.at(i).m_FullPath;
+ }
+
+ StructSort(MyFiles);
+
+ // These things below will not need to be updated after a new game is started
+ if (dllloaded) return;
+
+ Player_Main(bShowConsole); // Call the DLL for the first time
+ //play_file("c:\\demo36_02.ast");
+ wprintf("DLL loaded\n");
+ dllloaded = true; // Do this once
+
+
+ // ---------------------------------------------------------------------------------------
+ // Make Music directory
+ LPSECURITY_ATTRIBUTES attr;
+ attr = NULL;
+ MusicPath = "Music\\";
+ wprintf("Created a Music directory\n");
+ CreateDirectory(MusicPath.c_str(), attr);
+ // ----------------------------------------------------------------------------------------
+}
+
+
+// =======================================================================================
+// Supported music files
+// ---------------------------------------------------------------------------------------
+bool CheckFileEnding(std::string FileName)
+{
+ if (
+ (FileName.find(".adp") != std::string::npos) // 1080 Avalanche, Crash Bandicoot etc
+ || (FileName.find(".afc") != std::string::npos) // Zelda WW
+ || (FileName.find(".ast") != std::string::npos) // Zelda TP, Mario Kart
+ || (FileName.find(".dsp") != std::string::npos) // Metroid Prime
+ || (FileName.find(".hps") != std::string::npos) // SSB Melee
+ )
+ return true;
+}
+// =======================================================================================
+
+
+
+// =======================================================================================
+//
+void CheckFile(u64 offset, u64 size)
+{
+ // =======================================================================================
+ /* Only do this test:
+ 1. After boot, not on ISO scan
+ 2. Not if offset = 0.
+ 3. Not when WritingFile. We will lead to calls back to here (Read) and it will mess
+ upp the scanning */
+ if(PowerPC::state == PowerPC::CPUState::CPU_RUNNING && offset != 0 && !WritingFile)
+ {
+
+
+ //////////////////////////////////////////////////////////////////////////////////////////
+ /* Get the filename. Here we go through all files until we come to the file that has
+ the matching offset. Before MyFiles has data this loop will go nowhere. We have to
+ specify (MyFiles.size() - 1) because we will be reading MyFiles.at(i + 1).
+ MyFiles.size() is the amount of files on the disc, and the last file is
+ MyFiles.at(MyFiles.size() - 1) */
+ // ---------------------------------------------------------------------------------------
+ for (int i = 0; i < (int)(MyFiles.size() - 1); ++i)
+ {
+ // ---------------------------------------------------------------------------------------
+ /* If we assume that myoffset is the begginning of every file this works.
+ Suppose there are three files
+ 1 is 0 to 149
+ 2 is 150 to 170
+ 3 is 171 to 200
+ If the offset is 160 the game is reading file number two, for example
+ myoffset = 150: (myoffset >= offset) == false
+ myoffset = 171: (myoffset >= offset) == true, break
+
+ However if the offset is 195 the game is reading the last file and we will get
+ myoffset = 171: (myoffset >= offset) == false
+ we therefore need to add the condition (offset > MyFiles[MyFiles.size() - 1].offset)
+ to. */
+ if (MyFiles[i + 1].offset >= offset || offset > MyFiles[MyFiles.size() - 1].offset)
+ {
+ // Now we know that the game is reading from MyFiles[i].path
+
+ // Break if we found the same file again
+ if (currentfile == MyFiles[i].path) break;
+
+ //wprintf(">>>> (%i)Current read %s <%u = %ux%i> \n", i, CurrentFiles[i].path.c_str(), offset, CurrentFiles[i].offset, size);
+
+ if (CheckFileEnding(MyFiles[i].path.c_str()))
+ {
+ //u64 myoffset2 = (u32)offset;
+ wprintf("\n >>> (%i/%i) Match %s <%u = %ux%i> \n\n", i,
+ MyFiles.size(), MyFiles[i].path.c_str(), offset, MyFiles[i].offset, size);
+ //wprintf(">>>> [i + 1].offset %i", MyFiles[i + 1].offset);
+ currentfile = MyFiles[i].path; // save the found file
+
+ // ---------------------------------------------------------------------------------------
+ // We will now save the file to the PC hard drive
+ // ---------------------------------------------------------------------------------------
+ // Get the filename
+ std::size_t pointer = MyFiles[i].path.find_last_of("\\");
+ std::string fragment = MyFiles[i].path.substr (0, (pointer-0));
+ int compare = MyFiles[i].path.length() - fragment.length(); // get the length of the filename
+ fragment = MyFiles[i].path.substr ((pointer+1), compare); // now we have the filename
+
+ // ---------------------------------------------------------------------------------------
+ // Create the file path
+ std::string FilePath = (MusicPath + fragment);
+ // ---------------------------------------------------------------------------------------
+ WritingFile = true; // Avoid detecting the file we are writing
+ wprintf("Writing <%s> to <%s>\n", MyFiles[i].path.c_str(), FilePath.c_str());
+ my_pFileSystem->ExportFile(MyFiles[i].path.c_str(), FilePath.c_str());
+ WritingFile = false;
+
+ // ---------------------------------------------------------------------------------------
+ // Play the file we found
+ if(dllloaded)
+ {
+ Player_Play((char*)FilePath.c_str()); // retype it from const char* to char*
+ } else {
+ wprintf("Warning > Music DLL is not loaded");
+ }
+
+ // ---------------------------------------------------------------------------------------
+ // Remove the last file, if any
+ if(CurrentPlayFile.length() > 0)
+ {
+ if(!remove(CurrentPlayFile.c_str()))
+ {
+ wprintf("The program failed to remove <%s>\n", CurrentPlayFile.c_str());
+ } else {
+ wprintf("The program removed <%s>\n", CurrentPlayFile.c_str());
+ }
+ }
+
+ // ---------------------------------------------------------------------------------------
+ // Save the current playing file
+ CurrentPlayFile = FilePath; // Save the filename so we can remove it later
+ break;
+ // ---------------------------------------------------------------------------------------
+
+ }
+
+ // ---------------------------------------------------------------------------------------
+ // Tell about the files we ignored
+ wprintf("(%i/%i) Ignored %s <%u = %ux%i> \n", i, MyFiles.size(), MyFiles[i].path.c_str(), offset, MyFiles[i].offset, size);
+ currentfile = MyFiles[i].path;
+ break;
+ // ---------------------------------------------------------------------------------------
+ }
+ }
+
+ //wprintf("Blob.cpp:Read <%i> <%i> <%i> <%i>\n", offset, size, out_ptr);
+ } // This ends the entire filescan
+ // =======================================================================================
+
+
+
+}
+
+} // end of namespace
\ No newline at end of file
diff --git a/Branches/MusicMod/Main/Src/Main.h b/Branches/MusicMod/Main/Src/Main.h
new file mode 100644
index 0000000000..69a9040834
--- /dev/null
+++ b/Branches/MusicMod/Main/Src/Main.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+#include // System: For std
+
+#include "Common.h" // Common: For u64
+
+
+namespace MusicMod
+{
+
+void Main(std::string FileName);
+void CheckFile(u64 offset, u64 size);
+
+
+}
\ No newline at end of file
diff --git a/Branches/MusicMod/Main/Src/Setup.h b/Branches/MusicMod/Main/Src/Setup.h
new file mode 100644
index 0000000000..a1b7f2118f
--- /dev/null
+++ b/Branches/MusicMod/Main/Src/Setup.h
@@ -0,0 +1,23 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+////////////////////////////////////////////////////////////////////////////////////////
+// Build with music modification
+// ŻŻŻŻŻŻŻŻŻ
+#define MUSICMOD
+//////////////////////////
\ No newline at end of file
diff --git a/Branches/MusicMod/Player/Src/Config.cpp b/Branches/MusicMod/Player/Src/Config.cpp
index fcfee0bf63..bc978172ba 100644
--- a/Branches/MusicMod/Player/Src/Config.cpp
+++ b/Branches/MusicMod/Player/Src/Config.cpp
@@ -34,6 +34,10 @@ ConfVar::ConfVar( TCHAR * szKey, ConfMode mode )
{
// MessageBox( 0, TEXT( "no const @ ConfVar" ), TEXT( "" ), 0 );
+ // ---------------------------------------------------------------------------------------
+ //wprintf("ConfVar::ConfVar(TCHAR) > Got <%s>\n", szKey);
+ // ---------------------------------------------------------------------------------------
+
// Init
const int iLen = ( int )_tcslen( szKey );
m_szKey = new TCHAR[ iLen + 1 ];
@@ -57,6 +61,10 @@ ConfVar::ConfVar( TCHAR * szKey, ConfMode mode )
////////////////////////////////////////////////////////////////////////////////
ConfVar::ConfVar( const TCHAR * szKey, ConfMode mode )
{
+ // ---------------------------------------------------------------------------------------
+ //wprintf("ConfVar::ConfVar(const TCHAR) > Got <%s>\n", szKey);
+ // ---------------------------------------------------------------------------------------
+
// Init
m_szKey = ( TCHAR * )szKey;
@@ -68,6 +76,11 @@ ConfVar::ConfVar( const TCHAR * szKey, ConfMode mode )
// Register
if( !conf_map ) conf_map = new map;
conf_map->insert( pair( m_szKey, this ) );
+
+ // ---------------------------------------------------------------------------------------
+ //wprintf("ConfVar::ConfVar(const TCHAR) > Insert <%s>\n", ConfVar::m_szKey);
+ // ---------------------------------------------------------------------------------------
+
}
@@ -82,6 +95,8 @@ ConfVar::~ConfVar()
+// =======================================================================================
+// The line name is collected in ConfVar, then ConfBool gets the boolean
////////////////////////////////////////////////////////////////////////////////
///
////////////////////////////////////////////////////////////////////////////////
@@ -89,11 +104,16 @@ ConfBool::ConfBool( bool * pbData, TCHAR * szKey, ConfMode mode, bool bDefault )
{
// MessageBox( 0, TEXT( "no const @ ConfBool" ), TEXT( "" ), 0 );
+ // ---------------------------------------------------------------------------------------
+ wprintf("ConfBool(TCHAR) > Get <%s>\n", szKey);
+ // ---------------------------------------------------------------------------------------
+
m_pbData = pbData;
m_bDefault = bDefault;
// *pbData = bDefault;
}
+// =======================================================================================
@@ -102,6 +122,10 @@ ConfBool::ConfBool( bool * pbData, TCHAR * szKey, ConfMode mode, bool bDefault )
////////////////////////////////////////////////////////////////////////////////
ConfBool::ConfBool( bool * pbData, const TCHAR * szKey, ConfMode mode, bool bDefault ) : ConfVar( szKey, mode )
{
+ // ---------------------------------------------------------------------------------------
+ wprintf("ConfBool(TCHAR) > Get <%s>\n", szKey);
+ // ---------------------------------------------------------------------------------------
+
m_pbData = pbData;
m_bDefault = bDefault;
@@ -115,6 +139,8 @@ ConfBool::ConfBool( bool * pbData, const TCHAR * szKey, ConfMode mode, bool bDef
////////////////////////////////////////////////////////////////////////////////
void ConfBool::Read()
{
+ wprintf("ConfBool::Read() > Begin and \n", m_bRead, szIniPath);
+
if( m_bRead || !szIniPath ) return;
*m_pbData = ( GetPrivateProfileInt( SECTION, m_szKey, ( int )m_bDefault, szIniPath ) != 0 );
@@ -493,22 +519,31 @@ ConfString::ConfString( TCHAR * szData, const TCHAR * szKey, ConfMode mode, TCHA
////////////////////////////////////////////////////////////////////////////////
void ConfString::Read()
{
+ wprintf( "ConfString::Read() > Begin\n");
+
if( m_bRead || !szIniPath ) return;
GetPrivateProfileString( SECTION, m_szKey, m_szDefault, m_szData, m_iMaxLen, szIniPath );
+
+ wprintf( "ConfString::Read() > GetPrivateProfileString <%s> <%s> <%s>\n", m_szKey, m_szData, szIniPath);
+
m_bRead = true;
}
-
+// =======================================================================================
+// I don't use this
////////////////////////////////////////////////////////////////////////////////
///
////////////////////////////////////////////////////////////////////////////////
void ConfString::Write()
{
+ /*
WritePrivateProfileString( SECTION, m_szKey, m_szData, szIniPath );
m_bRead = true;
-}
+ */
+}
+// =======================================================================================
@@ -531,7 +566,9 @@ ConfCurDir::ConfCurDir( TCHAR * szData, const TCHAR * szKey ) : ConfString( szDa
}
-
+// =======================================================================================
+// MAJOR FUNCTION: This changes the relative path for the whole application
+// =======================================================================================
////////////////////////////////////////////////////////////////////////////////
///
////////////////////////////////////////////////////////////////////////////////
@@ -542,9 +579,12 @@ void ConfCurDir::Read()
// MessageBox( 0, m_szData, TEXT( "CurDir" ), 0 );
// Apply
- SetCurrentDirectory( m_szData );
-}
+ //SetCurrentDirectory( m_szData );
+ wprintf("ConfCurDir::Read > End <%s>\n", m_szData);
+}
+// =======================================================================================
+// =======================================================================================
////////////////////////////////////////////////////////////////////////////////
@@ -556,6 +596,7 @@ void ConfCurDir::Write()
GetCurrentDirectory( MAX_PATH, m_szData ); // Note: without trailing slash
// MessageBox( 0, m_szData, TEXT( "CurDir" ), 0 );
+ //wprintf("ConfCurDir::Read <%s>\n", m_szData);
ConfString::Write();
}
@@ -565,10 +606,12 @@ void ConfCurDir::Write()
////////////////////////////////////////////////////////////////////////////////
///
////////////////////////////////////////////////////////////////////////////////
-void Conf::Init( HINSTANCE hInstance )
+void Conf::Init()
{
if( szIniPath ) return;
+ // =======================================================================================
+ // Find the right ini file
// Long filename
szIniPath = new TCHAR[ _MAX_PATH ];
@@ -578,40 +621,65 @@ void Conf::Init( HINSTANCE hInstance )
TCHAR szDir[ _MAX_DIR ] = TEXT( "" );
- GetModuleFileName( hInstance, szFull, _MAX_PATH );
+ // ---------------------------------------------------------------------------------------
+ // We place the full path in szFull
+ //GetModuleFileName( hInstance, szFull, _MAX_PATH );
+ GetModuleFileName( NULL, szFull, _MAX_PATH ); // No don't use that
+ // ---------------------------------------------------------------------------------------
_tsplitpath( szFull, szDrive, szDir, NULL, NULL );
-
+
// Convert short to long path
GetLongPathName( szDir, szDir, _MAX_DIR );
+
+ // ---------------------------------------------------------------------------------------
+ // We place information about the file in fd
+ // ---------------------------------------------------------------------------------------
// Convert short to long file
WIN32_FIND_DATA fd;
HANDLE h = FindFirstFile( szFull, &fd );
-
+ // ---------------------------------------------------------------------------------------
+
+ // ---------------------------------------------------------------------------------------
+ // Convert File.exe to File.ini
+ // ---------------------------------------------------------------------------------------
// Search last dot
TCHAR * szSearch = fd.cFileName + _tcslen( fd.cFileName ) - 1;
while( ( *szSearch != TEXT( '.' ) ) && ( szSearch > fd.cFileName ) )
{
szSearch--;
}
-
+ // ---------------------------------------------------------------------------------------
// Replace extension
_tcscpy( szSearch, TEXT( ".ini" ) );
+ // ---------------------------------------------------------------------------------------
// Copy full filename
- _sntprintf( szIniPath, _MAX_PATH, TEXT( "%s%s%s" ), szDrive, szDir, fd.cFileName );
+ //_sntprintf( szIniPath, _MAX_PATH, TEXT( "%s%s%s" ), szDrive, szDir, fd.cFileName );
+ _sntprintf( szIniPath, _MAX_PATH, TEXT( "%s%s%s" ), szDrive, szDir, TEXT( "Plainamp.ini" ) );
+
+ wprintf("DLL > We got the ini path <%s>\n", szIniPath);
+ // =======================================================================================
-
- // Read all
+ // ---------------------------------------------------------------------------------------
+ // Read all settings in it
+ // ---------------------------------------------------------------------------------------
+ // Read all (original comment)
map::iterator iter = conf_map->begin();
+
+ // =======================================================================================
+ // *** Something changes the API relative paths here
while( iter != conf_map->end() )
{
- iter->second->Read();
- iter++;
+ iter->second->Read(); // *** This changes the relative path
+ iter++;
}
+ // =======================================================================================
+ // ---------------------------------------------------------------------------------------
+
}
diff --git a/Branches/MusicMod/Player/Src/Config.h b/Branches/MusicMod/Player/Src/Config.h
index 30f4c2bae3..c139c120af 100644
--- a/Branches/MusicMod/Player/Src/Config.h
+++ b/Branches/MusicMod/Player/Src/Config.h
@@ -22,7 +22,8 @@
namespace Conf
{
- void Init( HINSTANCE hInstance );
+ //void Init( HINSTANCE hInstance );
+ void Init( );
void Write();
};
@@ -71,7 +72,9 @@ protected:
private:
bool m_bCopyKey; ///< Keyname is copy (has to be freed on destruction)
- friend void Conf::Init( HINSTANCE hInstance );
+ //friend void Conf::Init( HINSTANCE hInstance );
+ friend void Conf::Init( );
+
friend void Conf::Write();
};
diff --git a/Branches/MusicMod/Player/Src/Console.h b/Branches/MusicMod/Player/Src/Console.h
index 6c7ae14914..28386af265 100644
--- a/Branches/MusicMod/Player/Src/Console.h
+++ b/Branches/MusicMod/Player/Src/Console.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_CONSOLE_H
diff --git a/Branches/MusicMod/Player/Src/DspPlugin.cpp b/Branches/MusicMod/Player/Src/DspPlugin.cpp
index e7073cda50..40988eb8c8 100644
--- a/Branches/MusicMod/Player/Src/DspPlugin.cpp
+++ b/Branches/MusicMod/Player/Src/DspPlugin.cpp
@@ -145,6 +145,7 @@ bool DspPlugin::Unload()
_stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() );
Console::Append( szBuffer );
Console::Append( TEXT( " " ) );
+ printf( ">>>Unloading <%s>\n" , GetFilename() );
header = NULL;
diff --git a/Branches/MusicMod/Player/Src/Emabox/Emabox.h b/Branches/MusicMod/Player/Src/Emabox/Emabox.h
index 28c27d8eb2..873ec62f0c 100644
--- a/Branches/MusicMod/Player/Src/Emabox/Emabox.h
+++ b/Branches/MusicMod/Player/Src/Emabox/Emabox.h
@@ -17,7 +17,10 @@
#include
#include
-
+// =======================================================================================
+// Global declarations
+#include "../Global.h"
+// =======================================================================================
/*
== TYPE =============================================================================
diff --git a/Branches/MusicMod/Player/Src/GenPlugin.cpp b/Branches/MusicMod/Player/Src/GenPlugin.cpp
index 53b3d68448..8856229bbe 100644
--- a/Branches/MusicMod/Player/Src/GenPlugin.cpp
+++ b/Branches/MusicMod/Player/Src/GenPlugin.cpp
@@ -151,6 +151,7 @@ bool GenPlugin::Unload()
_stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() );
Console::Append( szBuffer );
Console::Append( TEXT( " " ) );
+ printf( ">>>Unloading <%s>\n" , GetFilename() );
// Quit
diff --git a/Branches/MusicMod/Player/Src/Global.h b/Branches/MusicMod/Player/Src/Global.h
index 5ac169e1f8..80bdb9a6a6 100644
--- a/Branches/MusicMod/Player/Src/Global.h
+++ b/Branches/MusicMod/Player/Src/Global.h
@@ -1,15 +1,46 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Include
+// ŻŻŻŻŻŻŻŻŻŻ
+#include "../../Common/Src/Console.h" // Local common
+/////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Declarations and definitions
+// ŻŻŻŻŻŻŻŻŻŻ
+
+// This will build Plainamp without the GUI
+#define NOGUI
+
+
+// =======================================================================================
+// Because there are undefined in 64 bit it's easy to redefine them in case we use 64 bit
+// ---------------------
+#ifdef _M_X64
+ #define GWL_WNDPROC (-4)
+ #define GetWindowLong GetWindowLongPtrA // or GetWindowLongPtr
+#endif
+// =======================================================================================
+
+////////////////////////////////////
+
+
+// =======================================================================================
+// Back to Plainamp code
+// ---------------------
#ifndef PA_GLOBAL_H
#define PA_GLOBAL_H
@@ -115,3 +146,4 @@ struct TextCompare
#endif // PA_GLOBAL_H
+
diff --git a/Branches/MusicMod/Player/Src/Input.cpp b/Branches/MusicMod/Player/Src/Input.cpp
index 35b42ea692..9054b3d86f 100644
--- a/Branches/MusicMod/Player/Src/Input.cpp
+++ b/Branches/MusicMod/Player/Src/Input.cpp
@@ -25,7 +25,9 @@
#include "kiss_fft/kiss_fftr.h"
*/
-#include "fftw3/fftw3.h"
+// =======================================================================================
+//#include "fftw3/fftw3.h"
+// =======================================================================================
#include
@@ -234,7 +236,8 @@ void VSAAddPCMData( void * PCMData, int nch, int bps, int timestamp )
// TODO: Much to optimize!
-
+ // =======================================================================================
+ /*
// Spectrum
static unsigned char spec_left[ 576 ];
static unsigned char spec_right[ 576 ];
@@ -311,10 +314,13 @@ void VSAAddPCMData( void * PCMData, int nch, int bps, int timestamp )
}
VisCache::PutSpecRight( spec_right );
}
-
+ // =======================================================================================
+ */
// Cleanup FFT
- fftw_destroy_plan( p );
+ // =======================================================================================
+ //fftw_destroy_plan( p );
+ // =======================================================================================
// fftw_free(in);
// fftw_free(out);
diff --git a/Branches/MusicMod/Player/Src/Input.h b/Branches/MusicMod/Player/Src/Input.h
index ff181474f6..f139df901f 100644
--- a/Branches/MusicMod/Player/Src/Input.h
+++ b/Branches/MusicMod/Player/Src/Input.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "Global.h"
diff --git a/Branches/MusicMod/Player/Src/InputPlugin.cpp b/Branches/MusicMod/Player/Src/InputPlugin.cpp
index d6daa31cfe..649b0aa17c 100644
--- a/Branches/MusicMod/Player/Src/InputPlugin.cpp
+++ b/Branches/MusicMod/Player/Src/InputPlugin.cpp
@@ -9,6 +9,9 @@
// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
////////////////////////////////////////////////////////////////////////////////
+// =======================================================================================
+#include "Global.h"
+// =======================================================================================
#include "InputPlugin.h"
#include "Console.h"
@@ -24,9 +27,8 @@ InputPlugin * active_input_plugin = NULL; // extern
-////////////////////////////////////////////////////////////////////////////////
-//
-////////////////////////////////////////////////////////////////////////////////
+// =======================================================================================
+// The InputPlugin class is inherited from the Plugin class
InputPlugin::InputPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDllpath )
{
iHookerIndex = -1;
@@ -35,6 +37,8 @@ InputPlugin::InputPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDllp
iFiltersLen = 0;
plugin = NULL;
+ wprintf("\InputPlugin::InputPlugin > Begin\n");
+
if( !Load() )
{
return;
@@ -65,6 +69,8 @@ InputPlugin::~InputPlugin()
////////////////////////////////////////////////////////////////////////////////
bool InputPlugin::Load()
{
+ printf("InputPlugin::Load() was called. IsLoaded: %i\n", IsLoaded());
+
if( IsLoaded() ) return true;
@@ -144,13 +150,15 @@ bool InputPlugin::Load()
}
-
+#ifdef NOGUI
+ printf( "Loading <%s>, %s\n" , GetFilename(), szName );
+#else
TCHAR szBuffer[ 5000 ];
_stprintf( szBuffer, TEXT( "Loading <%s>, %s" ), GetFilename(), szName );
Console::Append( szBuffer );
+#endif
-
- Integrate();
+ Integrate(); // This function is just below
// Note: Plugins that use a wndproc hook need
@@ -226,10 +234,15 @@ bool InputPlugin::Integrate()
// Append filter name
ToTchar( walk_out, start_display, len_display );
+
+// =======================================================================================
+// Print used filetypes
TCHAR szBuffer[ 5000 ];
*(walk_out + len_display) = TEXT( '\0' );
_stprintf( szBuffer, TEXT( " %s" ), walk_out );
Console::Append( szBuffer );
+ //printf( szBuffer, TEXT( " %s\n" ), walk_out );
+// =======================================================================================
walk_out += len_display;
// Convert and append extensions
@@ -312,6 +325,7 @@ bool InputPlugin::Unload()
_stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() );
Console::Append( szBuffer );
Console::Append( TEXT( " " ) );
+ printf( ">>>Unloading <%s>\n" , GetFilename() );
// Quit
if( plugin )
diff --git a/Branches/MusicMod/Player/Src/InputPlugin.h b/Branches/MusicMod/Player/Src/InputPlugin.h
index 83e93d511a..2702fbe767 100644
--- a/Branches/MusicMod/Player/Src/InputPlugin.h
+++ b/Branches/MusicMod/Player/Src/InputPlugin.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_INPUT_PLUGIN_H
@@ -60,10 +60,12 @@ public:
bool About( HWND hParent );
bool Config( HWND hParent );
+ In_Module * plugin; // I moved this from private to public
+
private:
TCHAR * szFilters;
int iFiltersLen;
- In_Module * plugin;
+
bool Integrate();
bool DisIntegrate();
@@ -75,7 +77,7 @@ private:
friend bool Playback::Play();
friend bool Playback::Pause();
friend bool Playback::Stop();
- friend bool Playback::UpdateSeek();
+ friend bool Playback::UpdateSeek(); // this one calls some plugin-> members
friend int Playback::PercentToMs( float fPercent );
friend bool Playback::SeekPercent( float fPercent );
friend bool SeekRelative( int ms );
diff --git a/Branches/MusicMod/Player/Src/Main.cpp b/Branches/MusicMod/Player/Src/Main.cpp
index 813bbeb359..afdc1e81fd 100644
--- a/Branches/MusicMod/Player/Src/Main.cpp
+++ b/Branches/MusicMod/Player/Src/Main.cpp
@@ -10,6 +10,19 @@
////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////
+// Documentation
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
+
+/* ---- The Seekbar ----
+ Rebar.cpp handle the progress (playback position) bar. WndprocMain() is called every
+ second during playback. And several times a second when the cursor is moving over the
+ main window. If WM_TIMER called WndprocMain it calls Playback::UpdateSeek(); */
+
+
+///////////////////////////////////
+
+
#include "Main.h"
#include "GlobalVersion.h"
#include "Playlist.h"
@@ -30,7 +43,6 @@
#include "Config.h"
#include
-
#define CLASSNAME_MAIN TEXT( "Winamp v1.x" )
#define MAIN_TITLE PLAINAMP_LONG_TITLE
@@ -87,45 +99,68 @@ ConfBool cbMinimizeToTray( &bMinimizeToTray, TEXT( "MinimizeToTray" ), CONF_MODE
////////////////////////////////////////////////////////////////////////////////
bool BuildMainWindow()
{
- // Register class
- WNDCLASS wc = {
- 0, // UINT style
- WndprocMain, // WNDPROC lpfnWndProc
- 0, // int cbClsExtra
- 0, // int cbWndExtra
- g_hInstance, // HINSTANCE hInstance
- LoadIcon( g_hInstance, TEXT( "IDI_ICON1" ) ), // HICON hIcon
- LoadCursor( NULL, IDC_ARROW ), // HCURSOR hCursor
- ( HBRUSH )COLOR_WINDOW, // HBRUSH hbrBackground
- NULL, // LPCTSTR lpszMenuName
- CLASSNAME_MAIN // LPCTSTR lpszClassName
- };
-
- if( !RegisterClass( &wc ) ) return false;
-
- // Create window
- WindowMain = CreateWindowEx(
- WS_EX_WINDOWEDGE, // DWORD dwExStyle
- CLASSNAME_MAIN, // LPCTSTR lpClassName
- MAIN_TITLE, // LPCTSTR lpWindowName
- WS_OVERLAPPED | // DWORD dwStyle
-// WS_VISIBLE | //
- WS_CLIPCHILDREN | //
- WS_BORDER | //
- WS_SYSMENU | //
- WS_THICKFRAME | //
- WS_MINIMIZEBOX | //
- WS_MAXIMIZEBOX, //
- rMainDefault.left, // int x
- rMainDefault.top, // int y
- rMainDefault.right - rMainDefault.left, // int nWidth
- rMainDefault.bottom - rMainDefault.top, // int nHeight
- NULL, // HWND hWndParent
- NULL, // HMENU hMenu
- g_hInstance, // HINSTANCE hInstance
- NULL // LPVOID lpParam
- );
+
+ //#ifndef NOGUI
+
+ // =======================================================================================
+ /* Disabling this window creation cause continuous "Error setting DirectSound cooperative level"
+ messages for some reason. So I leave it here for now. */
+
+ // Register class
+ WNDCLASS wc = {
+ 0, // UINT style
+ WndprocMain, // WNDPROC lpfnWndProc
+ 0, // int cbClsExtra
+ 0, // int cbWndExtra
+ g_hInstance, // HINSTANCE hInstance
+ LoadIcon( g_hInstance, TEXT( "IDI_ICON1" ) ), // HICON hIcon
+ LoadCursor( NULL, IDC_ARROW ), // HCURSOR hCursor
+ ( HBRUSH )COLOR_WINDOW, // HBRUSH hbrBackground
+ NULL, // LPCTSTR lpszMenuName
+ CLASSNAME_MAIN // LPCTSTR lpszClassName
+ };
+
+ if( !RegisterClass( &wc ) ) return false;
+
+
+ // Create WindowMain
+ WindowMain = CreateWindowEx(
+ WS_EX_WINDOWEDGE, // DWORD dwExStyle
+ CLASSNAME_MAIN, // LPCTSTR lpClassName
+ MAIN_TITLE, // LPCTSTR lpWindowName
+ WS_OVERLAPPED | // DWORD dwStyle
+ // WS_VISIBLE | //
+ WS_CLIPCHILDREN | //
+ WS_BORDER | //
+ WS_SYSMENU | //
+ WS_THICKFRAME | //
+ WS_MINIMIZEBOX | //
+ WS_MAXIMIZEBOX, //
+ rMainDefault.left, // int x
+ rMainDefault.top, // int y
+ rMainDefault.right - rMainDefault.left, // int nWidth
+ rMainDefault.bottom - rMainDefault.top, // int nHeight
+ NULL, // HWND hWndParent
+ NULL, // HMENU hMenu
+ g_hInstance, // HINSTANCE hInstance
+ NULL // LPVOID lpParam
+ );
+ // =======================================================================================
+ //#endif
+
+ // =======================================================================================
+ #ifdef NOGUI
+
+ // If this is not called a crash occurs
+ PlaylistView::Create();
+
+ // We have now done what we wanted so we skip the rest of the file
+ return true;
+
+ #else
+ // =======================================================================================
+
if( !WindowMain )
{
@@ -143,6 +178,7 @@ bool BuildMainWindow()
HMENU playlist_menu = CreatePopupMenu();
HMENU windows_menu = CreatePopupMenu();
+
// Plainamp
AppendMenu( plainamp_menu, MF_STRING, WINAMP_OPTIONS_PREFS, TEXT( "Preferences \tCtrl+P" ) );
AppendMenu( plainamp_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL );
@@ -183,7 +219,7 @@ bool BuildMainWindow()
SetMenu( WindowMain, main_menu );
-////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
main_context_menu = CreatePopupMenu();
AppendMenu( main_context_menu, MF_STRING, WINAMP_HELP_ABOUT, TEXT( "Plainamp" ) );
@@ -205,10 +241,11 @@ bool BuildMainWindow()
AppendMenu( main_context_menu, MF_STRING, PLAINAMP_TOGGLE_MANAGER, TEXT( "Plugin Manager" ) );
-/*
+ /*
AppendMenu( main_context_menu, MF_STRING | MF_DISABLED | MF_GRAYED, MENU_MAIN_CONTEXT_MANAGER, TEXT( "Plugin Manager" ) );
AppendMenu( main_context_menu, MF_STRING | MF_DISABLED | MF_GRAYED, MENU_MAIN_CONTEXT_CONSOLE, TEXT( "Console" ) );
-*/
+ */
+
AppendMenu( main_context_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL );
opts_context_menu = CreatePopupMenu();
@@ -228,8 +265,14 @@ bool BuildMainWindow()
AppendMenu( main_context_menu, MF_STRING, WINAMP_FILE_QUIT, TEXT( "Exit" ) );
- Toolbar::Create();
- BuildMainStatus();
+ Toolbar::Create(); // This removes all buttons and status bars
+ //BuildMainStatus();
+
+
+ // =======================================================================================
+ // If this is not created a crash occurs
+ PlaylistView::Create();
+
Playlist::Create();
@@ -237,6 +280,7 @@ bool BuildMainWindow()
return true;
+#endif
}
@@ -324,11 +368,22 @@ LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
// Tool windows are hidden on minimize/re-shown on restore
static bool bConsoleTodo = false;
static bool bManagerTodo = false;
-
static bool bRemoveIcon = false;
+ #ifdef NOGUI
+ wprintf("DLL > Main.cpp:WndprocMain() was called. But nothing will be done. \n");
+ #else
+ Console::Append( TEXT( "Main.cpp:WndprocMain was called" ) );
+ #endif
+
+
switch( message )
{
+
+ #ifdef NOGUI
+ //printf(" > WndprocMain message: %i\n", message);
+ #else
+
case WM_SETFOCUS:
// To re-"blue"
SetFocus( WindowPlaylist );
@@ -336,8 +391,8 @@ LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
case WM_CREATE:
// Note: [WindowMain] is not valid yet but [hwnd] is!
- Console::Create();
- PluginManager::Build();
+ Console::Create(); // make the console window
+ PluginManager::Build(); // make the plugin window
break;
case WM_NOTIFY:
@@ -496,7 +551,7 @@ LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
}
break;
}
-
+
case WM_SYSKEYDOWN:
switch( wp ) // [Alt]+[...]
{
@@ -636,7 +691,9 @@ LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
case WM_DESTROY:
{
+ // =======================================================================================
// Save playlist
+ /*
TCHAR * szPlaylistMind = new TCHAR[ iHomeDirLen + 12 + 1 ];
memcpy( szPlaylistMind, szHomeDir, iHomeDirLen * sizeof( TCHAR ) );
memcpy( szPlaylistMind + iHomeDirLen, TEXT( "Plainamp.m3u" ), 12 * sizeof( TCHAR ) );
@@ -645,7 +702,8 @@ LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
Playlist::ExportPlaylistFile( szPlaylistMind );
delete [] szPlaylistMind;
-
+ */
+ // =======================================================================================
cwpcWinPlaceMain.TriggerCallback();
cwpcWinPlaceMain.RemoveCallback();
@@ -726,7 +784,7 @@ LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
}
}
break;
-
+
case TRAY_MSG:
switch( lp )
{
@@ -749,9 +807,10 @@ LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
}
return 0;
-
+ #endif
default:
return WndprocWinamp( hwnd, message, wp, lp );
}
return DefWindowProc( hwnd, message, wp, lp );
+
}
diff --git a/Branches/MusicMod/Player/Src/Main.h b/Branches/MusicMod/Player/Src/Main.h
index 68fb4bbdee..c8a2b4309c 100644
--- a/Branches/MusicMod/Player/Src/Main.h
+++ b/Branches/MusicMod/Player/Src/Main.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_MAIN_H
@@ -42,7 +42,7 @@ extern HMENU main_context_menu;
-bool BuildMainWindow();
+bool BuildMainWindow();
void About( HWND hParent );
LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp );
diff --git a/Branches/MusicMod/Player/Src/Output.cpp b/Branches/MusicMod/Player/Src/Output.cpp
index d640c0e80d..8c20840dc9 100644
--- a/Branches/MusicMod/Player/Src/Output.cpp
+++ b/Branches/MusicMod/Player/Src/Output.cpp
@@ -256,10 +256,25 @@ int Output_Pause( int pause )
////////////////////////////////////////////////////////////////////////////////
void Output_SetVolume( int volume )
{
- for( int i = 0; i < active_output_count; i++ )
+ /* There was a call here with the volume value -666 that I could not see the source of,
+ so I added this check to see that we got a positive volume. */
+ if(volume >= 0)
{
- active_output_plugins[ i ]->plugin->SetVolume( volume );
+ // =======================================================================================
+ // The volume goes from 0 to 255
+ //TCHAR szBuffer[ 5000 ];
+ //_stprintf( szBuffer, TEXT( "DLL > Output_SetVolume <%i>" ), volume );
+ //Console::Append( szBuffer );
+ //Console::Append( TEXT( " " ) );
+ //wprintf( "DLL > Output_SetVolume <%i>\n", volume );
+ // =======================================================================================
+
+ for( int i = 0; i < active_output_count; i++ )
+ {
+ active_output_plugins[ i ]->plugin->SetVolume( volume );
+ }
}
+
}
diff --git a/Branches/MusicMod/Player/Src/Output.h b/Branches/MusicMod/Player/Src/Output.h
index f12803a873..21723f3e73 100644
--- a/Branches/MusicMod/Player/Src/Output.h
+++ b/Branches/MusicMod/Player/Src/Output.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_OUTPUT_H
diff --git a/Branches/MusicMod/Player/Src/OutputPlugin.cpp b/Branches/MusicMod/Player/Src/OutputPlugin.cpp
index b58ce2b1a3..5276eb8481 100644
--- a/Branches/MusicMod/Player/Src/OutputPlugin.cpp
+++ b/Branches/MusicMod/Player/Src/OutputPlugin.cpp
@@ -42,11 +42,15 @@ OutputPlugin::OutputPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDl
}
////////////////////////////////////////////////////////////////////////////////
+
// Quick hack!!!
TCHAR * szBuffer = new TCHAR[ 500 ]; // NOT LOCAL!!!
_stprintf( szBuffer, TEXT( "OutputPluginActive___%s" ), GetFilename() );
ConfBool * cbActive = new ConfBool( &bActive, szBuffer, CONF_MODE_INTERNAL, false );
cbActive->Read();
+ printf("OutputPlugin > GetFilename() returned <%s>\n", szBuffer );
+
+ printf("OutputPlugin > We now have and \n", bActive, bKeepLoaded );
if( bActive )
{
@@ -62,6 +66,7 @@ OutputPlugin::OutputPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDl
// So out_ds keeps loaded for now.
if( _tcscmp( GetFilename(), TEXT( "out_ds.dll" ) ) )
{
+ printf("OutputPlugin > Unload called from OutputPlugin::OutputPlugin\n");
Unload();
}
}
@@ -128,9 +133,15 @@ bool OutputPlugin::Load()
_stprintf( szBuffer, TEXT( "Loading <%s>, %s" ), GetFilename(), szName );
Console::Append( szBuffer );
Console::Append( TEXT( " " ) );
+ printf( ">>>Loading <%s>, %s\n" , GetFilename(), szName );
if( plugin->Init )
{
+ // We remove the WNDPROC things
+#ifdef NOGUI
+ plugin->Init();
+#else
+
// Init
const WNDPROC WndprocBefore = ( WNDPROC )GetWindowLong( WindowMain, GWL_WNDPROC );
plugin->Init();
@@ -150,6 +161,7 @@ bool OutputPlugin::Load()
{
Console::Append( TEXT( "Wndproc hook added (by plugin)" ) );
}
+#endif
}
return true;
@@ -169,6 +181,7 @@ bool OutputPlugin::Unload()
_stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() );
Console::Append( szBuffer );
Console::Append( TEXT( " " ) );
+ printf( ">>>Unloading <%s>\n" , GetFilename() );
// Quit
if( plugin )
@@ -235,6 +248,8 @@ bool OutputPlugin::Config( HWND hParent )
////////////////////////////////////////////////////////////////////////////////
bool OutputPlugin::Start()
{
+ wprintf( "OutputPlugin::Start() > Begin \n" , IsLoaded(), bActive, active_output_count );
+
if( !IsLoaded() ) return false;
if( bActive ) return true;
@@ -257,6 +272,7 @@ bool OutputPlugin::Start()
_stprintf( szBuffer, TEXT( "Output plugin <%s> activated" ), GetFilename() );
Console::Append( szBuffer );
Console::Append( TEXT( " " ) );
+ wprintf( "\n >>> OutputPlugin::Start() > Output plugin <%s> activated\n\n" , GetFilename() );
bActive = true;
diff --git a/Branches/MusicMod/Player/Src/OutputPlugin.h b/Branches/MusicMod/Player/Src/OutputPlugin.h
index fbbfce418a..6dc4ca0cb9 100644
--- a/Branches/MusicMod/Player/Src/OutputPlugin.h
+++ b/Branches/MusicMod/Player/Src/OutputPlugin.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_OUTPUT_PLUGIN_H
@@ -58,10 +58,12 @@ public:
bool Start();
bool Stop();
+ Out_Module * plugin; // Moved to public
+
private:
bool bActive;
int iArrayIndex;
- Out_Module * plugin;
+
// TODO
diff --git a/Branches/MusicMod/Player/Src/Playback.cpp b/Branches/MusicMod/Player/Src/Playback.cpp
index 9ea3912d4a..36377a8afe 100644
--- a/Branches/MusicMod/Player/Src/Playback.cpp
+++ b/Branches/MusicMod/Player/Src/Playback.cpp
@@ -50,49 +50,70 @@ TCHAR * szCurrentFilename = NULL;
////////////////////////////////////////////////////////////////////////////////
///
////////////////////////////////////////////////////////////////////////////////
+// =======================================================================================
+// The timer that calls WndprocMain every second
void EnableTimer( bool bEnabled )
{
+ // Return if the timer is already activated
if( bEnabled == bTimerRunning ) return;
if( bEnabled )
{
SetTimer( WindowMain, TIMER_SEEK_UPDATE, 1000, NULL );
+ wprintf( "EnableTimer > Activated\n" );
}
else
{
KillTimer( WindowMain, TIMER_SEEK_UPDATE );
StatusReset();
+
+ wprintf( "EnableTimer > Killed\n" );
}
bTimerRunning = bEnabled;
}
-
+// =======================================================================================
////////////////////////////////////////////////////////////////////////////////
-///
+//
////////////////////////////////////////////////////////////////////////////////
bool OpenPlay( TCHAR * szFilename, int iNumber )
{
- // TODO: cleanup!!!
-
+ // =======================================================================================
+ #ifdef NOGUI
+ wprintf( "Playback.cpp: OpenPlay > Begin <%i> <%s>\n" , iNumber, szFilename );
+ #else
+ TCHAR sszBuffer[ 5000 ];
+ _stprintf( sszBuffer, TEXT( "Playback.cpp: OpenPlay was called <%i> <%s>" ), iNumber, szFilename );
+ Console::Append( sszBuffer );
+ #endif
+ // =======================================================================================
+
+
+ // =======================================================================================
+ // Get the right input plugin
+ // ---------------------------------------------------------------------------------------
if( !szFilename ) return false;
szCurrentFilename = szFilename;
+ // ---------------------------------------------------------------------------------------
// TODO: non-file support
-
- // Get extension
+ // ---------------------------------------------------------------------------------------
+ // Get file extension
const int iLen = ( int )_tcslen( szFilename );
TCHAR * walk = szFilename + iLen - 1;
while( ( walk >= szFilename ) && ( *walk != TEXT( '.' ) ) ) walk--;
walk++;
+ // ---------------------------------------------------------------------------------------
const int iExtLen = ( int )_tcslen( walk );
TCHAR * szExt = new TCHAR[ iExtLen + 1 ];
memcpy( szExt, walk, iExtLen * sizeof( TCHAR ) );
szExt[ iExtLen ] = TEXT( '\0' );
-
- // Get input plugin from extension map
+
+ // ---------------------------------------------------------------------------------------
+ // Compare the extension to the supported extension by the current input plugins
map ::iterator iter =
ext_map.find( szExt );
delete [] szExt;
@@ -100,11 +121,15 @@ bool OpenPlay( TCHAR * szFilename, int iNumber )
{
Console::Append( TEXT( "ERROR: Extension not supported" ) );
Console::Append( " " );
+ wprintf("OpenPlay > ERROR: Extension not supported\n");
return false;
- }
-
- InputPlugin * old_input = active_input_plugin;
+ }
+ // ---------------------------------------------------------------------------------------
+ // Now that we know which input pugin to use we set that one as active
+ InputPlugin * old_input = active_input_plugin; // Save the last one, if any
active_input_plugin = iter->second;
+ wprintf("OpenPlay > Input plugin '%s' activated\n", active_input_plugin->GetName());
+ // =======================================================================================
if( old_input )
{
@@ -120,17 +145,21 @@ bool OpenPlay( TCHAR * szFilename, int iNumber )
{
Console::Append( TEXT( "ERROR: Input plugin is NULL" ) );
Console::Append( " " );
+ wprintf("OpenPlay > ERROR: Input plugin is NULL\n");
return false;
}
// Connect
+ wprintf( "OpenPlay > OutMod\n" );
active_input_plugin->plugin->outMod = &output_server; // output->plugin;
+ // =======================================================================================
// Re-apply volume and panning
- active_input_plugin->plugin->SetVolume( iCurVol );
- active_input_plugin->plugin->SetPan( iCurPan );
- Playback::Eq::Reapply();
-
+ //active_input_plugin->plugin->SetVolume( iCurVol );
+ //active_input_plugin->plugin->SetPan( iCurPan );
+ //Playback::Eq::Reapply();
+ // =======================================================================================
+
// Play
#ifdef PA_UNICODE
@@ -153,31 +182,43 @@ bool OpenPlay( TCHAR * szFilename, int iNumber )
active_input_plugin->plugin->Play( szTemp );
delete [] szTemp;
-#else
+#else
+ // =======================================================================================
+ // Play the file
+ // ---------------------------------------------------------------------------------------
// Title
TCHAR szTitle[ 2000 ] = TEXT( "\0" );
int length_in_ms;
+
+ wprintf( "OpenPlay > GetFileInfo\n" );
active_input_plugin->plugin->GetFileInfo( szFilename, szTitle, &length_in_ms );
+ wprintf( "OpenPlay > Play\n" );
active_input_plugin->plugin->Play( szFilename );
+ // =======================================================================================
#endif
bPlaying = true;
bPaused = false;
-
- // Title
- TCHAR szBuffer[ 5000 ];
- _stprintf( szBuffer, TEXT( "%i. %s - Plainamp" ), iNumber, szTitle );
- SetWindowText( WindowMain, szBuffer );
-/*
+ // =======================================================================================
+ // Title
+
+ //TCHAR szBuffer[ 5000 ];
+ //_stprintf( szBuffer, TEXT( "%i. %s - Plainamp" ), iNumber, szTitle );
+ //SetWindowText( WindowMain, szBuffer );
+ // =======================================================================================
+
+ /*
TCHAR * szBasename = szFilename + uLen - 1;
while( ( szBasename > szFilename ) && ( *szBasename != TEXT( '\\' ) ) ) szBasename--;
szBasename++;
-*/
+ */
// Timer ON
- EnableTimer( true );
+ //EnableTimer( true );
+
+ wprintf( "OpenPlay > End\n" );
return true;
}
@@ -243,12 +284,23 @@ bool Playback::Prev()
////////////////////////////////////////////////////////////////////////////////
-///
+// Play the file
////////////////////////////////////////////////////////////////////////////////
bool Playback::Play()
{
static int iLastIndex = -1;
- if( bPlaying )
+
+ // ---------------------------------------------------------------------------------------
+
+ TCHAR sszBuffer[ 5000 ];
+ _stprintf( sszBuffer, TEXT( "Playback::Play() with bPlaying <%i>\n" ), bPlaying );
+ Console::Append( sszBuffer );
+ Console::Append( TEXT( " " ) );
+ wprintf( "Playback::Play() > Begin <%i>\n" , bPlaying );
+ // ---------------------------------------------------------------------------------------
+
+ // ---------------------------------------------------------------------------------------
+ if( bPlaying ) // If we are currently playing a file
{
if( !active_input_plugin ) return false;
if( !active_input_plugin->plugin ) return false;
@@ -256,14 +308,14 @@ bool Playback::Play()
const int iIndex = playlist->GetCurIndex();
if( iIndex < 0 ) return false;
-/*
- TCHAR szBuffer[ 5000 ];
- _stprintf( szBuffer, TEXT( "OLD [%i] NEW [%i]" ), iLastIndex, iIndex );
- SetWindowText( WindowMain, szBuffer );
-*/
+ /*
+ TCHAR szBuffer[ 5000 ];
+ _stprintf( szBuffer, TEXT( "OLD [%i] NEW [%i]" ), iLastIndex, iIndex );
+ SetWindowText( WindowMain, szBuffer );
+ */
- // Same track/file as before?
- TCHAR * szFilename = Playlist::GetFilename( iIndex );
+ // If we are not playing the same track/file as before
+ TCHAR * szFilename = Playlist::GetFilename( iIndex );
if( szFilename != szCurrentFilename )
{
// New track!
@@ -272,7 +324,7 @@ bool Playback::Play()
// NOT TWICE active_input_plugin->plugin->Stop();
// Timer OFF
- EnableTimer( false );
+ //EnableTimer( false );
// Get filename
if( !szFilename )
@@ -297,7 +349,7 @@ bool Playback::Play()
bPaused = false;
// Timer ON
- EnableTimer( true );
+ //EnableTimer( true );
}
else
{
@@ -306,13 +358,26 @@ bool Playback::Play()
}
}
}
- else
+ // =======================================================================================
+ else // we are not currently playing
{
const int iIndex = playlist->GetCurIndex();
if( iIndex < 0 ) return false;
// Get filename
TCHAR * szFilename = Playlist::GetFilename( iIndex );
+
+ // =======================================================================================
+
+
+ //bool bPlaying = false;
+ //TCHAR * szFilename = TEXT("C:\Files\Spel och spelfusk\Console\Gamecube\Code\vgmstream (isolate ast)\Music\demo36_02.ast");
+ //bPlaying = OpenPlay( szFilename, 1 );
+ //bPlaying = OpenPlay( szFilename, iIndex + 1 );
+ //Console::Append( TEXT( "Playback.cpp:Playback::Play() called OpenPlay" ) );
+
+ // =======================================================================================
+
if( !szFilename )
{
Console::Append( TEXT( "ERROR: Could not resolve filename" ) );
@@ -320,6 +385,12 @@ bool Playback::Play()
return false;
}
+ TCHAR szBuffer[ 5000 ];
+ _stprintf( szBuffer, TEXT( "Playback.cpp: Play() got the filename <%s>" ), szFilename);
+ Console::Append( szBuffer );
+ // Console::Append( TEXT( " " ) );
+ wprintf( "Playback::Play() > Filename <%s>\n", szFilename);
+
// Play
iLastIndex = iIndex;
bPlaying = OpenPlay( szFilename, iIndex + 1 );
@@ -327,7 +398,7 @@ bool Playback::Play()
}
return true;
}
-
+// =======================================================================================
////////////////////////////////////////////////////////////////////////////////
@@ -346,7 +417,7 @@ bool Playback::Pause()
bPaused = false;
// Timer ON
- EnableTimer( true );
+ //EnableTimer( true );
}
else
{
@@ -355,7 +426,7 @@ bool Playback::Pause()
bPaused = true;
// Timer OFF
- EnableTimer( false );
+ //EnableTimer( false );
}
// Console::Append( TEXT( "Playback::Pause" ) );
@@ -371,21 +442,23 @@ bool Playback::Stop()
{
if( !bPlaying ) return false;
+ // ---------------------------------------------------------------------------------------
// Stop
if( active_input_plugin && active_input_plugin->plugin )
{
active_input_plugin->plugin->Stop();
}
active_input_plugin = NULL; // QUICK FIX
+ // ---------------------------------------------------------------------------------------
bPlaying = false;
bPaused = false;
- // Timer OFF
- EnableTimer( false );
+ // Timer OFF > It was never turned on
+ //EnableTimer( false );
- // Reset seekbar
- Playback::UpdateSeek();
+ // Reset seekbar > We don't need this
+ //Playback::UpdateSeek();
return true;
}
@@ -425,15 +498,35 @@ bool Playback::IsPaused()
////////////////////////////////////////////////////////////////////////////////
///
////////////////////////////////////////////////////////////////////////////////
+//int getlength();
+//int getoutputtime();
+
bool Playback::UpdateSeek()
{
+#ifdef NOGUI
+ printf( "Playback::UpdateSeek > Begin\n" );
+ if( active_input_plugin )
+ {
+ printf( "GetLength() > Begin\n" );
+ const int ms_len = active_input_plugin->plugin->GetLength();
+ //const int ms_cur = active_input_plugin->plugin->GetOutputTime();
+
+ //const int ms_len = getlength();
+ //const int ms_cur = getoutputtime();
+
+ //printf( "Current position is <%i of %i>\n", ms_cur, ms_len );
+ }
+ return true;
+#else
static bool bSliderEnabledBefore = false;
bool bSliderEnabledAfter;
-
- if( !WindowSeek ) return false;
+
+
+ //if( !WindowSeek ) return false;
int iVal = 0;
+ // If it has not been set
if( !active_input_plugin || !active_input_plugin->plugin )
{
if( bSliderEnabledBefore )
@@ -455,8 +548,18 @@ bool Playback::UpdateSeek()
iVal = ( ms_cur * 1000 ) / ms_len;
if( iVal > 1000 ) iVal = 0;
+
+// =======================================================================================
+//TCHAR szBuffer[ 5000 ];
+//_stprintf( szBuffer, TEXT( "Current position is <%i of %i>" ), ms_cur, ms_len );
+//Console::Append( szBuffer );
+//Console::Append( TEXT( " " ) );
+printf( "Current position is <%i of %i>\n", ms_cur, ms_len );
+// =======================================================================================
}
+
+
if( !bSliderEnabledBefore )
{
EnableWindow( WindowSeek, TRUE );
@@ -468,6 +571,7 @@ bool Playback::UpdateSeek()
}
return true;
+#endif
}
diff --git a/Branches/MusicMod/Player/Src/Playback.h b/Branches/MusicMod/Player/Src/Playback.h
index 86c3f11cb3..558b191d1d 100644
--- a/Branches/MusicMod/Player/Src/Playback.h
+++ b/Branches/MusicMod/Player/Src/Playback.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_PLAYBACK_H
diff --git a/Branches/MusicMod/Player/Src/Player.cpp b/Branches/MusicMod/Player/Src/Player.cpp
new file mode 100644
index 0000000000..d124e3fae1
--- /dev/null
+++ b/Branches/MusicMod/Player/Src/Player.cpp
@@ -0,0 +1,408 @@
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Usage instructions
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
+
+// =======================================================================================
+// Plugins
+// ---------------------------------------------------------------------------------------
+// Plainamp setup > The output plugin must be manually loaded and activated the first time it's used.
+// After that the ini saves OutputPluginActive___out_wave_gpl.dll=1. Input plugins are automatically
+// found, loaded and activated.
+// =======================================================================================
+
+
+// =======================================================================================
+// The ini path szIniPath
+// ---------------------------------------------------------------------------------------
+/* We will get problems if the program can't find the ini settings. Plugins will not be loaded,
+ or loadedand then unloaded before activated, or not working. */
+// =======================================================================================
+
+///////////////////////////////////
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Include
+// ŻŻŻŻŻŻŻŻŻŻ
+#include
+//#include "Unicode.h"
+//#include "Output.h"
+#include
+#include
+
+#include "Global.h" // Local
+#include "Font.h"
+#include "InputPlugin.h"
+#include "OutputPlugin.h"
+#include "VisPlugin.h"
+#include "DspPlugin.h"
+#include "GenPlugin.h"
+#include "Main.h"
+#include "Rebar.h"
+#include "Playlist.h"
+#include "Status.h"
+#include "PluginManager.h"
+#include "Prefs.h"
+#include "Config.h"
+#include "Emabox/Emabox.h"
+#include "Console.h"
+
+#include "PlayerExport.h" // DLL Player
+/////////////////////////
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Declarations and definitions
+// ŻŻŻŻŻŻŻŻŻŻ
+
+
+// -------------------------
+// Keys
+// ---------
+#define PLUS_ALT ( FVIRTKEY | FALT )
+#define PLUS_CONTROL ( FVIRTKEY | FCONTROL )
+#define PLUS_CONTROL_ALT ( FVIRTKEY | FCONTROL | FALT )
+#define PLUS_CONTROL_SHIFT ( FVIRTKEY | FCONTROL | FSHIFT )
+#define PLUS_SHIFT ( FVIRTKEY | FSHIFT )
+// -------------
+
+
+HINSTANCE g_hInstance = NULL; // extern
+HINSTANCE hInstance = NULL; // extern
+
+TCHAR * szHomeDir = NULL; // extern
+int iHomeDirLen = 0; // extern
+
+TCHAR * szPluginDir = NULL; // extern
+int iPluginDirLen = 0; // extern
+
+
+// -------------------------
+/* Read global settings from the ini file. They are read from the ini file through Config.h.
+ Usage: ( &where to place it, the option name, public or private, default value) */
+// ---------
+TCHAR szCurDir[ MAX_PATH + 1 ] = TEXT( "" );
+ConfCurDir ccdCurDir( szCurDir, TEXT( "CurDir" ) );
+// -------------------------
+
+bool bWarnPluginsMissing;
+ConfBool cbWarnPluginsMissing( &bWarnPluginsMissing, TEXT( "WarnPluginsMissing" ), CONF_MODE_PUBLIC, false );
+
+bool bLoop;
+ConfBool cbLoop( &bLoop, TEXT( "Loop" ), CONF_MODE_PUBLIC, false );
+/////////////////////////
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+////////////////////////////////////////////////////////////////////////////////
+//int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nCmdShow )
+void Player_Main(bool Console)
+{
+ // =======================================================================================
+ // Set variables
+ //g_hInstance = hInstance;
+ // =======================================================================================
+
+ //printf( "DLL > main_dll() opened\n" );
+
+ if (Console) Player_Console(true);
+
+ //MessageBox(0, "main() opened", "", 0);
+ //printf( "main() opened\n" );
+ wprintf( "DLL > main_dll() > Begin\n" );
+
+
+ // =======================================================================================
+ // Load full config from ini file
+ //Conf::Init( hInstance );
+ Conf::Init( );
+
+ // ---------------------------------------------------------------------------------------
+ wprintf( "DLL > bLoop <%i>\n", bLoop);
+ wprintf( "DLL > bWarnPluginsMissing <%i>\n", bWarnPluginsMissing);
+ // ---------------------------------------------------------------------------------------
+
+ // =======================================================================================
+
+
+ // =======================================================================================
+ /* Get home dir. We use the TCHAR type for the dirname to insure us against foreign letters
+ in the dirnames */
+ szHomeDir = new TCHAR[ MAX_PATH + 1 ];
+ iHomeDirLen = GetModuleFileName( NULL, szHomeDir, MAX_PATH );
+ //if( !iHomeDirLen ) return 1;
+
+ // ---------------------------------------------------------------------------------------
+ // Walk through the pathname and look for backslashes
+ TCHAR * walk = szHomeDir + iHomeDirLen - 1;
+ while( ( walk > szHomeDir ) && ( *walk != TEXT( '\\' ) ) ) walk--;
+ // ---------------------------------------------------------------------------------------
+
+ walk++;
+ *walk = TEXT( '\0' );
+ iHomeDirLen = walk - szHomeDir;
+ // =======================================================================================
+
+
+ // =======================================================================================
+ /* Get plugins dir. Notice to change the number 8 in two places below if the dir name
+ is changed */
+ szPluginDir = new TCHAR[ MAX_PATH + 1 ];
+ memcpy( szPluginDir, szHomeDir, iHomeDirLen * sizeof( TCHAR ) );
+ memcpy( szPluginDir + iHomeDirLen, TEXT( "PluginsMusic" ), 12 * sizeof( TCHAR ) );
+ szPluginDir[ iHomeDirLen + 12 ] = TEXT( '\0' );
+ wprintf("DLL > Plugindir: %s\n\n", szPluginDir);
+ // =======================================================================================
+ #ifndef NOGUI
+ Font::Create();
+ //Console::Append( TEXT( "Winmain.cpp called Font::Create()" ) );
+ #endif
+
+ // =======================================================================================
+ // The only thing this function currently does is creating the Playlist.
+ // =======================================================================================
+ BuildMainWindow();
+
+ //addfiletoplaylist("c:\\zelda\\demo37_01.ast");
+ //addfiletoplaylist("c:\\zelda\\demo36_02.ast");
+ //Console::Append( TEXT( "Winmain.cpp called BuildMainWindow()" ) );
+
+ //Prefs::Create(); // This creates windows preferences
+ //Console::Append( TEXT( "Winmain.cpp called Prefs::Create()" ) );
+
+ // Show window
+
+ Plugin::FindAll ( szPluginDir, TEXT( "in_*.dll" ), true );
+ Plugin::FindAll( szPluginDir, TEXT( "out_*.dll" ), false );
+ Plugin::FindAll ( szPluginDir, TEXT( "vis_*.dll" ), false );
+ Plugin::FindAll ( szPluginDir, TEXT( "dsp_*.dll" ), false );
+ Plugin::FindAll ( szPluginDir, TEXT( "gen_*.dll" ), true );
+
+ PluginManager::Fill();
+
+ wprintf( "Winmain.cpp > PluginManager::Fill()\n" );
+
+ // ---------------------------------------------------------------------------------------
+ // Set volume. This must probably be done after the dll is loaded.
+ GlobalVolume = Playback::Volume::Get();
+ GlobalCurrentVolume = GlobalVolume;
+ Output_SetVolume( GlobalVolume );
+ wprintf("\n >>> Volume(%i)\n\n", GlobalVolume);
+ // ---------------------------------------------------------------------------------------
+
+
+ // =======================================================================================
+
+ // Check plugin presence
+ // =======================================================================================
+
+
+ // =======================================================================================
+
+ // Todo: all the rest...
+ // ACCEL accels[] = {
+
+ // =======================================================================================
+
+
+
+ // =======================================================================================
+
+ //Playback::Play();
+ //play_file("C:\\opening.hps");
+ //play_file("C:\\Files\\Spel och spelfusk\\Console\\Gamecube\\Code\\Dolphin\\Binary\\win32\\evt_x_event_00.dsp");
+ //printf("Winmain.cpp called Playback.cpp:Playback::Play()\n");
+
+ // =======================================================================================
+ // ---- Set volume and get current location ----
+ // Somehow we don't have access to active_input_plugin->plugin->GetLength() from here so
+ // we have to call it in Playback::UpdateSeek() instead
+ //Sleep(1000);
+
+ //Playback::UpdateSeek();
+ //Output_SetVolume( 100 ); // volume is better set from the ini file
+ // ---------------------------------------------------------------------------------------
+ // =======================================================================================
+
+
+ // =======================================================================================
+ // Check the plugins
+ if( input_plugins.empty() )
+ {
+ wprintf("\n***Warning: The input plugin is not working\n\n");
+ }
+
+ if( !active_input_plugin || !active_input_plugin->plugin )
+ {
+ wprintf("The input plugin is not activated yet\n");
+ }
+ else
+ {
+ //const int ms_len = active_input_plugin->plugin->GetLength();
+ //const int ms_cur = active_input_plugin->plugin->GetOutputTime();
+ //wprintf("We are at <%i of %i>\n", ms_cur, ms_len);
+ }
+ // ---------------------------------------------------------------------------------------
+ if( active_output_count > 0 )
+ {
+ // Minimum
+ int res_temp;
+ for( int i = 0; i < active_output_count; i++ )
+ {
+ res_temp = active_output_plugins[ i ]->plugin->GetOutputTime();
+ }
+ wprintf("Playback progress <%i>\n", res_temp);
+ }
+ else
+ {
+ wprintf("\n***Warning: The output plugin is not working\n\n");
+ }
+ // =======================================================================================
+
+
+ // =======================================================================================
+ // Current playlist items
+ wprintf("Size & index <%i> <%i>\n", playlist->GetSize(), playlist->GetCurIndex());
+ // =======================================================================================
+
+
+ // =======================================================================================
+ //This worked
+ //Sleep(2000);
+ //Playback::Stop();
+ //playlist->RemoveAll();
+ //play_file("C:\\demo36_02.ast");
+ // =======================================================================================
+
+ // =======================================================================================
+ // Current playlist items
+ wprintf("Size & index <%i> <%i>\n", playlist->GetSize(), playlist->GetCurIndex());
+ // =======================================================================================
+
+
+ // =======================================================================================
+ // This worked
+ //Sleep(5000);
+ //Playback::Stop();
+ //Playback::Play();
+ // =======================================================================================
+
+
+ // =======================================================================================
+
+ //bool bPlaying = false;
+ //TCHAR * szFilename = TEXT("C:\Files\Spel och spelfusk\Console\Gamecube\Code\vgmstream (isolate ast)\Music\demo36_02.ast");
+
+ //bPlaying = OpenPlay( szFilename, 1 );
+ //bPlaying = OpenPlay( szFilename, iIndex + 1 );
+ //Console::Append( TEXT( "Playback.cpp:Playback::Play() called OpenPlay" ) );
+
+ // =======================================================================================
+
+
+ // =======================================================================================
+ // Start the timer
+ if(!TimerCreated && bLoop) // Only create this the first time
+ {
+ wprintf("Created the timer\n");
+ MakeTime();
+ TimerCreated = true;
+ }
+ // =======================================================================================
+
+ wprintf( "DLL > main_dll() > End\n\n\n" );
+
+ //std::cin.get();
+}
+
+
+
+
+
+
+// =======================================================================================
+// Should I use this?
+void close()
+{
+
+ printf( "The Winmain.cpp message loop was reached\n" );
+
+ // Message loop
+ //std::cin.get();
+
+ Playback::Stop(); // If we don't call this before we unload the dll we get a crash
+
+ printf("We are now past the message loop\n" );
+
+ //DestroyAcceleratorTable( hAccel );
+
+
+ // =======================================================================================
+ // Input
+ vector ::iterator iter_input = input_plugins.begin();
+ while( iter_input != input_plugins.end() )
+ {
+ ( *iter_input )->Unload();
+ iter_input++;
+ }
+
+ // Output
+ vector ::iterator iter_output = output_plugins.begin();
+ while( iter_output != output_plugins.end() )
+ {
+ ( *iter_output )->Unload();
+ iter_output++;
+ }
+
+ // General
+ vector ::iterator iter_gen = gen_plugins.begin();
+ while( iter_gen != gen_plugins.end() )
+ {
+ ( *iter_gen )->Unload();
+ iter_gen++;
+ }
+ // =======================================================================================
+
+
+ // TODO: create main::destroy
+ // UnregisterClass( PA_CLASSNAME, g_hInstance );
+
+ //Prefs::Destroy();
+
+ //Font::Destroy();
+
+/*
+ delete [] szPluginDir;
+ delete [] szHomeDir;
+*/
+
+ // ---------------------------------------------------------------------------------------
+ // We don't save any changes
+ //Conf::Write();
+
+ //printf("Winmain.cpp called Conf::Write(), the last function\n");
+ // ---------------------------------------------------------------------------------------
+
+ //std::cin.get(); // Let use see all messages
+
+ //return 0;
+}
+// =======================================================================================
\ No newline at end of file
diff --git a/Branches/MusicMod/Player/Src/PlayerExport.cpp b/Branches/MusicMod/Player/Src/PlayerExport.cpp
new file mode 100644
index 0000000000..52954bd723
--- /dev/null
+++ b/Branches/MusicMod/Player/Src/PlayerExport.cpp
@@ -0,0 +1,162 @@
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Include
+// ŻŻŻŻŻŻŻŻŻŻ
+#include // System
+
+#include "../../Common/Src/Console.h" // Local common
+
+#include "OutputPlugin.h" // Local
+#include "Playback.h"
+#include "Playlist.h"
+
+#define _DLL_PLAYER_H_
+#include "PlayerExport.h" // DLL Player
+//////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Declarations and definitions
+// ŻŻŻŻŻŻŻŻŻŻ
+std::string CurrentlyPlayingFile;
+int GlobalVolume;
+int GlobalCurrentVolume;
+bool GlobalPause;
+bool TimerCreated = false;
+bool Initialized = false;
+/////////////////////////////////
+
+
+// -------------------------
+/* We keep the file in the playlist, even though we currently only every have one file here
+ at a time */
+// ---------
+void AddFileToPlaylist(char * a)
+{
+ //playlist->RemoveAll();
+
+ #include "unicode.h"
+ const int iLen = strlen(a); // I can't do this because I don't
+
+ printf( "iLen <%i>\n", iLen );
+
+ // ---------------------------------------------------------------------------------------
+ // Do some string conversion
+ TCHAR * szKeep;
+ szKeep = new TCHAR[ iLen + 1 ];
+ ToTchar( szKeep, a, iLen );
+ szKeep[ iLen ] = TEXT( '\0' );
+ playlist->PushBack( szKeep );
+ // ---------------------------------------------------------------------------------------
+
+ // If we added a second file the current index = -1 so we have to change that back
+ playlist->SetCurIndex( 0 );
+}
+
+
+
+void Player_Play(char * FileName)
+{
+ wprintf("Play file <%s>\n", FileName);
+
+ // Check if the file exists
+ if(GetFileAttributes(FileName) == INVALID_FILE_ATTRIBUTES)
+ {
+ wprintf("Warning: The file <%s> does not exist. Something is wrong.\n", FileName);
+ return;
+ }
+
+ Playback::Stop();
+ //wprintf("Stop\n");
+ playlist->RemoveAll();
+ //wprintf("RemoveAll\n");
+ AddFileToPlaylist(FileName);
+ //wprintf("addfiletoplaylist\n");
+
+ // Play the file
+ Playback::Play();
+
+ CurrentlyPlayingFile = FileName;
+
+ // ---------------------------------------------------------------------------------------
+ // Set volume. This must probably be done after the dll is loaded.
+ //Output_SetVolume( Playback::Volume::Get() );
+ //wprintf("Volume(%i)\n", Playback::Volume::Get());
+ // ---------------------------------------------------------------------------------------
+
+ GlobalPause = false;
+}
+
+void Player_Pause()
+{
+ if (!GlobalPause)
+ {
+ wprintf("DLL > Pause\n");
+ Playback::Pause();
+ GlobalPause = true;
+ }
+ else
+ {
+ wprintf("DLL > UnPause from Pause\n");
+ Player_Unpause();
+ GlobalPause = false;
+ }
+}
+
+void Player_Unpause()
+{
+ wprintf("DLL > UnPause\n");
+ Playback::Play();
+ GlobalPause = false;
+}
+
+void Player_Mute()
+{
+ wprintf("DLL > Mute <%i> <%i>\n", GlobalVolume, GlobalCurrentVolume);
+
+ // ---------------------------------------------------------------------------------------
+ // Set volume. For some reason Playback::Volume::Get() is not updated when we run Output_SetVolume()
+ // I probably disabled it by mistake, so we only keep track of the volume with GlobalVolume from now on
+ if(GlobalCurrentVolume > 0)
+ {
+ Output_SetVolume( 0 );
+ GlobalCurrentVolume = 0;
+ wprintf("DLL > Volume <%i>\n", GlobalCurrentVolume);
+ }
+ else
+ {
+ //Output_SetVolume( GlobalVolume );
+ Output_SetVolume( GlobalVolume );
+ GlobalCurrentVolume = GlobalVolume;
+ wprintf("DLL > Volume <%i>\n", GlobalCurrentVolume);
+ }
+
+ //wprintf("Volume(%i)\n", Playback::Volume::Get());
+ // ---------------------------------------------------------------------------------------
+}
+
+
+
+void Player_Volume(int a)
+{
+ GlobalVolume = a;
+ Output_SetVolume( GlobalVolume );
+ wprintf("DLL > Volume <%i> <%i>\n", GlobalVolume, GlobalCurrentVolume);
+}
+
+void ShowConsole()
+{
+ //startConsoleWin(130, 10000, "Console Window"); // give room for 2000 rows
+ StartConsoleWin(100, 2000, "ConsoleDLL"); // give room for 2000 rows
+}
+
+
+void Player_Console(bool Console)
+{
+ if(Console)
+ ShowConsole();
+ else
+ #if defined (_WIN32)
+ FreeConsole();
+ #endif
+}
\ No newline at end of file
diff --git a/Branches/MusicMod/Player/Src/PlayerExport.h b/Branches/MusicMod/Player/Src/PlayerExport.h
new file mode 100644
index 0000000000..0f1b63ad02
--- /dev/null
+++ b/Branches/MusicMod/Player/Src/PlayerExport.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Include
+// ŻŻŻŻŻŻŻŻŻŻ
+
+//////////////////////////////////
+
+
+// -------------------------
+// DLL Player
+// ---------
+void MakeTime();
+#ifndef _DLL_PLAYER_H_
+ extern int GlobalVolume;
+ extern int GlobalCurrentVolume;
+ extern bool GlobalPause;
+ extern bool TimerCreated;
+#endif
+
+
+// Dll export
+#define EXPORT __declspec(dllexport)
+EXPORT void Player_Main(bool Console);
+EXPORT void Player_Console(bool Console);
+EXPORT void Player_Play(char *);
+EXPORT void Player_Pause();
+EXPORT void Player_Unpause();
+EXPORT void Player_Mute();
+EXPORT void Player_Volume(int);
+
diff --git a/Branches/MusicMod/Player/Src/Playlist.cpp b/Branches/MusicMod/Player/Src/Playlist.cpp
index bdfdf9e4a1..68060b72b4 100644
--- a/Branches/MusicMod/Player/Src/Playlist.cpp
+++ b/Branches/MusicMod/Player/Src/Playlist.cpp
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "Playlist.h"
@@ -96,9 +96,12 @@ bool Playlist::Create()
{
if( WindowPlaylist ) return false;
+ // If this is not called a crash occurs
PlaylistView::Create();
-
-/*
+
+
+ #ifndef NOGUI
+
RECT ClientMain;
GetClientRect( WindowMain, &ClientMain );
@@ -134,15 +137,22 @@ bool Playlist::Create()
{
SetWindowLong( WindowPlaylist, GWL_WNDPROC, ( LONG )WndprocPlaylist );
}
-*/
+
Font::Apply( WindowPlaylist );
+ #endif NOGUI
+
+
TCHAR * szPlaylistMind = new TCHAR[ iHomeDirLen + 12 + 1 ];
memcpy( szPlaylistMind, szHomeDir, iHomeDirLen * sizeof( TCHAR ) );
memcpy( szPlaylistMind + iHomeDirLen, TEXT( "Plainamp.m3u" ), 12 * sizeof( TCHAR ) );
+
+
+
szPlaylistMind[ iHomeDirLen + 12 ] = TEXT( '\0' );
+
Playlist::AppendPlaylistFile( szPlaylistMind );
return true;
@@ -920,6 +930,10 @@ bool Playlist_DialogBoth( bool bOpenOrSave )
playlist->RemoveAll();
Playlist::AppendPlaylistFile( szFilename );
Playback::Play();
+
+
+ Console::Append( TEXT( "Playlist.cpp:Playlist_DialogBoth() called Playback::Play()" ) );
+ Console::Append( TEXT( " " ) );
}
}
else
@@ -960,6 +974,9 @@ bool Playlist::DialogSaveAs()
////////////////////////////////////////////////////////////////////////////////
bool Playlist::AppendPlaylistFile( TCHAR * szFilename )
{
+
+
+
// Open playlist file
HANDLE hFile = CreateFile(
szFilename, // LPCTSTR lpFileName
@@ -971,15 +988,20 @@ bool Playlist::AppendPlaylistFile( TCHAR * szFilename )
NULL // HANDLE hTemplateFile
);
+ // This will happen if there is no Playlist.m3u
+ /*
if( hFile == INVALID_HANDLE_VALUE )
{
// MessageBox( 0, TEXT( "Could not read playlist file" ), TEXT( "Error" ), MB_ICONERROR );
+ //Console::Append( "We got INVALID_HANDLE_VALUE" );
return false;
}
-
- const bool bEmptyBefore = ( playlist->GetSize() == 0 );
+ */
+ // Disable this
+ //const bool bEmptyBefore = ( playlist->GetSize() == 0 );
+// =======================================================================================
// Remove filename from so we can
// use it as relative directory root
TCHAR * szWalk = szFilename + _tcslen( szFilename ) - 1;
@@ -1002,6 +1024,7 @@ bool Playlist::AppendPlaylistFile( TCHAR * szFilename )
char * rawdata = new char[ iSizeBytes + 1 ]; // One more so we can write '\0' on EOF
DWORD iBytesRead;
+ // =======================================================================================
// Read whole file
ReadFile(
hFile, // HANDLE hFile
@@ -1040,20 +1063,32 @@ bool Playlist::AppendPlaylistFile( TCHAR * szFilename )
if( ( end - beg > 2 ) && ( *beg != '#' ) )
{
+
TCHAR * szKeep;
if( beg[ 1 ] == ':' )
{
// TODO: Better detection, network path?
- // Absolute path
+ // Absolute path, skip this
+ /*
const int iLen = end - beg;
+
+ TCHAR szBuffer[ 5000 ];
+ _stprintf( szBuffer, TEXT( "iLen <%i>" ), iLen );
+ Console::Append( szBuffer );
+
szKeep = new TCHAR[ iLen + 1 ];
ToTchar( szKeep, beg, iLen );
szKeep[ iLen ] = TEXT( '\0' );
+ */
+
}
else
{
// Skip initial so we don't get a double backslash in between
+
+
+
while( ( beg[ 0 ] == '\\' ) && ( beg < end ) ) beg++;
// Relative path
@@ -1220,7 +1255,8 @@ TCHAR * Playlist::GetFilename( int iIndex )
return ( entry ? entry->szFilename : NULL );
*/
-
+ //TCHAR * szFilename = "C:\Files\Spel och spelfusk\Console\Gamecube\Code\vgmstream (isolate ast)\Music\demo36_02.ast";
+ //return szFilename;
return ( TCHAR * )playlist->Get( iIndex );
}
diff --git a/Branches/MusicMod/Player/Src/Playlist.h b/Branches/MusicMod/Player/Src/Playlist.h
index a56ffe373d..82aaab7952 100644
--- a/Branches/MusicMod/Player/Src/Playlist.h
+++ b/Branches/MusicMod/Player/Src/Playlist.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_PLAYLIST_H
diff --git a/Branches/MusicMod/Player/Src/PlaylistControler.cpp b/Branches/MusicMod/Player/Src/PlaylistControler.cpp
index f0a67d5a4e..a3b0f17a68 100644
--- a/Branches/MusicMod/Player/Src/PlaylistControler.cpp
+++ b/Branches/MusicMod/Player/Src/PlaylistControler.cpp
@@ -13,6 +13,7 @@
#include "PlaylistControler.h"
#include "Config.h"
#include "Font.h"
+#include "Console.h"
bool bPlaylistFollow;
ConfBool cbPlaylistFollow( &bPlaylistFollow, TEXT( "PlaylistFollow" ), CONF_MODE_PUBLIC, true );
@@ -131,6 +132,9 @@ void PlaylistControler::SetCurIndex( int iIndex )
const int iCurIndexBefore = _database.GetCurIndex();
_database.SetCurIndex( iIndex );
+ // ---------------------------------------------------------------------------------------
+ // We disable the windows management
+ /*
if( bPlaylistFollow )
{
ListView_SetItemState( _hView, ( UINT )-1, 0, LVIS_SELECTED | LVIS_FOCUSED );
@@ -140,6 +144,8 @@ void PlaylistControler::SetCurIndex( int iIndex )
if( iCurIndexBefore != -1 )
ListView_RedrawItems( _hView, iCurIndexBefore, iCurIndexBefore );
ListView_RedrawItems( _hView, iIndex, iIndex );
+ */
+ // ---------------------------------------------------------------------------------------
}
// Returns on digit count change
@@ -196,6 +202,8 @@ PlaylistControler::PlaylistControler( HWND hView, bool bEnableZeroPadding, int *
_database.SetCurIndexSlave( piIndexSlave );
+ printf("PlaylistControler::PlaylistControler was called\n");
+
Refresh();
// TODO clear list view here???
@@ -207,9 +215,13 @@ void PlaylistControler::PushBack( TCHAR * szText )
const int iSize = _database.GetMaxIndex();
_database.PushBack( szText );
- ListView_SetItemCount( _hView, _database.GetSize() );
+
+ // ---------------------------------------------------------------------------------------
+ // Disabled windows function
+ //ListView_SetItemCount( _hView, _database.GetSize() );
- if( FixDigitsMore() ) Refresh();
+ //if( FixDigitsMore() ) Refresh();
+ // ---------------------------------------------------------------------------------------
}
void PlaylistControler::Insert( int i, TCHAR * szText )
@@ -225,7 +237,9 @@ void PlaylistControler::Insert( int i, TCHAR * szText )
void PlaylistControler::RemoveAll()
{
_database.Clear();
- ListView_DeleteAllItems( _hView );
+
+ // This is for the windows playlist, we don't use that
+ //ListView_DeleteAllItems( _hView );
if( FixDigitsLess() ) Refresh();
}
@@ -333,6 +347,8 @@ void PlaylistControler::SelectInvert()
const TCHAR * PlaylistControler::Get( int i )
{
+ Console::Append( TEXT("We are in PlaylistControler::Get()") );
+
return _database.Get( i );
}
diff --git a/Branches/MusicMod/Player/Src/PlaylistModel.h b/Branches/MusicMod/Player/Src/PlaylistModel.h
index c850772e20..76d28fb96f 100644
--- a/Branches/MusicMod/Player/Src/PlaylistModel.h
+++ b/Branches/MusicMod/Player/Src/PlaylistModel.h
@@ -9,6 +9,11 @@
// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
////////////////////////////////////////////////////////////////////////////////
+// =======================================================================================
+#include "Console.h"
+#include "Global.h"
+// =======================================================================================
+
#ifndef PLAYLIST_MODEL_H
#define PLAYLIST_MODEL_H 1
@@ -19,7 +24,6 @@
using namespace std;
-
class PlaylistModel
{
vector _database;
@@ -43,13 +47,20 @@ public:
_piCurIndex = piIndexSlave;
}
+ // =======================================================================================
+ // This is where the _database is populated
+ // =======================================================================================
void PushBack( TCHAR * szText )
{
- _database.push_back( szText );
+ Console::Append( TEXT( "PlaylistModel.h:_database.PushBack() was called " ) );
+
+ _database.push_back( szText ); // this is a API call
}
void Insert( int i, TCHAR * szText )
{
+ Console::Append( TEXT( "PlaylistModel.h:_database.Insert() was called " ) );
+
if( i <= *_piCurIndex ) ( *_piCurIndex )++;
_database.insert( _database.begin() + i, szText );
}
@@ -62,6 +73,8 @@ public:
const TCHAR * Get( int i )
{
+ //Console::Append( TEXT( "PlaylistModel.h:_database.Get() was called " ) );
+
if( 0 > i || i >= ( int )_database.size() )
{
static const TCHAR * szError = TEXT( "INDEX OUT OF RANGE" );
@@ -89,7 +102,13 @@ public:
void SetCurIndex( int iIndex )
{
- if( 0 > iIndex || iIndex >= ( int )_database.size() ) return;
+
+ if( 0 > iIndex || iIndex >= ( int )_database.size() )
+ {
+ wprintf("SetCurIndex > Return");
+ return;
+ }
+
*_piCurIndex = iIndex;
}
diff --git a/Branches/MusicMod/Player/Src/PlaylistView.cpp b/Branches/MusicMod/Player/Src/PlaylistView.cpp
index db3fec3cee..f2ba322d8d 100644
--- a/Branches/MusicMod/Player/Src/PlaylistView.cpp
+++ b/Branches/MusicMod/Player/Src/PlaylistView.cpp
@@ -9,7 +9,7 @@
// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
////////////////////////////////////////////////////////////////////////////////
-
+// =======================================================================================
#include "Playlist.h"
#include "Main.h"
#include "Status.h"
@@ -20,8 +20,12 @@
WNDPROC WndprocPlaylistBackup = NULL;
LRESULT CALLBACK WndprocPlaylist( HWND hwnd, UINT message, WPARAM wp, LPARAM lp );
+// =======================================================================================
+// =======================================================================================
+// This gives the values from the ini file.
+// ConfBool = class
PlaylistControler * playlist = NULL; // extern
bool bPlaylistEntryNumberZeroPadding;
@@ -32,10 +36,15 @@ ConfInt ciCurPlaylistPosition( &iCurPlaylistPosition, TEXT( "CurPlaylistPosition
bool bInfinitePlaylist;
ConfBool cbInfinitePlaylist( &bInfinitePlaylist, TEXT( "InfinitePlaylist" ), CONF_MODE_PUBLIC, false );
+// =======================================================================================
+// =======================================================================================
+
void PlaylistView::Create()
{
+ #ifndef NOGUI
+
RECT ClientMain;
GetClientRect( WindowMain, &ClientMain );
@@ -44,8 +53,7 @@ void PlaylistView::Create()
const int iPlaylistHeight = iClientHeight - iRebarHeight - iStatusHeight;
-
- LoadCommonControls();
+ //LoadCommonControls();
DWORD dwStyle;
@@ -65,10 +73,10 @@ void PlaylistView::Create()
WC_LISTVIEW, // class name - defined in commctrl.h
TEXT( "" ), // dummy text
dwStyle, // style
- 0,
- iRebarHeight, // + -2,
- iClientWidth,
- iPlaylistHeight,
+ 0,
+ iRebarHeight, // + -2,
+ iClientWidth,
+ iPlaylistHeight,
WindowMain, // parent
NULL, // ID
g_hInstance, // instance
@@ -76,89 +84,95 @@ void PlaylistView::Create()
if(!WindowPlaylist) return; // TODO
-
-playlist = new PlaylistControler( WindowPlaylist, bPlaylistEntryNumberZeroPadding, &iCurPlaylistPosition );
+ // This calls PlaylistControler::PlaylistControler()
+ playlist = new PlaylistControler( WindowPlaylist, bPlaylistEntryNumberZeroPadding, &iCurPlaylistPosition );
+ #else
+
+ HWND WindowPlaylist = NULL;
+ playlist = new PlaylistControler( WindowPlaylist, bPlaylistEntryNumberZeroPadding, &iCurPlaylistPosition );
+
+ #endif
// Exchange window procedure
- WndprocPlaylistBackup = ( WNDPROC )GetWindowLong( WindowPlaylist, GWL_WNDPROC );
- if( WndprocPlaylistBackup != NULL )
+ //WndprocPlaylistBackup = ( WNDPROC )GetWindowLong( WindowPlaylist, GWL_WNDPROC );
+ //if( WndprocPlaylistBackup != NULL )
+ //{
+ // SetWindowLong( WindowPlaylist, GWL_WNDPROC, ( LONG )WndprocPlaylist );
+ //}
+
+
+ //ListView_SetExtendedListViewStyle( WindowPlaylist, LVS_EX_FULLROWSELECT ); // | LVS_EX_GRIDLINES );
+ //playlist->Resize( WindowMain );
+
+ /*
+ * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp
+ *
+ * Remarks:
+ * If a column is added to a list-view control with index 0 (the leftmost column)
+ * and with LVCFMT_RIGHT or LVCFMT_CENTER specified, the text is not right-aligned
+ * or centered. The text in the index 0 column is left-aligned. Therefore if you
+ * keep inserting columns with index 0, the text in all columns are left-aligned.
+ * If you want the first column to be right-aligned or centered you can make a dummy
+ * column, then insert one or more columns with index 1 or higher and specify the
+ * alignment you require. Finally delete the dummy column.
+ */
+
+ //LV_COLUMN lvColumn;
+ //memset( &lvColumn, 0, sizeof( LV_COLUMN ) );
+ //lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
+ //
+ //// Number column (with dummy hack)
+ //lvColumn.fmt = LVCFMT_LEFT;
+ //lvColumn.cx = 0;
+ //lvColumn.pszText = TEXT( "" );
+ //ListView_InsertColumn( WindowPlaylist, 0, &lvColumn );
+ //lvColumn.fmt = LVCFMT_RIGHT;
+ //lvColumn.cx = 120;
+ //lvColumn.pszText = TEXT( "" );
+ //ListView_InsertColumn( WindowPlaylist, 1, &lvColumn );
+ //ListView_DeleteColumn( WindowPlaylist, 0 );
+
+ // Entry
+ //lvColumn.fmt = LVCFMT_LEFT;
+ //lvColumn.cx = 120;
+ //lvColumn.pszText = TEXT( "Filename" );
+ //ListView_InsertColumn(WindowPlaylist, 1, &lvColumn);
+
+
+
+ /*
+ stupid test code
+
+ SCROLLINFO scrollinfo;
+ ZeroMemory( &scrollinfo, sizeof( SCROLLINFO ) );
+ scrollinfo.cbSize = sizeof( SCROLLINFO );
+ scrollinfo.fMask = 0; // SIF_DISABLENOSCROLL;
+
+ if( !GetScrollInfo( WindowPlaylist, SB_VERT, &scrollinfo ) )
{
- SetWindowLong( WindowPlaylist, GWL_WNDPROC, ( LONG )WndprocPlaylist );
+ MessageBox( 0, "ERROR", "", 0 );
+ }
+ else
+ {
+ MessageBox( 0, "OKAY", "", 0 );
+ scrollinfo.fMask = SIF_DISABLENOSCROLL;
+ SetScrollInfo( WindowPlaylist, SB_VERT, &scrollinfo, TRUE );
+ }
+
+ if( !ShowScrollBar( WindowPlaylist, SB_VERT, TRUE ) )
+ {
+ MessageBox( 0, "ERROR ShowScrollBar", "", 0 );
}
- ListView_SetExtendedListViewStyle( WindowPlaylist, LVS_EX_FULLROWSELECT ); // | LVS_EX_GRIDLINES );
- playlist->Resize( WindowMain );
-
-/*
- * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp
- *
- * Remarks:
- * If a column is added to a list-view control with index 0 (the leftmost column)
- * and with LVCFMT_RIGHT or LVCFMT_CENTER specified, the text is not right-aligned
- * or centered. The text in the index 0 column is left-aligned. Therefore if you
- * keep inserting columns with index 0, the text in all columns are left-aligned.
- * If you want the first column to be right-aligned or centered you can make a dummy
- * column, then insert one or more columns with index 1 or higher and specify the
- * alignment you require. Finally delete the dummy column.
- */
-
-LV_COLUMN lvColumn;
-memset( &lvColumn, 0, sizeof( LV_COLUMN ) );
-lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
-
-// Number column (with dummy hack)
-lvColumn.fmt = LVCFMT_LEFT;
-lvColumn.cx = 0;
-lvColumn.pszText = TEXT( "" );
-ListView_InsertColumn( WindowPlaylist, 0, &lvColumn );
-lvColumn.fmt = LVCFMT_RIGHT;
-lvColumn.cx = 120;
-lvColumn.pszText = TEXT( "" );
-ListView_InsertColumn( WindowPlaylist, 1, &lvColumn );
-ListView_DeleteColumn( WindowPlaylist, 0 );
-
-// Entry
-lvColumn.fmt = LVCFMT_LEFT;
-lvColumn.cx = 120;
-lvColumn.pszText = TEXT( "Filename" );
-ListView_InsertColumn(WindowPlaylist, 1, &lvColumn);
-
-
-
-/*
-stupid test code
-
-SCROLLINFO scrollinfo;
-ZeroMemory( &scrollinfo, sizeof( SCROLLINFO ) );
-scrollinfo.cbSize = sizeof( SCROLLINFO );
-scrollinfo.fMask = 0; // SIF_DISABLENOSCROLL;
-
-if( !GetScrollInfo( WindowPlaylist, SB_VERT, &scrollinfo ) )
-{
- MessageBox( 0, "ERROR", "", 0 );
-}
-else
-{
- MessageBox( 0, "OKAY", "", 0 );
- scrollinfo.fMask = SIF_DISABLENOSCROLL;
- SetScrollInfo( WindowPlaylist, SB_VERT, &scrollinfo, TRUE );
-}
-
-if( !ShowScrollBar( WindowPlaylist, SB_VERT, TRUE ) )
-{
- MessageBox( 0, "ERROR ShowScrollBar", "", 0 );
-}
-
-
-SCROLLBARINFO scrollbarinfo;
-scrollbarinfo.cbSize = sizeof( SCROLLBARINFO );
-if( !GetScrollBarInfo( WindowPlaylist, OBJID_VSCROLL, &scrollbarinfo ) )
-{
- MessageBox( 0, "ERROR GetScrollBarInfo", "", 0 );
-}
-*/
+ SCROLLBARINFO scrollbarinfo;
+ scrollbarinfo.cbSize = sizeof( SCROLLBARINFO );
+ if( !GetScrollBarInfo( WindowPlaylist, OBJID_VSCROLL, &scrollbarinfo ) )
+ {
+ MessageBox( 0, "ERROR GetScrollBarInfo", "", 0 );
+ }
+ */
}
@@ -166,10 +180,6 @@ if( !GetScrollBarInfo( WindowPlaylist, OBJID_VSCROLL, &scrollbarinfo ) )
-
-
-
-
// Dragging
static int iItemHeight = 15;
static int iDragStartY = 0;
diff --git a/Branches/MusicMod/Player/Src/Plugin.cpp b/Branches/MusicMod/Player/Src/Plugin.cpp
index f6c9c31080..fcad94bb74 100644
--- a/Branches/MusicMod/Player/Src/Plugin.cpp
+++ b/Branches/MusicMod/Player/Src/Plugin.cpp
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "Plugin.h"
diff --git a/Branches/MusicMod/Player/Src/Plugin.h b/Branches/MusicMod/Player/Src/Plugin.h
index 4caed22ea2..eab9cff84c 100644
--- a/Branches/MusicMod/Player/Src/Plugin.h
+++ b/Branches/MusicMod/Player/Src/Plugin.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_PLUGIN_H
diff --git a/Branches/MusicMod/Player/Src/PluginManager.cpp b/Branches/MusicMod/Player/Src/PluginManager.cpp
index 432fc33130..ab5ac603fe 100644
--- a/Branches/MusicMod/Player/Src/PluginManager.cpp
+++ b/Branches/MusicMod/Player/Src/PluginManager.cpp
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "PluginManager.h"
diff --git a/Branches/MusicMod/Player/Src/Prefs.cpp b/Branches/MusicMod/Player/Src/Prefs.cpp
index 79f85b7c6f..359fa40b5f 100644
--- a/Branches/MusicMod/Player/Src/Prefs.cpp
+++ b/Branches/MusicMod/Player/Src/Prefs.cpp
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "Prefs.h"
diff --git a/Branches/MusicMod/Player/Src/Rebar.cpp b/Branches/MusicMod/Player/Src/Rebar.cpp
index 572b2baff9..b4c62ebeaf 100644
--- a/Branches/MusicMod/Player/Src/Rebar.cpp
+++ b/Branches/MusicMod/Player/Src/Rebar.cpp
@@ -1,13 +1,23 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+
+
+// =======================================================================================
+// WndprocRebar is called once every second during playback
+// =======================================================================================
+// In Toolbar::Create() the progress bar is called the Seekbar
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "Rebar.h"
@@ -20,7 +30,7 @@
#include "Config.h"
#include "Winamp/wa_ipc.h"
-#include "resrc1.h"
+#include "Resources/resrc1.h"
@@ -240,10 +250,12 @@ bool Toolbar::Create()
}
// Exchange window procedure
- WndprocRebarBackup = ( WNDPROC )GetWindowLong( WindowRebar, GWL_WNDPROC );
+ WndprocRebarBackup = ( WNDPROC )GetWindowLong( WindowRebar, GWL_WNDPROC );
+ //WndprocRebarBackup = ( WNDPROC )GetWindowLongPtr( WindowRebar, GWLP_WNDPROC ); // 64 bit
if( WndprocRebarBackup != NULL )
{
SetWindowLong( WindowRebar, GWL_WNDPROC, ( LONG )WndprocRebar );
+ //SetWindowLongPtr( WindowRebar, GWLP_WNDPROC, ( LONG )WndprocRebar );
}
rebar_menu = CreatePopupMenu();
@@ -1030,13 +1042,15 @@ void ContextMenuRebar( POINT * p )
////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndprocRebar( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
{
+ //Console::Append( TEXT("Rebar.cpp: WndprocRebar called") );
+
switch( message )
{
- case WM_CONTEXTMENU:
+ case WM_CONTEXTMENU: // This affects the placement of the progress bar
{
- POINT p;
- GetCursorPos( &p );
- ContextMenuRebar( &p );
+ //POINT p;
+ //GetCursorPos( &p );
+ //ContextMenuRebar( &p );
return 0;
}
@@ -1071,6 +1085,8 @@ LRESULT CALLBACK WndprocSeek( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
static bool bDown = false;
static int iLastVal = 0;
+ //Console::Append( TEXT("Rebar.cpp: WndprocSeek called") );
+
switch( message )
{
case WM_LBUTTONDOWN:
diff --git a/Branches/MusicMod/Player/Src/Resources/resrc1.rc b/Branches/MusicMod/Player/Src/Resources/resrc1.rc
index 70e368093b..83bbad7f33 100644
--- a/Branches/MusicMod/Player/Src/Resources/resrc1.rc
+++ b/Branches/MusicMod/Player/Src/Resources/resrc1.rc
@@ -7,7 +7,7 @@
//
// Generated from the TEXTINCLUDE 2 resource.
//
-#include "resource.h"
+//#include "resource.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
diff --git a/Branches/MusicMod/Player/Src/Timer.cpp b/Branches/MusicMod/Player/Src/Timer.cpp
new file mode 100644
index 0000000000..91081d98bb
--- /dev/null
+++ b/Branches/MusicMod/Player/Src/Timer.cpp
@@ -0,0 +1,126 @@
+// ================================================================================================
+// File description
+// ----------------
+/* In the GUI build there is a timer that is initiated with SetTimer() that will setup a timer that
+ calls the lpTimerFunc function pointer as long as your program is running a message loop. If it
+ doesn't run one, like in a console application (the NOGUI build), you'll have to use a different
+ kind of timer API, like timeSetEvent() or CreateThreadPoolTimer(). These timers use a different
+ thread to make the callback so be careful to properly lock and synchronize. */
+// ================================================================================================
+
+// ================================================================================================
+// Library requirements
+// ----------------
+// This program needs winmm.lib. There's no simpler or better way to make a timer withouth it.
+// ================================================================================================
+
+// ================================================================================================
+// Includes
+// ----------------
+#include
+//using namespace std;
+#include
+#include
+#include "Global.h"
+#include "PlayerExport.h"
+
+#include "InputPlugin.h"
+// ================================================================================================
+
+
+////////////////////////////////////////////////////////////////////////////////////////////
+// Declarations and definitions
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
+
+void MakeTime();
+
+int g_Stop = 0;
+extern std::string CurrentlyPlayingFile;
+extern bool GlobalPause;
+///////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////////////////////////
+// Manage restart when playback for a file has reached the end of the file
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
+#ifdef _M_X64
+ void CALLBACK Update()
+#else
+ void CALLBACK Update(unsigned int,unsigned int,unsigned long,unsigned long,unsigned long)
+#endif
+{
+ //wprintf("DLL > Update() > Begin (%i)\n", active_input_plugin);
+
+ // --------------------------------
+ // Manage restart when playback for a file has reached the end of the file
+ // --------------
+ // Check if the input plugin is activated
+ if(!active_input_plugin || !active_input_plugin->plugin)
+ {
+ wprintf("The input plugin is not activated yet\n");
+ }
+ else
+ {
+ const int ms_len = active_input_plugin->plugin->GetLength();
+ const int ms_cur = active_input_plugin->plugin->GetOutputTime();
+
+ // Get the current playback progress
+ float progress;
+ if(ms_len > 0)
+ progress = (float)ms_cur / ms_len;
+ else
+ progress = 0;
+
+ if ( progress > 0.7 ) // Only show this if we are getting close to the end, for bugtesting
+ // basically
+ {
+ wprintf("Playback progress <%i of %i>\n", ms_cur, ms_len);
+ }
+
+ // Because cur never go all the way to len we can't use a == comparison. Insted of this
+ // we could also check if the location is the same as right before.
+ if(ms_cur > ms_len - 1000 && !GlobalPause) // avoid restarting in cases where we just pressed pause
+ {
+ wprintf("Restart <%s>\n", CurrentlyPlayingFile.c_str());
+ Player_Play((char *)CurrentlyPlayingFile.c_str());
+ }
+ }
+ // --------------
+
+ //wprintf("Make new time\n");
+ MakeTime(); // Make a new one
+}
+
+void MakeTime()
+{
+ timeSetEvent(
+ 2000, // Interval in ms
+ 0,
+ #ifdef _M_X64
+ (LPTIMECALLBACK) Update, // The function
+ #else
+ Update,
+ #endif
+ 0,
+ 0);
+}
+///////////////////////////
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////
+// Start the timer
+// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
+int MainTimer()
+{
+ MakeTime();
+
+ //while( g_Stop == 0 )
+ //{
+ // cout << ".";
+ //}
+
+ //wprintf("MakeTime\n");
+
+ return 0;
+}
+///////////////////////////
\ No newline at end of file
diff --git a/Branches/MusicMod/Player/Src/Unicode.cpp b/Branches/MusicMod/Player/Src/Unicode.cpp
index e332100b3d..820895d93e 100644
--- a/Branches/MusicMod/Player/Src/Unicode.cpp
+++ b/Branches/MusicMod/Player/Src/Unicode.cpp
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "Unicode.h"
diff --git a/Branches/MusicMod/Player/Src/Unicode.h b/Branches/MusicMod/Player/Src/Unicode.h
index 55a1770e49..10a53e873c 100644
--- a/Branches/MusicMod/Player/Src/Unicode.h
+++ b/Branches/MusicMod/Player/Src/Unicode.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_UNICODE_H
diff --git a/Branches/MusicMod/Player/Src/VisModule.cpp b/Branches/MusicMod/Player/Src/VisModule.cpp
index fce981a0f7..b171ed7b3f 100644
--- a/Branches/MusicMod/Player/Src/VisModule.cpp
+++ b/Branches/MusicMod/Player/Src/VisModule.cpp
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "VisModule.h"
diff --git a/Branches/MusicMod/Player/Src/VisPlugin.cpp b/Branches/MusicMod/Player/Src/VisPlugin.cpp
index af86f41861..c25262e715 100644
--- a/Branches/MusicMod/Player/Src/VisPlugin.cpp
+++ b/Branches/MusicMod/Player/Src/VisPlugin.cpp
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "VisPlugin.h"
@@ -148,6 +148,7 @@ bool VisPlugin::Unload()
_stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() );
Console::Append( szBuffer );
Console::Append( TEXT( " " ) );
+ printf( ">>>Unloading <%s>\n" , GetFilename() );
header = NULL;
diff --git a/Branches/MusicMod/Player/Src/VisPlugin.h b/Branches/MusicMod/Player/Src/VisPlugin.h
index 92cfdc5a40..d28b1a5f8e 100644
--- a/Branches/MusicMod/Player/Src/VisPlugin.h
+++ b/Branches/MusicMod/Player/Src/VisPlugin.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_VIS_PLUGIN_H
diff --git a/Branches/MusicMod/Player/Src/Winamp.cpp b/Branches/MusicMod/Player/Src/Winamp.cpp
index a5bc06060f..6e123b6355 100644
--- a/Branches/MusicMod/Player/Src/Winamp.cpp
+++ b/Branches/MusicMod/Player/Src/Winamp.cpp
@@ -1,13 +1,17 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+// =======================================================================================
+// WndprocWinamp is called repeatedly when the cursor is moved over the main window
+// =======================================================================================
+
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#include "Winamp.h"
@@ -39,6 +43,8 @@ int IPC_GETPLAINBARTARGET = 0;
////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndprocWinamp( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
{
+ //Console::Append( TEXT( "Winamp.cc:WndprocWinamp was called" ) );
+
switch( message )
{
case WM_COMMAND:
@@ -648,6 +654,9 @@ LRESULT CALLBACK WndprocWinamp( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
case IPC_WRITE_EXTENDED_FILE_INFO: break;
case IPC_FORMAT_TITLE: break;
*/
+// =======================================================================================
+// Let's remove this
+/*
case IPC_GETUNCOMPRESSINTERFACE:
if( wp == 0x10100000 )
{
@@ -662,6 +671,8 @@ LRESULT CALLBACK WndprocWinamp( HWND hwnd, UINT message, WPARAM wp, LPARAM lp )
return ( LRESULT )uncompress;
}
break;
+*/
+// =======================================================================================
case IPC_ADD_PREFS_DLG:
Prefs::AddPage( ( prefsDlgRec * )wp );
diff --git a/Branches/MusicMod/Player/Src/Winamp.h b/Branches/MusicMod/Player/Src/Winamp.h
index 288880174a..7ef4344c69 100644
--- a/Branches/MusicMod/Player/Src/Winamp.h
+++ b/Branches/MusicMod/Player/Src/Winamp.h
@@ -1,13 +1,13 @@
-////////////////////////////////////////////////////////////////////////////////
-// Plainamp, Open source Winamp core
-//
-// Copyright İ 2005 Sebastian Pipping
-//
-// --> http://www.hartwork.org
-//
-// This source code is released under the GNU General Public License (GPL).
-// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// Plainamp, Open source Winamp core
+//
+// Copyright İ 2005 Sebastian Pipping
+//
+// --> http://www.hartwork.org
+//
+// This source code is released under the GNU General Public License (GPL).
+// See GPL.txt for details. Any non-GPL usage is strictly forbidden.
+////////////////////////////////////////////////////////////////////////////////
#ifndef PA_WINAMP_H
diff --git a/Branches/MusicMod/Player/Src/afxres.h b/Branches/MusicMod/Player/Src/afxres.h
new file mode 100644
index 0000000000..7eb4900177
--- /dev/null
+++ b/Branches/MusicMod/Player/Src/afxres.h
@@ -0,0 +1,823 @@
+// This is a part of the Microsoft Foundation Classes C++ library.
+// Copyright (C) Microsoft Corporation
+// All rights reserved.
+//
+// This source code is only intended as a supplement to the
+// Microsoft Foundation Classes Reference and related
+// electronic documentation provided with the library.
+// See these sources for detailed information regarding the
+// Microsoft Foundation Classes product.
+
+#ifndef __AFXRES_H__
+#define __AFXRES_H__
+
+#ifdef RC_INVOKED
+#ifndef _INC_WINDOWS
+#define _INC_WINDOWS
+ #include "winres.h" // extract from windows header
+#endif
+#endif
+
+#ifdef _AFX_MINREBUILD
+#pragma component(minrebuild, off)
+#endif
+
+#ifdef RC_INVOKED
+ #if defined(_VC80_UPGRADE) && (_VC80_UPGRADE >= 0x0700) && (_VC80_UPGRADE < 0x0800) && defined(IDR_MANIFEST)
+ // Handle project upgrade from VC7/VC7.1 for projects with manifest
+ #define IDR_MANIFEST 1024
+ #endif
+#endif // RC_INVOKED
+
+#ifdef APSTUDIO_INVOKED
+#define APSTUDIO_HIDDEN_SYMBOLS
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// MFC resource types (see Technical note TN024 for implementation details)
+
+#ifndef RC_INVOKED
+#define RT_DLGINIT MAKEINTRESOURCE(240)
+#define RT_TOOLBAR MAKEINTRESOURCE(241)
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef APSTUDIO_INVOKED
+#undef APSTUDIO_HIDDEN_SYMBOLS
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// General style bits etc
+
+// ControlBar styles
+#define CBRS_ALIGN_LEFT 0x1000L
+#define CBRS_ALIGN_TOP 0x2000L
+#define CBRS_ALIGN_RIGHT 0x4000L
+#define CBRS_ALIGN_BOTTOM 0x8000L
+#define CBRS_ALIGN_ANY 0xF000L
+
+#define CBRS_BORDER_LEFT 0x0100L
+#define CBRS_BORDER_TOP 0x0200L
+#define CBRS_BORDER_RIGHT 0x0400L
+#define CBRS_BORDER_BOTTOM 0x0800L
+#define CBRS_BORDER_ANY 0x0F00L
+
+#define CBRS_TOOLTIPS 0x0010L
+#define CBRS_FLYBY 0x0020L
+#define CBRS_FLOAT_MULTI 0x0040L
+#define CBRS_BORDER_3D 0x0080L
+#define CBRS_HIDE_INPLACE 0x0008L
+#define CBRS_SIZE_DYNAMIC 0x0004L
+#define CBRS_SIZE_FIXED 0x0002L
+#define CBRS_FLOATING 0x0001L
+
+#define CBRS_GRIPPER 0x00400000L
+
+#define CBRS_ORIENT_HORZ (CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM)
+#define CBRS_ORIENT_VERT (CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT)
+#define CBRS_ORIENT_ANY (CBRS_ORIENT_HORZ|CBRS_ORIENT_VERT)
+
+#define CBRS_ALL 0x0040FFFFL
+
+// the CBRS_ style is made up of an alignment style and a draw border style
+// the alignment styles are mutually exclusive
+// the draw border styles may be combined
+#define CBRS_NOALIGN 0x00000000L
+#define CBRS_LEFT (CBRS_ALIGN_LEFT|CBRS_BORDER_RIGHT)
+#define CBRS_TOP (CBRS_ALIGN_TOP|CBRS_BORDER_BOTTOM)
+#define CBRS_RIGHT (CBRS_ALIGN_RIGHT|CBRS_BORDER_LEFT)
+#define CBRS_BOTTOM (CBRS_ALIGN_BOTTOM|CBRS_BORDER_TOP)
+
+/////////////////////////////////////////////////////////////////////////////
+// Manifest Resource ID of manifest containing Localized DLL information
+#define ID_MFCLOC_MANIFEST 1000
+
+/////////////////////////////////////////////////////////////////////////////
+// Standard window components
+
+// Mode indicators in status bar - these are routed like commands
+#define ID_INDICATOR_EXT 0xE700 // extended selection indicator
+#define ID_INDICATOR_CAPS 0xE701 // cap lock indicator
+#define ID_INDICATOR_NUM 0xE702 // num lock indicator
+#define ID_INDICATOR_SCRL 0xE703 // scroll lock indicator
+#define ID_INDICATOR_OVR 0xE704 // overtype mode indicator
+#define ID_INDICATOR_REC 0xE705 // record mode indicator
+#define ID_INDICATOR_KANA 0xE706 // kana lock indicator
+
+#define ID_SEPARATOR 0 // special separator value
+
+#ifndef RC_INVOKED // code only
+// Standard control bars (IDW = window ID)
+#define AFX_IDW_CONTROLBAR_FIRST 0xE800
+#define AFX_IDW_CONTROLBAR_LAST 0xE8FF
+
+#define AFX_IDW_TOOLBAR 0xE800 // main Toolbar for window
+#define AFX_IDW_STATUS_BAR 0xE801 // Status bar window
+#define AFX_IDW_PREVIEW_BAR 0xE802 // PrintPreview Dialog Bar
+#define AFX_IDW_RESIZE_BAR 0xE803 // OLE in-place resize bar
+#define AFX_IDW_REBAR 0xE804 // COMCTL32 "rebar" Bar
+#define AFX_IDW_DIALOGBAR 0xE805 // CDialogBar
+
+// Note: If your application supports docking toolbars, you should
+// not use the following IDs for your own toolbars. The IDs chosen
+// are at the top of the first 32 such that the bars will be hidden
+// while in print preview mode, and are not likely to conflict with
+// IDs your application may have used succesfully in the past.
+
+#define AFX_IDW_DOCKBAR_TOP 0xE81B
+#define AFX_IDW_DOCKBAR_LEFT 0xE81C
+#define AFX_IDW_DOCKBAR_RIGHT 0xE81D
+#define AFX_IDW_DOCKBAR_BOTTOM 0xE81E
+#define AFX_IDW_DOCKBAR_FLOAT 0xE81F
+
+// Macro for mapping standard control bars to bitmask (limit of 32)
+#define AFX_CONTROLBAR_MASK(nIDC) (1L << (nIDC - AFX_IDW_CONTROLBAR_FIRST))
+
+// parts of Main Frame
+#define AFX_IDW_PANE_FIRST 0xE900 // first pane (256 max)
+#define AFX_IDW_PANE_LAST 0xE9ff
+#define AFX_IDW_HSCROLL_FIRST 0xEA00 // first Horz scrollbar (16 max)
+#define AFX_IDW_VSCROLL_FIRST 0xEA10 // first Vert scrollbar (16 max)
+
+#define AFX_IDW_SIZE_BOX 0xEA20 // size box for splitters
+#define AFX_IDW_PANE_SAVE 0xEA21 // to shift AFX_IDW_PANE_FIRST
+#endif //!RC_INVOKED
+
+#ifndef APSTUDIO_INVOKED
+
+// common style for form views
+#define AFX_WS_DEFAULT_VIEW (WS_CHILD | WS_VISIBLE | WS_BORDER)
+
+#endif //!APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+// Standard app configurable strings
+
+// for application title (defaults to EXE name or name in constructor)
+#define AFX_IDS_APP_TITLE 0xE000
+// idle message bar line
+#define AFX_IDS_IDLEMESSAGE 0xE001
+// message bar line when in shift-F1 help mode
+#define AFX_IDS_HELPMODEMESSAGE 0xE002
+// document title when editing OLE embedding
+#define AFX_IDS_APP_TITLE_EMBEDDING 0xE003
+// company name
+#define AFX_IDS_COMPANY_NAME 0xE004
+// object name when server is inplace
+#define AFX_IDS_OBJ_TITLE_INPLACE 0xE005
+
+/////////////////////////////////////////////////////////////////////////////
+// Standard Commands
+
+// File commands
+#define ID_FILE_NEW 0xE100
+#define ID_FILE_OPEN 0xE101
+#define ID_FILE_CLOSE 0xE102
+#define ID_FILE_SAVE 0xE103
+#define ID_FILE_SAVE_AS 0xE104
+#define ID_FILE_PAGE_SETUP 0xE105
+#define ID_FILE_PRINT_SETUP 0xE106
+#define ID_FILE_PRINT 0xE107
+#define ID_FILE_PRINT_DIRECT 0xE108
+#define ID_FILE_PRINT_PREVIEW 0xE109
+#define ID_FILE_UPDATE 0xE10A
+#define ID_FILE_SAVE_COPY_AS 0xE10B
+#define ID_FILE_SEND_MAIL 0xE10C
+#define ID_FILE_NEW_FRAME 0xE10D
+
+#define ID_FILE_MRU_FIRST 0xE110
+#define ID_FILE_MRU_FILE1 0xE110 // range - 16 max
+#define ID_FILE_MRU_FILE2 0xE111
+#define ID_FILE_MRU_FILE3 0xE112
+#define ID_FILE_MRU_FILE4 0xE113
+#define ID_FILE_MRU_FILE5 0xE114
+#define ID_FILE_MRU_FILE6 0xE115
+#define ID_FILE_MRU_FILE7 0xE116
+#define ID_FILE_MRU_FILE8 0xE117
+#define ID_FILE_MRU_FILE9 0xE118
+#define ID_FILE_MRU_FILE10 0xE119
+#define ID_FILE_MRU_FILE11 0xE11A
+#define ID_FILE_MRU_FILE12 0xE11B
+#define ID_FILE_MRU_FILE13 0xE11C
+#define ID_FILE_MRU_FILE14 0xE11D
+#define ID_FILE_MRU_FILE15 0xE11E
+#define ID_FILE_MRU_FILE16 0xE11F
+#define ID_FILE_MRU_LAST 0xE11F
+
+// Edit commands
+#define ID_EDIT_CLEAR 0xE120
+#define ID_EDIT_CLEAR_ALL 0xE121
+#define ID_EDIT_COPY 0xE122
+#define ID_EDIT_CUT 0xE123
+#define ID_EDIT_FIND 0xE124
+#define ID_EDIT_PASTE 0xE125
+#define ID_EDIT_PASTE_LINK 0xE126
+#define ID_EDIT_PASTE_SPECIAL 0xE127
+#define ID_EDIT_REPEAT 0xE128
+#define ID_EDIT_REPLACE 0xE129
+#define ID_EDIT_SELECT_ALL 0xE12A
+#define ID_EDIT_UNDO 0xE12B
+#define ID_EDIT_REDO 0xE12C
+
+// Window commands
+#define ID_WINDOW_NEW 0xE130
+#define ID_WINDOW_ARRANGE 0xE131
+#define ID_WINDOW_CASCADE 0xE132
+#define ID_WINDOW_TILE_HORZ 0xE133
+#define ID_WINDOW_TILE_VERT 0xE134
+#define ID_WINDOW_SPLIT 0xE135
+#ifndef RC_INVOKED // code only
+#define AFX_IDM_WINDOW_FIRST 0xE130
+#define AFX_IDM_WINDOW_LAST 0xE13F
+#define AFX_IDM_FIRST_MDICHILD 0xFF00 // window list starts here
+#endif //!RC_INVOKED
+
+// Help and App commands
+#define ID_APP_ABOUT 0xE140
+#define ID_APP_EXIT 0xE141
+#define ID_HELP_INDEX 0xE142
+#define ID_HELP_FINDER 0xE143
+#define ID_HELP_USING 0xE144
+#define ID_CONTEXT_HELP 0xE145 // shift-F1
+// special commands for processing help
+#define ID_HELP 0xE146 // first attempt for F1
+#define ID_DEFAULT_HELP 0xE147 // last attempt
+
+// Misc
+#define ID_NEXT_PANE 0xE150
+#define ID_PREV_PANE 0xE151
+
+// Format
+#define ID_FORMAT_FONT 0xE160
+
+// OLE commands
+#define ID_OLE_INSERT_NEW 0xE200
+#define ID_OLE_EDIT_LINKS 0xE201
+#define ID_OLE_EDIT_CONVERT 0xE202
+#define ID_OLE_EDIT_CHANGE_ICON 0xE203
+#define ID_OLE_EDIT_PROPERTIES 0xE204
+#define ID_OLE_VERB_FIRST 0xE210 // range - 16 max
+#ifndef RC_INVOKED // code only
+#define ID_OLE_VERB_LAST 0xE21F
+#endif //!RC_INVOKED
+
+// for print preview dialog bar
+#define AFX_ID_PREVIEW_CLOSE 0xE300
+#define AFX_ID_PREVIEW_NUMPAGE 0xE301 // One/Two Page button
+#define AFX_ID_PREVIEW_NEXT 0xE302
+#define AFX_ID_PREVIEW_PREV 0xE303
+#define AFX_ID_PREVIEW_PRINT 0xE304
+#define AFX_ID_PREVIEW_ZOOMIN 0xE305
+#define AFX_ID_PREVIEW_ZOOMOUT 0xE306
+
+// View commands (same number used as IDW used for control bar)
+#define ID_VIEW_TOOLBAR 0xE800
+#define ID_VIEW_STATUS_BAR 0xE801
+#define ID_VIEW_REBAR 0xE804
+#define ID_VIEW_AUTOARRANGE 0xE805
+ // E810 -> E81F must be kept in order for RANGE macros
+#define ID_VIEW_SMALLICON 0xE810
+#define ID_VIEW_LARGEICON 0xE811
+#define ID_VIEW_LIST 0xE812
+#define ID_VIEW_DETAILS 0xE813
+#define ID_VIEW_LINEUP 0xE814
+#define ID_VIEW_BYNAME 0xE815
+#define AFX_ID_VIEW_MINIMUM ID_VIEW_SMALLICON
+#define AFX_ID_VIEW_MAXIMUM ID_VIEW_BYNAME
+ // E800 -> E8FF reserved for other control bar commands
+
+// RecordForm commands
+#define ID_RECORD_FIRST 0xE900
+#define ID_RECORD_LAST 0xE901
+#define ID_RECORD_NEXT 0xE902
+#define ID_RECORD_PREV 0xE903
+
+/////////////////////////////////////////////////////////////////////////////
+// Standard control IDs
+
+#ifdef IDC_STATIC
+#undef IDC_STATIC
+#endif
+#define IDC_STATIC (-1) // all static controls
+
+/////////////////////////////////////////////////////////////////////////////
+// Standard string error/warnings
+
+#ifndef RC_INVOKED // code only
+#define AFX_IDS_SCFIRST 0xEF00
+#endif //!RC_INVOKED
+
+#define AFX_IDS_SCSIZE 0xEF00
+#define AFX_IDS_SCMOVE 0xEF01
+#define AFX_IDS_SCMINIMIZE 0xEF02
+#define AFX_IDS_SCMAXIMIZE 0xEF03
+#define AFX_IDS_SCNEXTWINDOW 0xEF04
+#define AFX_IDS_SCPREVWINDOW 0xEF05
+#define AFX_IDS_SCCLOSE 0xEF06
+#define AFX_IDS_SCRESTORE 0xEF12
+#define AFX_IDS_SCTASKLIST 0xEF13
+
+#define AFX_IDS_MDICHILD 0xEF1F
+
+#define AFX_IDS_DESKACCESSORY 0xEFDA
+
+// General strings
+#define AFX_IDS_OPENFILE 0xF000
+#define AFX_IDS_SAVEFILE 0xF001
+#define AFX_IDS_ALLFILTER 0xF002
+#define AFX_IDS_UNTITLED 0xF003
+#define AFX_IDS_SAVEFILECOPY 0xF004
+#define AFX_IDS_PREVIEW_CLOSE 0xF005
+#define AFX_IDS_UNNAMED_FILE 0xF006
+#define AFX_IDS_HIDE 0xF011
+
+// MFC Standard Exception Error messages
+#define AFX_IDP_NO_ERROR_AVAILABLE 0xF020
+#define AFX_IDS_NOT_SUPPORTED_EXCEPTION 0xF021
+#define AFX_IDS_RESOURCE_EXCEPTION 0xF022
+#define AFX_IDS_MEMORY_EXCEPTION 0xF023
+#define AFX_IDS_USER_EXCEPTION 0xF024
+#define AFX_IDS_INVALID_ARG_EXCEPTION 0xF025
+
+// Printing and print preview strings
+#define AFX_IDS_PRINTONPORT 0xF040
+#define AFX_IDS_ONEPAGE 0xF041
+#define AFX_IDS_TWOPAGE 0xF042
+#define AFX_IDS_PRINTPAGENUM 0xF043
+#define AFX_IDS_PREVIEWPAGEDESC 0xF044
+#define AFX_IDS_PRINTDEFAULTEXT 0xF045
+#define AFX_IDS_PRINTDEFAULT 0xF046
+#define AFX_IDS_PRINTFILTER 0xF047
+#define AFX_IDS_PRINTCAPTION 0xF048
+#define AFX_IDS_PRINTTOFILE 0xF049
+
+
+// OLE strings
+#define AFX_IDS_OBJECT_MENUITEM 0xF080
+#define AFX_IDS_EDIT_VERB 0xF081
+#define AFX_IDS_ACTIVATE_VERB 0xF082
+#define AFX_IDS_CHANGE_LINK 0xF083
+#define AFX_IDS_AUTO 0xF084
+#define AFX_IDS_MANUAL 0xF085
+#define AFX_IDS_FROZEN 0xF086
+#define AFX_IDS_ALL_FILES 0xF087
+// dynamically changing menu items
+#define AFX_IDS_SAVE_MENU 0xF088
+#define AFX_IDS_UPDATE_MENU 0xF089
+#define AFX_IDS_SAVE_AS_MENU 0xF08A
+#define AFX_IDS_SAVE_COPY_AS_MENU 0xF08B
+#define AFX_IDS_EXIT_MENU 0xF08C
+#define AFX_IDS_UPDATING_ITEMS 0xF08D
+// COlePasteSpecialDialog defines
+#define AFX_IDS_METAFILE_FORMAT 0xF08E
+#define AFX_IDS_DIB_FORMAT 0xF08F
+#define AFX_IDS_BITMAP_FORMAT 0xF090
+#define AFX_IDS_LINKSOURCE_FORMAT 0xF091
+#define AFX_IDS_EMBED_FORMAT 0xF092
+// other OLE utility strings
+#define AFX_IDS_PASTELINKEDTYPE 0xF094
+#define AFX_IDS_UNKNOWNTYPE 0xF095
+#define AFX_IDS_RTF_FORMAT 0xF096
+#define AFX_IDS_TEXT_FORMAT 0xF097
+// OLE datatype format error strings
+#define AFX_IDS_INVALID_CURRENCY 0xF098
+#define AFX_IDS_INVALID_DATETIME 0xF099
+#define AFX_IDS_INVALID_DATETIMESPAN 0xF09A
+
+// General error / prompt strings
+#define AFX_IDP_INVALID_FILENAME 0xF100
+#define AFX_IDP_FAILED_TO_OPEN_DOC 0xF101
+#define AFX_IDP_FAILED_TO_SAVE_DOC 0xF102
+#define AFX_IDP_ASK_TO_SAVE 0xF103
+#define AFX_IDP_FAILED_TO_CREATE_DOC 0xF104
+#define AFX_IDP_FILE_TOO_LARGE 0xF105
+#define AFX_IDP_FAILED_TO_START_PRINT 0xF106
+#define AFX_IDP_FAILED_TO_LAUNCH_HELP 0xF107
+#define AFX_IDP_INTERNAL_FAILURE 0xF108 // general failure
+#define AFX_IDP_COMMAND_FAILURE 0xF109 // command failure
+#define AFX_IDP_FAILED_MEMORY_ALLOC 0xF10A
+#define AFX_IDP_UNREG_DONE 0xF10B
+#define AFX_IDP_UNREG_FAILURE 0xF10C
+#define AFX_IDP_DLL_LOAD_FAILED 0xF10D
+#define AFX_IDP_DLL_BAD_VERSION 0xF10E
+
+// DDV parse errors
+#define AFX_IDP_PARSE_INT 0xF110
+#define AFX_IDP_PARSE_REAL 0xF111
+#define AFX_IDP_PARSE_INT_RANGE 0xF112
+#define AFX_IDP_PARSE_REAL_RANGE 0xF113
+#define AFX_IDP_PARSE_STRING_SIZE 0xF114
+#define AFX_IDP_PARSE_RADIO_BUTTON 0xF115
+#define AFX_IDP_PARSE_BYTE 0xF116
+#define AFX_IDP_PARSE_UINT 0xF117
+#define AFX_IDP_PARSE_DATETIME 0xF118
+#define AFX_IDP_PARSE_CURRENCY 0xF119
+#define AFX_IDP_PARSE_GUID 0xF11A
+#define AFX_IDP_PARSE_TIME 0xF11B
+#define AFX_IDP_PARSE_DATE 0xF11C
+
+// CFile/CArchive error strings for user failure
+#define AFX_IDP_FAILED_INVALID_FORMAT 0xF120
+#define AFX_IDP_FAILED_INVALID_PATH 0xF121
+#define AFX_IDP_FAILED_DISK_FULL 0xF122
+#define AFX_IDP_FAILED_ACCESS_READ 0xF123
+#define AFX_IDP_FAILED_ACCESS_WRITE 0xF124
+#define AFX_IDP_FAILED_IO_ERROR_READ 0xF125
+#define AFX_IDP_FAILED_IO_ERROR_WRITE 0xF126
+
+// Script errors / prompt strings
+#define AFX_IDP_SCRIPT_ERROR 0xF130
+#define AFX_IDP_SCRIPT_DISPATCH_EXCEPTION 0xF131
+
+// OLE errors / prompt strings
+#define AFX_IDP_STATIC_OBJECT 0xF180
+#define AFX_IDP_FAILED_TO_CONNECT 0xF181
+#define AFX_IDP_SERVER_BUSY 0xF182
+#define AFX_IDP_BAD_VERB 0xF183
+#define AFX_IDS_NOT_DOCOBJECT 0xF184
+#define AFX_IDP_FAILED_TO_NOTIFY 0xF185
+#define AFX_IDP_FAILED_TO_LAUNCH 0xF186
+#define AFX_IDP_ASK_TO_UPDATE 0xF187
+#define AFX_IDP_FAILED_TO_UPDATE 0xF188
+#define AFX_IDP_FAILED_TO_REGISTER 0xF189
+#define AFX_IDP_FAILED_TO_AUTO_REGISTER 0xF18A
+#define AFX_IDP_FAILED_TO_CONVERT 0xF18B
+#define AFX_IDP_GET_NOT_SUPPORTED 0xF18C
+#define AFX_IDP_SET_NOT_SUPPORTED 0xF18D
+#define AFX_IDP_ASK_TO_DISCARD 0xF18E
+#define AFX_IDP_FAILED_TO_CREATE 0xF18F
+
+// MAPI errors / prompt strings
+#define AFX_IDP_FAILED_MAPI_LOAD 0xF190
+#define AFX_IDP_INVALID_MAPI_DLL 0xF191
+#define AFX_IDP_FAILED_MAPI_SEND 0xF192
+
+#define AFX_IDP_FILE_NONE 0xF1A0
+#define AFX_IDP_FILE_GENERIC 0xF1A1
+#define AFX_IDP_FILE_NOT_FOUND 0xF1A2
+#define AFX_IDP_FILE_BAD_PATH 0xF1A3
+#define AFX_IDP_FILE_TOO_MANY_OPEN 0xF1A4
+#define AFX_IDP_FILE_ACCESS_DENIED 0xF1A5
+#define AFX_IDP_FILE_INVALID_FILE 0xF1A6
+#define AFX_IDP_FILE_REMOVE_CURRENT 0xF1A7
+#define AFX_IDP_FILE_DIR_FULL 0xF1A8
+#define AFX_IDP_FILE_BAD_SEEK 0xF1A9
+#define AFX_IDP_FILE_HARD_IO 0xF1AA
+#define AFX_IDP_FILE_SHARING 0xF1AB
+#define AFX_IDP_FILE_LOCKING 0xF1AC
+#define AFX_IDP_FILE_DISKFULL 0xF1AD
+#define AFX_IDP_FILE_EOF 0xF1AE
+
+#define AFX_IDP_ARCH_NONE 0xF1B0
+#define AFX_IDP_ARCH_GENERIC 0xF1B1
+#define AFX_IDP_ARCH_READONLY 0xF1B2
+#define AFX_IDP_ARCH_ENDOFFILE 0xF1B3
+#define AFX_IDP_ARCH_WRITEONLY 0xF1B4
+#define AFX_IDP_ARCH_BADINDEX 0xF1B5
+#define AFX_IDP_ARCH_BADCLASS 0xF1B6
+#define AFX_IDP_ARCH_BADSCHEMA 0xF1B7
+
+#define AFX_IDS_OCC_SCALEUNITS_PIXELS 0xF1C0
+
+// 0xf200-0xf20f reserved
+
+// font names and point sizes
+#define AFX_IDS_STATUS_FONT 0xF230
+#define AFX_IDS_TOOLTIP_FONT 0xF231
+#define AFX_IDS_UNICODE_FONT 0xF232
+#define AFX_IDS_MINI_FONT 0xF233
+
+// ODBC Database errors / prompt strings
+#ifndef RC_INVOKED // code only
+#define AFX_IDP_SQL_FIRST 0xF280
+#endif //!RC_INVOKED
+#define AFX_IDP_SQL_CONNECT_FAIL 0xF281
+#define AFX_IDP_SQL_RECORDSET_FORWARD_ONLY 0xF282
+#define AFX_IDP_SQL_EMPTY_COLUMN_LIST 0xF283
+#define AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH 0xF284
+#define AFX_IDP_SQL_ILLEGAL_MODE 0xF285
+#define AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED 0xF286
+#define AFX_IDP_SQL_NO_CURRENT_RECORD 0xF287
+#define AFX_IDP_SQL_NO_ROWS_AFFECTED 0xF288
+#define AFX_IDP_SQL_RECORDSET_READONLY 0xF289
+#define AFX_IDP_SQL_SQL_NO_TOTAL 0xF28A
+#define AFX_IDP_SQL_ODBC_LOAD_FAILED 0xF28B
+#define AFX_IDP_SQL_DYNASET_NOT_SUPPORTED 0xF28C
+#define AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED 0xF28D
+#define AFX_IDP_SQL_API_CONFORMANCE 0xF28E
+#define AFX_IDP_SQL_SQL_CONFORMANCE 0xF28F
+#define AFX_IDP_SQL_NO_DATA_FOUND 0xF290
+#define AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED 0xF291
+#define AFX_IDP_SQL_ODBC_V2_REQUIRED 0xF292
+#define AFX_IDP_SQL_NO_POSITIONED_UPDATES 0xF293
+#define AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED 0xF294
+#define AFX_IDP_SQL_DATA_TRUNCATED 0xF295
+#define AFX_IDP_SQL_ROW_FETCH 0xF296
+#define AFX_IDP_SQL_INCORRECT_ODBC 0xF297
+#define AFX_IDP_SQL_UPDATE_DELETE_FAILED 0xF298
+#define AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED 0xF299
+#define AFX_IDP_SQL_FIELD_NOT_FOUND 0xF29A
+#define AFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED 0xF29B
+#define AFX_IDP_SQL_BOOKMARKS_NOT_ENABLED 0xF29C
+
+// ODBC Database strings
+#define AFX_IDS_DELETED 0xF29D
+
+// DAO Database errors / prompt strings
+#ifndef RC_INVOKED // code only
+#define AFX_IDP_DAO_FIRST 0xF2B0
+#endif //!RC_INVOKED
+#define AFX_IDP_DAO_ENGINE_INITIALIZATION 0xF2B0
+#define AFX_IDP_DAO_DFX_BIND 0xF2B1
+#define AFX_IDP_DAO_OBJECT_NOT_OPEN 0xF2B2
+
+// ICDAORecordset::GetRows Errors
+// These are not placed in DAO Errors collection
+// and must be handled directly by MFC.
+#define AFX_IDP_DAO_ROWTOOSHORT 0xF2B3
+#define AFX_IDP_DAO_BADBINDINFO 0xF2B4
+#define AFX_IDP_DAO_COLUMNUNAVAILABLE 0xF2B5
+
+/////////////////////////////////////////////////////////////////////////////
+// Strings for ISAPI support
+
+#define AFX_IDS_HTTP_TITLE 0xF2D1
+#define AFX_IDS_HTTP_NO_TEXT 0xF2D2
+#define AFX_IDS_HTTP_BAD_REQUEST 0xF2D3
+#define AFX_IDS_HTTP_AUTH_REQUIRED 0xF2D4
+#define AFX_IDS_HTTP_FORBIDDEN 0xF2D5
+#define AFX_IDS_HTTP_NOT_FOUND 0xF2D6
+#define AFX_IDS_HTTP_SERVER_ERROR 0xF2D7
+#define AFX_IDS_HTTP_NOT_IMPLEMENTED 0xF2D8
+
+/////////////////////////////////////////////////////////////////////////////
+// Strings for Accessibility support for CCheckListBox
+#define AFX_IDS_CHECKLISTBOX_UNCHECK 0xF2E1
+#define AFX_IDS_CHECKLISTBOX_CHECK 0xF2E2
+#define AFX_IDS_CHECKLISTBOX_MIXED 0xF2E3
+
+/////////////////////////////////////////////////////////////////////////////
+// AFX implementation - control IDs (AFX_IDC)
+
+// Parts of dialogs
+#define AFX_IDC_LISTBOX 100
+#define AFX_IDC_CHANGE 101
+#define AFX_IDC_BROWSER 102
+
+// for print dialog
+#define AFX_IDC_PRINT_DOCNAME 201
+#define AFX_IDC_PRINT_PRINTERNAME 202
+#define AFX_IDC_PRINT_PORTNAME 203
+#define AFX_IDC_PRINT_PAGENUM 204
+
+// Property Sheet control id's (determined with Spy++)
+#define ID_APPLY_NOW 0x3021
+#define ID_WIZBACK 0x3023
+#define ID_WIZNEXT 0x3024
+#define ID_WIZFINISH 0x3025
+#define AFX_IDC_TAB_CONTROL 0x3020
+
+/////////////////////////////////////////////////////////////////////////////
+// IDRs for standard components
+
+#ifndef RC_INVOKED // code only
+// These are really COMMDLG dialogs, so there usually isn't a resource
+// for them, but these IDs are used as help IDs.
+#define AFX_IDD_FILEOPEN 28676
+#define AFX_IDD_FILESAVE 28677
+#define AFX_IDD_FONT 28678
+#define AFX_IDD_COLOR 28679
+#define AFX_IDD_PRINT 28680
+#define AFX_IDD_PRINTSETUP 28681
+#define AFX_IDD_FIND 28682
+#define AFX_IDD_REPLACE 28683
+#endif //!RC_INVOKED
+
+// Standard dialogs app should leave alone (0x7801->)
+#define AFX_IDD_NEWTYPEDLG 30721
+#define AFX_IDD_PRINTDLG 30722
+#define AFX_IDD_PREVIEW_TOOLBAR 30723
+
+// Dialogs defined for OLE2UI library
+#define AFX_IDD_INSERTOBJECT 30724
+#define AFX_IDD_CHANGEICON 30725
+#define AFX_IDD_CONVERT 30726
+#define AFX_IDD_PASTESPECIAL 30727
+#define AFX_IDD_EDITLINKS 30728
+#define AFX_IDD_FILEBROWSE 30729
+#define AFX_IDD_BUSY 30730
+
+#define AFX_IDD_OBJECTPROPERTIES 30732
+#define AFX_IDD_CHANGESOURCE 30733
+
+//WinForms
+#define AFX_IDD_EMPTYDIALOG 30734
+
+// Standard cursors (0x7901->)
+ // AFX_IDC = Cursor resources
+#define AFX_IDC_CONTEXTHELP 30977 // context sensitive help
+#define AFX_IDC_MAGNIFY 30978 // print preview zoom
+#define AFX_IDC_SMALLARROWS 30979 // splitter
+#define AFX_IDC_HSPLITBAR 30980 // splitter
+#define AFX_IDC_VSPLITBAR 30981 // splitter
+#define AFX_IDC_NODROPCRSR 30982 // No Drop Cursor
+#define AFX_IDC_TRACKNWSE 30983 // tracker
+#define AFX_IDC_TRACKNESW 30984 // tracker
+#define AFX_IDC_TRACKNS 30985 // tracker
+#define AFX_IDC_TRACKWE 30986 // tracker
+#define AFX_IDC_TRACK4WAY 30987 // tracker
+#define AFX_IDC_MOVE4WAY 30988 // resize bar (server only)
+
+// Wheel mouse cursors
+// NOTE: values must be in this order! See CScrollView::OnTimer()
+#define AFX_IDC_MOUSE_PAN_NW 30998 // pan east
+#define AFX_IDC_MOUSE_PAN_N 30999 // pan northeast
+#define AFX_IDC_MOUSE_PAN_NE 31000 // pan north
+#define AFX_IDC_MOUSE_PAN_W 31001 // pan northwest
+#define AFX_IDC_MOUSE_PAN_HV 31002 // pan both axis
+#define AFX_IDC_MOUSE_PAN_E 31003 // pan west
+#define AFX_IDC_MOUSE_PAN_SW 31004 // pan south-west
+#define AFX_IDC_MOUSE_PAN_S 31005 // pan south
+#define AFX_IDC_MOUSE_PAN_SE 31006 // pan south-east
+#define AFX_IDC_MOUSE_PAN_HORZ 31007 // pan X-axis
+#define AFX_IDC_MOUSE_PAN_VERT 31008 // pan Y-axis
+
+// Wheel mouse bitmaps
+#define AFX_IDC_MOUSE_ORG_HORZ 31009 // anchor for horz only
+#define AFX_IDC_MOUSE_ORG_VERT 31010 // anchor for vert only
+#define AFX_IDC_MOUSE_ORG_HV 31011 // anchor for horz/vert
+#define AFX_IDC_MOUSE_MASK 31012
+
+// Mini frame window bitmap ID
+#define AFX_IDB_MINIFRAME_MENU 30994
+
+// CheckListBox checks bitmap ID
+#define AFX_IDB_CHECKLISTBOX_95 30996
+
+// AFX standard accelerator resources
+#define AFX_IDR_PREVIEW_ACCEL 30997
+
+// AFX standard ICON IDs (for MFC V1 apps) (0x7A01->)
+#define AFX_IDI_STD_MDIFRAME 31233
+#define AFX_IDI_STD_FRAME 31234
+
+/////////////////////////////////////////////////////////////////////////////
+// AFX OLE control implementation - control IDs (AFX_IDC)
+
+// Font property page
+#define AFX_IDC_FONTPROP 1000
+#define AFX_IDC_FONTNAMES 1001
+#define AFX_IDC_FONTSTYLES 1002
+#define AFX_IDC_FONTSIZES 1003
+#define AFX_IDC_STRIKEOUT 1004
+#define AFX_IDC_UNDERLINE 1005
+#define AFX_IDC_SAMPLEBOX 1006
+
+// Color property page
+#define AFX_IDC_COLOR_BLACK 1100
+#define AFX_IDC_COLOR_WHITE 1101
+#define AFX_IDC_COLOR_RED 1102
+#define AFX_IDC_COLOR_GREEN 1103
+#define AFX_IDC_COLOR_BLUE 1104
+#define AFX_IDC_COLOR_YELLOW 1105
+#define AFX_IDC_COLOR_MAGENTA 1106
+#define AFX_IDC_COLOR_CYAN 1107
+#define AFX_IDC_COLOR_GRAY 1108
+#define AFX_IDC_COLOR_LIGHTGRAY 1109
+#define AFX_IDC_COLOR_DARKRED 1110
+#define AFX_IDC_COLOR_DARKGREEN 1111
+#define AFX_IDC_COLOR_DARKBLUE 1112
+#define AFX_IDC_COLOR_LIGHTBROWN 1113
+#define AFX_IDC_COLOR_DARKMAGENTA 1114
+#define AFX_IDC_COLOR_DARKCYAN 1115
+#define AFX_IDC_COLORPROP 1116
+#define AFX_IDC_SYSTEMCOLORS 1117
+
+// Picture porperty page
+#define AFX_IDC_PROPNAME 1201
+#define AFX_IDC_PICTURE 1202
+#define AFX_IDC_BROWSE 1203
+#define AFX_IDC_CLEAR 1204
+
+/////////////////////////////////////////////////////////////////////////////
+// IDRs for OLE control standard components
+
+// Standard propery page dialogs app should leave alone (0x7E01->)
+#define AFX_IDD_PROPPAGE_COLOR 32257
+#define AFX_IDD_PROPPAGE_FONT 32258
+#define AFX_IDD_PROPPAGE_PICTURE 32259
+
+#define AFX_IDB_TRUETYPE 32384
+
+/////////////////////////////////////////////////////////////////////////////
+// Standard OLE control strings
+
+// OLE Control page strings
+#define AFX_IDS_PROPPAGE_UNKNOWN 0xFE01
+#define AFX_IDS_COLOR_DESKTOP 0xFE04
+#define AFX_IDS_COLOR_APPWORKSPACE 0xFE05
+#define AFX_IDS_COLOR_WNDBACKGND 0xFE06
+#define AFX_IDS_COLOR_WNDTEXT 0xFE07
+#define AFX_IDS_COLOR_MENUBAR 0xFE08
+#define AFX_IDS_COLOR_MENUTEXT 0xFE09
+#define AFX_IDS_COLOR_ACTIVEBAR 0xFE0A
+#define AFX_IDS_COLOR_INACTIVEBAR 0xFE0B
+#define AFX_IDS_COLOR_ACTIVETEXT 0xFE0C
+#define AFX_IDS_COLOR_INACTIVETEXT 0xFE0D
+#define AFX_IDS_COLOR_ACTIVEBORDER 0xFE0E
+#define AFX_IDS_COLOR_INACTIVEBORDER 0xFE0F
+#define AFX_IDS_COLOR_WNDFRAME 0xFE10
+#define AFX_IDS_COLOR_SCROLLBARS 0xFE11
+#define AFX_IDS_COLOR_BTNFACE 0xFE12
+#define AFX_IDS_COLOR_BTNSHADOW 0xFE13
+#define AFX_IDS_COLOR_BTNTEXT 0xFE14
+#define AFX_IDS_COLOR_BTNHIGHLIGHT 0xFE15
+#define AFX_IDS_COLOR_DISABLEDTEXT 0xFE16
+#define AFX_IDS_COLOR_HIGHLIGHT 0xFE17
+#define AFX_IDS_COLOR_HIGHLIGHTTEXT 0xFE18
+#define AFX_IDS_REGULAR 0xFE19
+#define AFX_IDS_BOLD 0xFE1A
+#define AFX_IDS_ITALIC 0xFE1B
+#define AFX_IDS_BOLDITALIC 0xFE1C
+#define AFX_IDS_SAMPLETEXT 0xFE1D
+#define AFX_IDS_DISPLAYSTRING_FONT 0xFE1E
+#define AFX_IDS_DISPLAYSTRING_COLOR 0xFE1F
+#define AFX_IDS_DISPLAYSTRING_PICTURE 0xFE20
+#define AFX_IDS_PICTUREFILTER 0xFE21
+#define AFX_IDS_PICTYPE_UNKNOWN 0xFE22
+#define AFX_IDS_PICTYPE_NONE 0xFE23
+#define AFX_IDS_PICTYPE_BITMAP 0xFE24
+#define AFX_IDS_PICTYPE_METAFILE 0xFE25
+#define AFX_IDS_PICTYPE_ICON 0xFE26
+#define AFX_IDS_COLOR_PPG 0xFE28
+#define AFX_IDS_COLOR_PPG_CAPTION 0xFE29
+#define AFX_IDS_FONT_PPG 0xFE2A
+#define AFX_IDS_FONT_PPG_CAPTION 0xFE2B
+#define AFX_IDS_PICTURE_PPG 0xFE2C
+#define AFX_IDS_PICTURE_PPG_CAPTION 0xFE2D
+#define AFX_IDS_PICTUREBROWSETITLE 0xFE30
+#define AFX_IDS_BORDERSTYLE_0 0xFE31
+#define AFX_IDS_BORDERSTYLE_1 0xFE32
+
+// OLE Control verb names
+#define AFX_IDS_VERB_EDIT 0xFE40
+#define AFX_IDS_VERB_PROPERTIES 0xFE41
+
+// OLE Control internal error messages
+#define AFX_IDP_PICTURECANTOPEN 0xFE83
+#define AFX_IDP_PICTURECANTLOAD 0xFE84
+#define AFX_IDP_PICTURETOOLARGE 0xFE85
+#define AFX_IDP_PICTUREREADFAILED 0xFE86
+
+// Standard OLE Control error strings
+#define AFX_IDP_E_ILLEGALFUNCTIONCALL 0xFEA0
+#define AFX_IDP_E_OVERFLOW 0xFEA1
+#define AFX_IDP_E_OUTOFMEMORY 0xFEA2
+#define AFX_IDP_E_DIVISIONBYZERO 0xFEA3
+#define AFX_IDP_E_OUTOFSTRINGSPACE 0xFEA4
+#define AFX_IDP_E_OUTOFSTACKSPACE 0xFEA5
+#define AFX_IDP_E_BADFILENAMEORNUMBER 0xFEA6
+#define AFX_IDP_E_FILENOTFOUND 0xFEA7
+#define AFX_IDP_E_BADFILEMODE 0xFEA8
+#define AFX_IDP_E_FILEALREADYOPEN 0xFEA9
+#define AFX_IDP_E_DEVICEIOERROR 0xFEAA
+#define AFX_IDP_E_FILEALREADYEXISTS 0xFEAB
+#define AFX_IDP_E_BADRECORDLENGTH 0xFEAC
+#define AFX_IDP_E_DISKFULL 0xFEAD
+#define AFX_IDP_E_BADRECORDNUMBER 0xFEAE
+#define AFX_IDP_E_BADFILENAME 0xFEAF
+#define AFX_IDP_E_TOOMANYFILES 0xFEB0
+#define AFX_IDP_E_DEVICEUNAVAILABLE 0xFEB1
+#define AFX_IDP_E_PERMISSIONDENIED 0xFEB2
+#define AFX_IDP_E_DISKNOTREADY 0xFEB3
+#define AFX_IDP_E_PATHFILEACCESSERROR 0xFEB4
+#define AFX_IDP_E_PATHNOTFOUND 0xFEB5
+#define AFX_IDP_E_INVALIDPATTERNSTRING 0xFEB6
+#define AFX_IDP_E_INVALIDUSEOFNULL 0xFEB7
+#define AFX_IDP_E_INVALIDFILEFORMAT 0xFEB8
+#define AFX_IDP_E_INVALIDPROPERTYVALUE 0xFEB9
+#define AFX_IDP_E_INVALIDPROPERTYARRAYINDEX 0xFEBA
+#define AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME 0xFEBB
+#define AFX_IDP_E_SETNOTSUPPORTED 0xFEBC
+#define AFX_IDP_E_NEEDPROPERTYARRAYINDEX 0xFEBD
+#define AFX_IDP_E_SETNOTPERMITTED 0xFEBE
+#define AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME 0xFEBF
+#define AFX_IDP_E_GETNOTSUPPORTED 0xFEC0
+#define AFX_IDP_E_PROPERTYNOTFOUND 0xFEC1
+#define AFX_IDP_E_INVALIDCLIPBOARDFORMAT 0xFEC2
+#define AFX_IDP_E_INVALIDPICTURE 0xFEC3
+#define AFX_IDP_E_PRINTERERROR 0xFEC4
+#define AFX_IDP_E_CANTSAVEFILETOTEMP 0xFEC5
+#define AFX_IDP_E_SEARCHTEXTNOTFOUND 0xFEC6
+#define AFX_IDP_E_REPLACEMENTSTOOLONG 0xFEC7
+
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef _AFX_MINREBUILD
+#pragma component(minrebuild, on)
+#endif
+
+#endif //__AFXRES_H__
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/Branches/MusicMod/TestPlayer/Src/Player.cpp b/Branches/MusicMod/TestPlayer/Src/Player.cpp
new file mode 100644
index 0000000000..017460b3a5
--- /dev/null
+++ b/Branches/MusicMod/TestPlayer/Src/Player.cpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// File description
+/* ŻŻŻŻŻŻŻŻŻŻ
+// This project loads the dll */
+///////////////////////////////////
+
+
+#include // System
+
+#include "../Player/Src/PlayerExport.h" // Local player
+
+
+void main()
+{
+ Player_Main(true);
+
+ std::cin.get(); // Keep the window open
+}
\ No newline at end of file
diff --git a/Branches/MusicMod/TestPlayer/TestPlayer.vcproj b/Branches/MusicMod/TestPlayer/TestPlayer.vcproj
new file mode 100644
index 0000000000..9aa9cb994b
--- /dev/null
+++ b/Branches/MusicMod/TestPlayer/TestPlayer.vcproj
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Externals/wxWidgets/build/msw/wx_adv.vcproj b/Externals/wxWidgets/build/msw/wx_adv.vcproj
index 7353c65426..f1f2187e94 100644
--- a/Externals/wxWidgets/build/msw/wx_adv.vcproj
+++ b/Externals/wxWidgets/build/msw/wx_adv.vcproj
@@ -1,7 +1,7 @@
+
+
@@ -2193,10 +2197,6 @@
/>
-
-
+ #include
#endif
namespace DiscIO
@@ -55,6 +67,15 @@ PlainFileReader::~PlainFileReader()
bool PlainFileReader::Read(u64 offset, u64 nbytes, u8* out_ptr)
{
+ //////////////////////////////////////////////////
+ // Music mod
+ // ŻŻŻŻŻŻŻŻŻŻ
+ #ifdef MUSICMOD
+ MusicMod::CheckFile(offset, size);
+ #endif
+ ///////////////////////
+
+
LONG offset_high = (LONG)(offset >> 32);
SetFilePointer(hFile, (DWORD)(offset & 0xFFFFFFFF), &offset_high, FILE_BEGIN);
diff --git a/Source/Core/DiscIO/Src/FileSystemGCWii.h b/Source/Core/DiscIO/Src/FileSystemGCWii.h
index 3cb1359c01..dded1c17e1 100644
--- a/Source/Core/DiscIO/Src/FileSystemGCWii.h
+++ b/Source/Core/DiscIO/Src/FileSystemGCWii.h
@@ -37,9 +37,9 @@ public:
virtual bool ExportFile(const char* _rFullPath, const char* _rExportFilename) const;
virtual bool ExportAllFiles(const char* _rFullPath) const;
+ std::vector m_FileInfoVector; // Public for the music modification
-private:
- std::vector m_FileInfoVector;
+private:
bool m_Initialized;
u32 m_OffsetShift; // WII offsets are all shifted
diff --git a/Source/Core/DolphinWX/Src/BootManager.cpp b/Source/Core/DolphinWX/Src/BootManager.cpp
index e165c7741b..4d56b61f5c 100644
--- a/Source/Core/DolphinWX/Src/BootManager.cpp
+++ b/Source/Core/DolphinWX/Src/BootManager.cpp
@@ -51,9 +51,12 @@
#include "Config.h"
#include "Core.h"
#if defined(HAVE_WX) && HAVE_WX
-#include "ConfigMain.h"
-#include "Frame.h"
-#include "CodeWindow.h"
+ #include "ConfigMain.h"
+ #include "Frame.h"
+ #include "CodeWindow.h"
+ #ifdef MUSICMOD
+ #include "../../../Branches/MusicMod/Main/Src/Main.h" // MusicMod
+ #endif
#endif
static std::string s_DataBasePath_EUR = "Data_EUR";
@@ -204,6 +207,16 @@ bool BootCore(const std::string& _rFilename)
#else
Core::SetState(Core::CORE_RUN);
#endif
+
+ //////////////////////////////////////////////////////////////////////////////////////////
+ // Music mod
+ // ŻŻŻŻŻŻŻŻŻŻ
+ #ifdef MUSICMOD
+ MusicMod::Main(StartUp.m_strFilename);
+ #endif
+ ///////////////////////////////////
+
+
return true;
}
diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp
index 3eb124a549..12482f68cf 100644
--- a/Source/Core/DolphinWX/Src/Frame.cpp
+++ b/Source/Core/DolphinWX/Src/Frame.cpp
@@ -55,6 +55,7 @@ extern "C" {
#include "../resources/toolbar_plugin_pad.c"
#include "../resources/toolbar_refresh.c"
#include "../resources/toolbar_stop.c"
+#include "../resources/Boomy.h"
};
@@ -96,6 +97,14 @@ EVT_MENU(IDM_CONFIG_GFX_PLUGIN, CFrame::OnPluginGFX)
EVT_MENU(IDM_CONFIG_DSP_PLUGIN, CFrame::OnPluginDSP)
EVT_MENU(IDM_CONFIG_PAD_PLUGIN, CFrame::OnPluginPAD)
EVT_MENU(IDM_CONFIG_WIIMOTE_PLUGIN, CFrame::OnPluginWiimote)
+
+#ifdef MUSICMOD
+EVT_MENU(IDM_MUTE, CFrame::MM_OnMute)
+EVT_MENU(IDM_MUSIC_PLAY, CFrame::MM_OnPause)
+EVT_COMMAND_SCROLL(IDS_VOLUME, CFrame::MM_OnVolume)
+EVT_MENU(IDT_LOG, CFrame::MM_OnLog)
+#endif
+
EVT_MENU(IDM_BROWSE, CFrame::OnBrowse)
EVT_MENU(IDM_MEMCARD, CFrame::OnMemcard)
EVT_MENU(IDM_CHEATS, CFrame::OnShow_CheatsWindow)
@@ -283,8 +292,10 @@ void CFrame::PopulateToolbar(wxToolBar* toolBar)
toolBar->AddTool(wxID_REFRESH, _T("Refresh"), m_Bitmaps[Toolbar_Refresh], _T("Refresh"));
toolBar->AddTool(IDM_BROWSE, _T("Browse"), m_Bitmaps[Toolbar_Browse], _T("Browse for an ISO directory..."));
toolBar->AddSeparator();
+
m_pToolPlay = toolBar->AddTool(IDM_PLAY, _T("Play"), m_Bitmaps[Toolbar_Play], _T("Play"));
+
toolBar->AddTool(IDM_STOP, _T("Stop"), m_Bitmaps[Toolbar_Stop], _T("Stop"));
#ifdef _WIN32
toolBar->AddTool(IDM_TOGGLE_FULLSCREEN, _T("Fullscr."), m_Bitmaps[Toolbar_FullScreen], _T("Toggle Fullscreen"));
@@ -298,6 +309,16 @@ void CFrame::PopulateToolbar(wxToolBar* toolBar)
toolBar->AddSeparator();
toolBar->AddTool(IDM_HELPABOUT, _T("About"), m_Bitmaps[Toolbar_Help], _T("About Dolphin"));
+
+ //////////////////////////////////////////////////
+ // Music mod
+ // ŻŻŻŻŻŻŻŻŻŻ
+ #ifdef MUSICMOD
+ MM_PopulateGUI();
+ #endif
+ ///////////////////////
+
+
// after adding the buttons to the toolbar, must call Realize() to reflect
// the changes
toolBar->Realize();
@@ -314,7 +335,7 @@ void CFrame::RecreateToolbar()
SetToolBar(NULL);
style &= ~(wxTB_HORIZONTAL | wxTB_VERTICAL | wxTB_BOTTOM | wxTB_RIGHT | wxTB_HORZ_LAYOUT | wxTB_TOP);
- wxToolBar* theToolBar = CreateToolBar(style, ID_TOOLBAR);
+ theToolBar = CreateToolBar(style, ID_TOOLBAR);
PopulateToolbar(theToolBar);
SetToolBar(theToolBar);
@@ -322,6 +343,7 @@ void CFrame::RecreateToolbar()
}
+
void CFrame::InitBitmaps()
{
// load orignal size 48x48
@@ -337,12 +359,17 @@ void CFrame::InitBitmaps()
m_Bitmaps[Toolbar_PluginPAD] = wxGetBitmapFromMemory(toolbar_plugin_pad_png);
m_Bitmaps[Toolbar_FullScreen] = wxGetBitmapFromMemory(toolbar_fullscreen_png);
m_Bitmaps[Toolbar_Help] = wxGetBitmapFromMemory(toolbar_help_png);
+
+ #ifdef MUSICMOD
+ m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log_png);
+ MM_InitBitmaps();
+ #endif
- // scale to 24x24 for toolbar
- for (size_t n = Toolbar_FileOpen; n < WXSIZEOF(m_Bitmaps); n++)
+ // Scale to 24x24 for toolbar. Toolbar_Log is already 24x24
+ for (size_t n = Toolbar_FileOpen; n <= Toolbar_Help; n++)
{
m_Bitmaps[n] = wxBitmap(m_Bitmaps[n].ConvertToImage().Scale(24, 24));
- }
+ }
}
@@ -468,6 +495,11 @@ void CFrame::OnHelp(wxCommandEvent& event)
// -------------
void CFrame::OnPlay(wxCommandEvent& WXUNUSED (event))
{
+ #ifdef MUSICMOD // Music modification
+ MM_OnPlay();
+ #endif
+
+
// shuffle2: wxBusyInfo is meant to be created on the stack
// and only stay around for the life of the scope it's in.
// If that is not what we want, find another solution. I don't
@@ -715,6 +747,10 @@ void CFrame::OnKeyUp(wxKeyEvent& event)
// -------------
void CFrame::UpdateGUI()
{
+ #ifdef MUSICMOD
+ MM_UpdateGUI();
+ #endif
+
// Save status
bool initialized = Core::GetState() != Core::CORE_UNINITIALIZED;
bool running = Core::GetState() == Core::CORE_RUN;
@@ -750,6 +786,7 @@ void CFrame::UpdateGUI()
m_pToolPlay->SetLabel(_("Pause"));
}
m_pMenuItemPlay->SetText(_("&Pause"));
+
}
else
{
@@ -760,6 +797,7 @@ void CFrame::UpdateGUI()
m_pToolPlay->SetLabel(_("Play"));
}
m_pMenuItemPlay->SetText(_("&Play"));
+
}
if (GetToolBar() != NULL) GetToolBar()->Realize();
@@ -781,5 +819,7 @@ void CFrame::UpdateGUI()
m_GameListCtrl->Hide();
}
}
+
+ theToolBar->Realize();
}
diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h
index e884eef89c..07e15b9ee5 100644
--- a/Source/Core/DolphinWX/Src/Frame.h
+++ b/Source/Core/DolphinWX/Src/Frame.h
@@ -1,3 +1,21 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
#ifndef __FRAME_H_
#define __FRAME_H_
@@ -50,6 +68,25 @@ class CFrame : public wxFrame
wxBoxSizer* sizerPanel;
CGameListCtrl* m_GameListCtrl;
wxPanel* m_Panel;
+ wxToolBar* theToolBar;
+ wxToolBarToolBase* m_ToolPlay;
+
+
+ //////////////////////////////////////////////////////////////////////////////////////////
+ // Music mod
+ // ŻŻŻŻŻŻŻŻŻŻ
+ #ifdef MUSICMOD
+ wxToolBarToolBase* mm_ToolMute, * mm_ToolPlay, * mm_ToolLog;
+
+ void MM_UpdateGUI(); void MM_PopulateGUI(); void MM_InitBitmaps();
+ void MM_OnPlay();
+ void MM_OnMute(wxCommandEvent& event);
+ void MM_OnPause(wxCommandEvent& event);
+ void MM_OnVolume(wxScrollEvent& event);
+ void MM_OnLog(wxCommandEvent& event);
+ #endif
+ ///////////////////////////////////
+
enum EBitmaps
{
@@ -57,14 +94,17 @@ class CFrame : public wxFrame
Toolbar_Refresh,
Toolbar_Browse,
Toolbar_Play,
- Toolbar_Stop,
+ Toolbar_Stop, Toolbar_Stop_Dis,
Toolbar_Pause,
Toolbar_PluginOptions,
Toolbar_PluginGFX,
- Toolbar_PluginDSP,
+ Toolbar_PluginDSP, Toolbar_PluginDSP_Dis,
Toolbar_PluginPAD,
Toolbar_FullScreen,
Toolbar_Help,
+ #ifdef MUSICMOD
+ Toolbar_Log, Toolbar_Log_Dis,
+ #endif
Bitmaps_Max,
END
};
diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h
index d0b4d56e1e..fee977ca4b 100644
--- a/Source/Core/DolphinWX/Src/Globals.h
+++ b/Source/Core/DolphinWX/Src/Globals.h
@@ -15,10 +15,31 @@
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
+
+
+////////////////////////////////////////////////////////////////////////////////////////
+// File description
+/* ŻŻŻŻŻŻŻŻŻ
+
+ This file is global in the DolphinWX and DebuggerWX projects.
+
+////////////////////////*/
+
+
+
#ifndef _GLOBALS_H
#define _GLOBALS_H
#include "Common.h"
+
+
+////////////////////////////////////////////////////////////////////////////////////////
+// Build with music modification
+// ŻŻŻŻŻŻŻŻŻ
+#include "../../../Branches/MusicMod/Main/Src/Setup.h" // Define MUSICMOD here
+//////////////////////////
+
+
enum
{
IDM_LOADSTATE = 200, // File
@@ -56,6 +77,13 @@ enum
IDM_HELPWEBSITE,
IDM_HELPGOOGLECODE,
+ #ifdef MUSICMOD // Music modification
+ IDM_MUTE,
+ IDM_MUSIC_PLAY,
+ IDS_VOLUME, IDS_VOLUME_LABEL, IDS_VOLUME_PANEL,
+ IDT_LOG,
+ #endif
+
IDM_CONFIG_MAIN,
IDM_CONFIG_GFX_PLUGIN,
IDM_CONFIG_DSP_PLUGIN,
@@ -93,44 +121,43 @@ enum
//#ifndef WX_PRECOMP
#if defined(HAVE_WX) && HAVE_WX
-#include
-//#endif
+ #include
+ //#endif
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
-// define this to use XPMs everywhere (by default, BMPs are used under Win)
-// BMPs use less space, but aren't compiled into the executable on other platforms
-
-#if USE_XPM_BITMAPS && defined (__WXMSW__) && !wxUSE_XPM_IN_MSW
-#error You need to enable XPM support to use XPM bitmaps with toolbar!
-#endif // USE_XPM_BITMAPS
+ // Define this to use XPMs everywhere (by default, BMPs are used under Win)
+ // BMPs use less space, but aren't compiled into the executable on other platforms
+ #if USE_XPM_BITMAPS && defined (__WXMSW__) && !wxUSE_XPM_IN_MSW
+ #error You need to enable XPM support to use XPM bitmaps with toolbar!
+ #endif // USE_XPM_BITMAPS
-//
-// custom message macro
-//
+ //
+ // custom message macro
+ //
+ #define EVT_HOST_COMMAND(id, fn) \
+ DECLARE_EVENT_TABLE_ENTRY(\
+ wxEVT_HOST_COMMAND, id, wxID_ANY, \
+ (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent(wxCommandEventFunction, &fn), \
+ (wxObject*) NULL \
+ ),
-#define EVT_HOST_COMMAND(id, fn) \
- DECLARE_EVENT_TABLE_ENTRY(\
- wxEVT_HOST_COMMAND, id, wxID_ANY, \
- (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent(wxCommandEventFunction, &fn), \
- (wxObject*) NULL \
- ),
+ extern const wxEventType wxEVT_HOST_COMMAND;
-extern const wxEventType wxEVT_HOST_COMMAND;
-#endif
-#endif
+#endif // HAVE_WX
+#endif // _GLOBALS_H
diff --git a/Source/Core/DolphinWX/resources/Boomy.h b/Source/Core/DolphinWX/resources/Boomy.h
new file mode 100644
index 0000000000..bb40c53ef9
--- /dev/null
+++ b/Source/Core/DolphinWX/resources/Boomy.h
@@ -0,0 +1,312 @@
+/*
+ Automatic generated header by:
+
+ wxInclude by Kim De Deyn, use --help for more information.
+ Version 1.0, compiled at Sep 12 2007 17:26:17
+
+ Header: myheader
+ Macros: no
+ Const: yes
+*/
+
+#ifndef _WXINCLUDE_MYHEADER_H_
+#define _WXINCLUDE_MYHEADER_H_
+
+static const unsigned char Toolbar_Log_png[] = {
+0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
+0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x00, 0x00, 0x18, 0x08, 0x06, 0x00, 0x00, 0x00, 0xE0,
+0x77, 0x3D, 0xF8, 0x00, 0x00, 0x05, 0xC0, 0x49, 0x44, 0x41,
+0x54, 0x78, 0x9C, 0xB5, 0x56, 0x79, 0x6C, 0x14, 0x75, 0x14,
+0xFE, 0x66, 0xF6, 0xE8, 0x5E, 0xED, 0x1E, 0x6D, 0x77, 0xDB,
+0xED, 0x1E, 0x3D, 0x96, 0x5E, 0x58, 0x5A, 0xDA, 0xD2, 0x42,
+0xA5, 0x35, 0x6D, 0x38, 0x24, 0xB6, 0x85, 0x42, 0x29, 0x06,
+0xAD, 0x78, 0x80, 0x5A, 0xA2, 0x26, 0x42, 0x62, 0x48, 0x10,
+0x83, 0x09, 0x68, 0x8C, 0x4D, 0x4A, 0x0C, 0x12, 0x45, 0x12,
+0x30, 0x2A, 0x04, 0xFF, 0x30, 0x8A, 0x04, 0x08, 0x06, 0x91,
+0x48, 0xC2, 0x65, 0x15, 0xA5, 0x45, 0x10, 0x28, 0x45, 0xE9,
+0x96, 0x76, 0xDB, 0xED, 0x76, 0x69, 0xF7, 0x9A, 0x99, 0x1D,
+0xDF, 0x0C, 0x52, 0xA9, 0x85, 0xF8, 0x8F, 0xFE, 0x92, 0x97,
+0xDF, 0xCC, 0xFC, 0x66, 0xBE, 0xF7, 0xDE, 0xF7, 0xBE, 0xF7,
+0x76, 0x81, 0xFF, 0x79, 0x29, 0x1E, 0x74, 0xF0, 0x7D, 0x3B,
+0xD8, 0xD6, 0x1A, 0x68, 0x1F, 0xAF, 0x41, 0xC6, 0x8A, 0xB9,
+0x28, 0x6D, 0xAE, 0xC2, 0xFC, 0xE6, 0xB9, 0x58, 0xD5, 0x34,
+0x1B, 0xF5, 0x8D, 0x15, 0xA8, 0xAF, 0x2F, 0xC7, 0x63, 0x0D,
+0x95, 0xC8, 0x6F, 0xAC, 0x82, 0x50, 0x3F, 0x0B, 0x03, 0x07,
+0xCF, 0x22, 0x7E, 0x3F, 0x1C, 0xF6, 0x9F, 0x0F, 0x7E, 0xDC,
+0x05, 0xC5, 0xD9, 0x1D, 0xC8, 0x65, 0x95, 0x78, 0x95, 0x51,
+0x33, 0xFB, 0x35, 0x49, 0xAA, 0xD3, 0x46, 0x9B, 0xF6, 0x98,
+0x35, 0x2B, 0xF9, 0x43, 0x6B, 0x66, 0xF2, 0xCB, 0x36, 0x97,
+0x69, 0xAD, 0xCD, 0x95, 0xD4, 0x96, 0xEE, 0x32, 0xB4, 0xE9,
+0x0D, 0xCA, 0xF6, 0x38, 0x8F, 0x13, 0xA2, 0x88, 0x77, 0xB6,
+0xBF, 0x08, 0xFD, 0xBF, 0x66, 0x70, 0x66, 0x27, 0x98, 0x78,
+0x0C, 0xAB, 0xE8, 0x72, 0x4F, 0x82, 0xD1, 0xD4, 0x9C, 0x9A,
+0x5F, 0x99, 0x9B, 0x51, 0xD2, 0x68, 0x70, 0x96, 0xAC, 0x80,
+0xBB, 0x74, 0x99, 0x6C, 0xAE, 0xE2, 0x7A, 0x64, 0xCE, 0x5C,
+0x00, 0x77, 0x51, 0x05, 0x12, 0x8D, 0x2C, 0xFA, 0x7B, 0xAE,
+0x29, 0xA3, 0x51, 0x71, 0x8E, 0x08, 0xE4, 0x2E, 0x2C, 0xC5,
+0xA1, 0x23, 0x9D, 0xE0, 0x1E, 0x98, 0x01, 0x17, 0x85, 0x9B,
+0xE3, 0xD0, 0x9E, 0xE8, 0x9C, 0xE6, 0xC8, 0x6B, 0x78, 0x0F,
+0x9E, 0xBA, 0x03, 0xB0, 0x15, 0x6E, 0x81, 0xDE, 0x3A, 0x1F,
+0x50, 0xA7, 0x22, 0x16, 0x19, 0x05, 0x17, 0x19, 0x02, 0x37,
+0xDE, 0x8B, 0x38, 0x1F, 0x40, 0xB2, 0x23, 0x1B, 0x6A, 0x8D,
+0x06, 0xE2, 0x1D, 0x72, 0x9A, 0x29, 0x93, 0x8E, 0xF6, 0xA7,
+0xA1, 0xBA, 0x17, 0x53, 0x79, 0xEF, 0x8D, 0xC0, 0xE1, 0x51,
+0x85, 0x4A, 0x61, 0x71, 0xCE, 0x5E, 0x07, 0x9D, 0xB9, 0x15,
+0xC1, 0xC1, 0x93, 0xB8, 0xDE, 0xF9, 0x11, 0x46, 0xFB, 0x4F,
+0x93, 0x73, 0x3F, 0x44, 0x21, 0x0E, 0x96, 0xB8, 0xD3, 0xEA,
+0x75, 0x30, 0x5B, 0x53, 0xA0, 0xD2, 0x6A, 0x11, 0x8B, 0xF1,
+0x88, 0x93, 0x03, 0x81, 0x52, 0xA0, 0x7D, 0x8D, 0x08, 0xE6,
+0xCC, 0xD6, 0x95, 0xE2, 0x9E, 0x8D, 0x7B, 0x21, 0x4C, 0xCA,
+0xE0, 0xC8, 0x5B, 0x60, 0x29, 0x83, 0x6A, 0xBD, 0xD5, 0x01,
+0x7D, 0x6A, 0x3D, 0xC6, 0x03, 0x9D, 0x38, 0xB5, 0xBF, 0x01,
+0x17, 0x8E, 0xEE, 0x85, 0xAF, 0x77, 0x18, 0xB1, 0x28, 0x8B,
+0xB8, 0xA0, 0x42, 0x34, 0x22, 0xC0, 0xD7, 0x37, 0x8C, 0xEB,
+0x17, 0x7B, 0x10, 0x1A, 0x8F, 0x41, 0xA3, 0xD3, 0x41, 0xA9,
+0x52, 0x41, 0xA5, 0x56, 0x42, 0xA1, 0x60, 0x40, 0x7E, 0xB6,
+0x12, 0x5C, 0xDA, 0x14, 0x8A, 0x14, 0x2A, 0x18, 0x63, 0x31,
+0x94, 0x19, 0x6C, 0xB9, 0x60, 0x60, 0x06, 0x17, 0x3E, 0x8D,
+0x9C, 0xB2, 0x2A, 0x34, 0xBC, 0xB6, 0x1E, 0x8B, 0x37, 0xAC,
+0xC3, 0xBC, 0x67, 0xDB, 0x50, 0xBD, 0xB2, 0x15, 0xD5, 0x2D,
+0x2D, 0x64, 0x4B, 0x51, 0x5C, 0x57, 0x8B, 0x14, 0x67, 0x16,
+0x8A, 0xAA, 0x2B, 0x51, 0x51, 0x37, 0x13, 0xE5, 0x55, 0x39,
+0x30, 0x99, 0xB5, 0x10, 0x04, 0x91, 0x23, 0xAA, 0xC4, 0x29,
+0x45, 0x7E, 0xA2, 0x0E, 0x56, 0xA2, 0x68, 0x63, 0xC6, 0x8C,
+0x79, 0x2A, 0x63, 0xFA, 0x2C, 0xA8, 0x54, 0x97, 0xA0, 0x37,
+0x25, 0xC1, 0xEF, 0xED, 0x43, 0xDF, 0xAF, 0x5D, 0x18, 0xB8,
+0x72, 0x89, 0x32, 0xE9, 0xC1, 0x60, 0x6F, 0x2F, 0x3D, 0xF3,
+0x82, 0xE7, 0x62, 0x14, 0xB9, 0x06, 0xA9, 0x0E, 0x3B, 0x2C,
+0xE9, 0x16, 0xE8, 0x35, 0x3C, 0x2E, 0x77, 0x7B, 0x31, 0x16,
+0xE4, 0xBE, 0x7D, 0x7D, 0x1F, 0x76, 0xDD, 0xC5, 0x65, 0xEE,
+0x5E, 0x7C, 0xB9, 0x09, 0x0F, 0xAB, 0x13, 0x70, 0xB2, 0xA4,
+0x69, 0x03, 0xD2, 0xF2, 0x9F, 0xC4, 0x85, 0x23, 0x2F, 0xE0,
+0xF2, 0xA9, 0x73, 0x08, 0x07, 0x63, 0x60, 0x29, 0x0C, 0x25,
+0x55, 0x8B, 0xE8, 0x87, 0x42, 0xA9, 0x90, 0x3F, 0x63, 0x88,
+0x0E, 0xA9, 0x1E, 0x46, 0x5B, 0x1A, 0xB2, 0x4B, 0x1E, 0x42,
+0x68, 0xB8, 0x1F, 0xDF, 0x7C, 0xFD, 0x93, 0x18, 0x0C, 0x08,
+0x9B, 0x36, 0xED, 0x93, 0x69, 0x9A, 0x9C, 0x41, 0x4B, 0x35,
+0x6A, 0x59, 0x15, 0x9A, 0xEC, 0x05, 0x73, 0xA0, 0xD1, 0x9B,
+0x70, 0xE9, 0xC4, 0x6E, 0xA8, 0xB5, 0x66, 0x38, 0x0B, 0x33,
+0xE1, 0x29, 0x2B, 0x86, 0x7B, 0x7A, 0x1E, 0x9C, 0x05, 0xB9,
+0xC8, 0x2A, 0x2A, 0xA0, 0x3D, 0x1F, 0x69, 0x59, 0xD3, 0xA0,
+0x33, 0x9A, 0x21, 0xB1, 0x91, 0x98, 0xA4, 0xC5, 0xF0, 0xAD,
+0x21, 0xF4, 0x5E, 0xF5, 0x89, 0x3C, 0x87, 0x9D, 0xC7, 0xBB,
+0xD0, 0x3D, 0xC5, 0xC1, 0xF2, 0x1A, 0xCC, 0x20, 0xE2, 0x9A,
+0xEC, 0x79, 0x95, 0xD0, 0x9B, 0x2D, 0xA4, 0xF1, 0x30, 0x3C,
+0x14, 0x99, 0x39, 0x3D, 0x8D, 0x0A, 0xA8, 0xA2, 0x02, 0x82,
+0xE4, 0xC8, 0x43, 0x14, 0x49, 0x1C, 0xF4, 0xA2, 0x96, 0xC0,
+0xD3, 0x3C, 0x79, 0x70, 0x14, 0x4C, 0x87, 0x42, 0x8C, 0xE2,
+0x5A, 0xD7, 0x55, 0xDC, 0xBC, 0x31, 0x1A, 0x27, 0xFE, 0x3F,
+0x25, 0x07, 0xBF, 0x4D, 0x91, 0x69, 0x5C, 0xB8, 0x23, 0x2B,
+0x46, 0xA9, 0x25, 0x2A, 0x18, 0x84, 0x03, 0xC3, 0xE8, 0xE9,
+0xFC, 0x19, 0xC3, 0xDE, 0x01, 0x84, 0xC7, 0x23, 0x04, 0x1E,
+0x27, 0x13, 0x26, 0x48, 0x4D, 0xD0, 0x69, 0x60, 0xB2, 0xDA,
+0x60, 0xCD, 0xCA, 0x41, 0xAA, 0x4D, 0x8F, 0x70, 0x58, 0xA0,
+0xBA, 0x40, 0x64, 0xD8, 0xC9, 0xBD, 0x35, 0x91, 0x41, 0x53,
+0x15, 0x8A, 0xE8, 0x70, 0x99, 0x3D, 0xB7, 0x00, 0x1A, 0x83,
+0x11, 0xE7, 0xBE, 0xDA, 0x83, 0xBE, 0x6B, 0x03, 0x60, 0x18,
+0x1E, 0xBA, 0x44, 0x03, 0x0C, 0xA6, 0x44, 0x24, 0x59, 0x92,
+0x64, 0xFD, 0x27, 0xA6, 0x58, 0xA0, 0x35, 0x18, 0xC8, 0xF1,
+0x18, 0xC9, 0xD9, 0x4F, 0xD9, 0xEA, 0xE0, 0xBB, 0x35, 0x02,
+0x6F, 0xDF, 0x6D, 0x49, 0x3D, 0x9F, 0x7D, 0xD7, 0x85, 0x2B,
+0x53, 0x1C, 0x2C, 0xAE, 0x42, 0x09, 0x05, 0xD7, 0x94, 0xEE,
+0xC9, 0x96, 0xB9, 0x8D, 0xF8, 0xAF, 0xC0, 0x55, 0x98, 0x8D,
+0x9C, 0xE2, 0x42, 0x38, 0x72, 0xB3, 0x90, 0x96, 0x99, 0x81,
+0x14, 0x07, 0x45, 0xEC, 0x76, 0xC2, 0xEE, 0xC9, 0x81, 0xA3,
+0x70, 0x06, 0x5C, 0x25, 0x15, 0xF4, 0x2C, 0x13, 0x52, 0xDD,
+0x47, 0x7D, 0x3E, 0x78, 0x6F, 0x8E, 0x30, 0x1C, 0x8F, 0x63,
+0x27, 0xBA, 0x71, 0x7E, 0x0A, 0x45, 0xC4, 0x2B, 0x1F, 0x8D,
+0x00, 0xD1, 0x31, 0x3F, 0xF1, 0xCD, 0x13, 0xA0, 0x83, 0x64,
+0x93, 0x00, 0xFF, 0xA0, 0x1F, 0x63, 0x23, 0x41, 0x70, 0xD4,
+0x24, 0x02, 0x59, 0x9C, 0x62, 0x54, 0x25, 0x68, 0xA0, 0xD4,
+0xE8, 0x69, 0x54, 0xB8, 0x61, 0xC9, 0xC8, 0x84, 0x36, 0xD9,
+0x0E, 0x9B, 0xFD, 0x06, 0xD5, 0xEA, 0x0F, 0x26, 0x1C, 0xE2,
+0x2A, 0x09, 0x6D, 0xF7, 0x14, 0x99, 0x7E, 0xBC, 0x1E, 0x65,
+0x34, 0x87, 0x7E, 0x98, 0x5E, 0xEE, 0x41, 0x45, 0xF3, 0x1A,
+0x5C, 0x3C, 0xFA, 0x09, 0x7A, 0xBA, 0x7B, 0x30, 0x16, 0x08,
+0xC9, 0x45, 0x65, 0x64, 0xA9, 0xB2, 0x44, 0x5F, 0xA2, 0xFC,
+0xBE, 0x20, 0x08, 0x34, 0x97, 0x42, 0xD4, 0xC9, 0x66, 0xD8,
+0x49, 0x5D, 0x0E, 0x97, 0x19, 0x07, 0xF6, 0x9E, 0xC4, 0xEF,
+0xBD, 0xC1, 0xAB, 0x24, 0x88, 0xCA, 0x37, 0x3F, 0x87, 0x5F,
+0x7A, 0x6F, 0xA2, 0x20, 0x14, 0x9C, 0x8F, 0xB6, 0xC8, 0x50,
+0x1F, 0x35, 0x51, 0x6C, 0x0C, 0x42, 0x9C, 0x81, 0x92, 0x1A,
+0x23, 0xBB, 0x38, 0x1F, 0x45, 0x35, 0x95, 0x98, 0xD3, 0x30,
+0x9F, 0x6C, 0x21, 0xCA, 0x17, 0xD4, 0x62, 0xD6, 0x22, 0xBA,
+0x5E, 0xB2, 0x04, 0x55, 0x2D, 0xAD, 0xC8, 0x9B, 0xFB, 0x08,
+0xF5, 0x42, 0x3A, 0x05, 0xA0, 0x86, 0xCB, 0x65, 0xA0, 0xDE,
+0x60, 0xB2, 0x09, 0xA7, 0xEE, 0x2E, 0xEE, 0x84, 0x03, 0x12,
+0xC9, 0x30, 0x05, 0x7A, 0xDE, 0x37, 0x18, 0x42, 0x7F, 0xF7,
+0x59, 0x64, 0x78, 0x3C, 0x28, 0x9C, 0x99, 0x05, 0xB7, 0x27,
+0x05, 0x46, 0x93, 0x02, 0x91, 0xE0, 0x08, 0x82, 0x43, 0x03,
+0x08, 0xDC, 0xBA, 0x29, 0x5B, 0xC8, 0xEF, 0x85, 0x96, 0x1D,
+0x43, 0xBA, 0x83, 0xA8, 0x4A, 0x4E, 0x80, 0xC8, 0x85, 0x60,
+0xB3, 0x4A, 0x72, 0x66, 0x58, 0xA2, 0xA5, 0x6D, 0xF3, 0x8A,
+0x3B, 0x53, 0x75, 0x82, 0x22, 0x69, 0x7D, 0xF0, 0x12, 0xDE,
+0x27, 0x47, 0x6B, 0x1D, 0x6E, 0x13, 0xF2, 0x8B, 0x5C, 0x08,
+0x0C, 0x0C, 0x60, 0xD0, 0xC7, 0xE1, 0xF6, 0xED, 0x18, 0x22,
+0x61, 0x0E, 0x3C, 0x8D, 0x4C, 0x51, 0x9A, 0x9A, 0x22, 0x75,
+0x31, 0xF1, 0xA0, 0x54, 0xAB, 0x61, 0xB6, 0xE8, 0x61, 0x49,
+0xD6, 0xC0, 0x9C, 0x24, 0x22, 0xE0, 0x1B, 0xA1, 0x0A, 0x07,
+0x08, 0x54, 0xE4, 0x09, 0xAE, 0x71, 0xF3, 0x7E, 0x1C, 0x9E,
+0xE4, 0x60, 0x47, 0x1B, 0x16, 0xD1, 0xF7, 0x87, 0x24, 0xB7,
+0x4A, 0x92, 0x46, 0x9C, 0x2A, 0xCA, 0xF3, 0x71, 0xA9, 0x47,
+0x64, 0x60, 0x9A, 0xD6, 0xF2, 0xEC, 0xE7, 0xFF, 0xDA, 0xA5,
+0x7B, 0xD9, 0x19, 0x2B, 0x39, 0x64, 0xA4, 0x41, 0x07, 0x81,
+0x17, 0x65, 0xC5, 0xD0, 0x6A, 0x20, 0x07, 0x07, 0x27, 0xFD,
+0x1E, 0xF0, 0x02, 0x8E, 0x33, 0x0C, 0xBE, 0x20, 0xB0, 0xA5,
+0x3C, 0x27, 0x48, 0xAF, 0xF5, 0x92, 0xB3, 0xC3, 0x74, 0xF4,
+0x0B, 0xF9, 0xF2, 0xD2, 0x1E, 0x26, 0x3C, 0x29, 0x28, 0x03,
+0x9D, 0x25, 0xD3, 0x5E, 0x40, 0xA0, 0xA5, 0x04, 0x5A, 0x44,
+0xD7, 0x16, 0xE9, 0x84, 0x91, 0x27, 0xB6, 0x3C, 0x8B, 0x8E,
+0xE2, 0x7E, 0xAB, 0x63, 0x35, 0x52, 0xC9, 0xB6, 0x6D, 0x5B,
+0x8D, 0x57, 0x3A, 0x9E, 0x83, 0xB3, 0xE3, 0x79, 0x28, 0x3B,
+0xD6, 0x80, 0x7D, 0xF7, 0x99, 0xBF, 0xE9, 0x7C, 0xBB, 0x15,
+0xCC, 0xD6, 0xA7, 0xC0, 0x6E, 0x59, 0x09, 0xE5, 0x1B, 0xCB,
+0x61, 0x22, 0xBE, 0xB3, 0xC9, 0x6A, 0xC9, 0x5A, 0xC9, 0x4A,
+0xC8, 0x1E, 0xF8, 0x67, 0xE2, 0x3F, 0x5F, 0x7F, 0x02, 0x1C,
+0xAC, 0x2A, 0x6C, 0xAB, 0x0A, 0x12, 0x89, 0x00, 0x00, 0x00,
+0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82
+};
+
+static const unsigned char Toolbar_Zoom_png[] = {
+0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
+0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x00, 0x00, 0x18, 0x08, 0x06, 0x00, 0x00, 0x00, 0xE0,
+0x77, 0x3D, 0xF8, 0x00, 0x00, 0x05, 0x1C, 0x49, 0x44, 0x41,
+0x54, 0x78, 0x9C, 0xB5, 0x95, 0x6B, 0x6C, 0x14, 0x55, 0x18,
+0x86, 0x9F, 0x99, 0x9D, 0x9D, 0xBD, 0x74, 0x77, 0xBB, 0xDB,
+0x42, 0x8B, 0xF4, 0x4A, 0x57, 0x28, 0x2D, 0xA4, 0x14, 0xB0,
+0x96, 0x0A, 0x04, 0xA1, 0x5C, 0x02, 0x96, 0x4B, 0x81, 0x6A,
+0x55, 0xAE, 0x82, 0xA0, 0x09, 0xC4, 0x00, 0x11, 0x03, 0x14,
+0x02, 0x05, 0x6F, 0x44, 0x40, 0x91, 0x10, 0xF1, 0x8F, 0x11,
+0x83, 0x31, 0x11, 0x0D, 0x04, 0x7E, 0x48, 0x10, 0x2C, 0x06,
+0x68, 0x2B, 0x77, 0xCB, 0x45, 0x2A, 0x45, 0xB1, 0xD4, 0x2D,
+0xDB, 0xB2, 0xD0, 0x6E, 0x69, 0x77, 0xBB, 0x97, 0xF1, 0x2C,
+0x0A, 0x88, 0x52, 0x08, 0x18, 0xDF, 0xE4, 0xCC, 0xEC, 0x9C,
+0xB3, 0xF9, 0x9E, 0xF3, 0x7D, 0xDF, 0x7B, 0x66, 0xE0, 0x7F,
+0x96, 0xAE, 0xC3, 0x95, 0xA5, 0x7B, 0x65, 0x06, 0x3C, 0x97,
+0x44, 0xCE, 0xE4, 0x71, 0xE4, 0x14, 0x2E, 0xA2, 0xFF, 0xB8,
+0xC5, 0xF4, 0x1B, 0x5B, 0x48, 0xDF, 0x31, 0x09, 0xF4, 0x1D,
+0xDD, 0x42, 0xF6, 0x48, 0x0F, 0x27, 0xBF, 0x09, 0x3F, 0x08,
+0x20, 0xDF, 0x73, 0xB6, 0xF4, 0x60, 0x8C, 0x58, 0x5A, 0x20,
+0x85, 0xE5, 0xC3, 0x06, 0x83, 0x69, 0x6B, 0x54, 0xB4, 0x63,
+0x9A, 0x2D, 0x36, 0x2E, 0xCF, 0x6C, 0xB5, 0x3F, 0xA3, 0xC8,
+0xCA, 0x5A, 0x42, 0xDA, 0x31, 0x34, 0x79, 0x0B, 0xD3, 0xD6,
+0xA7, 0x32, 0x73, 0xB3, 0xF4, 0x70, 0x80, 0xD2, 0xF2, 0x24,
+0x82, 0xDA, 0x97, 0x66, 0xA3, 0xF1, 0xBD, 0xFC, 0xAC, 0xB4,
+0x84, 0x35, 0xE3, 0x9F, 0x64, 0x4B, 0xF1, 0x20, 0xD6, 0x4D,
+0x1A, 0xC2, 0xA2, 0x82, 0x7C, 0x46, 0x3D, 0x3D, 0x8C, 0xCE,
+0x89, 0x69, 0x8A, 0x4E, 0x92, 0x66, 0x12, 0x0E, 0x95, 0xE1,
+0xF7, 0x0E, 0x66, 0xFA, 0x86, 0x0E, 0x21, 0x77, 0x03, 0x56,
+0x57, 0xD8, 0x09, 0x6B, 0x5B, 0x1C, 0x16, 0xCB, 0xB0, 0x95,
+0xC3, 0x33, 0xD9, 0x33, 0x35, 0x9D, 0x57, 0x72, 0x62, 0x68,
+0xBE, 0xD1, 0xC6, 0x96, 0x7D, 0x95, 0x54, 0xD4, 0x5C, 0xA2,
+0x57, 0x42, 0x02, 0xE3, 0x87, 0xE6, 0x93, 0xDC, 0x3B, 0x17,
+0xD9, 0x10, 0x95, 0x82, 0x16, 0xFE, 0x9C, 0xB6, 0x1B, 0xD9,
+0x0F, 0x06, 0xAC, 0xA9, 0x90, 0x68, 0xF7, 0x4F, 0x32, 0xC8,
+0xD2, 0xE8, 0x79, 0xB9, 0x29, 0xBC, 0x9E, 0x67, 0xA7, 0xB1,
+0x0D, 0x36, 0x1E, 0xF1, 0xB3, 0x6A, 0xCF, 0x39, 0x8E, 0x1E,
+0x3B, 0xC7, 0x81, 0xD3, 0xE7, 0xD9, 0x75, 0xB6, 0x86, 0x93,
+0xEE, 0x6B, 0x58, 0x92, 0xD3, 0xE8, 0x94, 0xD9, 0x0F, 0xBD,
+0xC9, 0x94, 0x20, 0x32, 0x59, 0xCE, 0xB8, 0x92, 0xE8, 0xFB,
+0x03, 0x9A, 0xAF, 0x5B, 0xA5, 0x80, 0x7F, 0x4E, 0x66, 0xBC,
+0x8D, 0x59, 0xD9, 0x0E, 0x7E, 0x69, 0x82, 0x4D, 0xC7, 0x42,
+0xE2, 0x1E, 0xC4, 0x6A, 0x10, 0xEB, 0x26, 0x15, 0x55, 0xD5,
+0xA3, 0x97, 0x25, 0x7C, 0xC1, 0x20, 0x61, 0x25, 0x84, 0xA3,
+0xBB, 0x13, 0x5B, 0x62, 0x0A, 0x92, 0x2C, 0x15, 0xA2, 0x85,
+0xEE, 0x99, 0xC5, 0x9D, 0xDA, 0x2D, 0xDC, 0x99, 0xA7, 0xE8,
+0xD5, 0xC3, 0xAF, 0x0E, 0xC9, 0x66, 0xE1, 0xC0, 0x78, 0x36,
+0x1C, 0x6A, 0xE4, 0xD0, 0xC5, 0x06, 0x11, 0x34, 0x4C, 0x75,
+0x6D, 0x1D, 0x57, 0xAF, 0xB8, 0x50, 0x4D, 0x26, 0xEC, 0xB1,
+0x9D, 0xD1, 0x24, 0x0D, 0x4B, 0xAC, 0x8D, 0x4E, 0xE9, 0x3D,
+0x68, 0xAC, 0xA9, 0xA1, 0xB6, 0x6C, 0x0F, 0x41, 0x6F, 0xF3,
+0x2A, 0x11, 0xEE, 0x2D, 0x76, 0xBD, 0xDD, 0xFE, 0x77, 0x80,
+0x72, 0xFB, 0x57, 0x28, 0x90, 0xA9, 0xE8, 0x14, 0x3A, 0x99,
+0x55, 0x4E, 0xB8, 0xFC, 0x6C, 0xDC, 0x7F, 0x04, 0x3C, 0x0D,
+0xA0, 0x0A, 0x27, 0x2B, 0x62, 0x18, 0x55, 0xDA, 0x7D, 0xAD,
+0xB8, 0x6B, 0xCE, 0x40, 0x4B, 0x33, 0x0D, 0xED, 0xED, 0x58,
+0xE3, 0x67, 0x10, 0xE5, 0x70, 0xA0, 0xD3, 0xE9, 0x08, 0x42,
+0x26, 0xB2, 0x2E, 0x92, 0xEB, 0x5D, 0x80, 0x3B, 0x25, 0x0A,
+0xF9, 0xD1, 0x82, 0x7E, 0x9A, 0xFC, 0x41, 0x5C, 0x2D, 0x22,
+0x9E, 0x4E, 0x42, 0x31, 0x1B, 0xD0, 0xEB, 0x15, 0x24, 0x4D,
+0x83, 0x40, 0x00, 0xD1, 0x50, 0x51, 0x0E, 0x3D, 0x18, 0xCC,
+0x98, 0x6C, 0x16, 0x8C, 0x46, 0x3D, 0x9A, 0x16, 0x12, 0xD3,
+0x62, 0x5D, 0x92, 0xA2, 0xC4, 0xF8, 0x97, 0x2B, 0xEF, 0x4C,
+0x84, 0x83, 0xEE, 0xA0, 0xBF, 0x95, 0x73, 0xEE, 0x66, 0x51,
+0x5F, 0x23, 0xBD, 0x7B, 0x74, 0x27, 0x3D, 0xBD, 0x27, 0xCE,
+0xB4, 0xEE, 0x58, 0xCC, 0xA6, 0x9B, 0xBB, 0x56, 0xC4, 0x4E,
+0xE3, 0xD2, 0x33, 0x48, 0x1F, 0x36, 0x84, 0x01, 0x33, 0x8B,
+0x70, 0x24, 0x74, 0xA1, 0xB5, 0xD1, 0x4D, 0x28, 0x18, 0x88,
+0x00, 0xAA, 0xFF, 0xB9, 0xFB, 0x88, 0xEE, 0x9C, 0xE4, 0xAC,
+0xD1, 0xCD, 0x9A, 0x14, 0x9E, 0xD1, 0x26, 0xF6, 0x9D, 0x9A,
+0x94, 0x48, 0xAB, 0xA2, 0x60, 0x16, 0xE9, 0x47, 0xEA, 0x7E,
+0xB5, 0xFE, 0x77, 0x7C, 0xF5, 0x97, 0x51, 0xAC, 0x56, 0x32,
+0x9E, 0xEA, 0x4F, 0xD6, 0xA0, 0x9E, 0xD8, 0xE2, 0xED, 0xB8,
+0x5C, 0xAD, 0xD4, 0x55, 0x1E, 0xA4, 0xD5, 0xED, 0x85, 0xB6,
+0x2E, 0xCB, 0x38, 0x5E, 0x78, 0x81, 0x96, 0x0F, 0x3B, 0x68,
+0xF2, 0xF3, 0xEB, 0x74, 0x44, 0x45, 0x6D, 0x96, 0x8D, 0xC6,
+0x39, 0x39, 0x39, 0xB9, 0x24, 0x39, 0xBB, 0xE1, 0x11, 0x25,
+0x93, 0x45, 0x09, 0x7E, 0xDC, 0x5F, 0x86, 0xFB, 0xDB, 0xEF,
+0x30, 0x67, 0x65, 0x30, 0x62, 0xD6, 0xB3, 0x38, 0x12, 0x63,
+0xB9, 0x54, 0x17, 0xE4, 0x42, 0x65, 0x39, 0x75, 0x07, 0x2A,
+0xB1, 0xF8, 0x7F, 0x63, 0xAC, 0xE3, 0x68, 0xBF, 0x6D, 0x9F,
+0x96, 0x9F, 0xE8, 0xD8, 0x45, 0x11, 0x4D, 0xDF, 0xD8, 0x07,
+0x59, 0x2A, 0x37, 0xD8, 0x1D, 0xA6, 0x9E, 0xFD, 0xFB, 0x13,
+0x9D, 0x9A, 0x8C, 0xCD, 0x66, 0xC2, 0x73, 0xB9, 0x96, 0xFA,
+0x53, 0x55, 0xD8, 0x53, 0x13, 0x49, 0xCA, 0xCE, 0xE2, 0xDA,
+0x75, 0x1F, 0xBF, 0x1E, 0x3F, 0x8E, 0xEB, 0xF0, 0x0F, 0x04,
+0x3C, 0x7A, 0x66, 0x24, 0x7F, 0xC4, 0x84, 0xE8, 0x33, 0x15,
+0xAA, 0x89, 0x97, 0xC6, 0xAC, 0xE2, 0x5C, 0xC7, 0x80, 0x88,
+0xA6, 0xAC, 0x9F, 0x2F, 0x1A, 0xB2, 0x51, 0x1F, 0x6D, 0x25,
+0x3E, 0xAD, 0x07, 0xD1, 0x09, 0x89, 0x44, 0x75, 0x72, 0xA0,
+0x18, 0x0D, 0x04, 0xDB, 0x7C, 0x34, 0xB9, 0xEA, 0xB9, 0x7A,
+0xF1, 0x3C, 0xD7, 0xCE, 0xFE, 0x4C, 0xA8, 0xDA, 0x4B, 0xFE,
+0x58, 0x2B, 0x1F, 0xBF, 0x70, 0x84, 0x86, 0xEF, 0xBF, 0xC6,
+0x5D, 0xC7, 0x01, 0xA2, 0x18, 0x33, 0xEE, 0x0D, 0x5A, 0x3B,
+0x06, 0x30, 0x50, 0xA2, 0x78, 0xEC, 0x42, 0x71, 0x70, 0xDE,
+0x95, 0x84, 0xFF, 0x54, 0x8B, 0x45, 0x98, 0xC6, 0x84, 0x22,
+0xAC, 0x1A, 0xF0, 0xF9, 0xF1, 0x79, 0x5B, 0x08, 0xD4, 0xDF,
+0x80, 0x1B, 0x32, 0xA3, 0x72, 0x3D, 0x7C, 0x30, 0x75, 0x27,
+0xE9, 0x7D, 0x26, 0xE2, 0xBD, 0xE2, 0xE1, 0xC8, 0xB6, 0x4F,
+0xF0, 0x36, 0x85, 0x97, 0x4C, 0x28, 0xE5, 0x9D, 0xFB, 0x00,
+0xFE, 0xD2, 0xE4, 0xD5, 0x05, 0xC2, 0x59, 0xF3, 0xC5, 0x6B,
+0x60, 0x24, 0x11, 0x9B, 0x12, 0x12, 0x36, 0x15, 0x9E, 0x68,
+0x57, 0x48, 0x89, 0xF1, 0x33, 0x77, 0xB8, 0x9D, 0x19, 0x43,
+0x9B, 0xE8, 0xA2, 0x6C, 0xA5, 0x45, 0x0E, 0x61, 0xED, 0xFA,
+0x26, 0xD5, 0x7B, 0x37, 0x71, 0xBA, 0xEC, 0x64, 0x53, 0x5B,
+0x50, 0x1B, 0x3C, 0x65, 0x2D, 0x55, 0x91, 0x30, 0x4A, 0x87,
+0x80, 0xED, 0xCB, 0x77, 0x33, 0xA1, 0x44, 0xBC, 0x96, 0x49,
+0x17, 0x16, 0xEC, 0x01, 0x71, 0xBA, 0xC7, 0xB4, 0xD3, 0xDD,
+0x9E, 0x50, 0x0E, 0xCD, 0x1D, 0x9C, 0x6C, 0xB3, 0xBD, 0x9C,
+0x37, 0x42, 0x9C, 0xEA, 0x38, 0x3C, 0xAE, 0x01, 0x22, 0xAB,
+0xAF, 0xC4, 0xDF, 0x3E, 0xA3, 0xB3, 0xB3, 0x1F, 0x4A, 0xC5,
+0xD9, 0x68, 0x9F, 0xDB, 0x3F, 0x4F, 0x44, 0x98, 0x7B, 0x7F,
+0x40, 0x44, 0x3B, 0xD6, 0xB8, 0xC4, 0x35, 0x32, 0xCA, 0x22,
+0x8F, 0xAF, 0x0D, 0xC7, 0x18, 0xB4, 0x10, 0xA3, 0xB8, 0xAD,
+0xB3, 0xCE, 0x57, 0x25, 0xD1, 0xCB, 0x6C, 0x17, 0x87, 0x37,
+0x4D, 0xF4, 0x26, 0x03, 0x4F, 0xF5, 0x29, 0xEC, 0x09, 0x71,
+0xE8, 0x2D, 0x66, 0x7C, 0xB5, 0xFE, 0x89, 0xB7, 0x00, 0xF7,
+0xFD, 0x58, 0xDC, 0x4B, 0x25, 0x05, 0xF4, 0x96, 0x54, 0x69,
+0x47, 0x97, 0xD4, 0x14, 0x67, 0x7E, 0xC1, 0x30, 0xBA, 0x26,
+0x77, 0xE5, 0xBA, 0xEB, 0x0C, 0x5E, 0xF7, 0x31, 0xE2, 0xBA,
+0xA5, 0x51, 0xBE, 0xEF, 0x0C, 0x3F, 0x55, 0x35, 0xB0, 0x78,
+0xEB, 0x9F, 0xB1, 0x1F, 0x1A, 0x70, 0x13, 0x52, 0xC8, 0x6C,
+0x9D, 0x41, 0xDD, 0x94, 0xF2, 0xB8, 0xD3, 0x90, 0x93, 0x97,
+0x81, 0xC3, 0xDA, 0x26, 0xAA, 0xD8, 0x4C, 0x93, 0xD7, 0x4F,
+0xD9, 0xEE, 0x2A, 0x1A, 0x3D, 0xFE, 0xC0, 0x8A, 0x2F, 0x50,
+0x1F, 0x19, 0xB0, 0x6C, 0x22, 0xAA, 0x2C, 0x53, 0xA2, 0xA8,
+0xA6, 0x92, 0x98, 0xCE, 0x31, 0x52, 0x9A, 0xD3, 0x8E, 0x6A,
+0x94, 0x38, 0x7F, 0xEA, 0x22, 0x0D, 0x57, 0x5A, 0x45, 0x3F,
+0x58, 0x50, 0xBA, 0x9D, 0xF7, 0x1F, 0x25, 0xF6, 0x6D, 0xAD,
+0x28, 0x42, 0x5D, 0x59, 0x24, 0xBD, 0x58, 0x5A, 0xAC, 0xBF,
+0xB8, 0xAA, 0xD8, 0xA8, 0xAD, 0x28, 0x52, 0xB4, 0xE5, 0x93,
+0xA8, 0x5B, 0x31, 0x89, 0xD9, 0xE2, 0xAE, 0xFE, 0xA7, 0xE0,
+0xB7, 0x54, 0x3A, 0x19, 0x69, 0x49, 0x01, 0xCE, 0xA5, 0xE3,
+0x99, 0xB2, 0xAC, 0x90, 0xA9, 0x25, 0x13, 0x71, 0xAE, 0x2C,
+0xBA, 0xFB, 0x33, 0xFC, 0x07, 0x07, 0x66, 0xCF, 0x92, 0x85,
+0x17, 0xB4, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E,
+0x44, 0xAE, 0x42, 0x60, 0x82
+};
+
+#endif
+
diff --git a/Source/MusicMod.sln b/Source/MusicMod.sln
new file mode 100644
index 0000000000..c74659bd6d
--- /dev/null
+++ b/Source/MusicMod.sln
@@ -0,0 +1,450 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "Core\Core\Core.vcproj", "{F0B874CB-4476-4199-9315-8343D05AE684}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoDX9", "Plugins\Plugin_VideoDX9\Plugin_VideoDX9.vcproj", "{636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}"
+ ProjectSection(ProjectDependencies) = postProject
+ {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63}
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_PadSimple", "Plugins\Plugin_PadSimple\Plugin_PadSimple.vcproj", "{9A183B48-ECC2-4121-876A-9B3793686073}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Bochs_disasm", "..\Externals\Bochs_disasm\Bochs_disasm.vcproj", "{29C2ABC1-ADA5-42CD-A5FC-96022D52A510}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\Externals\zlib\zlib.vcproj", "{3E03C179-8251-46E4-81F4-466F114BAC63}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_LLE", "Plugins\Plugin_DSP_LLE\Plugin_DSP_LLE.vcproj", "{C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DiscIO", "Core\DiscIO\DiscIO.vcproj", "{B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoOGL", "Plugins\Plugin_VideoOGL\Plugin_VideoOGL.vcproj", "{CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Core\Common\Common.vcproj", "{C573CAF7-EE6A-458E-8049-16C0BF34C2E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DolphinWX", "Core\DolphinWX\DolphinWX.vcproj", "{A72606EF-C5C1-4954-90AD-F0F93A8D97D9}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF}
+ {DE7C596C-CBC4-4278-8909-146D63990803} = {DE7C596C-CBC4-4278-8909-146D63990803}
+ {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63}
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} = {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}
+ {521498BE-6089-4780-8223-E67C22F4E068} = {521498BE-6089-4780-8223-E67C22F4E068}
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}
+ {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "..\Externals\wxWidgets\build\msw\wx_base.vcproj", "{48AD7E0A-25B1-4974-A1E3-03F8C438D34F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "..\Externals\wxWidgets\build\msw\wx_core.vcproj", "{0318BA30-EF48-441A-9E10-DC85EFAE39F0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DebuggerWX", "Core\DebuggerWX\DebuggerWX.vcproj", "{4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}
+ {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoCommon", "Core\VideoCommon\VideoCommon.vcproj", "{E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}"
+ ProjectSection(ProjectDependencies) = postProject
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_HLE", "Plugins\Plugin_DSP_HLE\Plugin_DSP_HLE.vcproj", "{D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LZO", "..\Externals\LZO\LZO.vcproj", "{33546D62-7F34-4EA6-A88E-D538B36E16BF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_Wiimote", "Plugins\Plugin_Wiimote\Plugin_Wiimote.vcproj", "{8D612734-FAA5-4B8A-804F-4DEA2367D495}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_NULL", "Plugins\Plugin_DSP_NULL\Plugin_DSP_NULL.vcproj", "{C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}"
+ ProjectSection(ProjectDependencies) = postProject
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_nJoy_SDL_Test", "Plugins\Plugin_nJoy_Testing\Plugin_nJoy_SDL_Test.vcproj", "{ADF64291-57ED-4B7A-AB76-37B4A991504B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv28", "..\Externals\wxWidgets\build\msw\wx_adv.vcproj", "{71B16F46-0B00-4EDA-B253-D6D9D03A215C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_nJoy_SDL", "Plugins\Plugin_nJoy_SDL\Plugin_nJoy_SDL.vcproj", "{521498BE-6089-4780-8223-E67C22F4E068}"
+ ProjectSection(ProjectDependencies) = postProject
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MusicMod", "MusicMod", "{77CF6E34-3038-4B23-A2E7-90AD17801609}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{5C17B1EB-6C76-438A-A503-8F3C7831023B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Externals", "Externals", "{4F427D1B-8C90-4D9C-B23D-A51493A1C471}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Player", "..\Branches\MusicMod\Player\Player.vcproj", "{0B72B5D6-5D72-4391-84A7-9CCA5392668A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {DE7C596C-CBC4-4278-8909-146D63990803} = {DE7C596C-CBC4-4278-8909-146D63990803}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestPlayer", "..\Branches\MusicMod\TestPlayer\TestPlayer.vcproj", "{0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A} = {0B72B5D6-5D72-4391-84A7-9CCA5392668A}
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dolphin", "Dolphin", "{61C7F431-0623-4A8D-9C4B-EDE35696554A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "..\Branches\MusicMod\Common\Common.vcproj", "{DE7C596C-CBC4-4278-8909-146D63990803}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Main", "..\Branches\MusicMod\Main\Main.vcproj", "{95CCAABC-7062-47C4-B8C1-A064DD5F16FF}"
+ ProjectSection(ProjectDependencies) = postProject
+ {DE7C596C-CBC4-4278-8909-146D63990803} = {DE7C596C-CBC4-4278-8909-146D63990803}
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A} = {0B72B5D6-5D72-4391-84A7-9CCA5392668A}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ DebugFast|Win32 = DebugFast|Win32
+ DebugFast|x64 = DebugFast|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.Build.0 = Debug|Win32
+ {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.ActiveCfg = Debug|x64
+ {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.Build.0 = Debug|x64
+ {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.Build.0 = DebugFast|Win32
+ {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.Build.0 = DebugFast|x64
+ {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.ActiveCfg = Release|Win32
+ {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.Build.0 = Release|Win32
+ {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.ActiveCfg = Release|x64
+ {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.Build.0 = Release|x64
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|Win32.ActiveCfg = Debug|Win32
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|x64.ActiveCfg = Debug|x64
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|Win32.ActiveCfg = Release|Win32
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|Win32.Build.0 = Release|Win32
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|x64.ActiveCfg = Release|x64
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|x64.Build.0 = Release|x64
+ {9A183B48-ECC2-4121-876A-9B3793686073}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9A183B48-ECC2-4121-876A-9B3793686073}.Debug|x64.ActiveCfg = Debug|x64
+ {9A183B48-ECC2-4121-876A-9B3793686073}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {9A183B48-ECC2-4121-876A-9B3793686073}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {9A183B48-ECC2-4121-876A-9B3793686073}.Release|Win32.ActiveCfg = Release|Win32
+ {9A183B48-ECC2-4121-876A-9B3793686073}.Release|Win32.Build.0 = Release|Win32
+ {9A183B48-ECC2-4121-876A-9B3793686073}.Release|x64.ActiveCfg = Release|x64
+ {9A183B48-ECC2-4121-876A-9B3793686073}.Release|x64.Build.0 = Release|x64
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|Win32.ActiveCfg = Debug|Win32
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|Win32.Build.0 = Debug|Win32
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|x64.ActiveCfg = Debug|x64
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|x64.Build.0 = Debug|x64
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|Win32.Build.0 = DebugFast|Win32
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|x64.Build.0 = DebugFast|x64
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|Win32.ActiveCfg = Release|Win32
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|Win32.Build.0 = Release|Win32
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|x64.ActiveCfg = Release|x64
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|x64.Build.0 = Release|x64
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|Win32.Build.0 = Debug|Win32
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|x64.ActiveCfg = Debug|x64
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|x64.Build.0 = Debug|x64
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|Win32.ActiveCfg = Release|Win32
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|Win32.Build.0 = Release|Win32
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|x64.ActiveCfg = Release|x64
+ {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|x64.Build.0 = Release|x64
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Debug|x64.ActiveCfg = Debug|x64
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.DebugFast|x64.Build.0 = DebugFast|x64
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release|Win32.ActiveCfg = Release|Win32
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release|Win32.Build.0 = Release|Win32
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release|x64.ActiveCfg = Release|x64
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|Win32.Build.0 = Debug|Win32
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|x64.ActiveCfg = Debug|x64
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|x64.Build.0 = Debug|x64
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|Win32.Build.0 = DebugFast|Win32
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|x64.Build.0 = DebugFast|x64
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|Win32.ActiveCfg = Release|Win32
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|Win32.Build.0 = Release|Win32
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|x64.ActiveCfg = Release|x64
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|x64.Build.0 = Release|x64
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|x64.ActiveCfg = Debug|x64
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|Win32.ActiveCfg = Release|Win32
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|Win32.Build.0 = Release|Win32
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|x64.ActiveCfg = Release|x64
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|x64.Build.0 = Release|x64
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|Win32.Build.0 = Debug|Win32
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|x64.ActiveCfg = Debug|x64
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|x64.Build.0 = Debug|x64
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|Win32.Build.0 = DebugFast|Win32
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|x64.Build.0 = DebugFast|x64
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|Win32.ActiveCfg = Release|Win32
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|Win32.Build.0 = Release|Win32
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.ActiveCfg = Release|x64
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.Build.0 = Release|x64
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.Build.0 = Debug|Win32
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.ActiveCfg = Debug|x64
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.Build.0 = Debug|x64
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.Build.0 = DebugFast|Win32
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.Build.0 = DebugFast|x64
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.ActiveCfg = Release|Win32
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.Build.0 = Release|Win32
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.ActiveCfg = Release|x64
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.Build.0 = Release|x64
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.Build.0 = Debug|Win32
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|x64.ActiveCfg = Debug|x64
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|x64.Build.0 = Debug|x64
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.ActiveCfg = Release|Win32
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.Build.0 = Release|Win32
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|x64.ActiveCfg = Release|x64
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.Build.0 = Debug|Win32
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|x64.ActiveCfg = Debug|x64
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|x64.Build.0 = Debug|x64
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.ActiveCfg = Release|Win32
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.Build.0 = Release|Win32
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|x64.ActiveCfg = Release|x64
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|Win32.Build.0 = Debug|Win32
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|x64.ActiveCfg = Debug|x64
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|x64.Build.0 = Debug|x64
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|Win32.Build.0 = DebugFast|Win32
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|x64.Build.0 = DebugFast|x64
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|Win32.ActiveCfg = Release|Win32
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|Win32.Build.0 = Release|Win32
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|x64.ActiveCfg = Release|x64
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|x64.Build.0 = Release|x64
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|x64.ActiveCfg = Debug|x64
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|Win32.ActiveCfg = Release|Win32
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|Win32.Build.0 = Release|Win32
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|x64.ActiveCfg = Release|x64
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|x64.Build.0 = Release|x64
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|x64.ActiveCfg = Debug|x64
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|x64.Build.0 = DebugFast|x64
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|Win32.ActiveCfg = Release|Win32
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|Win32.Build.0 = Release|Win32
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|x64.ActiveCfg = Release|x64
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|x64.ActiveCfg = Debug|x64
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|x64.Build.0 = Debug|x64
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|Win32.Build.0 = DebugFast|Win32
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|x64.Build.0 = DebugFast|x64
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|Win32.ActiveCfg = Release|Win32
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|Win32.Build.0 = Release|Win32
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|x64.ActiveCfg = Release|x64
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|x64.Build.0 = Release|x64
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|x64.ActiveCfg = Debug|x64
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.ActiveCfg = Release|Win32
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.Build.0 = Release|Win32
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.ActiveCfg = Release|x64
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.Build.0 = Release|x64
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}.Debug|x64.ActiveCfg = Debug|x64
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}.DebugFast|x64.Build.0 = DebugFast|x64
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}.Release|Win32.ActiveCfg = Release|Win32
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}.Release|Win32.Build.0 = Release|Win32
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807}.Release|x64.ActiveCfg = Release|x64
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|x64.ActiveCfg = Debug|x64
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|Win32.ActiveCfg = Release|Win32
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|Win32.Build.0 = Release|Win32
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|x64.ActiveCfg = Release|x64
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|x64.Build.0 = Release|x64
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.Debug|Win32.Build.0 = Debug|Win32
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.Debug|x64.ActiveCfg = Debug|x64
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.Debug|x64.Build.0 = Debug|x64
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.Release|Win32.ActiveCfg = Release|Win32
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.Release|Win32.Build.0 = Release|Win32
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C}.Release|x64.ActiveCfg = Release|x64
+ {521498BE-6089-4780-8223-E67C22F4E068}.Debug|Win32.ActiveCfg = Debug|Win32
+ {521498BE-6089-4780-8223-E67C22F4E068}.Debug|Win32.Build.0 = Debug|Win32
+ {521498BE-6089-4780-8223-E67C22F4E068}.Debug|x64.ActiveCfg = Debug|x64
+ {521498BE-6089-4780-8223-E67C22F4E068}.Debug|x64.Build.0 = Debug|x64
+ {521498BE-6089-4780-8223-E67C22F4E068}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
+ {521498BE-6089-4780-8223-E67C22F4E068}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {521498BE-6089-4780-8223-E67C22F4E068}.DebugFast|x64.Build.0 = DebugFast|x64
+ {521498BE-6089-4780-8223-E67C22F4E068}.Release|Win32.ActiveCfg = Release|Win32
+ {521498BE-6089-4780-8223-E67C22F4E068}.Release|Win32.Build.0 = Release|Win32
+ {521498BE-6089-4780-8223-E67C22F4E068}.Release|x64.ActiveCfg = Release|x64
+ {521498BE-6089-4780-8223-E67C22F4E068}.Release|x64.Build.0 = Release|x64
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Debug|Win32.Build.0 = Debug|Win32
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Debug|x64.ActiveCfg = Debug|x64
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Debug|x64.Build.0 = Debug|x64
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.DebugFast|Win32.ActiveCfg = Debug|Win32
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.DebugFast|Win32.Build.0 = Debug|Win32
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.DebugFast|x64.ActiveCfg = Debug|x64
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.DebugFast|x64.Build.0 = Debug|x64
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release|Win32.ActiveCfg = Release|Win32
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release|Win32.Build.0 = Release|Win32
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release|x64.ActiveCfg = Release|x64
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release|x64.Build.0 = Release|x64
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Debug|Win32.Build.0 = Debug|Win32
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Debug|x64.ActiveCfg = Debug|x64
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Debug|x64.Build.0 = Debug|x64
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.DebugFast|Win32.ActiveCfg = Debug|Win32
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.DebugFast|Win32.Build.0 = Debug|Win32
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.DebugFast|x64.ActiveCfg = Debug|x64
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.DebugFast|x64.Build.0 = Debug|x64
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release|Win32.ActiveCfg = Release|Win32
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release|Win32.Build.0 = Release|Win32
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release|x64.ActiveCfg = Release|x64
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release|x64.Build.0 = Release|x64
+ {DE7C596C-CBC4-4278-8909-146D63990803}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DE7C596C-CBC4-4278-8909-146D63990803}.Debug|Win32.Build.0 = Debug|Win32
+ {DE7C596C-CBC4-4278-8909-146D63990803}.Debug|x64.ActiveCfg = Debug|Win32
+ {DE7C596C-CBC4-4278-8909-146D63990803}.DebugFast|Win32.ActiveCfg = Debug|Win32
+ {DE7C596C-CBC4-4278-8909-146D63990803}.DebugFast|Win32.Build.0 = Debug|Win32
+ {DE7C596C-CBC4-4278-8909-146D63990803}.DebugFast|x64.ActiveCfg = Debug|Win32
+ {DE7C596C-CBC4-4278-8909-146D63990803}.Release|Win32.ActiveCfg = Release|Win32
+ {DE7C596C-CBC4-4278-8909-146D63990803}.Release|Win32.Build.0 = Release|Win32
+ {DE7C596C-CBC4-4278-8909-146D63990803}.Release|x64.ActiveCfg = Release|x64
+ {DE7C596C-CBC4-4278-8909-146D63990803}.Release|x64.Build.0 = Release|x64
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Debug|Win32.Build.0 = Debug|Win32
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Debug|x64.ActiveCfg = Debug|Win32
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.DebugFast|Win32.ActiveCfg = Debug|Win32
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.DebugFast|Win32.Build.0 = Debug|Win32
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.DebugFast|x64.ActiveCfg = Debug|Win32
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release|Win32.ActiveCfg = Release|Win32
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release|Win32.Build.0 = Release|Win32
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release|x64.ActiveCfg = Release|x64
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {61C7F431-0623-4A8D-9C4B-EDE35696554A}
+ {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {61C7F431-0623-4A8D-9C4B-EDE35696554A}
+ {A72606EF-C5C1-4954-90AD-F0F93A8D97D9} = {61C7F431-0623-4A8D-9C4B-EDE35696554A}
+ {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {61C7F431-0623-4A8D-9C4B-EDE35696554A}
+ {F0B874CB-4476-4199-9315-8343D05AE684} = {61C7F431-0623-4A8D-9C4B-EDE35696554A}
+ {9A183B48-ECC2-4121-876A-9B3793686073} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {8D612734-FAA5-4B8A-804F-4DEA2367D495} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {C6CC7A52-0FDD-433A-B2CF-9C6F187DA807} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {ADF64291-57ED-4B7A-AB76-37B4A991504B} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {521498BE-6089-4780-8223-E67C22F4E068} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18} = {5C17B1EB-6C76-438A-A503-8F3C7831023B}
+ {3E03C179-8251-46E4-81F4-466F114BAC63} = {4F427D1B-8C90-4D9C-B23D-A51493A1C471}
+ {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {4F427D1B-8C90-4D9C-B23D-A51493A1C471}
+ {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {4F427D1B-8C90-4D9C-B23D-A51493A1C471}
+ {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {4F427D1B-8C90-4D9C-B23D-A51493A1C471}
+ {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {4F427D1B-8C90-4D9C-B23D-A51493A1C471}
+ {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {4F427D1B-8C90-4D9C-B23D-A51493A1C471}
+ {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {4F427D1B-8C90-4D9C-B23D-A51493A1C471}
+ {0B72B5D6-5D72-4391-84A7-9CCA5392668A} = {77CF6E34-3038-4B23-A2E7-90AD17801609}
+ {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718} = {77CF6E34-3038-4B23-A2E7-90AD17801609}
+ {DE7C596C-CBC4-4278-8909-146D63990803} = {77CF6E34-3038-4B23-A2E7-90AD17801609}
+ {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} = {77CF6E34-3038-4B23-A2E7-90AD17801609}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ AMDCaProjectFile = D:\Dev\Dolphin\trunk\Source\CodeAnalyst\Dolphin.caw
+ EndGlobalSection
+ GlobalSection(DPCodeReviewSolutionGUID) = preSolution
+ DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
+ EndGlobalSection
+EndGlobal