~ chicken-core (chicken-5) 7d4ad3f1044661505532eb16f624e52265716506


commit 7d4ad3f1044661505532eb16f624e52265716506
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Mon Feb 8 12:31:55 2010 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Mon Feb 8 12:31:55 2010 +0100

    removed libchickengui, libchicken handles distinction at runtime; added -gui to csc and deprecated -W/-windows

diff --git a/Makefile.cross-linux-mingw b/Makefile.cross-linux-mingw
index 459671ba..950fe5d7 100644
--- a/Makefile.cross-linux-mingw
+++ b/Makefile.cross-linux-mingw
@@ -60,18 +60,14 @@ C_COMPILER_OPTIMIZATION_OPTIONS ?= -Os -fomit-frame-pointer
 endif
 endif
 C_COMPILER_SHARED_OPTIONS = -DPIC
-C_COMPILER_GUI_RUNTIME_OPTIONS = -DC_WINDOWS_GUI
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared
 LIBRARIES = -lm -lws2_32
 LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libchicken.dll.a
 LIBUCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libuchicken.dll.a
-LIBCHICKENGUI_SO_LINKER_OPTIONS = -Wl,--out-implib,libchickengui.dll.a
 LIBCHICKEN_SO_LIBRARIES = -lws2_32 
 LIBUCHICKEN_SO_LIBRARIES = -lws2_32 
-LIBCHICKENGUI_SO_LIBRARIES = -lkernel32 -luser32 -lgdi32 -lws2_32 
 LIBCHICKEN_IMPORT_LIBRARY = libchicken.dll.a
 LIBUCHICKEN_IMPORT_LIBRARY = libuchicken.dll.a
-LIBCHICKENGUI_IMPORT_LIBRARY = libchickengui.dll.a
 TARGET_C_COMPILER = gcc
 TARGET_CXX_COMPILER = g++
 
@@ -90,13 +86,13 @@ ifndef BUILD_SETUP_TOOLS
 TARGETS = libchicken$(A) libuchicken$(A) $(CHICKEN_PROGRAM)$(EXE) $(CSI_PROGRAM)$(EXE) \
 	$(CHICKEN_PROFILE_PROGRAM)$(EXE) $(CSC_PROGRAM)$(EXE) libchicken$(SO) \
 	libuchicken$(SO) \
-	libchickengui$(SO) $(CHICKEN_BUG_PROGRAM)$(EXE)
+	$(CHICKEN_BUG_PROGRAM)$(EXE)
 else
 TARGETS = libchicken$(A) libuchicken$(A) $(CHICKEN_PROGRAM)$(EXE) $(CSI_PROGRAM)$(EXE) \
 	$(CHICKEN_PROFILE_PROGRAM)$(EXE) $(CSC_PROGRAM)$(EXE) libchicken$(SO) \
 	libuchicken$(SO) $(CHICKEN_INSTALL_PROGRAM)$(EXE) $(CHICKEN_UNINSTALL_PROGRAM)$(EXE) \
 	$(CHICKEN_STATUS_PROGRAM)$(EXE) \
-	libchickengui$(SO) $(CHICKEN_BUG_PROGRAM)$(EXE)
+	$(CHICKEN_BUG_PROGRAM)$(EXE)
 endif
 
 chicken-config.h: chicken-defaults.h
diff --git a/Makefile.mingw b/Makefile.mingw
index eb9ec70d..a1b11c51 100644
--- a/Makefile.mingw
+++ b/Makefile.mingw
@@ -66,17 +66,13 @@ C_COMPILER_OPTIMIZATION_OPTIONS ?= -Os
 endif
 endif
 C_COMPILER_SHARED_OPTIONS = -DPIC
-C_COMPILER_GUI_RUNTIME_OPTIONS = -DC_WINDOWS_GUI
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared
 LIBRARIES = -lm -lws2_32
 LINKER_OPTIONS = -Wl,--enable-auto-import
 LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libchicken.dll.a
 LIBUCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libuchicken.dll.a
-LIBCHICKENGUI_SO_LINKER_OPTIONS = -Wl,--out-implib,libchickengui.dll.a
 LIBCHICKEN_SO_LIBRARIES = -lm -lws2_32 
 LIBUCHICKEN_SO_LIBRARIES = -lm -lws2_32 
-LIBCHICKENGUI_SO_LIBRARIES = -lm -lkernel32 -luser32 -lgdi32 -lws2_32 
-LIBCHICKENGUI_IMPORT_LIBRARY = libchickengui.dll.a
 LIBCHICKEN_IMPORT_LIBRARY = libchicken.dll.a
 LIBUCHICKEN_IMPORT_LIBRARY = libuchicken.dll.a
 MAKEDIR_COMMAND_OPTIONS =
