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