summaryrefslogtreecommitdiff
path: root/games/bzflag
diff options
context:
space:
mode:
authorNick Sayer <nsayer@FreeBSD.org>2002-01-26 17:42:17 +0000
committerNick Sayer <nsayer@FreeBSD.org>2002-01-26 17:42:17 +0000
commitad7e6028308a883b77b4d48a18ede140118f4ba6 (patch)
tree255f006cb5abdfb32bda51dc7242f234590d54a3 /games/bzflag
parentAdd bsh 1.2.b3, a Java scripting environment. (diff)
Update to e.4. USB Joystick functionality has been merged. Huzzah!
PR: ports/34303 Submitted by: EliteNecrosan@hotmail.com
Notes
Notes: svn path=/head/; revision=53794
Diffstat (limited to 'games/bzflag')
-rw-r--r--games/bzflag/Makefile6
-rw-r--r--games/bzflag/distinfo2
-rw-r--r--games/bzflag/files/patch-ServerLink.cxx8
-rw-r--r--games/bzflag/files/patch-man-Makefile4
-rw-r--r--games/bzflag/files/patch-usbjoy.cxx11
-rw-r--r--games/bzflag/files/patch-usbstick363
6 files changed, 21 insertions, 373 deletions
diff --git a/games/bzflag/Makefile b/games/bzflag/Makefile
index 0155c908b3dd..a4df4d90b999 100644
--- a/games/bzflag/Makefile
+++ b/games/bzflag/Makefile
@@ -6,16 +6,16 @@
#
PORTNAME= bzflag
-PORTVERSION= 1.7e.2
+PORTVERSION= 1.7e.4
CATEGORIES= games
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= bzflag
-DISTNAME= ${PORTNAME}-1.7e2
+DISTNAME= ${PORTNAME}-${PORTVERSION:S/e./e/}
EXTRACT_SUFX= .tgz
MAINTAINER= nsayer@FreeBSD.org
-WRKSRC= ${WRKDIR}/${DISTNAME}
+WRKSRC= ${WRKDIR}/${PORTNAME}
USE_XLIB= yes
USE_MESA= yes
diff --git a/games/bzflag/distinfo b/games/bzflag/distinfo
index 2cb10de8a7c4..319712837293 100644
--- a/games/bzflag/distinfo
+++ b/games/bzflag/distinfo
@@ -1 +1 @@
-MD5 (bzflag-1.7e2.tgz) = ba1d37a175369dcede18a2da9d362cba
+MD5 (bzflag-1.7e4.tgz) = af7dcf1b649c59768ae01fbd4108f76b
diff --git a/games/bzflag/files/patch-ServerLink.cxx b/games/bzflag/files/patch-ServerLink.cxx
index 880aa5508ec2..c8c3e3f6f40e 100644
--- a/games/bzflag/files/patch-ServerLink.cxx
+++ b/games/bzflag/files/patch-ServerLink.cxx
@@ -1,11 +1,11 @@
---- src/bzflag/ServerLink.cxx.orig Sun Apr 15 13:32:03 2001
-+++ src/bzflag/ServerLink.cxx Sun Apr 15 13:32:20 2001
-@@ -761,7 +761,7 @@
+--- src/bzflag/ServerLink.cxx.orig Sat Jan 26 09:26:30 2002
++++ src/bzflag/ServerLink.cxx Sat Jan 26 09:25:55 2002
+@@ -781,7 +781,7 @@
if ((urecvfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
return; // we cannot comply
}
- for (int portno=17200; portno < 65000; portno++) {
+ for (int portno=49152; portno < 65535; portno++) {
- bzero((unsigned char *)&serv_addr, sizeof(serv_addr));
+ ::memset((unsigned char *)&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
diff --git a/games/bzflag/files/patch-man-Makefile b/games/bzflag/files/patch-man-Makefile
index 94b5ab6c0192..e3e8e6651f64 100644
--- a/games/bzflag/files/patch-man-Makefile
+++ b/games/bzflag/files/patch-man-Makefile
@@ -7,14 +7,14 @@
- xargs -l10 $(MAKE) $(MFLAGS)
+ xargs -n10 $(MAKE) $(MFLAGS)
- # generate packed compiled nroff
+ # generate packed compiled nroff
packed: sourceform
$(PRINTSRC) | \
sed -e 's/\.[1-8]s$$/\.z/' | \
- xargs -l10 $(MAKE) $(MFLAGS)
+ xargs -n10 $(MAKE) $(MFLAGS)
- # generate gzipped compiled nroff
+ # generate gzipped compiled nroff
gzipped: sourceform
$(PRINTSRC) | \
sed -e 's/\.[1-8]s$$/\.gz/' | \
diff --git a/games/bzflag/files/patch-usbjoy.cxx b/games/bzflag/files/patch-usbjoy.cxx
new file mode 100644
index 000000000000..747f862c60c3
--- /dev/null
+++ b/games/bzflag/files/patch-usbjoy.cxx
@@ -0,0 +1,11 @@
+--- src/platform/usbjoy.cxx.orig Thu Nov 15 02:27:11 2001
++++ src/platform/usbjoy.cxx Sat Jan 26 05:48:50 2002
+@@ -46,7 +46,7 @@
+ int data_buf_offset;
+ };
+
+-usb_joystick *stick;
++usb_joystick *stick=NULL;
+
+ usb_joystick::usb_joystick(const char *name)
+ {
diff --git a/games/bzflag/files/patch-usbstick b/games/bzflag/files/patch-usbstick
deleted file mode 100644
index 33f69a624935..000000000000
--- a/games/bzflag/files/patch-usbstick
+++ /dev/null
@@ -1,363 +0,0 @@
-? src/platform/usbjoy.cxx
-Index: include/BzfWindow.h
-===================================================================
-RCS file: /cvsroot/bzflag/bzflag/include/BzfWindow.h,v
-retrieving revision 1.5
-diff -u -r1.5 BzfWindow.h
---- include/BzfWindow.h 2001/03/04 16:35:56 1.5
-+++ include/BzfWindow.h 2001/04/08 17:08:32
-@@ -67,6 +67,7 @@
- virtual void initJoystick(const char* joystickName);
- virtual boolean joystick() const { return False; }
- virtual void getJoy(int& x, int& y) const { x = 0; y = 0; }
-+ virtual unsigned long getJoyButtons() const { return 0; }
-
- void callExposeCallbacks() const;
- void addExposeCallback(void (*cb)(void*), void* data);
-Index: src/bzflag/MainWindow.cxx
-===================================================================
-RCS file: /cvsroot/bzflag/bzflag/src/bzflag/MainWindow.cxx,v
-retrieving revision 1.6
-diff -u -r1.6 MainWindow.cxx
---- src/bzflag/MainWindow.cxx 2001/04/03 02:38:13 1.6
-+++ src/bzflag/MainWindow.cxx 2001/04/08 17:08:33
-@@ -241,3 +241,8 @@
- my = ((viewHeight >> 1)*my)/(900);
- }
-
-+unsigned long MainWindow::getJoyButtonSet() const
-+{
-+ return window->getJoyButtons();
-+}
-+
-Index: src/bzflag/MainWindow.h
-===================================================================
-RCS file: /cvsroot/bzflag/bzflag/src/bzflag/MainWindow.h,v
-retrieving revision 1.6
-diff -u -r1.6 MainWindow.h
---- src/bzflag/MainWindow.h 2001/03/04 16:35:56 1.6
-+++ src/bzflag/MainWindow.h 2001/04/08 17:08:33
-@@ -76,6 +76,8 @@
- // for these values that we need every frame.
- void getMousePosition(int& mx, int& my) const;
- void getJoyPosition(int& mx, int& my) const;
-+ unsigned long getJoyButtonSet() const;
-+
-
- private:
- // no copying
-Index: src/bzflag/playing.cxx
-===================================================================
-RCS file: /cvsroot/bzflag/bzflag/src/bzflag/playing.cxx,v
-retrieving revision 1.31
-diff -u -r1.31 playing.cxx
---- src/bzflag/playing.cxx 2001/04/03 02:38:13 1.31
-+++ src/bzflag/playing.cxx 2001/04/08 17:08:36
-@@ -401,6 +401,8 @@
- static float roamZoom = 60.0f, roamDZoom;
- #endif
-
-+static void doKeyPlaying(const BzfKeyEvent& key, boolean pressed);
-+
- static void doMotion()
- {
- #if defined(FREEZING)
-@@ -409,9 +411,36 @@
-
- // get mouse position
- int mx, my;
-- if (mainWindow->joystick())
-+ if (mainWindow->joystick()) {
- mainWindow->getJoyPosition(mx, my);
-- else
-+
-+ static const BzfKeyEvent::Button button_map[] = { BzfKeyEvent::LeftMouse,
-+ BzfKeyEvent::MiddleMouse,
-+ BzfKeyEvent::RightMouse,
-+ BzfKeyEvent::F1,
-+ BzfKeyEvent::F2,
-+ BzfKeyEvent::F3,
-+ BzfKeyEvent::F4,
-+ BzfKeyEvent::F5,
-+ BzfKeyEvent::F6,
-+ BzfKeyEvent::F7,
-+ BzfKeyEvent::F8,
-+ BzfKeyEvent::F9
-+ };
-+
-+ static unsigned long old_buttons = 0;
-+ unsigned long new_buttons = mainWindow->getJoyButtonSet();
-+ if (old_buttons != new_buttons)
-+ for (int j = 0; j<12; j++)
-+ if ((old_buttons & (1<<j)) != (new_buttons & (1<<j))) {
-+ BzfKeyEvent ev;
-+ ev.button = button_map[j];
-+ ev.ascii = 0;
-+ ev.shift = 0;
-+ doKeyPlaying(ev, new_buttons&(1<<j));
-+ }
-+ old_buttons = new_buttons;
-+ } else
- mainWindow->getMousePosition(mx, my);
-
- // calculate desired rotation
-Index: src/platform/Make-linux
-===================================================================
-RCS file: /cvsroot/bzflag/bzflag/src/platform/Make-linux,v
-retrieving revision 1.4
-diff -u -r1.4 Make-linux
---- src/platform/Make-linux 2001/02/02 09:14:10 1.4
-+++ src/platform/Make-linux 2001/04/08 17:08:36
-@@ -16,5 +16,6 @@
- XWindow.cxx \
- LinuxDisplay.cxx \
- LinuxMedia.cxx \
-+ usbjoy.cxx \
- $(NULL)
-
-Index: src/platform/XWindow.h
-===================================================================
-RCS file: /cvsroot/bzflag/bzflag/src/platform/XWindow.h,v
-retrieving revision 1.6
-diff -u -r1.6 XWindow.h
---- src/platform/XWindow.h 2001/03/04 16:35:56 1.6
-+++ src/platform/XWindow.h 2001/04/08 17:08:36
-@@ -26,6 +26,27 @@
- #include <X11/extensions/XInput.h>
- #endif
-
-+#ifdef USBJOYSTICK
-+#ifdef __cplusplus
-+/* Argh! usb.h has a structure with a member "class". We don't use it, so
-+ * let's just move it out of the way
-+ */
-+#define class CLASS
-+extern "C" {
-+#endif
-+#ifdef __FreeBSD__
-+#include <libusb.h>
-+#else
-+#include <usb.h>
-+#endif
-+#include <dev/usb/usb.h>
-+#include <dev/usb/usbhid.h>
-+#ifdef __cplusplus
-+#undef class
-+}
-+#endif
-+#endif
-+
- class XVisual;
-
- class XWindow : public BzfWindow {
-@@ -61,6 +82,13 @@
- void swapBuffers();
- void makeContext();
- void freeContext();
-+
-+#ifdef USBJOYSTICK
-+ void initJoystick(const char* joystickName);
-+ boolean joystick() const;
-+ void getJoy(int& x, int& y) const;
-+ unsigned long getJoyButtons() const;
-+#endif
-
- #ifdef XIJOYSTICK
- void initJoystick(char* joystickName);
---- /dev/null Sun Apr 8 09:22:24 2001
-+++ src/platform/usbjoy.cxx Sun Apr 8 09:59:19 2001
-@@ -0,0 +1,194 @@
-+/*
-+ * USB Joystick support for {Net,Free}BSD.
-+ *
-+ * Copyright 2001, Nick Sayer
-+ * This package is free software; you can redistribute it and/or
-+ * modify it under the terms of the license found in the file
-+ * named LICENSE that should have accompanied this file.
-+ *
-+ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-+ *
-+ * This file was "inspired" by the joy_usb.c file that is part of the
-+ * xmame project. To the extent that code was copied from that file,
-+ * it is the author's opinion that distribution under the GPL of the
-+ * derivative work is allowed.
-+ *
-+ */
-+
-+#ifdef USBJOYSTICK
-+#include "XWindow.h"
-+#include <X11/Intrinsic.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+
-+#include <stdio.h>
-+
-+#define MAX_AXIS 3
-+
-+class usb_joystick {
-+public:
-+ usb_joystick(const char *name);
-+ ~usb_joystick();
-+ void poll();
-+ int num_axis;
-+ int axis[MAX_AXIS];
-+ int axis_scale[MAX_AXIS];
-+ int axis_const[MAX_AXIS];
-+ unsigned long buttons;
-+ boolean status;
-+private:
-+ int fd;
-+ struct hid_item *hids;
-+ char *data_buf;
-+ int data_buf_size;
-+ int data_buf_offset;
-+};
-+
-+usb_joystick *stick=NULL;
-+
-+usb_joystick::usb_joystick(const char *name)
-+{
-+ report_desc_t rd;
-+ hid_data *d;
-+ hid_item h;
-+ int report_id;
-+
-+ status = FALSE;
-+ hids = NULL;
-+ num_axis = 0;
-+
-+ if ((fd = open(name, O_RDONLY | O_NONBLOCK))<0)
-+ return;
-+
-+ if ((rd = hid_get_report_desc(fd)) == 0) {
-+ close(fd);
-+ return;
-+ }
-+
-+ data_buf_size = hid_report_size(rd, hid_input, &report_id);
-+ if ((data_buf = (char *)malloc(data_buf_size)) == NULL) {
-+ hid_dispose_report_desc(rd);
-+ }
-+ data_buf_offset = (report_id != 0);
-+
-+ int is_joystick = 0;
-+ int interesting_hid = FALSE;
-+ for (d = hid_start_parse(rd, 1 << hid_input); hid_get_item(d, &h); ) {
-+ int page = HID_PAGE(h.usage);
-+ int usage = HID_USAGE(h.usage);
-+ is_joystick = is_joystick ||
-+ (h.kind == hid_collection &&
-+ page == HUP_GENERIC_DESKTOP &&
-+ (usage == HUG_JOYSTICK || usage == HUG_GAME_PAD));
-+
-+ if (h.kind != hid_input)
-+ continue;
-+
-+ if (!is_joystick)
-+ continue;
-+
-+ interesting_hid = TRUE;
-+ if (page == HUP_GENERIC_DESKTOP) {
-+ int which_axis;
-+ switch (usage) {
-+ case HUG_X:
-+ case HUG_RX: which_axis = 0; break;
-+ case HUG_Y:
-+ case HUG_RY: which_axis = 1; break;
-+ case HUG_Z:
-+ case HUG_RZ: which_axis = 2; break;
-+ default: interesting_hid = FALSE;
-+ }
-+ if (interesting_hid) {
-+ axis_const[which_axis] = 1000 + (2000*h.logical_maximum)/(h.logical_minimum-h.logical_maximum);
-+ axis_scale[which_axis] = (2000*10000)/(h.logical_maximum-h.logical_minimum);
-+ axis[which_axis] = (h.logical_minimum +
-+ h.logical_maximum) / 2;
-+ if (num_axis < (which_axis + 1))
-+ num_axis = which_axis + 1;
-+ }
-+ }
-+ if (interesting_hid) {
-+ struct hid_item *newhid = new struct hid_item;
-+ if (newhid == NULL) {
-+ close(fd);
-+ return;
-+ }
-+ *newhid = h;
-+ newhid->next = hids;
-+ hids = newhid;
-+ }
-+ }
-+ hid_end_parse(d);
-+
-+ status = TRUE;
-+}
-+usb_joystick::~usb_joystick() {
-+ close(fd);
-+}
-+
-+void usb_joystick::poll() {
-+ int len;
-+
-+/*
-+ * The device will buffer a lot of deltas. This can lead to a lot of
-+ * latency. To avoid this, we will empty the buffer every time.
-+ * It's possible the device may report only changed entries, so we
-+ * must process all of the frames to avoid dropping buttons (for example).
-+ */
-+ while ((len = read(fd, data_buf, data_buf_size)) == data_buf_size) {
-+
-+ struct hid_item *h;
-+
-+ for (h = hids ; h; h = h->next) {
-+ int d = hid_get_data(data_buf + data_buf_offset, h);
-+ int page = HID_PAGE(h->usage);
-+ int usage = HID_USAGE(h->usage);
-+
-+ int which_axis;
-+ if (page == HUP_GENERIC_DESKTOP) {
-+ switch (usage) {
-+ case HUG_X:
-+ case HUG_RX: which_axis = 0; break;
-+ case HUG_Y:
-+ case HUG_RY: which_axis = 1; break;
-+ case HUG_Z:
-+ case HUG_RZ: which_axis = 2; break;
-+ }
-+ axis[which_axis] = d;
-+ } else if (page == HUP_BUTTON) {
-+ buttons &= ~ (1 << (usage - 1));
-+ buttons |= (d == h->logical_maximum)?1 << (usage - 1):0;
-+ }
-+ }
-+ }
-+
-+}
-+
-+void XWindow::initJoystick(const char *joystickName)
-+{
-+ stick= new usb_joystick(joystickName);
-+}
-+
-+boolean XWindow::joystick() const
-+{
-+ return (stick!=NULL)?stick->status:FALSE;
-+}
-+
-+void XWindow::getJoy(int &x, int &y) const
-+{
-+ stick->poll();
-+ x = (stick->axis[0]*stick->axis_scale[0])/10000 + stick->axis_const[0];
-+ y = (stick->axis[1]*stick->axis_scale[1])/10000 + stick->axis_const[1];
-+}
-+
-+unsigned long XWindow::getJoyButtons() const
-+{
-+ stick->poll();
-+ return stick->buttons;
-+}
-+
-+#endif
-+