diff options
Diffstat (limited to 'games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c')
-rw-r--r-- | games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c | 222 |
1 files changed, 2 insertions, 220 deletions
diff --git a/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c b/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c index 255532e3b1d6..f5502683e86f 100644 --- a/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c +++ b/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c @@ -1,6 +1,6 @@ --- src/linux/rw_in_svgalib.c.orig Wed Oct 9 03:54:25 2002 +++ src/linux/rw_in_svgalib.c Mon Jun 16 23:00:10 2003 -@@ -20,11 +20,23 @@ +@@ -20,7 +20,9 @@ #include <termios.h> #include <sys/ioctl.h> #include <sys/stat.h> @@ -10,21 +10,7 @@ #include <stdarg.h> #include <stdio.h> #include <signal.h> - #include <sys/mman.h> -+#ifdef Joystick -+# if defined(__linux__) -+# include <linux/joystick.h> -+# elif defined(__FreeBSD__) -+# include <sys/joystick.h> -+# endif -+#include <fcntl.h> -+#include <glob.h> -+#include <unistd.h> -+#endif - - #include "vga.h" - #include "vgakeyboard.h" -@@ -145,26 +157,22 @@ +@@ -145,26 +147,22 @@ // 84 to 86 not used scantokey[ 87] = K_F11; scantokey[ 88] = K_F12; @@ -67,207 +53,3 @@ if (keyboard_init()) Sys_Error("keyboard_init() failed"); -@@ -184,7 +192,7 @@ - } - - /*****************************************************************************/ --/* MOUSE */ -+/* MOUSE AND JOYSTICK */ - /*****************************************************************************/ - - // this is inside the renderer shared lib, so these are called from vid_so -@@ -207,6 +215,14 @@ - static cvar_t *mdev; - static cvar_t *mrate; - -+#ifdef Joystick -+static cvar_t *in_joystick; -+static qboolean joystick_avail = false; -+static int joy_fd, jx, jy, center_jx, center_jy; -+static cvar_t *j_invert_y; -+static cvar_t *j_sensitivity; -+#endif -+ - static qboolean mlooking; - - // state struct passed in Init -@@ -254,6 +270,49 @@ - } - #endif - -+#ifdef Joystick -+void -+InitJoystick() -+{ -+ int i, err; -+ glob_t pglob; -+ struct joystick j; -+ -+ err = glob("/dev/joy*", 0, NULL, &pglob); -+ -+ if (err) { -+ switch (err) { -+ case GLOB_NOSPACE: -+ ri.Con_Printf(PRINT_ALL, "Error, out of memory while looking for joysticks\n"); -+ break; -+ case GLOB_NOMATCH: -+ ri.Con_Printf(PRINT_ALL, "No joysticks found\n"); -+ break; -+ default: -+ ri.Con_Printf(PRINT_ALL, "Error #%d while looking for joysticks\n", err); -+ } -+ goto out; -+ } -+ -+ for (i = 0; i < pglob.gl_pathc; i++) { -+ ri.Con_Printf(PRINT_ALL, "Trying joystick dev %s\n", pglob.gl_pathv[i]); -+ joy_fd = open(pglob.gl_pathv[i], O_RDONLY | O_NONBLOCK); -+ if (joy_fd == -1) { -+ ri.Con_Printf(PRINT_ALL, "Error opening joystick dev %s\n", -+ pglob.gl_pathv[i]); -+ } -+ else if (read(joy_fd, &j, sizeof(struct joystick)) != -1) { -+ ri.Con_Printf(PRINT_ALL, "Using joystick dev %s\n", pglob.gl_pathv[i]); -+ joystick_avail = true; -+ center_jx = j.x; center_jy = j.y; -+ break; -+ } -+ } -+out: -+ globfree(&pglob); -+} -+#endif -+ - void RW_IN_Init(in_state_t *in_state_p) - { - int mtype; -@@ -262,7 +321,12 @@ - - // mouse variables - m_filter = ri.Cvar_Get ("m_filter", "0", 0); -- in_mouse = ri.Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE); -+ in_mouse = ri.Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE); -+#ifdef Joystick -+ in_joystick = ri.Cvar_Get ("in_joystick", "1", CVAR_ARCHIVE); -+ j_invert_y = ri.Cvar_Get ("j_invert_y", "1", CVAR_ARCHIVE); -+ j_sensitivity = ri.Cvar_Get ("j_sensitivity", "3", 0); -+#endif - freelook = ri.Cvar_Get( "freelook", "0", 0 ); - lookstrafe = ri.Cvar_Get ("lookstrafe", "0", 0); - sensitivity = ri.Cvar_Get ("sensitivity", "3", 0); -@@ -293,11 +357,20 @@ - } - else - mouse_seteventhandler(mousehandler); -+#ifdef Joystick -+ if (in_joystick) -+ InitJoystick(); -+#endif - } - - void RW_IN_Shutdown(void) - { - mouse_close(); -+#ifdef Joystick -+ if (joystick_avail) -+ if (close(joy_fd)) -+ ri.Con_Printf(PRINT_ALL, "Error, problem closing joystick\n"); -+#endif - } - - /* -@@ -307,7 +380,14 @@ - */ - void RW_IN_Commands (void) - { -- if (!UseMouse) -+#ifdef Joystick -+ struct joystick j; -+#endif -+ if (!UseMouse -+#ifdef Joystick -+ && !joystick_avail -+#endif -+ ) - return; - - // poll mouse values -@@ -346,6 +426,23 @@ - in_state->Key_Event_fp (K_MWHEELDOWN, false); - } - mwheel = 0; -+ -+#ifdef Joystick -+ /* FreeBSD does not fully support multi-buttoned joysticks */ -+ if (joystick_avail) { -+ if (read(joy_fd, &j, sizeof(struct joystick)) != -1) { -+ if (j.b1) -+ in_state->Key_Event_fp (K_JOY1, true); -+ else -+ in_state->Key_Event_fp (K_JOY1, false); -+ if (j.b2) -+ in_state->Key_Event_fp (K_JOY2, true); -+ else -+ in_state->Key_Event_fp (K_JOY2, false); -+ jx = j.x; jy = j.y; -+ } -+ } -+#endif - } - - /* -@@ -355,7 +452,11 @@ - */ - void RW_IN_Move (usercmd_t *cmd) - { -- if (!UseMouse) -+ if (!UseMouse -+#ifdef Joystick -+ && !joystick_avail -+#endif -+ ) - return; - - // poll mouse values -@@ -374,7 +475,11 @@ - old_mouse_x = mx; - old_mouse_y = my; - -- if (!mx && !my) -+ if (!mx && !my -+#ifdef Joystick -+ && !joystick_avail -+#endif -+ ) - return; - - mx = my = 0; // clear for next update -@@ -398,6 +503,28 @@ - { - cmd->forwardmove -= m_forward->value * mouse_y; - } -+ -+#ifdef Joystick -+ if (joystick_avail) { -+ int djx = (jx - center_jx) * j_sensitivity->value / 10, -+ djy = (jy - center_jy) * j_sensitivity->value / 10; -+// add joy X/Y movement to cmd -+ if ((*in_state->in_strafe_state & 1) || -+ (lookstrafe->value && mlooking)) -+ cmd->sidemove += m_side->value * djx; -+ else -+ in_state->viewangles[YAW] -= m_yaw->value * djx; -+ -+ if ((mlooking || freelook->value) && -+ !(*in_state->in_strafe_state & 1)) { -+ if (j_invert_y) -+ in_state->viewangles[PITCH] -= m_pitch->value * djy; -+ else -+ in_state->viewangles[PITCH] += m_pitch->value * djy; -+ } -+ else cmd->forwardmove -= m_forward->value * djy; -+ } -+#endif - } - - void RW_IN_Frame (void) |