A mouse is either connected to a serial port or directly to the
AT bus and different types of mouse send distinct kinds of data, which makes
mouse programming a bit harder.
But, Andrew Haylett was so kind as to put a generous copyright on his
selection program which means you can use his mouse routines for
your own programs. Included in this guide you can find the pre-release
of selection-1.8 with the COPYRIGHT notice.
X11 already offers a comfortable mouse API, so Andrew's routines should
be used for non-X11 applications only.
You only need the modules mouse.c and mouse.h from the selection package.
To get mouse events you basically have to call ms_init() and get_ms_event().
ms_init needs the following 10 arguments:
int acceleration
is the acceleration factor. If you move the mouse more than
delta pixels, motion becomes faster depending on this value.
int baud
is the bps rate your mouse uses (normally 1200).
int delta
this is the number of pixels that you have to move the mouse before
the acceleration starts.
char *device
is the name of your mouse device (e.g. /dev/mouse).
int toggle
toggle the DTR, RTS or both DTR and RTS mouse modem lines on
initialization (normally 0).
int sample
the resolution (dpi) of your mouse (normally 100).
mouse_type mouse
the identifier of the connected mouse like P_MSC (Mouse Systems Corp.)
for my mouse ;).
int slack
amount of slack for wraparound which means if slack is -1 a try to move the
mouse over the screen border will leave the mouse at the border.
Values >= 0 mean that the mouse cursor will wrap to the other end after
moving the mouse slack pixels against the border.
int maxx
the resolution of your current terminal in x direction. With the
default font, a char is 10 pixels wide, and therefore the overall
x screen resolution is 10*80-1.
int maxy
the resolution of your current terminal in y direction. With the
default font, a char is 12 pixels high and therefore the overall
y screen resolution is 12*25-1.
get_ms_event() just needs a pointer to a struct ms_event.
If get_ms_event() returns -1, an error occured. On success, it
returns 0, and the struct ms_event will contain the actual mouse state.