// // 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 #include #include #ifndef _WIN32 #include #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 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 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); }