X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.c;h=bcbe86ea3fc0e2dc4881b42ca580f7f574360b79;hb=e9a993b24fefb6ca1f4a8c40a5063053a01090af;hp=cb6fcb0e97e209bfa4f6993a1fb0789786dc16ce;hpb=2c6105acde389717317e725854d7dd3b3d6ece5c;p=sbcl.git diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index cb6fcb0..bcbe86e 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -17,16 +17,22 @@ #include #include +#ifndef LISP_FEATURE_WIN32 #include +#endif #include +#ifndef LISP_FEATURE_WIN32 #include +#endif #include #include #include #include #include #include +#ifndef LISP_FEATURE_WIN32 #include +#endif #include #include @@ -93,7 +99,7 @@ successful_malloc(size_t size) { void* result = malloc(size); if (0 == result) { - lose("malloc failure"); + lose("malloc failure\n"); } else { return result; } @@ -180,6 +186,11 @@ distribution for more information.\n\ int main(int argc, char *argv[], char *envp[]) { +#ifdef LISP_FEATURE_WIN32 + /* Exception handling support structure. Evil Win32 hack. */ + struct lisp_exception_frame exception_frame; +#endif + /* the name of the core file we're to execute. Note that this is * a malloc'ed string which should be freed eventually. */ char *core = 0; @@ -215,11 +226,11 @@ main(int argc, char *argv[], char *envp[]) ++argi; } else if (0 == strcmp(arg, "--core")) { if (core) { - lose("more than one core file specified"); + lose("more than one core file specified\n"); } else { ++argi; if (argi >= argc) { - lose("missing filename for --core argument"); + lose("missing filename for --core argument\n"); } core = copied_string(argv[argi]); ++argi; @@ -265,7 +276,7 @@ main(int argc, char *argv[], char *envp[]) * error. */ if (!end_runtime_options && 0 == strcmp(arg, "--end-runtime-options")) { - lose("bad runtime option \"%s\"", argi0); + lose("bad runtime option \"%s\"\n", argi0); } sbcl_argv[argj++] = arg; } @@ -287,7 +298,7 @@ main(int argc, char *argv[], char *envp[]) core = copied_existing_filename_or_null(lookhere); free(lookhere); if (!core) { - lose("can't find core file"); + lose("can't find core file\n"); } } /* Make sure that SBCL_HOME is set, no matter where the core was @@ -324,7 +335,7 @@ main(int argc, char *argv[], char *envp[]) initial_function = load_core_file(core); if (initial_function == NIL) { - lose("couldn't find initial function"); + lose("couldn't find initial function\n"); } SHOW("freeing core"); free(core); @@ -332,15 +343,28 @@ main(int argc, char *argv[], char *envp[]) gc_initialize_pointers(); arch_install_interrupt_handlers(); +#ifndef LISP_FEATURE_WIN32 os_install_interrupt_handlers(); +#else +/* wos_install_interrupt_handlers(handler); */ + wos_install_interrupt_handlers(&exception_frame); +#endif /* Convert remaining argv values to something that Lisp can grok. */ SHOW("setting POSIX-ARGV symbol value"); SetSymbolValue(POSIX_ARGV, alloc_base_string_list(sbcl_argv),0); free(sbcl_argv); - FSHOW((stderr, "/funcalling initial_function=0x%lx\n", initial_function)); + FSHOW((stderr, "/funcalling initial_function=0x%lx\n", + (unsigned long)initial_function)); +#ifdef LISP_FEATURE_WIN32 + fprintf(stderr, "\n\ +This is experimental prerelease support for the Windows platform: use\n\ +at your own risk. \"Your Kitten of Death awaits!\"\n"); + fflush(stdout); + fflush(stderr); +#endif create_initial_thread(initial_function); - lose("CATS. CATS ARE NICE."); + lose("CATS. CATS ARE NICE.\n"); return 0; }