On Thu, Apr 12, 2012 at 12:14:27AM +0200, Alexandre Ratchov wrote:
> This is to add a sndio backend for the MIDI output and stop using
> the sequencer(4) interface. If you have no MIDI hardware to listen
> the music on, this backend should allow soft synths (like
> fluidsynth) to be used instead.
> 
> ok? comments?
> 

new diff with a fix from jsg@

ok ?

Index: Makefile
===================================================================
RCS file: /cvs/ports/games/scummvm/Makefile,v
retrieving revision 1.50
diff -u -p -r1.50 Makefile
--- Makefile    20 Feb 2012 11:18:33 -0000      1.50
+++ Makefile    13 Apr 2012 08:48:34 -0000
@@ -2,6 +2,7 @@
 
 COMMENT=       graphical adventure game interpreter
 DISTNAME=      scummvm-1.4.1
+REVISION=      1
 CATEGORIES=    games x11 emulators
 MASTER_SITES=  ${MASTER_SITE_SOURCEFORGE:=scummvm/}
 
@@ -15,7 +16,7 @@ PERMIT_PACKAGE_FTP=   Yes
 PERMIT_DISTFILES_CDROM=        Yes
 PERMIT_DISTFILES_FTP=  Yes
 
-WANTLIB=       FLAC>=5 SDL c faad m mad>=2 pthread stdc++ theoradec z
+WANTLIB=       FLAC>=5 SDL c faad m mad>=2 pthread sndio stdc++ theoradec z
 
 .if ${MACHINE_ARCH} == "i386"
 BUILD_DEPENDS= devel/nasm
@@ -29,7 +30,7 @@ LIB_DEPENDS=  audio/libmad \
                multimedia/libtheora
 
 CONFIGURE_STYLE=simple
-CONFIGURE_ARGS+=--disable-alsa --disable-debug
+CONFIGURE_ARGS+=--disable-alsa --disable-debug --disable-seq-midi 
--enable-sndio
 CONFIGURE_ENV+=        CPPFLAGS="-I${LOCALBASE}/include" \
                LDFLAGS="-L${LOCALBASE}/lib"
 USE_GROFF =    Yes
@@ -64,5 +65,8 @@ do-install:
        ${INSTALL_DATA} ${WRKSRC}/dists/scummvm.desktop \
            ${PREFIX}/share/applications
        ${INSTALL_PROGRAM} ${WRKSRC}/scummvm ${PREFIX}/bin
+
+post-patch:
+       @cp ${FILESDIR}/sndio.cpp ${WRKSRC}/backends/midi
 
 .include <bsd.port.mk>
