Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
f6c4828c
Commit
f6c4828c
authored
Dec 10, 1998
by
Ulrich Weigand
Committed by
Alexandre Julliard
Dec 10, 1998
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleaned up CreateSystemTimer interface for use with 32-bit callbacks.
(NOTE: 16-bit callbacks still don't work!)
parent
40097ccf
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
45 additions
and
47 deletions
+45
-47
system.spec
if1632/system.spec
+1
-1
thunk.c
if1632/thunk.c
+36
-1
callback.h
include/callback.h
+0
-1
windows.h
include/windows.h
+3
-1
callback.c
misc/callback.c
+0
-9
system.c
misc/system.c
+5
-34
No files found.
if1632/system.spec
View file @
f6c4828c
...
...
@@ -2,7 +2,7 @@ name system
type win16
1 pascal InquireSystem(word word) InquireSystem
2 pascal16 CreateSystemTimer(word segptr) CreateSystemTimer
2 pascal16 CreateSystemTimer(word segptr)
WIN16_
CreateSystemTimer
3 pascal16 KillSystemTimer(word) SYSTEM_KillSystemTimer
4 pascal16 EnableSystemTimers() EnableSystemTimers
5 pascal16 DisableSystemTimers() DisableSystemTimers
...
...
if1632/thunk.c
View file @
f6c4828c
...
...
@@ -157,7 +157,6 @@ static const CALLBACKS_TABLE CALLBACK_EmulatorTable =
(
void
*
)
CallTo16_word_ww
,
/* CallBootAppProc */
(
void
*
)
CallTo16_word_www
,
/* CallLoadAppSegProc */
(
void
*
)
CallTo16_word_www
,
/* CallLocalNotifyFunc */
(
void
*
)
CallTo16_word_
,
/* CallSystemTimerProc */
(
void
*
)
CallTo16_word_www
,
/* CallResourceHandlerProc */
(
void
*
)
CallTo16_word_wwwl
,
/* CallPostAppMessageProc */
(
void
*
)
CallTo16_long_l
,
/* CallWOWCallbackProc */
...
...
@@ -815,6 +814,42 @@ void WINAPI WIN16_keybd_event( CONTEXT *context )
}
/***********************************************************************
* WIN16_CreateSystemTimer (SYSTEM.2)
*/
static
void
CALLBACK
THUNK_CallSystemTimerProc
(
FARPROC16
proc
,
WORD
timer
)
{
CONTEXT
context
;
memset
(
&
context
,
'\0'
,
sizeof
(
context
)
);
CS_reg
(
&
context
)
=
SELECTOROF
(
proc
);
IP_reg
(
&
context
)
=
OFFSETOF
(
proc
);
BP_reg
(
&
context
)
=
OFFSETOF
(
THREAD_Current
()
->
cur_stack
)
+
(
WORD
)
&
((
STACK16FRAME
*
)
0
)
->
bp
;
AX_reg
(
&
context
)
=
timer
;
CallTo16_sreg_
(
&
context
,
0
);
/* FIXME: This does not work if the signal occurs while some thread
is currently in 16-bit code. With the current structure
of the Wine thunking code, this seems to be hard to fix ... */
}
WORD
WINAPI
WIN16_CreateSystemTimer
(
WORD
rate
,
FARPROC16
proc
)
{
THUNK
*
thunk
=
THUNK_Alloc
(
proc
,
(
RELAY
)
THUNK_CallSystemTimerProc
);
WORD
timer
=
0
;
#if 1
FIXME
(
system
,
"are currently broken, returning 0.
\n
"
);
#else
timer
=
CreateSystemTimer
(
rate
,
(
SYSTEMTIMERPROC
)
thunk
);
#endif
if
(
!
timer
)
THUNK_Free
(
thunk
);
return
timer
;
}
/***********************************************************************
* 16->32 Flat Thunk routines:
...
...
include/callback.h
View file @
f6c4828c
...
...
@@ -37,7 +37,6 @@ typedef struct
VOID
(
CALLBACK
*
CallBootAppProc
)(
FARPROC16
,
HANDLE16
,
HFILE16
);
WORD
(
CALLBACK
*
CallLoadAppSegProc
)(
FARPROC16
,
HANDLE16
,
HFILE16
,
WORD
);
WORD
(
CALLBACK
*
CallLocalNotifyFunc
)(
FARPROC16
,
WORD
,
HLOCAL16
,
WORD
);
VOID
(
CALLBACK
*
CallSystemTimerProc
)(
FARPROC16
);
HGLOBAL16
(
CALLBACK
*
CallResourceHandlerProc
)(
FARPROC16
,
HGLOBAL16
,
HMODULE16
,
HRSRC16
);
BOOL16
(
CALLBACK
*
CallPostAppMessageProc
)(
FARPROC16
,
HTASK16
,
UINT16
,
WPARAM16
,
LPARAM
);
DWORD
(
CALLBACK
*
CallWOWCallbackProc
)(
FARPROC16
,
DWORD
);
...
...
include/windows.h
View file @
f6c4828c
...
...
@@ -6585,6 +6585,8 @@ typedef const DLGITEMTEMPLATE *LPCDLGITEMTEMPLATE;
/* Declarations for functions that exist only in Win16 */
#ifdef __WINE__
typedef
VOID
(
*
SYSTEMTIMERPROC
)(
WORD
);
WORD
WINAPI
AllocCStoDSAlias
(
WORD
);
WORD
WINAPI
AllocDStoCSAlias
(
WORD
);
HGLOBAL16
WINAPI
AllocResource
(
HINSTANCE16
,
HRSRC16
,
DWORD
);
...
...
@@ -6595,7 +6597,7 @@ VOID WINAPI CascadeChildWindows(HWND16,WORD);
INT16
WINAPI
CloseComm
(
INT16
);
HGLOBAL16
WINAPI
CreateCursorIconIndirect
(
HINSTANCE16
,
CURSORICONINFO
*
,
LPCVOID
,
LPCVOID
);
WORD
WINAPI
CreateSystemTimer
(
WORD
,
FARPROC16
);
WORD
WINAPI
CreateSystemTimer
(
WORD
,
SYSTEMTIMERPROC
);
BOOL16
WINAPI
DCHook
(
HDC16
,
WORD
,
DWORD
,
LPARAM
);
VOID
WINAPI
DirectedYield
(
HTASK16
);
HGLOBAL16
WINAPI
DirectResAlloc
(
HINSTANCE16
,
WORD
,
UINT16
);
...
...
misc/callback.c
View file @
f6c4828c
...
...
@@ -121,14 +121,6 @@ static WORD WINAPI CALLBACK_CallLocalNotifyFunc( FARPROC16 proc,
/**********************************************************************
* CALLBACK_CallSystemTimerProc
*/
static
void
WINAPI
CALLBACK_CallSystemTimerProc
(
FARPROC16
proc
)
{
proc
();
}
/**********************************************************************
* CALLBACK_CallResourceHandlerProc
*/
static
HGLOBAL16
WINAPI
CALLBACK_CallResourceHandlerProc
(
FARPROC16
proc
,
...
...
@@ -274,7 +266,6 @@ static const CALLBACKS_TABLE CALLBACK_WinelibTable =
CALLBACK_CallBootAppProc
,
/* CallBootAppProc */
CALLBACK_CallLoadAppSegProc
,
/* CallLoadAppSegProc */
CALLBACK_CallLocalNotifyFunc
,
/* CallLocalNotifyFunc */
CALLBACK_CallSystemTimerProc
,
/* CallSystemTimerProc */
CALLBACK_CallResourceHandlerProc
,
/* CallResourceHandlerProc */
NULL
,
/* CallPostAppMessageProc */
CALLBACK_CallWOWCallbackProc
,
/* CallWOWCallbackProc */
...
...
misc/system.c
View file @
f6c4828c
...
...
@@ -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 SYSTEM_TIMER SYS_Timers[NB_SYS_TIMERS];
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 @@ static HANDLER_DEF(SYSTEM_TimerTick)
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 @@ DWORD WINAPI InquireSystem( WORD code, WORD arg )
/***********************************************************************
* 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 */
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment