diff options
Diffstat (limited to 'backends')
-rw-r--r-- | backends/sdl/sdl.cpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/backends/sdl/sdl.cpp b/backends/sdl/sdl.cpp index b1da08c60e..fe617991e7 100644 --- a/backends/sdl/sdl.cpp +++ b/backends/sdl/sdl.cpp @@ -32,9 +32,69 @@ #include "scummvm.xpm" +#if defined(WIN32) && defined(NO_CONSOLE) +#include <cstdio> +#define STDOUT_FILE TEXT("stdout.txt") +#define STDERR_FILE TEXT("stderr.txt") +#endif + + +#if !defined(_WIN32_WCE) && !defined(__MAEMO__) -#if !defined(_WIN32_WCE) && !defined(__SYMBIAN32__) && !defined(__MAEMO__) int main(int argc, char *argv[]) { + + +#if (defined(WIN32) && defined(NO_CONSOLE)) || defined(__SYMBIAN32__) + // + // Set up redirects for stdout/stderr under Windows and Symbian. + // Code copied from SDL_main. + // + + // Symbian does not like any output to the console through any *print* function +#if defined(__SYMBIAN32__) + char STDOUT_FILE[256], STDERR_FILE[256]; // shhh, don't tell anybody :) + strcpy(STDOUT_FILE, Symbian::GetExecutablePath()); + strcpy(STDERR_FILE, Symbian::GetExecutablePath()); + strcat(STDOUT_FILE, "scummvm.stdout.txt"); + strcat(STDERR_FILE, "scummvm.stderr.txt"); +#endif + + /* Flush the output in case anything is queued */ + fclose(stdout); + fclose(stderr); + + /* Redirect standard input and standard output */ + FILE *newfp = freopen(STDOUT_FILE, "w", stdout); + if (newfp == NULL) { /* This happens on NT */ +#if !defined(stdout) + stdout = fopen(STDOUT_FILE, "w"); +#else + newfp = fopen(STDOUT_FILE, "w"); + if (newfp) { + *stdout = *newfp; + } +#endif + } + newfp = freopen(STDERR_FILE, "w", stderr); + if (newfp == NULL) { /* This happens on NT */ +#if !defined(stderr) + stderr = fopen(STDERR_FILE, "w"); +#else + newfp = fopen(STDERR_FILE, "w"); + if (newfp) { + *stderr = *newfp; + } +#endif + } +#ifndef __SYMBIAN32__ // fcn not supported on Symbian + setlinebuf(stdout); /* Line buffered */ +#endif + setbuf(stderr, NULL); /* No buffering */ + +#endif // (defined(WIN32) && defined(NO_CONSOLE)) || defined(__SYMBIAN32__) + + + // Invoke the actual ScummVM main entry point: return scummvm_main(argc, argv); } #endif |