Index: files/sndio.cpp
===================================================================
RCS file: files/sndio.cpp
diff -N files/sndio.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ files/sndio.cpp     13 Apr 2012 08:48:34 -0000
@@ -0,0 +1,149 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 
USA.
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "common/scummsys.h"
+
+#if defined(USE_SNDIO)
+
+#include "common/error.h"
+#include "common/textconsole.h"
+#include "common/util.h"
+#include "audio/musicplugin.h"
+#include "audio/mpu401.h"
+
+#include <sndio.h>
+
+////////////////////////////////////////
+//
+// sndio MIDI driver
+//
+////////////////////////////////////////
+
+class MidiDriver_Sndio : public MidiDriver_MPU401 {
+public:
+       MidiDriver_Sndio();
+       int open();
+       bool isOpen() const { return hdl != NULL; }
+       void close();
+       void send(uint32 b);
+       void sysEx(const byte *msg, uint16 length);
+
+private:
+       struct mio_hdl *hdl;
+};
+
+MidiDriver_Sndio::MidiDriver_Sndio() {
+       hdl = NULL;
+}
+
+int MidiDriver_Sndio::open() {
+       hdl = ::mio_open(NULL, MIO_OUT, 0);
+       if (hdl == NULL)
+               warning("Could open MIDI port (no music)");
+       return 0;
+}
+
+void MidiDriver_Sndio::close() {
+       MidiDriver_MPU401::close();
+       if (!hdl)
+               return;
+       mio_close(hdl);
+       hdl = NULL;
+}
+
+void MidiDriver_Sndio::send(uint32 b) {
+       unsigned char buf[4];
+       unsigned int len;
+
+       if (!hdl)
+               return;
+       buf[0] = b & 0xff;      
+       buf[1] = (b >> 8) & 0xff;
+       buf[2] = (b >> 16) & 0xff;
+       buf[3] = (b >> 24) & 0xff;
+       switch (buf[0] & 0xf0) {
+       case 0xf0:
+               return;
+       case 0xc0:
+       case 0xd0:
+               len = 2;
+               break;
+       default:
+               len = 3;
+       }
+       mio_write(hdl, buf, len);
+}
+
+void MidiDriver_Sndio::sysEx(const byte *msg, uint16 length) {
+       if (!hdl)
+               return;
+       
+       unsigned char buf[266];
+
+       assert(length + 2 <= ARRAYSIZE(buf));
+
+       // Add SysEx frame
+       buf[0] = 0xF0;
+       memcpy(buf + 1, msg, length);
+       buf[length + 1] = 0xF7;
+
+       mio_write(hdl, buf, length + 2);
+}
+
+
+// Plugin interface
+
+class SndioMusicPlugin : public MusicPluginObject {
+public:
+       const char *getName() const {
+               return "Sndio";
+       }
+
+       const char *getId() const {
+               return "sndio";
+       }
+
+       MusicDevices getDevices() const;
+       Common::Error createInstance(MidiDriver **mididriver, 
MidiDriver::DeviceHandle = 0) const;
+};
+
+MusicDevices SndioMusicPlugin::getDevices() const {
+       MusicDevices devices;
+       devices.push_back(MusicDevice(this, "default", MT_GM));
+       return devices;
+}
+
+Common::Error SndioMusicPlugin::createInstance(MidiDriver **mididriver, 
MidiDriver::DeviceHandle) const {
+       *mididriver = new MidiDriver_Sndio();
+
+       return Common::kNoError;
+}
+
+//#if PLUGIN_ENABLED_DYNAMIC(Sndio)
+       //REGISTER_PLUGIN_DYNAMIC(SNDIO, PLUGIN_TYPE_MUSIC, SndioMusicPlugin);
+//#else
+       REGISTER_PLUGIN_STATIC(SNDIO, PLUGIN_TYPE_MUSIC, SndioMusicPlugin);
+//#endif
+
+#endif
Index: patches/patch-backends_module_mk
===================================================================
RCS file: patches/patch-backends_module_mk
diff -N patches/patch-backends_module_mk
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-backends_module_mk    13 Apr 2012 08:48:34 -0000
@@ -0,0 +1,11 @@
+$OpenBSD$
+--- backends/module.mk.orig    Wed Apr 11 09:08:02 2012
++++ backends/module.mk Wed Apr 11 09:08:28 2012
+@@ -11,6 +11,7 @@ MODULE_OBJS := \
+       midi/alsa.o \
+       midi/dmedia.o \
+       midi/seq.o \
++      midi/sndio.o \
+       midi/stmidi.o \
+       midi/timidity.o \
+       saves/savefile.o \
Index: patches/patch-base_plugins_cpp
===================================================================
RCS file: patches/patch-base_plugins_cpp
diff -N patches/patch-base_plugins_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-base_plugins_cpp      13 Apr 2012 08:48:34 -0000
@@ -0,0 +1,13 @@
+$OpenBSD$
+--- base/plugins.cpp.orig      Wed Apr 11 15:27:38 2012
++++ base/plugins.cpp   Wed Apr 11 15:28:37 2012
+@@ -202,6 +202,9 @@ class StaticPluginProvider : public PluginProvider { (
+               #if defined(USE_SEQ_MIDI)
+               LINK_PLUGIN(SEQ)
+               #endif
++              #if defined(USE_SNDIO)
++              LINK_PLUGIN(SNDIO)
++              #endif
+               #if defined(__MINT__)
+               LINK_PLUGIN(STMIDI)
+               #endif
Index: patches/patch-base_version_cpp
===================================================================
RCS file: patches/patch-base_version_cpp
diff -N patches/patch-base_version_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-base_version_cpp      13 Apr 2012 08:48:34 -0000
@@ -0,0 +1,14 @@
+$OpenBSD$
+--- base/version.cpp.orig      Wed Apr 11 15:32:53 2012
++++ base/version.cpp   Wed Apr 11 15:29:14 2012
+@@ -94,6 +94,10 @@ const char *gScummVMFeatures = ""
+       "SEQ "
+ #endif
+ 
++#ifdef USE_SNDIO
++      "sndio "
++#endif
++
+ #ifdef USE_TIMIDITY
+       "TiMidity "
+ #endif
Index: patches/patch-configure
===================================================================
RCS file: /cvs/ports/games/scummvm/patches/patch-configure,v
retrieving revision 1.9
diff -u -p -r1.9 patch-configure
--- patches/patch-configure     17 Feb 2012 06:59:41 -0000      1.9
+++ patches/patch-configure     13 Apr 2012 08:48:34 -0000
@@ -1,7 +1,36 @@
 $OpenBSD: patch-configure,v 1.9 2012/02/17 06:59:41 jsg Exp $
---- configure.orig     Sun Jan 15 20:08:27 2012
-+++ configure  Fri Feb 17 13:18:29 2012
-@@ -1613,21 +1613,6 @@ elif test "$have_icc" = yes ; then
+--- configure.orig     Sun Jan 15 10:08:27 2012
++++ configure  Wed Apr 11 19:02:04 2012
+@@ -134,6 +134,7 @@ _flac=auto
+ _mad=auto
+ _alsa=auto
+ _seq_midi=auto
++_sndio=auto
+ _timidity=auto
+ _zlib=auto
+ _sparkle=auto
+@@ -879,6 +880,8 @@ for ac_option in $@; do
+       --disable-alsa)           _alsa=no        ;;
+       --enable-seq-midi)        _seq_midi=yes   ;;
+       --disable-seq-midi)       _seq_midi=no    ;;
++      --enable-sndio)           _sndio=yes      ;;
++      --disable-sndio)          _sndio=no       ;;
+       --enable-timidity)        _timidity=yes   ;;
+       --disable-timidity)       _timidity=no    ;;
+       --enable-vorbis)          _vorbis=yes     ;;
+@@ -937,6 +940,11 @@ for ac_option in $@; do
+               ALSA_CFLAGS="-I$arg/include"
+               ALSA_LIBS="-L$arg/lib"
+               ;;
++      --with-sndio-prefix=*)
++              arg=`echo $ac_option | cut -d '=' -f 2`
++              SNDIO_CFLAGS="-I$arg/include"
++              SNDIO_LIBS="-L$arg/lib"
++              ;;
+       --with-ogg-prefix=*)
+               arg=`echo $ac_option | cut -d '=' -f 2`
+               OGG_CFLAGS="-I$arg/include"
+@@ -1613,21 +1621,6 @@ elif test "$have_icc" = yes ; then
        add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF 
