From 9d734764931af86eb7ed695cf34b89c66994576e Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Tue, 21 Sep 2004 08:57:42 +0000 Subject: [PATCH] add WinMain. I'm not sure if this is needed for the Xbox; if it is, remove the #ifdefs. --- stepmania/src/archutils/Win32/arch_setup.cpp | 57 ++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/stepmania/src/archutils/Win32/arch_setup.cpp b/stepmania/src/archutils/Win32/arch_setup.cpp index 88a3f52d7d..5ce210821e 100644 --- a/stepmania/src/archutils/Win32/arch_setup.cpp +++ b/stepmania/src/archutils/Win32/arch_setup.cpp @@ -5,6 +5,7 @@ #ifdef _WINDOWS # include #endif +#include "StepMania.h" struct tm *my_localtime_r( const time_t *timep, struct tm *result ) { @@ -29,6 +30,62 @@ void my_usleep( unsigned long usec ) Sleep( usec/1000 ); } +#if defined(WINDOWS) +/* Ugh. Windows doesn't give us the argv[] parser; all it gives is CommandLineToArgvW, + * which is NT-only, so we have to do this ourself. Don't be fancy; only handle double + * quotes. */ +int GetWin32CmdLine( char** &argv ) +{ + char *pCmdLine = GetCommandLine(); + int argc = 0; + argv = NULL; + + int i = 0; + while( pCmdLine[i] ) + { + argv = (char **) realloc( argv, (argc+1) * sizeof(char *) ); + argv[argc] = pCmdLine+i; + ++argc; + + /* Skip to the end of this argument. */ + while( pCmdLine[i] && pCmdLine[i] != ' ' ) + { + if( pCmdLine[i] == '"' ) + { + /* Erase the quote. */ + memmove( pCmdLine+i, pCmdLine+i+1, strlen(pCmdLine+i+1)+1 ); + + /* Skip to the close quote. */ + while( pCmdLine[i] && pCmdLine[i] != '"' ) + ++i; + + /* Erase the close quote. */ + if( pCmdLine[i] == '"' ) + memmove( pCmdLine+i, pCmdLine+i+1, strlen(pCmdLine+i+1)+1 ); + } + else + ++i; + } + + if( pCmdLine[i] == ' ' ) + { + pCmdLine[i] = '\0'; + ++i; + } + } + + return argc; +} + +int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, char *pCmdLine, int nCmdShow ) +{ + char **argv; + int argc = GetWin32CmdLine( argv ); + + return main( argc, argv ); +} +#endif + /* * (c) 2004 Glenn Maynard * All rights reserved.