Mercurial > sdl-ios-xcode
diff src/main/win32/SDL_win32_main.c @ 1718:ed4d4f1ea201 SDL-1.3
Further progress on the new Windows video driver:
* SDL_SetModuleHandle() is obsolete, I hope.
* SDL 1.3 uses the UNICODE API
* I'm ignoring Windows CE for the moment, we'll reevaluate what needs to be different for Windows CE later.
* Pulled the stdio redirection from WinMain()
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 27 Jun 2006 07:46:36 +0000 |
parents | 4da1ee79c9af |
children |
line wrap: on
line diff
--- a/src/main/win32/SDL_win32_main.c Tue Jun 27 04:59:10 2006 +0000 +++ b/src/main/win32/SDL_win32_main.c Tue Jun 27 07:46:36 2006 +0000 @@ -10,20 +10,6 @@ #define WIN32_LEAN_AND_MEAN #include <windows.h> -#ifdef _WIN32_WCE -# define DIR_SEPERATOR TEXT("\\") -# undef _getcwd -# define _getcwd(str,len) wcscpy(str,TEXT("")) -# define setbuf(f,b) -# define setvbuf(w,x,y,z) -# define fopen _wfopen -# define freopen _wfreopen -# define remove(x) DeleteFile(x) -#else -# define DIR_SEPERATOR TEXT("/") -# include <direct.h> -#endif - /* Include the SDL main definition header */ #include "SDL.h" #include "SDL_main.h" @@ -34,20 +20,6 @@ # endif /* _WIN32_WCE_EMULATION */ #endif /* main */ -/* The standard output files */ -#define STDOUT_FILE TEXT("stdout.txt") -#define STDERR_FILE TEXT("stderr.txt") - -#ifndef NO_STDIO_REDIRECT -# ifdef _WIN32_WCE -static wchar_t stdoutPath[MAX_PATH]; -static wchar_t stderrPath[MAX_PATH]; -# else -static char stdoutPath[MAX_PATH]; -static char stderrPath[MAX_PATH]; -# endif -#endif - #if defined(_WIN32_WCE) && _WIN32_WCE < 300 /* seems to be undefined in Win CE although in online help */ #define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t')) @@ -124,52 +96,6 @@ return FALSE; } -/* SDL_Quit() shouldn't be used with atexit() directly because - calling conventions may differ... */ -static void -cleanup(void) -{ - SDL_Quit(); -} - -/* Remove the output files if there was no output written */ -static void -cleanup_output(void) -{ -#ifndef NO_STDIO_REDIRECT - FILE *file; - int empty; -#endif - - /* Flush the output in case anything is queued */ - fclose(stdout); - fclose(stderr); - -#ifndef NO_STDIO_REDIRECT - /* See if the files have any output in them */ - if (stdoutPath[0]) { - file = fopen(stdoutPath, TEXT("rb")); - if (file) { - empty = (fgetc(file) == EOF) ? 1 : 0; - fclose(file); - if (empty) { - remove(stdoutPath); - } - } - } - if (stderrPath[0]) { - file = fopen(stderrPath, TEXT("rb")); - if (file) { - empty = (fgetc(file) == EOF) ? 1 : 0; - fclose(file); - if (empty) { - remove(stderrPath); - } - } - } -#endif -} - #if defined(_MSC_VER) && !defined(_WIN32_WCE) /* The VC++ compiler needs main defined */ #define console_main main @@ -179,45 +105,8 @@ int console_main(int argc, char *argv[]) { - size_t n; - char *bufp, *appname; int status; - /* Get the class name from argv[0] */ - appname = argv[0]; - if ((bufp = SDL_strrchr(argv[0], '\\')) != NULL) { - appname = bufp + 1; - } else if ((bufp = SDL_strrchr(argv[0], '/')) != NULL) { - appname = bufp + 1; - } - - if ((bufp = SDL_strrchr(appname, '.')) == NULL) - n = SDL_strlen(appname); - else - n = (bufp - appname); - - bufp = SDL_stack_alloc(char, n + 1); - if (bufp == NULL) { - return OutOfMemory(); - } - SDL_strlcpy(bufp, appname, n + 1); - appname = bufp; - - /* Load SDL dynamic link library */ - if (SDL_Init(SDL_INIT_NOPARACHUTE) < 0) { - ShowError("WinMain() error", SDL_GetError()); - return (FALSE); - } - atexit(cleanup_output); - atexit(cleanup); - - /* Sam: - We still need to pass in the application handle so that - DirectInput will initialize properly when SDL_RegisterApp() - is called later in the video initialization. - */ - SDL_SetModuleHandle(GetModuleHandle(NULL)); - /* Run the application main() code */ status = SDL_main(argc, argv); @@ -229,24 +118,12 @@ } /* This is where execution begins [windowed apps] */ -#ifdef _WIN32_WCE int WINAPI -WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPWSTR szCmdLine, int sw) -#else -int WINAPI -WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) -#endif +WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR szCmdLine, int sw) { - HINSTANCE handle; char **argv; int argc; char *cmdline; - DWORD pathlen; -#ifdef _WIN32_WCE - wchar_t path[MAX_PATH]; -#else - char path[MAX_PATH]; -#endif #ifdef _WIN32_WCE wchar_t *bufp; int nLen; @@ -254,76 +131,6 @@ char *bufp; size_t nLen; #endif -#ifndef NO_STDIO_REDIRECT - FILE *newfp; -#endif - - /* Start up DDHELP.EXE before opening any files, so DDHELP doesn't - keep them open. This is a hack.. hopefully it will be fixed - someday. DDHELP.EXE starts up the first time DDRAW.DLL is loaded. - */ - handle = LoadLibrary(TEXT("DDRAW.DLL")); - if (handle != NULL) { - FreeLibrary(handle); - } -#ifndef NO_STDIO_REDIRECT - pathlen = GetModuleFileName(NULL, path, SDL_arraysize(path)); - while (pathlen > 0 && path[pathlen] != '\\') { - --pathlen; - } - path[pathlen] = '\0'; - -#ifdef _WIN32_WCE - wcsncpy(stdoutPath, path, SDL_arraysize(stdoutPath)); - wcsncat(stdoutPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath)); -#else - SDL_strlcpy(stdoutPath, path, SDL_arraysize(stdoutPath)); - SDL_strlcat(stdoutPath, DIR_SEPERATOR STDOUT_FILE, - SDL_arraysize(stdoutPath)); -#endif - - /* Redirect standard input and standard output */ - newfp = freopen(stdoutPath, TEXT("w"), stdout); - -#ifndef _WIN32_WCE - if (newfp == NULL) { /* This happens on NT */ -#if !defined(stdout) - stdout = fopen(stdoutPath, TEXT("w")); -#else - newfp = fopen(stdoutPath, TEXT("w")); - if (newfp) { - *stdout = *newfp; - } -#endif - } -#endif /* _WIN32_WCE */ - -#ifdef _WIN32_WCE - wcsncpy(stderrPath, path, SDL_arraysize(stdoutPath)); - wcsncat(stderrPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath)); -#else - SDL_strlcpy(stderrPath, path, SDL_arraysize(stderrPath)); - SDL_strlcat(stderrPath, DIR_SEPERATOR STDERR_FILE, - SDL_arraysize(stderrPath)); -#endif - - newfp = freopen(stderrPath, TEXT("w"), stderr); -#ifndef _WIN32_WCE - if (newfp == NULL) { /* This happens on NT */ -#if !defined(stderr) - stderr = fopen(stderrPath, TEXT("w")); -#else - newfp = fopen(stderrPath, TEXT("w")); - if (newfp) { - *stderr = *newfp; - } -#endif - } -#endif /* _WIN32_WCE */ - - setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* Line buffered */ - setbuf(stderr, NULL); /* No buffering */ -#endif /* !NO_STDIO_REDIRECT */ #ifdef _WIN32_WCE nLen = wcslen(szCmdLine) + 128 + 1; @@ -357,7 +164,7 @@ } ParseCommandLine(cmdline, argv); - /* Run the main program (after a little SDL initialization) */ + /* Run the main program */ console_main(argc, argv); /* Hush little compiler, don't you cry... */