aboutsummaryrefslogtreecommitdiffstats
path: root/src/msdos.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/msdos.c')
-rw-r--r--src/msdos.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/msdos.c b/src/msdos.c
index 6c72853143..55d2fc2749 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -1147,8 +1147,8 @@ mouse_get_pos (f, bar_window, part, x, y, time)
*f = selected_frame;
*bar_window = Qnil;
gettimeofday (&tv, NULL);
- *x = make_number (regs.x.cx);
- *y = make_number (regs.x.dx);
+ *x = make_number (regs.x.cx / 8);
+ *y = make_number (regs.x.dx / 8);
*time = tv.tv_usec;
mouse_moved = 0;
}
@@ -1174,9 +1174,22 @@ mouse_init1 ()
union REGS regs;
int present;
+ if (!internal_terminal)
+ return 0;
+
regs.x.ax = 0x0021;
int86 (0x33, &regs, &regs);
- present = internal_terminal && (regs.x.ax & 0xffff) == 0xffff;
+ present = (regs.x.ax & 0xffff) == 0xffff;
+ if (!present)
+ {
+ /* Reportedly, the above doesn't work for some mouse drivers. There
+ is an additional detection method that should work, but might be
+ a little slower. Use that as an alternative. */
+ regs.x.ax = 0x0000;
+ int86 (0x33, &regs, &regs);
+ present = (regs.x.ax & 0xffff) == 0xffff;
+ }
+
if (present)
{
if (regs.x.bx == 3)