diff -ruN -x Makefile -x configure -x config.cache -x config.h -x *.[178] -x gpm.info -x gpmdoc.ps -x gpmdoc.txt -x gpm-root.c -x stamp-h -x *.elc gpm-1.19.5.orig/src/mice.c gpm-1.19.5/src/mice.c
--- gpm-1.19.5.orig/src/mice.c	Thu Oct  4 23:38:59 2001
+++ gpm-1.19.5/src/mice.c	Thu Oct  4 23:38:53 2001
@@ -449,6 +449,16 @@
   return 0;
 }
 
+static int R_sun(Gpm_Event *state, int fd)
+{
+  signed char buffer[3];
+
+  buffer[0]= (state->buttons ^ 0x07) | 0x80;
+  buffer[1]= state->dx;
+  buffer[2]= -(state->dy);
+  return write(fd,buffer,3);
+}
+
 static int M_msc(Gpm_Event *state,  unsigned char *data)
 {
   state->buttons= (~data[0]) & 0x07;
@@ -2177,7 +2187,7 @@
   {"sun",  "For Sparc mice.",
            /* 'msc' protocol, but only 3 bytes per packet. */
            "", M_sun, I_serial, CS8 | CSTOPB | STD_FLG,
-                                {0xf8, 0x80, 0x00, 0x00}, 3, 1, 0, 0, 0},
+                                {0xf8, 0x80, 0x00, 0x00}, 3, 1, 0, 0, R_sun},
   {"mm",   "MM series. Probably an old protocol...",
            "MMSeries", M_mm, I_serial, CS8 | PARENB|PARODD | STD_FLG,
                                 {0xe0, 0x80, 0x80, 0x00}, 3, 1, 0, 0, 0},
