Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
287638fd
Commit
287638fd
authored
Dec 27, 2000
by
Ove Kaaven
Committed by
Alexandre Julliard
Dec 27, 2000
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Since DOSVM_Wait() blocks the normal event processing, it should
dispatch pending events itself.
parent
d18140ce
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
17 additions
and
4 deletions
+17
-4
dosvm.c
dlls/winedos/dosvm.c
+17
-4
No files found.
dlls/winedos/dosvm.c
View file @
287638fd
...
@@ -68,6 +68,7 @@ typedef struct _DOSEVENT {
...
@@ -68,6 +68,7 @@ typedef struct _DOSEVENT {
static
struct
_DOSEVENT
*
pending_event
,
*
current_event
;
static
struct
_DOSEVENT
*
pending_event
,
*
current_event
;
static
int
sig_sent
,
entered
;
static
int
sig_sent
,
entered
;
static
CONTEXT86
*
current_context
;
/* from module.c */
/* from module.c */
extern
int
read_pipe
,
write_pipe
;
extern
int
read_pipe
,
write_pipe
;
...
@@ -267,7 +268,7 @@ void WINAPI DOSVM_QueueEvent( int irq, int priority, void (*relay)(CONTEXT86*,vo
...
@@ -267,7 +268,7 @@ void WINAPI DOSVM_QueueEvent( int irq, int priority, void (*relay)(CONTEXT86*,vo
static
int
DOSVM_Process
(
int
fn
,
int
sig
,
struct
vm86plus_struct
*
VM86
)
static
int
DOSVM_Process
(
int
fn
,
int
sig
,
struct
vm86plus_struct
*
VM86
)
{
{
CONTEXT86
context
;
CONTEXT86
context
,
*
old_context
;
int
ret
=
0
;
int
ret
=
0
;
#define CP(x,y) context.y = VM86->regs.x
#define CP(x,y) context.y = VM86->regs.x
...
@@ -292,6 +293,9 @@ static int DOSVM_Process( int fn, int sig, struct vm86plus_struct*VM86 )
...
@@ -292,6 +293,9 @@ static int DOSVM_Process( int fn, int sig, struct vm86plus_struct*VM86 )
}
}
#endif
#endif
old_context
=
current_context
;
current_context
=
&
context
;
switch
(
VM86_TYPE
(
fn
))
{
switch
(
VM86_TYPE
(
fn
))
{
case
VM86_SIGNAL
:
case
VM86_SIGNAL
:
TRACE_
(
int
)(
"DOS module caught signal %d
\n
"
,
sig
);
TRACE_
(
int
)(
"DOS module caught signal %d
\n
"
,
sig
);
...
@@ -343,6 +347,8 @@ static int DOSVM_Process( int fn, int sig, struct vm86plus_struct*VM86 )
...
@@ -343,6 +347,8 @@ static int DOSVM_Process( int fn, int sig, struct vm86plus_struct*VM86 )
ret
=-
1
;
ret
=-
1
;
}
}
current_context
=
old_context
;
#define CP(x,y) VM86->regs.x = context.y
#define CP(x,y) VM86->regs.x = context.y
CV
;
CV
;
#undef CP
#undef CP
...
@@ -430,6 +436,7 @@ void WINAPI DOSVM_Wait( int read_pipe, HANDLE hObject )
...
@@ -430,6 +436,7 @@ void WINAPI DOSVM_Wait( int read_pipe, HANDLE hObject )
got_msg
=
TRUE
;
got_msg
=
TRUE
;
}
}
}
}
chk_console_input:
if
(
!
got_msg
)
{
if
(
!
got_msg
)
{
/* check for console input */
/* check for console input */
INPUT_RECORD
msg
;
INPUT_RECORD
msg
;
...
@@ -440,6 +447,13 @@ void WINAPI DOSVM_Wait( int read_pipe, HANDLE hObject )
...
@@ -440,6 +447,13 @@ void WINAPI DOSVM_Wait( int read_pipe, HANDLE hObject )
}
}
}
}
if
(
read_pipe
==
-
1
)
{
if
(
read_pipe
==
-
1
)
{
/* dispatch pending events */
if
(
SHOULD_PEND
(
pending_event
))
{
CONTEXT86
context
=
*
current_context
;
IF_SET
(
&
context
);
SET_PEND
(
&
context
);
DOSVM_SendQueuedEvents
(
&
context
);
}
if
(
got_msg
)
break
;
if
(
got_msg
)
break
;
}
else
{
}
else
{
fd_set
readfds
;
fd_set
readfds
;
...
@@ -462,9 +476,8 @@ void WINAPI DOSVM_Wait( int read_pipe, HANDLE hObject )
...
@@ -462,9 +476,8 @@ void WINAPI DOSVM_Wait( int read_pipe, HANDLE hObject )
if
((
read_pipe
!=
-
1
)
&&
hObject
)
{
if
((
read_pipe
!=
-
1
)
&&
hObject
)
{
if
(
waitret
==
(
WAIT_OBJECT_0
+
1
))
break
;
if
(
waitret
==
(
WAIT_OBJECT_0
+
1
))
break
;
}
}
if
(
waitret
==
WAIT_OBJECT_0
)
{
if
(
waitret
==
WAIT_OBJECT_0
)
DOSVM_ProcessConsole
();
goto
chk_console_input
;
}
}
while
(
TRUE
);
}
while
(
TRUE
);
}
}
...
...
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