diff --git a/racket/src/mzcom/mzcom.cxx b/racket/src/mzcom/mzcom.cxx index 5af768524c..3f54c643d2 100644 --- a/racket/src/mzcom/mzcom.cxx +++ b/racket/src/mzcom/mzcom.cxx @@ -97,6 +97,11 @@ LPCTSTR FindOneOf(LPCTSTR p1, LPCTSTR p2) int IsFlag(LPCTSTR cmd, LPCTSTR flag) { + if ((*cmd == '-') || (*cmd == '/')) + cmd++; + else + return 0; + while (*flag) { if (toupper(*cmd) != toupper(*flag)) return 0; @@ -111,6 +116,10 @@ int IsFlag(LPCTSTR cmd, LPCTSTR flag) #define DLL_RELATIVE_PATH L"." #include "../racket/delayed.inc" +#define ASSUME_ASCII_COMMAND_LINE +#define GC_CAN_IGNORE +#include "../racket/parse_cmdl.inc" + ///////////////////////////////////////////////////////////////////////////// // extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, @@ -135,13 +144,18 @@ extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, _ASSERTE(SUCCEEDED(hRes)); _Module.Init(ObjectMap, hInstance, &LIBID_MZCOMLib); _Module.dwThreadID = GetCurrentThreadId(); - TCHAR szTokens[] = _T("-/"); + + int argc, i; + char **argv, *normalized_path; + + argv = cmdline_to_argv(&argc, &normalized_path); int nRet = 0, verbose = 0; BOOL bRun = TRUE; - LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens); - while (lpszToken != NULL) + LPCTSTR lpszToken; + for (i = 1; i < argc; i++) { + lpszToken = argv[i]; if (IsFlag(lpszToken, _T("UnregServer"))) { if (!nRet) { @@ -185,7 +199,6 @@ extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, bRun = FALSE; break; } - lpszToken = FindOneOf(lpszToken, szTokens); } if (bRun) diff --git a/racket/src/mzcom/mzobj.cxx b/racket/src/mzcom/mzobj.cxx index c3460f0c93..c85fd1172e 100644 --- a/racket/src/mzcom/mzobj.cxx +++ b/racket/src/mzcom/mzobj.cxx @@ -157,6 +157,7 @@ void setupSchemeEnv(Scheme_Env *in_env) scheme_add_global("mzcom-exe",scheme_make_utf8_string(exeBuff),env); scheme_set_exec_cmd(exeBuff); scheme_set_collects_path(scheme_make_path("../collects")); + scheme_set_config_path(scheme_make_path("../etc")); scheme_init_collection_paths(env, scheme_make_null()); // initialize namespace @@ -309,6 +310,7 @@ static unsigned WINAPI evalLoop(void *args) XFORM_SKIP_PROC { scheme_register_tls_space(&tls_space, 0); #endif scheme_set_atexit(record_at_exit); + return scheme_main_setup(1, do_evalLoop, 0, (char **)args); } diff --git a/racket/src/racket/parse_cmdl.inc b/racket/src/racket/parse_cmdl.inc index ef535a3d4f..7fa693117b 100644 --- a/racket/src/racket/parse_cmdl.inc +++ b/racket/src/racket/parse_cmdl.inc @@ -1,5 +1,6 @@ /* Windows command-line parsing */ +#ifndef ASSUME_ASCII_COMMAND_LINE static char *wchar_to_char(wchar_t *wa, int len) { char *a; @@ -16,6 +17,7 @@ static char *wchar_to_char(wchar_t *wa, int len) return a; } +#endif static int parse_command_line(char ***_command, char *buf) { @@ -80,18 +82,25 @@ static int parse_command_line(char ***_command, char *buf) static char **cmdline_to_argv(int *_argc, char **_normalized_path) { +#ifndef ASSUME_ASCII_COMMAND_LINE LPWSTR m_lpCmdLine; - int j, argc, l; + int j, l; +#endif + int argc; char *a, **argv, *normalized_path; - +#ifdef ASSUME_ASCII_COMMAND_LINE + a = GetCommandLine(); +#else m_lpCmdLine = GetCommandLineW(); for (j = 0; m_lpCmdLine[j]; j++) { } a = wchar_to_char(m_lpCmdLine, j); +#endif argc = parse_command_line(&argv, a); +#ifndef ASSUME_ASCII_COMMAND_LINE /* argv[0] should be the name of the executable, but Windows doesn't specify really where this name comes from, so we get it from GetModuleFileName, just in case */ @@ -119,6 +128,9 @@ static char **cmdline_to_argv(int *_argc, char **_normalized_path) } } } +#else + normalized_path = "?"; +#endif *_argc = argc; if (_normalized_path)