forsyth20121205-174063a80cc13 years agoHistory
84 lines · 1.2 KB · C
RawDownload
#include "u.h"#include "../port/lib.h"#include "mem.h"#include "dat.h"#include "fns.h"#include "../port/error.h"#include "io.h" /* *  mouse types */enum{	Mouseother=	0,	Mouseserial=	1,	MousePS2=	2,}; static int mousetype; /* *  ps/2 mouse message is three bytes * *	byte 0 -	0 0 SDY SDX 1 M R L *	byte 1 -	DX *	byte 2 -	DY * *  shift & left button is the same as middle button */static voidps2mouseputc(int c, int shift){	static short msg[3];	static int nb;	static uchar b[] = {0, 1, 4, 5, 2, 3, 6, 7, 0, 1, 2, 5, 2, 3, 6, 7 };	int buttons, dx, dy; 	/* 	 *  check byte 0 for consistency	 */	if(nb==0 && (c&0xc8)!=0x08)		return; 	msg[nb] = c;	if(++nb == 3){		nb = 0;		if(msg[0] & 0x10)			msg[1] |= 0xFF00;		if(msg[0] & 0x20)			msg[2] |= 0xFF00; 		buttons = b[(msg[0]&7) | (shift ? 8 : 0)];		dx = msg[1];		dy = -msg[2];		mousetrack(buttons, dx, dy, 1);	}	return;} /* *  set up a ps2 mouse */static voidps2mouse(void){	if(mousetype == MousePS2)		return; 	i8042auxenable(ps2mouseputc);	/* make mouse streaming, enabled */	i8042auxcmd(0xEA);	i8042auxcmd(0xF4); 	mousetype = MousePS2;} voidps2mouselink(void){	/*	 * hack	 */	ps2mouse();}