> you can try the beta version right now. it's available at ftp.schottelius.org

Makefile.include has this funny line:

    MAKEINFO = no --no-split

Here is a rediffed version of my patch (had a trivial conflict in
the mouse list).

Other that that, it seems to run fine at least for a few minutes.
:-)

Andrew

--- mice.c.orig	Wed Feb 20 08:10:13 2002
+++ mice.c	Wed Feb 20 10:10:03 2002
@@ -415,14 +415,39 @@ static int M_ms3(Gpm_Event *state,  unsi
 {
    state->buttons= ((data[0] & 0x20) >> 3)   /* left */
       | ((data[3] & 0x10) >> 3)   /* middle */
-      | ((data[0] & 0x10) >> 4);   /* right */
+      | ((data[0] & 0x10) >> 4)   /* right */
+      | (((data[3] & 0x0f) == 0x0f) * GPM_B_UP)     /* wheel up */
+      | (((data[3] & 0x0f) == 0x01) * GPM_B_DOWN);  /* wheel down */
    state->dx=      (signed char)(((data[0] & 0x03) << 6) | (data[1] & 0x3F));
    state->dy=      (signed char)(((data[0] & 0x0C) << 4) | (data[2] & 0x3F));
-   /* wheel (dz??) is (data[3] & 0x0f) */
 
    return 0;
 }
 
+static int R_ms3(Gpm_Event *state, int fd)
+{
+   char buf[4] = {0, 0, 0, 0};
+   int dx, dy;
+
+   buf[0] |= 0x40;
+
+   if (state->buttons & GPM_B_LEFT)     buf[0] |= 0x20;
+   if (state->buttons & GPM_B_MIDDLE)   buf[3] |= 0x10;
+   if (state->buttons & GPM_B_RIGHT)    buf[0] |= 0x10;
+   if (state->buttons & GPM_B_UP)       buf[3] |= 0x0f;
+   if (state->buttons & GPM_B_DOWN)     buf[3] |= 0x01;
+
+   dx = limit_delta(state->dx, -128, 127);
+   buf[1] = dx & ~0xC0;
+   buf[0] |= (dx & 0xC0) >> 6;
+ 
+   dy = limit_delta(state->dy, -128, 127);
+   buf[2] = dy & ~0xC0;
+   buf[0] |= (dy & 0xC0) >> 4;
+
+   return write(fd,buf,4);
+}
+
 /* M_brw is a variant of m$ 'Intellimouse' the middle button is different */
 static int M_brw(Gpm_Event *state,  unsigned char *data)
 {
@@ -2127,7 +2152,7 @@ Gpm_Type mice[]={
                                 {0xe0, 0x80, 0x80, 0x00}, 3, 1, 0, 0, 0},
    {"ms3", "Microsoft Intellimouse (serial) - 3 buttons, wheel unused",
            "", M_ms3, I_pnp, CS7 | STD_FLG,
-                                {0xc0, 0x40, 0xc0, 0x00}, 4, 1, 0, 0, 0},
+                                {0xc0, 0x40, 0xc0, 0x00}, 4, 1, 0, 0, R_ms3},
    {"ms+", "Like 'ms', but allows dragging with the middle button.",
            "", M_ms_plus, I_serial, CS7 | STD_FLG,
                                 {0x40, 0x40, 0x40, 0x00}, 3, 1, 0, 0, 0},


