diff --git a/backends/platform/3ds/osystem.cpp b/backends/platform/3ds/osystem.cpp index d7e3c6d4059..8e40e53fefc 100644 --- a/backends/platform/3ds/osystem.cpp +++ b/backends/platform/3ds/osystem.cpp @@ -84,7 +84,8 @@ OSystem_3DS::OSystem_3DS(): _screenChangeId(0), _magnifyMode(MODE_MAGOFF), exiting(false), - sleeping(false) + sleeping(false), + _logger(0) { chdir("sdmc:/"); @@ -116,6 +117,9 @@ OSystem_3DS::~OSystem_3DS() { destroyAudio(); destroy3DSGraphics(); + delete _logger; + _logger = 0; + delete _timerManager; _timerManager = 0; } @@ -125,6 +129,15 @@ void OSystem_3DS::quit() { } void OSystem_3DS::initBackend() { + if (!_logger) + _logger = new Backends::Log::Log(this); + + if (_logger) { + Common::WriteStream *logFile = createLogFile(); + if (logFile) + _logger->open(logFile); + } + loadConfig(); ConfMan.registerDefault("fullscreen", true); ConfMan.registerDefault("aspect_ratio", true); @@ -157,6 +170,10 @@ Common::String OSystem_3DS::getDefaultConfigFileName() { return "sdmc:/3ds/scummvm/scummvm.ini"; } +Common::String OSystem_3DS::getDefaultLogFileName() { + return "sdmc:/3ds/scummvm/scummvm.log"; +} + void OSystem_3DS::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { s.add("RomFS", new Common::FSDirectory(DATA_PATH"/"), priority); } @@ -222,6 +239,30 @@ void OSystem_3DS::fatalError() { void OSystem_3DS::logMessage(LogMessageType::Type type, const char *message) { printf("%s", message); + + // Then log into file (via the logger) + if (_logger) + _logger->print(message); +} + +Common::WriteStream *OSystem_3DS::createLogFile() { + // Start out by resetting _logFilePath, so that in case + // of a failure, we know that no log file is open. + _logFilePath.clear(); + + Common::String logFile; + if (ConfMan.hasKey("logfile")) + logFile = ConfMan.get("logfile"); + else + logFile = getDefaultLogFileName(); + if (logFile.empty()) + return nullptr; + + Common::FSNode file(logFile); + Common::WriteStream *stream = file.createWriteStream(); + if (stream) + _logFilePath = logFile; + return stream; } } // namespace N3DS diff --git a/backends/platform/3ds/osystem.h b/backends/platform/3ds/osystem.h index 991f3423515..e3c92f6e7ab 100644 --- a/backends/platform/3ds/osystem.h +++ b/backends/platform/3ds/osystem.h @@ -31,6 +31,7 @@ #include "base/main.h" #include "audio/mixer_intern.h" #include "backends/graphics/graphics.h" +#include "backends/log/log.h" #include "backends/platform/3ds/sprite.h" #include "common/rect.h" #include "common/queue.h" @@ -201,8 +202,12 @@ private: void flushGameScreen(); void flushCursor(); + virtual Common::String getDefaultLogFileName(); + virtual Common::WriteStream *createLogFile(); + protected: Audio::MixerImpl *_mixer; + Backends::Log::Log *_logger; private: u16 _gameWidth, _gameHeight; @@ -287,6 +292,8 @@ private: u16 _magWidth, _magHeight; u16 _magCenterX, _magCenterY; + Common::String _logFilePath; + public: // Pause PauseToken _sleepPauseToken;