--- /dev/null
+#include <windows.h>\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+\r
+static char ** argvToAnsi( wchar_t ** wargv, int argc )\r
+{\r
+ char ** argv = malloc( sizeof( *argv ) * argc );\r
+ for ( int i = 0; i != argc; ++i ) {\r
+ int sz = WideCharToMultiByte( CP_ACP, WC_COMPOSITECHECK | WC_SEPCHARS,\r
+ wargv[i], -1, NULL, 0, NULL, NULL );\r
+ if(!(argv[i] = malloc(sz))) {\r
+ fputs("Error in C runtime initialization: "\r
+ "unable to allocate buffer for argument", stderr);\r
+ abort();\r
+ }\r
+\r
+ int rv = WideCharToMultiByte( CP_ACP, WC_COMPOSITECHECK | WC_SEPCHARS,\r
+ wargv[i], -1, argv[i], sz, NULL, NULL );\r
+\r
+ if(rv != sz) {\r
+ fputs("Error in C runtime initialization: "\r
+ "size mismatch during character set conversion", stderr);\r
+ }\r
+ }\r
+ return argv;\r
+}\r
+\r
+static int argc;\r
+static wchar_t * cl;\r
+static wchar_t ** wargv;\r
+static char ** argv;\r
+\r
+static void freeArgs( void )\r
+{\r
+ for(int i = 0; i != argc; i++) {\r
+ free( argv[i] );\r
+ }\r
+ free( argv );\r
+ LocalFree( wargv );\r
+}\r
+\r
+extern int main( int argc, char ** argv, char ** envp );\r
+_PDCLIB_noreturn void mainCRTStartup( void ) \r
+{\r
+ stdin->handle = GetStdHandle(STD_INPUT_HANDLE);\r
+ stdout->handle = GetStdHandle(STD_OUTPUT_HANDLE);\r
+ stderr->handle = GetStdHandle(STD_ERROR_HANDLE);\r
+\r
+ cl = GetCommandLineW();\r
+ wargv = CommandLineToArgvW(cl, &argc);\r
+ argv = argvToAnsi(wargv, argc);\r
+ atexit(freeArgs);\r
+\r
+ int exitStatus = main(argc, argv, NULL);\r
+ exit(exitStatus);\r
+}\r