<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I am developing under a PPC embedded system running 2.6.30.2 Linux, xserver from debian distribution of 7.3+19, xf86-input-mouse 1.3.0. I have a custom board that I am sending Microsoft mouse 3 byte protocol through a pipe to the input of xserver via the mouse driver. I was able to make small movements, all positive, but if I moved negative, the mouse would jump a large amount in the positive direction. I checked out from git and built the mouse driver and turned on debug to find out and it is not accepting negative numbers correctly in the case of PROT_MS. By changing the cast on lines 1304/1305 in mouse.c from (char) to (signed char), I fixed the problem. I don't know if this exists on other (non PPC) platforms. &nbsp;I also noticed the potential for the same problem in a few more places. I am using gcc-4.3.<div><br></div><div>The source I have is from:</div><div><div><font face="Verdana" size="2">xf86-input-mouse-1.4.0-13-gf292f23</font></div><div><font class="Apple-style-span" face="Verdana"><span class="Apple-style-span" style="font-size: small;"><br></span></font></div><div><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: medium; "><div><font face="Verdana" size="2">diff --git a/src/mouse.c b/src/mouse.c<br>index aff2512..b59a138 100644<br>--- a/src/mouse.c<br>+++ b/src/mouse.c<br>@@ -1301,8 +1301,8 @@ MouseReadInput(InputInfoPtr pInfo)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buttons = (pMse-&gt;lastButtons &amp; 2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | ((int)(pBuf[0] &amp; 0x20) &gt;&gt; 3)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | ((int)(pBuf[0] &amp; 0x10) &gt;&gt; 4);<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dx = (char)(((pBuf[0] &amp; 0x03) &lt;&lt; 6) | (pBuf[1] &amp; 0x3F));<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dy = (char)(((pBuf[0] &amp; 0x0C) &lt;&lt; 4) | (pBuf[2] &amp; 0x3F));<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dx = (signed char)(((pBuf[0] &amp; 0x03) &lt;&lt; 6) | (pBuf[1] &amp; 0x3F));<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dy = (signed char)(((pBuf[0] &amp; 0x0C) &lt;&lt; 4) | (pBuf[2] &amp; 0x3F));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</font></div><div><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case PROT_GLIDE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* ALPS GlidePoint */</font></div></span></span></div><div>Donald Kayser<br><div><br></div><div><br></div></div></div></body></html>