diff options
author | blymn <blymn@pkgsrc.org> | 2002-09-24 12:49:10 +0000 |
---|---|---|
committer | blymn <blymn@pkgsrc.org> | 2002-09-24 12:49:10 +0000 |
commit | e7f30874f4b520b1c67bc84d1347680969fd0801 (patch) | |
tree | 11a5be3c5fc7fd7844908e64a2dfef06e167d263 /games/bzflag | |
parent | 0e2ecc2fd06989721c28ddf379d45a4b5df5ebb7 (diff) | |
download | pkgsrc-e7f30874f4b520b1c67bc84d1347680969fd0801.tar.gz |
bzflag is an OpenGL based multiplayer tank game.
Diffstat (limited to 'games/bzflag')
-rw-r--r-- | games/bzflag/DESCR | 2 | ||||
-rw-r--r-- | games/bzflag/Makefile | 29 | ||||
-rw-r--r-- | games/bzflag/PLIST | 58 | ||||
-rw-r--r-- | games/bzflag/distinfo | 17 | ||||
-rw-r--r-- | games/bzflag/patches/patch-aa | 20 | ||||
-rw-r--r-- | games/bzflag/patches/patch-ab | 123 | ||||
-rw-r--r-- | games/bzflag/patches/patch-ac | 219 | ||||
-rw-r--r-- | games/bzflag/patches/patch-ad | 57 | ||||
-rw-r--r-- | games/bzflag/patches/patch-ae | 482 | ||||
-rw-r--r-- | games/bzflag/patches/patch-af | 84 | ||||
-rw-r--r-- | games/bzflag/patches/patch-ag | 67 | ||||
-rw-r--r-- | games/bzflag/patches/patch-ah | 44 | ||||
-rw-r--r-- | games/bzflag/patches/patch-ai | 45 | ||||
-rw-r--r-- | games/bzflag/patches/patch-aj | 30 | ||||
-rw-r--r-- | games/bzflag/patches/patch-ak | 17 | ||||
-rw-r--r-- | games/bzflag/patches/patch-al | 21 | ||||
-rw-r--r-- | games/bzflag/patches/patch-am | 25 |
17 files changed, 1340 insertions, 0 deletions
diff --git a/games/bzflag/DESCR b/games/bzflag/DESCR new file mode 100644 index 00000000000..d79bac96df5 --- /dev/null +++ b/games/bzflag/DESCR @@ -0,0 +1,2 @@ +bzflag is a classic OpenGL tank game that originated on SGI machines now +it is open for all to enjoy. Pick up flags and shoot other tanks. diff --git a/games/bzflag/Makefile b/games/bzflag/Makefile new file mode 100644 index 00000000000..a5217923405 --- /dev/null +++ b/games/bzflag/Makefile @@ -0,0 +1,29 @@ +# $NetBSD: Makefile,v 1.1.1.1 2002/09/24 12:49:10 blymn Exp $ + +DISTNAME= bzflag-1.7e6 +PKGNAME= ${DISTNAME:S/e/.5./} +CATEGORIES= games x11 +MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=bzflag/} +EXTRACT_SUFX= .tgz + +MAINTAINER= blymn@baea.com.au +HOMEPAGE= http://www.bzflag.org/ +COMMENT= OpenGL tank game + +USE_X11BASE= yes +USE_BUILDLINK2= yes +USE_GMAKE= yes +MAKE_ENV+= X11BASE=${X11BASE} INSTALL_PREFIX=${X11PREFIX} + +ALL_TARGET= netbsd default + +do-install: + ${INSTALL_PROGRAM} ${WRKSRC}/bin/bzflag ${PREFIX}/bin + ${INSTALL_PROGRAM} ${WRKSRC}/bin/bzfls ${PREFIX}/bin + ${INSTALL_PROGRAM} ${WRKSRC}/bin/bzfrelay ${PREFIX}/bin + ${INSTALL_PROGRAM} ${WRKSRC}/bin/bzfs ${PREFIX}/bin + ${INSTALL_DATA_DIR} ${PREFIX}/share/bzflag + ${CP} ${WRKSRC}/data/* ${PREFIX}/share/bzflag + +.include "../../graphics/Mesa/buildlink2.mk" +.include "../../mk/bsd.pkg.mk" diff --git a/games/bzflag/PLIST b/games/bzflag/PLIST new file mode 100644 index 00000000000..94bdc5377c7 --- /dev/null +++ b/games/bzflag/PLIST @@ -0,0 +1,58 @@ +@comment $NetBSD: PLIST,v 1.1.1.1 2002/09/24 12:49:10 blymn Exp $ +bin/bzflag +bin/bzfls +bin/bzfrelay +bin/bzfs +share/bzflag/Bzflag.fti +share/bzflag/Bzflag.ftr +share/bzflag/Bzfs.fti +share/bzflag/bbolt.rgb +share/bzflag/blaser.rgb +share/bzflag/boom.wav +share/bzflag/boxwall.rgb +share/bzflag/caution.rgb +share/bzflag/clouds.rgb +share/bzflag/explode1.rgb +share/bzflag/explosion.wav +share/bzflag/fire.wav +share/bzflag/fixedbr.rgb +share/bzflag/fixedmr.rgb +share/bzflag/flag.rgb +share/bzflag/flag_alert.wav +share/bzflag/flag_drop.wav +share/bzflag/flag_grab.wav +share/bzflag/flag_lost.wav +share/bzflag/flag_won.wav +share/bzflag/flage.rgb +share/bzflag/gbolt.rgb +share/bzflag/glaser.rgb +share/bzflag/ground.rgb +share/bzflag/helvbi.rgb +share/bzflag/helvbr.rgb +share/bzflag/jump.wav +share/bzflag/killteam.wav +share/bzflag/land.wav +share/bzflag/laser.wav +share/bzflag/lock.wav +share/bzflag/missile.rgb +share/bzflag/missile.wav +share/bzflag/mountain.rgb +share/bzflag/panel.rgb +share/bzflag/pbolt.rgb +share/bzflag/phantom.wav +share/bzflag/plaser.rgb +share/bzflag/pop.wav +share/bzflag/pyrwall.rgb +share/bzflag/rbolt.rgb +share/bzflag/ricochet.wav +share/bzflag/rlaser.rgb +share/bzflag/roof.rgb +share/bzflag/shock.wav +share/bzflag/teleport.wav +share/bzflag/timesbi.rgb +share/bzflag/timesbr.rgb +share/bzflag/title.rgb +share/bzflag/wall.rgb +share/bzflag/ybolt.rgb +share/bzflag/ylaser.rgb +@dirrm share/bzflag diff --git a/games/bzflag/distinfo b/games/bzflag/distinfo new file mode 100644 index 00000000000..3b0b5e5b85b --- /dev/null +++ b/games/bzflag/distinfo @@ -0,0 +1,17 @@ +$NetBSD: distinfo,v 1.1.1.1 2002/09/24 12:49:10 blymn Exp $ + +SHA1 (bzflag-1.7e6.tgz) = 283a5f4eae87c43a1a7772e9ca40048df0e84bda +Size (bzflag-1.7e6.tgz) = 2428811 bytes +SHA1 (patch-aa) = b96af1e1a6a5ecbf1cde1007fc4fd06f7d005c42 +SHA1 (patch-ab) = 3a28e7be95b39ffbe25c27d77e01b87926ec3d26 +SHA1 (patch-ac) = 81d06903bd4e7cf433b070562647069247c04b8a +SHA1 (patch-ad) = 1393333c31a1be69a8a24f7d18e01539651356f8 +SHA1 (patch-ae) = 9c6f5df5f85c5aa8dcd12506bd7129dfbac38acf +SHA1 (patch-af) = e604489f687ba6858ed7916eed9f63e2d068929b +SHA1 (patch-ag) = e5f539e70cfb527d0faa05bfe2afb777242df6bb +SHA1 (patch-ah) = c997a123696e7a26ef8f39950f8bea4a7eaf6ebc +SHA1 (patch-ai) = 50bfe81735a71abb69b203272d28312a93c0eaaf +SHA1 (patch-aj) = 2c88ce8add674a9a28d686bd5f7b1d2958f3084f +SHA1 (patch-ak) = abdef8fe4c4efe622540b3f2da0b6153dbf5cdab +SHA1 (patch-al) = 586abdf3c690162adb861a00147038bdce4b5543 +SHA1 (patch-am) = f82c2fa9ad22beec209e789ecb463caf58272004 diff --git a/games/bzflag/patches/patch-aa b/games/bzflag/patches/patch-aa new file mode 100644 index 00000000000..53d50162146 --- /dev/null +++ b/games/bzflag/patches/patch-aa @@ -0,0 +1,20 @@ +$NetBSD: patch-aa,v 1.1.1.1 2002/09/24 12:49:10 blymn Exp $ + +--- Makefile.orig Sun Sep 22 22:24:02 2002 ++++ Makefile +@@ -33,6 +33,7 @@ AVAILTARGETS = \ + linux-ppc \ + solaris-cc \ + solaris-gcc \ ++ netbsd \ + $(NULL) + + config-sys: +@@ -42,6 +43,7 @@ config-sys: + @echo " make linux" + @echo " make linux-i386" + @echo " make linux-ppc" ++ @echo " make netbsd" + @echo " make solaris-cc" + @echo " make solaris-gcc" + @echo " make win32" diff --git a/games/bzflag/patches/patch-ab b/games/bzflag/patches/patch-ab new file mode 100644 index 00000000000..ff8f3819b41 --- /dev/null +++ b/games/bzflag/patches/patch-ab @@ -0,0 +1,123 @@ +$NetBSD: patch-ab,v 1.1.1.1 2002/09/24 12:49:11 blymn Exp $ + +--- configs/config-netbsd.orig Mon Sep 23 15:26:33 2002 ++++ configs/config-netbsd +@@ -0,0 +1,118 @@ ++# bzflag ++# Copyright (c) 1993 - 2002 Tim Riker ++# ++# 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. ++ ++# ++# configuration for generic netbsd ++# ++CONFIG = netbsd ++ ++# ++# use XF86 vidmode extension (comment out to disable) ++# ++XF86VIDMODE_DEF = -DXF86VIDMODE_EXT ++XF86VIDMODE_LIB = -lXxf86vm ++ ++# ++# use XInput extension for joystick support (comment out to disable) ++# ++JOYSTICK_DEF = -DXIJOYSTICK ++JOYSTICK_LIB = -lXi ++ ++# ++# accumulate extension definitions and libs ++# ++XEXT_DEF = $(XF86VIDMODE_DEF) $(JOYSTICK_DEF) ++XEXT_LIB = $(XF86VIDMODE_LIB) $(JOYSTICK_LIB) ++ ++# ++# install locations ++# ++INSTALL_DATA_DIR = $(X11PREFIX)/share/bzflag ++ ++# ++# tools ++# ++AR = /usr/bin/ar cru ++CC = /usr/bin/gcc ++CXX = /usr/bin/g++ ++CD = cd ++CP = /bin/cp ++LD = /usr/bin/ld ++MKDIR = /bin/mkdir ++NROFF = /usr/bin/nroff ++RM = /bin/rm -f ++RMR = $(RM) -r ++SHELL = /bin/sh ++ECHO = echo ++ ++# ++# compiler definitions ++# ++PCDEFS = -D_BSD_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED -DHALF_RATE_AUDIO $(XEXT_DEF) ++PCXXDEFS = -D_BSD_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED -DHALF_RATE_AUDIO $(XEXT_DEF) ++ ++# ++# compiler options ++# ++PCOPTS = -Wall -W -ansi $(ACOPTS) ++PCXXOPTS = -Wall -W -fno-exceptions -fno-rtti $(ACXXOPTS) ++COPT = -DNDEBUG -O2 ++CXXOPT = -DNDEBUG -O2 -ffast-math -fomit-frame-pointer -fnonnull-objects \ ++ -fexpensive-optimizations ++CDEBUG = -DDEBUG -g ++CXXDEBUG = -DDEBUG -g ++CWOFF = ++CXXWOFF = ++ ++# ++# search paths ++# ++PCINCS = -I/usr/include -I$(X11BASE)/include ++PCXXINCS = -I/usr/include -I$(X11BASE)/include ++ ++# ++# linker options ++# ++PLDOPTS = -L$(X11BASE)/lib -Wl,-R$(X11BASE)/lib ++ ++# ++# dirt ++# ++PDIRT = *.[eou] a.out core ar.tmp.* ++ ++# ++# libraries ++# ++AUDIO_LIBS = \ ++ $(NULL) ++ ++DISPLAY_LIBS = \ ++ $(NULL) ++ ++GL_LIBS = \ ++ -lGLU \ ++ -lGL \ ++ $(NULL) ++ ++IMAGE_LIBS = \ ++ $(NULL) ++ ++NETWORK_LIBS = \ ++ $(NULL) ++ ++WINDOW_LIBS = \ ++ $(XEXT_LIB) \ ++ -lXext \ ++ -lX11 \ ++ -lossaudio \ ++ -lm \ ++ $(NULL) ++ diff --git a/games/bzflag/patches/patch-ac b/games/bzflag/patches/patch-ac new file mode 100644 index 00000000000..a444080ffcd --- /dev/null +++ b/games/bzflag/patches/patch-ac @@ -0,0 +1,219 @@ +$NetBSD: patch-ac,v 1.1.1.1 2002/09/24 12:49:12 blymn Exp $ + +--- src/platform/NetBSDDisplay.cxx.orig Sun Sep 22 22:29:02 2002 ++++ src/platform/NetBSDDisplay.cxx +@@ -0,0 +1,214 @@ ++/* bzflag ++ * Copyright (c) 1993 - 2002 Tim Riker ++ * ++ * 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. ++ */ ++ ++#include "NetBSDDisplay.h" ++#include "XWindow.h" ++ ++#if defined(USE_XF86VIDMODE_EXT) ++#include <stdio.h> ++ ++// evaluates to the (approximate) vertical retrace speed of modeinfo _r ++#define getRetrace(_r) ((int)(0.5f + (1000.0f * (_r)->dotclock) / \ ++ ((_r)->htotal * (_r)->vtotal))) ++ ++static int resolutionCompare(const void* _a, const void* _b) ++{ ++ const XF86VidModeModeInfo* a = *((const XF86VidModeModeInfo**)_a); ++ const XF86VidModeModeInfo* b = *((const XF86VidModeModeInfo**)_b); ++ ++ // test the stuff we actually care about ++ if (a->hdisplay < b->hdisplay) return -1; ++ if (a->hdisplay > b->hdisplay) return 1; ++ if (a->vdisplay < b->vdisplay) return -1; ++ if (a->vdisplay > b->vdisplay) return 1; ++ if (getRetrace(a) < getRetrace(b)) return -1; ++ if (getRetrace(a) > getRetrace(b)) return 1; ++ ++ // other info can be ordered arbitrarily ++ return 0; ++} ++ ++// ++// NetBSDDisplayMode ++// ++ ++NetBSDDisplayMode::NetBSDDisplayMode() : display(NULL), ++ numResolutions(0), ++ lastResolution(-1), ++ resolutions(NULL), ++ origNumResolutions(0), ++ origResolutions(NULL) ++{ ++ // do nothing ++} ++ ++NetBSDDisplayMode::~NetBSDDisplayMode() ++{ ++ delete[] resolutions; ++ if (origResolutions) ++ XFree(origResolutions); ++} ++ ++XDisplayMode::ResInfo** NetBSDDisplayMode::init(XDisplay* _display, ++ int& numModes, int& currentMode) ++{ ++ int i, eventbase, errorbase; ++ ++ // save display for later ++ display = _display; ++ ++ // Check if we have the XF86 vidmode extension ++ if (!XF86VidModeQueryExtension(display->getRep()->getDisplay(), ++ &eventbase, &errorbase)) ++ return NULL; ++ ++ // get available resolutions ++ if (!XF86VidModeGetAllModeLines(display->getRep()->getDisplay(), ++ display->getRep()->getScreen(), ++ &numResolutions, &origResolutions)) ++ return NULL; ++ ++ // get current resolution ++ int dotclock; ++ XF86VidModeModeLine mode; ++ XF86VidModeGetModeLine(display->getRep()->getDisplay(), ++ display->getRep()->getScreen(), ++ &dotclock, &mode); ++ ++ // make a copy of the original data ++ origNumResolutions = numResolutions; ++ resolutions = new XF86VidModeModeInfo*[numResolutions]; ++ for (i = 0; i < numResolutions; i++) ++ resolutions[i] = origResolutions[i]; ++ ++ // sort resolutions ++ qsort(resolutions, numResolutions, sizeof(resolutions[0]), resolutionCompare); ++ ++ // find current resolution in the available resolution list ++ int current; ++ for (current = 0; current < numResolutions; current++) { ++ const XF86VidModeModeInfo* r = resolutions[current]; ++ if (dotclock == (int)r->dotclock && ++ mode.hdisplay == r->hdisplay && ++ mode.hsyncstart == r->hsyncstart && ++ mode.hsyncend == r->hsyncend && ++ mode.htotal == r->htotal && ++ mode.vdisplay == r->vdisplay && ++ mode.vsyncstart == r->vsyncstart && ++ mode.vsyncend == r->vsyncend && ++ mode.vtotal == r->vtotal && ++ mode.flags == r->flags) ++ break; ++ } ++ ++ // no switching if current mode not found ++ if (current == numResolutions) ++ return NULL; ++ ++ // compress out modes that are (effectively) duplicates. never ++ // remove the current mode. ++ for (i = 0; i < numResolutions - 1; ) { ++ if (resolutionCompare(resolutions + i, resolutions + i + 1) == 0) { ++ // is next resolution the current mode? if so then move it down ++ // so we don't blow it away. ++ if (current == i + 1) ++ resolutions[i] = resolutions[i + 1]; ++ ++ // move remaining resolutions down (overwriting the one after i) ++ for (int j = i + 2; j < numResolutions; j++) ++ resolutions[j - 1] = resolutions[j]; ++ ++ // do we move the current resolution down too? ++ if (current > i) ++ current--; ++ ++ // now one less resolution ++ numResolutions--; ++ } ++ else { ++ i++; ++ } ++ } ++ ++ // make ResInfo list ++ char name[80]; ++ ResInfo** resInfo = new ResInfo*[numResolutions]; ++ for (i = 0; i < numResolutions; i++) { ++ const XF86VidModeModeInfo* r = resolutions[i]; ++ sprintf(name, "%dx%d @%d", r->hdisplay, r->vdisplay, getRetrace(r)); ++ resInfo[i] = new ResInfo(name, r->hdisplay, r->vdisplay, getRetrace(r)); ++ } ++ ++ // return modes ++ numModes = numResolutions; ++ currentMode = current; ++ lastResolution = current; ++ return resInfo; ++} ++ ++boolean NetBSDDisplayMode::set(int index) ++{ ++ return doSet(index, True); ++} ++ ++boolean NetBSDDisplayMode::setDefault(int index) ++{ ++ return doSet(index, False); ++} ++ ++boolean NetBSDDisplayMode::doSet(int index, boolean position) ++{ ++ // ignore attempts to set video format to current format. ++ // normally this only happens when restoring the default ++ // format, when BzfDisplay deliberately forces the change. ++ // that's useful for win32 where the OS knows the right ++ // format and will ignore calls to switch the current ++ // format. however, irix isn't so clever and may cause ++ // the display to flicker even when the format isn't ++ // really changing. ++ if (index == lastResolution || numResolutions <= 1) ++ return True; ++ ++ // deactivate windows before resolution change. if we don't do this ++ // then the app will almost certainly crash in the OpenGL driver. ++ XWindow::deactivateAll(); ++ ++ // change resolution ++ if (XF86VidModeSwitchToMode(display->getRep()->getDisplay(), ++ display->getRep()->getScreen(), ++ resolutions[index])) { ++ if (position) { ++ // kludge for accelerated GLX. when we set the view port after ++ // changing the resolution just before quiting, GLX does not ++ // release the display to X server control. or something like ++ // that. the effect is that you see the game window still on ++ // the screen but maybe shifted around and you can't see any of ++ // the other windows. without this code, a workaround for the ++ // problem is ctrl_alt_+ or ctrl_alt_- to force a resize. ++ XF86VidModeSetViewPort(display->getRep()->getDisplay(), ++ display->getRep()->getScreen(), 0, 0); ++ } ++ XSync(display->getRep()->getDisplay(), False); ++ lastResolution = index; ++ ++ // reactivate previously deactivated window after change ++ XWindow::reactivateAll(); ++ return True; ++ } ++ ++ // reactivate previously deactivated window after change ++ XWindow::reactivateAll(); ++ return False; ++} ++ ++#endif ++// ex: shiftwidth=2 tabstop=8 diff --git a/games/bzflag/patches/patch-ad b/games/bzflag/patches/patch-ad new file mode 100644 index 00000000000..401c58a4300 --- /dev/null +++ b/games/bzflag/patches/patch-ad @@ -0,0 +1,57 @@ +$NetBSD: patch-ad,v 1.1.1.1 2002/09/24 12:49:12 blymn Exp $ + +--- src/platform/NetBSDDisplay.h.orig Sun Sep 22 22:29:02 2002 ++++ src/platform/NetBSDDisplay.h +@@ -0,0 +1,52 @@ ++/* bzflag ++ * Copyright (c) 1993 - 2002 Tim Riker ++ * ++ * 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. ++ */ ++ ++/* NetBSDDisplay: ++ * An X display with XFree86 vidmode extension ++ */ ++ ++#ifndef BZF_NETBSDDISPLAY_H ++#define BZF_NETBSDDISPLAY_H ++ ++#include "XDisplay.h" ++#if defined(XF86VIDMODE_EXT) ++#define USE_XF86VIDMODE_EXT ++#define private c_private ++#include <X11/extensions/xf86vmode.h> ++#undef private ++#endif ++ ++class NetBSDDisplayMode : public XDisplayMode { ++ public: ++#if defined(USE_XF86VIDMODE_EXT) ++ NetBSDDisplayMode(); ++ ~NetBSDDisplayMode(); ++ ++ ResInfo** init(XDisplay* owner, int& num, int& current); ++ boolean set(int); ++ boolean setDefault(int); ++ ++ private: ++ boolean doSet(int, boolean position); ++ ++ private: ++ XDisplay* display; ++ int numResolutions; ++ int lastResolution; ++ XF86VidModeModeInfo** resolutions; ++ int origNumResolutions; ++ XF86VidModeModeInfo** origResolutions; ++#endif ++}; ++ ++#endif // BZF_NETBSDDISPLAY_H ++// ex: shiftwidth=2 tabstop=8 diff --git a/games/bzflag/patches/patch-ae b/games/bzflag/patches/patch-ae new file mode 100644 index 00000000000..7683bae27b5 --- /dev/null +++ b/games/bzflag/patches/patch-ae @@ -0,0 +1,482 @@ +$NetBSD: patch-ae,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- src/platform/NetBSDMedia.cxx.orig Sun Sep 22 22:29:02 2002 ++++ src/platform/NetBSDMedia.cxx +@@ -0,0 +1,477 @@ ++/* bzflag ++ * Copyright (c) 1993 - 2002 Tim Riker ++ * ++ * 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. ++ */ ++ ++#include "NetBSDMedia.h" ++#include <math.h> ++#include <fcntl.h> ++#ifdef BSD ++#include <machine/endian.h> ++#else ++#ifdef __NetBSD__ ++#include <sys/endian.h> ++#else ++#include <endian.h> ++#endif ++#endif ++#include <sys/time.h> ++#include <sys/types.h> ++#include <unistd.h> ++#include <sys/wait.h> ++#include "bzsignal.h" ++#ifdef __NetBSD__ ++#include <soundcard.h> ++#else ++#include <sys/soundcard.h> ++#endif ++#include <sys/ioctl.h> ++#include <TimeKeeper.h> ++#include <errno.h> ++#include <string.h> ++ ++#ifdef HALF_RATE_AUDIO ++static const int defaultAudioRate=11025; ++#else ++static const int defaultAudioRate=22050; ++#endif ++ ++// ++// NetBSDMedia ++// ++ ++NetBSDMedia::NetBSDMedia() : BzfMedia(), audioReady(False), ++ audioPortFd(-1), ++ queueIn(-1), queueOut(-1), ++ outputBuffer(NULL), ++ childProcID(0), ++ audio8Bit(False), ++ getospaceBroken(False) ++{ ++ // do nothing ++} ++ ++NetBSDMedia::~NetBSDMedia() ++{ ++ // do nothing ++} ++ ++double NetBSDMedia::getTime() ++{ ++ struct timeval tv; ++ gettimeofday(&tv, 0); ++ return (double)tv.tv_sec + 1.0e-6 * (double)tv.tv_usec; ++} ++ ++double NetBSDMedia::stopwatch(boolean start) ++{ ++ if (start) { ++ stopwatchTime = getTime(); ++ return 0.0; ++ } ++ return getTime() - stopwatchTime; ++} ++ ++void NetBSDMedia::sleep(float timeInSeconds) ++{ ++ struct timeval tv; ++ tv.tv_sec = (long)timeInSeconds; ++ tv.tv_usec = (long)(1.0e6 * (timeInSeconds - tv.tv_sec)); ++ select(0, NULL, NULL, NULL, &tv); ++} ++ ++boolean NetBSDMedia::openAudio() ++{ ++ // don't re-initialize ++ if (audioReady) return False; ++ ++ // check for and open audio hardware ++ if (!checkForAudioHardware() || !openAudioHardware()) return False; ++ ++ // open communication channel (FIFO pipe). close on exec. ++ int fd[2]; ++ if (pipe(fd)<0) { ++ closeAudio(); ++ return False; ++ } ++ queueIn = fd[1]; ++ queueOut = fd[0]; ++ fcntl(queueIn, F_SETFL, fcntl(queueIn, F_GETFL, 0) | O_NDELAY); ++ fcntl(queueOut, F_SETFL, fcntl(queueOut, F_GETFL, 0) | O_NDELAY); ++ fcntl(queueIn, F_SETFD, fcntl(queueIn, F_GETFD, 0) | FD_CLOEXEC); ++ fcntl(queueOut, F_SETFD, fcntl(queueOut, F_GETFD, 0) | FD_CLOEXEC); ++ ++ // compute maxFd for use in select() call ++ maxFd = queueOut; ++ if (maxFd<audioPortFd) maxFd = audioPortFd; ++ maxFd++; ++ ++ // make an output buffer ++ outputBuffer = new short[audioBufferSize]; ++ ++ // Set default no thread ++ childProcID=0; ++ ++ // ready to go ++ audioReady = True; ++ return True; ++} ++ ++boolean NetBSDMedia::checkForAudioHardware() ++{ ++ boolean flag=False; ++ if (!access("/dev/audio", W_OK)) flag=True; ++ if (!access("/dev/sound", W_OK)) flag=True; ++ return flag; ++} ++ ++boolean NetBSDMedia::openIoctl( ++ int cmd, void* value, boolean req) ++{ ++ if (audioPortFd == -1) ++ return False; ++ ++ if (ioctl(audioPortFd, cmd, value) < 0) { ++ fprintf(stderr, "audio ioctl failed (cmd %x, err %d)... ", cmd, errno); ++ if (req) { ++ close(audioPortFd); ++ audioPortFd = -1; ++ fprintf(stderr, "giving up on audio\n"); ++ } ++ else { ++ fprintf(stderr, "ignored\n"); ++ } ++ return False; ++ } ++ return True; ++} ++ ++static const int NumChunks = 4; ++ ++boolean NetBSDMedia::openAudioHardware() ++{ ++ int format, n; ++ ++ // what's the audio format? ++#if BYTE_ORDER == BIG_ENDIAN ++ format = AFMT_S16_BE; ++#else ++ format = AFMT_S16_LE; ++#endif ++ ++ // what the frequency? ++ audioOutputRate = defaultAudioRate; ++ ++ // how big a fragment to use? we want to hold at around 1/10th of ++ // a second. ++ int fragmentSize = (int)(0.08f * (float)audioOutputRate); ++ n = 0; ++ while ((1 << n) < fragmentSize) ++ ++n; ++ ++ // samples are two bytes each and we're in stereo so quadruple the size ++ fragmentSize = n + 2; ++ ++ // now how many fragments and what's the low water mark (in fragments)? ++ int fragmentInfo = (NumChunks << 16) | fragmentSize; ++ audioLowWaterMark = 2; ++ ++ // open device (but don't wait for it) ++ audioPortFd = open("/dev/audio", O_WRONLY | O_NDELAY, 0); ++ if (audioPortFd == -1) { ++ audioPortFd = open("/dev/sound", O_WRONLY | O_NDELAY, 0); ++ if (audioPortFd == -1) { ++ fprintf(stderr, "Failed to open audio device /dev/audio or /dev/sound (%d)\n", errno); ++ return False; ++ } ++ } ++ ++ // back to blocking I/O ++ fcntl(audioPortFd, F_SETFL, fcntl(audioPortFd, F_GETFL, 0) & ~O_NDELAY); ++ ++ /* close audio on exec so launched server doesn't hold sound device */ ++ fcntl(audioPortFd, F_SETFD, fcntl(audioPortFd, F_GETFD) | FD_CLOEXEC); ++ ++ // initialize device ++ openIoctl(SNDCTL_DSP_RESET, 0); ++ n = fragmentInfo; ++ noSetFragment = false; ++ if (!openIoctl(SNDCTL_DSP_SETFRAGMENT, &n, False)) { ++ // this is not good. we can't set the size of the fragment ++ // buffers. we'd like something short to minimize latencies ++ // and the default is probably too long. we've got two ++ // options here: accept the latency or try to force the ++ // driver to play partial fragments. we'll try the later ++ // unless BZF_AUDIO_NOPOST is in the environment ++ if (!getenv("BZF_AUDIO_NOPOST")) ++ noSetFragment = true; ++ } ++ n = format; ++ openIoctl(SNDCTL_DSP_SETFMT, &n, False); ++ if (n != format) { ++ audio8Bit = True; ++ n = AFMT_U8; ++ openIoctl(SNDCTL_DSP_SETFMT, &n); ++ } ++ n = 1; ++ openIoctl(SNDCTL_DSP_STEREO, &n); ++ n = defaultAudioRate; ++ openIoctl(SNDCTL_DSP_SPEED, &n); ++ ++ // set audioBufferSize, which is the number of samples (not bytes) ++ // in each fragment. there are two bytes per sample so divide the ++ // fragment size by two unless we're in audio8Bit mode. also, if ++ // we couldn't set the fragment size then force the buffer size to ++ // the size we would've asked for. we'll force the buffer to be ++ // flushed after we write that much data to keep latency low. ++ if (noSetFragment || ++ !openIoctl(SNDCTL_DSP_GETBLKSIZE, &audioBufferSize, False) || ++ audioBufferSize > (1 << fragmentSize)) { ++ audioBufferSize = 1 << fragmentSize; ++ noSetFragment = true; ++ } ++ if (!audio8Bit) ++ audioBufferSize >>= 1; ++ ++ // SNDCTL_DSP_GETOSPACE not supported on all platforms. check if ++ // it fails here and, if so, do a workaround by using the wall ++ // clock. *shudder* ++ if (audioPortFd != -1) { ++ audio_buf_info info; ++ if (!openIoctl(SNDCTL_DSP_GETOSPACE, &info, False)) { ++ getospaceBroken = True; ++ chunksPending = 0; ++ chunksPerSecond = (double)getAudioOutputRate() / ++ (double)getAudioBufferChunkSize(); ++ } ++ } ++ ++ return (audioPortFd != -1); ++} ++ ++void NetBSDMedia::closeAudio() ++{ ++ delete [] outputBuffer; ++ if (audioPortFd>=0) close(audioPortFd); ++ if (queueIn!=-1) close(queueIn); ++ if (queueOut!=-1) close(queueOut); ++ audioReady=False; ++ audioPortFd=-1; ++ queueIn=-1; ++ queueOut=-1; ++ outputBuffer=0; ++} ++ ++boolean NetBSDMedia::startAudioThread( ++ void (*proc)(void*), void* data) ++{ ++ // if no audio thread then just call proc and return ++ if (!hasAudioThread()) { ++ proc(data); ++ return True; ++ } ++ ++ // has an audio thread so fork and call proc ++ if (childProcID) return True; ++ if ((childProcID=fork()) > 0) { ++ close(queueOut); ++ close(audioPortFd); ++ return True; ++ } ++ else if (childProcID < 0) { ++ return False; ++ } ++ close(queueIn); ++ proc(data); ++ exit(0); ++} ++ ++void NetBSDMedia::stopAudioThread() ++{ ++ if (childProcID != 0) kill(childProcID, SIGTERM); ++ childProcID=0; ++} ++ ++boolean NetBSDMedia::hasAudioThread() const ++{ ++#if defined(NO_AUDIO_THREAD) ++ return False; ++#else ++ return True; ++#endif ++} ++ ++void NetBSDMedia::audioThreadInit(void*) ++{ ++} ++ ++void NetBSDMedia::writeSoundCommand(const void* cmd, int len) ++{ ++ if (!audioReady) return; ++ write(queueIn, cmd, len); ++} ++ ++boolean NetBSDMedia::readSoundCommand(void* cmd, int len) ++{ ++ return (read(queueOut, cmd, len)==len); ++} ++ ++int NetBSDMedia::getAudioOutputRate() const ++{ ++ return audioOutputRate; ++} ++ ++int NetBSDMedia::getAudioBufferSize() const ++{ ++ return NumChunks*(audioBufferSize>>1); ++} ++ ++int NetBSDMedia::getAudioBufferChunkSize() const ++{ ++ return audioBufferSize>>1; ++} ++ ++boolean NetBSDMedia::isAudioTooEmpty() const ++{ ++ if (getospaceBroken) { ++ if (chunksPending > 0) { ++ // get time elapsed since chunkTime ++ const double dt = getTime() - chunkTime; ++ ++ // how many chunks could've played in the elapsed time? ++ const int numChunks = (int)(dt * chunksPerSecond); ++ ++ // remove pending chunks ++ NetBSDMedia* self = (NetBSDMedia*)this; ++ self->chunksPending -= numChunks; ++ if (chunksPending < 0) ++ self->chunksPending = 0; ++ else ++ self->chunkTime += (double)numChunks / chunksPerSecond; ++ } ++ return chunksPending < audioLowWaterMark; ++ } ++ else { ++ audio_buf_info info; ++ if (ioctl(audioPortFd, SNDCTL_DSP_GETOSPACE, &info) < 0) ++ return False; ++ return info.fragments > info.fragstotal - audioLowWaterMark; ++ } ++} ++ ++void NetBSDMedia::writeAudioFrames8Bit( ++ const float* samples, int numFrames) ++{ ++ int numSamples = 2 * numFrames; ++ int limit; ++ char *smOutputBuffer; ++ ++ smOutputBuffer=(char*)outputBuffer; ++ while (numSamples > 0) { ++ if (numSamples>audioBufferSize) limit=audioBufferSize; ++ else limit=numSamples; ++ for (int j = 0; j < limit; j++) { ++ if (samples[j] <= -32767.0) smOutputBuffer[j] = 0; ++ else if (samples[j] >= 32767.0) smOutputBuffer[j] = 255; ++ else smOutputBuffer[j] = char((samples[j]+32767)/257); ++ } ++ ++ // fill out the chunk (we never write a partial chunk) ++ if (limit < audioBufferSize) { ++ for (int j = limit; j < audioBufferSize; ++j) ++ smOutputBuffer[j] = 127; ++ limit = audioBufferSize; ++ } ++ ++ write(audioPortFd, smOutputBuffer, limit); ++ samples += limit; ++ numSamples -= limit; ++ } ++} ++ ++void NetBSDMedia::writeAudioFrames16Bit( ++ const float* samples, int numFrames) ++{ ++ int numSamples = 2 * numFrames; ++ int limit; ++ ++ while (numSamples > 0) { ++ if (numSamples>audioBufferSize) limit=audioBufferSize; ++ else limit=numSamples; ++ for (int j = 0; j < limit; j++) { ++ if (samples[j] < -32767.0) outputBuffer[j] = -32767; ++ else if (samples[j] > 32767.0) outputBuffer[j] = 32767; ++ else outputBuffer[j] = short(samples[j]); ++ } ++ ++ // fill out the chunk (we never write a partial chunk) ++ if (limit < audioBufferSize) { ++ for (int j = limit; j < audioBufferSize; ++j) ++ outputBuffer[j] = 0; ++ limit = audioBufferSize; ++ } ++ ++ write(audioPortFd, outputBuffer, 2*limit); ++ samples += limit; ++ numSamples -= limit; ++ } ++} ++ ++void NetBSDMedia::writeAudioFrames( ++ const float* samples, int numFrames) ++{ ++ if (audio8Bit) writeAudioFrames8Bit(samples, numFrames); ++ else writeAudioFrames16Bit(samples, numFrames); ++ ++ // if we couldn't set the fragment size then force the driver ++ // to play the short buffer. ++ if (noSetFragment) { ++ int dummy = 0; ++ ioctl(audioPortFd, SNDCTL_DSP_POST, &dummy); ++ } ++ ++ if (getospaceBroken) { ++ if (chunksPending == 0) ++ chunkTime = getTime(); ++ chunksPending += (numFrames + getAudioBufferChunkSize() - 1) / ++ getAudioBufferChunkSize(); ++ } ++} ++ ++void NetBSDMedia::audioSleep( ++ boolean checkLowWater, double endTime) ++{ ++ fd_set commandSelectSet; ++ struct timeval tv; ++ ++ // To do both these operations at once, we need to poll. ++ if (checkLowWater) { ++ // start looping ++ TimeKeeper start = TimeKeeper::getCurrent(); ++ do { ++ // break if buffer has drained enough ++ if (isAudioTooEmpty()) break; ++ FD_ZERO(&commandSelectSet); ++ FD_SET(queueOut, &commandSelectSet); ++ tv.tv_sec=0; ++ tv.tv_usec=50000; ++ if (select(maxFd, &commandSelectSet, 0, 0, &tv)) break; ++ ++ } while (endTime<0.0 || (TimeKeeper::getCurrent()-start)<endTime); ++ } else { ++ FD_ZERO(&commandSelectSet); ++ FD_SET(queueOut, &commandSelectSet); ++ tv.tv_sec=int(endTime); ++ tv.tv_usec=int(1.0e6*(endTime-floor(endTime))); ++ ++ select(maxFd, &commandSelectSet, 0, 0, (endTime>=0.0)?&tv : 0); ++ } ++} ++// ex: shiftwidth=2 tabstop=8 diff --git a/games/bzflag/patches/patch-af b/games/bzflag/patches/patch-af new file mode 100644 index 00000000000..026b85ea883 --- /dev/null +++ b/games/bzflag/patches/patch-af @@ -0,0 +1,84 @@ +$NetBSD: patch-af,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- src/platform/NetBSDMedia.h.orig Sun Sep 22 22:29:02 2002 ++++ src/platform/NetBSDMedia.h +@@ -0,0 +1,79 @@ ++/* bzflag ++ * Copyright (c) 1993 - 2002 Tim Riker ++ * ++ * 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. ++ */ ++ ++/* NetBSDMedia: ++ * Media I/O on NetBSD ++ */ ++ ++#ifndef BZF_NETBSDMEDIA_H ++#define BZF_NETBSDMEDIA_H ++ ++#include "BzfMedia.h" ++#include <stdio.h> ++#include <unistd.h> ++ ++class NetBSDMedia : public BzfMedia { ++ public: ++ NetBSDMedia(); ++ ~NetBSDMedia(); ++ ++ double stopwatch(boolean); ++ void sleep(float); ++ boolean openAudio(); ++ void closeAudio(); ++ boolean startAudioThread(void (*)(void*), void*); ++ void stopAudioThread(); ++ boolean hasAudioThread() const; ++ void writeSoundCommand(const void*, int); ++ boolean readSoundCommand(void*, int); ++ int getAudioOutputRate() const; ++ int getAudioBufferSize() const; ++ int getAudioBufferChunkSize() const; ++ boolean isAudioTooEmpty() const; ++ void writeAudioFrames(const float* samples, int numFrames); ++ void audioSleep(boolean checkLowWater, double maxTime); ++ ++ private: ++ boolean checkForAudioHardware(); ++ boolean openAudioHardware(); ++ boolean openIoctl(int cmd, void* value, boolean req = True); ++ static void audioThreadInit(void*); ++ ++ void writeAudioFrames8Bit( ++ const float* samples, int numFrames); ++ void writeAudioFrames16Bit( ++ const float* samples, int numFrames); ++ ++ static double getTime(); ++ ++ private: ++ boolean audioReady; ++ int audioOutputRate; ++ int audioBufferSize; ++ int audioLowWaterMark; ++ int maxFd; ++ int audioPortFd; ++ int queueIn, queueOut; ++ short* outputBuffer; ++ pid_t childProcID; ++ double stopwatchTime; ++ boolean audio8Bit; ++ ++ boolean noSetFragment; ++ boolean getospaceBroken; ++ int chunksPending; ++ double chunkTime; ++ double chunksPerSecond; ++}; ++ ++#endif // BZF_NETBSDMEDIA_H ++// ex: shiftwidth=2 tabstop=8 diff --git a/games/bzflag/patches/patch-ag b/games/bzflag/patches/patch-ag new file mode 100644 index 00000000000..f552031bfb1 --- /dev/null +++ b/games/bzflag/patches/patch-ag @@ -0,0 +1,67 @@ +$NetBSD: patch-ag,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- src/platform/NetBSDPlatformFactory.cxx.orig Sun Sep 22 22:29:02 2002 ++++ src/platform/NetBSDPlatformFactory.cxx +@@ -0,0 +1,62 @@ ++/* bzflag ++ * Copyright (c) 1993 - 2002 Tim Riker ++ * ++ * 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. ++ */ ++ ++#include "NetBSDPlatformFactory.h" ++#include "NetBSDDisplay.h" ++#include "XVisual.h" ++#include "XWindow.h" ++#include "NetBSDMedia.h" ++ ++PlatformFactory* PlatformFactory::getInstance() ++{ ++ if (!instance) instance = new NetBSDPlatformFactory; ++ return instance; ++} ++ ++NetBSDPlatformFactory::NetBSDPlatformFactory() ++{ ++ // do nothing ++} ++ ++NetBSDPlatformFactory::~NetBSDPlatformFactory() ++{ ++ // do nothing ++} ++ ++BzfDisplay* NetBSDPlatformFactory::createDisplay( ++ const char* name, const char*) ++{ ++ XDisplay* display = new XDisplay(name, new NetBSDDisplayMode); ++ if (!display || !display->isValid()) { ++ delete display; ++ return NULL; ++ } ++ return display; ++} ++ ++BzfVisual* NetBSDPlatformFactory::createVisual( ++ const BzfDisplay* display) ++{ ++ return new XVisual((const XDisplay*)display); ++} ++ ++BzfWindow* NetBSDPlatformFactory::createWindow( ++ const BzfDisplay* display, BzfVisual* visual) ++{ ++ return new XWindow((const XDisplay*)display, (XVisual*)visual); ++} ++ ++BzfMedia* NetBSDPlatformFactory::createMedia() ++{ ++ return new NetBSDMedia; ++} ++// ex: shiftwidth=2 tabstop=8 diff --git a/games/bzflag/patches/patch-ah b/games/bzflag/patches/patch-ah new file mode 100644 index 00000000000..0b82193ada1 --- /dev/null +++ b/games/bzflag/patches/patch-ah @@ -0,0 +1,44 @@ +$NetBSD: patch-ah,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- src/platform/NetBSDPlatformFactory.h.orig Sun Sep 22 22:29:02 2002 ++++ src/platform/NetBSDPlatformFactory.h +@@ -0,0 +1,39 @@ ++/* bzflag ++ * Copyright (c) 1993 - 2002 Tim Riker ++ * ++ * 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. ++ */ ++ ++/* NetBSDPlatformFactory: ++ * Factory for NetBSD platform stuff. ++ */ ++ ++#ifndef BZF_NETBSD_PLATFORM_FACTORY_H ++#define BZF_NETBSD_PLATFORM_FACTORY_H ++ ++#include "PlatformFactory.h" ++ ++class NetBSDPlatformFactory : public PlatformFactory { ++ public: ++ NetBSDPlatformFactory(); ++ ~NetBSDPlatformFactory(); ++ ++ BzfDisplay* createDisplay(const char* name, const char*); ++ BzfVisual* createVisual(const BzfDisplay*); ++ BzfWindow* createWindow(const BzfDisplay*, BzfVisual*); ++ ++ private: ++ NetBSDPlatformFactory(const NetBSDPlatformFactory&); ++ NetBSDPlatformFactory& operator=(const NetBSDPlatformFactory&); ++ ++ BzfMedia* createMedia(); ++}; ++ ++#endif // BZF_NETBSD_PLATFORM_FACTORY_H ++// ex: shiftwidth=2 tabstop=8 diff --git a/games/bzflag/patches/patch-ai b/games/bzflag/patches/patch-ai new file mode 100644 index 00000000000..745ab48345a --- /dev/null +++ b/games/bzflag/patches/patch-ai @@ -0,0 +1,45 @@ +$NetBSD: patch-ai,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- include/common.h.orig Sun Sep 22 22:36:51 2002 ++++ include/common.h +@@ -22,6 +22,22 @@ + #include <sys/param.h> + #endif + ++#ifdef __NetBSD__ ++typedef unsigned long u_long; ++typedef unsigned short u_short; ++#include <sys/endian.h> ++#include <sys/types.h> ++#include <strings.h> ++#define O_NDELAY O_NONBLOCK /* compat */ ++ ++__BEGIN_DECLS ++int inet_aton(const char *, struct in_addr *); ++const char *hstrerror(int); ++int setenv(const char *, const char *, int); ++void unsetenv(const char *); ++__END_DECLS ++#endif ++ + #if defined(_WIN32) + // turn off bogus `this used in base member initialization list' + #pragma warning(disable: 4355) +@@ -57,7 +73,7 @@ const boolean False = 0; + const boolean True = !False; + + // some platforms don't have float versions of the math library +-#if defined(_old_linux_) || defined(_MACOSX_) || defined(sun) ++#if defined(_old_linux_) || defined(_MACOSX_) || defined(sun) || defined(__NetBSD__) + #define asinf (float)asin + #define atanf (float)atan + #define atan2f (float)atan2 +@@ -82,7 +98,7 @@ const boolean True = !False; + + #if !defined(_WIN32) & !defined(macintosh) + +-#ifndef BSD ++#if !defined(BSD) && !defined(__NetBSD__) + #include <values.h> + #endif + #include <sys/types.h> diff --git a/games/bzflag/patches/patch-aj b/games/bzflag/patches/patch-aj new file mode 100644 index 00000000000..9b3507e772e --- /dev/null +++ b/games/bzflag/patches/patch-aj @@ -0,0 +1,30 @@ +$NetBSD: patch-aj,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- include/network.h.orig Sun Sep 22 22:37:32 2002 ++++ include/network.h +@@ -38,10 +38,13 @@ + #undef TCP_NODELAY + #undef TCP_MAXSEG + #endif ++#ifdef __NetBSD__ ++#include <sys/endian.h> ++#endif + #include <netinet/tcp.h> + #include <arpa/inet.h> + #include <netdb.h> +-#if defined(_old_linux_) || (!defined(__linux__) && !defined(sun) && !defined(__FreeBSD__) && !defined(macintosh)) ++#if defined(_old_linux_) || (!defined(__linux__) && !defined(sun) && !defined(__FreeBSD__) && !defined(macintosh) && !defined(__NetBSD__)) + #include <bstring.h> + #endif + +@@ -69,6 +72,10 @@ + + #if defined(__FreeBSD__) && !defined(_MACOSX_) + #define AddrLen socklen_t ++#endif ++ ++#if defined(__NetBSD__) ++#define AddrLen socklen_t + #endif + + #if defined(sun) diff --git a/games/bzflag/patches/patch-ak b/games/bzflag/patches/patch-ak new file mode 100644 index 00000000000..5c10b06e919 --- /dev/null +++ b/games/bzflag/patches/patch-ak @@ -0,0 +1,17 @@ +$NetBSD: patch-ak,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- src/bzfrelay/bzfrelay.c.orig Sun Sep 22 22:41:45 2002 ++++ src/bzfrelay/bzfrelay.c +@@ -16,6 +16,12 @@ + * note that this program does not depend on any other bzflag files. + */ + ++#ifdef __NetBSD__ ++typedef unsigned long u_long; ++typedef unsigned short u_short; ++#define O_NDELAY O_NONBLOCK /* compat */ ++#endif ++ + #include <stdio.h> + #include <stdlib.h> + #include <stdarg.h> diff --git a/games/bzflag/patches/patch-al b/games/bzflag/patches/patch-al new file mode 100644 index 00000000000..b9a58b7ebe4 --- /dev/null +++ b/games/bzflag/patches/patch-al @@ -0,0 +1,21 @@ +$NetBSD: patch-al,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- src/bzflag/bzflag.cxx.orig Sun Sep 22 22:45:49 2002 ++++ src/bzflag/bzflag.cxx +@@ -473,14 +473,14 @@ static void parse(int argc, char** argv + resources.addValue("window", ""); + } + else if (strcmp(argv[i], "-3dfx") == 0 || strcmp(argv[i], "-3Dfx") == 0) { +-#if !defined(__linux__) ++#if !defined(__linux__) && !defined(__NetBSD__) + putenv("MESA_GLX_FX=fullscreen"); + #else + setenv("MESA_GLX_FX", "fullscreen", 1); + #endif + } + else if (strcmp(argv[i], "-no3dfx") == 0 || strcmp(argv[i], "-no3Dfx") == 0) { +-#if !defined(__linux__) ++#if !defined(__linux__) && !defined(__NetBSD__) + putenv("MESA_GLX_FX="); + #else + unsetenv("MESA_GLX_FX"); diff --git a/games/bzflag/patches/patch-am b/games/bzflag/patches/patch-am new file mode 100644 index 00000000000..d1269803a41 --- /dev/null +++ b/games/bzflag/patches/patch-am @@ -0,0 +1,25 @@ +$NetBSD: patch-am,v 1.1.1.1 2002/09/24 12:49:13 blymn Exp $ + +--- src/platform/Make-netbsd.orig Sun Sep 22 22:29:15 2002 ++++ src/platform/Make-netbsd +@@ -0,0 +1,20 @@ ++# bzflag ++# Copyright (c) 1993 - 2002 Tim Riker ++# ++# 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. ++ ++PCXXFILES = \ ++ NetBSDPlatformFactory.cxx \ ++ XDisplay.cxx \ ++ XVisual.cxx \ ++ XWindow.cxx \ ++ NetBSDDisplay.cxx \ ++ NetBSDMedia.cxx \ ++ usbjoy.cxx \ ++ $(NULL) |