"$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP'
  fi;
  
@@ -23,7 +52,7 @@ $OpenBSD: patch-configure,v 1.9 2012/02/
  # If possible, we want to use -Wglobal-constructors
  # However, not all compilers support that, so check whether the active one 
does.
  echocheck "whether -Wglobal-constructors work"
-@@ -3076,9 +3061,11 @@ EOF
+@@ -3076,9 +3069,11 @@ EOF
  fi
  if test "$_flac" = yes ; then
        if test "$_vorbis" = yes ; then
@@ -37,3 +66,28 @@ $OpenBSD: patch-configure,v 1.9 2012/02/
        fi
        INCLUDES="$INCLUDES $FLAC_CFLAGS"
  fi
+@@ -3205,6 +3200,24 @@ if test "$_seq_midi" = auto ; then
+ fi
+ define_in_config_h_if_yes "$_seq_midi" 'USE_SEQ_MIDI'
+ echo "$_seq_midi"
++
++#
++# Check for sndio
++#
++echocheck "sndio"
++if test "$_sndio" = auto ; then
++      cat > $TMPC << EOF
++#include <sndio.h>
++int main(void) { struct sio_par par; sio_init(&par); return 0; }
++EOF
++      cc_check $SNDIO_CFLAGS $SNDIO_LIBS -lsndio && _sndio=yes
++fi
++if test "$_sndio" = yes ; then
++      LIBS="$LIBS $SNDIO_LIBS -lsndio"
++      INCLUDES="$INCLUDES $SNDIO_CFLAGS"
++fi
++define_in_config_h_if_yes "$_sndio" 'USE_SNDIO'
++echo "$_sndio"
+ 
+ #
+ # Check for TiMidity(++)

Reply via email to