mirror of
				https://github.com/dolphin-emu/dolphin.git
				synced 2025-10-25 09:29:43 +00:00 
			
		
		
		
	Yes, I used a script :D git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4169 8ced0084-cf51-0410-be5f-012b33b47a6e
		
			
				
	
	
		
			297 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			297 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| //
 | |
| // Licensetype: GNU General Public License (GPL)
 | |
| //
 | |
| // 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/
 | |
| //
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| // Includes
 | |
| // -------------
 | |
| #include <iostream>
 | |
| #include <fstream>
 | |
| #include <sstream>
 | |
| 
 | |
| #ifndef _WIN32
 | |
| #include <stdlib.h>
 | |
| #endif
 | |
| 
 | |
| //#include "ConsoleWindow.h" // Open and close console
 | |
| 
 | |
| #include "Debugger.h"
 | |
| #include "PBView.h"
 | |
| #include "IniFile.h"
 | |
| #include "FileUtil.h"
 | |
| #include "StringUtil.h"
 | |
| #include "FileSearch.h"
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| // Declarations and definitions
 | |
| // -------------
 | |
| extern std::vector<std::string> sMailLog, sMailTime;
 | |
| extern DSPDebuggerHLE* m_DebuggerFrame;
 | |
| 
 | |
| 
 | |
| 
 | |
| // =======================================================================================
 | |
| // Update mail window
 | |
| // --------------
 | |
| void DSPDebuggerHLE::DoUpdateMail()
 | |
