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:
is the acceleration factor. If you move the mouse more than
delta pixels, motion becomes faster depending on this value.
is the bps rate your mouse uses (normally 1200).
this is the number of pixels that you have to move the mouse before
the acceleration starts.
is the name of your mouse device (e.g. /dev/mouse).
toggle the DTR, RTS or both DTR and RTS mouse modem lines on
initialization (normally 0).
the resolution (dpi) of your mouse (normally 100).
the identifier of the connected mouse like P_MSC (Mouse Systems Corp.)
for my mouse ;).
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.
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.
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.