|
|
1.1 ! root 1: /* ! 2: * UAE - The Un*x Amiga Emulator ! 3: * ! 4: * Joystick emulation for Linux ! 5: * ! 6: * Copyright 1997 Bernd Schmidt ! 7: */ ! 8: ! 9: #include "sysconfig.h" ! 10: #include "sysdeps.h" ! 11: ! 12: #include "config.h" ! 13: #include "options.h" ! 14: #include "memory.h" ! 15: #include "custom.h" ! 16: #include "joystick.h" ! 17: ! 18: int nr_joysticks; ! 19: ! 20: static int js0, js1; ! 21: ! 22: /* There are too many different versions of <linux/joystick.h>. Rather ! 23: * than trying to work correctly with all of them, we duplicate the ! 24: * necessary definitions here. */ ! 25: struct JS_DATA_TYPE ! 26: { ! 27: int buttons; ! 28: int x; ! 29: int y; ! 30: }; ! 31: ! 32: static struct JS_DATA_TYPE jscal; ! 33: ! 34: void read_joystick(int nr, unsigned int *dir, int *button) ! 35: { ! 36: static int minx = MAXINT, maxx = MININT, ! 37: miny = MAXINT, maxy = MININT; ! 38: int left = 0, right = 0, top = 0, bot = 0; ! 39: struct JS_DATA_TYPE buffer; ! 40: int len; ! 41: int fd = nr == 0 ? js0 : js1; ! 42: ! 43: *dir = 0; ! 44: *button = 0; ! 45: if (nr >= nr_joysticks) ! 46: return; ! 47: ! 48: len = read(fd, &buffer, sizeof(buffer)); ! 49: if (len != sizeof(buffer)) ! 50: return; ! 51: ! 52: if (buffer.x < minx) minx = buffer.x; ! 53: if (buffer.y < miny) miny = buffer.y; ! 54: if (buffer.x > maxx) maxx = buffer.x; ! 55: if (buffer.y > maxy) maxy = buffer.y; ! 56: ! 57: if (buffer.x < (minx + (maxx-minx)/3)) ! 58: left = 1; ! 59: else if (buffer.x > (minx + 2*(maxx-minx)/3)) ! 60: right = 1; ! 61: ! 62: if (buffer.y < (miny + (maxy-miny)/3)) ! 63: top = 1; ! 64: else if (buffer.y > (miny + 2*(maxy-miny)/3)) ! 65: bot = 1; ! 66: ! 67: if (left) top = !top; ! 68: if (right) bot = !bot; ! 69: *dir = bot | (right << 1) | (top << 8) | (left << 9); ! 70: *button = buffer.buttons & 3; ! 71: } ! 72: ! 73: void init_joystick(void) ! 74: { ! 75: nr_joysticks = 0; ! 76: js0 = -1; js1 = -1; ! 77: js0 = open("/dev/js0", O_RDONLY); ! 78: if (js0 < 0) { ! 79: write_log ("No joysticks found\n"); ! 80: return; ! 81: } ! 82: nr_joysticks = 1; ! 83: js1 = open("/dev/js1", O_RDONLY); ! 84: if (js1 < 0) { ! 85: write_log ("Found one joystick\n"); ! 86: return; ! 87: } ! 88: write_log ("Found two joysticks\n"); ! 89: nr_joysticks = 2; ! 90: } ! 91: ! 92: void close_joystick(void) ! 93: { ! 94: if (js0 >= 0) ! 95: close(js0); ! 96: if (js1 >= 0) ! 97: close(js1); ! 98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.