| {
 | |
| 	//Console::Print("i  %i  %i\n", sFullMail.size(), sMailLog.size());
 | |
| 
 | |
| 	if(sFullMail.size() > 0 && sMailLog.size() > 0)
 | |
| 	{
 | |
|             m_log->SetValue(wxString::FromAscii(sFullMail.at(m_RadioBox[3]->GetSelection()).c_str()));
 | |
|             m_log->SetDefaultStyle(wxTextAttr(*wxBLUE)); // doesn't work because of the current wx
 | |
|             
 | |
|             m_log1->SetValue(wxString::FromAscii(sMailLog.at(m_RadioBox[3]->GetSelection()).c_str()));
 | |
|             m_log1->AppendText(wxT("\n\n"));
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| void DSPDebuggerHLE::UpdateMail(wxNotebookEvent& event)
 | |
| {
 | |
| 	DoUpdateMail();
 | |
| 	/* This may be called before m_DebuggerFrame is fully created through the
 | |
| 	   EVT_NOTEBOOK_PAGE_CHANGED, in that case it will crash because this
 | |
| 	   is accessing members of it */
 | |
| 	if(StoreMails && m_DebuggerFrame) ReadDir();
 | |
| }
 | |
| 
 | |
| // Change mail from radio button change
 | |
| void DSPDebuggerHLE::ChangeMail(wxCommandEvent& event)
 | |
| {
 | |
| 	//Console::Print("abc");
 | |
| 	DoUpdateMail();
 | |
| 	//if(StoreMails) ReadDir();
 | |
| }
 | |
| // ==============
 | |
| 
 | |
| 
 | |
| 
 | |
| // =======================================================================================
 | |
| // Read out mails from dir
 | |
| // --------------
 | |
| void DSPDebuggerHLE::ReadDir()
 | |
| {
 | |
| 	CFileSearch::XStringVector Directories;
 | |
| 	//Directories.push_back("Logs/Mail");
 | |
| 	Directories.push_back(FULL_MAIL_LOGS_DIR);	
 | |
| 
 | |
| 	CFileSearch::XStringVector Extensions;
 | |
| 	Extensions.push_back("*.log");
 | |
| 
 | |
| 	CFileSearch FileSearch(Extensions, Directories);
 | |
| 	const CFileSearch::XStringVector& rFilenames = FileSearch.GetFileNames();
 | |
| 
 | |
| 	//m_gc->Show(false);
 | |
| 	//m_gc->Append(wxT("SSBM ffffix"));
 | |
| 	//m_gc->Show(true);
 | |
| 
 | |
| 	// Clear in case we already did this earlier
 | |
| 	all_all_files.clear();
 | |
| 
 | |
| 	if (rFilenames.size() > 0 && m_gc && m_wii)
 | |
| 	{
 | |
| 		for (u32 i = 0; i < rFilenames.size(); i++)
 | |
| 		{
 | |
| 			std::string FileName;
 | |
| 			SplitPath(rFilenames[i], NULL, &FileName, NULL); // place the filename in FileName
 | |
| 
 | |
| 			//std::string FileName = StripSpaces(*FileName);
 | |
| 			std::vector<std::string> pieces;	
 | |
| 			SplitString(FileName, "_sep", pieces); // split string
 | |
| 
 | |
| 			// Save all filenames heres
 | |
| 			if(pieces[2] == "0") all_all_files.push_back(pieces[0]);
 | |
| 
 | |
| 			// Cut to size
 | |
| 			std::string cut;
 | |
| 			if(pieces[0].length() > 18)
 | |
| 				cut = pieces[0].substr(0, 18) + "...";	
 | |
| 			else
 | |
| 				cut = pieces[0];
 | |
| 
 | |
| 			//Console::Print("%s  %s  %s\n",  pieces[0].c_str(), pieces[1].c_str(),
 | |
| 			//	pieces[2].c_str(), pieces[3].c_str());
 | |
| 
 | |
| 			if (NoDuplicate(pieces[0]) && pieces.size() >= 3)
 | |
| 			{	
 | |
| 				all_files.push_back(pieces[0]);
 | |
| 				if (pieces[3] == "GC")
 | |
| 				{
 | |
| 					gc_files.push_back(pieces[0]);
 | |
| 					m_gc->Append(wxString::FromAscii(cut.c_str()));
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					wii_files.push_back(pieces[0]);
 | |
| 					m_wii->Append(wxString::FromAscii(cut.c_str()));
 | |
| 				}				
 | |
| 			}				
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| // =======================================================================================
 | |
| // Check for duplicates and count files from all_all_files
 | |
| // --------------
 | |
| bool DSPDebuggerHLE::NoDuplicate(std::string FileName)
 | |
| {
 | |
| 	for (u32 i = 0; i < all_files.size(); i++)
 | |
| 	{
 | |
| 		if(all_files.at(i) == FileName)
 | |
| 			return false;
 | |
| 	}
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| // Count the number of files for each game
 | |
| u32 DSPDebuggerHLE::CountFiles(std::string FileName)
 | |
| {
 | |
| 	int match = 0;
 | |
| 
 | |
| 	for (u32 i = 0; i < all_all_files.size(); i++)
 | |
| 	{
 | |
| 		//Console::Print("CountFiles  %i  %s\n", i, all_all_files[i].c_str());
 | |
| 		if(all_all_files[i] == FileName)
 | |
| 		match++;
 | |
| 	}
 | |
| 	//Console::Print("We found  %i  files for this game\n", match);
 | |
| 	return match;
 | |
| }
 | |
| // ==============
 | |
| 
 | |
| 
 | |
| // =======================================================================================
 | |
| // Read file from harddrive
 | |
| // --------------
 | |
| std::string DSPDebuggerHLE::Readfile_(std::string FileName)
 | |
| {
 | |
| 	char c;     // declare a char variable
 | |
| 	FILE *file; // declare a FILE pointer
 | |
| 	std::string sz = "";
 | |
| 
 | |
| 	if(File::Exists(FileName.c_str()))
 | |
| 		file = fopen(FileName.c_str(), "r"); // open a text file for reading
 | |
| 	else
 | |
| 		return "";
 | |
| 
 | |
| 	if(file == NULL)
 | |
| 	{
 | |
| 		// file could not be opened
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		while(1) // looping through file
 | |
| 		{     
 | |
| 			c = fgetc(file);
 | |
| 
 | |
| 			if(c != EOF)
 | |
| 				sz += c; // print the file one character at a time
 | |
| 			else
 | |
| 				break; // break when EOF is reached
 | |
| 		}
 | |
| 	
 | |
|                 fclose(file);
 | |
| 	}
 | |
|         return sz;
 | |
| }
 | |
| 
 | |
| // Read file
 | |
| void DSPDebuggerHLE::Readfile(std::string FileName, bool GC)
 | |
| {
 | |
| 	u32 n = CountFiles(FileName); // count how many mails we have
 | |
| 	u32 curr_n = 0;
 | |
| 	std::ifstream file;
 | |
| 	for (u32 i = 0; i < m_RadioBox[3]->GetCount(); i++)
 | |
| 	{
 | |
| 		if(m_RadioBox[3]->IsItemEnabled(i)) curr_n++;
 | |
| 		m_RadioBox[3]->Enable(i, false); // disable all
 | |
| 	}
 | |
| 	//Console::Print("Disabled all: n %i\n", n);
 | |
| 
 | |
| 
 | |
| 	for (u32 i = 0; i < n; i++)
 | |
| 	{
 | |
| 		m_RadioBox[3]->Enable(i, true); // then anble the right ones
 | |
| 		//Console::Print("m_RadioBox[3] enabled:  %i\n", i);
 | |
| 
 | |
| 		std::string sz = "";
 | |
|                 std::ostringstream ci;
 | |
|                 ci << i;
 | |
| 		std::string f0 = FULL_MAIL_LOGS_DIR + FileName + "_sep" + ci.str() + "_sep" + "0_sep" + (GC ? "GC" : "Wii") +  "_sep.log";
 | |
| 		std::string f1 = FULL_MAIL_LOGS_DIR + FileName + "_sep" + ci.str() + "_sep" + "1_sep" + (GC ? "GC" : "Wii") +  "_sep.log";
 | |
| 
 | |
| 		//Console::Print("ifstream  %s  %s\n", f0.c_str(), f1.c_str());
 | |
| 
 | |
| 		if(sFullMail.size() <= i) sFullMail.resize(sFullMail.size() + 1);
 | |
| 		if(sMailLog.size() <= i) sMailLog.resize(sMailLog.size() + 1);
 | |
| 
 | |
| 		if(Readfile_(f0).length() > 0) sFullMail.at(i) = Readfile_(f0);
 | |
| 			else sFullMail.at(i) = "";
 | |
| 		if(Readfile_(f1).length() > 0) sMailLog.at(i) = Readfile_(f1);
 | |
| 			else sMailLog.at(i) = "";
 | |
| 	}
 | |
| 	if(n < curr_n) m_RadioBox[3]->Select(n - 1);
 | |
| 	//Console::Print("Select: %i  | n %i  curr_n %i\n", n - 1, n, curr_n);
 | |
| 	DoUpdateMail();
 | |
| }
 | |
| // ==============
 | |
| 
 | |
| 
 | |
| // =======================================================================================
 | |
| // Read the file to the text window
 | |
| // ---------------
 | |
| void DSPDebuggerHLE::OnGameChange(wxCommandEvent& event)
 | |
| {
 | |
|     if(event.GetId() == 2006)
 | |
| 	{
 | |
|             // Only allow one selected game at a time
 | |
|             for (u32 i = 0; i < m_gc->GetCount(); ++i)
 | |
|                 if(i != (u32)event.GetInt()) m_gc->Check(i, false);
 | |
|             for (u32 i = 0; i < m_wii->GetCount(); ++i)
 | |
|                 m_wii->Check(i, false);
 | |
|             Readfile(gc_files[event.GetInt()], true);
 | |
| 	}
 | |
|     else
 | |
| 	{
 | |
|             for (u32 i = 0; i < m_gc->GetCount(); ++i)
 | |
|                 m_gc->Check(i, false);
 | |
|             for (u32 i = 0; i < m_wii->GetCount(); ++i)
 | |
|                 if(i != (u32)event.GetInt()) m_wii->Check(i, false);
 | |
|             Readfile(wii_files[event.GetInt()], false);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Settings
 | |
| void DSPDebuggerHLE::MailSettings(wxCommandEvent& event)
 | |
| {
 | |
| 	//for (int i = 0; i < all_all_files.size(); ++i)
 | |
| 		//Console::Print("s: %s \n", all_all_files.at(i).c_str());
 | |
| 
 | |
| 	ScanMails = m_gcwiiset->IsChecked(0);
 | |
| 	StoreMails = m_gcwiiset->IsChecked(1);
 | |
| }
 | |
| 
 |