diff -burN clisp-2.38.org/src/makemake.in clisp-2.38/src/makemake.in
--- clisp-2.38.org/src/makemake.in	Mon Jan 23 21:07:27 2006
+++ clisp-2.38/src/makemake.in	Fri Jan 27 21:48:02 2006
@@ -1160,7 +1160,7 @@
     esac
   fi # DEBUGGING
   if [ $TSYS = win32gcc ] ; then
-    XCFLAGS=$XCFLAGS' -D_WIN32'
+    XCFLAGS=$XCFLAGS' -D_WIN32 -mwindows'
   fi
   if [ $TSYS = sun4 ] ; then
     XCLFLAGS='-static'
diff -burN clisp-2.38.org/src/spvw.d clisp-2.38/src/spvw.d
--- clisp-2.38.org/src/spvw.d	Fri Jan 13 19:17:02 2006
+++ clisp-2.38/src/spvw.d	Sat Jan 28 01:17:08 2006
@@ -3434,6 +3434,26 @@
 }
 
 #if defined(WIN32_NATIVE)
+
+/* declare non-unicode struct and function from tlhelp32.h */
+#define MAX_MODULE_NAME32	255
+#define TH32CS_SNAPMODULE	0x8
+typedef struct tagMODULEENTRY32 {
+	DWORD dwSize;
+	DWORD th32ModuleID;
+	DWORD th32ProcessID;
+	DWORD GlblcntUsage;
+	DWORD ProccntUsage;
+	BYTE *modBaseAddr;
+	DWORD modBaseSize;
+	HMODULE hModule;
+	char szModule[MAX_MODULE_NAME32 + 1];
+	char szExePath[MAX_PATH];
+} MODULEENTRY32,*PMODULEENTRY32,*LPMODULEENTRY32;
+HANDLE WINAPI CreateToolhelp32Snapshot(DWORD,DWORD);
+BOOL WINAPI Module32First(HANDLE,LPMODULEENTRY32);
+BOOL WINAPI Module32Next(HANDLE,LPMODULEENTRY32);
+
 /* #include <psapi.h> */
 /* support older woe32 incarnations:
    fEnumProcessModules is 1 until the first call,
@@ -3488,7 +3508,22 @@
       for (i=0; i < needed/sizeof(HMODULE); i++)
         if ((ret = (void*)GetProcAddress(modules[i],name)))
           break;
-    } else ret = NULL;
+    } else {
+      /* EnumProcessModules not available, maybe we are on Windows 98 */
+      HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0);
+      if (hSnapshot != INVALID_HANDLE_VALUE) {
+        MODULEENTRY32 moduleEntry;
+        moduleEntry.dwSize = sizeof(MODULEENTRY32);
+        if (Module32First(hSnapshot, &moduleEntry)) {
+          while (1) {
+            ret = (void*)GetProcAddress(moduleEntry.hModule, name);
+            if (ret) break;
+            if (!Module32Next(hSnapshot, &moduleEntry)) break;
+          }
+        }
+        CloseHandle(hSnapshot);
+      }
+    }
   } else ret = (void*)GetProcAddress((HMODULE)handle,name);
  #else
   ret = dlsym(handle,name);
diff -burN clisp-2.38.org/src/stream.d clisp-2.38/src/stream.d
--- clisp-2.38.org/src/stream.d	Thu Jan 12 21:52:14 2006
+++ clisp-2.38/src/stream.d	Fri Jan 27 21:48:02 2006
@@ -8876,7 +8876,7 @@
   # build Console-Handle:
   # Maybe use CREATE_ALWAYS ?? Maybe use AllocConsole() ??
   {
-    var Handle handle = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+    var Handle handle = GetStdHandle(STD_INPUT_HANDLE);
     if (handle==INVALID_HANDLE_VALUE) {
       OS_error();
     }
diff -burN clisp-2.38.org/src/win32aux.d clisp-2.38/src/win32aux.d
--- clisp-2.38.org/src/win32aux.d	Sun Jan  8 16:31:23 2006
+++ clisp-2.38/src/win32aux.d	Fri Jan 27 21:48:02 2006
@@ -49,9 +49,13 @@
 global void init_win32 (void)
 {
   /* Standard input/output handles. */
-  stdin_handle = GetStdHandle(STD_INPUT_HANDLE);
-  stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
-  stderr_handle = GetStdHandle(STD_ERROR_HANDLE);
+  stdin_handle = CreateFile("NUL", GENERIC_READ | GENERIC_WRITE,
+      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+  stdout_handle = stdin_handle;
+  stderr_handle = stdin_handle;
+  SetStdHandle(STD_INPUT_HANDLE, stdin_handle);
+  SetStdHandle(STD_OUTPUT_HANDLE, stdout_handle);
+  SetStdHandle(STD_ERROR_HANDLE, stderr_handle);
   /* What to do if one of these is == INVALID_HANDLE_VALUE ?? */
   /* Auxiliary events. */
   aux_event = CreateEvent(NULL, true, false, NULL);
