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
6b47f11d
Commit
6b47f11d
authored
Oct 27, 2003
by
Jukka Heinonen
Committed by
Alexandre Julliard
Oct 27, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Clean up mouse driver implementation.
parent
181a7cca
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
133 additions
and
83 deletions
+133
-83
int33.c
dlls/winedos/int33.c
+133
-83
No files found.
dlls/winedos/int33.c
View file @
6b47f11d
...
...
@@ -35,100 +35,150 @@ WINE_DEFAULT_DEBUG_CHANNEL(int);
static
struct
{
D
WORD
x
,
y
,
but
;
WORD
lbcount
,
rbcount
,
rlastx
,
rlasty
,
llastx
,
llasty
;
FARPROC16
callback
;
WORD
callmask
;
WORD
VMPratio
,
HMPratio
,
oldx
,
oldy
;
WORD
x
,
y
,
but
;
WORD
lbcount
,
rbcount
,
rlastx
,
rlasty
,
llastx
,
llasty
;
FARPROC16
callback
;
WORD
callmask
;
WORD
VMPratio
,
HMPratio
,
oldx
,
oldy
;
}
mouse_info
;
/**********************************************************************
*
DOSVM_Int33Handler (WINEDOS16.151)
*
INT33_ResetMouse
*
* Handler for int 33h (MS MOUSE).
* Handler for:
* - subfunction 0x00 (reset mouse)
* - subfunction 0x21 (software reset)
*/
void
WINAPI
DOSVM_Int33Handler
(
CONTEXT86
*
context
)
static
void
INT33_ResetMouse
(
CONTEXT86
*
context
)
{
switch
(
LOWORD
(
context
->
Eax
))
{
case
0x00
:
case
0x21
:
TRACE
(
"Reset mouse driver and request status
\n
"
);
SET_AX
(
context
,
0xFFFF
);
/* installed */
SET_BX
(
context
,
3
);
/* # of buttons */
memset
(
&
mouse_info
,
0
,
sizeof
(
mouse_info
)
);
/* Set the default mickey/pixel ratio */
mouse_info
.
HMPratio
=
8
;
mouse_info
.
VMPratio
=
16
;
break
;
case
0x01
:
FIXME
(
"Show mouse cursor
\n
"
);
break
;
case
0x02
:
FIXME
(
"Hide mouse cursor
\n
"
);
break
;
case
0x03
:
TRACE
(
"Return mouse position and button status: (%ld,%ld) and %ld
\n
"
,
mouse_info
.
x
,
mouse_info
.
y
,
mouse_info
.
but
);
SET_BX
(
context
,
mouse_info
.
but
);
SET_CX
(
context
,
mouse_info
.
x
);
SET_DX
(
context
,
mouse_info
.
y
);
break
;
case
0x04
:
FIXME
(
"Position mouse cursor
\n
"
);
break
;
case
0x05
:
TRACE
(
"Return Mouse button press Information for %s mouse button
\n
"
,
BX_reg
(
context
)
?
"right"
:
"left"
);
if
(
BX_reg
(
context
))
{
SET_BX
(
context
,
mouse_info
.
rbcount
);
mouse_info
.
rbcount
=
0
;
SET_CX
(
context
,
mouse_info
.
rlastx
);
SET_DX
(
context
,
mouse_info
.
rlasty
);
}
else
{
SET_BX
(
context
,
mouse_info
.
lbcount
);
mouse_info
.
lbcount
=
0
;
SET_CX
(
context
,
mouse_info
.
llastx
);
SET_DX
(
context
,
mouse_info
.
llasty
);
if
(
context
)
{
SET_AX
(
context
,
0xFFFF
);
/* driver installed */
SET_BX
(
context
,
3
);
/* number of buttons */
}
}
/**********************************************************************
* DOSVM_Int33Handler (WINEDOS16.151)
*
* Handler for int 33h (MS MOUSE).
*/
void
WINAPI
DOSVM_Int33Handler
(
CONTEXT86
*
context
)
{
switch
(
AX_reg
(
context
))
{
case
0x0000
:
TRACE
(
"Reset mouse driver and request status
\n
"
);
INT33_ResetMouse
(
context
);
break
;
case
0x0001
:
FIXME
(
"Show mouse cursor
\n
"
);
break
;
case
0x0002
:
FIXME
(
"Hide mouse cursor
\n
"
);
break
;
case
0x0003
:
TRACE
(
"Return mouse position and button status: (%d,%d) and %d
\n
"
,
mouse_info
.
x
,
mouse_info
.
y
,
mouse_info
.
but
);
SET_BX
(
context
,
mouse_info
.
but
);
SET_CX
(
context
,
mouse_info
.
x
);
SET_DX
(
context
,
mouse_info
.
y
);
break
;
case
0x0004
:
FIXME
(
"Position mouse cursor
\n
"
);
break
;
case
0x0005
:
TRACE
(
"Return Mouse button press Information for %s mouse button
\n
"
,
BX_reg
(
context
)
?
"right"
:
"left"
);
if
(
BX_reg
(
context
))
{
SET_BX
(
context
,
mouse_info
.
rbcount
);
mouse_info
.
rbcount
=
0
;
SET_CX
(
context
,
mouse_info
.
rlastx
);
SET_DX
(
context
,
mouse_info
.
rlasty
);
}
else
{
SET_BX
(
context
,
mouse_info
.
lbcount
);
mouse_info
.
lbcount
=
0
;
SET_CX
(
context
,
mouse_info
.
llastx
);
SET_DX
(
context
,
mouse_info
.
llasty
);
}
SET_AX
(
context
,
mouse_info
.
but
);
break
;
case
0x0007
:
FIXME
(
"Define horizontal mouse cursor range %d..%d
\n
"
,
CX_reg
(
context
),
DX_reg
(
context
));
break
;
case
0x0008
:
FIXME
(
"Define vertical mouse cursor range %d..%d
\n
"
,
CX_reg
(
context
),
DX_reg
(
context
));
break
;
case
0x0009
:
FIXME
(
"Define graphics mouse cursor
\n
"
);
break
;
case
0x000A
:
FIXME
(
"Define text mouse cursor
\n
"
);
break
;
case
0x000B
:
TRACE
(
"Read Mouse motion counters
\n
"
);
{
int
dx
=
((
int
)
mouse_info
.
x
-
(
int
)
mouse_info
.
oldx
)
*
(
mouse_info
.
HMPratio
/
8
);
int
dy
=
((
int
)
mouse_info
.
y
-
(
int
)
mouse_info
.
oldy
)
*
(
mouse_info
.
VMPratio
/
8
);
SET_CX
(
context
,
(
WORD
)
dx
);
SET_DX
(
context
,
(
WORD
)
dy
);
mouse_info
.
oldx
=
mouse_info
.
x
;
mouse_info
.
oldy
=
mouse_info
.
y
;
}
break
;
case
0x000C
:
TRACE
(
"Define mouse interrupt subroutine
\n
"
);
mouse_info
.
callmask
=
CX_reg
(
context
);
mouse_info
.
callback
=
(
FARPROC16
)
MAKESEGPTR
(
context
->
SegEs
,
DX_reg
(
context
));
break
;
case
0x000F
:
TRACE
(
"Set mickey/pixel ratio
\n
"
);
mouse_info
.
HMPratio
=
CX_reg
(
context
);
mouse_info
.
VMPratio
=
DX_reg
(
context
);
break
;
case
0x0010
:
FIXME
(
"Define screen region for update
\n
"
);
break
;
case
0x0021
:
TRACE
(
"Software reset
\n
"
);
INT33_ResetMouse
(
context
);
break
;
default:
INT_BARF
(
context
,
0x33
);
}
SET_AX
(
context
,
mouse_info
.
but
);
break
;
case
0x07
:
FIXME
(
"Define horizontal mouse cursor range %d..%d
\n
"
,
CX_reg
(
context
),
DX_reg
(
context
));
break
;
case
0x08
:
FIXME
(
"Define vertical mouse cursor range %d..%d
\n
"
,
CX_reg
(
context
),
DX_reg
(
context
));
break
;
case
0x09
:
FIXME
(
"Define graphics mouse cursor
\n
"
);
break
;
case
0x0A
:
FIXME
(
"Define text mouse cursor
\n
"
);
break
;
case
0x0B
:
TRACE
(
"Read Mouse motion counters
\n
"
);
SET_CX
(
context
,
(
mouse_info
.
x
-
mouse_info
.
oldx
)
*
(
mouse_info
.
HMPratio
/
8
)
);
SET_DX
(
context
,
(
mouse_info
.
y
-
mouse_info
.
oldy
)
*
(
mouse_info
.
VMPratio
/
8
)
);
mouse_info
.
oldx
=
mouse_info
.
x
;
mouse_info
.
oldy
=
mouse_info
.
y
;
break
;
case
0x0C
:
TRACE
(
"Define mouse interrupt subroutine
\n
"
);
mouse_info
.
callmask
=
CX_reg
(
context
);
mouse_info
.
callback
=
(
FARPROC16
)
MAKESEGPTR
(
context
->
SegEs
,
LOWORD
(
context
->
Edx
));
break
;
case
0x0F
:
TRACE
(
"Set mickey/pixel ratio
\n
"
);
mouse_info
.
HMPratio
=
CX_reg
(
context
);
mouse_info
.
VMPratio
=
DX_reg
(
context
);
break
;
case
0x10
:
FIXME
(
"Define screen region for update
\n
"
);
break
;
default:
INT_BARF
(
context
,
0x33
);
}
}
typedef
struct
{
...
...
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