Cleaned up CreateSystemTimer interface for use with 32-bit callbacks.
(NOTE: 16-bit callbacks still don't work!)
diff --git a/misc/system.c b/misc/system.c
index b9588fc..b29a62d 100644
--- a/misc/system.c
+++ b/misc/system.c
@@ -12,18 +12,15 @@
#include <sys/types.h>
#include <sys/wait.h>
-#include "callback.h"
#include "windows.h"
-#include "miscemu.h"
-#include "dosexe.h"
-#include "vga.h"
#include "selectors.h"
#include "sig_context.h"
+#include "miscemu.h"
#include "debug.h"
typedef struct
{
- FARPROC16 callback; /* NULL if not in use */
+ SYSTEMTIMERPROC callback; /* NULL if not in use */
INT32 rate;
INT32 ticks;
} SYSTEM_TIMER;
@@ -35,14 +32,9 @@
static int SYS_NbTimers = 0;
static BOOL32 SYS_TimersDisabled = FALSE;
+
/***********************************************************************
* SYSTEM_TimerTick
- * FIXME: It is a very bad idea to call 16bit code in a signal handler:
- * If the signal reached us in 16 bit code, we could have a broken
- * %FS, which is in turned saved into the single global
- * CALLTO16_Current_fs temporary storage, so a single misplaced
- * signal crashes the whole WINE process.
- * This needs more thought. -MM
*/
static HANDLER_DEF(SYSTEM_TimerTick)
{
@@ -55,17 +47,7 @@
if ((SYS_Timers[i].ticks -= SYS_TIMER_RATE) <= 0)
{
SYS_Timers[i].ticks += SYS_Timers[i].rate;
-
- if (SYS_Timers[i].callback == (FARPROC16)DOSMEM_Tick) {
- DOSMEM_Tick();
- } else
- if (SYS_Timers[i].callback == (FARPROC16)MZ_Tick) {
- MZ_Tick(i+1);
- } else
- if (SYS_Timers[i].callback == (FARPROC16)VGA_Poll) {
- VGA_Poll();
- } else
- Callbacks->CallSystemTimerProc( SYS_Timers[i].callback );
+ SYS_Timers[i].callback( i+1 );
}
}
}
@@ -146,20 +128,9 @@
/***********************************************************************
* CreateSystemTimer (SYSTEM.2)
*/
-WORD WINAPI CreateSystemTimer( WORD rate, FARPROC16 callback )
+WORD WINAPI CreateSystemTimer( WORD rate, SYSTEMTIMERPROC callback )
{
int i;
-
- /* FIXME: HACK: do not create system timers due to problems mentioned
- * above, except DOSMEM_Tick(), MZ_Tick(), and VGA_Poll().
- */
- if ((callback!=(FARPROC16)DOSMEM_Tick)&&
- (callback!=(FARPROC16)MZ_Tick)&&
- (callback!=(FARPROC16)VGA_Poll)) {
- FIXME(system,"are currently broken, returning 0.\n");
- return 0;
- }
-
for (i = 0; i < NB_SYS_TIMERS; i++)
if (!SYS_Timers[i].callback) /* Found one */
{