Hi! I wrote a set of SVGAlibish joystick routines while I played with porting DOSDoom to SVGAlib. It is compatible with both the older joystick driver for Linux 1.x and 2.0 and the newer joystick driver that is in recent 2.1.x kernels. Some of the code is ripped from the userland tools joystick-0.6.7 and joystick-2.0.6 none of wich has any special license attaced to them. The files are: joydev.h: my userland version of the kernel joystick.h vgajoystick.h: library include file analog to vgakeyboard.h and vgamouse.h joystick.c: the library routines. joytest.c: a simple test program/example I dunno how useful these will be, but I could at least use them in doom. (Not that joystick control in doom adds anything, I just implemented it for completeness.) BUGS: Only one joystick device at any time (but the new 2.1.x driver will let you map 4 axis and 4 buttons to one logical device). The routines: int joystick_init(const char *joydev, int verbose, FILE *file); This one inits the joystick routines and opens the device. Returna the filedescriptor of the joystick device if successfull or -1 if not. Outputs some messages to stdout id verbose is != 0. If file != NULL it will try to recalibrate the joystick and output the recalibration instructions to the struct file pointed to by file. E.g. if (-1 == joystick_init("/dev/js0, 1, stdout)) { printf("Joystick init failed\n"); exit(1); } void joystick_close(void); Shuts down the joystick. int joystick_update(void); Reads the joystick and calls the joystick handler if anything events are availible. Should be called every now and then. void joystick_sethandler(__joystick_handler jh); Install a user supplied joystick handler. A user supplied joystick handler would look like this. void joystick_handler(int event, int number, char value); int event - event type: JOY_EVENTAXIS an axis has moved JOY_EVENTBUTTONDOWN a button has been pushed JOY_EVENTBUTTONUP a button has been released int number - the axis or button number for this event 0=x axis or button 1, etc. char value - value for axis events (-128 .. 0 .. 127) void joystick_setdefaulthandler(void); Restore the default joystick handler. char joystick_getnumaxes(void); char joystick_getnumbuttons(void); Retrun the number of axes/buttons on the joystick. char joystick_getaxis(int a); char joystick_getbutton(int b); Querys the jostick state from the default joystick handler if it is used. The following macros calls joystick_getaxis() or joystick_getbutton(). joystick_getb1() - Gets button 1 joystick_getb2() - Gets button 2 joystick_getb3() - Gets button 3 joystick_getb4() - Gets button 4 joystick_getx() - Returns the X axis joystick_gety() - Returns the Y axis joystick_getz() - Returns the Z axis That all folks, Daniel Engström daniel.engstrom@riksnett.no