sndio support (even though we don't ship the sound files)
This commit is contained in:
parent
c3bff210a6
commit
805633ad98
@ -1,10 +1,10 @@
|
|||||||
# $OpenBSD: Makefile,v 1.22 2009/08/10 06:31:41 kili Exp $
|
# $OpenBSD: Makefile,v 1.23 2010/04/26 01:43:02 jakemsr Exp $
|
||||||
|
|
||||||
COMMENT= graphical networked AD&D style game
|
COMMENT= graphical networked AD&D style game
|
||||||
|
|
||||||
VERSION= 1.11.0
|
VERSION= 1.11.0
|
||||||
DISTNAME= crossfire-client-${VERSION}
|
DISTNAME= crossfire-client-${VERSION}
|
||||||
PKGNAME= ${DISTNAME}p3
|
PKGNAME= ${DISTNAME}p4
|
||||||
CATEGORIES= games x11
|
CATEGORIES= games x11
|
||||||
|
|
||||||
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
|
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
|
||||||
@ -20,9 +20,10 @@ PERMIT_DISTFILES_FTP= Yes
|
|||||||
|
|
||||||
WANTLIB= GL GLU SDL X11 Xau Xcomposite Xcursor Xdamage Xdmcp \
|
WANTLIB= GL GLU SDL X11 Xau Xcomposite Xcursor Xdamage Xdmcp \
|
||||||
Xext Xfixes Xi Xinerama Xmu Xrandr Xrender atk-1.0 c \
|
Xext Xfixes Xi Xinerama Xmu Xrandr Xrender atk-1.0 c \
|
||||||
cairo crypto expat fontconfig freetype gio-2.0 glib-2.0 glitz \
|
cairo crypto expat fontconfig freetype gio-2.0 glib-2.0 \
|
||||||
gmodule-2.0 gobject-2.0 idn m pango-1.0 pangocairo-1.0 \
|
glitz gmodule-2.0 gobject-2.0 idn m pango-1.0 \
|
||||||
pangoft2-1.0 pixman-1 png pthread pthread-stubs ssl xcb z
|
pangocairo-1.0 pangoft2-1.0 pixman-1 png pthread \
|
||||||
|
pthread-stubs sndio ssl xcb z
|
||||||
|
|
||||||
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=crossfire/}
|
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=crossfire/}
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ LIB_DEPENDS= gdk-x11-2.0,gdk_pixbuf-2.0,gtk-x11-2.0::x11/gtk+2 \
|
|||||||
glut.>=4::graphics/freeglut \
|
glut.>=4::graphics/freeglut \
|
||||||
curl.>=8::net/curl
|
curl.>=8::net/curl
|
||||||
|
|
||||||
USE_X11= Yes
|
USE_X11= Yes
|
||||||
|
|
||||||
CONFIGURE_STYLE=gnu
|
CONFIGURE_STYLE=gnu
|
||||||
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include \
|
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include \
|
||||||
@ -41,7 +42,8 @@ CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include \
|
|||||||
-I${X11BASE}/include" \
|
-I${X11BASE}/include" \
|
||||||
LDFLAGS="-L${LOCALBASE}/lib \
|
LDFLAGS="-L${LOCALBASE}/lib \
|
||||||
-L${X11BASE}/lib -lm -lXi -lXmu" \
|
-L${X11BASE}/lib -lm -lXi -lXmu" \
|
||||||
ac_cv_path_SVNVERSION=""
|
ac_cv_path_SVNVERSION="" \
|
||||||
|
sndio_sound="yes"
|
||||||
CONFIGURE_ARGS= --enable-gtkv2 \
|
CONFIGURE_ARGS= --enable-gtkv2 \
|
||||||
--disable-gtkv1
|
--disable-gtkv1
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
$OpenBSD: patch-configure,v 1.2 2008/04/01 09:14:31 ajacoutot Exp $
|
$OpenBSD: patch-configure,v 1.3 2010/04/26 01:43:03 jakemsr Exp $
|
||||||
--- configure.orig Sat Feb 12 19:09:25 2005
|
--- configure.orig Mon Jan 28 23:29:08 2008
|
||||||
+++ configure Sat Feb 12 19:09:27 2005
|
+++ configure Fri Dec 25 22:50:32 2009
|
||||||
@@ -7688,13 +7688,13 @@ fi
|
@@ -7688,13 +7688,13 @@ fi
|
||||||
|
|
||||||
|
|
||||||
@ -27,3 +27,23 @@ $OpenBSD: patch-configure,v 1.2 2008/04/01 09:14:31 ajacoutot Exp $
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@@ -9164,6 +9164,11 @@ fi
|
||||||
|
|
||||||
|
SOUND_SRC="sound-src";
|
||||||
|
else
|
||||||
|
+ if eval "test x$sndio_sound = xyes"; then
|
||||||
|
+ CFLAGS="$CFLAGS -DSNDIO_SOUND"
|
||||||
|
+ SND_LIBS="-lsndio -lm"
|
||||||
|
+ SOUND_SRC="sound-src";
|
||||||
|
+ else
|
||||||
|
if eval "test x$sun_sound = xyes"; then
|
||||||
|
echo "Using solaris sound system"
|
||||||
|
CFLAGS="$CFLAGS -DSUN_SOUND"
|
||||||
|
@@ -9172,6 +9177,7 @@ fi
|
||||||
|
else
|
||||||
|
echo "No suitable sound system found."
|
||||||
|
sound="no"
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
230
games/crossfire-client/patches/patch-sound-src_cfsndserv_c
Normal file
230
games/crossfire-client/patches/patch-sound-src_cfsndserv_c
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
$OpenBSD: patch-sound-src_cfsndserv_c,v 1.1 2010/04/26 01:43:03 jakemsr Exp $
|
||||||
|
--- sound-src/cfsndserv.c.orig Mon Jan 28 23:29:08 2008
|
||||||
|
+++ sound-src/cfsndserv.c Fri Dec 25 23:14:53 2009
|
||||||
|
@@ -93,6 +93,10 @@ static char *rcsid_cfsndserv_c =
|
||||||
|
#elif defined(SGI_SOUND)
|
||||||
|
# include <audio.h>
|
||||||
|
# define AUDIODEV "/foo/bar"
|
||||||
|
+#elif defined(SNDIO_SOUND)
|
||||||
|
+# include <poll.h>
|
||||||
|
+# include <sndio.h>
|
||||||
|
+# define AUDIODEV "default"
|
||||||
|
#elif defined(SUN_SOUND)
|
||||||
|
# include <sys/audioio.h>
|
||||||
|
# define AUDIODEV "/dev/audio"
|
||||||
|
@@ -135,7 +139,11 @@ int *sounds_in_buffer=NULL;
|
||||||
|
int current_buffer=0; /* Next buffer we will write out */
|
||||||
|
int first_free_buffer=0; /* So we know when to stop playing sounds */
|
||||||
|
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+struct sio_hdl *hdl;
|
||||||
|
+#else
|
||||||
|
int soundfd=0;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/* sound device parameters */
|
||||||
|
int stereo=0,bit8=0,sample_size=0,frequency=0,sign=0,zerolevel=0;
|
||||||
|
@@ -514,6 +522,70 @@ int audio_play(int buffer,int off)
|
||||||
|
return settings.buflen-off;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#elif defined(SNDIO_SOUND)
|
||||||
|
+
|
||||||
|
+int init_audio(){
|
||||||
|
+
|
||||||
|
+ struct sio_par par;
|
||||||
|
+ const char *audiodev;
|
||||||
|
+
|
||||||
|
+ printf("cfsndserv compiled for sndio sound system\n");
|
||||||
|
+ fflush(stdout);
|
||||||
|
+
|
||||||
|
+ /* Open the audio device */
|
||||||
|
+ /* respect settings.audiodev ? */
|
||||||
|
+ hdl = sio_open(NULL, SIO_PLAY, 0);
|
||||||
|
+ if ( hdl == NULL ) {
|
||||||
|
+ fprintf(stderr,"Couldn't open sndio device\n");
|
||||||
|
+ return(-1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ sio_initpar(&par);
|
||||||
|
+ par.bits = settings.bit8?8:16;
|
||||||
|
+ par.sig = settings.bit8?0:1;
|
||||||
|
+ par.rate = settings.frequency;
|
||||||
|
+ par.pchan = settings.stereo?2:1;
|
||||||
|
+
|
||||||
|
+ if ( ! sio_setpar(hdl, &par) || ! sio_getpar(hdl, &par) ) {
|
||||||
|
+ fprintf(stderr, "Couldn't set audio information\n");
|
||||||
|
+ return(-1);
|
||||||
|
+ }
|
||||||
|
+ if ( par.bits > 16) {
|
||||||
|
+ fprintf(stderr, "Unsupported audio bit-depth: %d\n", par.bits);
|
||||||
|
+ return(-1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ bit8=(par.bits==8)?1:0;
|
||||||
|
+ stereo=(par.pchan==2)?1:0;
|
||||||
|
+ frequency=par.rate;
|
||||||
|
+ sample_size=(bit8?1:2)*(stereo?2:1);
|
||||||
|
+ fprintf(stderr,"SNDIO_SOUND: bit8=%d, stereo=%d, freq=%d, sample_size=%d\n",
|
||||||
|
+ bit8, stereo, frequency, sample_size);
|
||||||
|
+
|
||||||
|
+ if ( ! sio_start(hdl) ) {
|
||||||
|
+ fprintf(stderr, "Couldn't start sndio\n");
|
||||||
|
+ return(-1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int audio_play(int buffer,int off){
|
||||||
|
+ int wrote;
|
||||||
|
+#ifdef SOUND_DEBUG
|
||||||
|
+ printf("audio play - writing starting at %d, %d bytes",
|
||||||
|
+ settings.buflen*buffer+off,settings.buflen-off);
|
||||||
|
+ fflush(stdout);
|
||||||
|
+#endif
|
||||||
|
+ wrote=sio_write(hdl,buffers+settings.buflen*buffer+off,settings.buflen-off);
|
||||||
|
+#ifdef SOUND_DEBUG
|
||||||
|
+ printf("...wrote %d bytes\n", wrote);
|
||||||
|
+ fflush(stdout);
|
||||||
|
+#endif
|
||||||
|
+ return wrote;
|
||||||
|
+}
|
||||||
|
+/* End of Sndio sound */
|
||||||
|
+
|
||||||
|
#elif defined(SUN_SOUND)
|
||||||
|
|
||||||
|
int init_audio(){
|
||||||
|
@@ -711,7 +783,11 @@ static void play_sound(int soundnum, int soundtype, in
|
||||||
|
fprintf(stderr,"Invalid sound number: %d\n", soundnum);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+ if (hdl == NULL) {
|
||||||
|
+#else
|
||||||
|
if (soundfd==-1) {
|
||||||
|
+#endif
|
||||||
|
fprintf(stderr,"Sound device is not open\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@@ -949,19 +1025,37 @@ int main(int argc, char *argv[])
|
||||||
|
int infd;
|
||||||
|
char inbuf[1024];
|
||||||
|
int inbuf_pos=0,sndbuf_pos=0;
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+ struct pollfd fds[2];
|
||||||
|
+ nfds_t nfds;
|
||||||
|
+ int poll_audio;
|
||||||
|
+#else
|
||||||
|
fd_set inset,outset;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
printf ("%s\n",rcsid_cfsndserv_c);
|
||||||
|
fflush(stdout);
|
||||||
|
if (read_settings()) write_settings();
|
||||||
|
if (init_sounds()) return 1;
|
||||||
|
+ infd=fileno(stdin);
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+ if (!hdl) return 1;
|
||||||
|
+ nfds = sio_nfds(hdl);
|
||||||
|
+ if (nfds != 1) {
|
||||||
|
+ fprintf(stderr, "too many sndio fds\n");
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ fds[1].fd = infd;
|
||||||
|
+ fds[1].events = POLLIN;
|
||||||
|
+ poll_audio = 1;
|
||||||
|
+#else
|
||||||
|
/* we don't use the file descriptor method */
|
||||||
|
if (!soundfd) return 1;
|
||||||
|
- infd=fileno(stdin);
|
||||||
|
FD_ZERO(&inset);
|
||||||
|
FD_ZERO(&outset);
|
||||||
|
FD_SET(soundfd,&outset);
|
||||||
|
FD_SET(infd,&inset);
|
||||||
|
+#endif
|
||||||
|
while(1){
|
||||||
|
#if defined(SGI_SOUND)
|
||||||
|
/*
|
||||||
|
@@ -973,13 +1067,30 @@ int main(int argc, char *argv[])
|
||||||
|
ALsetfillpoint(soundport,100000);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+ if (poll_audio) {
|
||||||
|
+ nfds = sio_pollfd(hdl, &fds[0], POLLOUT);
|
||||||
|
+ if (nfds == 0)
|
||||||
|
+ fds[0].fd = -1;
|
||||||
|
+ } else
|
||||||
|
+ fds[0].fd = -1;
|
||||||
|
|
||||||
|
+ poll(fds, 2, INFTIM);
|
||||||
|
+
|
||||||
|
+ if (sio_revents(hdl, &fds[0]) & POLLOUT) {
|
||||||
|
+#else
|
||||||
|
select(FD_SETSIZE,&inset,&outset,NULL,NULL);
|
||||||
|
|
||||||
|
if (FD_ISSET(soundfd,&outset)){
|
||||||
|
+#endif
|
||||||
|
/* no sounds to play */
|
||||||
|
- if (current_buffer==first_free_buffer) FD_CLR(soundfd,&outset);
|
||||||
|
- else{
|
||||||
|
+ if (current_buffer==first_free_buffer) {
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+ poll_audio = 0;
|
||||||
|
+#else
|
||||||
|
+ FD_CLR(soundfd,&outset);
|
||||||
|
+#endif
|
||||||
|
+ }else{
|
||||||
|
int wrote;
|
||||||
|
wrote=audio_play(current_buffer,sndbuf_pos);
|
||||||
|
if (wrote<settings.buflen-sndbuf_pos) sndbuf_pos+=wrote;
|
||||||
|
@@ -991,15 +1102,23 @@ int main(int argc, char *argv[])
|
||||||
|
current_buffer++;
|
||||||
|
if (current_buffer>=settings.buffers) current_buffer=0;
|
||||||
|
}
|
||||||
|
- }
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
/* We need to reset this if it is not set - otherwise, we will never
|
||||||
|
* finish playing the sounds
|
||||||
|
*/
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+ poll_audio = 1;
|
||||||
|
+#else
|
||||||
|
FD_SET(soundfd,&outset);
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+ if (fds[1].revents & POLLIN){
|
||||||
|
+#else
|
||||||
|
if (FD_ISSET(infd,&inset)){
|
||||||
|
+#endif
|
||||||
|
int err=read(infd,inbuf+inbuf_pos,1);
|
||||||
|
if (err<1 && errno!=EINTR){
|
||||||
|
if (err<0) perror("read");
|
||||||
|
@@ -1007,7 +1126,12 @@ int main(int argc, char *argv[])
|
||||||
|
}
|
||||||
|
if (inbuf[inbuf_pos]=='\n'){
|
||||||
|
inbuf[inbuf_pos++]=0;
|
||||||
|
- if (!SoundCmd((unsigned char*)inbuf,inbuf_pos)) FD_SET(soundfd,&outset);
|
||||||
|
+ if (!SoundCmd((unsigned char*)inbuf,inbuf_pos))
|
||||||
|
+#ifdef SNDIO_SOUND
|
||||||
|
+ poll_audio = 1;
|
||||||
|
+#else
|
||||||
|
+ FD_SET(soundfd,&outset);
|
||||||
|
+#endif
|
||||||
|
inbuf_pos=0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
@@ -1018,7 +1142,9 @@ int main(int argc, char *argv[])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+#ifndef SNDIO_SOUND
|
||||||
|
FD_SET(infd,&inset);
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
@ -1,7 +1,7 @@
|
|||||||
@comment $OpenBSD: PLIST,v 1.5 2008/04/01 09:14:31 ajacoutot Exp $
|
@comment $OpenBSD: PLIST,v 1.6 2010/04/26 01:43:03 jakemsr Exp $
|
||||||
bin/cfclient
|
@bin bin/cfclient
|
||||||
bin/cfsndserv
|
@bin bin/cfsndserv
|
||||||
bin/gcfclient2
|
@bin bin/gcfclient2
|
||||||
@man man/man6/cfclient.6
|
@man man/man6/cfclient.6
|
||||||
@man man/man6/gcfclient.6
|
@man man/man6/gcfclient.6
|
||||||
share/crossfire-client/
|
share/crossfire-client/
|
||||||
|
Loading…
Reference in New Issue
Block a user