///////////////////////////////////////////////////////////////////////////// // Name: pokemod/Debug.cpp // Purpose: Define logging abilities for a PokéMod // Author: Ben Boeckel // Modified by: Ben Boeckel // Created: Wed Feb 14 23:44:39 2007 // Copyright: ©2007 Nerdy Productions // Licence: // 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; either version 2 of the License, or // (at your option) any later version. // // 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 for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ///////////////////////////////////////////////////////////////////////////// #include "Debug.h" #ifdef PM_DEBUG #ifdef PG_DEBUG_WINDOW extern debugWindow PokeModDebugWindow; #endif int PokeModDebugLevel; void PokeGen::PokeMod::Log(const char *msg, const int level) { // Actual strings of the debugging levels const char *PokeModDebugStr[8] = {"Emergency", "Alert", "Critical Error", "Error", "Warning", "Notice", "Info", "Debug"}; // Only log if wanted if (level <= PokeModDebugLevel) { // Get the current time char path[21]; char time[9]; time_t rawTime = std::time(NULL); tm *curTime = std::localtime(&rawTime); strftime(path, 21, "%y/%m-%b/%d-%a", curTime); strftime(time, 9, "%X", curTime); // Get the actual output message String output("%s (%s): %s", PokeModDebugStr[level], time, msg); // Output to the command window # ifdef PM_DEBUG_OUTPUT_CONSOLE std::cout << output << std::endl; # endif // Output to the debugging console # ifdef PM_DEBUG_OUTPUT_DEBUG if (PokeModDebugWindow.m_Show[level].IsChecked()) PokeModDebugWindow.m_Debug.Append(output); # endif // Output to the debugging log # ifdef PM_DEBUG_OUTPUT_FILE std::ofstream flog(String("/log/pokemod/%s.log", path), std::ios::app); // Output erros if the file fails if (!flog) { # ifdef PM_DEBUG_OUTPUT_CONSOLE std::cout << "Alert (" << curTime << "): Unable to open log file!\n"; # endif # ifdef PM_DEBUG_OUTPUT_DEBUG PokeModDebugWindow.m_Debug.Append(String("Alert (%s): Unable to open log file!", curTime)); # endif } else { flog << output << '\n'; flog.close(); } # endif } } #else // Empty function if debugging isn't wanted void PokeGen::PokeMod::Log(const String &msg, const int level) { return; } #endif