summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/sun/ms.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/sys/dev/sun/ms.c b/sys/dev/sun/ms.c
index 8a33764e6ee..8854fe54872 100644
--- a/sys/dev/sun/ms.c
+++ b/sys/dev/sun/ms.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ms.c,v 1.16 1999/05/14 06:42:02 mrg Exp $ */
+/* $NetBSD: ms.c,v 1.17 1999/08/02 01:50:27 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -231,8 +231,13 @@ ms_input(ms, c)
ms->ms_byteno = -1;
return;
}
- if ((c & ~7) == 0x80) /* if in 0x80..0x87 */
- ms->ms_byteno = 0;
+ if ((c & ~0x0f) == 0x80) { /* if in 0x80..0x8f */
+ if (c & 8) {
+ ms->ms_byteno = 1; /* short form (3 bytes) */
+ } else {
+ ms->ms_byteno = 0; /* long form (5 bytes) */
+ }
+ }
/*
* Run the decode loop, adding to the current information.
@@ -245,31 +250,37 @@ ms_input(ms, c)
return;
case 0:
- /* buttons */
- ms->ms_byteno = 1;
+ /* buttons (long form) */
+ ms->ms_byteno = 2;
ms->ms_mb = (~c) & 0x7;
return;
case 1:
- /* first delta-x */
- ms->ms_byteno = 2;
- ms->ms_dx += (char)c;
+ /* buttons (short form) */
+ ms->ms_byteno = 4;
+ ms->ms_mb = (~c) & 0x7;
return;
case 2:
- /* first delta-y */
+ /* first delta-x */
ms->ms_byteno = 3;
- ms->ms_dy += (char)c;
+ ms->ms_dx += (char)c;
return;
case 3:
- /* second delta-x */
+ /* first delta-y */
ms->ms_byteno = 4;
- ms->ms_dx += (char)c;
+ ms->ms_dy += (char)c;
return;
case 4:
/* second delta-x */
+ ms->ms_byteno = 5;
+ ms->ms_dx += (char)c;
+ return;
+
+ case 5:
+ /* second delta-y */
ms->ms_byteno = -1; /* wait for button-byte again */
ms->ms_dy += (char)c;
break;