0.9.9.11:
[sbcl.git] / src / runtime / runtime.c
index cb6fcb0..bcbe86e 100644 (file)
 
 #include <stdio.h>
 #include <string.h>
+#ifndef LISP_FEATURE_WIN32
 #include <libgen.h>
+#endif
 #include <sys/types.h>
+#ifndef LISP_FEATURE_WIN32
 #include <sys/wait.h>
+#endif
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/file.h>
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <signal.h>
+#ifndef LISP_FEATURE_WIN32
 #include <sched.h>
+#endif
 #include <errno.h>
 #include <locale.h>
 
@@ -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;
 }