diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/engine.cpp | 38 | ||||
-rw-r--r-- | common/engine.h | 5 |
2 files changed, 43 insertions, 0 deletions
diff --git a/common/engine.cpp b/common/engine.cpp index 4dc1b1681c..e764a3d3f7 100644 --- a/common/engine.cpp +++ b/common/engine.cpp @@ -28,9 +28,11 @@ /* FIXME - BIG HACK for MidiEmu */ OSystem *g_system = 0; SoundMixer *g_mixer = 0; +Engine *g_engine = 0; Engine::Engine(GameDetector *detector, OSystem *syst) : _system(syst) { + g_engine = this; _mixer = new SoundMixer(); _gameDataPath = detector->_gameDataPath; @@ -93,6 +95,42 @@ Engine *Engine::createFromDetector(GameDetector *detector, OSystem *syst) { return engine; } +void NORETURN CDECL error(const char *s, ...) { + char buf_input[1024]; + char buf_output[1024]; + va_list va; + + va_start(va, s); + vsprintf(buf_input, s, va); + va_end(va); + + if (g_engine) { + g_engine->errorString(buf_input, buf_output); + } else { + strcpy(buf_output, buf_input); + } + +#ifdef __GP32__ //ph0x FIXME? + printf("ERROR: %s\n", buf_output); +#else + fprintf(stderr, "%s!\n", buf_output); +#endif + +#if defined( USE_WINDBG ) + OutputDebugString(buf_output); +#endif + +#if defined ( _WIN32_WCE ) + drawError(buf_output); +#endif + + // Finally exit. quit() will terminate the program if g_system iss present + if (g_system) + g_system->quit(); + + exit(1); +} + void CDECL warning(const char *s, ...) { char buf[1024]; va_list va; diff --git a/common/engine.h b/common/engine.h index 45b62e2169..3bf5f0b167 100644 --- a/common/engine.h +++ b/common/engine.h @@ -59,8 +59,13 @@ public: // Create a new engine object based on the detector - either // a Scumm or a SimonState object currently. static Engine *createFromDetector(GameDetector *detector, OSystem *syst); + + // Specific for each engine preparare of erroe string + virtual void errorString(const char *buf_input, char *buf_output) = 0; }; +extern Engine *g_engine; + #if defined(__GNUC__) void CDECL error(const char *s, ...) NORETURN; #else |