@@ -90,7 +86,6 @@ POSIXFILE = posixwin
 # select default and internal settings
 
 CUSTOM_CHICKEN_DEFAULTS=1
-TARGETS = libchickengui$(SO) libchickengui$(A)
 
 include $(SRCDIR)defaults.make
 
diff --git a/Makefile.mingw-msys b/Makefile.mingw-msys
index 3d06e908..02be4a34 100644
--- a/Makefile.mingw-msys
+++ b/Makefile.mingw-msys
@@ -56,17 +56,13 @@ C_COMPILER_OPTIMIZATION_OPTIONS ?= -Os
 endif
 endif
 C_COMPILER_SHARED_OPTIONS = -DPIC
-C_COMPILER_GUI_RUNTIME_OPTIONS = -DC_WINDOWS_GUI
 LINKER_OPTIONS = -Wl,--enable-auto-import
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared
 LIBRARIES = -lm -lws2_32
 LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libchicken.dll.a
 LIBUCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libuchicken.dll.a
-LIBCHICKENGUI_SO_LINKER_OPTIONS = -Wl,--out-implib,libchickengui.dll.a
 LIBCHICKEN_SO_LIBRARIES = -lm -lws2_32 
 LIBUCHICKEN_SO_LIBRARIES = -lm -lws2_32 
-LIBCHICKENGUI_SO_LIBRARIES = -lm -lkernel32 -luser32 -lgdi32 -lws2_32 
-LIBCHICKENGUI_IMPORT_LIBRARY = libchickengui.dll.a
 LIBCHICKEN_IMPORT_LIBRARY = libchicken.dll.a
 LIBUCHICKEN_IMPORT_LIBRARY = libuchicken.dll.a
 
@@ -78,8 +74,6 @@ POSIXFILE = posixwin
 
 # select default and internal settings
 
-TARGETS = libchickengui$(SO) libchickengui$(A)
-
 include $(SRCDIR)/defaults.make
 
 chicken-config.h: chicken-defaults.h
diff --git a/c-backend.scm b/c-backend.scm
index 5d575dbc..17c15e3e 100644
--- a/c-backend.scm
+++ b/c-backend.scm
@@ -551,7 +551,6 @@
 		      (gen "C_noret_decl(C_" uname ")" #t)
 		      (when emit-unsafe-marker
 			(gen "C_externexport void C_dynamic_and_unsafe(void) {}" #t) )
-		      (gen "C_gui_nongui_marker" #t)
 		      (gen "C_externexport void C_ccall ")
 		      (gen "C_" uname) ) ] )
 	     (gen #\()
diff --git a/chicken.h b/chicken.h
index 571dbdfa..58a95eec 100644
--- a/chicken.h
+++ b/chicken.h
@@ -326,7 +326,6 @@ typedef unsigned __int64   uint64_t;
 /* Have a GUI? */
 
 #if defined(C_WINDOWS_GUI)
-# define C_MICROSOFT_WINDOWS
 # include <windows.h>
 # ifndef WINAPI
 #  define WINAPI
@@ -564,8 +563,6 @@ typedef unsigned __int64   uint64_t;
 #define C_RUNTIME_SAFE_DLOAD_UNSAFE_ERROR             34
 #define C_BAD_ARGUMENT_TYPE_NO_FLONUM_ERROR           35
 #define C_BAD_ARGUMENT_TYPE_NO_CLOSURE_ERROR          36
-#define C_RUNTIME_GUI_DLOAD_NONGUI_ERROR              37
-#define C_RUNTIME_NONGUI_DLOAD_GUI_ERROR              38
 
 
 /* Platform information */
@@ -1305,24 +1302,25 @@ extern double trunc(double);
 
 #define C_end_of_main
 
+/* left for backwards-compatibility */
+#define C_gui_nongui_marker
+
 #if !defined(C_EMBEDDED) && !defined(C_SHARED)
 # ifndef C_WINDOWS_GUI
 #  define C_main_entry_point            int main(int argc, char *argv[]) { return CHICKEN_main(argc, argv, (void*)C_toplevel); } C_end_of_main
 # else
 #  define C_main_entry_point            \
   int WINAPI WinMain(HINSTANCE me, HINSTANCE you, LPSTR cmdline, int show) \
-  { return CHICKEN_main(0, NULL, (void *)C_toplevel); } C_end_of_main
+  { \
+    C_gui_mode = 1; \
+    return CHICKEN_main(0, NULL, (void *)C_toplevel); \
+  } \
+  C_end_of_main
 # endif
 #else
 # define C_main_entry_point
 #endif
 
-#if defined(C_SHARED) && defined(C_WINDOWS_GUI)
-# define C_gui_nongui_marker            C_externexport void C_dynamic_and_gui(void) {}
-#else
-# define C_gui_nongui_marker
-#endif
-
 #define C_alloc_flonum                  C_word *___tmpflonum = C_alloc(WORDS_PER_FLONUM)
 #define C_kontinue_flonum(k, n)         C_kontinue((k), C_flonum(&___tmpflonum, (n)))
 
@@ -1371,6 +1369,7 @@ C_varextern C_TLS C_byte
 C_varextern C_TLS jmp_buf C_restart;
 C_varextern C_TLS void *C_restart_address;
 C_varextern C_TLS int C_entry_point_status;
+C_varextern C_TLS int C_gui_mode;
 
 C_varextern C_TLS void (C_fcall *C_restart_trampoline)(void *proc) C_regparm C_noret;
 C_varextern C_TLS void (*C_pre_gc_hook)(int mode);
diff --git a/csc.scm b/csc.scm
index 49430d7d..51c73299 100644
--- a/csc.scm
+++ b/csc.scm
@@ -118,11 +118,6 @@
    (if msvc "libuchicken-static." "libuchicken.")
    library-extension))
 
