Release 960405

Fri Apr  5 15:22:55 1996  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [controls/button.c] [controls/static.c]
	Changes to use WND * wherever possible.

	* [debugger/dbg.y] [debugger/debug.l]
	Added 'info module' and 'walk module' commands.

	* [if1632/Makefile.in] [if1632/relay.c] [tools/build.c]
	Added assembly code generation to call from Wine into 32-bit code.
	Changed all 'call32' references in 'callfrom16' to avoid confusion
	with Win32 routines.

	* [include/callback.h]
	Added prototypes for 32-bit callbacks.

	* [loader/module.c] [if1632/relay32.c] [tools/build.c]
	Unified 16- and 32-bit modules. The fake module for 32-bit DLLs is
	now generated by the build program.

	* [include/module.h]
	Added extra info to NE_MODULE for Win32 modules to point to the PE
	module data.

	* [include/pe_image.h] [loader/pe_image.c] [win32/resource.c]
	Removed the wine_files list. The PE data for a module can now be
	accessed with the NE_WIN32_MODULE macro.

	* [loader/signal.c] [miscemu/instr.c]
	Don't start the BIOS timer at startup, but only after an access to
	the 0x40 segment.

	* [memory/local.c]
	Changed LOCAL_Lock() to return a 32-bit pointer.

	* [misc/main.c] [include/dlls.h]
	Some built-in DLLs (like KERNEL) can no longer be disabled from
 	the command-line.
	
Thu Apr  4 19:54:39 1996  Keith Reynolds <keithr@sco.COM>

	* [*/*]
	A lot of small changes to support SCO OpenServer 5.

Thu Apr  4 15:38:13 1996  Frans van Dorsselaer <dorssel@rulhm1.leidenuniv.nl>

	* [controls/edit.c]
	Fixed GetKeyState() call to use 0x8000 convention.

	* [include/windows.h]
	Added undocumented messages EM_SCROLL and EM_GETTHUMB.

Thu Apr  4 09:52:52 1996  John Harvey <john@division.co.uk>

	* [if1632/except.S]
	Modified code to assemble on unixware.

Wed Apr  3 09:38:26 1996  Juergen Marquardt <marqu@lunar.advantest.de>

	* [objects/font.c]
	Implementation of a second font cache which will be updated
	dynamically.

Mon Apr  1 16:47:40 1996  Robert Pouliot <krynos@qbc.clic.net>

	* [resources/sysres_Cz.rc] [resources/sysres_Da.rc]
	  [resources/sysres_De.rc] [resources/sysres_Eo.rc]
	  [resources/sysres_Es.rc] [resources/sysres_Fi.rc]
	  [resources/sysres_No.rc] [resources/TODO]
	Updated FIND_TEXT and REPLACE_TEXT to work like the English version.
diff --git a/loader/signal.c b/loader/signal.c
index 8ebc0b6..d9b72ab 100644
--- a/loader/signal.c
+++ b/loader/signal.c
@@ -10,8 +10,10 @@
 #include <sys/time.h>
 #include <sys/timeb.h>
 
-#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__svr4__)
+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__svr4__) || defined(_SCO_DS)
+#ifndef _SCO_DS
 #include <sys/syscall.h>
+#endif
 #include <sys/param.h>
 #else
 #include <syscall.h>
@@ -76,7 +78,7 @@
 static void win_fault(int signal, struct sigcontext_struct context_struct)
 {
     struct sigcontext_struct *context = &context_struct;
-#elif defined(__svr4__)
+#elif defined(__svr4__) || defined(_SCO_DS)
 static void win_fault(int signal, void *siginfo, ucontext_t *context)
 {
 #else
@@ -128,7 +130,7 @@
 
 #ifdef linux
     sig_act.sa_handler = func;
-    sig_act.sa_flags = SA_RESTART;
+    sig_act.sa_flags = SA_RESTART | SA_NOMASK;
     /* Point to the top of the stack, minus 4 just in case, and make
        it aligned  */
     sig_act.sa_restorer = 
@@ -145,14 +147,14 @@
     ret = sigaction( sig, &sig_act, NULL );
 #endif  /* __FreeBSD__ || __NetBSD__ */
 
-#if defined (__svr4__)
+#if defined (__svr4__) || defined(_SCO_DS)
     sigset_t sig_mask;
     sigemptyset(&sig_mask);
     sig_act.sa_handler = func;
     sig_act.sa_flags = SA_ONSTACK | SA_SIGINFO;
     sig_act.sa_mask = sig_mask;
     ret = sigaction( sig, &sig_act, NULL );
-#endif  /* __svr4__ */
+#endif  /* __svr4__ || _SCO_DS */
 
     if (ret < 0)
     {
@@ -189,7 +191,7 @@
     }
 #endif  /* __FreeBSD__ || __NetBSD__ */
 
-#if defined (__svr4__)
+#if defined (__svr4__) || defined(_SCO_DS)
     struct sigaltstack ss;
         
     if ((ss.ss_sp = malloc(SIGSTKSZ) ) == NULL) {
@@ -203,7 +205,7 @@
         perror("sigstack");
         exit(1);
     }
-#endif  /* __svr4__ */
+#endif  /* __svr4__ || _SCO_DS */
     
     SIGNAL_SetHandler( SIGALRM, (void (*)())wine_timer );
     SIGNAL_SetHandler( SIGSEGV, (void (*)())win_fault );
@@ -217,19 +219,21 @@
 #ifdef CONFIG_IPC
     SIGNAL_SetHandler( SIGUSR2, (void (*)())stop_wait ); /* For IPC */
 #endif
-    SIGNAL_StartBIOSTimer();
 }
 
 
 /**********************************************************************
- *		SIGNAL_StartTimer
+ *		SIGNAL_StartBIOSTimer
  *
  * Start the BIOS tick timer.
  */
 void SIGNAL_StartBIOSTimer(void)
 {
     struct itimerval vt_timer;
+    static int timer_started = 0;
 
+    if (timer_started) return;
+    timer_started = 1;
     vt_timer.it_interval.tv_sec = 0;
     vt_timer.it_interval.tv_usec = 54929;
     vt_timer.it_value = vt_timer.it_interval;