diff options
author | Max Khon <fjoe@FreeBSD.org> | 2003-06-18 09:21:21 +0000 |
---|---|---|
committer | Max Khon <fjoe@FreeBSD.org> | 2003-06-18 09:21:21 +0000 |
commit | 5dfaba8ea1e84f0b981ac1ea14dbf2ebcf6c4cff (patch) | |
tree | 94263949a16f153327d82eb0e15dc57c28ad5254 /games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c | |
parent | Don't trust IP comes from fake HELO (diff) |
New port: games/quake2lnx
Quake2-LNX project aims to further develop and bug fix original Quake II
code released by id Software in 1998, as well as support multiple
architectures. It also includes additional rendering drivers, eyecandy stuff
from Quake2Max project, and experimental IPv6 support.
Submitted by: Alexey Dokuchaev <danfe (at) regency.nsu.ru>
Notes
Notes:
svn path=/head/; revision=83249
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 | 273 |
1 files changed, 273 insertions, 0 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 new file mode 100644 index 000000000000..255532e3b1d6 --- /dev/null +++ b/games/quake2lnx/files/patch-src::linux::rw_in_svgalib.c @@ -0,0 +1,273 @@ +--- 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 @@ + #include <termios.h> + #include <sys/ioctl.h> + #include <sys/stat.h> ++#ifdef __linux__ + #include <sys/vt.h> ++#endif + #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 @@ + // 84 to 86 not used + scantokey[ 87] = K_F11; + scantokey[ 88] = K_F12; +- // 89 to 95 not used +- scantokey[ 96] = K_KP_ENTER; //keypad enter +- scantokey[ 97] = K_CTRL; //right +- scantokey[ 98] = K_KP_SLASH; +- scantokey[ 99] = K_F12; // print screen, bind to screenshot by default +- scantokey[100] = K_ALT; // right +- +- scantokey[101] = K_PAUSE; // break +- scantokey[102] = K_HOME; +- scantokey[103] = K_UPARROW; +- scantokey[104] = K_PGUP; +- scantokey[105] = K_LEFTARROW; +- scantokey[106] = K_RIGHTARROW; +- scantokey[107] = K_END; +- scantokey[108] = K_DOWNARROW; +- scantokey[109] = K_PGDN; +- scantokey[110] = K_INS; +- scantokey[111] = K_DEL; +- +- scantokey[119] = K_PAUSE; ++ scantokey[ 89] = K_KP_ENTER; //keypad enter ++ scantokey[ 90] = K_CTRL; //right ++ scantokey[ 91] = K_KP_SLASH; ++ scantokey[ 92] = K_F12; // print screen, bind to screenshot by default ++ scantokey[ 93] = K_ALT; // right ++ scantokey[ 94] = K_HOME; ++ scantokey[ 95] = K_UPARROW; ++ scantokey[ 96] = K_PGUP; ++ scantokey[ 97] = K_LEFTARROW; ++ scantokey[ 98] = K_RIGHTARROW; ++ scantokey[ 99] = K_END; ++ scantokey[100] = K_DOWNARROW; ++ scantokey[101] = K_PGDN; ++ scantokey[102] = K_INS; ++ scantokey[103] = K_DEL; ++ scantokey[104] = K_PAUSE; + + 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) |