-(define default-gui-library
-  (string-append
-   (if msvc "libchickengui-static." "libchickengui.")
-   library-extension))
-
 (define cleanup-filename quotewrap)
 
 (define default-compilation-optimization-options (string-split (if host-mode INSTALL_CFLAGS TARGET_CFLAGS)))
@@ -212,19 +207,6 @@
       (list (string-append "libchicken." library-extension))
       '("-lchicken")))
 
-(define default-gui-library-files 
-  (list
-   (quotewrap
-    (prefix default-gui-library "lib"
-	    (string-append
-	     (if host-mode INSTALL_LIB_HOME TARGET_LIB_HOME)
-	     (string-append "/" default-library)))) ))
-
-(define default-gui-shared-library-files 
-  (if msvc
-      (list (string-append "libchickengui." library-extension))
-      '("-lchickengui")))
-
 (define unsafe-libraries #f)
 
 (define unsafe-library-files
@@ -245,8 +227,6 @@
   (set! library-files unsafe-library-files)
   (set! shared-library-files unsafe-shared-library-files))
 
-(define gui-library-files default-gui-library-files)
-(define gui-shared-library-files default-gui-shared-library-files)
 (define library-files default-library-files)
 (define shared-library-files default-shared-library-files)
 
@@ -297,7 +277,6 @@
 (define static-libs #f)
 (define static-extensions '())
 (define required-extensions '())
-(define gui #f)
 
 
 ;;; Display usage information:
@@ -425,7 +404,7 @@ Usage: ~a FILENAME | OPTION ...
 
     -e  -embedded                  compile as embedded
                                     (don't generate `main()')
-    -W  -windows                   compile as Windows GUI application
+    -gui                           compile as GUI application
     -R  -require-extension NAME    require extension and import in compiled
                                     code
     -dll -library                  compile multiple units into a dynamic
@@ -638,19 +617,19 @@ EOF
 		(set! static-extensions (append static-extensions (list (car rest))))
 		(t-options "-static-extension" (car rest))
 		(set! rest (cdr rest)) ]
-	       [(-windows |-W|)
+	       [(-gui
+		 -windows |-W|)		;DEPRECATED
 		(when (or msvc mingw)
-		(set! gui #t)
-		(cond
-                 (mingw
-		  (set! link-options
-		    (cons* "-lkernel32" "-luser32" "-lgdi32" "-mwindows"
-			   link-options))
-		  (set! compile-options (cons "-DC_WINDOWS_GUI" compile-options)))
-                 (msvc
-                  (set! link-options
-                    (cons* "kernel32.lib" "user32.lib" "gdi32.lib" link-options))
-		  (set! compile-options (cons "-DC_WINDOWS_GUI" compile-options)))) ) ]
+		  (cond
+		   (mingw
+		    (set! link-options
+		      (cons* "-lkernel32" "-luser32" "-lgdi32" "-mwindows"
+			     link-options))
+		    (set! compile-options (cons "-DC_WINDOWS_GUI" compile-options)))
+		   (msvc
+		    (set! link-options
+		      (cons* "kernel32.lib" "user32.lib" "gdi32.lib" link-options))
+		    (set! compile-options (cons "-DC_WINDOWS_GUI" compile-options)))) ) ]
 	       [(-framework)
 		(check s rest)
 		(when osx 
@@ -912,8 +891,8 @@ EOF
    (append
     (if staticexts (nth-value 0 (static-extension-info)) '())
     (if (or static static-libs)
-        (if gui gui-library-files library-files)
-        (if gui gui-shared-library-files shared-library-files))
+        library-files
+        shared-library-files)
     (if (or static static-libs)
         (list extra-libraries)
         (list extra-shared-libraries)))))
diff --git a/defaults.make b/defaults.make
index 0ba7e4e8..3f5fc952 100644
--- a/defaults.make
+++ b/defaults.make
@@ -212,17 +212,14 @@ ifeq ($(PLATFORM),cygwin)
 PRIMARY_LIBCHICKEN = cygchicken-0.dll
 LIBCHICKEN_SO_FILE = cygchicken-0.dll
 LIBUCHICKEN_SO_FILE = cyguchicken-0.dll
-LIBCHICKENGUI_SO_FILE ?= 
 else
 PRIMARY_LIBCHICKEN ?= libchicken$(SO)
 LIBCHICKEN_SO_FILE ?= libchicken$(SO)
 LIBUCHICKEN_SO_FILE ?= libuchicken$(SO)
-LIBCHICKENGUI_SO_FILE ?= 
 endif
 endif
 LIBCHICKEN_SO_LIBRARIES ?= $(LIBRARIES)
 LIBUCHICKEN_SO_LIBRARIES ?= $(LIBRARIES)
-LIBCHICKENGUI_SO_LIBRARIES ?= $(LIBRARIES)
 
 # cross settings
 
diff --git a/library.scm b/library.scm
index bbb52983..fe823d0b 100644
--- a/library.scm
+++ b/library.scm
@@ -3846,12 +3846,6 @@ EOF
 		     args) )
 	((35) (apply ##sys#signal-hook #:type-error loc "bad argument type - not a flonum" args))
 	((36) (apply ##sys#signal-hook #:type-error loc "bad argument type - not a procedure" args))
-	((37) (apply ##sys#signal-hook #:runtime-error loc
-		     "code to load dynamically was linked with non-GUI runtime libraries, but executing runtime was not"
-		     args) )
-	((38) (apply ##sys#signal-hook #:runtime-error loc
-		     "code to load dynamically was linked with GUI runtime libraries, but executing runtime was not"
-		     args) )
 	(else (apply ##sys#signal-hook #:runtime-error loc "unknown internal error" args)) ) ) ) )
 
 
diff --git a/rules.make b/rules.make
index 3f39cc41..9ec63d8f 100644
--- a/rules.make
+++ b/rules.make
@@ -42,13 +42,6 @@ LIBUCHICKEN_OBJECTS_1 = \
 LIBUCHICKEN_SHARED_OBJECTS = $(LIBUCHICKEN_OBJECTS_1:=$(O))
 LIBUCHICKEN_STATIC_OBJECTS = $(LIBUCHICKEN_OBJECTS_1:=-static$(O))
 
-LIBCHICKENGUI_OBJECTS_1 = \
-       library eval data-structures ports files extras lolevel utils tcp srfi-1 srfi-4 srfi-13 \
-       srfi-14 srfi-18 srfi-69 $(POSIXFILE) regex scheduler \
-       profiler stub expand chicken-syntax gui-runtime
-LIBCHICKENGUI_SHARED_OBJECTS = $(LIBCHICKENGUI_OBJECTS_1:=$(O))
-LIBCHICKENGUI_STATIC_OBJECTS = $(LIBCHICKENGUI_OBJECTS_1:=-static$(O))
-
 COMPILER_OBJECTS_1 = \
        chicken batch-driver compiler optimizer compiler-syntax scrutinizer unboxing support \
        c-platform c-backend
@@ -62,11 +55,6 @@ runtime$(O): runtime.c chicken.h $(CHICKEN_CONFIG_H)
 	$(C_COMPILER) $(C_COMPILER_OPTIONS) $(INCLUDES) \
 	  $(C_COMPILER_COMPILE_OPTION) $(C_COMPILER_OPTIMIZATION_OPTIONS) $(C_COMPILER_SHARED_OPTIONS) \
 	  $(C_COMPILER_BUILD_RUNTIME_OPTIONS) $< $(C_COMPILER_OUTPUT)
-gui-runtime$(O): runtime.c chicken.h $(CHICKEN_CONFIG_H)
-	$(C_COMPILER) $(C_COMPILER_OPTIONS) $(INCLUDES) \
-	  $(C_COMPILER_COMPILE_OPTION) $(C_COMPILER_OPTIMIZATION_OPTIONS) $(C_COMPILER_SHARED_OPTIONS) \
-	  $(C_COMPILER_BUILD_RUNTIME_OPTIONS) $(C_COMPILER_GUI_RUNTIME_OPTIONS) $< \
-	  $(C_COMPILER_OUTPUT)
 eval$(O): eval.c chicken.h $(CHICKEN_CONFIG_H)
 	$(C_COMPILER) $(C_COMPILER_OPTIONS) $(INCLUDES) \
 	  $(C_COMPILER_COMPILE_OPTION) $(C_COMPILER_OPTIMIZATION_OPTIONS) $(C_COMPILER_SHARED_OPTIONS) \
@@ -242,12 +230,6 @@ runtime-static$(O): runtime.c chicken.h $(CHICKEN_CONFIG_H)
 	  $(C_COMPILER_COMPILE_OPTION) $(C_COMPILER_OPTIMIZATION_OPTIONS) \
 	  $(C_COMPILER_STATIC_OPTIONS) \
 	  $(C_COMPILER_BUILD_RUNTIME_OPTIONS) $< $(C_COMPILER_OUTPUT)
-gui-runtime-static$(O): runtime.c chicken.h $(CHICKEN_CONFIG_H)
-	$(C_COMPILER) $(C_COMPILER_OPTIONS) $(INCLUDES) \
-	  $(C_COMPILER_COMPILE_OPTION) $(C_COMPILER_OPTIMIZATION_OPTIONS) \
-	  $(C_COMPILER_STATIC_OPTIONS) \
-	  $(C_COMPILER_BUILD_RUNTIME_OPTIONS) $(C_COMPILER_GUI_RUNTIME_OPTIONS) $< \
-	  $(C_COMPILER_OUTPUT)
 eval-static$(O): eval.c chicken.h $(CHICKEN_CONFIG_H)
 	$(C_COMPILER) $(C_COMPILER_OPTIONS) $(INCLUDES) \
 	  $(C_COMPILER_STATIC_OPTIONS) \
@@ -727,19 +709,12 @@ cyguchicken-0.dll: $(LIBUCHICKEN_SHARED_OBJECTS) $(APPLY_HACK_OBJECT)
 	    -Wl,--no-whole-archive $(LIBUCHICKEN_SO_LIBRARIES)
 
 
-libchickengui$(SO): $(APPLY_HACK_OBJECT) $(LIBCHICKENGUI_SHARED_OBJECTS)
-	$(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_LIBRARY_OPTIONS) $(LIBCHICKENGUI_SO_LINKER_OPTIONS) \
-	$(LINKER_OUTPUT) $^ $(LIBCHICKENGUI_SO_LIBRARIES)
-
 libchicken$(A): $(APPLY_HACK_OBJECT) $(LIBCHICKEN_STATIC_OBJECTS)
 	$(LIBRARIAN) $(LIBRARIAN_OPTIONS) $(LIBRARIAN_OUTPUT) $^
 
 libuchicken$(A): $(APPLY_HACK_OBJECT) $(LIBUCHICKEN_STATIC_OBJECTS)
 	$(LIBRARIAN) $(LIBRARIAN_OPTIONS) $(LIBRARIAN_OUTPUT) $^
 
-libchickengui$(A): $(APPLY_HACK_OBJECT) $(LIBCHICKENGUI_STATIC_OBJECTS)
-	$(LIBRARIAN) $(LIBRARIAN_OPTIONS) $(LIBRARIAN_OUTPUT) $^
-
 # import libraries and extensions
 
 .SUFFIXES: .so
@@ -800,10 +775,6 @@ install-libs:
 ifneq ($(LIBCHICKEN_IMPORT_LIBRARY),) 
 	$(INSTALL_PROGRAM) $(INSTALL_PROGRAM_STATIC_LIBRARY_OPTIONS) $(LIBCHICKEN_IMPORT_LIBRARY) "$(DESTDIR)$(ILIBDIR)"
 	$(INSTALL_PROGRAM) $(INSTALL_PROGRAM_STATIC_LIBRARY_OPTIONS) $(LIBUCHICKEN_IMPORT_LIBRARY) "$(DESTDIR)$(ILIBDIR)"
-ifdef WINDOWS
-	-$(INSTALL_PROGRAM) $(INSTALL_PROGRAM_STATIC_LIBRARY_OPTIONS) libchickengui$(A) "$(DESTDIR)$(ILIBDIR)"
-	$(INSTALL_PROGRAM) $(INSTALL_PROGRAM_STATIC_LIBRARY_OPTIONS) $(LIBCHICKENGUI_IMPORT_LIBRARY) "$(DESTDIR)$(ILIBDIR)"
-endif
 endif
 ifneq ($(POSTINSTALL_STATIC_LIBRARY),true)
 	$(POSTINSTALL_STATIC_LIBRARY) $(POSTINSTALL_STATIC_LIBRARY_FLAGS) \
@@ -823,9 +794,6 @@ else
 	$(INSTALL_PROGRAM) $(INSTALL_PROGRAM_SHARED_LIBRARY_OPTIONS) $(LIBUCHICKEN_SO_FILE) \
 	  "$(DESTDIR)$(ILIBDIR)$(SEP)$(LIBUCHICKEN_SO_FILE)$(SONAME_VERSION)"
 endif
-ifdef WINDOWS
-	$(INSTALL_PROGRAM) $(INSTALL_PROGRAM_SHARED_LIBRARY_OPTIONS) libchickengui$(SO) "$(DESTDIR)$(IBINDIR)"
-endif
 ifdef USES_SONAME
 	cd "$(DESTDIR)$(ILIBDIR)" && ln -sf $(LIBCHICKEN_SO_FILE).$(BINARYVERSION) libchicken$(SO)
 	cd "$(DESTDIR)$(ILIBDIR)" && ln -sf $(LIBUCHICKEN_SO_FILE).$(BINARYVERSION) libuchicken$(SO)
@@ -1016,11 +984,8 @@ endif
 ifdef WINDOWS
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(IBINDIR)$(SEP)libchicken$(SO)"
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(IBINDIR)$(SEP)libuchicken$(SO)"
-	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(IBINDIR)$(SEP)libchickengui$(SO)"
-	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)libchickengui$(A)"
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)$(LIBCHICKEN_IMPORT_LIBRARY)"
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)$(LIBUCHICKEN_IMPORT_LIBRARY)"
-	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)$(LIBCHICKENGUI_IMPORT_LIBRARY)"
 endif
 ifdef ($(PLATFORM),cygwin)
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(IBINDIR)$(SEP)cygchicken*" "$(DESTDIR)$(IBINDIR)$(SEP)cyguchicken*"
@@ -1255,22 +1220,16 @@ html:
 
 .PHONY: clean distclean spotless confclean testclean
 
-ifeq ($(PLATFORM),mingw)
-CLEAN_MINGW_LIBS = libchickengui.a libchickengui.dll libchickengui.dll.a
-else
-CLEAN_MINGW_LIBS =
-endif
-
 clean:
 	-$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) chicken$(EXE) csi$(EXE) csc$(EXE) \
 	  chicken-profile$(EXE) csi-static$(EXE) \
 	  chicken-install$(EXE) chicken-uninstall$(EXE) chicken-status$(EXE) \
 	  csc-static$(EXE) chicken-static$(EXE) chicken-bug$(EXE) *$(O) \
-	  $(LIBCHICKEN_SO_FILE) $(LIBUCHICKEN_SO_FILE) $(LIBCHICKENGUI_SO_FILE) \
-	  libchicken$(A) libuchicken$(A) libchickengui$(A) libchicken$(SO) $(PROGRAM_IMPORT_LIBRARIES) \
+	  $(LIBCHICKEN_SO_FILE) $(LIBUCHICKEN_SO_FILE) \
+	  libchicken$(A) libuchicken$(A) libchicken$(SO) $(PROGRAM_IMPORT_LIBRARIES) \
 	  $(IMPORT_LIBRARIES:=.import.so) $(LIBCHICKEN_IMPORT_LIBRARY) $(LIBUCHICKEN_IMPORT_LIBRARY) \
-	  $(LIBCHICKENGUI_IMPORT_LIBRARY) setup-api.so setup-api.import.scm setup-download.so \
-	  setup-download.import.scm $(CLEAN_MINGW_LIBS)
+	  setup-api.so setup-api.import.scm setup-download.so \
+	  setup-download.import.scm
 ifdef USES_SONAME
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) libchicken.so.$(BINARYVERSION)
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) libuchicken.so.$(BINARYVERSION)
diff --git a/runtime.c b/runtime.c
index 31fdae64..39f31da7 100644
--- a/runtime.c
+++ b/runtime.c
@@ -336,6 +336,7 @@ C_TLS void (*C_post_gc_hook)(int mode, long ms) = NULL;
 C_TLS void (C_fcall *C_restart_trampoline)(void *proc) C_regparm C_noret;
 
 C_TLS int
+  C_gui_mode = 0,
   C_abort_on_thread_exceptions,
   C_enable_repl,
   C_interrupts_enabled,
@@ -354,7 +355,6 @@ C_TLS C_uword
   C_heap_shrinkage;
 C_TLS C_uword C_maximal_heap_size;
 C_TLS time_t C_startup_time_seconds;
-
 C_TLS char 
   **C_main_argv,
   *C_dlerror;
@@ -515,11 +515,15 @@ int CHICKEN_main(int argc, char *argv[], void *toplevel)
 {
   C_word h, s, n;
 
-#if defined(C_WINDOWS_GUI)
-  parse_argv(GetCommandLine());
-  argc = C_main_argc;
-  argv = C_main_argv;
+  if(C_gui_mode) {
+#ifdef _WIN32
+    parse_argv(GetCommandLine());
+    argc = C_main_argc;
+    argv = C_main_argv;
+#else
+    /* ??? */
 #endif
+  }
 
   CHICKEN_parse_command_line(argc, argv, &h, &s, &n);
   
@@ -533,7 +537,6 @@ int CHICKEN_main(int argc, char *argv[], void *toplevel)
 
 /* Custom argv parser for Windoze: */
 
-#ifdef C_WINDOWS_GUI
 void parse_argv(C_char *cmds)
 {
   C_char *ptr = cmds,
@@ -565,7 +568,6 @@ void parse_argv(C_char *cmds)
     C_main_argv[ C_main_argc++ ] = aptr;
   }
 }
-#endif
 
 
 /* Initialize runtime system: */
@@ -1342,16 +1344,16 @@ void usual_panic(C_char *msg)
 
   C_dbg_hook(C_SCHEME_UNDEFINED);
 
-#ifdef C_MICROSOFT_WINDOWS
-  C_sprintf(buffer, C_text("%s\n\n%s"), msg, dmp);
+  if(C_gui_mode) {
+    C_sprintf(buffer, C_text("%s\n\n%s"), msg, dmp);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+    MessageBox(NULL, buffer, C_text("CHICKEN runtime"), MB_OK | MB_ICONERROR);
+    ExitProcess(1);
+#endif
+  } /* fall through if not WIN32 GUI app */
 
-  MessageBox(NULL, buffer, C_text("CHICKEN runtime"), MB_OK);
-  ExitProcess(1);
-#else
   C_fprintf(C_stderr, C_text("\n%s - execution terminated\n\n%s"), msg, dmp);
-  
   C_exit(1);
-#endif
 }
 
 
@@ -1359,16 +1361,16 @@ void horror(C_char *msg)
 {
   C_dbg_hook(C_SCHEME_UNDEFINED);
 
-#ifdef C_MICROSOFT_WINDOWS
-  C_sprintf(buffer, C_text("%s"), msg);
+  if(C_gui_mode) {
+    C_sprintf(buffer, C_text("%s"), msg);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+    MessageBox(NULL, buffer, C_text("CHICKEN runtime"), MB_OK | MB_ICONERROR);
+    ExitProcess(1);
+#endif
+  } /* fall through */
 
-  MessageBox(NULL, buffer, C_text("CHICKEN runtime"), MB_OK);
-  ExitProcess(1);
-#else
-  C_fprintf(C_stderr, C_text("\n%s - execution terminated"), msg);
-  
+  C_fprintf(C_stderr, C_text("\n%s - execution terminated"), msg);  
   C_exit(1);
-#endif
 }
 
 
@@ -1560,16 +1562,6 @@ void barf(int code, char *loc, ...)
     c = 0;
     break;
 
-  case C_RUNTIME_GUI_DLOAD_NONGUI_ERROR:
-    msg = C_text("code to load dynamically was linked with non-GUI runtime libraries, but executing runtime was not");
-    c = 0;
-    break;
-
-  case C_RUNTIME_NONGUI_DLOAD_GUI_ERROR:
-    msg = C_text("code to load dynamically was linked with GUI runtime libraries, but executing runtime was not");
-    c = 0;
-    break;
-
   case C_BAD_ARGUMENT_TYPE_NO_FLONUM_ERROR:
     msg = C_text("bad argument type - not a flonum");
     c = 1;
@@ -3743,30 +3735,33 @@ C_word C_halt(C_word msg)
 {
   C_char *dmp = msg != C_SCHEME_FALSE ? C_dump_trace(0) : NULL;
 
-#ifdef C_MICROSOFT_WINDOWS
-  if(msg != C_SCHEME_FALSE) {
-    int n = C_header_size(msg);
+  if(C_gui_mode) {
+    if(msg != C_SCHEME_FALSE) {
+      int n = C_header_size(msg);
+      
+      if (n >= sizeof(buffer))
+	n = sizeof(buffer) - 1;
+      C_strncpy(buffer, (C_char *)C_data_pointer(msg), n);
+      buffer[ n ] = '\0';
+    }
+    else C_strcpy(buffer, C_text("(aborted)"));
 
-    if (n >= sizeof(buffer))
-      n = sizeof(buffer) - 1;
-    C_strncpy(buffer, (C_char *)C_data_pointer(msg), n);
-    buffer[ n ] = '\0';
-  }
-  else C_strcpy(buffer, C_text("(aborted)"));
+    C_strcat(buffer, C_text("\n\n"));
 
-  C_strcat(buffer, C_text("\n\n"));
+    if(dmp != NULL) C_strcat(buffer, dmp);
 
-  if(dmp != NULL) C_strcat(buffer, dmp);
+#if defined(_WIN32) && !defined(__CYGWIN__) 
+    MessageBox(NULL, buffer, C_text("CHICKEN runtime"), MB_OK | MB_ICONERROR);
+    ExitProcess(1);
+#endif
+  } /* otherwise fall through */
 
-  MessageBox(NULL, buffer, C_text("CHICKEN runtime"), MB_OK);
-#else
   if(msg != C_SCHEME_FALSE) {
     C_fwrite(C_data_pointer(msg), C_header_size(msg), sizeof(C_char), C_stderr);
     C_fputc('\n', C_stderr);
   }
 
   if(dmp != NULL) C_fprintf(stderr, C_text("\n%s"), dmp);
-#endif
   
   C_exit(EX_SOFTWARE);
   return 0;
@@ -3775,18 +3770,21 @@ C_word C_halt(C_word msg)
 
 C_word C_message(C_word msg)
 {
-#ifdef C_MICROSOFT_WINDOWS
-  int n = C_header_size(msg);
+  if(C_gui_mode) {
+    int n = C_header_size(msg);
+    
+    if (n >= sizeof(buffer))
+      n = sizeof(buffer) - 1;
+    C_strncpy(buffer, (C_char *)((C_SCHEME_BLOCK *)msg)->data, n);
+    buffer[ n ] = '\0';
+#if defined(_WIN32) && !defined(__CYGWIN__)
+    MessageBox(NULL, buffer, C_text("CHICKEN runtime"), MB_OK | MB_ICONERROR);
+    ExitProcess(1);
+#endif
+  } /* fall through */
 
-  if (n >= sizeof(buffer))
-    n = sizeof(buffer) - 1;
-  C_strncpy(buffer, (C_char *)((C_SCHEME_BLOCK *)msg)->data, n);
-  buffer[ n ] = '\0';
-  MessageBox(NULL, buffer, C_text("CHICKEN runtime"), MB_OK);
-#else
   C_fwrite(((C_SCHEME_BLOCK *)msg)->data, C_header_size(msg), sizeof(C_char), stdout);
   C_putchar('\n');
-#endif
   return C_SCHEME_UNDEFINED;
 }
 
@@ -3989,21 +3987,19 @@ C_regparm C_word C_fcall C_fudge(C_word fudge_factor)
     return C_SCHEME_FALSE;
 #endif
 
-  case C_fix(4):
-#ifdef C_GENERIC_CONSOLE
-    return C_SCHEME_TRUE;
+  case C_fix(4):		/* is this a console application? */
+    return C_mk_bool(!C_gui_mode);
+
+  case C_fix(5):		/* is this a GUI/console or Windows-GUI application? (silly) */
+    if(C_gui_mode) {
+#ifdef _WIN32
+      return C_fix(1);
 #else
-    return C_SCHEME_FALSE;
+      return C_SCHEME_FALSE;
 #endif
+    }
 
-  case C_fix(5):
-#ifdef C_GENERIC_CONSOLE
     return C_fix(0);
-#elif defined(C_WINDOWS_GUI)
-    return C_fix(1);
-#else
-    return C_SCHEME_FALSE;
-#endif
 
   case C_fix(6): 
     return C_fix(C_MOST_POSITIVE_FIXNUM & cpu_milliseconds());
@@ -8013,8 +8009,7 @@ void dload_2(void *dummy)
     }
 
     if(p != NULL) {
-      /* check whether dloaded code is not a library unit
-       * and matches current safety/gui setting: */
+      /* check whether dloaded code is not a library unit */
       if((p2 = C_dlsym(handle, C_text("C_dynamic_and_unsafe"))) == NULL)
 	p2 = C_dlsym(handle, C_text("_C_dynamic_and_unsafe"));
 
@@ -8109,23 +8104,6 @@ void dload_2(void *dummy)
 #endif
       }
 
-      /* do the same check for GUI libraries: */
-      p2 = GetProcAddress(handle, C_text("C_dynamic_and_gui"));
-
-#ifdef C_WINDOWS_GUI
-      ok = p2 != NULL;		/* GUI runtime, GUI code */
-#else
-      ok = p2 == NULL;		/* non-GUI runtime, non-GUI code */
-#endif
-      
-      /* GUI marker not found and this is not a library unit? */
-      if(!ok && !C_strcmp(topname, "C_toplevel"))
-#ifdef C_WINDOWS_GUI
-	barf(C_RUNTIME_GUI_DLOAD_NONGUI_ERROR, NULL);
-#else
-	barf(C_RUNTIME_NONGUI_DLOAD_GUI_ERROR, NULL);
-#endif
-
       current_module_name = C_strdup(mname);
       current_module_handle = handle;
 
Trap