Move old patches to attic/; we use a git branch for win32 beast now.
authorunknown <Stefan@.(none)>
Sat, 16 Jan 2010 09:58:11 +0000 (10:58 +0100)
committerunknown <Stefan@.(none)>
Sat, 16 Jan 2010 09:58:11 +0000 (10:58 +0100)
32 files changed:
000a_configure_ogg_vorbis.diff [deleted file]
002_poll_constants.diff [deleted file]
004b_birnet_os.diff [deleted file]
005_beast_sfi.diff [deleted file]
006_beast_birnet_tests.diff [deleted file]
007_g_print_and_bse.diff [deleted file]
008_misc_fixes.diff [deleted file]
009_inline_lib_make.diff [deleted file]
010_plugin_ext_crawler.diff [deleted file]
011_freeverb_sfi.diff [deleted file]
012_seq_waiter_and_domain.diff [deleted file]
013_doxer_portability.diff [deleted file]
014_scmoff_docoff_relocate.diff [deleted file]
015_engine_wakeup_and_portaudio.diff [deleted file]
016_relocate_via_exename.diff [deleted file]
017_make_j6_win_bse.diff [deleted file]
attic/000a_configure_ogg_vorbis.diff [new file with mode: 0644]
attic/002_poll_constants.diff [new file with mode: 0644]
attic/004b_birnet_os.diff [new file with mode: 0644]
attic/005_beast_sfi.diff [new file with mode: 0644]
attic/006_beast_birnet_tests.diff [new file with mode: 0644]
attic/007_g_print_and_bse.diff [new file with mode: 0755]
attic/008_misc_fixes.diff [new file with mode: 0644]
attic/009_inline_lib_make.diff [new file with mode: 0644]
attic/010_plugin_ext_crawler.diff [new file with mode: 0644]
attic/011_freeverb_sfi.diff [new file with mode: 0644]
attic/012_seq_waiter_and_domain.diff [new file with mode: 0644]
attic/013_doxer_portability.diff [new file with mode: 0644]
attic/014_scmoff_docoff_relocate.diff [new file with mode: 0644]
attic/015_engine_wakeup_and_portaudio.diff [new file with mode: 0644]
attic/016_relocate_via_exename.diff [new file with mode: 0644]
attic/017_make_j6_win_bse.diff [new file with mode: 0644]

diff --git a/000a_configure_ogg_vorbis.diff b/000a_configure_ogg_vorbis.diff
deleted file mode 100644 (file)
index 0305caf..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-diff --git a/configure.in b/configure.in
-index e9b3faa..ab669ef 100644
---- a/configure.in
-+++ b/configure.in
-@@ -219,19 +219,7 @@ AC_DEFUN([AC_BSE_REQUIREMENTS],
-     AC_DEFINE_UNQUOTED(BSE_VERSION, "$BSE_VERSION", [BSE Version])
-     dnl # --- Ogg/Vorbis check ---
--    OV_LIBS=
--    ov_tests=0
--    AC_CHECK_LIB(vorbisfile, ogg_stream_reset_serialno,
--      [AC_CHECK_HEADER(ogg/ogg.h, ov_tests=`expr $ov_tests + 1`)]
--      [AC_CHECK_HEADER(vorbis/vorbisfile.h, ov_tests=`expr $ov_tests + 1`)]
--      [AC_CHECK_HEADER(vorbis/vorbisenc.h, ov_tests=`expr $ov_tests + 1`)]
--      ,
--      ov_tests=0, -lvorbisenc -lvorbis -logg)
--    if test $ov_tests = 3 ; then
--      OV_LIBS="-lvorbisfile -lvorbisenc -lvorbis -logg"
--    else
--      AC_MSG_WARN([failed to detect Ogg/Vorbis library (>=1.0) or headers])
--    fi
-+    PKG_CHECK_MODULES(OV, ogg >= 1.0.0 vorbis >= 1.0.0 vorbisfile >= 1.0.0 vorbisenc >= 1.0.0)
-     
-     dnl # --- libmad MPEG decoder check ---
-     dnl # libmad doesn't come with a mad.pc file (just its debian package)
diff --git a/002_poll_constants.diff b/002_poll_constants.diff
deleted file mode 100644 (file)
index 7c33fbe..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-diff -ur orig/beast-20090428/birnet/configure.inc beast-20090428/birnet/configure.inc
---- orig/beast-20090428/birnet/configure.inc   Tue Apr 28 17:28:03 2009
-+++ beast-20090428/birnet/configure.inc        Sat May  2 16:24:51 2009
-@@ -42,25 +42,6 @@
-     BIRNET_SIZEOF_LONG="$glib_cv_sizeof_birnet_long"
-     AC_SUBST(BIRNET_SIZEOF_LONG) dnl # for birnetconfig.h
--    dnl # --- POLL* ---
--    poll_headers=["
--      #define _GNU_SOURCE
--      #include <sys/types.h>
--      #include <sys/poll.h>
--    "]
--    AC_MSG_CHECKING([for POLL constants])
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLIN],     $poll_headers)
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLPRI],    $poll_headers)
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLOUT],    $poll_headers)
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLRDNORM], $poll_headers) # needs _GNU_SOURCE on linux
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLRDBAND], $poll_headers) # needs _GNU_SOURCE on linux
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLWRNORM], $poll_headers) # needs _GNU_SOURCE on linux
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLWRBAND], $poll_headers) # needs _GNU_SOURCE on linux
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLERR],    $poll_headers)
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLHUP],    $poll_headers)
--    BIRNET_SUBST_COMPUTED_SYSVAL([POLLNVAL],   $poll_headers)
--    AC_MSG_RESULT([done])
--
-     dnl # --- OS/Win32 detection ---
-     dnl # needs AC_CANONICAL_HOST
-     test -z "$host" && {
-@@ -82,6 +63,27 @@
-     AC_SUBST(BIRNET_OS)
-     AC_SUBST(BIRNET_OS_CHOICES)
-     AC_DEFINE_UNQUOTED(BIRNET_OS_$BIRNET_OS, "1", [Win32 detection])
-+
-+    if test "$BIRNET_OS" != "WIN32"; then
-+      dnl # --- POLL* ---
-+      poll_headers=["
-+      #define _GNU_SOURCE
-+      #include <sys/types.h>
-+      #include <sys/poll.h>
-+      "]
-+      AC_MSG_CHECKING([for POLL constants])
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLIN],     $poll_headers)
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLPRI],    $poll_headers)
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLOUT],    $poll_headers)
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLRDNORM], $poll_headers) # needs _GNU_SOURCE on linux
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLRDBAND], $poll_headers) # needs _GNU_SOURCE on linux
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLWRNORM], $poll_headers) # needs _GNU_SOURCE on linux
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLWRBAND], $poll_headers) # needs _GNU_SOURCE on linux
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLERR],    $poll_headers)
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLHUP],    $poll_headers)
-+      BIRNET_SUBST_COMPUTED_SYSVAL([POLLNVAL],   $poll_headers)
-+      AC_MSG_RESULT([done])
-+    fi
-     dnl # --- sizeof threading structs ---
-     GLIB_SIZEOF([#include <pthread.h>], pthread_mutex_t, pth_mutex_t)
diff --git a/004b_birnet_os.diff b/004b_birnet_os.diff
deleted file mode 100644 (file)
index 7f13bb0..0000000
+++ /dev/null
@@ -1,787 +0,0 @@
-diff --git a/birnet/Makefile.am b/birnet/Makefile.am
-index 3bfb462..9757012 100644
---- a/birnet/Makefile.am
-+++ b/birnet/Makefile.am
-@@ -5,7 +5,7 @@
- include $(top_srcdir)/Makefile.decl
- SUBDIRS               = . tests
--INCLUDES       += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(BIRNET_CFLAGS)
-+INCLUDES       += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(CFLAGS) $(BIRNET_CFLAGS)
- DEFS            = -DBIRNET_LOG_DOMAIN=\"BIRNET\" -D_BIRNET_SOURCE_EXTENSIONS
- GLIB_MKENUMS    = glib-mkenums
-@@ -34,6 +34,12 @@ birnet_sources = $(strip            \
-       birnetutf8.cc                   \
-       birnetutils.cc                  \
- )
-+if BIRNET_OS_WIN32
-+birnet_sources += birnetoswin32.cc
-+endif
-+if BIRNET_OS_UNIX
-+birnet_sources += birnetosunix.cc
-+endif
- birnet_private_headers = $(strip      \
-       birnetsignalslot.hh             \
-       birnetsignaltemplate.hh         \
-diff --git a/birnet/birnet.hh b/birnet/birnet.hh
-index c8c1127..279091b 100644
---- a/birnet/birnet.hh
-+++ b/birnet/birnet.hh
-@@ -20,6 +20,7 @@
- #include <birnet/birnetconfig.h>
- #include <birnet/birnetcpu.hh>
- #include <birnet/birnetdebugtools.hh>
-+#include <birnet/birnetos.hh>
- #include <birnet/birnetmsg.hh>
-diff --git a/birnet/birnetcpu.cc b/birnet/birnetcpu.cc
-index 5c4ffb5..ba49ce8 100644
---- a/birnet/birnetcpu.cc
-+++ b/birnet/birnetcpu.cc
-@@ -16,6 +16,7 @@
-  */
- #include <glib.h>
- #include "birnetcpu.hh"
-+#include "birnetos.hh"
- #include <setjmp.h>
- #include <signal.h>
- #include <string.h>
-@@ -196,24 +197,7 @@ get_x86_cpu_features (CPUInfo *ci,
-   /* check system support for SSE */
-   if (ci->x86_sse)
-     {
--      struct sigaction action, old_action;
--      action.sa_handler = cpu_info_sigill_handler;
--      sigemptyset (&action.sa_mask);
--      action.sa_flags = SA_NOMASK;
--      sigaction (SIGILL, &action, &old_action);
--      if (setjmp (cpu_info_jmp_buf) == 0)
--        {
--          unsigned int mxcsr;
--          __asm__ __volatile__ ("stmxcsr %0 ; sfence ; emms" : "=m" (mxcsr));
--          /* executed SIMD instructions without exception */
--          ci->x86_ssesys = true;
--        }
--      else
--        {
--          /* signal handler jumped here */
--          // g_printerr ("caught SIGILL\n");
--        }
--      sigaction (SIGILL, &old_action, NULL);
-+      ci->x86_ssesys = OS::check_sse_sys();
-     }
-   return true;
-diff --git a/birnet/birnetdebugtools.cc b/birnet/birnetdebugtools.cc
-index d8b5739..1ac3df1 100644
---- a/birnet/birnetdebugtools.cc
-+++ b/birnet/birnetdebugtools.cc
-@@ -16,7 +16,6 @@
-  */
- #include "birnetdebugtools.hh"
- #include "birnetthread.hh"
--#include <syslog.h>
- #include <errno.h>
- #ifndef _ // FIXME
-diff --git a/birnet/birnetmsg.cc b/birnet/birnetmsg.cc
-index 0ae96ae..f2e9b85 100644
---- a/birnet/birnetmsg.cc
-+++ b/birnet/birnetmsg.cc
-@@ -17,7 +17,7 @@
- #include <glib.h>
- #include "birnetmsg.hh"
- #include "birnetthread.hh"
--#include <syslog.h>
-+#include "birnetos.hh"
- #include <errno.h>
- #include <string.h>
-@@ -494,13 +494,13 @@ Msg::display_parts (const char         *domain,
-     {
-       String prefix = log_prefix ("", 0, domain, "", ident);
-       if (title.size() && false) // skip title in syslog
--        syslog (msg_syslog_priority, "%s:0: %s\n", prefix.c_str(), title.c_str());
-+        OS::syslog (msg_syslog_priority, "%s:0: %s\n", prefix.c_str(), title.c_str());
-       if (primary.size())
--        syslog (msg_syslog_priority, "%s:1: %s\n", prefix.c_str(), primary.c_str());
-+        OS::syslog (msg_syslog_priority, "%s:1: %s\n", prefix.c_str(), primary.c_str());
-       if (secondary.size())
--        syslog (msg_syslog_priority, "%s:2: %s\n", prefix.c_str(), secondary.c_str());
-+        OS::syslog (msg_syslog_priority, "%s:2: %s\n", prefix.c_str(), secondary.c_str());
-       if (details.size() && false) // skip details in syslog
--        syslog (msg_syslog_priority, "%s:3: %s\n", prefix.c_str(), details.c_str());
-+        OS::syslog (msg_syslog_priority, "%s:3: %s\n", prefix.c_str(), details.c_str());
-     }
-   /* log to logfile */
-   if (msg_log_file && (actions & LOG_TO_STDLOG))
-diff --git a/birnet/birnetos.hh b/birnet/birnetos.hh
-new file mode 100644
-index 0000000..5dfeff8
---- /dev/null
-+++ b/birnet/birnetos.hh
-@@ -0,0 +1,65 @@
-+/* BirnetOS
-+ * Copyright (C) 2009 Stefan Westerfeld
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * A copy of the GNU Lesser General Public License should ship along
-+ * with this library; if not, see http://www.gnu.org/copyleft/.
-+ */
-+#ifndef __BIRNET_OS_HH__
-+#define __BIRNET_OS_HH__
-+
-+#include <birnet/birnetutils.hh>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <unistd.h>
-+
-+namespace Birnet {
-+
-+namespace OS {
-+
-+/* --- functions --- */
-+int   get_thread_priority (int thread_id);
-+bool  check_sse_sys();
-+void  syslog (int priority, const char *format, ...);
-+void  raise_sigtrap();
-+int   getpid();
-+void  memset4 (uint32 *mem, uint32 filler, uint length); 
-+
-+// stat
-+int   lstat (const char *path, struct stat *buf);
-+bool  stat_is_socket (mode_t mode);        /* S_ISSOCK */
-+bool  stat_is_link (mode_t mode);          /* S_ISLNK */
-+
-+// (at least) 48-bit random number generator
-+void  srand48 (int32 seedval);
-+int32 lrand48();
-+
-+// printf formatting
-+int   vasprintf (char **strp, const char *fmt, va_list ap);
-+
-+// errno
-+int   strerror_r (int errnum, char *buf, size_t buflen);
-+
-+} // OS
-+
-+// permissions
-+extern int OS_S_IXGRP;
-+extern int OS_S_IXOTH;
-+
-+// some errno values are not supported by every system
-+extern int OS_ENOTBLK;
-+extern int OS_ENOTSOCK;
-+
-+} // Birnet
-+
-+#endif /* __BIRNET_OS_HH__ */
-+/* vim:set ts=8 sts=2 sw=2: */
-diff --git a/birnet/birnetosunix.cc b/birnet/birnetosunix.cc
-new file mode 100644
-index 0000000..5c002fa
---- /dev/null
-+++ b/birnet/birnetosunix.cc
-@@ -0,0 +1,183 @@
-+/* BirnetOSUnix
-+ * Copyright (C) 2009 Stefan Westerfeld
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * A copy of the GNU Lesser General Public License should ship along
-+ * with this library; if not, see http://www.gnu.org/copyleft/.
-+ */
-+#include "birnetos.hh"
-+#include <sys/time.h>
-+#include <sys/resource.h>
-+#include <signal.h>
-+#include <setjmp.h>
-+#include <glib.h>
-+#include <stdlib.h>
-+#include <stdarg.h>
-+#include <syslog.h>
-+#include <errno.h>
-+#include <string.h>
-+
-+namespace Birnet {
-+namespace OS {
-+
-+int
-+get_thread_priority (int thread_id)
-+{
-+  return getpriority (PRIO_PROCESS, thread_id);
-+}
-+
-+static jmp_buf check_sse_sys_jmp_buf;
-+
-+static void BIRNET_NORETURN
-+check_sse_sys_sigill_handler (int dummy)
-+{
-+  longjmp (check_sse_sys_jmp_buf, 1);
-+}
-+
-+bool
-+check_sse_sys()
-+{
-+  struct sigaction action, old_action;
-+  bool x86_ssesys = false;
-+
-+  action.sa_handler = check_sse_sys_sigill_handler;
-+  sigemptyset (&action.sa_mask);
-+  action.sa_flags = SA_NOMASK;
-+  sigaction (SIGILL, &action, &old_action);
-+  if (setjmp (check_sse_sys_jmp_buf) == 0)
-+    {
-+      unsigned int mxcsr;
-+      __asm__ __volatile__ ("stmxcsr %0 ; sfence ; emms" : "=m" (mxcsr));
-+      /* executed SIMD instructions without exception */
-+      x86_ssesys = true;
-+    }
-+  else
-+    {
-+      /* signal handler jumped here */
-+      // g_printerr ("caught SIGILL\n");
-+    }
-+  sigaction (SIGILL, &old_action, NULL);
-+  return x86_ssesys;
-+}
-+
-+void
-+raise_sigtrap ()
-+{
-+  raise (SIGTRAP);
-+}
-+
-+void
-+memset4 (guint32   *mem,
-+         guint32    filler,
-+         guint      length) 
-+{
-+  BIRNET_STATIC_ASSERT (sizeof (*mem) == 4);
-+  BIRNET_STATIC_ASSERT (sizeof (filler) == 4);
-+  BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-+  wmemset ((wchar_t*) mem, filler, length);
-+}
-+
-+// (at least) 48-bit random number generator
-+void
-+srand48 (int32 seedval)
-+{
-+  ::srand48 (seedval);
-+}
-+
-+int32
-+lrand48()
-+{
-+  return ::lrand48();
-+}
-+
-+int
-+getpid()
-+{
-+  return ::getpid();
-+}
-+
-+int
-+strerror_r (int errnum, char *buf, size_t buflen)
-+{
-+  char *result = ::strerror_r (errnum, buf, buflen);
-+  if (!result)
-+    {
-+      errno = EINVAL;
-+      return -1;
-+    }
-+  if (result != buf)
-+    {
-+      if (strlen (result) + 1 < buflen)
-+      {
-+        strcpy (buf, result);
-+        return 0;
-+      }
-+      else
-+      {
-+        errno = ERANGE;
-+      }
-+    }
-+  else
-+    {
-+      return 0;
-+    }
-+  return -1;
-+}
-+
-+void
-+syslog (int priority, char const* format, ...)
-+{
-+  va_list ap;
-+
-+  va_start(ap, format);
-+  vsyslog (priority, format, ap);
-+  va_end(ap);
-+}
-+
-+int
-+lstat (const char  *path,
-+       struct stat *buf)
-+{
-+  return ::lstat (path, buf);
-+}
-+
-+bool
-+stat_is_socket (mode_t mode)
-+{
-+  return S_ISSOCK (mode);
-+}
-+
-+bool
-+stat_is_link (mode_t mode)
-+{
-+  return S_ISLNK (mode);
-+}
-+
-+int
-+vasprintf (char **strp, const char *fmt, va_list ap)
-+{
-+  return ::vasprintf (strp, fmt, ap);
-+}
-+
-+} // OS
-+
-+// permissions
-+int OS_S_IXGRP = S_IXGRP;
-+int OS_S_IXOTH = S_IXOTH;
-+
-+// some errno values are not supported by every system
-+int OS_ENOTBLK = ENOTBLK;
-+int OS_ENOTSOCK = ENOTSOCK;
-+
-+
-+} // Birnet
-+
-diff --git a/birnet/birnetoswin32.cc b/birnet/birnetoswin32.cc
-new file mode 100644
-index 0000000..5006381
---- /dev/null
-+++ b/birnet/birnetoswin32.cc
-@@ -0,0 +1,151 @@
-+/* BirnetOSWin32
-+ * Copyright (C) 2009 Stefan Westerfeld
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * A copy of the GNU Lesser General Public License should ship along
-+ * with this library; if not, see http://www.gnu.org/copyleft/.
-+ */
-+#include "birnetos.hh"
-+#include <glib.h>
-+#include <glib/gprintf.h>
-+#include <process.h>
-+#include <sys/stat.h>
-+
-+namespace Birnet {
-+namespace OS {
-+
-+void
-+raise_sigtrap()
-+{
-+  G_BREAKPOINT();
-+}
-+
-+int
-+get_thread_priority (int thread_id)
-+{
-+  /* FIXME */
-+  return 0;
-+}
-+
-+bool
-+check_sse_sys()
-+{
-+  return true;
-+}
-+
-+void
-+syslog (int priority, char const* format, ...)
-+{
-+  /* FIXME: */
-+  g_error ("syslog is not supported on windows\n");
-+}
-+
-+static inline GRand *
-+grandom48()
-+{
-+  static GRand *r48 = NULL;
-+  if (BIRNET_UNLIKELY (!r48))
-+    r48 = g_rand_new();
-+  return r48;
-+}
-+
-+// (at least) 48-bit random number generator
-+void
-+srand48 (int32 seedval)
-+{
-+  g_rand_set_seed (grandom48(), seedval);
-+}
-+
-+int32
-+lrand48()
-+{
-+  return g_rand_int (grandom48());
-+}
-+
-+int
-+getpid()
-+{
-+  return _getpid();
-+}
-+
-+int
-+lstat (const char  *path,
-+       struct stat *buf)
-+{
-+  return ::stat (path, buf);
-+}
-+
-+bool
-+stat_is_socket (mode_t mode)
-+{
-+  return false;
-+}
-+
-+bool
-+stat_is_link (mode_t mode)
-+{
-+  return false;
-+}
-+
-+int
-+vasprintf (char **strp, const char *fmt, va_list ap)
-+{
-+  return g_vasprintf (strp, fmt, ap);
-+}
-+
-+/* MSDN recommends using strerror_s as threadsafe replacement for strerror, however it seems to
-+   be impossible to use it from mingw gcc, so we reimplement a threadsafe version
-+*/
-+int
-+strerror_r (int errnum, char *buf, size_t buflen)
-+{
-+  if (errnum >= 0 && errnum < _sys_nerr)
-+    {
-+      char *err_msg = _sys_errlist[errnum];
-+      size_t len = strlen (err_msg);
-+      if (len < buflen)
-+      {
-+        strcpy (buf, err_msg);
-+        errno = 0;
-+        return 0;
-+      }
-+      else
-+      {
-+        errno = ERANGE;
-+      }
-+    }
-+  else
-+    {
-+      errno = EINVAL;
-+    }
-+  return -1;
-+}
-+
-+void
-+memset4 (uint32 *mem, uint32 filler, uint length)
-+{
-+  while (length--)
-+    *mem++ = filler;
-+}
-+
-+} // OS
-+
-+/* fake errno values */
-+int OS_ENOTBLK  = 1000;
-+int OS_ENOTSOCK = 1001;
-+
-+/* fake permissions */
-+int OS_S_IXOTH = 0;
-+int OS_S_IXGRP = 0;
-+
-+} // Birnet
-+/* vim:set ts=8 sts=2 sw=2: */
-diff --git a/birnet/birnetthreadimpl.cc b/birnet/birnetthreadimpl.cc
-index e06f4fe..60f23c9 100644
---- a/birnet/birnetthreadimpl.cc
-+++ b/birnet/birnetthreadimpl.cc
-@@ -23,19 +23,16 @@
- #define       _XOPEN_SOURCE   600     /* for full pthread facilities */
- #endif        /* defining _XOPEN_SOURCE on random systems can have bad effects */
- #include <glib.h>
--#include <sys/time.h>
--#include <sched.h>
- #include <unistd.h>     /* sched_yield() */
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <errno.h>
- #include <string.h>
--#include <sys/resource.h>
- #include <sys/time.h>
--#include <sys/times.h>
- #include "birnetutils.hh"
- #include "birnetthread.hh"
-+#include "birnetos.hh"
- #define FLOATING_FLAG                           (1 << 31)
- #define THREAD_REF_COUNT(thread)                (thread->ref_field & ~FLOATING_FLAG)
-@@ -906,7 +903,7 @@ birnet_thread_accounting_L (BirnetThread *self,
-       gint64 old_cstime = self->ac.cstime;
-       gdouble dfact = 1000000.0 / MAX (diff, 1);
-       self->ac.stamp = stamp;
--      if (0)
-+#if 0
-         {
-           struct rusage res = { { 0 } };
-           getrusage (RUSAGE_SELF, &res);
-@@ -916,8 +913,9 @@ birnet_thread_accounting_L (BirnetThread *self,
-           self->ac.cutime = timeval_usecs (&res.ru_utime);
-           self->ac.cstime = timeval_usecs (&res.ru_stime);
-         }
-+#endif
-       thread_info_from_stat_L (self, dfact);
--      self->info.priority = getpriority (PRIO_PROCESS, self->tid);
-+      self->info.priority = OS::get_thread_priority (self->tid); 
-       self->info.utime = int64 (MAX (self->ac.utime - old_utime, 0) * dfact);
-       self->info.stime = int64 (MAX (self->ac.stime - old_stime, 0) * dfact);
-       self->info.cutime = int64 (MAX (self->ac.cutime - old_cutime, 0) * dfact);
-diff --git a/birnet/birnetutils.cc b/birnet/birnetutils.cc
-index 7d6dee3..d2e58d2 100644
---- a/birnet/birnetutils.cc
-+++ b/birnet/birnetutils.cc
-@@ -20,6 +20,7 @@
- #include "birnetthread.hh"
- #include "birnetmsg.hh"
- #include "birnetcpu.hh"
-+#include "birnetos.hh"
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-@@ -187,8 +188,8 @@ birnet_init (int        *argcp,
-   {
-     struct timeval tv;
-     gettimeofday (&tv, NULL);
--    srand48 (tv.tv_usec + (tv.tv_sec << 16));
--    srand (lrand48());
-+    OS::srand48 (tv.tv_usec + (tv.tv_sec << 16));
-+    srand (OS::lrand48());
-   }
-   /* initialize sub systems */
-@@ -257,11 +258,6 @@ BIRNET_STATIC_ASSERT (LDBL_MAX     >= 1E+37);
- BIRNET_STATIC_ASSERT (LDBL_EPSILON <= 1E-9);
- /* --- assertions/warnings/errors --- */
--void
--raise_sigtrap ()
--{
--  raise (SIGTRAP);
--}
- static void
- stderr_print (bool        bail_out,
-@@ -430,7 +426,7 @@ string_vprintf (const char *format,
-                 va_list     vargs)
- {
-   char *str = NULL;
--  if (vasprintf (&str, format, vargs) >= 0 && str)
-+  if (OS::vasprintf (&str, format, vargs) >= 0 && str)
-     {
-       String s = str;
-       free (str);
-@@ -609,7 +605,7 @@ string_from_errno (int errno_val)
- {
-   char buffer[1024] = { 0, };
-   /* strerror_r() is broken on GNU systems, especially if _GNU_SOURCE is defined, so fall back to strerror() */
--  if (strerror_r (errno_val, buffer, sizeof (buffer)) < 0 || !buffer[0])
-+  if (OS::strerror_r (errno_val, buffer, sizeof (buffer)) < 0 || !buffer[0])
-     return strerror (errno_val);
-   return buffer;
- }
-@@ -738,7 +734,7 @@ errno_check_file (const char *file_name,
-       
-       if (check_link)
-         {
--          if (lstat (file_name, &st) < 0)
-+          if (OS::lstat (file_name, &st) < 0)
-             return -errno;
-         }
-       else if (stat (file_name, &st) < 0)
-@@ -749,11 +745,11 @@ errno_check_file (const char *file_name,
-                     file_name, mode,
-                     S_ISREG (st.st_mode) ? "f" : "",
-                     S_ISDIR (st.st_mode) ? "d" : "",
--                    S_ISLNK (st.st_mode) ? "l" : "",
-+                    OS::stat_is_link (st.st_mode) ? "l" : "",
-                     S_ISCHR (st.st_mode) ? "c" : "",
-                     S_ISBLK (st.st_mode) ? "b" : "",
-                     S_ISFIFO (st.st_mode) ? "p" : "",
--                    S_ISSOCK (st.st_mode) ? "s" : "");
-+                    OS::stat_is_socket (st.st_mode) ? "s" : "");
-       
-       if (S_ISDIR (st.st_mode) && (check_file || check_link || check_char || check_block || check_pipe))
-         return -EISDIR;
-@@ -761,17 +757,17 @@ errno_check_file (const char *file_name,
-         return -EINVAL;
-       if (check_dir && !S_ISDIR (st.st_mode))
-         return -ENOTDIR;
--      if (check_link && !S_ISLNK (st.st_mode))
-+      if (check_link && !OS::stat_is_link (st.st_mode))
-         return -EINVAL;
-       if (check_char && !S_ISCHR (st.st_mode))
-         return -ENODEV;
-       if (check_block && !S_ISBLK (st.st_mode))
--        return -ENOTBLK;
-+        return -OS_ENOTBLK;
-       if (check_pipe && !S_ISFIFO (st.st_mode))
-         return -ENXIO;
--      if (check_socket && !S_ISSOCK (st.st_mode))
--        return -ENOTSOCK;
--      if (check_exec && !(st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
-+      if (check_socket && !OS::stat_is_socket (st.st_mode))
-+        return -OS_ENOTSOCK;
-+      if (check_exec && !(st.st_mode & (S_IXUSR | OS_S_IXGRP | OS_S_IXOTH)))
-         return -EACCES; /* for root executable, any +x bit is good enough */
-     }
-   
-@@ -1224,7 +1220,7 @@ url_create_redirect (const char    *url,
-   while (fd < 0)
-     {
-       g_free (tname);
--      tname = g_strdup_printf ("/tmp/Url%08X%04X.html", (int) lrand48(), getpid());
-+      tname = g_strdup_printf ("/tmp/Url%08X%04X.html", (int) OS::lrand48(), OS::getpid());
-       fd = open (tname, O_WRONLY | O_CREAT | O_EXCL, 00600);
-       if (fd < 0 && errno != EEXIST)
-         {
-@@ -1365,10 +1361,7 @@ memset4 (guint32        *mem,
-          guint32         filler,
-          guint           length)
- {
--  BIRNET_STATIC_ASSERT (sizeof (*mem) == 4);
--  BIRNET_STATIC_ASSERT (sizeof (filler) == 4);
--  BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
--  wmemset ((wchar_t*) mem, filler, length);
-+  OS::memset4 (mem, filler, length);
- }
- /* --- memory utils --- */
-diff --git a/birnet/birnetutils.hh b/birnet/birnetutils.hh
-index fca908a..3b13549 100644
---- a/birnet/birnetutils.hh
-+++ b/birnet/birnetutils.hh
-@@ -18,6 +18,7 @@
- #define __BIRNET_UTILS_XX_HH__
- #include <birnet/birnetcdefs.h>
-+#include <stdarg.h>
- #include <string>
- #include <vector>
- #include <map>
-diff --git a/birnet/configure.inc b/birnet/configure.inc
-index 2e17f20..6dabed7 100644
---- a/birnet/configure.inc
-+++ b/birnet/configure.inc
-@@ -61,6 +61,9 @@ AC_DEFUN([AC_BIRNET_REQUIREMENTS],
-           ;;
-     esac
-     AC_SUBST(BIRNET_OS)
-+    AM_CONDITIONAL([BIRNET_OS_WIN32], [test x$BIRNET_OS = xWIN32])
-+    AM_CONDITIONAL([BIRNET_OS_UNIX], [test x$BIRNET_OS = xUNIX])
-+    AC_SUBST(BIRNET_OS_IMPL)
-     AC_SUBST(BIRNET_OS_CHOICES)
-     AC_DEFINE_UNQUOTED(BIRNET_OS_$BIRNET_OS, "1", [Win32 detection])
-diff --git a/birnet/tests/systest.cc b/birnet/tests/systest.cc
-index b5440f7..4e82ff8 100644
---- a/birnet/tests/systest.cc
-+++ b/birnet/tests/systest.cc
-@@ -16,7 +16,9 @@
-  */
- //#define TEST_VERBOSE
- #include <birnet/birnettests.h>
-+#ifndef WIN32
- #include <poll.h>
-+#endif
- namespace {
- using namespace Birnet;
-@@ -25,6 +27,7 @@ static void
- test_poll()
- {
-   TSTART("POLL constants");
-+#ifndef WIN32
-   TASSERT (BIRNET_SYSVAL_POLLIN     == POLLIN);
-   TASSERT (BIRNET_SYSVAL_POLLPRI    == POLLPRI);
-   TASSERT (BIRNET_SYSVAL_POLLOUT    == POLLOUT);
-@@ -35,6 +38,7 @@ test_poll()
-   TASSERT (BIRNET_SYSVAL_POLLERR    == POLLERR);
-   TASSERT (BIRNET_SYSVAL_POLLHUP    == POLLHUP);
-   TASSERT (BIRNET_SYSVAL_POLLNVAL   == POLLNVAL);
-+#endif
-   TDONE();
- }
-diff --git a/birnet/tests/threads.cc b/birnet/tests/threads.cc
-index 0c32b67..ee0bf26 100644
---- a/birnet/tests/threads.cc
-+++ b/birnet/tests/threads.cc
-@@ -17,6 +17,7 @@
- //#define TEST_VERBOSE
- #include <birnet/birnettests.h>
- #include <stdlib.h>
-+#include <unistd.h>
- namespace {
- using namespace Birnet;
-@@ -934,7 +935,7 @@ struct RingBufferReader : public virtual Birnet::Thread, IntSequence {
-     for (uint l = 0; l < ring_buffer_test_length;)
-       {
-         uint k, n = ring->n_readable();
--        n = lrand48() % MIN (n + 1, 65536 * 2);
-+        n = OS::lrand48() % MIN (n + 1, 65536 * 2);
-         int buffer[n], *b = buffer;
-         if (rand() & 1)
-           {
-@@ -1007,7 +1008,7 @@ test_ring_buffer ()
-     {
-       TSTART ("AsyncRingBuffer-big");
-       uint ring_buffer_test_length = 999999 * (init_settings().test_quick ? 1 : 20);
--      IntRingBuffer irb (16384 + (lrand48() % 8192));
-+      IntRingBuffer irb (16384 + (OS::lrand48() % 8192));
-       RingBufferReader *rbr = new RingBufferReader (&irb, ring_buffer_test_length);
-       ref_sink (rbr);
-       RingBufferWriter *rbw = new RingBufferWriter (&irb, ring_buffer_test_length);
diff --git a/005_beast_sfi.diff b/005_beast_sfi.diff
deleted file mode 100644 (file)
index 22ffda7..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-diff -ru ../orig/beast-20090428/sfi/sficomport.c obeast-20090428/sfi/sficomport.c
---- ../orig/beast-20090428/sfi/sficomport.c    2009-05-05 10:00:43.000000000 -0400
-+++ obeast-20090428/sfi/sficomport.c   2009-05-04 10:15:17.000000000 -0400
-@@ -26,7 +26,9 @@
- #include <fcntl.h>
- #include <sys/time.h>
- #include <sys/types.h>
-+#ifndef WIN32
- #include <sys/wait.h>
-+#endif
- static SFI_MSG_TYPE_DEFINE (debug_comport, "comport", SFI_MSG_DEBUG, NULL);
- #define DEBUG(...)              sfi_debug (debug_comport, __VA_ARGS__)
-@@ -52,6 +54,10 @@
- static gint
- nonblock_fd (gint fd)
- {
-+#ifdef WIN32
-+  g_print ("WIN32: implement nonblock_fd");
-+  return fd;
-+#else
-   if (fd >= 0)
-     {
-       glong r, d_long;
-@@ -66,6 +72,7 @@
-       while (r < 0 && errno == EINTR);
-     }
-   return fd;
-+#endif
- }
- SfiComPort*
-@@ -200,6 +207,9 @@
- {
-   if (port->remote_pid && !port->reaped)
-     {
-+#ifdef WIN32
-+      g_print ("implement com_port_try_reap\n");
-+#else
-       int status = 0;
-       gint ret = waitpid (port->remote_pid, &status, mayblock ? 0 : WNOHANG);
-       if (ret > 0)
-@@ -215,6 +225,7 @@
-         }
-       else if (ret < 0 && errno == EINTR && mayblock)
-         com_port_try_reap (port, mayblock);
-+#endif
-     }
- }
-@@ -243,8 +254,12 @@
-       !port->reaped &&
-       !port->sigterm_sent)
-     {
-+#ifdef WIN32
-+      g_print ("WIN32: do implement kill()");
-+#else
-       if (kill (port->remote_pid, SIGTERM) >= 0)
-         port->sigterm_sent = TRUE;
-+#endif
-       com_port_try_reap (port, FALSE);
-     }
-   if (port->link)
-@@ -603,6 +618,9 @@
-       
-       if (blocking && !port->rvalues && port->pfd[0].fd >= 0)
-         {
-+#ifdef WIN32
-+        g_print ("WIN32: do implement select()\n");
-+#else
-           struct timeval tv = { 60, 0, };
-           fd_set in_fds, out_fds, exp_fds;
-           gint xfd;
-@@ -625,6 +643,7 @@
-           /* block only once so higher layers may handle signals */
-           blocking = FALSE;
-           goto loop_blocking;
-+#endif
-         }
-     }
-   MASS_DEBUG ("[%s: DONE receiving]", port->ident);
-@@ -730,8 +749,12 @@
-       !port->reaped &&
-       !port->sigkill_sent)
-     {
-+#ifdef WIN32
-+      g_print ("WIN32: do implement kill\n");
-+#else
-       if (kill (port->remote_pid, SIGKILL) >= 0)
-         port->sigkill_sent = TRUE;
-+#endif
-     }
-   com_port_try_reap (port, TRUE);
- }
-Only in obeast-20090428/sfi/: sficomport.lo
-diff -ru ../orig/beast-20090428/sfi/sficomwire.c obeast-20090428/sfi/sficomwire.c
---- ../orig/beast-20090428/sfi/sficomwire.c    2009-05-05 10:00:43.000000000 -0400
-+++ obeast-20090428/sfi/sficomwire.c   2009-05-04 10:05:34.000000000 -0400
-@@ -23,7 +23,9 @@
- #include <signal.h>
- #include <fcntl.h>
- #include <sys/time.h>
-+#ifndef WIN32
- #include <sys/resource.h>
-+#endif
- /* --- prototypes --- */
-@@ -35,6 +37,7 @@
- static void
- nonblock_fd (gint fd)
- {
-+#ifndef WIN32
-   if (fd >= 0)
-     {
-       glong r, d_long;
-@@ -48,6 +51,7 @@
-       r = fcntl (fd, F_SETFL, d_long);
-       while (r < 0 && errno == EINTR);
-     }
-+#endif
- }
- SfiComWire*
-@@ -774,8 +778,10 @@
-   if (wire->standard_error >= 0)
-     close (wire->standard_error);
-   wire->standard_error = -1;
-+#ifndef WIN32
-   if (wire->remote_pid > 1 && terminate)
-     kill (wire->remote_pid, SIGTERM);
-+#endif
-   wire->remote_pid = -1;
- }
-@@ -828,6 +834,9 @@
- sfi_com_wire_select (SfiComWire *wire,
-                    guint       timeout)
- {
-+#ifdef WIN32
-+  g_print ("WIN32: implement sfi_com_wire_select");
-+#else
-   fd_set rfds, wfds, efds;
-   guint *fds, i, n, max_fd = 0;
-   struct timeval tv;
-@@ -859,6 +868,7 @@
-   tv.tv_usec = (timeout % 1000) * 1000;
-   tv.tv_sec = timeout / 1000;
-   select (max_fd + 1, &rfds, &wfds, NULL, &tv);
-+#endif
- }
- gchar*
-@@ -919,11 +929,15 @@
- static void
- unset_cloexec (gint fd)
- {
-+#ifdef WIN32
-+  g_print ("WIN32: implement unset_cloexec\n");
-+#else
-   gint r;
-   
-   do
-     r = fcntl (fd, F_SETFD, 0 /* FD_CLOEXEC */);
-   while (r < 0 && errno == EINTR);
-+#endif
- }
- typedef struct {
-@@ -940,8 +954,12 @@
-     unset_cloexec (cdata->keepexec1);
-   if (cdata->keepexec2)
-     unset_cloexec (cdata->keepexec2);
-+#ifdef WIN32
-+  g_print ("implement priority handling\n");
-+#else
-   /* drop scheduling priorities if we have any */
-   setpriority (PRIO_PROCESS, getpid(), 0);
-+#endif
- }
- gchar*
-@@ -955,6 +973,10 @@
-                    gint        *command_output,       /* readable */
-                    SfiRing     *args)
- {
-+#ifdef WIN32
-+  g_print ("WIN32: implement sfi_com_spawn_async\n");
-+  return NULL;
-+#else
-   gint command_input_pipe[2] = { -1, -1 };
-   gint command_output_pipe[2] = { -1, -1 };
-   ChildSetupData setup_data = { -1, -1 };
-@@ -971,7 +993,7 @@
-   
-   if (command_fd_option)
-     {
--      if (pipe (command_output_pipe) < 0 || pipe (command_input_pipe) < 0)
-+     if (pipe (command_output_pipe) < 0 || pipe (command_input_pipe) < 0)
-       {
-         gint e = errno;
-         
-@@ -1048,4 +1070,5 @@
-     }
-   
-   return reterr;
-+#endif
- }
-diff -ru ../orig/beast-20090428/sfi/sfifilecrawler.c obeast-20090428/sfi/sfifilecrawler.c
---- ../orig/beast-20090428/sfi/sfifilecrawler.c        2009-05-05 10:00:43.000000000 -0400
-+++ obeast-20090428/sfi/sfifilecrawler.c       2009-05-04 10:07:09.000000000 -0400
-@@ -509,8 +509,13 @@
-           struct stat st;
-           if (stat (str, &st) < 0)      /* guard against existance */
-             {
-+#ifdef WIN32
-+            if (mkdir (str) < 0)
-+              break;
-+#else
-               if (mkdir (str, 0755) < 0)
-                 break;
-+#endif
-             }
-         }
-     }
-@@ -601,7 +606,9 @@
-   return birnet_file_check (file, buffer);
- }
-+#ifndef WIN32
- #include <pwd.h>
-+#endif
- static gchar*
- get_user_home (const gchar *user,
-diff -ru ../orig/beast-20090428/sfi/sfistore.c obeast-20090428/sfi/sfistore.c
---- ../orig/beast-20090428/sfi/sfistore.c      2009-05-05 10:00:43.000000000 -0400
-+++ obeast-20090428/sfi/sfistore.c     2009-05-04 10:18:23.000000000 -0400
-@@ -402,6 +402,8 @@
-   return rstore;
- }
-+#define S_ISLNK(x) false
-+
- SfiRStore*
- sfi_rstore_new_open (const gchar *fname)
- {
-diff -ru ../orig/beast-20090428/sfi/sfitime.c obeast-20090428/sfi/sfitime.c
---- ../orig/beast-20090428/sfi/sfitime.c       2009-05-05 10:00:43.000000000 -0400
-+++ obeast-20090428/sfi/sfitime.c      2009-05-04 10:08:58.000000000 -0400
-@@ -60,7 +60,7 @@
-   t = tv.tv_sec + tv.tv_usec / 1000000;
-   /* we need to find out the timezone offset relative to GMT here */
--#if 0
-+#ifdef WIN32
-   { /* aparently FreeBSD/BSD4.3 doesn't have an extern long timezone; set by
-      * localtime(). if present, timezone contains # of seconds west of GMT.
-      */
diff --git a/006_beast_birnet_tests.diff b/006_beast_birnet_tests.diff
deleted file mode 100644 (file)
index 6077734..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-diff -ur ../orig/beast-20090428/birnet/tests/systest.cc beast-20090428/birnet/tests/systest.cc
---- ../orig/beast-20090428/birnet/tests/systest.cc     2009-05-05 10:00:43.000000000 -0400
-+++ beast-20090428/birnet/tests/systest.cc     2009-05-05 10:22:53.000000000 -0400
-@@ -16,7 +16,9 @@
-  */
- //#define TEST_VERBOSE
- #include <birnet/birnettests.h>
-+#ifndef WIN32
- #include <poll.h>
-+#endif
- namespace {
- using namespace Birnet;
-@@ -24,6 +26,7 @@
- static void
- test_poll()
- {
-+#ifndef WIN32
-   TSTART("POLL constants");
-   TASSERT (BIRNET_SYSVAL_POLLIN     == POLLIN);
-   TASSERT (BIRNET_SYSVAL_POLLPRI    == POLLPRI);
-@@ -36,6 +39,7 @@
-   TASSERT (BIRNET_SYSVAL_POLLHUP    == POLLHUP);
-   TASSERT (BIRNET_SYSVAL_POLLNVAL   == POLLNVAL);
-   TDONE();
-+#endif
- }
- } // Anon
-Only in beast-20090428/birnet/tests: systest.exe
-Only in beast-20090428/birnet/tests: systest.o
-diff -ur ../orig/beast-20090428/birnet/tests/threads.cc beast-20090428/birnet/tests/threads.cc
---- ../orig/beast-20090428/birnet/tests/threads.cc     2009-05-05 10:00:43.000000000 -0400
-+++ beast-20090428/birnet/tests/threads.cc     2009-05-05 10:30:31.000000000 -0400
-@@ -17,6 +17,7 @@
- //#define TEST_VERBOSE
- #include <birnet/birnettests.h>
- #include <stdlib.h>
-+#include <unistd.h>
- namespace {
- using namespace Birnet;
-@@ -934,7 +935,7 @@
-     for (uint l = 0; l < ring_buffer_test_length;)
-       {
-         uint k, n = ring->n_readable();
--        n = lrand48() % MIN (n + 1, 65536 * 2);
-+        n = g_random_int() % MIN (n + 1, 65536 * 2);
-         int buffer[n], *b = buffer;
-         if (rand() & 1)
-           {
-@@ -1007,7 +1008,7 @@
-     {
-       TSTART ("AsyncRingBuffer-big");
-       uint ring_buffer_test_length = 999999 * (init_settings().test_quick ? 1 : 20);
--      IntRingBuffer irb (16384 + (lrand48() % 8192));
-+      IntRingBuffer irb (16384 + (g_random_int() % 8192));
-       RingBufferReader *rbr = new RingBufferReader (&irb, ring_buffer_test_length);
-       ref_sink (rbr);
-       RingBufferWriter *rbw = new RingBufferWriter (&irb, ring_buffer_test_length);
diff --git a/007_g_print_and_bse.diff b/007_g_print_and_bse.diff
deleted file mode 100755 (executable)
index 431e8fa..0000000
+++ /dev/null
@@ -1,4263 +0,0 @@
---- ../../../orig/beast-20090428/bse/Makefile.am       2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/Makefile.am 2009-05-07 05:20:09.000000000 -0400
-@@ -10,7 +10,7 @@
- # need -I$(top_builddir) for <sfi/sficonfig.h>
- # need -I$(srcdir) for "bseserver.h" in .genprc.c
- # need -I. (builddir) for "bsecore.genidl.hh" in bsecore.cc
--INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(BSE_CFLAGS) -DG_DISABLE_DEPRECATED -DG_DISABLE_CONST_RETURNS
-+INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(BSE_CFLAGS) -DG_DISABLE_DEPRECATED -DG_DISABLE_CONST_RETURNS $(CFLAGS)
- DEFS     += $(strip \
-       $(patsubst %, -DG_LOG_DOMAIN=\"BSE\" -DBSE_COMPILATION, \
-                     $(filter $(<F), $(bse_sources) $(bse_sources))) \
-@@ -163,7 +163,7 @@
- # rules to generate built sources
- #
- %.genprc.c: @PERLRULE@ %.proc mkcproc.pl
--      $(srcdir)/mkcproc.pl --funcname $@ --preprocess $< >$@
-+      $(PERL) $(srcdir)/mkcproc.pl --funcname $@ --preprocess $< >$@
- CLEANSTAMPFILES = 
- if WITH_PERLRULE
- CLEANFILES += $(bse_proc_gen_sources) $(CLEANSTAMPFILES)
---- ../../../orig/beast-20090428/bse/bseblockutils.hh  2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/bseblockutils.hh    2009-05-07 05:12:20.000000000 -0400
-@@ -191,10 +191,15 @@
-              float          *values,
-              float           value)
- {
-+#ifdef WIN32
-+  while (n_values--)
-+    *values++ = value;
-+#else
-   BIRNET_STATIC_ASSERT (sizeof (float) == 4);
-   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-   const union { float f; guint32 vuint32; } u = { value };
-   wmemset ((wchar_t*) values, u.vuint32, n_values);
-+#endif
- }
- inline void
-@@ -202,8 +207,13 @@
-              guint32        *values,
-              guint32         value)
- {
-+#ifdef WIN32
-+  while (n_values--)
-+    *values++ = value;
-+#else
-   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-   wmemset ((wchar_t*) values, value, n_values);
-+#endif
- }
- inline void
-@@ -211,8 +221,12 @@
-              guint32       *values,
-              const guint32 *ivalues)
- {
-+#ifdef WIN32
-+  memcpy (values, ivalues, n_values * sizeof (guint32));
-+#else
-   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-   wmemcpy ((wchar_t*) values, (const wchar_t*) ivalues, n_values);
-+#endif
- }
- inline void
-@@ -220,9 +234,13 @@
-              gfloat       *values,
-              const gfloat *ivalues)
- {
-+#ifdef WIN32
-+  memcpy (values, ivalues, n_values * sizeof (guint32));
-+#else
-   BIRNET_STATIC_ASSERT (sizeof (float) == 4);
-   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-   wmemcpy ((wchar_t*) values, (const wchar_t*) ivalues, n_values);
-+#endif
- }
- } // Bse
-@@ -236,8 +254,13 @@
-                      guint32 *values,
-                      guint32  vuint32)
- {
-+#ifdef WIN32
-+  while (n_values--)
-+    *values++ = vuint32;
-+#else
-   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-   wmemset ((wchar_t*) values, vuint32, n_values);
-+#endif
- }
- static inline void
-@@ -245,10 +268,15 @@
-                     float       *values,
-                     const float  value)
- {
-+#ifdef WIN32
-+  while (n_values--)
-+    *values++ = value;
-+#else
-   BIRNET_STATIC_ASSERT (sizeof (float) == 4);
-   const union { float f; guint32 vuint32; } u = { value };
-   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-   wmemset ((wchar_t*) values, u.vuint32, n_values);
-+#endif
- }
- static inline void
-@@ -256,8 +284,13 @@
-                      guint32       *values,
-                      const guint32 *ivalues)
- {
-+#if WIN32
-+  while (n_values--)
-+    *values++ = *ivalues++;
-+#else
-   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-   wmemcpy ((wchar_t*) values, (const wchar_t*) ivalues, n_values);
-+#endif
- }
- static inline void
-@@ -265,9 +298,14 @@
-                     gfloat       *values,
-                     const gfloat *ivalues)
- {
-+#if WIN32
-+  while (n_values--)
-+    *values++ = *ivalues++;
-+#else
-   BIRNET_STATIC_ASSERT (sizeof (float) == 4);
-   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
-   wmemcpy ((wchar_t*) values, (const wchar_t*) ivalues, n_values);
-+#endif
- }
- G_END_DECLS
---- ../../../orig/beast-20090428/bse/bseengine.c       2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/bseengine.c 2009-05-07 05:05:15.000000000 -0400
-@@ -1442,8 +1442,11 @@
-   
-   if (bse_engine_threaded)
-     {
-+#ifndef WIN32
-       gint err = pipe (master_data.wakeup_pipe);
-+#endif
-       master_data.user_thread = sfi_thread_self ();
-+#ifndef WIN32
-       if (!err)
-       {
-         glong d_long = fcntl (master_data.wakeup_pipe[0], F_GETFL, 0);
-@@ -1460,6 +1463,7 @@
-       }
-       if (err)
-       g_error ("failed to create wakeup pipe: %s", g_strerror (errno));
-+#endif
-       master_thread = sfi_thread_run ("DSP #1", (BirnetThreadFunc) bse_engine_master_thread, &master_data);
-       if (!master_thread)
-       g_error ("failed to create master thread");
---- ../../../orig/beast-20090428/bse/bseenginemaster.c 2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/bseenginemaster.c   2009-05-07 05:15:02.000000000 -0400
-@@ -24,7 +24,9 @@
- #include "bseieee754.h"
- #include <string.h>
- #include <unistd.h>
-+#ifndef WIN32
- #include <sys/poll.h>
-+#endif
- #include <sys/time.h>
- #include <errno.h>
-@@ -1143,6 +1145,7 @@
- {
-   bse_message_setup_thread_handler ();
-+#ifndef WIN32
-   /* assert pollfd equality, since we're simply casting structures */
-   BIRNET_STATIC_ASSERT (sizeof (struct pollfd) == sizeof (GPollFD));
-   BIRNET_STATIC_ASSERT (G_STRUCT_OFFSET (GPollFD, fd) == G_STRUCT_OFFSET (struct pollfd, fd));
-@@ -1158,6 +1161,7 @@
-   master_pollfds[0].fd = mdata->wakeup_pipe[0];
-   master_pollfds[0].events = G_IO_IN;
-   master_n_pollfds = 1;
-+#endif
-   master_pollfds_changed = TRUE;
-   
-   toyprof_stampinit ();
-@@ -1171,12 +1175,13 @@
-       
-       if (!need_dispatch)
-       {
-+#ifndef WIN32
-         gint err = poll ((struct pollfd*) loop.fds, loop.n_fds, loop.timeout);
-         if (err >= 0)
-           loop.revents_filled = TRUE;
-         else if (errno != EINTR)
-           g_printerr ("%s: poll() error: %s\n", G_STRFUNC, g_strerror (errno));
--        
-+#endif
-         if (loop.revents_filled)
-           need_dispatch = _engine_master_check (&loop);
-       }
---- ../../../orig/beast-20090428/bse/bsemididevice-oss.c       2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/bsemididevice-oss.c 2009-05-07 05:27:31.000000000 -0400
-@@ -30,7 +30,9 @@
- #elif HAVE_SOUNDCARD_H
- #include <soundcard.h>
- #endif
-+#ifndef WIN32
- #include <sys/ioctl.h>
-+#endif
- #include <sys/types.h>
- #include <sys/time.h>
- #include <unistd.h>
-@@ -40,6 +42,9 @@
- static SFI_MSG_TYPE_DEFINE (debug_midi, "midi", SFI_MSG_DEBUG, NULL);
- #define MIDI_DEBUG(...) sfi_debug (debug_midi, __VA_ARGS__)
-+#ifdef WIN32
-+#define O_NONBLOCK 0
-+#endif
- /* --- structs --- */
---- ../../../orig/beast-20090428/bse/bsepcmdevice-oss.c        2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/bsepcmdevice-oss.c  2009-05-07 05:29:15.000000000 -0400
-@@ -21,7 +21,7 @@
- #include      "gsldatautils.h"
- #include      "gslcommon.h" // FIXME: remove
--#ifndef       BSE_PCM_DEVICE_CONF_OSS
-+#if !defined(BSE_PCM_DEVICE_CONF_OSS) || defined (WIN32)
- BSE_DUMMY_TYPE (BsePcmDeviceOSS);
- #else   /* BSE_PCM_DEVICE_CONF_OSS */
---- ../../../orig/beast-20090428/bse/bseplugin.c       2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/bseplugin.c 2009-05-07 05:30:29.000000000 -0400
-@@ -611,8 +611,11 @@
-       /* open libtool archive */
-       gint fd = open (const_file_name, O_RDONLY, 0);
-       if (fd < 0)
--        return (errno == ENOENT || errno == ENOTDIR || errno == ELOOP ?
--                bse_error_blurb (BSE_ERROR_FILE_NOT_FOUND) :
-+        return (errno == ENOENT || errno == ENOTDIR
-+#ifndef WIN32
-+                                || errno == ELOOP 
-+#endif
-+             ? bse_error_blurb (BSE_ERROR_FILE_NOT_FOUND) :
-                 "Unable to access plugin");
-       
-       /* and search libtool's dlname specification */
---- ../../../orig/beast-20090428/bse/bsesequencer.cc   2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/bsesequencer.cc     2009-05-07 05:34:01.000000000 -0400
-@@ -24,7 +24,9 @@
- #include "bsemidireceiver.h"
- #include "bsemain.h"
- #include "bseieee754.h"
-+#ifndef WIN32
- #include <sys/poll.h>
-+#endif
- #include <unistd.h>
- #include <fcntl.h>
- #include <errno.h>
-@@ -63,12 +65,14 @@
-   sfi_cond_init (&current_watch_cond);
-+#ifndef WIN32
-   if (pipe (sequencer_wake_up_pipe) < 0)
-     g_error ("failed to create sequencer wake-up pipe: %s", strerror (errno));
-   glong flags = fcntl (sequencer_wake_up_pipe[0], F_GETFL, 0);
-   fcntl (sequencer_wake_up_pipe[0], F_SETFL, O_NONBLOCK | flags);
-   flags = fcntl (sequencer_wake_up_pipe[1], F_GETFL, 0);
-   fcntl (sequencer_wake_up_pipe[1], F_SETFL, O_NONBLOCK | flags);
-+#endif
-   /* initialize BseSequencer */
-   static BseSequencer sseq = { 0, };
-@@ -185,7 +189,7 @@
-     watches.erase (watches.begin() + i);
-     return true;
-   }
--  
-+#ifndef WIN32 
-   BIRNET_STATIC_ASSERT (sizeof (GPollFD) == sizeof (struct pollfd));
-   BIRNET_STATIC_ASSERT (offsetof (GPollFD, fd) == offsetof (struct pollfd, fd));
-   BIRNET_STATIC_ASSERT (sizeof (((GPollFD*) 0)->fd) == sizeof (((struct pollfd*) 0)->fd));
-@@ -193,6 +197,7 @@
-   BIRNET_STATIC_ASSERT (sizeof (((GPollFD*) 0)->events) == sizeof (((struct pollfd*) 0)->events));
-   BIRNET_STATIC_ASSERT (offsetof (GPollFD, revents) == offsetof (struct pollfd, revents));
-   BIRNET_STATIC_ASSERT (sizeof (((GPollFD*) 0)->revents) == sizeof (((struct pollfd*) 0)->revents));
-+#endif
- };
- } // Anon
-@@ -272,6 +277,7 @@
-   pfds[0].revents = 0;
-   sequencer_poll_pool.fill_pfds (n_pfds - 1, pfds + 1); /* rest used for io watch array */
-   BSE_SEQUENCER_UNLOCK ();
-+#ifndef WIN32
-   gint result = poll ((struct pollfd*) pfds, n_pfds, timeout_ms);
-   if (result < 0 && errno != EINTR)
-     g_printerr ("%s: poll() error: %s\n", G_STRFUNC, g_strerror (errno));
-@@ -304,6 +310,7 @@
-           sfi_cond_broadcast (&current_watch_cond);     /* wake up threads in bse_sequencer_remove_io_watch() */
-         }
-     }
-+#endif
-   return !sfi_thread_aborted();
- }
---- ../../../orig/beast-20090428/bse/bseserver.c       2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/bseserver.c 2009-05-07 05:31:41.000000000 -0400
-@@ -26,7 +26,9 @@
- #include "bsemididevice-null.h"
- #include "bsejanitor.h"
- #include <sys/time.h>
-+#ifndef WIN32
- #include <sys/resource.h>
-+#endif
- #include <fcntl.h>
- #include <unistd.h>
- #include <string.h>
-@@ -1166,10 +1168,12 @@
-       int current_priority;
-       engine_is_initialized = TRUE;
-       bse_engine_init (TRUE);
-+#ifndef WIN32
-       /* lower priorities compared to engine if our priority range permits */
-       current_priority = getpriority (PRIO_PROCESS, mypid);
-       if (current_priority <= -2 && mypid)
-         setpriority (PRIO_PROCESS, mypid, current_priority + 1);
-+#endif
-     }
-   bse_engine_configure (BSE_GCONFIG (synth_latency), mix_freq, BSE_GCONFIG (synth_control_freq));
---- ../../../orig/beast-20090428/bse/gslcommon.c       2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/gslcommon.c 2009-05-07 04:48:19.000000000 -0400
-@@ -18,13 +18,15 @@
- #include "gsldatacache.h"
- #include <unistd.h>
--#include <sys/utsname.h>
- #include <string.h>
- #include <fcntl.h>
- #include <stdlib.h>
--#include <sched.h>
- #include <errno.h>
-+#ifndef WIN32
-+#include <sys/utsname.h>
-+#include <sched.h>
- #include <sys/poll.h>
-+#endif
- #include <sys/stat.h>
- #include <sys/time.h>
-@@ -179,7 +181,9 @@
-   switch (sys_errno)
-     {
-     case 0:             return BSE_ERROR_NONE;
-+#ifdef ELOOP  /* Windows lacks this */
-     case ELOOP:
-+#endif
-     case ENAMETOOLONG:
-     case ENOENT:        return BSE_ERROR_FILE_NOT_FOUND;
-     case EISDIR:        return BSE_ERROR_FILE_IS_DIR;
-@@ -187,9 +191,11 @@
-     case EPERM:
-     case EACCES:        return BSE_ERROR_PERMS;
- #ifdef ENODATA  /* GNU/kFreeBSD lacks this */
--    case ENODATA:
-+    case ENODATA:     return BSE_ERROR_FILE_EOF;
- #endif
-+#ifdef ENOMSG /* Windows lacks this */
-     case ENOMSG:        return BSE_ERROR_FILE_EOF;
-+#endif
-     case ENOMEM:      return BSE_ERROR_NO_MEMORY;
-     case ENOSPC:      return BSE_ERROR_NO_SPACE;
-     case ENFILE:      return BSE_ERROR_NO_FILES;
-@@ -198,7 +204,9 @@
-     case ESPIPE:
-     case EIO:           return BSE_ERROR_IO;
-     case EEXIST:        return BSE_ERROR_FILE_EXISTS;
-+#ifdef ETXTBSY
-     case ETXTBSY:
-+#endif
-     case EBUSY:         return BSE_ERROR_FILE_BUSY;
-     case EAGAIN:
-     case EINTR:               return BSE_ERROR_TEMP;
---- ../../../orig/beast-20090428/bse/gsldatahandle-mad.c       2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/gsldatahandle-mad.c 2009-05-07 04:49:05.000000000 -0400
-@@ -21,7 +21,9 @@
- #include <assert.h>
- #include <stdio.h>
- #include <unistd.h>
-+#ifndef WIN32
- #include <sys/mman.h>
-+#endif
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
---- ../../../orig/beast-20090428/bse/gslfilehash.c     2009-05-05 10:00:43.000000000 -0400
-+++ ../bse/gslfilehash.c       2009-05-07 04:49:52.000000000 -0400
-@@ -127,6 +127,10 @@
-     {
-       gint fd;
-       
-+#ifdef WIN32
-+#define O_NOCTTY 0
-+#endif
-+      
-       fd = open (file_name, O_RDONLY | O_NOCTTY, 0);
-       if (fd >= 0)
-       {
---- ../../../orig/beast-20090428/sfi/sfidl-cbase.cc    2009-05-05 10:00:43.000000000 -0400
-+++ ../sfi/sfidl-cbase.cc      2009-05-05 10:53:01.000000000 -0400
-@@ -507,33 +507,33 @@
-     }
-   bool first = true;
--  printf("%s%s%s (", cTypeRet (mdef.result.type), proto?" ":"\n", mname.c_str());
-+  g_print ("%s%s%s (", cTypeRet (mdef.result.type), proto?" ":"\n", mname.c_str());
-   for(pi = mdef.params.begin(); pi != mdef.params.end(); pi++)
-     {
-       if (pi->name == "_object_id") continue; // C++ binding: get _object_id from class
--      if(!first) printf(", ");
-+      if(!first) g_print (", ");
-       first = false;
--      printf("%s %s", cTypeArg (pi->type), pi->name.c_str());
-+      g_print ("%s %s", cTypeArg (pi->type), pi->name.c_str());
-     }
-   if (first)
--    printf("void");
--  printf(")");
-+    g_print ("void");
-+  g_print (")");
-   if (proto)
-     {
--      printf(";\n");
-+      g_print (";\n");
-       return;
-     }
--  printf(" {\n");
-+  g_print (" {\n");
-   String vret = createTypeCode (mdef.result.type, MODEL_VCALL_RET);
-   if (mdef.result.type != "void")
--    printf ("  %s _retval;\n", vret.c_str());
-+    g_print  ("  %s _retval;\n", vret.c_str());
-   String rfree = createTypeCode (mdef.result.type, "_retval_conv", MODEL_VCALL_RFREE);
-   if (rfree != "")
--    printf ("  %s _retval_conv;\n", cTypeRet (mdef.result.type));
-+    g_print  ("  %s _retval_conv;\n", cTypeRet (mdef.result.type));
-   map<String, String> cname;
-   for(pi = mdef.params.begin(); pi != mdef.params.end(); pi++)
-@@ -544,27 +544,27 @@
-         cname[pi->name] = pi->name + "__c";
-         String arg = createTypeCode(pi->type, MODEL_VCALL_CARG);
--        printf("  %s %s__c = %s;\n", arg.c_str(), pi->name.c_str(), conv.c_str());
-+        g_print ("  %s %s__c = %s;\n", arg.c_str(), pi->name.c_str(), conv.c_str());
-       }
-       else
-       cname[pi->name] = pi->name;
-     }
--  printf("  ");
-+  g_print ("  ");
-   if (mdef.result.type != "void")
--    printf("_retval = ");
-+    g_print ("_retval = ");
-   String vcall = createTypeCode(mdef.result.type, "", MODEL_VCALL);
--  printf("%s (\"%s\", ", vcall.c_str(), dname.c_str());
-+  g_print ("%s (\"%s\", ", vcall.c_str(), dname.c_str());
-   for(pi = mdef.params.begin(); pi != mdef.params.end(); pi++)
--    printf("%s ", createTypeCode(pi->type, cname[pi->name], MODEL_VCALL_ARG).c_str());
--  printf("0);\n");
-+    g_print ("%s ", createTypeCode(pi->type, cname[pi->name], MODEL_VCALL_ARG).c_str());
-+  g_print ("0);\n");
-   for(pi = mdef.params.begin(); pi != mdef.params.end(); pi++)
-     {
-       String cfree = createTypeCode (pi->type, cname[pi->name], MODEL_VCALL_CFREE);
-       if (cfree != "")
--      printf("  %s;\n", cfree.c_str());
-+      g_print ("  %s;\n", cfree.c_str());
-     }
-   if (mdef.result.type != "void")
-@@ -573,16 +573,16 @@
-       if (rfree != "")
-       {
--        printf ("  _retval_conv = %s;\n", rconv.c_str());
--        printf ("  %s;\n", rfree.c_str());
--        printf ("  return _retval_conv;\n");
-+        g_print  ("  _retval_conv = %s;\n", rconv.c_str());
-+        g_print  ("  %s;\n", rfree.c_str());
-+        g_print  ("  return _retval_conv;\n");
-       }
-       else
-       {
--        printf ("  return %s;\n", rconv.c_str());
-+        g_print  ("  return %s;\n", rconv.c_str());
-       }
-     }
--  printf("}\n\n");
-+  g_print ("}\n\n");
- }
- static bool choiceReverseSort(const ChoiceValue& e1, const ChoiceValue& e2)
-@@ -616,31 +616,31 @@
-       ci->name = makeLowerName (ci->name, '-');
-       sort (components.begin(), components.end(), ::choiceReverseSort);
--      printf("static const SfiConstants %s_vals[%zd] = {\n",name.c_str(), ei->contents.size());
-+      g_print ("static const SfiConstants %s_vals[%zd] = {\n",name.c_str(), ei->contents.size());
-       for (ci = components.begin(); ci != components.end(); ci++)
-       {
-         int value = ci->sequentialValue;
-         minval = min (value, minval);
-         maxval = max (value, maxval);
--        printf("  { \"%s\", %zd, %d },\n", ci->name.c_str(), ci->name.size(), value);
-+        g_print ("  { \"%s\", %zd, %d },\n", ci->name.c_str(), ci->name.size(), value);
-       }
--      printf("};\n\n");
-+      g_print ("};\n\n");
--      printf("const gchar*\n");
--      printf("%s_to_choice (%s value)\n", name.c_str(), arg.c_str());
--      printf("{\n");
--      printf("  g_return_val_if_fail (value >= %d && value <= %d, NULL);\n", minval, maxval);
--      printf("  return sfi_constants_get_name (G_N_ELEMENTS (%s_vals), %s_vals, value);\n",
-+      g_print ("const gchar*\n");
-+      g_print ("%s_to_choice (%s value)\n", name.c_str(), arg.c_str());
-+      g_print ("{\n");
-+      g_print ("  g_return_val_if_fail (value >= %d && value <= %d, NULL);\n", minval, maxval);
-+      g_print ("  return sfi_constants_get_name (G_N_ELEMENTS (%s_vals), %s_vals, value);\n",
-         name.c_str(), name.c_str());
--      printf("}\n\n");
-+      g_print ("}\n\n");
--      printf("%s\n", cTypeRet (ei->name));
--      printf("%s_from_choice (const gchar *choice)\n", name.c_str());
--      printf("{\n");
--      printf("  return (%s) (choice ? sfi_constants_get_index (G_N_ELEMENTS (%s_vals), "
-+      g_print ("%s\n", cTypeRet (ei->name));
-+      g_print ("%s_from_choice (const gchar *choice)\n", name.c_str());
-+      g_print ("{\n");
-+      g_print ("  return (%s) (choice ? sfi_constants_get_index (G_N_ELEMENTS (%s_vals), "
-                           "%s_vals, choice) : 0);\n", cTypeRet (ei->name), name.c_str(), name.c_str());
--      printf("}\n");
--      printf("\n");
-+      g_print ("}\n");
-+      g_print ("\n");
-     }
- }
-@@ -651,7 +651,7 @@
-       if (parser.fromInclude (ri->name)) continue;
-       String mname = makeMixedName (ri->name);
--      printf("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
-+      g_print ("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
-     }
- }
-@@ -662,7 +662,7 @@
-       if (parser.fromInclude (si->name)) continue;
-       String mname = makeMixedName (si->name);
--      printf("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
-+      g_print ("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
-     }
- }
-@@ -674,14 +674,14 @@
-       String mname = makeMixedName (ri->name.c_str());
--      printf("struct _%s {\n", mname.c_str());
-+      g_print ("struct _%s {\n", mname.c_str());
-       for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
--        printf("  %s %s;\n", cTypeField (pi->type), pi->name.c_str());
-+        g_print ("  %s %s;\n", cTypeField (pi->type), pi->name.c_str());
-       }
--      printf("};\n");
-+      g_print ("};\n");
-     }
--  printf("\n");
-+  g_print ("\n");
- }
- void CodeGeneratorCBase::printClientSequenceDefinitions()
-@@ -694,10 +694,10 @@
-       String array = typeArray (si->content.type);
-       String elements = si->content.name;
--      printf("struct _%s {\n", mname.c_str());
--      printf("  guint n_%s;\n", elements.c_str ());
--      printf("  %s %s;\n", array.c_str(), elements.c_str());
--      printf("};\n");
-+      g_print ("struct _%s {\n", mname.c_str());
-+      g_print ("  guint n_%s;\n", elements.c_str ());
-+      g_print ("  %s %s;\n", array.c_str(), elements.c_str());
-+      g_print ("};\n");
-     }
- }
-@@ -721,15 +721,15 @@
-       }
-       else
-       {
--        printf("%s %s_new (void);\n", ret.c_str(), lname.c_str());
--        printf("%s %s_copy_shallow (%s rec);\n", ret.c_str(), lname.c_str(), arg.c_str());
--        printf("%s %s_from_rec (SfiRec *sfi_rec);\n", ret.c_str(), lname.c_str());
--        printf("SfiRec *%s_to_rec (%s rec);\n", lname.c_str(), arg.c_str());
--        printf("void %s_free (%s rec);\n", lname.c_str(), arg.c_str());
--        printf("\n");
-+        g_print ("%s %s_new (void);\n", ret.c_str(), lname.c_str());
-+        g_print ("%s %s_copy_shallow (%s rec);\n", ret.c_str(), lname.c_str(), arg.c_str());
-+        g_print ("%s %s_from_rec (SfiRec *sfi_rec);\n", ret.c_str(), lname.c_str());
-+        g_print ("SfiRec *%s_to_rec (%s rec);\n", lname.c_str(), arg.c_str());
-+        g_print ("void %s_free (%s rec);\n", lname.c_str(), arg.c_str());
-+        g_print ("\n");
-       }
-     }
--  printf("\n");
-+  g_print ("\n");
- }
- void CodeGeneratorCBase::printClientSequenceMethodPrototypes (PrefixSymbolMode mode)
-@@ -755,14 +755,14 @@
-       }
-       else
-       {
--        printf("%s %s_new (void);\n", ret.c_str(), lname.c_str());
--        printf("void %s_append (%s seq, %s element);\n", lname.c_str(), arg.c_str(), element.c_str());
--        printf("%s %s_copy_shallow (%s seq);\n", ret.c_str(), lname.c_str(), arg.c_str());
--        printf("%s %s_from_seq (SfiSeq *sfi_seq);\n", ret.c_str(), lname.c_str());
--        printf("SfiSeq *%s_to_seq (%s seq);\n", lname.c_str(), arg.c_str());
--        printf("void %s_resize (%s seq, guint new_size);\n", lname.c_str(), arg.c_str());
--        printf("void %s_free (%s seq);\n", lname.c_str(), arg.c_str());
--        printf("\n");
-+        g_print ("%s %s_new (void);\n", ret.c_str(), lname.c_str());
-+        g_print ("void %s_append (%s seq, %s element);\n", lname.c_str(), arg.c_str(), element.c_str());
-+        g_print ("%s %s_copy_shallow (%s seq);\n", ret.c_str(), lname.c_str(), arg.c_str());
-+        g_print ("%s %s_from_seq (SfiSeq *sfi_seq);\n", ret.c_str(), lname.c_str());
-+        g_print ("SfiSeq *%s_to_seq (%s seq);\n", lname.c_str(), arg.c_str());
-+        g_print ("void %s_resize (%s seq, guint new_size);\n", lname.c_str(), arg.c_str());
-+        g_print ("void %s_free (%s seq);\n", lname.c_str(), arg.c_str());
-+        g_print ("\n");
-       }
-     }
- }
-@@ -780,10 +780,10 @@
-       String lname = makeLowerName (ri->name.c_str());
-       String mname = makeMixedName (ri->name.c_str());
--      printf("%s\n", ret.c_str());
--      printf("%s_new (void)\n", lname.c_str());
--      printf("{\n");
--      printf("  %s rec = g_new0 (%s, 1);\n", arg.c_str(), mname.c_str());
-+      g_print ("%s\n", ret.c_str());
-+      g_print ("%s_new (void)\n", lname.c_str());
-+      g_print ("{\n");
-+      g_print ("  %s rec = g_new0 (%s, 1);\n", arg.c_str(), mname.c_str());
-       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
-         /* FIXME(tim): this needs to be much more versatile, so we can e.g. change
-@@ -793,93 +793,93 @@
-          * way we do it in the C++ language binding)
-          */
-         String init = funcNew (pi->type);
--        if (init != "") printf("  rec->%s = %s();\n", pi->name.c_str(), init.c_str());
-+        if (init != "") g_print ("  rec->%s = %s();\n", pi->name.c_str(), init.c_str());
-       }
--      printf("  return rec;\n");
--      printf("}\n\n");
-+      g_print ("  return rec;\n");
-+      g_print ("}\n\n");
--      printf("%s\n", ret.c_str());
--      printf("%s_copy_shallow (%s rec)\n", lname.c_str(), arg.c_str());
--      printf("{\n");
--      printf("  %s rec_copy;\n", arg.c_str());
--      printf("  if (!rec)\n");
--      printf("    return NULL;");
--      printf("\n");
--      printf("  rec_copy = g_new0 (%s, 1);\n", mname.c_str());
-+      g_print ("%s\n", ret.c_str());
-+      g_print ("%s_copy_shallow (%s rec)\n", lname.c_str(), arg.c_str());
-+      g_print ("{\n");
-+      g_print ("  %s rec_copy;\n", arg.c_str());
-+      g_print ("  if (!rec)\n");
-+      g_print ("    return NULL;");
-+      g_print ("\n");
-+      g_print ("  rec_copy = g_new0 (%s, 1);\n", mname.c_str());
-       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
-         /* FIXME(tim): this needs to be more versatile, so NULL fields can be special
-          * cased before copying */
-         String copy =  funcCopy (pi->type);
--        printf("  rec_copy->%s = %s (rec->%s);\n", pi->name.c_str(), copy.c_str(),
-+        g_print ("  rec_copy->%s = %s (rec->%s);\n", pi->name.c_str(), copy.c_str(),
-             pi->name.c_str());
-       }
--      printf("  return rec_copy;\n");
--      printf("}\n\n");
-+      g_print ("  return rec_copy;\n");
-+      g_print ("}\n\n");
--      printf("%s\n", ret.c_str());
--      printf("%s_from_rec (SfiRec *sfi_rec)\n", lname.c_str());
--      printf("{\n");
--      printf("  GValue *element;\n");
--      printf("  %s rec;\n", arg.c_str());
--      printf("  if (!sfi_rec)\n");
--      printf("    return NULL;\n");
--      printf("\n");
--      printf("  rec = g_new0 (%s, 1);\n", mname.c_str());
-+      g_print ("%s\n", ret.c_str());
-+      g_print ("%s_from_rec (SfiRec *sfi_rec)\n", lname.c_str());
-+      g_print ("{\n");
-+      g_print ("  GValue *element;\n");
-+      g_print ("  %s rec;\n", arg.c_str());
-+      g_print ("  if (!sfi_rec)\n");
-+      g_print ("    return NULL;\n");
-+      g_print ("\n");
-+      g_print ("  rec = g_new0 (%s, 1);\n", mname.c_str());
-       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
-         String elementFromValue = createTypeCode (pi->type, "element", MODEL_FROM_VALUE);
-         String init = funcNew (pi->type);
--        printf("  element = sfi_rec_get (sfi_rec, \"%s\");\n", pi->name.c_str());
--        printf("  if (element)\n");
--        printf("    rec->%s = %s;\n", pi->name.c_str(), elementFromValue.c_str());
-+        g_print ("  element = sfi_rec_get (sfi_rec, \"%s\");\n", pi->name.c_str());
-+        g_print ("  if (element)\n");
-+        g_print ("    rec->%s = %s;\n", pi->name.c_str(), elementFromValue.c_str());
-         if (init != "")
-           {
--            printf("  else\n");
--            printf("    rec->%s = %s();\n", pi->name.c_str(), init.c_str());
-+            g_print ("  else\n");
-+            g_print ("    rec->%s = %s();\n", pi->name.c_str(), init.c_str());
-           }
-       }
--      printf("  return rec;\n");
--      printf("}\n\n");
-+      g_print ("  return rec;\n");
-+      g_print ("}\n\n");
--      printf("SfiRec *\n");
--      printf("%s_to_rec (%s rec)\n", lname.c_str(), arg.c_str());
--      printf("{\n");
--      printf("  SfiRec *sfi_rec;\n");
--      printf("  GValue *element;\n");
--      printf("  if (!rec)\n");
--      printf("    return NULL;\n");
--      printf("\n");
--      printf("  sfi_rec = sfi_rec_new ();\n");
-+      g_print ("SfiRec *\n");
-+      g_print ("%s_to_rec (%s rec)\n", lname.c_str(), arg.c_str());
-+      g_print ("{\n");
-+      g_print ("  SfiRec *sfi_rec;\n");
-+      g_print ("  GValue *element;\n");
-+      g_print ("  if (!rec)\n");
-+      g_print ("    return NULL;\n");
-+      g_print ("\n");
-+      g_print ("  sfi_rec = sfi_rec_new ();\n");
-       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
-         String elementToValue = createTypeCode (pi->type, "rec->" + pi->name, MODEL_TO_VALUE);
--        printf("  element = %s;\n", elementToValue.c_str());
--        printf("  sfi_rec_set (sfi_rec, \"%s\", element);\n", pi->name.c_str());
--        printf("  sfi_value_free (element);\n");        // FIXME: couldn't we have take_set
--      }
--      printf("  return sfi_rec;\n");
--      printf("}\n\n");
--
--      printf("void\n");
--      printf("%s_free (%s rec)\n", lname.c_str(), arg.c_str());
--      printf("{\n");
--      printf("  g_return_if_fail (rec != NULL);\n");
-+        g_print ("  element = %s;\n", elementToValue.c_str());
-+        g_print ("  sfi_rec_set (sfi_rec, \"%s\", element);\n", pi->name.c_str());
-+        g_print ("  sfi_value_free (element);\n");        // FIXME: couldn't we have take_set
-+      }
-+      g_print ("  return sfi_rec;\n");
-+      g_print ("}\n\n");
-+
-+      g_print ("void\n");
-+      g_print ("%s_free (%s rec)\n", lname.c_str(), arg.c_str());
-+      g_print ("{\n");
-+      g_print ("  g_return_if_fail (rec != NULL);\n");
-       /* FIXME (tim): should free functions generally demand non-NULL structures? */
--      printf("  \n");
-+      g_print ("  \n");
-       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
-         /* FIXME (tim): needs to be more verstaile, so NULL fields can be properly special cased */
-         // FIXME (stw): there _should_ be no NULL fields in some cases (sequences)!
-         String free = funcFree (pi->type);
--        if (free != "") printf("  if (rec->%s) %s (rec->%s);\n",
-+        if (free != "") g_print ("  if (rec->%s) %s (rec->%s);\n",
-             pi->name.c_str(), free.c_str(), pi->name.c_str());
-       }
--      printf("  g_free (rec);\n");
--      printf("}\n\n");
--      printf("\n");
-+      g_print ("  g_free (rec);\n");
-+      g_print ("}\n\n");
-+      g_print ("\n");
-     }
- }
-@@ -896,79 +896,79 @@
-       String lname = makeLowerName (si->name.c_str());
-       String mname = makeMixedName (si->name.c_str());
--      printf("%s\n", ret.c_str());
--      printf("%s_new (void)\n", lname.c_str());
--      printf("{\n");
--      printf("  return g_new0 (%s, 1);\n",mname.c_str());
--      printf("}\n\n");
-+      g_print ("%s\n", ret.c_str());
-+      g_print ("%s_new (void)\n", lname.c_str());
-+      g_print ("{\n");
-+      g_print ("  return g_new0 (%s, 1);\n",mname.c_str());
-+      g_print ("}\n\n");
-       String elementCopy = funcCopy (si->content.type);
--      printf("void\n");
--      printf("%s_append (%s seq, %s element)\n", lname.c_str(), arg.c_str(), element.c_str());
--      printf("{\n");
--      printf("  g_return_if_fail (seq != NULL);\n");
--      printf("\n");
--      printf("  seq->%s = g_realloc (seq->%s, "
-+      g_print ("void\n");
-+      g_print ("%s_append (%s seq, %s element)\n", lname.c_str(), arg.c_str(), element.c_str());
-+      g_print ("{\n");
-+      g_print ("  g_return_if_fail (seq != NULL);\n");
-+      g_print ("\n");
-+      g_print ("  seq->%s = g_realloc (seq->%s, "
-         "(seq->n_%s + 1) * sizeof (seq->%s[0]));\n",
-         elements.c_str(), elements.c_str(), elements.c_str(), elements.c_str());
--      printf("  seq->%s[seq->n_%s++] = %s (element);\n", elements.c_str(), elements.c_str(),
-+      g_print ("  seq->%s[seq->n_%s++] = %s (element);\n", elements.c_str(), elements.c_str(),
-         elementCopy.c_str());
--      printf("}\n\n");
-+      g_print ("}\n\n");
--      printf("%s\n", ret.c_str());
--      printf("%s_copy_shallow (%s seq)\n", lname.c_str(), arg.c_str());
--      printf("{\n");
--      printf("  %s seq_copy;\n", arg.c_str ());
--      printf("  guint i;\n");
--      printf("  if (!seq)\n");
--      printf("    return NULL;\n");
--      printf("\n");
--      printf("  seq_copy = %s_new ();\n", lname.c_str());
--      printf("  for (i = 0; i < seq->n_%s; i++)\n", elements.c_str());
--      printf("    %s_append (seq_copy, seq->%s[i]);\n", lname.c_str(), elements.c_str());
--      printf("  return seq_copy;\n");
--      printf("}\n\n");
-+      g_print ("%s\n", ret.c_str());
-+      g_print ("%s_copy_shallow (%s seq)\n", lname.c_str(), arg.c_str());
-+      g_print ("{\n");
-+      g_print ("  %s seq_copy;\n", arg.c_str ());
-+      g_print ("  guint i;\n");
-+      g_print ("  if (!seq)\n");
-+      g_print ("    return NULL;\n");
-+      g_print ("\n");
-+      g_print ("  seq_copy = %s_new ();\n", lname.c_str());
-+      g_print ("  for (i = 0; i < seq->n_%s; i++)\n", elements.c_str());
-+      g_print ("    %s_append (seq_copy, seq->%s[i]);\n", lname.c_str(), elements.c_str());
-+      g_print ("  return seq_copy;\n");
-+      g_print ("}\n\n");
-       String elementFromValue = createTypeCode (si->content.type, "element", MODEL_FROM_VALUE);
--      printf("%s\n", ret.c_str());
--      printf("%s_from_seq (SfiSeq *sfi_seq)\n", lname.c_str());
--      printf("{\n");
--      printf("  %s seq;\n", arg.c_str());
--      printf("  guint i, length;\n");
--      printf("\n");
--      printf("  g_return_val_if_fail (sfi_seq != NULL, NULL);\n");
--      printf("\n");
--      printf("  length = sfi_seq_length (sfi_seq);\n");
--      printf("  seq = g_new0 (%s, 1);\n",mname.c_str());
--      printf("  seq->n_%s = length;\n", elements.c_str());
--      printf("  seq->%s = g_malloc (seq->n_%s * sizeof (seq->%s[0]));\n\n",
-+      g_print ("%s\n", ret.c_str());
-+      g_print ("%s_from_seq (SfiSeq *sfi_seq)\n", lname.c_str());
-+      g_print ("{\n");
-+      g_print ("  %s seq;\n", arg.c_str());
-+      g_print ("  guint i, length;\n");
-+      g_print ("\n");
-+      g_print ("  g_return_val_if_fail (sfi_seq != NULL, NULL);\n");
-+      g_print ("\n");
-+      g_print ("  length = sfi_seq_length (sfi_seq);\n");
-+      g_print ("  seq = g_new0 (%s, 1);\n",mname.c_str());
-+      g_print ("  seq->n_%s = length;\n", elements.c_str());
-+      g_print ("  seq->%s = g_malloc (seq->n_%s * sizeof (seq->%s[0]));\n\n",
-         elements.c_str(), elements.c_str(), elements.c_str());
--      printf("  for (i = 0; i < length; i++)\n");
--      printf("    {\n");
--      printf("      GValue *element = sfi_seq_get (sfi_seq, i);\n");
--      printf("      seq->%s[i] = %s;\n", elements.c_str(), elementFromValue.c_str());
--      printf("    }\n");
--      printf("  return seq;\n");
--      printf("}\n\n");
-+      g_print ("  for (i = 0; i < length; i++)\n");
-+      g_print ("    {\n");
-+      g_print ("      GValue *element = sfi_seq_get (sfi_seq, i);\n");
-+      g_print ("      seq->%s[i] = %s;\n", elements.c_str(), elementFromValue.c_str());
-+      g_print ("    }\n");
-+      g_print ("  return seq;\n");
-+      g_print ("}\n\n");
-       String elementToValue = createTypeCode (si->content.type, "seq->" + elements + "[i]", MODEL_TO_VALUE);
--      printf("SfiSeq *\n");
--      printf("%s_to_seq (%s seq)\n", lname.c_str(), arg.c_str());
--      printf("{\n");
--      printf("  SfiSeq *sfi_seq;\n");
--      printf("  guint i;\n");
--      printf("\n");
--      printf("  g_return_val_if_fail (seq != NULL, NULL);\n");
--      printf("\n");
--      printf("  sfi_seq = sfi_seq_new ();\n");
--      printf("  for (i = 0; i < seq->n_%s; i++)\n", elements.c_str());
--      printf("    {\n");
--      printf("      GValue *element = %s;\n", elementToValue.c_str());
--      printf("      sfi_seq_append (sfi_seq, element);\n");
--      printf("      sfi_value_free (element);\n");        // FIXME: couldn't we have take_append
--      printf("    }\n");
--      printf("  return sfi_seq;\n");
--      printf("}\n\n");
-+      g_print ("SfiSeq *\n");
-+      g_print ("%s_to_seq (%s seq)\n", lname.c_str(), arg.c_str());
-+      g_print ("{\n");
-+      g_print ("  SfiSeq *sfi_seq;\n");
-+      g_print ("  guint i;\n");
-+      g_print ("\n");
-+      g_print ("  g_return_val_if_fail (seq != NULL, NULL);\n");
-+      g_print ("\n");
-+      g_print ("  sfi_seq = sfi_seq_new ();\n");
-+      g_print ("  for (i = 0; i < seq->n_%s; i++)\n", elements.c_str());
-+      g_print ("    {\n");
-+      g_print ("      GValue *element = %s;\n", elementToValue.c_str());
-+      g_print ("      sfi_seq_append (sfi_seq, element);\n");
-+      g_print ("      sfi_value_free (element);\n");        // FIXME: couldn't we have take_append
-+      g_print ("    }\n");
-+      g_print ("  return sfi_seq;\n");
-+      g_print ("}\n\n");
-       // FIXME: we should check whether we _really_ need to deal with a seperate free_check
-       //        function here, as it needs to be specialcased everywhere
-@@ -978,58 +978,58 @@
-       String element_i_free_check = "if (seq->" + elements + "[i]) ";
-       String element_i_free = funcFree (si->content.type);
-       String element_i_new = funcNew (si->content.type);
--      printf("void\n");
--      printf("%s_resize (%s seq, guint new_size)\n", lname.c_str(), arg.c_str());
--      printf("{\n");
--      printf("  g_return_if_fail (seq != NULL);\n");
--      printf("\n");
-+      g_print ("void\n");
-+      g_print ("%s_resize (%s seq, guint new_size)\n", lname.c_str(), arg.c_str());
-+      g_print ("{\n");
-+      g_print ("  g_return_if_fail (seq != NULL);\n");
-+      g_print ("\n");
-       if (element_i_free != "")
-       {
--        printf("  if (seq->n_%s > new_size)\n", elements.c_str());
--        printf("    {\n");
--        printf("      guint i;\n");
--        printf("      for (i = new_size; i < seq->n_%s; i++)\n", elements.c_str());
--        printf("        %s %s (seq->%s[i]);\n", element_i_free_check.c_str(),
-+        g_print ("  if (seq->n_%s > new_size)\n", elements.c_str());
-+        g_print ("    {\n");
-+        g_print ("      guint i;\n");
-+        g_print ("      for (i = new_size; i < seq->n_%s; i++)\n", elements.c_str());
-+        g_print ("        %s %s (seq->%s[i]);\n", element_i_free_check.c_str(),
-             element_i_free.c_str(), elements.c_str());
--        printf("    }\n");
-+        g_print ("    }\n");
-       }
--      printf("\n");
--      printf("  seq->%s = g_realloc (seq->%s, new_size * sizeof (seq->%s[0]));\n",
-+      g_print ("\n");
-+      g_print ("  seq->%s = g_realloc (seq->%s, new_size * sizeof (seq->%s[0]));\n",
-         elements.c_str(), elements.c_str(), elements.c_str());
--      printf("  if (new_size > seq->n_%s)\n", elements.c_str());
-+      g_print ("  if (new_size > seq->n_%s)\n", elements.c_str());
-       if (element_i_new != "")
-       {
--        printf("    {\n");
--        printf("      guint i;\n");
--        printf("      for (i = seq->n_%s; i < new_size; i++)\n", elements.c_str());
--        printf("        seq->%s[i] = %s();\n", elements.c_str(), element_i_new.c_str());
--        printf("    }\n");
-+        g_print ("    {\n");
-+        g_print ("      guint i;\n");
-+        g_print ("      for (i = seq->n_%s; i < new_size; i++)\n", elements.c_str());
-+        g_print ("        seq->%s[i] = %s();\n", elements.c_str(), element_i_new.c_str());
-+        g_print ("    }\n");
-       }
-       else
-       {
--        printf("    memset (&seq->%s[seq->n_%s], 0, sizeof(seq->%s[0]) * (new_size - seq->n_%s));\n",
-+        g_print ("    memset (&seq->%s[seq->n_%s], 0, sizeof(seq->%s[0]) * (new_size - seq->n_%s));\n",
-             elements.c_str(), elements.c_str(), elements.c_str(), elements.c_str());
-       }
--      printf("  seq->n_%s = new_size;\n", elements.c_str());
--      printf("}\n\n");
-+      g_print ("  seq->n_%s = new_size;\n", elements.c_str());
-+      g_print ("}\n\n");
--      printf("void\n");
--      printf("%s_free (%s seq)\n", lname.c_str(), arg.c_str());
--      printf("{\n");
-+      g_print ("void\n");
-+      g_print ("%s_free (%s seq)\n", lname.c_str(), arg.c_str());
-+      g_print ("{\n");
-       if (element_i_free != "")
--      printf("  guint i;\n\n");
--      printf("  g_return_if_fail (seq != NULL);\n");
--      printf("  \n");
-+      g_print ("  guint i;\n\n");
-+      g_print ("  g_return_if_fail (seq != NULL);\n");
-+      g_print ("  \n");
-       if (element_i_free != "")
-       {
--        printf("  for (i = 0; i < seq->n_%s; i++)\n", elements.c_str());
--        printf("        %s %s (seq->%s[i]);\n", element_i_free_check.c_str(),
-+        g_print ("  for (i = 0; i < seq->n_%s; i++)\n", elements.c_str());
-+        g_print ("        %s %s (seq->%s[i]);\n", element_i_free_check.c_str(),
-             element_i_free.c_str(), elements.c_str());
-       }
--      printf("  g_free (seq->%s);\n", elements.c_str());
--      printf("  g_free (seq);\n");
--      printf("}\n\n");
--      printf("\n");
-+      g_print ("  g_free (seq->%s);\n", elements.c_str());
-+      g_print ("  g_free (seq);\n");
-+      g_print ("}\n\n");
-+      g_print ("\n");
-     }
- }
-@@ -1041,16 +1041,16 @@
-       String mname = makeMixedName (ci->name);
-       String lname = makeLowerName (ci->name);
--      printf("\ntypedef enum {\n");
-+      g_print ("\ntypedef enum {\n");
-       for (vector<ChoiceValue>::const_iterator vi = ci->contents.begin(); vi != ci->contents.end(); vi++)
-       {
-         /* don't export server side assigned choice values to the client */
-         String ename = makeUpperName (vi->name);
--        printf("  %s = %d,\n", ename.c_str(), vi->sequentialValue);
-+        g_print ("  %s = %d,\n", ename.c_str(), vi->sequentialValue);
-       }
--      printf("} %s;\n", mname.c_str());
-+      g_print ("} %s;\n", mname.c_str());
-     }
--  printf("\n");
-+  g_print ("\n");
- }
- void CodeGeneratorCBase::printClientChoiceConverterPrototypes (PrefixSymbolMode mode)
-@@ -1069,11 +1069,11 @@
-       }
-       else
-       {
--        printf ("const gchar* %s_to_choice (%s value);\n", lname.c_str(), mname.c_str());
--        printf ("%s %s_from_choice (const gchar *choice);\n", mname.c_str(), lname.c_str());
-+        g_print  ("const gchar* %s_to_choice (%s value);\n", lname.c_str(), mname.c_str());
-+        g_print  ("%s %s_from_choice (const gchar *choice);\n", mname.c_str(), lname.c_str());
-       }
-     }
--  printf("\n");
-+  g_print ("\n");
- }
---- ../../../orig/beast-20090428/sfi/sfidl-clientc.cc  2009-05-05 10:00:43.000000000 -0400
-+++ ../sfi/sfidl-clientc.cc    2009-05-05 11:07:01.000000000 -0400
-@@ -34,10 +34,10 @@
-       makeUpperName (NamespaceHelper::nameOf (ci->name));
-       String mname = makeMixedName (ci->name);
--      printf ("#define %s(proxy) bse_proxy_is_a ((proxy), \"%s\")\n",
-+      g_print ("#define %s(proxy) bse_proxy_is_a ((proxy), \"%s\")\n",
-         macro.c_str(), mname.c_str());
-     }
--  printf("\n");
-+  g_print("\n");
- }
- Method CodeGeneratorClientC::methodWithObject (const Class& c, const Method& method)
-@@ -121,7 +121,7 @@
-       filename = directory + String (G_DIR_SEPARATOR_S) + filename;
-       g_free (directory);
--      printf ("/* %s: including binding specific file \"%s\", as requested in %s:%d */\n",
-+      g_print ("/* %s: including binding specific file \"%s\", as requested in %s:%d */\n",
-               options.sfidlName.c_str(), filename.c_str(), pi->filename.c_str(), pi->line);
-       FILE *f = fopen (filename.c_str(), "r");
-       if (f)
-@@ -134,7 +134,7 @@
-         }
-       else
-         {
--          fprintf (stderr, "binding specific file '%s' not found.\n", filename.c_str());
-+          g_printerr ("binding specific file '%s' not found.\n", filename.c_str());
-           exit (1);
-         }
-       }
-@@ -143,7 +143,7 @@
- bool CodeGeneratorClientC::run()
- {
--  printf("\n/*-------- begin %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-+  g_print ("\n/*-------- begin %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-   if (generateHeader)
-     {
-@@ -159,8 +159,8 @@
-       if (prefix != "")
-       {
-         for (vector<String>::const_iterator pi = prefix_symbols.begin(); pi != prefix_symbols.end(); pi++)
--          printf("#define %s %s_%s\n", pi->c_str(), prefix.c_str(), pi->c_str());
--        printf("\n");
-+          g_print ("#define %s %s_%s\n", pi->c_str(), prefix.c_str(), pi->c_str());
-+        g_print ("\n");
-       }
-       /* generate the header */
-@@ -183,7 +183,7 @@
-   if (generateSource)
-     {
--      printf("#include <string.h>\n");
-+      g_print ("#include <string.h>\n");
-       printClientRecordMethodImpl();
-       printClientSequenceMethodImpl();
-@@ -192,7 +192,7 @@
-       addBindingSpecificFiles ("binding_specific_c_source");
-     }
--  printf("\n/*-------- end %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-+  g_print ("\n/*-------- end %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-   return true;
- }
-@@ -223,7 +223,7 @@
- CodeGeneratorClientC::help ()
- {
-   CodeGeneratorCBase::help();
--  fprintf (stderr, " --prefix <prefix>           set the prefix for C functions\n");
-+  g_printerr (" --prefix <prefix>           set the prefix for C functions\n");
- }
- namespace {
---- ../../../orig/beast-20090428/sfi/sfidl-clientcxx.cc        2009-05-05 10:00:43.000000000 -0400
-+++ ../sfi/sfidl-clientcxx.cc  2009-05-05 11:07:12.000000000 -0400
-@@ -171,41 +171,41 @@
- void
- CodeGeneratorClientCxx::printChoicePrototype (NamespaceHelper& nspace)
- {
--  printf ("\n/* choice prototypes */\n");
-+  g_print  ("\n/* choice prototypes */\n");
-   for (vector<Choice>::const_iterator ci = parser.getChoices().begin(); ci != parser.getChoices().end(); ci++)
-     {
-       if (parser.fromInclude (ci->name))
-         continue;
-       nspace.setFromSymbol(ci->name);
-       String name = nspace.printableForm (ci->name);
--      printf ("\n");
--      printf ("static inline SfiChoiceValues %s_choice_values();\n", name.c_str());
-+      g_print  ("\n");
-+      g_print  ("static inline SfiChoiceValues %s_choice_values();\n", name.c_str());
-     }
- }
- void
- CodeGeneratorClientCxx::printChoiceImpl (NamespaceHelper& nspace)
- {
--  printf ("\n/* choice implementations */\n");
-+  g_print  ("\n/* choice implementations */\n");
-   for (vector<Choice>::const_iterator ci = parser.getChoices().begin(); ci != parser.getChoices().end(); ci++)
-     {
-       if (parser.fromInclude (ci->name))
-         continue;
-       nspace.setFromSymbol(ci->name);
-       String name = nspace.printableForm (ci->name);
--      printf ("\n");
--      printf ("static inline SfiChoiceValues\n");
--      printf ("%s_choice_values()\n", name.c_str());
--      printf ("{\n");
--      printf ("  static const SfiChoiceValue values[%zu] = {\n", ci->contents.size());
-+      g_print ("\n");
-+      g_print ("static inline SfiChoiceValues\n");
-+      g_print ("%s_choice_values()\n", name.c_str());
-+      g_print ("{\n");
-+      g_print ("  static const SfiChoiceValue values[%zu] = {\n", ci->contents.size());
-       for (vector<ChoiceValue>::const_iterator vi = ci->contents.begin(); vi != ci->contents.end(); vi++)
--        printf ("    { \"%s\", \"%s\" },\n", cUC_NAME (vi->name), vi->label.c_str());  // FIXME: i18n and blurb
--      printf ("  };\n");
--      printf ("  static const SfiChoiceValues choice_values = {\n");
--      printf ("    G_N_ELEMENTS (values), values,\n");
--      printf ("  };\n");
--      printf ("  return choice_values;\n");
--      printf ("}\n\n");
-+        g_print ("    { \"%s\", \"%s\" },\n", cUC_NAME (vi->name), vi->label.c_str());  // FIXME: i18n and blurb
-+      g_print ("  };\n");
-+      g_print ("  static const SfiChoiceValues choice_values = {\n");
-+      g_print ("    G_N_ELEMENTS (values), values,\n");
-+      g_print ("  };\n");
-+      g_print ("  return choice_values;\n");
-+      g_print ("}\n\n");
-     }
- }
-@@ -215,7 +215,7 @@
-   vector<Sequence>::const_iterator si;
-   vector<Record>::const_iterator ri;
--  printf ("\n/* record/sequence prototypes */\n");
-+  g_print ("\n/* record/sequence prototypes */\n");
-   /* forward declarations for records */
-   for (ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-@@ -226,9 +226,9 @@
-       nspace.setFromSymbol(ri->name);
-       String name = nspace.printableForm (ri->name);
--      printf("\n");
--      printf("class %s;\n", name.c_str());
--      printf("typedef Sfi::RecordHandle<%s> %sHandle;\n", name.c_str(), name.c_str());
-+      g_print("\n");
-+      g_print("class %s;\n", name.c_str());
-+      g_print("typedef Sfi::RecordHandle<%s> %sHandle;\n", name.c_str(), name.c_str());
-     }
-   /* forward declarations for sequences */
-@@ -239,8 +239,8 @@
-       nspace.setFromSymbol(si->name);
-       String name = nspace.printableForm (si->name);
--      printf("\n");
--      printf("class %s;\n", name.c_str());
-+      g_print("\n");
-+      g_print("class %s;\n", name.c_str());
-     }
- }
-@@ -248,7 +248,7 @@
- {
-   vector<Param>::const_iterator pi;
--  printf ("\n/* record/sequence definitions */\n");
-+  g_print ("\n/* record/sequence definitions */\n");
-   /* sequences */
-   for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-@@ -262,17 +262,17 @@
-       String name = nspace.printableForm (si->name);
-       String content = typeField (si->content.type);
-       
--      printf ("\n");
--      printf ("class %s : public Sfi::Sequence<%s> {\n", name.c_str(), content.c_str());
--      printf ("public:\n");
--      printf ("  static inline %s from_seq (SfiSeq *seq);\n", cTypeRet (si->name));
--      printf ("  static inline SfiSeq *to_seq (%s seq);\n", cTypeArg (si->name));
--      printf ("  static inline %s value_get_seq (const GValue *value);\n", cTypeRet (si->name));
--      printf ("  static inline void value_set_seq (GValue *value, %s self);\n", cTypeArg (si->name));
-+      g_print ("\n");
-+      g_print ("class %s : public Sfi::Sequence<%s> {\n", name.c_str(), content.c_str());
-+      g_print ("public:\n");
-+      g_print ("  static inline %s from_seq (SfiSeq *seq);\n", cTypeRet (si->name));
-+      g_print ("  static inline SfiSeq *to_seq (%s seq);\n", cTypeArg (si->name));
-+      g_print ("  static inline %s value_get_seq (const GValue *value);\n", cTypeRet (si->name));
-+      g_print ("  static inline void value_set_seq (GValue *value, %s self);\n", cTypeArg (si->name));
-       /* FIXME: make this private (or delete it) */
--      printf ("  static inline const char* type_name () { return \"%s\"; }\n", makeMixedName (si->name).c_str());
--      printf("};\n");
--      printf ("\n");
-+      g_print ("  static inline const char* type_name () { return \"%s\"; }\n", makeMixedName (si->name).c_str());
-+      g_print("};\n");
-+      g_print ("\n");
-     }
-   /* records */
-@@ -284,27 +284,27 @@
-       String name = nspace.printableForm (ri->name);
-       String type_name = makeMixedName (ri->name).c_str();
--      printf ("\n");
--      printf ("class %s : public ::Sfi::GNewable {\n", name.c_str());
--      printf ("public:\n");
-+      g_print ("\n");
-+      g_print ("class %s : public ::Sfi::GNewable {\n", name.c_str());
-+      g_print ("public:\n");
-       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
--        printf ("  %s %s;\n", cTypeField (pi->type), pi->name.c_str());
-+        g_print ("  %s %s;\n", cTypeField (pi->type), pi->name.c_str());
-       }
--      printf ("  static inline %s from_rec (SfiRec *rec);\n", cTypeRet(ri->name));
--      printf ("  static inline SfiRec *to_rec (%s ptr);\n", cTypeArg(ri->name));
--      printf ("  static inline %s value_get_rec (const GValue *value);\n", cTypeRet(ri->name));
--      printf ("  static inline void value_set_rec (GValue *value, %s self);\n", cTypeArg (ri->name));
-+      g_print ("  static inline %s from_rec (SfiRec *rec);\n", cTypeRet(ri->name));
-+      g_print ("  static inline SfiRec *to_rec (%s ptr);\n", cTypeArg(ri->name));
-+      g_print ("  static inline %s value_get_rec (const GValue *value);\n", cTypeRet(ri->name));
-+      g_print ("  static inline void value_set_rec (GValue *value, %s self);\n", cTypeArg (ri->name));
-       /* FIXME: make this private (or delete it) */
--      printf ("  static inline const char* type_name () { return \"%s\"; }\n", type_name.c_str());
--      printf ("};\n");
--      printf ("\n");
-+      g_print ("  static inline const char* type_name () { return \"%s\"; }\n", type_name.c_str());
-+      g_print ("};\n");
-+      g_print ("\n");
-     }
- }
- void CodeGeneratorClientCxx::printRecSeqImpl (NamespaceHelper& nspace)
- {
--  printf ("\n/* record/sequence implementations */\n");
-+  g_print ("\n/* record/sequence implementations */\n");
-   /* sequence members */
-   for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-@@ -317,48 +317,48 @@
-       String type_name = makeMixedName (si->name).c_str();
-       String elementFromValue = createTypeCode (si->content.type, "element", MODEL_FROM_VALUE);
--      printf("%s\n", cTypeRet (si->name));
--      printf("%s::from_seq (SfiSeq *sfi_seq)\n", nname.c_str());
--      printf("{\n");
--      printf("  %s seq;\n", cTypeRet (si->name));
--      printf("  guint i, length;\n");
--      printf("\n");
--      printf("  g_return_val_if_fail (sfi_seq != NULL, seq);\n");
--      printf("\n");
--      printf("  length = sfi_seq_length (sfi_seq);\n");
--      printf("  seq.resize (length);\n");
--      printf("  for (i = 0; i < length; i++)\n");
--      printf("  {\n");
--      printf("    GValue *element = sfi_seq_get (sfi_seq, i);\n");
--      printf("    seq[i] = %s;\n", elementFromValue.c_str());
--      printf("  }\n");
--      printf("  return seq;\n");
--      printf("}\n\n");
-+      g_print("%s\n", cTypeRet (si->name));
-+      g_print("%s::from_seq (SfiSeq *sfi_seq)\n", nname.c_str());
-+      g_print("{\n");
-+      g_print("  %s seq;\n", cTypeRet (si->name));
-+      g_print("  guint i, length;\n");
-+      g_print("\n");
-+      g_print("  g_return_val_if_fail (sfi_seq != NULL, seq);\n");
-+      g_print("\n");
-+      g_print("  length = sfi_seq_length (sfi_seq);\n");
-+      g_print("  seq.resize (length);\n");
-+      g_print("  for (i = 0; i < length; i++)\n");
-+      g_print("  {\n");
-+      g_print("    GValue *element = sfi_seq_get (sfi_seq, i);\n");
-+      g_print("    seq[i] = %s;\n", elementFromValue.c_str());
-+      g_print("  }\n");
-+      g_print("  return seq;\n");
-+      g_print("}\n\n");
-       String elementToValue = createTypeCode (si->content.type, "seq[i]", MODEL_TO_VALUE);
--      printf("SfiSeq *\n");
--      printf("%s::to_seq (%s seq)\n", nname.c_str(), cTypeArg (si->name));
--      printf("{\n");
--      printf("  SfiSeq *sfi_seq = sfi_seq_new ();\n");
--      printf("  for (guint i = 0; i < seq.length(); i++)\n");
--      printf("  {\n");
--      printf("    GValue *element = %s;\n", elementToValue.c_str());
--      printf("    sfi_seq_append (sfi_seq, element);\n");
--      printf("    sfi_value_free (element);\n");        // FIXME: couldn't we have take_append
--      printf("  }\n");
--      printf("  return sfi_seq;\n");
--      printf("}\n\n");
--
--      printf ("%s\n", cTypeRet (si->name));
--      printf ("%s::value_get_seq (const GValue *value)\n", nname.c_str());
--      printf ("{\n");
--      printf ("  return ::Sfi::cxx_value_get_seq< %s> (value);\n", nname.c_str());
--      printf ("}\n\n");
--      printf ("void\n");
--      printf ("%s::value_set_seq (GValue *value, %s self)\n", nname.c_str(), cTypeArg (si->name));
--      printf ("{\n");
--      printf ("  ::Sfi::cxx_value_set_seq< %s> (value, self);\n", nname.c_str());
--      printf ("}\n\n");
-+      g_print("SfiSeq *\n");
-+      g_print("%s::to_seq (%s seq)\n", nname.c_str(), cTypeArg (si->name));
-+      g_print("{\n");
-+      g_print("  SfiSeq *sfi_seq = sfi_seq_new ();\n");
-+      g_print("  for (guint i = 0; i < seq.length(); i++)\n");
-+      g_print("  {\n");
-+      g_print("    GValue *element = %s;\n", elementToValue.c_str());
-+      g_print("    sfi_seq_append (sfi_seq, element);\n");
-+      g_print("    sfi_value_free (element);\n");        // FIXME: couldn't we have take_append
-+      g_print("  }\n");
-+      g_print("  return sfi_seq;\n");
-+      g_print("}\n\n");
-+
-+      g_print ("%s\n", cTypeRet (si->name));
-+      g_print ("%s::value_get_seq (const GValue *value)\n", nname.c_str());
-+      g_print ("{\n");
-+      g_print ("  return ::Sfi::cxx_value_get_seq< %s> (value);\n", nname.c_str());
-+      g_print ("}\n\n");
-+      g_print ("void\n");
-+      g_print ("%s::value_set_seq (GValue *value, %s self)\n", nname.c_str(), cTypeArg (si->name));
-+      g_print ("{\n");
-+      g_print ("  ::Sfi::cxx_value_set_seq< %s> (value, self);\n", nname.c_str());
-+      g_print ("}\n\n");
-     }
-   /* record members */
-@@ -371,56 +371,56 @@
-       String nname = ri->name;
-       String type_name = makeMixedName (ri->name).c_str();
-       
--      printf("%s\n", cTypeRet (ri->name));
--      printf("%s::from_rec (SfiRec *sfi_rec)\n", nname.c_str());
--      printf("{\n");
--      printf("  GValue *element;\n");
--      printf("\n");
--      printf("  if (!sfi_rec)\n");
--      printf("    return Sfi::INIT_NULL;\n");
--      printf("\n");
--      printf("  %s rec = Sfi::INIT_DEFAULT;\n", cTypeField (ri->name));
-+      g_print("%s\n", cTypeRet (ri->name));
-+      g_print("%s::from_rec (SfiRec *sfi_rec)\n", nname.c_str());
-+      g_print("{\n");
-+      g_print("  GValue *element;\n");
-+      g_print("\n");
-+      g_print("  if (!sfi_rec)\n");
-+      g_print("    return Sfi::INIT_NULL;\n");
-+      g_print("\n");
-+      g_print("  %s rec = Sfi::INIT_DEFAULT;\n", cTypeField (ri->name));
-       for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
-         String elementFromValue = createTypeCode (pi->type, "element", MODEL_FROM_VALUE);
--        printf("  element = sfi_rec_get (sfi_rec, \"%s\");\n", pi->name.c_str());
--        printf("  if (element)\n");
--        printf("    rec->%s = %s;\n", pi->name.c_str(), elementFromValue.c_str());
--      }
--      printf("  return rec;\n");
--      printf("}\n\n");
--
--      printf("SfiRec *\n");
--      printf("%s::to_rec (%s rec)\n", nname.c_str(), cTypeArg (ri->name));
--      printf("{\n");
--      printf("  SfiRec *sfi_rec;\n");
--      printf("  GValue *element;\n");
--      printf("\n");
--      printf("  if (!rec)\n");
--      printf("    return NULL;\n");
--      printf("\n");
--      printf("  sfi_rec = sfi_rec_new ();\n");
-+        g_print("  element = sfi_rec_get (sfi_rec, \"%s\");\n", pi->name.c_str());
-+        g_print("  if (element)\n");
-+        g_print("    rec->%s = %s;\n", pi->name.c_str(), elementFromValue.c_str());
-+      }
-+      g_print("  return rec;\n");
-+      g_print("}\n\n");
-+
-+      g_print("SfiRec *\n");
-+      g_print("%s::to_rec (%s rec)\n", nname.c_str(), cTypeArg (ri->name));
-+      g_print("{\n");
-+      g_print("  SfiRec *sfi_rec;\n");
-+      g_print("  GValue *element;\n");
-+      g_print("\n");
-+      g_print("  if (!rec)\n");
-+      g_print("    return NULL;\n");
-+      g_print("\n");
-+      g_print("  sfi_rec = sfi_rec_new ();\n");
-       for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-       {
-         String elementToValue = createTypeCode (pi->type, "rec->" + pi->name, MODEL_TO_VALUE);
--        printf("  element = %s;\n", elementToValue.c_str());
--        printf("  sfi_rec_set (sfi_rec, \"%s\", element);\n", pi->name.c_str());
--        printf("  sfi_value_free (element);\n");        // FIXME: couldn't we have take_set
--      }
--      printf("  return sfi_rec;\n");
--      printf("}\n\n");
--
--      printf ("%s\n", cTypeRet(ri->name));
--      printf ("%s::value_get_rec (const GValue *value)\n", nname.c_str());
--      printf ("{\n");
--      printf ("  return ::Sfi::cxx_value_get_rec< %s> (value);\n", nname.c_str());
--      printf ("}\n\n");
--      printf ("void\n");
--      printf ("%s::value_set_rec (GValue *value, %s self)\n", nname.c_str(), cTypeArg (ri->name));
--      printf ("{\n");
--      printf ("  ::Sfi::cxx_value_set_rec< %s> (value, self);\n", nname.c_str());
--      printf ("}\n\n");
-+        g_print("  element = %s;\n", elementToValue.c_str());
-+        g_print("  sfi_rec_set (sfi_rec, \"%s\", element);\n", pi->name.c_str());
-+        g_print("  sfi_value_free (element);\n");        // FIXME: couldn't we have take_set
-+      }
-+      g_print("  return sfi_rec;\n");
-+      g_print("}\n\n");
-+
-+      g_print ("%s\n", cTypeRet(ri->name));
-+      g_print ("%s::value_get_rec (const GValue *value)\n", nname.c_str());
-+      g_print ("{\n");
-+      g_print ("  return ::Sfi::cxx_value_get_rec< %s> (value);\n", nname.c_str());
-+      g_print ("}\n\n");
-+      g_print ("void\n");
-+      g_print ("%s::value_set_rec (GValue *value, %s self)\n", nname.c_str(), cTypeArg (ri->name));
-+      g_print ("{\n");
-+      g_print ("  ::Sfi::cxx_value_set_rec< %s> (value, self);\n", nname.c_str());
-+      g_print ("}\n\n");
-     }
- }
-@@ -431,7 +431,7 @@
-   vector<Class>::const_iterator ci;
-   vector<Method>::const_iterator mi;
-  
--  printf("\n/*-------- begin %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-+  g_print("\n/*-------- begin %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-   if (generateHeader)
-     {
-@@ -442,14 +442,14 @@
-           nspace.setFromSymbol (ei->name);
--          printf("\nenum %s {\n", nspace.printableForm (ei->name).c_str());
-+          g_print("\nenum %s {\n", nspace.printableForm (ei->name).c_str());
-           for (vector<ChoiceValue>::const_iterator ci = ei->contents.begin(); ci != ei->contents.end(); ci++)
-             {
-               /* don't export server side assigned choice values to the client */
-               String ename = makeUpperName (nspace.printableForm (ci->name));
--              printf("  %s = %d,\n", ename.c_str(), ci->sequentialValue);
-+              g_print("  %s = %d,\n", ename.c_str(), ci->sequentialValue);
-             }
--          printf("};\n");
-+          g_print("};\n");
-       }
-       nspace.leaveAll();
-@@ -459,11 +459,11 @@
-         String name = nspace.printableForm (ei->name);
-         String lname = makeLowerName (ei->name);
--        printf("const gchar* %s_to_choice (%s value);\n", lname.c_str(), name.c_str());
--        printf("%s %s_from_choice (const gchar *choice);\n", name.c_str(), lname.c_str());
-+        g_print("const gchar* %s_to_choice (%s value);\n", lname.c_str(), name.c_str());
-+        g_print("%s %s_from_choice (const gchar *choice);\n", name.c_str(), lname.c_str());
-         }
--      printf("\n");
-+      g_print("\n");
-       /* prototypes for classes */
-       for (ci = parser.getClasses().begin(); ci != parser.getClasses().end(); ci++)
-       {
-@@ -472,7 +472,7 @@
-         nspace.setFromSymbol (ci->name);
-         String name = nspace.printableForm (ci->name);
--        printf("class %s;\n", name.c_str());
-+        g_print("class %s;\n", name.c_str());
-       }
-       printRecSeqForwardDecl (nspace);
-@@ -486,29 +486,29 @@
-         String name = nspace.printableForm (ci->name);
-         String init;
--        printf("\n");
-+        g_print("\n");
-         if (ci->inherits == "")
-           {
--            printf("class %s {\n", name.c_str());
--            printf("protected:\n");
--            printf("  SfiProxy _object_id;\n");
-+            g_print("class %s {\n", name.c_str());
-+            g_print("protected:\n");
-+            g_print("  SfiProxy _object_id;\n");
-             init = "_object_id";
-           }
-         else
-           {
--            printf("class %s : public %s {\n", name.c_str(), ci->inherits.c_str());
-+            g_print("class %s : public %s {\n", name.c_str(), ci->inherits.c_str());
-             init = ci->inherits;
-           }
--        printf("public:\n");
--        printf("  %s() : %s (0) {}\n", name.c_str(), init.c_str());
--        printf("  %s(SfiProxy p) : %s (p) {}\n", name.c_str(), init.c_str());
--        printf("  %s(const %s& other) : %s (other._object_id) {}\n",
-+        g_print("public:\n");
-+        g_print("  %s() : %s (0) {}\n", name.c_str(), init.c_str());
-+        g_print("  %s(SfiProxy p) : %s (p) {}\n", name.c_str(), init.c_str());
-+        g_print("  %s(const %s& other) : %s (other._object_id) {}\n",
-                                         name.c_str(), name.c_str(), init.c_str());
--        printf("  SfiProxy _proxy() const { return _object_id; }\n");
--        printf("  operator bool() const { return _object_id != 0; }\n");
-+        g_print("  SfiProxy _proxy() const { return _object_id; }\n");
-+        g_print("  operator bool() const { return _object_id != 0; }\n");
-         printMethods(*ci);
-         printProperties(*ci);
--        printf("};\n");
-+        g_print("};\n");
-       }
-       printRecSeqDefinition (nspace);
-       printRecSeqImpl (nspace);
-@@ -518,7 +518,7 @@
-     {
-       /* choice utils */
-       printChoiceConverters();
--      printf("\n");
-+      g_print("\n");
-       /* methods */
-       for (ci = parser.getClasses().begin(); ci != parser.getClasses().end(); ci++)
-@@ -529,7 +529,7 @@
-       }
-     }
--  printf("\n");
-+  g_print("\n");
-   for (mi = parser.getProcedures().begin(); mi != parser.getProcedures().end(); mi++)
-     {
-       if (parser.fromInclude (mi->name)) continue;
-@@ -538,9 +538,9 @@
-       nspace.setFromSymbol (mi->name);
-       printProcedure (*mi, generateHeader);
-     }
--  printf("\n");
-+  g_print("\n");
-   nspace.leaveAll();
--  printf("\n/*-------- end %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-+  g_print("\n/*-------- end %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-   return 1;
- }
-@@ -581,7 +581,7 @@
-       for(pi = mi->params.begin(); pi != mi->params.end(); pi++)
-       md.params.push_back (*pi);
--      if (proto) printf ("  ");
-+      if (proto) g_print ("  ");
-       printProcedure (md, proto, cdef.name);
-     }
- }
-@@ -600,32 +600,32 @@
-       String ret = typeRet (pi->type);
-       if (proto) {
-       /* property getter */
--      printf ("  %s %s ();\n", ret.c_str(), getProperty.c_str());
-+      g_print ("  %s %s ();\n", ret.c_str(), getProperty.c_str());
-       /* property setter */
--      printf ("  void %s (%s %s);\n", setProperty.c_str(), cTypeArg (pi->type), newName.c_str());
-+      g_print ("  void %s (%s %s);\n", setProperty.c_str(), cTypeArg (pi->type), newName.c_str());
-       }
-       else {
-       /* property getter */
--      printf ("%s\n", ret.c_str());
--      printf ("%s::%s ()\n", cdef.name.c_str(), getProperty.c_str());
--      printf ("{\n");
--      printf ("  const GValue *val;\n");
--      printf ("  val = sfi_glue_proxy_get_property (_proxy(), \"%s\");\n", propName.c_str());
--      printf ("  return %s;\n", createTypeCode (pi->type, "val", MODEL_FROM_VALUE).c_str());
--      printf ("}\n");
--      printf ("\n");
-+      g_print ("%s\n", ret.c_str());
-+      g_print ("%s::%s ()\n", cdef.name.c_str(), getProperty.c_str());
-+      g_print ("{\n");
-+      g_print ("  const GValue *val;\n");
-+      g_print ("  val = sfi_glue_proxy_get_property (_proxy(), \"%s\");\n", propName.c_str());
-+      g_print ("  return %s;\n", createTypeCode (pi->type, "val", MODEL_FROM_VALUE).c_str());
-+      g_print ("}\n");
-+      g_print ("\n");
-       /* property setter */
--      printf ("void\n");
--      printf ("%s::%s (%s %s)\n", cdef.name.c_str(), setProperty.c_str(),
-+      g_print ("void\n");
-+      g_print ("%s::%s (%s %s)\n", cdef.name.c_str(), setProperty.c_str(),
-                                   cTypeArg (pi->type), newName.c_str());
--      printf ("{\n");
-+      g_print ("{\n");
-       String to_val = createTypeCode (pi->type, newName, MODEL_TO_VALUE).c_str();
--      printf ("  GValue *val = %s;\n", to_val.c_str());
--      printf ("  sfi_glue_proxy_set_property (_proxy(), \"%s\", val);\n", propName.c_str());
--      printf ("  sfi_value_free (val);\n");
--      printf ("}\n");
--      printf ("\n");
-+      g_print ("  GValue *val = %s;\n", to_val.c_str());
-+      g_print ("  sfi_glue_proxy_set_property (_proxy(), \"%s\", val);\n", propName.c_str());
-+      g_print ("  sfi_value_free (val);\n");
-+      g_print ("}\n");
-+      g_print ("\n");
-       }
-     }
- }
-@@ -662,10 +662,10 @@
- CodeGeneratorClientCxx::help()
- {
-   CodeGeneratorCxxBase::help();
--  fprintf (stderr, " --mixed                     mixed case identifiers (createMidiSynth)\n");
--  fprintf (stderr, " --lower                     lower case identifiers (create_midi_synth)\n");
-+  g_printerr (" --mixed                     mixed case identifiers (createMidiSynth)\n");
-+  g_printerr (" --lower                     lower case identifiers (create_midi_synth)\n");
- /*
--  fprintf (stderr, " --namespace <namespace>     set the namespace to use for the code\n");
-+  g_printerr (stderr, " --namespace <namespace>     set the namespace to use for the code\n");
- */
- }
---- ../../../orig/beast-20090428/sfi/sfidl-corec.cc    2009-05-05 10:00:43.000000000 -0400
-+++ ../sfi/sfidl-corec.cc      2009-05-05 11:07:17.000000000 -0400
-@@ -68,21 +68,21 @@
-   printInfoStrings (const String&              name,
-                     const Map<String,IString> &infos)
-   {
--    printf ("static const gchar *%s[] = {\n", name.c_str());
-+    g_print ("static const gchar *%s[] = {\n", name.c_str());
-     
-     Map<String,IString>::const_iterator ii;
-     for (ii = infos.begin(); ii != infos.end(); ii++)
--      printf ("  \"%s=%s\",\n", ii->first.c_str(), ii->second.c_str());
-+      g_print ("  \"%s=%s\",\n", ii->first.c_str(), ii->second.c_str());
-     
--    printf ("  NULL,\n");
--    printf ("};\n");
-+    g_print ("  NULL,\n");
-+    g_print ("};\n");
-   }
-   
-   void
-   help()
-   {
-     CodeGenerator::help();
--    fprintf (stderr, " --init <name>               set the name of the init function\n");
-+    g_printerr (" --init <name>               set the name of the init function\n");
-   }
-   OptionVector
-   getOptions()
-@@ -215,220 +215,220 @@
-   void
-   generate_enum_type_id_prototypes ()
-   {
--    printf ("\n\n/* enum type ids */\n");
-+    g_print ("\n\n/* enum type ids */\n");
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-       {
-         if (parser.fromInclude (ei->name))
-           continue;
--        printf ("extern GType %s;\n", make_type_id_symbol (ei->name));
-+        g_print ("extern GType %s;\n", make_type_id_symbol (ei->name));
-       }
-   }
-   void
-   generate_enum_type_id_declarations ()
-   {
--    printf ("\n\n/* enum type ids */\n");
-+    g_print ("\n\n/* enum type ids */\n");
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-       {
-         if (parser.fromInclude (ei->name))
-           continue;
--        printf ("GType %s = 0;\n", make_type_id_symbol (ei->name));
-+        g_print ("GType %s = 0;\n", make_type_id_symbol (ei->name));
-       }
-   }
-   void
-   generate_enum_type_id_initializations ()
-   {
--    printf ("\n\n  /* enum type ids */\n");
-+    g_print ("\n\n  /* enum type ids */\n");
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-       {
-         if (parser.fromInclude (ei->name))
-           continue;
--        printf ("  %s = %s;\n", make_type_id_symbol (ei->name), make_TYPE_MACRO (ei->name));
-+        g_print ("  %s = %s;\n", make_type_id_symbol (ei->name), make_TYPE_MACRO (ei->name));
-       }
-   }
-   void
-   generate_enum_type_macros ()
-   {
--    printf ("\n\n/* enum type macros */\n");
-+    g_print ("\n\n/* enum type macros */\n");
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-       {
-         if (parser.fromInclude (ei->name))
-           continue;
--        printf ("#define %s\t\t(%s)\n", make_TYPE_MACRO (ei->name), make_type_id_symbol (ei->name));
-+        g_print ("#define %s\t\t(%s)\n", make_TYPE_MACRO (ei->name), make_type_id_symbol (ei->name));
-       }
-   }
-   void
-   generate_enum_definitions ()
-   {
--    printf ("\n\n/* enums */\n");
-+    g_print ("\n\n/* enums */\n");
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-       {
-         if (parser.fromInclude (ei->name))
-           continue;
-         String mname = makeMixedName (ei->name);
-         String lname = makeLowerName (ei->name);
--        printf ("\ntypedef enum {\n");
-+        g_print ("\ntypedef enum {\n");
-         for (vector<ChoiceValue>::const_iterator ci = ei->contents.begin(); ci != ei->contents.end(); ci++)
-           {
-             /* don't export server side assigned choice values to the client */
-             gint value = ci->value;
-             String ename = makeUpperName (ci->name);
--            printf ("  %s = %d,\n", ename.c_str(), value);
-+            g_print ("  %s = %d,\n", ename.c_str(), value);
-           }
--        printf ("} %s;\n", mname.c_str());
-+        g_print ("} %s;\n", mname.c_str());
-       }
-   }
-   void
-   generate_enum_value_array ()
-   {
--    printf ("\n\n/* enum values */\n");
-+    g_print ("\n\n/* enum values */\n");
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-       {
-         if (parser.fromInclude (ei->name))
-           continue;
-         String name = makeLowerName (ei->name);
--        printf ("static const GEnumValue %s_value[%zd] = {\n", name.c_str(), ei->contents.size() + 1); // FIXME: i18n
-+        g_print ("static const GEnumValue %s_value[%zd] = {\n", name.c_str(), ei->contents.size() + 1); // FIXME: i18n
-         for (vector<ChoiceValue>::const_iterator ci = ei->contents.begin(); ci != ei->contents.end(); ci++)
-           {
-             String ename = makeUpperName (ci->name);
--            printf ("  { %d, \"%s\", \"%s\" },\n", ci->value, ename.c_str(), ci->label.c_str());
-+            g_print ("  { %d, \"%s\", \"%s\" },\n", ci->value, ename.c_str(), ci->label.c_str());
-           }
--        printf ("  { 0, NULL, NULL }\n");
--        printf ("};\n");
-+        g_print ("  { 0, NULL, NULL }\n");
-+        g_print ("};\n");
-       }
-   }
-   void
-   generate_enum_method_prototypes ()
-   {
--    printf ("\n\n/* enum functions */\n");
-+    g_print ("\n\n/* enum functions */\n");
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-       {
-         if (parser.fromInclude (ei->name))
-           continue;
--        printf ("SfiChoiceValues %s_get_values (void);\n", makeLowerName (ei->name).c_str());
-+        g_print ("SfiChoiceValues %s_get_values (void);\n", makeLowerName (ei->name).c_str());
-       }
-   }
-   void
-   generate_enum_method_implementations ()
-   {
-     int enumCount = 0;
--    printf ("\n\n/* enum functions */\n");
-+    g_print ("\n\n/* enum functions */\n");
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-       {
-         if (parser.fromInclude (ei->name))
-           continue;
-         String name = makeLowerName (ei->name);
--        printf ("SfiChoiceValues\n");
--        printf ("%s_get_values (void)\n", makeLowerName (ei->name).c_str());
--        printf ("{\n");
--        printf ("  static SfiChoiceValue values[%zu];\n", ei->contents.size());
--        printf ("  static const SfiChoiceValues choice_values = {\n");
--        printf ("    G_N_ELEMENTS (values), values,\n");
--        printf ("  };\n");
--        printf ("  if (!values[0].choice_ident)\n    {\n");
-+        g_print ("SfiChoiceValues\n");
-+        g_print ("%s_get_values (void)\n", makeLowerName (ei->name).c_str());
-+        g_print ("{\n");
-+        g_print ("  static SfiChoiceValue values[%zu];\n", ei->contents.size());
-+        g_print ("  static const SfiChoiceValues choice_values = {\n");
-+        g_print ("    G_N_ELEMENTS (values), values,\n");
-+        g_print ("  };\n");
-+        g_print ("  if (!values[0].choice_ident)\n    {\n");
-         int i = 0;
-         for (vector<ChoiceValue>::const_iterator vi = ei->contents.begin(); vi != ei->contents.end(); i++, vi++)
-           {
--            printf ("      values[%u].choice_ident = \"%s\";\n", i, makeUpperName (vi->name).c_str());
--            printf ("      values[%u].choice_label = %s;\n", i, vi->label.escaped().c_str());
--            printf ("      values[%u].choice_blurb = %s;\n", i, vi->blurb.escaped().c_str());
--          }
--        printf ("  }\n");
--        printf ("  return choice_values;\n");
--        printf ("}\n");
-+            g_print ("      values[%u].choice_ident = \"%s\";\n", i, makeUpperName (vi->name).c_str());
-+            g_print ("      values[%u].choice_label = %s;\n", i, vi->label.escaped().c_str());
-+            g_print ("      values[%u].choice_blurb = %s;\n", i, vi->blurb.escaped().c_str());
-+          }
-+        g_print ("  }\n");
-+        g_print ("  return choice_values;\n");
-+        g_print ("}\n");
-         
--        printf ("GType %s = 0;\n", make_TYPE_MACRO (ei->name));
--        printf ("\n");
-+        g_print ("GType %s = 0;\n", make_TYPE_MACRO (ei->name));
-+        g_print ("\n");
-         
-         enumCount++;
-       }
-     if (enumCount)
-       {
--        printf ("static void\n");
--        printf ("choice2enum (const GValue *src_value,\n");
--        printf ("             GValue       *dest_value)\n");
--        printf ("{\n");
--        printf ("  sfi_value_choice2enum (src_value, dest_value, NULL);\n");
--        printf ("}\n");
-+        g_print ("static void\n");
-+        g_print ("choice2enum (const GValue *src_value,\n");
-+        g_print ("             GValue       *dest_value)\n");
-+        g_print ("{\n");
-+        g_print ("  sfi_value_choice2enum (src_value, dest_value, NULL);\n");
-+        g_print ("}\n");
-       }
-   }
-   void
-   generate_record_prototypes ()
-   {
--    printf ("\n\n/* record typedefs */\n");
-+    g_print ("\n\n/* record typedefs */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-           continue;
-         String mname = makeMixedName (ri->name);
--        printf ("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
-+        g_print ("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
-       }
-   }
-   void
-   generate_record_definitions ()
-   {
--    printf ("\n\n/* records */\n");
-+    g_print ("\n\n/* records */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name)) continue;
-         
-         String mname = makeMixedName (ri->name.c_str());
-         
--        printf ("struct _%s {\n", mname.c_str());
-+        g_print ("struct _%s {\n", mname.c_str());
-         for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-           {
--            printf ("  %s %s;\n", TypeField (pi->type), pi->name.c_str());
-+            g_print ("  %s %s;\n", TypeField (pi->type), pi->name.c_str());
-           }
--        printf ("};\n");
-+        g_print ("};\n");
-       }
-   }
-   void
-   generate_record_type_id_prototypes ()
-   {
--    printf ("\n\n/* record type ids */\n");
-+    g_print ("\n\n/* record type ids */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-           continue;
--        printf ("extern GType %s;\n", make_type_id_symbol (ri->name));
-+        g_print ("extern GType %s;\n", make_type_id_symbol (ri->name));
-       }
-   }
-   void
-   generate_record_type_id_declarations ()
-   {
--    printf ("\n\n/* record type ids */\n");
-+    g_print ("\n\n/* record type ids */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-           continue;
--        printf ("GType %s = 0;\n", make_type_id_symbol (ri->name));
-+        g_print ("GType %s = 0;\n", make_type_id_symbol (ri->name));
-       }
-   }
-   void
-   generate_record_type_id_initializations ()
-   {
--    printf ("\n\n  /* record type ids */\n");
-+    g_print ("\n\n  /* record type ids */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-           continue;
--        printf ("  %s = %s;\n", make_type_id_symbol (ri->name), make_TYPE_MACRO (ri->name));
-+        g_print ("  %s = %s;\n", make_type_id_symbol (ri->name), make_TYPE_MACRO (ri->name));
-       }
-   }
-   void
-   generate_record_type_macros ()
-   {
--    printf ("\n\n/* record type macros */\n");
-+    g_print ("\n\n/* record type macros */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-           continue;
--        printf ("#define %s\t\t(%s)\n", make_TYPE_MACRO (ri->name), make_type_id_symbol (ri->name));
-+        g_print ("#define %s\t\t(%s)\n", make_TYPE_MACRO (ri->name), make_type_id_symbol (ri->name));
-       }
-   }
-   void
-   generate_record_method_prototypes ()
-   {
--    printf ("\n\n/* record functions */\n");
-+    g_print ("\n\n/* record functions */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name)) continue;
-@@ -437,19 +437,19 @@
-         String arg = TypeArg (ri->name);
-         String lname = makeLowerName (ri->name.c_str());
-         
--        printf ("SfiRecFields %s_get_fields (void);\n", lname.c_str());
--        printf ("%s %s_new (void);\n", ret.c_str(), lname.c_str());
--        printf ("%s %s_copy_shallow (%s rec);\n", ret.c_str(), lname.c_str(), arg.c_str());
--        printf ("%s %s_from_rec (SfiRec *sfi_rec);\n", ret.c_str(), lname.c_str());
--        printf ("SfiRec *%s_to_rec (%s rec);\n", lname.c_str(), arg.c_str());
--        printf ("void %s_free (%s rec);\n", lname.c_str(), arg.c_str());
--        printf ("\n");
-+        g_print ("SfiRecFields %s_get_fields (void);\n", lname.c_str());
-+        g_print ("%s %s_new (void);\n", ret.c_str(), lname.c_str());
-+        g_print ("%s %s_copy_shallow (%s rec);\n", ret.c_str(), lname.c_str(), arg.c_str());
-+        g_print ("%s %s_from_rec (SfiRec *sfi_rec);\n", ret.c_str(), lname.c_str());
-+        g_print ("SfiRec *%s_to_rec (%s rec);\n", lname.c_str(), arg.c_str());
-+        g_print ("void %s_free (%s rec);\n", lname.c_str(), arg.c_str());
-+        g_print ("\n");
-       }
-   }
-   void
-   generate_record_hack_cast_implementations ()
-   {
--    printf ("\n\n/* record functions */\n");
-+    g_print ("\n\n/* record functions */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-@@ -457,22 +457,22 @@
-         String ret = TypeRet (ri->name);
-         const gchar *type = make_fqtn (ri->name);
--        printf ("static inline %s\n", ret.c_str());
--        printf ("hack_cast (%s *cxxstruct)\n", type);
--        printf ("{\n");
--        printf ("  return reinterpret_cast<%s> (cxxstruct);\n", ret.c_str());
--        printf ("}\n");
--        printf ("static inline %s*\n", type);
--        printf ("hack_cast (%s cstruct)\n", ret.c_str());
--        printf ("{\n");
--        printf ("  return reinterpret_cast< %s*> (cstruct);\n", type);
--        printf ("}\n");
-+        g_print ("static inline %s\n", ret.c_str());
-+        g_print ("hack_cast (%s *cxxstruct)\n", type);
-+        g_print ("{\n");
-+        g_print ("  return reinterpret_cast<%s> (cxxstruct);\n", ret.c_str());
-+        g_print ("}\n");
-+        g_print ("static inline %s*\n", type);
-+        g_print ("hack_cast (%s cstruct)\n", ret.c_str());
-+        g_print ("{\n");
-+        g_print ("  return reinterpret_cast< %s*> (cstruct);\n", type);
-+        g_print ("}\n");
-       }
-   }
-   void
-   generate_record_method_implementations ()
-   {
--    printf ("\n\n/* record functions */\n");
-+    g_print ("\n\n/* record functions */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-@@ -484,55 +484,55 @@
-         const gchar *type = make_fqtn (ri->name);
--        printf ("SfiRecFields\n");
--        printf ("%s_get_fields (void)\n", lname.c_str());
--        printf ("{\n");
--        printf ("  return %s::get_fields ();\n", type);
--        printf ("}\n");
--
--        printf ("%s\n", ret.c_str());
--        printf ("%s_new (void)\n", lname.c_str());
--        printf ("{\n");
--        printf ("  %sHandle rh (Sfi::INIT_DEFAULT); \n", type);
--        printf ("  return hack_cast (rh.steal());\n");
--        printf ("}\n");
--        
--        printf ("%s\n", ret.c_str());
--        printf ("%s_copy_shallow (%s cstruct)\n", lname.c_str(), arg.c_str());
--        printf ("{\n");
--        printf ("  %sHandle rh;\n", type);
--        printf ("  rh.set_boxed (hack_cast (cstruct));\n");
--        printf ("  return hack_cast (rh.steal());\n");
--        printf ("}\n");
--        
--        printf ("%s\n", ret.c_str());
--        printf ("%s_from_rec (SfiRec *rec)\n", lname.c_str());
--        printf ("{\n");
--        printf ("  %sHandle rh = %s::from_rec (rec);\n", type, type);
--        printf ("  return hack_cast (rh.steal());\n");
--        printf ("}\n");
--        
--        printf ("SfiRec*\n");
--        printf ("%s_to_rec (%s cstruct)\n", lname.c_str(), arg.c_str());
--        printf ("{\n");
--        printf ("  %sHandle rh;\n", type);
--        printf ("  rh.set_boxed (hack_cast (cstruct));\n");
--        printf ("  return %s::to_rec (rh);\n", type);
--        printf ("}\n");
--        
--        printf ("void\n");
--        printf ("%s_free (%s cstruct)\n", lname.c_str(), arg.c_str());
--        printf ("{\n");
--        printf ("  %sHandle rh;\n", type);
--        printf ("  rh.take (hack_cast (cstruct));\n");
--        printf ("}\n");
--        printf ("\n");
-+        g_print ("SfiRecFields\n");
-+        g_print ("%s_get_fields (void)\n", lname.c_str());
-+        g_print ("{\n");
-+        g_print ("  return %s::get_fields ();\n", type);
-+        g_print ("}\n");
-+
-+        g_print ("%s\n", ret.c_str());
-+        g_print ("%s_new (void)\n", lname.c_str());
-+        g_print ("{\n");
-+        g_print ("  %sHandle rh (Sfi::INIT_DEFAULT); \n", type);
-+        g_print ("  return hack_cast (rh.steal());\n");
-+        g_print ("}\n");
-+        
-+        g_print ("%s\n", ret.c_str());
-+        g_print ("%s_copy_shallow (%s cstruct)\n", lname.c_str(), arg.c_str());
-+        g_print ("{\n");
-+        g_print ("  %sHandle rh;\n", type);
-+        g_print ("  rh.set_boxed (hack_cast (cstruct));\n");
-+        g_print ("  return hack_cast (rh.steal());\n");
-+        g_print ("}\n");
-+        
-+        g_print ("%s\n", ret.c_str());
-+        g_print ("%s_from_rec (SfiRec *rec)\n", lname.c_str());
-+        g_print ("{\n");
-+        g_print ("  %sHandle rh = %s::from_rec (rec);\n", type, type);
-+        g_print ("  return hack_cast (rh.steal());\n");
-+        g_print ("}\n");
-+        
-+        g_print ("SfiRec*\n");
-+        g_print ("%s_to_rec (%s cstruct)\n", lname.c_str(), arg.c_str());
-+        g_print ("{\n");
-+        g_print ("  %sHandle rh;\n", type);
-+        g_print ("  rh.set_boxed (hack_cast (cstruct));\n");
-+        g_print ("  return %s::to_rec (rh);\n", type);
-+        g_print ("}\n");
-+        
-+        g_print ("void\n");
-+        g_print ("%s_free (%s cstruct)\n", lname.c_str(), arg.c_str());
-+        g_print ("{\n");
-+        g_print ("  %sHandle rh;\n", type);
-+        g_print ("  rh.take (hack_cast (cstruct));\n");
-+        g_print ("}\n");
-+        g_print ("\n");
-       }
-   }
-   void
-   generate_record_converter_implementations ()
-   {
--    printf ("\n\n/* record converters */\n");
-+    g_print ("\n\n/* record converters */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-@@ -540,53 +540,53 @@
-         
-         String name = makeLowerName (ri->name);
-         
--        printf ("static GParamSpec *%s_field[%zd];\n", name.c_str(), ri->contents.size());
--        printf ("SfiRecFields %s_fields = { %zd, %s_field };\n", name.c_str(), ri->contents.size(), name.c_str());
-+        g_print ("static GParamSpec *%s_field[%zd];\n", name.c_str(), ri->contents.size());
-+        g_print ("SfiRecFields %s_fields = { %zd, %s_field };\n", name.c_str(), ri->contents.size(), name.c_str());
-         
-         String mname = makeMixedName (ri->name);
-         
--        printf ("static void\n");
--        printf ("%s_boxed2rec (const GValue *src_value, GValue *dest_value)\n", name.c_str());
--        printf ("{\n");
--        printf ("  gpointer boxed = g_value_get_boxed (src_value);\n");
--        printf ("  sfi_value_take_rec (dest_value, boxed ? %s_to_rec (boxed) : NULL);\n", name.c_str());
--        printf ("}\n");
--        
--        printf ("static void\n");
--        printf ("%s_rec2boxed (const GValue *src_value, GValue *dest_value)\n", name.c_str());
--        printf ("{\n");
--        printf ("  SfiRec *rec = sfi_value_get_rec (src_value);\n");
--        printf ("  g_value_take_boxed (dest_value,\n");
--        printf ("    rec ? %s_from_rec (rec) : NULL);\n", name.c_str());
--        printf ("}\n");
-+        g_print ("static void\n");
-+        g_print ("%s_boxed2rec (const GValue *src_value, GValue *dest_value)\n", name.c_str());
-+        g_print ("{\n");
-+        g_print ("  gpointer boxed = g_value_get_boxed (src_value);\n");
-+        g_print ("  sfi_value_take_rec (dest_value, boxed ? %s_to_rec (boxed) : NULL);\n", name.c_str());
-+        g_print ("}\n");
-+        
-+        g_print ("static void\n");
-+        g_print ("%s_rec2boxed (const GValue *src_value, GValue *dest_value)\n", name.c_str());
-+        g_print ("{\n");
-+        g_print ("  SfiRec *rec = sfi_value_get_rec (src_value);\n");
-+        g_print ("  g_value_take_boxed (dest_value,\n");
-+        g_print ("    rec ? %s_from_rec (rec) : NULL);\n", name.c_str());
-+        g_print ("}\n");
-         
-         printInfoStrings (name + "_info_strings", ri->infos);
--        printf ("static SfiBoxedRecordInfo %s_boxed_info = {\n", name.c_str());
--        printf ("  \"%s\",\n", mname.c_str());
--        printf ("  { %zd, %s_field },\n", ri->contents.size(), name.c_str());
--        printf ("  %s_boxed2rec,\n", name.c_str());
--        printf ("  %s_rec2boxed,\n", name.c_str());
--        printf ("  %s_info_strings\n", name.c_str());
--        printf ("};\n");
--        printf ("GType %s = 0;\n", make_TYPE_MACRO (ri->name));
-+        g_print ("static SfiBoxedRecordInfo %s_boxed_info = {\n", name.c_str());
-+        g_print ("  \"%s\",\n", mname.c_str());
-+        g_print ("  { %zd, %s_field },\n", ri->contents.size(), name.c_str());
-+        g_print ("  %s_boxed2rec,\n", name.c_str());
-+        g_print ("  %s_rec2boxed,\n", name.c_str());
-+        g_print ("  %s_info_strings\n", name.c_str());
-+        g_print ("};\n");
-+        g_print ("GType %s = 0;\n", make_TYPE_MACRO (ri->name));
-       }
-   }
-   void
-   generate_sequence_prototypes ()
-   {
--    printf ("\n\n/* sequence typedefs */\n");
-+    g_print ("\n\n/* sequence typedefs */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-           continue;
-         String mname = makeMixedName (si->name);
--        printf ("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
-+        g_print ("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
-       }
-   }
-   void
-   generate_sequence_definitions ()
-   {
--    printf ("\n\n/* sequences */\n");
-+    g_print ("\n\n/* sequences */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name)) continue;
-@@ -595,60 +595,60 @@
-         String array = String (TypeField (si->content.type)) + "*";
-         String elements = si->content.name;
-         
--        printf ("struct _%s {\n", mname.c_str());
--        printf ("  guint n_%s;\n", elements.c_str ());
--        printf ("  %s %s;\n", array.c_str(), elements.c_str());
--        printf ("};\n");
-+        g_print ("struct _%s {\n", mname.c_str());
-+        g_print ("  guint n_%s;\n", elements.c_str ());
-+        g_print ("  %s %s;\n", array.c_str(), elements.c_str());
-+        g_print ("};\n");
-       }
-   }
-   void
-   generate_sequence_type_id_prototypes ()
-   {
--    printf ("\n\n/* sequence type ids */\n");
-+    g_print ("\n\n/* sequence type ids */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-           continue;
--        printf ("extern GType %s;\n", make_type_id_symbol (si->name));
-+        g_print ("extern GType %s;\n", make_type_id_symbol (si->name));
-       }
-   }
-   void
-   generate_sequence_type_id_declarations ()
-   {
--    printf ("\n\n/* sequence type ids */\n");
-+    g_print ("\n\n/* sequence type ids */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-           continue;
--        printf ("GType %s = 0;\n", make_type_id_symbol (si->name));
-+        g_print ("GType %s = 0;\n", make_type_id_symbol (si->name));
-       }
-   }
-   void
-   generate_sequence_type_id_initializations ()
-   {
--    printf ("\n\n  /* sequence type ids */\n");
-+    g_print ("\n\n  /* sequence type ids */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-           continue;
--        printf ("  %s = %s;\n", make_type_id_symbol (si->name), make_TYPE_MACRO (si->name));
-+        g_print ("  %s = %s;\n", make_type_id_symbol (si->name), make_TYPE_MACRO (si->name));
-       }
-   }
-   void
-   generate_sequence_type_macros ()
-   {
--    printf ("\n\n/* sequence type macros */\n");
-+    g_print ("\n\n/* sequence type macros */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-           continue;
--        printf ("#define %s\t\t(%s)\n", make_TYPE_MACRO (si->name), make_type_id_symbol (si->name));
-+        g_print ("#define %s\t\t(%s)\n", make_TYPE_MACRO (si->name), make_type_id_symbol (si->name));
-       }
-   }
-   void
-   generate_sequence_method_prototypes ()
-   {
--    printf ("\n\n/* sequence functions */\n");
-+    g_print ("\n\n/* sequence functions */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name)) continue;
-@@ -658,21 +658,21 @@
-         String element = TypeArg (si->content.type);
-         String lname = makeLowerName (si->name.c_str());
--        printf ("GParamSpec* %s_get_element (void);\n", lname.c_str());
--        printf ("%s %s_new (void);\n", ret.c_str(), lname.c_str());
--        printf ("void %s_append (%s seq, %s element);\n", lname.c_str(), arg.c_str(), element.c_str());
--        printf ("%s %s_copy_shallow (%s seq);\n", ret.c_str(), lname.c_str(), arg.c_str());
--        printf ("%s %s_from_seq (SfiSeq *sfi_seq);\n", ret.c_str(), lname.c_str());
--        printf ("SfiSeq *%s_to_seq (%s seq);\n", lname.c_str(), arg.c_str());
--        printf ("void %s_resize (%s seq, guint new_size);\n", lname.c_str(), arg.c_str());
--        printf ("void %s_free (%s seq);\n", lname.c_str(), arg.c_str());
--        printf ("\n");
-+        g_print ("GParamSpec* %s_get_element (void);\n", lname.c_str());
-+        g_print ("%s %s_new (void);\n", ret.c_str(), lname.c_str());
-+        g_print ("void %s_append (%s seq, %s element);\n", lname.c_str(), arg.c_str(), element.c_str());
-+        g_print ("%s %s_copy_shallow (%s seq);\n", ret.c_str(), lname.c_str(), arg.c_str());
-+        g_print ("%s %s_from_seq (SfiSeq *sfi_seq);\n", ret.c_str(), lname.c_str());
-+        g_print ("SfiSeq *%s_to_seq (%s seq);\n", lname.c_str(), arg.c_str());
-+        g_print ("void %s_resize (%s seq, guint new_size);\n", lname.c_str(), arg.c_str());
-+        g_print ("void %s_free (%s seq);\n", lname.c_str(), arg.c_str());
-+        g_print ("\n");
-       }
-   }
-   void
-   generate_sequence_hack_cast_implementations ()
-   {
--    printf ("\n\n/* sequence C <-> C++ casts */\n");
-+    g_print ("\n\n/* sequence C <-> C++ casts */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-@@ -683,22 +683,22 @@
-         /* the cast functions take an extra unused sequence argument, to distinguish
-          * two sequences A and B which both have the same CSeq type (e.g. SfiInt and SfiNote).
-          */
--        printf ("static inline %s\n", ret.c_str());
--        printf ("hack_cast (const %s &unused, %s::CSeq *cxxseq)\n", type, type);
--        printf ("{\n");
--        printf ("  return reinterpret_cast<%s> (cxxseq);\n", ret.c_str());
--        printf ("}\n");
--        printf ("static inline %s::CSeq*\n", type);
--        printf ("hack_cast (%s cseq)\n", ret.c_str());
--        printf ("{\n");
--        printf ("  return reinterpret_cast< %s::CSeq*> (cseq);\n", type);
--        printf ("}\n");
-+        g_print ("static inline %s\n", ret.c_str());
-+        g_print ("hack_cast (const %s &unused, %s::CSeq *cxxseq)\n", type, type);
-+        g_print ("{\n");
-+        g_print ("  return reinterpret_cast<%s> (cxxseq);\n", ret.c_str());
-+        g_print ("}\n");
-+        g_print ("static inline %s::CSeq*\n", type);
-+        g_print ("hack_cast (%s cseq)\n", ret.c_str());
-+        g_print ("{\n");
-+        g_print ("  return reinterpret_cast< %s::CSeq*> (cseq);\n", type);
-+        g_print ("}\n");
-       }
-   }
-   void
-   generate_sequence_method_implementations ()
-   {
--    printf ("\n\n/* sequence functions */\n");
-+    g_print ("\n\n/* sequence functions */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-@@ -711,120 +711,120 @@
-         
-         const gchar *type = make_fqtn (si->name);
--        printf ("GParamSpec*\n");
--        printf ("%s_get_element (void)\n", lname.c_str());
--        printf ("{\n");
--        printf ("  return %s::get_element ();\n", type);
--        printf ("}\n");
--
--        printf ("%s\n", ret.c_str());
--        printf ("%s_new (void)\n", lname.c_str());
--        printf ("{\n");
--        printf ("  %s sh (0);\n", type);
--        printf ("  return hack_cast (sh, sh.steal());\n");
--        printf ("}\n");
--        
--        printf ("void\n");
--        printf ("%s_append (%s cseq, %s element)\n", lname.c_str(), arg.c_str(), element.c_str());
--        printf ("{\n");
--        printf ("  g_return_if_fail (cseq != NULL);\n");
--        printf ("  %s sh (0);\n", type);
--        printf ("  sh.take (hack_cast (cseq));\n");
--        printf ("  sh += %s;\n", cxx_handle (si->content.type, "element"));
--        printf ("  sh.steal(); /* prevent cseq deletion */\n");
--        printf ("}\n");
--        
--        printf ("%s\n", ret.c_str());
--        printf ("%s_copy_shallow (%s cseq)\n", lname.c_str(), arg.c_str());
--        printf ("{\n");
--        printf ("  %s sh (0);\n", type);
--        printf ("  sh.set_boxed (hack_cast (cseq));\n");
--        printf ("  return hack_cast (sh, sh.steal());\n");
--        printf ("}\n");
--        
--        printf ("%s\n", ret.c_str());
--        printf ("%s_from_seq (SfiSeq *seq)\n", lname.c_str());
--        printf ("{\n");
--        printf ("  %s sh = %s::from_seq (seq);\n", type, type);
--        printf ("  return hack_cast (sh, sh.steal());\n");
--        printf ("}\n");
--        
--        printf ("SfiSeq*\n");
--        printf ("%s_to_seq (%s cseq)\n", lname.c_str(), arg.c_str());
--        printf ("{\n");
--        printf ("  %s sh (0);\n", type);
--        printf ("  sh.take (hack_cast (cseq));\n");
--        printf ("  SfiSeq *seq = %s::to_seq (sh);\n", type);
--        printf ("  sh.steal(); /* prevent cseq deletion */\n");
--        printf ("  return seq;\n");
--        printf ("}\n");
--        
--        printf ("void\n");
--        printf ("%s_resize (%s cseq, guint n)\n", lname.c_str(), arg.c_str());
--        printf ("{\n");
--        printf ("  g_return_if_fail (cseq != NULL);\n");
--        printf ("  %s sh (0);\n", type);
--        printf ("  sh.take (hack_cast (cseq));\n");
--        printf ("  sh.resize (n);\n");
--        printf ("  sh.steal(); /* prevent cseq deletion */\n");
--        printf ("}\n");
--
--        printf ("void\n");
--        printf ("%s_free (%s cseq)\n", lname.c_str(), arg.c_str());
--        printf ("{\n");
--        printf ("  %s sh (0);\n", type);
--        printf ("  sh.take (hack_cast (cseq));\n");
--        printf ("}\n");
--        printf ("\n");
-+        g_print ("GParamSpec*\n");
-+        g_print ("%s_get_element (void)\n", lname.c_str());
-+        g_print ("{\n");
-+        g_print ("  return %s::get_element ();\n", type);
-+        g_print ("}\n");
-+
-+        g_print ("%s\n", ret.c_str());
-+        g_print ("%s_new (void)\n", lname.c_str());
-+        g_print ("{\n");
-+        g_print ("  %s sh (0);\n", type);
-+        g_print ("  return hack_cast (sh, sh.steal());\n");
-+        g_print ("}\n");
-+        
-+        g_print ("void\n");
-+        g_print ("%s_append (%s cseq, %s element)\n", lname.c_str(), arg.c_str(), element.c_str());
-+        g_print ("{\n");
-+        g_print ("  g_return_if_fail (cseq != NULL);\n");
-+        g_print ("  %s sh (0);\n", type);
-+        g_print ("  sh.take (hack_cast (cseq));\n");
-+        g_print ("  sh += %s;\n", cxx_handle (si->content.type, "element"));
-+        g_print ("  sh.steal(); /* prevent cseq deletion */\n");
-+        g_print ("}\n");
-+        
-+        g_print ("%s\n", ret.c_str());
-+        g_print ("%s_copy_shallow (%s cseq)\n", lname.c_str(), arg.c_str());
-+        g_print ("{\n");
-+        g_print ("  %s sh (0);\n", type);
-+        g_print ("  sh.set_boxed (hack_cast (cseq));\n");
-+        g_print ("  return hack_cast (sh, sh.steal());\n");
-+        g_print ("}\n");
-+        
-+        g_print ("%s\n", ret.c_str());
-+        g_print ("%s_from_seq (SfiSeq *seq)\n", lname.c_str());
-+        g_print ("{\n");
-+        g_print ("  %s sh = %s::from_seq (seq);\n", type, type);
-+        g_print ("  return hack_cast (sh, sh.steal());\n");
-+        g_print ("}\n");
-+        
-+        g_print ("SfiSeq*\n");
-+        g_print ("%s_to_seq (%s cseq)\n", lname.c_str(), arg.c_str());
-+        g_print ("{\n");
-+        g_print ("  %s sh (0);\n", type);
-+        g_print ("  sh.take (hack_cast (cseq));\n");
-+        g_print ("  SfiSeq *seq = %s::to_seq (sh);\n", type);
-+        g_print ("  sh.steal(); /* prevent cseq deletion */\n");
-+        g_print ("  return seq;\n");
-+        g_print ("}\n");
-+        
-+        g_print ("void\n");
-+        g_print ("%s_resize (%s cseq, guint n)\n", lname.c_str(), arg.c_str());
-+        g_print ("{\n");
-+        g_print ("  g_return_if_fail (cseq != NULL);\n");
-+        g_print ("  %s sh (0);\n", type);
-+        g_print ("  sh.take (hack_cast (cseq));\n");
-+        g_print ("  sh.resize (n);\n");
-+        g_print ("  sh.steal(); /* prevent cseq deletion */\n");
-+        g_print ("}\n");
-+
-+        g_print ("void\n");
-+        g_print ("%s_free (%s cseq)\n", lname.c_str(), arg.c_str());
-+        g_print ("{\n");
-+        g_print ("  %s sh (0);\n", type);
-+        g_print ("  sh.take (hack_cast (cseq));\n");
-+        g_print ("}\n");
-+        g_print ("\n");
-       }
-   }
-   void
-   generate_sequence_converter_implementations ()
-   {
--    printf ("\n\n/* sequence converters */\n");
-+    g_print ("\n\n/* sequence converters */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name)) continue;
-         
-         String name = makeLowerName (si->name);
-         
--        printf ("static GParamSpec *%s_content;\n", name.c_str());
-+        g_print ("static GParamSpec *%s_content;\n", name.c_str());
-         
-         String mname = makeMixedName (si->name);
-         
--        printf ("static void\n");
--        printf ("%s_boxed2seq (const GValue *src_value, GValue *dest_value)\n", name.c_str());
--        printf ("{\n");
--        printf ("  gpointer boxed = g_value_get_boxed (src_value);\n");
--        printf ("  sfi_value_take_seq (dest_value, boxed ? %s_to_seq (boxed) : NULL);\n", name.c_str());
--        printf ("}\n");
--        
--        printf ("static void\n");
--        printf ("%s_seq2boxed (const GValue *src_value, GValue *dest_value)\n", name.c_str());
--        printf ("{\n");
--        printf ("  SfiSeq *seq = sfi_value_get_seq (src_value);\n");
--        printf ("  g_value_take_boxed (dest_value,\n");
--        printf ("    seq ? %s_from_seq (seq) : NULL);\n", name.c_str());
--        printf ("}\n");
-+        g_print ("static void\n");
-+        g_print ("%s_boxed2seq (const GValue *src_value, GValue *dest_value)\n", name.c_str());
-+        g_print ("{\n");
-+        g_print ("  gpointer boxed = g_value_get_boxed (src_value);\n");
-+        g_print ("  sfi_value_take_seq (dest_value, boxed ? %s_to_seq (boxed) : NULL);\n", name.c_str());
-+        g_print ("}\n");
-+        
-+        g_print ("static void\n");
-+        g_print ("%s_seq2boxed (const GValue *src_value, GValue *dest_value)\n", name.c_str());
-+        g_print ("{\n");
-+        g_print ("  SfiSeq *seq = sfi_value_get_seq (src_value);\n");
-+        g_print ("  g_value_take_boxed (dest_value,\n");
-+        g_print ("    seq ? %s_from_seq (seq) : NULL);\n", name.c_str());
-+        g_print ("}\n");
-         
-         printInfoStrings (name + "_info_strings", si->infos);
--        printf ("static SfiBoxedSequenceInfo %s_boxed_info = {\n", name.c_str());
--        printf ("  \"%s\",\n", mname.c_str());
--        printf ("  NULL, /* %s_content */\n", name.c_str());
--        printf ("  %s_boxed2seq,\n", name.c_str());
--        printf ("  %s_seq2boxed,\n", name.c_str());
--        printf ("  %s_info_strings\n", name.c_str());
--        printf ("};\n");
--        printf ("GType %s = 0;\n", make_TYPE_MACRO (si->name));
-+        g_print ("static SfiBoxedSequenceInfo %s_boxed_info = {\n", name.c_str());
-+        g_print ("  \"%s\",\n", mname.c_str());
-+        g_print ("  NULL, /* %s_content */\n", name.c_str());
-+        g_print ("  %s_boxed2seq,\n", name.c_str());
-+        g_print ("  %s_seq2boxed,\n", name.c_str());
-+        g_print ("  %s_info_strings\n", name.c_str());
-+        g_print ("};\n");
-+        g_print ("GType %s = 0;\n", make_TYPE_MACRO (si->name));
-       }
-   }
-   void
-   generate_init_function ()
-   {
-     bool first = true;
--    printf ("\n\n/* type initialization function */\n");
--    printf ("static void\n%s (void)\n", generateInitFunction.c_str());
--    printf ("{\n");
-+    g_print ("\n\n/* type initialization function */\n");
-+    g_print ("static void\n%s (void)\n", generateInitFunction.c_str());
-+    g_print ("{\n");
-     
-     /*
-      * It is important to follow the declaration order of the idl file here, as for
-@@ -841,7 +841,7 @@
-         if (parser.isRecord (*ti) || parser.isSequence (*ti))
-           {
-             if (!first)
--              printf ("\n");
-+              g_print ("\n");
-             first = false;
-           }
-         if (parser.isRecord (*ti))
-@@ -854,8 +854,8 @@
-             for (vector<Param>::const_iterator pi = rdef.contents.begin(); pi != rdef.contents.end(); pi++, f++)
-               {
-                 if (generateIdlLineNumbers)
--                  printf ("#line %u \"%s\"\n", pi->line, parser.fileName().c_str());
--                printf ("  %s_field[%d] = %s;\n", name.c_str(), f, construct_pspec (*pi).c_str());
-+                  g_print ("#line %u \"%s\"\n", pi->line, parser.fileName().c_str());
-+                g_print ("  %s_field[%d] = %s;\n", name.c_str(), f, construct_pspec (*pi).c_str());
-               }
-           }
-         if (parser.isSequence (*ti))
-@@ -865,8 +865,8 @@
-             String name = makeLowerName (sdef.name);
-             
-             if (generateIdlLineNumbers)
--              printf ("#line %u \"%s\"\n", sdef.content.line, parser.fileName().c_str());
--            printf ("  %s_content = %s;\n", name.c_str(), construct_pspec (sdef.content).c_str());
-+              g_print ("#line %u \"%s\"\n", sdef.content.line, parser.fileName().c_str());
-+            g_print ("  %s_content = %s;\n", name.c_str(), construct_pspec (sdef.content).c_str());
-           }
-       }
-     for (vector<Choice>::const_iterator ei = parser.getChoices().begin(); ei != parser.getChoices().end(); ei++)
-@@ -877,11 +877,11 @@
-         String name = makeLowerName(ei->name);
-         String mname = makeMixedName(ei->name);
-         
--        printf ("  %s = g_enum_register_static (\"%s\", %s_value);\n", gname.c_str(),
-+        g_print ("  %s = g_enum_register_static (\"%s\", %s_value);\n", gname.c_str(),
-                 mname.c_str(), name.c_str());
--        printf ("  g_value_register_transform_func (SFI_TYPE_CHOICE, %s, choice2enum);\n",
-+        g_print ("  g_value_register_transform_func (SFI_TYPE_CHOICE, %s, choice2enum);\n",
-                 gname.c_str());
--        printf ("  g_value_register_transform_func (%s, SFI_TYPE_CHOICE,"
-+        g_print ("  g_value_register_transform_func (%s, SFI_TYPE_CHOICE,"
-                 " sfi_value_enum2choice);\n", gname.c_str());
-       }
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-@@ -891,9 +891,9 @@
-         String gname = make_TYPE_MACRO (ri->name);
-         String name = makeLowerName(ri->name);
-         
--        printf ("  %s = sfi_boxed_make_record (&%s_boxed_info,\n", gname.c_str(), name.c_str());
--        printf ("    (GBoxedCopyFunc) %s_copy_shallow,\n", name.c_str());
--        printf ("    (GBoxedFreeFunc) %s_free);\n", name.c_str());
-+        g_print ("  %s = sfi_boxed_make_record (&%s_boxed_info,\n", gname.c_str(), name.c_str());
-+        g_print ("    (GBoxedCopyFunc) %s_copy_shallow,\n", name.c_str());
-+        g_print ("    (GBoxedFreeFunc) %s_free);\n", name.c_str());
-       }
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-@@ -902,12 +902,12 @@
-         String gname = make_TYPE_MACRO (si->name);
-         String name = makeLowerName(si->name);
-         
--        printf ("  %s_boxed_info.element = %s_content;\n", name.c_str(), name.c_str());
--        printf ("  %s = sfi_boxed_make_sequence (&%s_boxed_info,\n", gname.c_str(), name.c_str());
--        printf ("    (GBoxedCopyFunc) %s_copy_shallow,\n", name.c_str());
--        printf ("    (GBoxedFreeFunc) %s_free);\n", name.c_str());
-+        g_print ("  %s_boxed_info.element = %s_content;\n", name.c_str(), name.c_str());
-+        g_print ("  %s = sfi_boxed_make_sequence (&%s_boxed_info,\n", gname.c_str(), name.c_str());
-+        g_print ("    (GBoxedCopyFunc) %s_copy_shallow,\n", name.c_str());
-+        g_print ("    (GBoxedFreeFunc) %s_free);\n", name.c_str());
-       }
--    printf ("}\n");
-+    g_print ("}\n");
-   }
-   
- public:
-@@ -919,9 +919,9 @@
-   bool
-   run ()
-   {
--    printf ("\n/*-------- begin %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-+    g_print ("\n/*-------- begin %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-     if (generateSource)
--      printf ("#include <string.h>\n");
-+      g_print ("#include <string.h>\n");
-     
-     if (generateHeader)
-       {
-@@ -936,11 +936,11 @@
-         generate_enum_type_id_prototypes ();
-         generate_record_type_id_prototypes ();
-         generate_sequence_type_id_prototypes ();
--        printf ("\n#ifndef __cplusplus\n");
-+        g_print ("\n#ifndef __cplusplus\n");
-         generate_enum_type_macros ();
-         generate_record_type_macros ();
-         generate_sequence_type_macros ();
--        printf ("\n#endif\n");
-+        g_print ("\n#endif\n");
-       }
-     if (generateSource)
-@@ -959,16 +959,16 @@
-         // printChoiceConverters ();
-         if (generateInitFunction != "")
-           {     // generate_init_function();
--            printf ("\n\n/* type initialization function */\n");
--            printf ("static void\n%s (void)\n{\n", generateInitFunction.c_str());
-+            g_print ("\n\n/* type initialization function */\n");
-+            g_print ("static void\n%s (void)\n{\n", generateInitFunction.c_str());
-             generate_enum_type_id_initializations ();
-             generate_record_type_id_initializations ();
-             generate_sequence_type_id_initializations ();
--            printf ("}\n");
-+            g_print ("}\n");
-           }
-       }
--    printf ("\n/*-------- end %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-+    g_print ("\n/*-------- end %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-     return true;
-   }
- };
---- ../../../orig/beast-20090428/sfi/sfidl-corecxx.cc  2009-05-05 10:00:43.000000000 -0400
-+++ ../sfi/sfidl-corecxx.cc    2009-05-05 10:56:16.000000000 -0400
-@@ -480,57 +480,57 @@
-   void
-   generate_choice_prototypes (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* choice prototypes */\n");
-+    g_print ("\n\n/* choice prototypes */\n");
-     for (vector<Choice>::const_iterator ci = parser.getChoices().begin(); ci != parser.getChoices().end(); ci++)
-       {
-         if (parser.fromInclude (ci->name))
-           continue;
-         nspace.setFromSymbol(ci->name);
-         const char *name = nspace.printable_form (ci->name);
--        printf ("static SfiChoiceValues %s_choice_values();\n", name);
-+        g_print ("static SfiChoiceValues %s_choice_values();\n", name);
-       }
-   }
-   void
-   generate_choice_implementations (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* choice implementations */\n");
-+    g_print ("\n\n/* choice implementations */\n");
-     for (vector<Choice>::const_iterator ci = parser.getChoices().begin(); ci != parser.getChoices().end(); ci++)
-       {
-         if (parser.fromInclude (ci->name))
-           continue;
-         nspace.setFromSymbol(ci->name);
-         const char *name = nspace.printable_form (ci->name);
--        printf ("static SfiChoiceValues\n");
--        printf ("%s_choice_values()\n", name);
--        printf ("{\n");
--        printf ("  static SfiChoiceValue values[%zu];\n", ci->contents.size());
--        printf ("  static const SfiChoiceValues choice_values = {\n");
--        printf ("    G_N_ELEMENTS (values), values,\n");
--        printf ("  };\n");
--        printf ("  if (!values[0].choice_ident)\n    {\n");
-+        g_print ("static SfiChoiceValues\n");
-+        g_print ("%s_choice_values()\n", name);
-+        g_print ("{\n");
-+        g_print ("  static SfiChoiceValue values[%zu];\n", ci->contents.size());
-+        g_print ("  static const SfiChoiceValues choice_values = {\n");
-+        g_print ("    G_N_ELEMENTS (values), values,\n");
-+        g_print ("  };\n");
-+        g_print ("  if (!values[0].choice_ident)\n    {\n");
-         int i = 0;
-         for (vector<ChoiceValue>::const_iterator vi = ci->contents.begin(); vi != ci->contents.end(); i++, vi++)
-           {
--            printf ("      values[%u].choice_ident = \"%s\";\n", i, make_FULL_UPPER (vi->name));
--            printf ("      values[%u].choice_label = %s;\n", i, vi->label.escaped().c_str());
--            printf ("      values[%u].choice_blurb = %s;\n", i, vi->blurb.escaped().c_str());
--          }
--        printf ("  }\n");
--        printf ("  return choice_values;\n");
--        printf ("}\n\n");
-+            g_print ("      values[%u].choice_ident = \"%s\";\n", i, make_FULL_UPPER (vi->name));
-+            g_print ("      values[%u].choice_label = %s;\n", i, vi->label.escaped().c_str());
-+            g_print ("      values[%u].choice_blurb = %s;\n", i, vi->blurb.escaped().c_str());
-+          }
-+        g_print ("  }\n");
-+        g_print ("  return choice_values;\n");
-+        g_print ("}\n\n");
-       }
-   }
-   void
-   generate_enum_prototypes (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* enum prototypes */\n");
-+    g_print ("\n\n/* enum prototypes */\n");
-     for (vector<Choice>::const_iterator ci = parser.getChoices().begin(); ci != parser.getChoices().end(); ci++)
-       {
-         if (parser.fromInclude (ci->name))
-           continue;
-         nspace.setFromSymbol(ci->name);
-         // const char *name = nspace.printable_form (ci->name);
--        printf ("#define %s\t\tBSE_CXX_DECLARED_ENUM_TYPE (%s, %s)\n",
-+        g_print ("#define %s\t\tBSE_CXX_DECLARED_ENUM_TYPE (%s, %s)\n",
-                 make_TYPE_NAME (ci->name),
-                 nspace.namespaceOf (ci->name).c_str(),
-                 pure_TypeName (ci->name));
-@@ -540,41 +540,41 @@
-   void
-   generate_enum_definitions (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* enum definitions */\n");
-+    g_print ("\n\n/* enum definitions */\n");
-     for (vector<Choice>::const_iterator ci = parser.getChoices().begin(); ci != parser.getChoices().end(); ci++)
-       {
-         if (parser.fromInclude (ci->name))
-           continue;
-         nspace.setFromSymbol(ci->name);
-         const char *name = nspace.printable_form (ci->name);
--        printf ("enum %s {\n", name);
-+        g_print ("enum %s {\n", name);
-         for (vector<ChoiceValue>::const_iterator vi = ci->contents.begin(); vi != ci->contents.end(); vi++)
--          printf ("  %s = %d,\n", pure_UPPER (vi->name), vi->value);
--        printf ("};\n");
-+          g_print ("  %s = %d,\n", pure_UPPER (vi->name), vi->value);
-+        g_print ("};\n");
-       }
-   }
-   void
-   generate_enum_declarations (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* enum declarations */\n");
-+    g_print ("\n\n/* enum declarations */\n");
-     for (vector<Choice>::const_iterator ci = parser.getChoices().begin(); ci != parser.getChoices().end(); ci++)
-       {
-         if (parser.fromInclude (ci->name))
-           continue;
-         nspace.setFromSymbol(ci->name);
-         // const char *name = nspace.printable_form (ci->name);
--        printf ("BSE_CXX_DECLARE_ENUM (%s, \"%s\", %zu,\n",
-+        g_print ("BSE_CXX_DECLARE_ENUM (%s, \"%s\", %zu,\n",
-                 pure_TypeName (ci->name), make_PrefixedTypeName (ci->name), ci->contents.size());
-         for (vector<ChoiceValue>::const_iterator vi = ci->contents.begin(); vi != ci->contents.end(); vi++)
--          printf ("  *v++ = ::Bse::EnumValue (%s, \"%s\", %s );\n",
-+          g_print ("  *v++ = ::Bse::EnumValue (%s, \"%s\", %s );\n",
-                   pure_UPPER (vi->name), make_FULL_UPPER (vi->name), vi->label.escaped().c_str());
--        printf (");\n");
-+        g_print (");\n");
-       }
-   }
-   void
-   generate_record_prototypes (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* record prototypes */\n");
-+    g_print ("\n\n/* record prototypes */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-@@ -583,9 +583,9 @@
-         nspace.setFromSymbol(ri->name);
-         const char *name = nspace.printable_form (ri->name);
-         
--        printf ("class %s;\n", pure_TypeName (ri->name));
--        printf ("typedef Sfi::RecordHandle<%s> %sHandle;\n", name, name);
--        printf ("#define %s\t\tBSE_CXX_DECLARED_RECORD_TYPE (%s, %s)\n",
-+        g_print ("class %s;\n", pure_TypeName (ri->name));
-+        g_print ("typedef Sfi::RecordHandle<%s> %sHandle;\n", name, name);
-+        g_print ("#define %s\t\tBSE_CXX_DECLARED_RECORD_TYPE (%s, %s)\n",
-                 make_TYPE_NAME (ri->name),
-                 nspace.namespaceOf (ri->name).c_str(),
-                 pure_TypeName (ri->name));
-@@ -595,51 +595,51 @@
-   void
-   generate_record_definitions (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* record definitions */\n");
-+    g_print ("\n\n/* record definitions */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-           continue;
-         nspace.setFromSymbol(ri->name);
-         
--        printf ("class %s : public ::Sfi::GNewable {\n", pure_TypeName (ri->name));
--        printf ("public:\n");
-+        g_print ("class %s : public ::Sfi::GNewable {\n", pure_TypeName (ri->name));
-+        g_print ("public:\n");
-         for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-           {
--            printf ("  %s %s;\n", TypeField (pi->type), pi->name.c_str());
-+            g_print ("  %s %s;\n", TypeField (pi->type), pi->name.c_str());
-           }
--        printf ("  static inline %s from_rec (SfiRec *rec);\n", TypeRet (ri->name));
--        printf ("  static inline SfiRec *to_rec (%s ptr);\n", TypeArg (ri->name));
--        printf ("  static inline %s value_get_boxed (const GValue *value);\n", TypeRet (ri->name));
--        printf ("  static inline void value_set_boxed (GValue *value, %s self);\n", TypeArg (ri->name));
--        printf ("  static inline const char* options   () { return %s; }\n", ri->infos.get("options").escaped().c_str());
--        printf ("  static inline const char* blurb     () { return %s; }\n", ri->infos.get("blurb").escaped().c_str());
--        printf ("  static inline const char* authors   () { return %s; }\n", ri->infos.get("authors").escaped().c_str());
--        printf ("  static inline const char* license   () { return %s; }\n", ri->infos.get("license").escaped().c_str());
--        printf ("  static inline const char* type_name () { return \"%s\"; }\n", make_PrefixedTypeName (ri->name));
--        printf ("  static inline SfiRecFields get_fields ();\n");
--        printf ("};\n");
--        printf ("\n");
-+        g_print ("  static inline %s from_rec (SfiRec *rec);\n", TypeRet (ri->name));
-+        g_print ("  static inline SfiRec *to_rec (%s ptr);\n", TypeArg (ri->name));
-+        g_print ("  static inline %s value_get_boxed (const GValue *value);\n", TypeRet (ri->name));
-+        g_print ("  static inline void value_set_boxed (GValue *value, %s self);\n", TypeArg (ri->name));
-+        g_print ("  static inline const char* options   () { return %s; }\n", ri->infos.get("options").escaped().c_str());
-+        g_print ("  static inline const char* blurb     () { return %s; }\n", ri->infos.get("blurb").escaped().c_str());
-+        g_print ("  static inline const char* authors   () { return %s; }\n", ri->infos.get("authors").escaped().c_str());
-+        g_print ("  static inline const char* license   () { return %s; }\n", ri->infos.get("license").escaped().c_str());
-+        g_print ("  static inline const char* type_name () { return \"%s\"; }\n", make_PrefixedTypeName (ri->name));
-+        g_print ("  static inline SfiRecFields get_fields ();\n");
-+        g_print ("};\n");
-+        g_print ("\n");
-       }
-   }
-   void
-   generate_record_declarations (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* record type declarations */\n");
-+    g_print ("\n\n/* record type declarations */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-           continue;
-         nspace.setFromSymbol(ri->name);
-         
--        printf ("BSE_CXX_DECLARE_RECORD (%s);\n", pure_TypeName (ri->name));
--        printf ("\n");
-+        g_print ("BSE_CXX_DECLARE_RECORD (%s);\n", pure_TypeName (ri->name));
-+        g_print ("\n");
-       }
-   }
-   void
-   generate_record_implementations (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* record implementations */\n");
-+    g_print ("\n\n/* record implementations */\n");
-     for (vector<Record>::const_iterator ri = parser.getRecords().begin(); ri != parser.getRecords().end(); ri++)
-       {
-         if (parser.fromInclude (ri->name))
-@@ -647,86 +647,86 @@
-         nspace.setFromSymbol(ri->name);
-         const char *nname = nspace.printable_form (ri->name);
-         
--        printf ("%s\n", TypeRet (ri->name));
--        printf ("%s::from_rec (SfiRec *sfi_rec)\n", nname);
--        printf ("{\n");
--        printf ("  GValue *element;\n");
--        printf ("\n");
--        printf ("  if (!sfi_rec)\n");
--        printf ("    return Sfi::INIT_NULL;\n");
--        printf ("\n");
--        printf ("  %s rec = Sfi::INIT_DEFAULT;\n", TypeField (ri->name));
-+        g_print ("%s\n", TypeRet (ri->name));
-+        g_print ("%s::from_rec (SfiRec *sfi_rec)\n", nname);
-+        g_print ("{\n");
-+        g_print ("  GValue *element;\n");
-+        g_print ("\n");
-+        g_print ("  if (!sfi_rec)\n");
-+        g_print ("    return Sfi::INIT_NULL;\n");
-+        g_print ("\n");
-+        g_print ("  %s rec = Sfi::INIT_DEFAULT;\n", TypeField (ri->name));
-         for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-           {
--            printf ("  element = sfi_rec_get (sfi_rec, \"%s\");\n", pi->name.c_str());
--            printf ("  if (element)\n");
--            printf ("    rec->%s = %s (element);\n", pi->name.c_str(), func_value_get_param (pi->type));
--          }
--        printf ("  return rec;\n");
--        printf ("}\n\n");
--        
--        printf ("SfiRec *\n");
--        printf ("%s::to_rec (%s rec)\n", nname, TypeArg (ri->name));
--        printf ("{\n");
--        printf ("  SfiRec *sfi_rec;\n");
--        printf ("  GValue *element;\n");
--        printf ("\n");
--        printf ("  if (!rec)\n");
--        printf ("    return NULL;\n");
--        printf ("\n");
--        printf ("  sfi_rec = sfi_rec_new ();\n");
-+            g_print ("  element = sfi_rec_get (sfi_rec, \"%s\");\n", pi->name.c_str());
-+            g_print ("  if (element)\n");
-+            g_print ("    rec->%s = %s (element);\n", pi->name.c_str(), func_value_get_param (pi->type));
-+          }
-+        g_print ("  return rec;\n");
-+        g_print ("}\n\n");
-+        
-+        g_print ("SfiRec *\n");
-+        g_print ("%s::to_rec (%s rec)\n", nname, TypeArg (ri->name));
-+        g_print ("{\n");
-+        g_print ("  SfiRec *sfi_rec;\n");
-+        g_print ("  GValue *element;\n");
-+        g_print ("\n");
-+        g_print ("  if (!rec)\n");
-+        g_print ("    return NULL;\n");
-+        g_print ("\n");
-+        g_print ("  sfi_rec = sfi_rec_new ();\n");
-         for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-           {
--            printf ("  element = sfi_rec_forced_get (sfi_rec, \"%s\", %s);\n",
-+            g_print ("  element = sfi_rec_forced_get (sfi_rec, \"%s\", %s);\n",
-                     pi->name.c_str(), make_SFI_TYPE_NAME (pi->type));
--            printf ("  %s (element, rec->%s);\n", func_value_set_param (pi->type), pi->name.c_str());
-+            g_print ("  %s (element, rec->%s);\n", func_value_set_param (pi->type), pi->name.c_str());
-           }
--        printf ("  return sfi_rec;\n");
--        printf ("}\n\n");
-+        g_print ("  return sfi_rec;\n");
-+        g_print ("}\n\n");
-         
--        printf ("%s\n", TypeRet (ri->name));
--        printf ("%s::value_get_boxed (const GValue *value)\n", nname);
--        printf ("{\n");
--        printf ("  return %s::value_get_boxed (value);\n", TypeRet (ri->name));
--        printf ("}\n\n");
--        printf ("void\n");
--        printf ("%s::value_set_boxed (GValue *value, %s self)\n", nname, TypeArg (ri->name));
--        printf ("{\n");
--        printf ("  %s::value_set_boxed (value, self);\n", TypeRet (ri->name));
--        printf ("}\n\n");
--        
--        printf ("SfiRecFields\n");
--        printf ("%s::get_fields()\n", nname);
--        printf ("{\n");
--        printf ("  static SfiRecFields rfields = { 0, NULL };\n");
--        printf ("  if (!rfields.n_fields)\n");
--        printf ("    {\n");
--        printf ("      static GParamSpec *fields[%zu + 1];\n", ri->contents.size());
--        printf ("      rfields.n_fields = %zu;\n", ri->contents.size());
-+        g_print ("%s\n", TypeRet (ri->name));
-+        g_print ("%s::value_get_boxed (const GValue *value)\n", nname);
-+        g_print ("{\n");
-+        g_print ("  return %s::value_get_boxed (value);\n", TypeRet (ri->name));
-+        g_print ("}\n\n");
-+        g_print ("void\n");
-+        g_print ("%s::value_set_boxed (GValue *value, %s self)\n", nname, TypeArg (ri->name));
-+        g_print ("{\n");
-+        g_print ("  %s::value_set_boxed (value, self);\n", TypeRet (ri->name));
-+        g_print ("}\n\n");
-+        
-+        g_print ("SfiRecFields\n");
-+        g_print ("%s::get_fields()\n", nname);
-+        g_print ("{\n");
-+        g_print ("  static SfiRecFields rfields = { 0, NULL };\n");
-+        g_print ("  if (!rfields.n_fields)\n");
-+        g_print ("    {\n");
-+        g_print ("      static GParamSpec *fields[%zu + 1];\n", ri->contents.size());
-+        g_print ("      rfields.n_fields = %zu;\n", ri->contents.size());
-         guint j = 0;
-         for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
-           {
--            // printf ("#line %u \"%s\"\n", pi->line, parser.fileName().c_str());
--            printf ("      fields[%u] = %s;\n", j++, untyped_pspec_constructor (*pi).c_str());
-+            // g_print ("#line %u \"%s\"\n", pi->line, parser.fileName().c_str());
-+            g_print ("      fields[%u] = %s;\n", j++, untyped_pspec_constructor (*pi).c_str());
-           }
--        printf ("      rfields.fields = fields;\n");
--        printf ("    }\n");
--        printf ("  return rfields;\n");
--        printf ("}\n");
-+        g_print ("      rfields.fields = fields;\n");
-+        g_print ("    }\n");
-+        g_print ("  return rfields;\n");
-+        g_print ("}\n");
-       }
-   }
-   void
-   generate_sequence_prototypes (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* sequence prototypes */\n");
-+    g_print ("\n\n/* sequence prototypes */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-           continue;
-         nspace.setFromSymbol(si->name);
-         
--        printf ("class %s;\n", pure_TypeName (si->name));
--        printf ("#define %s\t\tBSE_CXX_DECLARED_SEQUENCE_TYPE (%s, %s)\n",
-+        g_print ("class %s;\n", pure_TypeName (si->name));
-+        g_print ("#define %s\t\tBSE_CXX_DECLARED_SEQUENCE_TYPE (%s, %s)\n",
-                 make_TYPE_NAME (si->name),
-                 nspace.namespaceOf (si->name).c_str(),
-                 pure_TypeName (si->name));
-@@ -736,48 +736,48 @@
-   void
-   generate_sequence_definitions (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* sequence definitions */\n");
-+    g_print ("\n\n/* sequence definitions */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-           continue;
-         nspace.setFromSymbol(si->name);
-         
--        printf ("class %s : public Sfi::Sequence< %s > {\n", pure_TypeName (si->name), TypeField (si->content.type));
--        printf ("public:\n");
--        printf ("  %s (unsigned int n = 0) : Sfi::Sequence< %s > (n) {}\n", pure_TypeName (si->name), TypeField (si->content.type));
--        printf ("  static inline %s from_seq (SfiSeq *seq);\n", TypeRet (si->name));
--        printf ("  static inline SfiSeq *to_seq (%s seq);\n", TypeArg (si->name));
--        printf ("  static inline %s value_get_boxed (const GValue *value);\n", TypeRet (si->name));
--        printf ("  static inline void value_set_boxed (GValue *value, %s self);\n", TypeArg (si->name));
--        printf ("  static inline const char* options   () { return %s; }\n", si->infos.get("options").escaped().c_str());
--        printf ("  static inline const char* blurb     () { return %s; }\n", si->infos.get("blurb").escaped().c_str());
--        printf ("  static inline const char* authors   () { return %s; }\n", si->infos.get("authors").escaped().c_str());
--        printf ("  static inline const char* license   () { return %s; }\n", si->infos.get("license").escaped().c_str());
--        printf ("  static inline const char* type_name () { return \"%s\"; }\n", make_PrefixedTypeName (si->name));
--        printf ("  static inline GParamSpec* get_element ();\n");
--        printf ("};\n");
--        printf ("\n");
-+        g_print ("class %s : public Sfi::Sequence< %s > {\n", pure_TypeName (si->name), TypeField (si->content.type));
-+        g_print ("public:\n");
-+        g_print ("  %s (unsigned int n = 0) : Sfi::Sequence< %s > (n) {}\n", pure_TypeName (si->name), TypeField (si->content.type));
-+        g_print ("  static inline %s from_seq (SfiSeq *seq);\n", TypeRet (si->name));
-+        g_print ("  static inline SfiSeq *to_seq (%s seq);\n", TypeArg (si->name));
-+        g_print ("  static inline %s value_get_boxed (const GValue *value);\n", TypeRet (si->name));
-+        g_print ("  static inline void value_set_boxed (GValue *value, %s self);\n", TypeArg (si->name));
-+        g_print ("  static inline const char* options   () { return %s; }\n", si->infos.get("options").escaped().c_str());
-+        g_print ("  static inline const char* blurb     () { return %s; }\n", si->infos.get("blurb").escaped().c_str());
-+        g_print ("  static inline const char* authors   () { return %s; }\n", si->infos.get("authors").escaped().c_str());
-+        g_print ("  static inline const char* license   () { return %s; }\n", si->infos.get("license").escaped().c_str());
-+        g_print ("  static inline const char* type_name () { return \"%s\"; }\n", make_PrefixedTypeName (si->name));
-+        g_print ("  static inline GParamSpec* get_element ();\n");
-+        g_print ("};\n");
-+        g_print ("\n");
-       }
-   }
-   void
-   generate_sequence_declarations (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* sequence type declarations */\n");
-+    g_print ("\n\n/* sequence type declarations */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-           continue;
-         nspace.setFromSymbol(si->name);
--        printf ("BSE_CXX_DECLARE_SEQUENCE (%s);\n", pure_TypeName (si->name));
--        printf ("\n");
-+        g_print ("BSE_CXX_DECLARE_SEQUENCE (%s);\n", pure_TypeName (si->name));
-+        g_print ("\n");
-       }
-   }
-   void
-   generate_sequence_implementations (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* sequence implementations */\n");
-+    g_print ("\n\n/* sequence implementations */\n");
-     for (vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-       {
-         if (parser.fromInclude (si->name))
-@@ -785,75 +785,75 @@
-         nspace.setFromSymbol(si->name);
-         const char *nname = nspace.printable_form (si->name);
-         
--        printf ("%s\n", TypeRet (si->name));
--        printf ("%s::from_seq (SfiSeq *sfi_seq)\n", nname);
--        printf ("{\n");
--        printf ("  %s cseq;\n", TypeRet (si->name));
--        printf ("  guint i, length;\n");
--        printf ("\n");
--        printf ("  if (!sfi_seq)\n");
--        printf ("    return cseq;\n");
--        printf ("\n");
--        printf ("  length = sfi_seq_length (sfi_seq);\n");
--        printf ("  cseq.resize (length);\n");
--        printf ("  for (i = 0; i < length; i++)\n");
--        printf ("    {\n");
--        printf ("      GValue *element = sfi_seq_get (sfi_seq, i);\n");
--        printf ("      cseq[i] = %s (element);\n", func_value_get_param (si->content.type));
--        printf ("    }\n");
--        printf ("  return cseq;\n");
--        printf ("}\n\n");
--        
--        printf ("SfiSeq *\n");
--        printf ("%s::to_seq (%s cseq)\n", nname, TypeArg (si->name));
--        printf ("{\n");
--        printf ("  SfiSeq *sfi_seq = sfi_seq_new ();\n");
--        printf ("  for (guint i = 0; i < cseq.length(); i++)\n");
--        printf ("    {\n");
--        printf ("      GValue *element = sfi_seq_append_empty (sfi_seq, %s);\n", make_SFI_TYPE_NAME (si->content.type));
--        printf ("      %s (element, cseq[i]);\n", func_value_set_param (si->content.type));
--        printf ("    }\n");
--        printf ("  return sfi_seq;\n");
--        printf ("}\n\n");
--        
--        printf ("%s\n", TypeRet (si->name));
--        printf ("%s::value_get_boxed (const GValue *value)\n", nname);
--        printf ("{\n");
--        printf ("  return ::Sfi::cxx_value_get_boxed_sequence< %s> (value);\n", nname);
--        printf ("}\n\n");
--        printf ("void\n");
--        printf ("%s::value_set_boxed (GValue *value, %s self)\n", nname, TypeArg (si->name));
--        printf ("{\n");
--        printf ("  ::Sfi::cxx_value_set_boxed_sequence< %s> (value, self);\n", nname);
--        printf ("}\n\n");
--        
--        printf ("GParamSpec*\n");
--        printf ("%s::get_element()\n", nname);
--        printf ("{\n");
--        printf ("  static GParamSpec *element = NULL;\n");
--        printf ("  if (!element)\n");
--        // printf ("#line %u \"%s\"\n", si->content.line, parser.fileName().c_str());
--        printf ("    element = %s;\n", untyped_pspec_constructor (si->content).c_str());
--        printf ("  return element;\n");
--        printf ("}\n\n");
-+        g_print ("%s\n", TypeRet (si->name));
-+        g_print ("%s::from_seq (SfiSeq *sfi_seq)\n", nname);
-+        g_print ("{\n");
-+        g_print ("  %s cseq;\n", TypeRet (si->name));
-+        g_print ("  guint i, length;\n");
-+        g_print ("\n");
-+        g_print ("  if (!sfi_seq)\n");
-+        g_print ("    return cseq;\n");
-+        g_print ("\n");
-+        g_print ("  length = sfi_seq_length (sfi_seq);\n");
-+        g_print ("  cseq.resize (length);\n");
-+        g_print ("  for (i = 0; i < length; i++)\n");
-+        g_print ("    {\n");
-+        g_print ("      GValue *element = sfi_seq_get (sfi_seq, i);\n");
-+        g_print ("      cseq[i] = %s (element);\n", func_value_get_param (si->content.type));
-+        g_print ("    }\n");
-+        g_print ("  return cseq;\n");
-+        g_print ("}\n\n");
-+        
-+        g_print ("SfiSeq *\n");
-+        g_print ("%s::to_seq (%s cseq)\n", nname, TypeArg (si->name));
-+        g_print ("{\n");
-+        g_print ("  SfiSeq *sfi_seq = sfi_seq_new ();\n");
-+        g_print ("  for (guint i = 0; i < cseq.length(); i++)\n");
-+        g_print ("    {\n");
-+        g_print ("      GValue *element = sfi_seq_append_empty (sfi_seq, %s);\n", make_SFI_TYPE_NAME (si->content.type));
-+        g_print ("      %s (element, cseq[i]);\n", func_value_set_param (si->content.type));
-+        g_print ("    }\n");
-+        g_print ("  return sfi_seq;\n");
-+        g_print ("}\n\n");
-+        
-+        g_print ("%s\n", TypeRet (si->name));
-+        g_print ("%s::value_get_boxed (const GValue *value)\n", nname);
-+        g_print ("{\n");
-+        g_print ("  return ::Sfi::cxx_value_get_boxed_sequence< %s> (value);\n", nname);
-+        g_print ("}\n\n");
-+        g_print ("void\n");
-+        g_print ("%s::value_set_boxed (GValue *value, %s self)\n", nname, TypeArg (si->name));
-+        g_print ("{\n");
-+        g_print ("  ::Sfi::cxx_value_set_boxed_sequence< %s> (value, self);\n", nname);
-+        g_print ("}\n\n");
-+        
-+        g_print ("GParamSpec*\n");
-+        g_print ("%s::get_element()\n", nname);
-+        g_print ("{\n");
-+        g_print ("  static GParamSpec *element = NULL;\n");
-+        g_print ("  if (!element)\n");
-+        // g_print ("#line %u \"%s\"\n", si->content.line, parser.fileName().c_str());
-+        g_print ("    element = %s;\n", untyped_pspec_constructor (si->content).c_str());
-+        g_print ("  return element;\n");
-+        g_print ("}\n\n");
-       }
-   }
-   void
-   generate_class_prototypes (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* class prototypes */\n");
-+    g_print ("\n\n/* class prototypes */\n");
-     for (vector<Class>::const_iterator ci = parser.getClasses().begin(); ci != parser.getClasses().end(); ci++)
-       {
-         if (parser.fromInclude (ci->name))
-           continue;
-         nspace.setFromSymbol(ci->name);
--        printf ("class %sBase;\n", pure_TypeName (ci->name));
--        printf ("class %s;\n", pure_TypeName (ci->name));
--        printf ("#define %s\t\tBSE_CXX_DECLARED_CLASS_TYPE (%s, %s)\n",
-+        g_print ("class %sBase;\n", pure_TypeName (ci->name));
-+        g_print ("class %s;\n", pure_TypeName (ci->name));
-+        g_print ("#define %s\t\tBSE_CXX_DECLARED_CLASS_TYPE (%s, %s)\n",
-                 make_TYPE_NAME (ci->name),
-                 nspace.namespaceOf (ci->name).c_str(),
-                 pure_TypeName (ci->name));
--        printf ("#define %s(o) (::Bse::CxxBase::instance_is_a (o, %s))\n",
-+        g_print ("#define %s(o) (::Bse::CxxBase::instance_is_a (o, %s))\n",
-                 make_IS_NAME (ci->name), make_TYPE_NAME (ci->name));
-         push_type ("EFFECT", pure_TypeName (ci->name));
-       }
-@@ -870,7 +870,7 @@
-   void
-   generate_class_definitions (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* class definitions */\n");
-+    g_print ("\n\n/* class definitions */\n");
-     for (vector<Class>::const_iterator ci = parser.getClasses().begin(); ci != parser.getClasses().end(); ci++)
-       {
-         if (parser.fromInclude (ci->name))
-@@ -884,8 +884,8 @@
-         vector<String> destroy_jobs;
-         
-         /* skeleton class declaration + type macro */
--        printf ("BSE_CXX_DECLARE_CLASS (%s);\n", pure_TypeName (ci->name));
--        printf ("class %s : public %s {\n", ctNameBase, make_fqtn (ci->inherits));
-+        g_print ("BSE_CXX_DECLARE_CLASS (%s);\n", pure_TypeName (ci->name));
-+        g_print ("class %s : public %s {\n", ctNameBase, make_fqtn (ci->inherits));
-         
-         /* class Info strings */
-         /* pixstream(), this is a bit of a hack, we make it a template rather than
-@@ -895,236 +895,236 @@
-         String pstream = "NULL";
-         if (icon != "")
-           {
--            printf ("  template<bool> static inline const unsigned char* inlined_pixstream();\n");
-+            g_print ("  template<bool> static inline const unsigned char* inlined_pixstream();\n");
-             images.push_back (Image (include_relative (icon, ci->file),
-                                      String ("template<bool> const unsigned char*\n") +
-                                      make_fqtn (ci->name) + "Base" +
-                                      "::inlined_pixstream()"));
-             pstream = "inlined_pixstream<true>()";
-           }
--        printf ("public:\n");
--        printf ("  static inline const unsigned char* pixstream () { return %s; }\n", pstream.c_str());
--        printf ("  static void               class_init (::Bse::CxxBaseClass *klass);\n");
--        printf ("  static inline const char* options   () { return %s; }\n", ci->infos.get("options").escaped().c_str());
--        printf ("  static inline const char* category  () { static const char *c = NULL;\n");
--        printf ("    return c ? c : c = sfi_category_concat (\"/Modules\", %s); }\n",
-+        g_print ("public:\n");
-+        g_print ("  static inline const unsigned char* pixstream () { return %s; }\n", pstream.c_str());
-+        g_print ("  static void               class_init (::Bse::CxxBaseClass *klass);\n");
-+        g_print ("  static inline const char* options   () { return %s; }\n", ci->infos.get("options").escaped().c_str());
-+        g_print ("  static inline const char* category  () { static const char *c = NULL;\n");
-+        g_print ("    return c ? c : c = sfi_category_concat (\"/Modules\", %s); }\n",
-                 ci->infos.get("category").escaped(" ").c_str()); // untranslated
--        printf ("  static inline const char* i18n_category  () { static const char *c = NULL;\n");
--        printf ("    return c ? c : c = sfi_category_concat (\"/Modules\", %s); }\n",
-+        g_print ("  static inline const char* i18n_category  () { static const char *c = NULL;\n");
-+        g_print ("    return c ? c : c = sfi_category_concat (\"/Modules\", %s); }\n",
-                 ci->infos.get("category").escaped().c_str());    // translated
--        printf ("  static inline const char* blurb     () { return %s; }\n", ci->infos.get("blurb").escaped().c_str());
--        printf ("  static inline const char* authors   () { return %s; }\n", ci->infos.get("authors").escaped().c_str());
--        printf ("  static inline const char* license   () { return %s; }\n", ci->infos.get("license").escaped().c_str());
--        printf ("  static inline const char* type_name () { return \"%s\"; }\n", make_PrefixedTypeName (ci->name));
-+        g_print ("  static inline const char* blurb     () { return %s; }\n", ci->infos.get("blurb").escaped().c_str());
-+        g_print ("  static inline const char* authors   () { return %s; }\n", ci->infos.get("authors").escaped().c_str());
-+        g_print ("  static inline const char* license   () { return %s; }\n", ci->infos.get("license").escaped().c_str());
-+        g_print ("  static inline const char* type_name () { return \"%s\"; }\n", make_PrefixedTypeName (ci->name));
-         
-         /* i/j/o channel names */
-         if (ci->istreams.size())
-           {
--            printf ("public:\n");
--            printf ("  enum {\n");
-+            g_print ("public:\n");
-+            g_print ("  enum {\n");
-             for (vector<Stream>::const_iterator si = ci->istreams.begin(); si != ci->istreams.end(); si++)
--              printf ("    ICHANNEL_%s,\n", pure_UPPER (si->ident));
--            printf ("    N_ICHANNELS\n  };\n");
-+              g_print ("    ICHANNEL_%s,\n", pure_UPPER (si->ident));
-+            g_print ("    N_ICHANNELS\n  };\n");
-           }
-         if (ci->jstreams.size())
-           {
--            printf ("public:\n");
--            printf ("  enum {\n");
-+            g_print ("public:\n");
-+            g_print ("  enum {\n");
-             for (vector<Stream>::const_iterator si = ci->jstreams.begin(); si != ci->jstreams.end(); si++)
--              printf ("    JCHANNEL_%s,\n", pure_UPPER (si->ident));
--            printf ("    N_JCHANNELS\n  };\n");
-+              g_print ("    JCHANNEL_%s,\n", pure_UPPER (si->ident));
-+            g_print ("    N_JCHANNELS\n  };\n");
-           }
-         if (ci->ostreams.size())
-           {
--            printf ("public:\n");
--            printf ("  enum {\n");
-+            g_print ("public:\n");
-+            g_print ("  enum {\n");
-             for (vector<Stream>::const_iterator si = ci->ostreams.begin(); si != ci->ostreams.end(); si++)
--              printf ("    OCHANNEL_%s,\n", pure_UPPER (si->ident));
--            printf ("    N_OCHANNELS\n  };\n");
-+              g_print ("    OCHANNEL_%s,\n", pure_UPPER (si->ident));
-+            g_print ("    N_OCHANNELS\n  };\n");
-           }
-         
-         /* property IDs */
--        printf ("protected:\n  enum %s {\n", ctPropertyID);
-+        g_print ("protected:\n  enum %s {\n", ctPropertyID);
-         if (ci->properties.begin() != ci->properties.end())
-           {
-             vector<Param>::const_iterator pi = ci->properties.begin();
--            printf ("    PROP_%s = 1,\n", pure_UPPER (pi->name));
-+            g_print ("    PROP_%s = 1,\n", pure_UPPER (pi->name));
-             for (pi++; pi != ci->properties.end(); pi++)
--              printf ("    PROP_%s,\n", pure_UPPER (pi->name));
-+              g_print ("    PROP_%s,\n", pure_UPPER (pi->name));
-           }
--        printf ("  };\n");
-+        g_print ("  };\n");
-         
-         /* "Properties" structure for synthesis modules */
-         if (ci->istreams.size() + ci->jstreams.size() + ci->ostreams.size())
-           {
--            printf ("public:\n");
--            printf ("  /* \"transport\" structure to configure synthesis modules from properties */\n");
--            printf ("  struct %s {\n", ctProperties);
--            printf ("    typedef %s IDType;\n", ctPropertyID);
-+            g_print ("public:\n");
-+            g_print ("  /* \"transport\" structure to configure synthesis modules from properties */\n");
-+            g_print ("  struct %s {\n", ctProperties);
-+            g_print ("    typedef %s IDType;\n", ctPropertyID);
-             for (vector<Param>::const_iterator pi = ci->properties.begin(); pi != ci->properties.end(); pi++)
--              printf ("    %s %s;\n", TypeField (pi->type), pi->name.c_str());
--            printf ("    explicit %s (%s *p) ", ctProperties, ctNameBase);
-+              g_print ("    %s %s;\n", TypeField (pi->type), pi->name.c_str());
-+            g_print ("    explicit %s (%s *p) ", ctProperties, ctNameBase);
-             for (vector<Param>::const_iterator pi = ci->properties.begin(); pi != ci->properties.end(); pi++)
--              printf ("%c\n      %s (p->%s)", pi == ci->properties.begin() ? ':' : ',', pi->name.c_str(), pi->name.c_str());
--            printf ("\n    {\n");
--            printf ("    }\n");
--            printf ("  };\n");
-+              g_print ("%c\n      %s (p->%s)", pi == ci->properties.begin() ? ':' : ',', pi->name.c_str(), pi->name.c_str());
-+            g_print ("\n    {\n");
-+            g_print ("    }\n");
-+            g_print ("  };\n");
-           }
-         
-         /* auto-update type */
--        printf ("protected:\n");
--        printf ("  typedef %s AutoUpdateCategory;\n", class_has_automation_properties (*ci) ? "::Bse::SynthesisModule::NeedAutoUpdateTag" : "void");
-+        g_print ("protected:\n");
-+        g_print ("  typedef %s AutoUpdateCategory;\n", class_has_automation_properties (*ci) ? "::Bse::SynthesisModule::NeedAutoUpdateTag" : "void");
-         /* property fields */
--        printf ("protected:\n");
-+        g_print ("protected:\n");
-         for (vector<Param>::const_iterator pi = ci->properties.begin(); pi != ci->properties.end(); pi++)
-           {
--            printf ("  %s %s;\n", TypeField (pi->type), pi->name.c_str());
-+            g_print ("  %s %s;\n", TypeField (pi->type), pi->name.c_str());
-             if (g_option_check (pi->literal_options.c_str(), "automate"))
--              printf ("  guint64 last__%s;\n", pi->name.c_str());
-+              g_print ("  guint64 last__%s;\n", pi->name.c_str());
-           }
-         
-         /* get_property() */
--        printf ("public:\n");
--        printf ("  void get_property (%s prop_id, ::Bse::Value &value, GParamSpec *pspec)\n", ctPropertyID);
--        printf ("  {\n");
--        printf ("    switch (prop_id) {\n");
-+        g_print ("public:\n");
-+        g_print ("  void get_property (%s prop_id, ::Bse::Value &value, GParamSpec *pspec)\n", ctPropertyID);
-+        g_print ("  {\n");
-+        g_print ("    switch (prop_id) {\n");
-         for (vector<Param>::const_iterator pi = ci->properties.begin(); pi != ci->properties.end(); pi++)
-           {
--            printf ("    case PROP_%s:\n", pure_UPPER (pi->name));
--            printf ("      %s (&value, %s);\n", func_value_set_param (pi->type), pi->name.c_str());
--            printf ("    break;\n");
-+            g_print ("    case PROP_%s:\n", pure_UPPER (pi->name));
-+            g_print ("      %s (&value, %s);\n", func_value_set_param (pi->type), pi->name.c_str());
-+            g_print ("    break;\n");
-           }
--        printf ("    };\n");
--        printf ("  }\n");
-+        g_print ("    };\n");
-+        g_print ("  }\n");
-         
-         /* set_property() */
--        printf ("  void set_property (%s prop_id, const ::Bse::Value &value, GParamSpec *pspec)\n", ctPropertyID);
--        printf ("  {\n");
--        printf ("    switch (prop_id) {\n");
-+        g_print ("  void set_property (%s prop_id, const ::Bse::Value &value, GParamSpec *pspec)\n", ctPropertyID);
-+        g_print ("  {\n");
-+        g_print ("    switch (prop_id) {\n");
-         for (vector<Param>::const_iterator pi = ci->properties.begin(); pi != ci->properties.end(); pi++)
-           {
--            printf ("    case PROP_%s:\n", pure_UPPER (pi->name));
--            printf ("      %s = %s (&value);\n", pi->name.c_str(), func_value_get_param (pi->type));
--            printf ("    break;\n");
--          }
--        printf ("    };\n");
--        printf ("    property_changed (%s (prop_id));\n", ctPropertyID);
--        printf ("    update_modules();\n");
-+            g_print ("    case PROP_%s:\n", pure_UPPER (pi->name));
-+            g_print ("      %s = %s (&value);\n", pi->name.c_str(), func_value_get_param (pi->type));
-+            g_print ("    break;\n");
-+          }
-+        g_print ("    };\n");
-+        g_print ("    property_changed (%s (prop_id));\n", ctPropertyID);
-+        g_print ("    update_modules();\n");
-         /* reset triggers */
--        printf ("    switch (prop_id) {\n");
-+        g_print ("    switch (prop_id) {\n");
-         for (vector<Param>::const_iterator pi = ci->properties.begin(); pi != ci->properties.end(); pi++)
-           {
-             if (pi->pspec != "Trigger")
-               continue;
--            printf ("    case PROP_%s:\n", pure_UPPER (pi->name));
--            printf ("      %s = FALSE;\n", pi->name.c_str());
--            printf ("    break;\n");
--          }
--        printf ("    default: ;\n");
--        printf ("    };\n");
--        printf ("  }\n");
-+            g_print ("    case PROP_%s:\n", pure_UPPER (pi->name));
-+            g_print ("      %s = FALSE;\n", pi->name.c_str());
-+            g_print ("    break;\n");
-+          }
-+        g_print ("    default: ;\n");
-+        g_print ("    };\n");
-+        g_print ("  }\n");
-         /* editable_property() */
--        printf ("  virtual bool editable_property (%s prop_id, GParamSpec *pspec)\n", ctPropertyID);
--        printf ("  {\n");
--        printf ("    return true;\n");
--        printf ("  }\n");
-+        g_print ("  virtual bool editable_property (%s prop_id, GParamSpec *pspec)\n", ctPropertyID);
-+        g_print ("  {\n");
-+        g_print ("    return true;\n");
-+        g_print ("  }\n");
-         /* get_candidates() */
--        printf ("  virtual void get_candidates (%s prop_id, ::Bse::PropertyCandidatesHandle &pch, GParamSpec *pspec)\n", ctPropertyID);
--        printf ("  {\n");
--        printf ("  }\n");
-+        g_print ("  virtual void get_candidates (%s prop_id, ::Bse::PropertyCandidatesHandle &pch, GParamSpec *pspec)\n", ctPropertyID);
-+        g_print ("  {\n");
-+        g_print ("  }\n");
-         /* property_updated() */
--        printf ("  void property_updated (%s prop_id, guint64 tick_stamp, double prop_value, GParamSpec *pspec)\n", ctPropertyID);
--        printf ("  {\n");
--        printf ("    bool seen_change = false;\n");
--        printf ("    switch (prop_id) {\n");
-+        g_print ("  void property_updated (%s prop_id, guint64 tick_stamp, double prop_value, GParamSpec *pspec)\n", ctPropertyID);
-+        g_print ("  {\n");
-+        g_print ("    bool seen_change = false;\n");
-+        g_print ("    switch (prop_id) {\n");
-         for (vector<Param>::const_iterator pi = ci->properties.begin(); pi != ci->properties.end(); pi++)
-           {
-             if (!g_option_check (pi->literal_options.c_str(), "automate"))
-               continue;
--            printf ("    case PROP_%s:\n", pure_UPPER (pi->name));
--            printf ("      if (tick_stamp >= ::std::max (last__%s, module_update_tick_stamp()))\n", pi->name.c_str());
--            printf ("        {\n");
--            printf ("          seen_change = true;\n");
--            printf ("          %s = prop_value;\n", pi->name.c_str());
--            printf ("        }\n");
--            printf ("      last__%s = tick_stamp;\n", pi->name.c_str());
--            printf ("    break;\n");
--          }
--        printf ("    default: ;\n");
--        printf ("    };\n");
--        printf ("    if (seen_change &&\n");
--        printf ("        property_changed (%s (prop_id)))\n", ctPropertyID);
--        printf ("      update_modules();\n");
--        printf ("  }\n");
-+            g_print ("    case PROP_%s:\n", pure_UPPER (pi->name));
-+            g_print ("      if (tick_stamp >= ::std::max (last__%s, module_update_tick_stamp()))\n", pi->name.c_str());
-+            g_print ("        {\n");
-+            g_print ("          seen_change = true;\n");
-+            g_print ("          %s = prop_value;\n", pi->name.c_str());
-+            g_print ("        }\n");
-+            g_print ("      last__%s = tick_stamp;\n", pi->name.c_str());
-+            g_print ("    break;\n");
-+          }
-+        g_print ("    default: ;\n");
-+        g_print ("    };\n");
-+        g_print ("    if (seen_change &&\n");
-+        g_print ("        property_changed (%s (prop_id)))\n", ctPropertyID);
-+        g_print ("      update_modules();\n");
-+        g_print ("  }\n");
-         /* static data */
--        printf ("private:\n");
--        printf ("  static struct StaticData {\n");
--        printf ("    int dummy;\n");
-+        g_print ("private:\n");
-+        g_print ("  static struct StaticData {\n");
-+        g_print ("    int dummy;\n");
-         for (vector<Method>::const_iterator si = ci->signals.begin(); si != ci->signals.end(); si++)
-           {
-             const gchar *sig_name = canonify_name (si->name, '_');
--            printf ("    guint signal_%s;\n", sig_name);
-+            g_print ("    guint signal_%s;\n", sig_name);
-           }
--        printf ("  } static_data;\n");
-+        g_print ("  } static_data;\n");
-         
-         /* property-changed hooking */
--        printf ("protected:\n");
--        printf ("  virtual bool property_changed (%s) { return false; }\n", ctPropertyID);
-+        g_print ("protected:\n");
-+        g_print ("  virtual bool property_changed (%s) { return false; }\n", ctPropertyID);
-         
-         /* methods */
-         for (vector<Method>::const_iterator mi = ci->methods.begin(); mi != ci->methods.end(); mi++)
-           procs.push_back (&(*mi));
-         
-         /* destructor */
--        printf ("  virtual ~%s ()\n", ctNameBase);
--        printf ("  {\n");
-+        g_print ("  virtual ~%s ()\n", ctNameBase);
-+        g_print ("  {\n");
-         /* property deletion */
-         for (vector<String>::const_iterator vi = destroy_jobs.begin(); vi != destroy_jobs.end(); vi++)
--          printf ("    %s;\n", vi->c_str());
--        printf ("  }\n");
-+          g_print ("    %s;\n", vi->c_str());
-+        g_print ("  }\n");
-         
-         /* signal emission methods */
--        printf ("public:\n");
-+        g_print ("public:\n");
-         for (vector<Method>::const_iterator si = ci->signals.begin(); si != ci->signals.end(); si++)
-           {
-             const gchar *sig_name = canonify_name (si->name, '_');
--            printf ("  void emit_%s (", sig_name);
-+            g_print ("  void emit_%s (", sig_name);
-             for (vector<Param>::const_iterator ai = si->params.begin(); ai != si->params.end(); ai++)
-               {
-                 if (ai != si->params.begin())
--                  printf (", ");
--                printf ("%s %s", TypeArg (ai->type), ai->name.c_str());
-+                  g_print (", ");
-+                g_print ("%s %s", TypeArg (ai->type), ai->name.c_str());
-               }
--            printf (")\n");
--            printf ("  {\n");
--            printf ("    GValue args[1 + %zu];\n", si->params.size());
--            printf ("    args[0].g_type = 0, g_value_init (args + 0, %s);\n", make_TYPE_NAME (ci->name));
--            printf ("    g_value_set_object (args + 0, gobject());\n");
-+            g_print (")\n");
-+            g_print ("  {\n");
-+            g_print ("    GValue args[1 + %zu];\n", si->params.size());
-+            g_print ("    args[0].g_type = 0, g_value_init (args + 0, %s);\n", make_TYPE_NAME (ci->name));
-+            g_print ("    g_value_set_object (args + 0, gobject());\n");
-             guint i = 1;
-             for (vector<Param>::const_iterator ai = si->params.begin(); ai != si->params.end(); ai++, i++)
-               {
--                printf ("    args[%u].g_type = 0, g_value_init (args + %u, %s);\n", i, i, make_TYPE_NAME (ai->type));
--                printf ("    %s (args + %u, %s);\n", func_value_set_param (ai->type), i, ai->name.c_str());
-+                g_print ("    args[%u].g_type = 0, g_value_init (args + %u, %s);\n", i, i, make_TYPE_NAME (ai->type));
-+                g_print ("    %s (args + %u, %s);\n", func_value_set_param (ai->type), i, ai->name.c_str());
-               }
--            printf ("    g_signal_emitv (args, static_data.signal_%s, 0, NULL);\n", sig_name);
-+            g_print ("    g_signal_emitv (args, static_data.signal_%s, 0, NULL);\n", sig_name);
-             for (i = 0; i <= si->params.size(); i++)
--              printf ("    g_value_unset (args + %u);\n", i);
--            printf ("  }\n");
-+              g_print ("    g_value_unset (args + %u);\n", i);
-+            g_print ("  }\n");
-           }
-         
-         /* done */
--        printf ("};\n"); /* finish: class ... { }; */
-+        g_print ("};\n"); /* finish: class ... { }; */
-       }
-   }
-   void
-   generate_class_implementations (NamespaceHelper& nspace)
-   {
--    printf ("\n\n/* class implementations */\n");
-+    g_print ("\n\n/* class implementations */\n");
-     for (vector<Class>::const_iterator ci = parser.getClasses().begin(); ci != parser.getClasses().end(); ci++)
-       {
-         if (parser.fromInclude (ci->name))
-@@ -1137,45 +1137,45 @@
-         vector<String> destroy_jobs;
-         
-         /* class_init */
--        printf ("void\n");
--        printf ("%sBase::class_init (::Bse::CxxBaseClass *klass)\n", nname);
--        printf ("{\n");
--        printf ("  klass->set_accessors (::Bse::cxx_get_property_trampoline<%s, %s>,\n", ctNameBase, ctPropertyID);
--        printf ("                        ::Bse::cxx_set_property_trampoline<%s, %s>,\n", ctNameBase, ctPropertyID);
--        printf ("                        ::Bse::cxx_editable_property_trampoline<%s, %s>,\n", ctNameBase, ctPropertyID);
--        printf ("                        ::Bse::cxx_get_candidates_trampoline<%s, %s>,\n", ctNameBase, ctPropertyID);
-+        g_print ("void\n");
-+        g_print ("%sBase::class_init (::Bse::CxxBaseClass *klass)\n", nname);
-+        g_print ("{\n");
-+        g_print ("  klass->set_accessors (::Bse::cxx_get_property_trampoline<%s, %s>,\n", ctNameBase, ctPropertyID);
-+        g_print ("                        ::Bse::cxx_set_property_trampoline<%s, %s>,\n", ctNameBase, ctPropertyID);
-+        g_print ("                        ::Bse::cxx_editable_property_trampoline<%s, %s>,\n", ctNameBase, ctPropertyID);
-+        g_print ("                        ::Bse::cxx_get_candidates_trampoline<%s, %s>,\n", ctNameBase, ctPropertyID);
-         if (class_has_automation_properties (*ci))
--          printf ("                        ::Bse::cxx_property_updated_trampoline<%s, %s>);\n", ctNameBase, ctPropertyID);
-+          g_print ("                        ::Bse::cxx_property_updated_trampoline<%s, %s>);\n", ctNameBase, ctPropertyID);
-         else
--          printf ("                        NULL);\n");
-+          g_print ("                        NULL);\n");
-         for (vector<Param>::const_iterator pi = ci->properties.begin(); pi != ci->properties.end(); pi++)
--          printf ("  klass->add_param (PROP_%s, %s);\n", pure_UPPER (pi->name), typed_pspec_constructor (*pi).c_str());
-+          g_print ("  klass->add_param (PROP_%s, %s);\n", pure_UPPER (pi->name), typed_pspec_constructor (*pi).c_str());
-         for (vector<Stream>::const_iterator si = ci->istreams.begin(); si != ci->istreams.end(); si++)
--          printf ("  klass->add_ichannel (%s, %s, %s, ICHANNEL_%s);\n",
-+          g_print ("  klass->add_ichannel (%s, %s, %s, ICHANNEL_%s);\n",
-                   intern_escape (si->ident), si->label.escaped().c_str(), si->blurb.escaped().c_str(), pure_UPPER (si->ident));
-         for (vector<Stream>::const_iterator si = ci->jstreams.begin(); si != ci->jstreams.end(); si++)
--          printf ("  klass->add_jchannel (%s, %s, %s, JCHANNEL_%s);\n",
-+          g_print ("  klass->add_jchannel (%s, %s, %s, JCHANNEL_%s);\n",
-                   intern_escape (si->ident), si->label.escaped().c_str(), si->blurb.escaped().c_str(), pure_UPPER (si->ident));
-         for (vector<Stream>::const_iterator si = ci->ostreams.begin(); si != ci->ostreams.end(); si++)
--          printf ("  klass->add_ochannel (%s, %s, %s, OCHANNEL_%s);\n",
-+          g_print ("  klass->add_ochannel (%s, %s, %s, OCHANNEL_%s);\n",
-                   intern_escape (si->ident), si->label.escaped().c_str(), si->blurb.escaped().c_str(), pure_UPPER (si->ident));
-         for (vector<Method>::const_iterator si = ci->signals.begin(); si != ci->signals.end(); si++)
-           {
-             const gchar *sig_name = canonify_name (si->name, '_');
-             const gchar *sig_string = canonify_name (si->name);
--            printf ("  static_data.signal_%s =\n      klass->add_signal (\"%s\", (GSignalFlags) 0, %zu",
-+            g_print ("  static_data.signal_%s =\n      klass->add_signal (\"%s\", (GSignalFlags) 0, %zu",
-                     sig_name, sig_string, si->params.size());
-             for (vector<Param>::const_iterator ai = si->params.begin(); ai != si->params.end(); ai++)
--              printf (",\n                       %s", make_TYPE_NAME (ai->type));
--            printf (");\n");
-+              g_print (",\n                       %s", make_TYPE_NAME (ai->type));
-+            g_print (");\n");
-           }
--        printf ("}\n");
-+        g_print ("}\n");
-       }
-   }
-   void
-   generate_procedure_prototypes (NamespaceHelper&            nspace)
-   {
--    printf ("\n\n/* procedure prototypes */\n");
-+    g_print ("\n\n/* procedure prototypes */\n");
-     for (vector<const Method*>::const_iterator ppi = procs.begin(); ppi != procs.end(); ppi++)
-       {
-         const Method *mi = *ppi;
-@@ -1183,20 +1183,20 @@
-           continue;
-         nspace.setFromSymbol(mi->name);
--        printf ("namespace Procedure {\n");
--        printf ("class %s;\n", pure_lower (mi->name));
--        printf ("#define %s\t\tBSE_CXX_DECLARED_PROC_TYPE (%s, %s)\n",
-+        g_print ("namespace Procedure {\n");
-+        g_print ("class %s;\n", pure_lower (mi->name));
-+        g_print ("#define %s\t\tBSE_CXX_DECLARED_PROC_TYPE (%s, %s)\n",
-                 make_TYPE_NAME (mi->name),
-                 nspace.namespaceOf (mi->name).c_str(),
-                 pure_lower (mi->name));
--        printf ("} // Procedure\n\n");
-+        g_print ("} // Procedure\n\n");
-         push_type ("PROCEDURE", pure_lower (mi->name));
-       }
-   }
-   void
-   generate_procedure_implementations (NamespaceHelper &nspace)
-   {
--    printf ("\n\n/* procedure implementations */\n");
-+    g_print ("\n\n/* procedure implementations */\n");
-     for (vector<const Method*>::const_iterator ppi = procs.begin(); ppi != procs.end(); ppi++)
-       {
-         const Method *mi = *ppi;
-@@ -1206,9 +1206,9 @@
-         const char *name = nspace.printable_form (mi->name);
-         const Map<String, IString> &infos = mi->infos;
-         bool is_void = mi->result.type == "void";
--        printf ("namespace Procedure {\n");
--        printf ("BSE_CXX_DECLARE_PROC (%s);\n", pure_lower (mi->name));
--        printf ("class %s {\n", pure_lower (mi->name));
-+        g_print ("namespace Procedure {\n");
-+        g_print ("BSE_CXX_DECLARE_PROC (%s);\n", pure_lower (mi->name));
-+        g_print ("class %s {\n", pure_lower (mi->name));
-         
-         /* class Info strings */
-         /* pixstream(), this is a bit of a hack, we make it a template rather than
-@@ -1218,88 +1218,88 @@
-         String pstream = "NULL";
-         if (icon != "")
-           {
--            printf ("  template<bool> static inline const unsigned char* inlined_pixstream();\n");
-+            g_print ("  template<bool> static inline const unsigned char* inlined_pixstream();\n");
-             images.push_back (Image (include_relative (icon, mi->file),
-                                      String ("template<bool> const unsigned char*\n") +
-                                      make_full_lower (mi->name) +
-                                      "::inlined_pixstream()"));
-             pstream = "inlined_pixstream<true>()";
-           }
--        printf ("public:\n");
--        printf ("  static inline const unsigned char* pixstream () { return %s; }\n", pstream.c_str());
--        printf ("  static inline const char* options   () { return %s; }\n", infos.get("options").escaped().c_str());
--        printf ("  static inline const char* category  () { static const char *c = NULL;\n");
--        printf ("    return c ? c : c = sfi_category_concat (\"/Proc\", %s); }\n",
-+        g_print ("public:\n");
-+        g_print ("  static inline const unsigned char* pixstream () { return %s; }\n", pstream.c_str());
-+        g_print ("  static inline const char* options   () { return %s; }\n", infos.get("options").escaped().c_str());
-+        g_print ("  static inline const char* category  () { static const char *c = NULL;\n");
-+        g_print ("    return c ? c : c = sfi_category_concat (\"/Proc\", %s); }\n",
-                 infos.get("category").escaped(" ").c_str());    // untranslated
--        printf ("  static inline const char* i18n_category  () { static const char *c = NULL;\n");
--        printf ("    return c ? c : c = sfi_category_concat (\"/Proc\", %s); }\n",
-+        g_print ("  static inline const char* i18n_category  () { static const char *c = NULL;\n");
-+        g_print ("    return c ? c : c = sfi_category_concat (\"/Proc\", %s); }\n",
-                 infos.get("category").escaped().c_str());       // translated
--        printf ("  static inline const char* blurb     () { return %s; }\n", infos.get("blurb").escaped().c_str());
--        printf ("  static inline const char* authors   () { return %s; }\n", infos.get("authors").escaped().c_str());
--        printf ("  static inline const char* license   () { return %s; }\n", infos.get("license").escaped().c_str());
--        printf ("  static inline const char* type_name () { return \"%s\"; }\n", make_scheme_name (mi->name));
-+        g_print ("  static inline const char* blurb     () { return %s; }\n", infos.get("blurb").escaped().c_str());
-+        g_print ("  static inline const char* authors   () { return %s; }\n", infos.get("authors").escaped().c_str());
-+        g_print ("  static inline const char* license   () { return %s; }\n", infos.get("license").escaped().c_str());
-+        g_print ("  static inline const char* type_name () { return \"%s\"; }\n", make_scheme_name (mi->name));
-         
-         /* return type */
--        printf ("  static %s exec (", TypeRet (mi->result.type));
-+        g_print ("  static %s exec (", TypeRet (mi->result.type));
-         /* args */
-         for (vector<Param>::const_iterator ai = mi->params.begin(); ai != mi->params.end(); ai++)
-           {
-             if (ai != mi->params.begin())
--              printf (", ");
--            printf ("%s %s", TypeArg (ai->type), ai->name.c_str());
-+              g_print (", ");
-+            g_print ("%s %s", TypeArg (ai->type), ai->name.c_str());
-           }
--        printf (");\n");
-+        g_print (");\n");
-         
-         /* marshal */
--        printf ("  static BseErrorType marshal (BseProcedureClass *procedure,\n"
-+        g_print ("  static BseErrorType marshal (BseProcedureClass *procedure,\n"
-                 "                               const GValue      *in_values,\n"
-                 "                               GValue            *out_values)\n");
--        printf ("  {\n");
--        printf ("    try {\n");
-+        g_print ("  {\n");
-+        g_print ("    try {\n");
-         if (!is_void)
--          printf ("      %s __return_value =\n", TypeRet (mi->result.type));
--        printf ("        exec (\n");
-+          g_print ("      %s __return_value =\n", TypeRet (mi->result.type));
-+        g_print ("        exec (\n");
-         int i = 0;
-         for (vector<Param>::const_iterator pi = mi->params.begin(); pi != mi->params.end(); pi++)
--          printf ("              %s (in_values + %u)%c\n",
-+          g_print ("              %s (in_values + %u)%c\n",
-                   func_value_get_param (pi->type), i++,
-                   &(*pi) == &(mi->params.back()) ? ' ' : ',');
--        printf ("             );\n");
-+        g_print ("             );\n");
-         if (!is_void)
--          printf ("      %s (out_values, __return_value);\n", func_value_set_param (mi->result.type));
--        printf ("    } catch (std::exception &e) {\n");
--        printf ("      sfi_diag (\"%%s: %%s\", \"%s\", e.what());\n", name);
--        printf ("      return BSE_ERROR_PROC_EXECUTION;\n");
--        printf ("    } catch (...) {\n");
--        printf ("      sfi_diag (\"%%s: %%s\", \"%s\", \"uncaught exception\");\n", name);
--        printf ("      return BSE_ERROR_PROC_EXECUTION;\n");
--        printf ("    }\n");
--        printf ("    return BSE_ERROR_NONE;\n");
--        printf ("  }\n");
-+          g_print ("      %s (out_values, __return_value);\n", func_value_set_param (mi->result.type));
-+        g_print ("    } catch (std::exception &e) {\n");
-+        g_print ("      sfi_diag (\"%%s: %%s\", \"%s\", e.what());\n", name);
-+        g_print ("      return BSE_ERROR_PROC_EXECUTION;\n");
-+        g_print ("    } catch (...) {\n");
-+        g_print ("      sfi_diag (\"%%s: %%s\", \"%s\", \"uncaught exception\");\n", name);
-+        g_print ("      return BSE_ERROR_PROC_EXECUTION;\n");
-+        g_print ("    }\n");
-+        g_print ("    return BSE_ERROR_NONE;\n");
-+        g_print ("  }\n");
-         
-         /* init */
--        printf ("  static void init (BseProcedureClass *proc,\n"
-+        g_print ("  static void init (BseProcedureClass *proc,\n"
-                 "                    GParamSpec       **in_pspecs,\n"
-                 "                    GParamSpec       **out_pspecs)\n");
--        printf ("  {\n");
-+        g_print ("  {\n");
-         for (vector<Param>::const_iterator ai = mi->params.begin(); ai != mi->params.end(); ai++)
--          printf ("    *(in_pspecs++) = %s;\n", typed_pspec_constructor (*ai).c_str());
-+          g_print ("    *(in_pspecs++) = %s;\n", typed_pspec_constructor (*ai).c_str());
-         if (!is_void)
--          printf ("    *(out_pspecs++) = %s;\n", typed_pspec_constructor (mi->result).c_str());
--        printf ("  }\n");
-+          g_print ("    *(out_pspecs++) = %s;\n", typed_pspec_constructor (mi->result).c_str());
-+        g_print ("  }\n");
-         
-         /* done */
--        printf ("};\n"); /* finish: class ... { }; */
--        printf ("} // Procedure\n\n");
-+        g_print ("};\n"); /* finish: class ... { }; */
-+        g_print ("} // Procedure\n\n");
-       }
-   }
-   bool
-   run ()
-   {
--    printf ("\n/*-------- begin %s generated code --------*/\n\n\n", Options::the()->sfidlName.c_str());
-+    g_print ("\n/*-------- begin %s generated code --------*/\n\n\n", Options::the()->sfidlName.c_str());
-     
-     /* standard includes */
--    printf ("\n#include <bse/bsecxxplugin.hh>\n");
-+    g_print ("\n#include <bse/bsecxxplugin.hh>\n");
-     
-     /* reset auxillary structures */
-     images.resize (0);
-@@ -1341,25 +1341,25 @@
-     generate_procedure_implementations (nsh);   /* adds to images */
-     /* alltypes macro */
--    printf ("\n\n/* %s type registrations */\n", alltypes_macro.c_str());
-+    g_print ("\n\n/* %s type registrations */\n", alltypes_macro.c_str());
-     if (alltypes_macro != "" && alltypes.size())
-       {
--        printf ("#define BSE_CXX_REGISTER_ALL_TYPES_FROM_%s() \\\n", UPPER_CASE (alltypes_macro));
-+        g_print ("#define BSE_CXX_REGISTER_ALL_TYPES_FROM_%s() \\\n", UPPER_CASE (alltypes_macro));
-         for (vector<String>::const_iterator si = alltypes.begin(); si != alltypes.end(); si++)
--          printf ("  BSE_CXX_REGISTER_%s; \\\n", si->c_str());
--        printf ("  /* %s type registrations done */\n", alltypes_macro.c_str());
-+          g_print ("  BSE_CXX_REGISTER_%s; \\\n", si->c_str());
-+        g_print ("  /* %s type registrations done */\n", alltypes_macro.c_str());
-       }
-     /* close namespace state */
-     nsh.leaveAll();
--    // printf ("\nnamespace ... {\n"); // FIXME: do images need a namespace?
-+    // g_print ("\nnamespace ... {\n"); // FIXME: do images need a namespace?
-     /* image method implementations */
-     for (vector<Image>::const_iterator ii = images.begin(); ii != images.end(); ii++)
-       {
--        printf ("%s\n", ii->method.c_str());
--        printf ("{\n");
-+        g_print ("%s\n", ii->method.c_str());
-+        g_print ("{\n");
-         gint estatus = 0;
-         GError *error = NULL;
-         gchar *out, *err = NULL;
-@@ -1376,16 +1376,16 @@
-           }
-         g_clear_error (&error);
-         g_free (err);
--        printf ("  %s\n", out);
-+        g_print ("  %s\n", out);
-         g_free (out);
--        printf ("  return local_pixstream;\n");
--        printf ("}\n");
-+        g_print ("  return local_pixstream;\n");
-+        g_print ("}\n");
-       }
--    // printf ("\n}; // ...\n"); // FIXME: do images need a namespace?
-+    // g_print ("\n}; // ...\n"); // FIXME: do images need a namespace?
-     
-     /* done */
--    printf ("\n/*-------- end %s generated code --------*/\n\n\n", Options::the()->sfidlName.c_str());
-+    g_print ("\n/*-------- end %s generated code --------*/\n\n\n", Options::the()->sfidlName.c_str());
-     return true;
-   }
- };
---- ../../../orig/beast-20090428/sfi/sfidl-hostc.cc    2009-05-05 10:00:43.000000000 -0400
-+++ ../sfi/sfidl-hostc.cc      2009-05-06 12:27:02.000000000 -0400
-@@ -39,9 +39,9 @@
-     {
-       if (parser.fromInclude (ri->name)) continue;
--      printf("extern SfiRecFields %s_fields;\n",makeLowerName (ri->name).c_str());
-+      g_print("extern SfiRecFields %s_fields;\n",makeLowerName (ri->name).c_str());
-     }
--  printf("\n");
-+  g_print("\n");
- }
- void CodeGeneratorHostC::printInitFunction (const String& initFunction)
-@@ -55,9 +55,9 @@
-       String name = makeLowerName (ri->name);
--      printf("static GParamSpec *%s_field[%zd];\n", name.c_str(), ri->contents.size());
--      printf("SfiRecFields %s_fields = { %zd, %s_field };\n", name.c_str(), ri->contents.size(), name.c_str());
--      printf("\n");
-+      g_print("static GParamSpec *%s_field[%zd];\n", name.c_str(), ri->contents.size());
-+      g_print("SfiRecFields %s_fields = { %zd, %s_field };\n", name.c_str(), ri->contents.size(), name.c_str());
-+      g_print("\n");
-     }
-   for(vector<Sequence>::const_iterator si = parser.getSequences().begin(); si != parser.getSequences().end(); si++)
-     {
-@@ -65,16 +65,16 @@
-       String name = makeLowerName (si->name);
--      printf("static GParamSpec *%s_content;\n", name.c_str());
--      printf("\n");
-+      g_print("static GParamSpec *%s_content;\n", name.c_str());
-+      g_print("\n");
-     }
-   /*
-    * the init function itself
-    */
-   bool first = true;
--  printf("static void\n%s (void)\n", initFunction.c_str());
--  printf("{\n");
-+  g_print("static void\n%s (void)\n", initFunction.c_str());
-+  g_print("{\n");
-   /*
-    * It is important to follow the declaration order of the idl file here, as for
-@@ -90,7 +90,7 @@
-       if (parser.isRecord (*ti) || parser.isSequence (*ti))
-       {
--        if(!first) printf("\n");
-+        if(!first) g_print("\n");
-         first = false;
-       }
-       if (parser.isRecord (*ti))
-@@ -102,8 +102,8 @@
-         for (vector<Param>::const_iterator pi = rdef.contents.begin(); pi != rdef.contents.end(); pi++, f++)
-           {
--            printf("#line %u \"%s\"\n", pi->line, parser.fileName().c_str());
--            printf("  %s_field[%d] = %s;\n", name.c_str(), f, makeParamSpec (*pi).c_str());
-+            g_print("#line %u \"%s\"\n", pi->line, parser.fileName().c_str());
-+            g_print("  %s_field[%d] = %s;\n", name.c_str(), f, makeParamSpec (*pi).c_str());
-           }
-       }
-       if (parser.isSequence (*ti))
-@@ -112,11 +112,11 @@
-         String name = makeLowerName (sdef.name);
--        printf("#line %u \"%s\"\n", sdef.content.line, parser.fileName().c_str());
--        printf("  %s_content = %s;\n", name.c_str(), makeParamSpec (sdef.content).c_str());
-+        g_print("#line %u \"%s\"\n", sdef.content.line, parser.fileName().c_str());
-+        g_print("  %s_content = %s;\n", name.c_str(), makeParamSpec (sdef.content).c_str());
-       }
-     }
--  printf("}\n");
-+  g_print("}\n");
- }
- void CodeGeneratorHostC::printChoiceMethodPrototypes (PrefixSymbolMode mode)
-@@ -128,7 +128,7 @@
-       if (mode == generatePrefixSymbols)
-       prefix_symbols.push_back (makeLowerName (ei->name) + "_get_values");
-       else
--      printf("SfiChoiceValues %s_get_values (void);\n", makeLowerName (ei->name).c_str());
-+      g_print("SfiChoiceValues %s_get_values (void);\n", makeLowerName (ei->name).c_str());
-     }
- }
-@@ -142,26 +142,26 @@
-       String name = makeLowerName (ei->name);
--      printf ("SfiChoiceValues\n");
--      printf ("%s_get_values (void)\n", makeLowerName (ei->name).c_str());
--      printf ("{\n");
--      printf ("  static SfiChoiceValue values[%zu];\n", ei->contents.size());
--      printf ("  static const SfiChoiceValues choice_values = {\n");
--      printf ("    G_N_ELEMENTS (values), values,\n");
--      printf ("  };\n");
--      printf ("  if (!values[0].choice_ident)\n");
--      printf ("    {\n");
-+      g_print ("SfiChoiceValues\n");
-+      g_print ("%s_get_values (void)\n", makeLowerName (ei->name).c_str());
-+      g_print ("{\n");
-+      g_print ("  static SfiChoiceValue values[%zu];\n", ei->contents.size());
-+      g_print ("  static const SfiChoiceValues choice_values = {\n");
-+      g_print ("    G_N_ELEMENTS (values), values,\n");
-+      g_print ("  };\n");
-+      g_print ("  if (!values[0].choice_ident)\n");
-+      g_print ("    {\n");
-       int i = 0;
-       for (vector<ChoiceValue>::const_iterator vi = ei->contents.begin(); vi != ei->contents.end(); i++, vi++)
-       {
--        printf ("      values[%u].choice_ident = \"%s\";\n", i, makeUpperName (vi->name).c_str());
--        printf ("      values[%u].choice_label = %s;\n", i, vi->label.escaped().c_str());
--        printf ("      values[%u].choice_blurb = %s;\n", i, vi->blurb.escaped().c_str());
--      }
--      printf ("  }\n");
--      printf ("  return choice_values;\n");
--      printf ("}\n");
--      printf("\n");
-+        g_print ("      values[%u].choice_ident = \"%s\";\n", i, makeUpperName (vi->name).c_str());
-+        g_print ("      values[%u].choice_label = %s;\n", i, vi->label.escaped().c_str());
-+        g_print ("      values[%u].choice_blurb = %s;\n", i, vi->blurb.escaped().c_str());
-+      }
-+      g_print ("  }\n");
-+      g_print ("  return choice_values;\n");
-+      g_print ("}\n");
-+      g_print("\n");
-       enumCount++;
-     }
-@@ -169,7 +169,7 @@
- bool CodeGeneratorHostC::run ()
- {
--  printf("\n/*-------- begin %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-+  g_print("\n/*-------- begin %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-   if (generateHeader)
-     {
-@@ -185,8 +185,8 @@
-       if (prefix != "")
-       {
-         for (vector<String>::const_iterator pi = prefix_symbols.begin(); pi != prefix_symbols.end(); pi++)
--          printf("#define %s %s_%s\n", pi->c_str(), prefix.c_str(), pi->c_str());
--        printf("\n");
-+          g_print("#define %s %s_%s\n", pi->c_str(), prefix.c_str(), pi->c_str());
-+        g_print("\n");
-       }
-       /* generate the header */
-@@ -208,7 +208,7 @@
-   if (generateSource)
-     {
--      printf("#include <string.h>\n");
-+      g_print("#include <string.h>\n");
-       printClientRecordMethodImpl();
-       printClientSequenceMethodImpl();
-@@ -219,7 +219,7 @@
-       printInitFunction (generateInitFunction);
-     }
--  printf("\n/*-------- end %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-+  g_print("\n/*-------- end %s generated code --------*/\n\n\n", options.sfidlName.c_str());
-   return true;
- }
-@@ -255,8 +255,8 @@
- CodeGeneratorHostC::help()
- {
-   CodeGeneratorCBase::help();
--  fprintf (stderr, " --prefix <prefix>           set the prefix for C functions\n");
--  fprintf (stderr, " --init <name>               set the name of the init function\n");
-+  g_printerr (" --prefix <prefix>           set the prefix for C functions\n");
-+  g_printerr (" --init <name>               set the name of the init function\n");
- }
- namespace {
---- ../../../orig/beast-20090428/sfi/sfidl-options.cc  2009-05-05 10:00:43.000000000 -0400
-+++ ../sfi/sfidl-options.cc    2009-05-05 11:08:03.000000000 -0400
-@@ -206,18 +206,18 @@
-       for (std::vector<String>::const_iterator ii = includePath.begin(); ii != includePath.end(); ii++)
-       {
-         if (!first)
--          printf (":");
-+          g_print (":");
-         else
-           first = false;
--        printf ("%s", ii->c_str());
-+        g_print ("%s", ii->c_str());
-       }
--      printf ("\n");
-+      g_print ("\n");
-       return true;
-     }
-   if (printVersion)
-     {
--      printf ("%s %s\n", SFIDL_PRG_NAME, SFIDL_VERSION);
-+      g_print ("%s %s\n", SFIDL_PRG_NAME, SFIDL_VERSION);
-       return true;
-     }
-@@ -228,27 +228,27 @@
- {
-   list<Factory *> factories = Factory::listFactories();
--  fprintf (stderr, "usage: %s <binding> [ <options> ] <idlfile>\n", sfidlName.c_str());
--  fprintf (stderr, "\n");
--  fprintf (stderr, "general options:\n");
--  fprintf (stderr, " -I <directory>              add this directory to the include path\n");
--  fprintf (stderr, " --print-include-path        print include path\n");
--  fprintf (stderr, " --nostdinc                  don't use standard include path\n");
--  fprintf (stderr, "\n");
--  fprintf (stderr, " --help                      help for %s\n", sfidlName.c_str());
--  fprintf (stderr, " --help <binding>            help for a specific binding\n");
--  fprintf (stderr, " --version                   print version\n");
--  fprintf (stderr, "\n");
-+  g_printerr ("usage: %s <binding> [ <options> ] <idlfile>\n", sfidlName.c_str());
-+  g_printerr ("\n");
-+  g_printerr ("general options:\n");
-+  g_printerr (" -I <directory>              add this directory to the include path\n");
-+  g_printerr (" --print-include-path        print include path\n");
-+  g_printerr (" --nostdinc                  don't use standard include path\n");
-+  g_printerr ("\n");
-+  g_printerr (" --help                      help for %s\n", sfidlName.c_str());
-+  g_printerr (" --help <binding>            help for a specific binding\n");
-+  g_printerr (" --version                   print version\n");
-+  g_printerr ("\n");
-   if (!codeGenerator)
-     {
--      fprintf (stderr, "language bindings:\n");
-+      g_printerr ("language bindings:\n");
-       for (list<Factory *>::const_iterator fi = factories.begin(); fi != factories.end(); fi++)
--      fprintf (stderr, " %-28s%s\n", (*fi)->option().c_str(), (*fi)->description().c_str());
-+      g_printerr (" %-28s%s\n", (*fi)->option().c_str(), (*fi)->description().c_str());
-     }
-   else
-     {
--      fprintf (stderr, "options for %s:\n", codeGeneratorName.c_str());
-+      g_printerr ("options for %s:\n", codeGeneratorName.c_str());
-       codeGenerator->help();
-     }
- }
---- ../../../orig/beast-20090428/sfi/tests/misctests.c 2009-05-05 10:00:43.000000000 -0400
-+++ ../sfi/tests/misctests.c   2009-05-06 12:28:02.000000000 -0400
-@@ -122,6 +122,7 @@
- static void
- test_com_ports (void)
- {
-+#ifndef WIN32
-   gint afds[2], pipe_error;
-   SfiComPort *port1, *port2;
-   GValue *value, *rvalue;
-@@ -164,6 +165,7 @@
-   sfi_com_port_unref (port1);
-   sfi_com_port_unref (port2);
-   TDONE ();
-+#endif
- }
- static void
diff --git a/008_misc_fixes.diff b/008_misc_fixes.diff
deleted file mode 100644 (file)
index e37a627..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
---- obeast-20090428/./beast-gtk/bstgconfig.c   Sun Apr 26 16:34:14 2009
-+++ beast-20090428/./beast-gtk/bstgconfig.c    Fri May  8 13:22:32 2009
-@@ -253,8 +253,11 @@
-   fd = open (file_name, O_RDONLY, 0);
-   if (fd < 0)
--    return (errno == ENOENT || errno == ENOTDIR || errno == ELOOP ?
--          BSE_ERROR_FILE_NOT_FOUND : BSE_ERROR_IO);
-+    return (errno == ENOENT || errno == ENOTDIR
-+#ifndef WIN32
-+         || errno == ELOOP
-+#endif
-+          ? BSE_ERROR_FILE_NOT_FOUND : BSE_ERROR_IO);
-   rstore = sfi_rstore_new ();
-   sfi_rstore_input_fd (rstore, fd, file_name);
---- obeast-20090428/./beast-gtk/bstkeybindings.c       Sun Apr 26 16:34:14 2009
-+++ beast-20090428/./beast-gtk/bstkeybindings.c        Fri May  8 13:21:25 2009
-@@ -705,8 +705,11 @@
-   if (fd < 0)
-     {
-       g_free (absname);
--      return (errno == ENOENT || errno == ENOTDIR || errno == ELOOP ?
--              BSE_ERROR_FILE_NOT_FOUND : BSE_ERROR_IO);
-+      return (errno == ENOENT || errno == ENOTDIR
-+#ifndef WIN32
-+         || errno == ELOOP 
-+#endif
-+            ? BSE_ERROR_FILE_NOT_FOUND : BSE_ERROR_IO);
-     }
-   rstore = sfi_rstore_new ();
---- obeast-20090428/./beast-gtk/bstmain.c      Sun Apr 26 16:34:14 2009
-+++ beast-20090428/./beast-gtk/bstmain.c       Fri May  8 13:25:23 2009
-@@ -32,7 +32,9 @@
- #include <unistd.h>
- #include <string.h>
- #include <sys/time.h>
-+#ifndef WIN32
- #include <sys/resource.h>
-+#endif
- // #include "sfi/toyprof-mem.h"
-@@ -100,7 +102,9 @@
-   /* initialize random numbers */
-   struct timeval tv;
-   gettimeofday (&tv, NULL);
-+#ifndef WIN32
-   srand48 (tv.tv_usec + (tv.tv_sec << 16));
-+#endif
-   srand (tv.tv_usec + (tv.tv_sec << 16));
-   /* initialize GLib guts */
-@@ -177,8 +181,10 @@
-   g_source_attach (source, NULL);
-   g_source_unref (source);
-+#ifndef WIN32
-   /* now that the BSE thread runs, drop scheduling priorities if we have any */
-   setpriority (PRIO_PROCESS, getpid(), 0);
-+#endif
-   /* watch registration notifications on server */
-   bse_proxy_connect (BSE_SERVER,
---- obeast-20090428/./beast-gtk/bstmsgabsorb.c Sun Apr 26 16:34:14 2009
-+++ beast-20090428/./beast-gtk/bstmsgabsorb.c  Fri May  8 13:24:20 2009
-@@ -336,8 +336,11 @@
-   if (fd < 0)
-     {
-       g_free (absname);
--      return (errno == ENOENT || errno == ENOTDIR || errno == ELOOP ?
--              BSE_ERROR_FILE_NOT_FOUND : BSE_ERROR_IO);
-+      return (errno == ENOENT || errno == ENOTDIR
-+#ifndef WIN32
-+           || errno == ELOOP
-+#endif
-+            ? BSE_ERROR_FILE_NOT_FOUND : BSE_ERROR_IO);
-     }
-   SfiRStore *rstore = sfi_rstore_new ();
---- obeast-20090428/./beast-gtk/bstskinconfig.c        Sun Apr 26 16:34:15 2009
-+++ beast-20090428/./beast-gtk/bstskinconfig.c Fri May  8 13:23:39 2009
-@@ -285,8 +285,11 @@
-   if (fd < 0)
-     {
-       g_free (absname);
--      return (errno == ENOENT || errno == ENOTDIR || errno == ELOOP ?
--              BSE_ERROR_FILE_NOT_FOUND : BSE_ERROR_IO);
-+      return (errno == ENOENT || errno == ENOTDIR
-+#ifndef WIN32
-+           || errno == ELOOP
-+#endif
-+            ? BSE_ERROR_FILE_NOT_FOUND : BSE_ERROR_IO);
-     }
-   rstore = sfi_rstore_new ();
---- obeast-20090428/./beast-gtk/gxk/gxktexttools.c     Sun Apr 26 16:34:15 2009
-+++ beast-20090428/./beast-gtk/gxk/gxktexttools.c      Fri May  8 13:14:41 2009
-@@ -1991,7 +1991,11 @@
-           struct dirent **flist;
-           gchar *tmp;
-           gint n;
-+#ifdef WIN32
-+        n = -1;
-+#else
-           n = scandir (file, &flist, NULL, alphasort);
-+#endif
-           if (n < 0)
-             gxk_scroll_text_append_file (sctext, file); /* revert to "unknown file" */
-           else
---- obeast-20090428/./beast-gtk/Makefile.am    Sun Apr 26 16:34:14 2009
-+++ beast-20090428/./beast-gtk/Makefile.am     Fri May  8 12:42:30 2009
-@@ -6,7 +6,7 @@
- SUBDIRS = gxk dialogs icons
--INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(BEAST_CFLAGS) -DG_DISABLE_CONST_RETURNS -DGTK_ENABLE_BROKEN
-+INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(BEAST_CFLAGS) $(CFLAGS) -DG_DISABLE_CONST_RETURNS -DGTK_ENABLE_BROKEN
- # -DGTK_DISABLE_DEPRECATED -DGTK_DISABLE_COMPAT_H
- # we specify the logging domain here
---- obeast-20090428/./birnet/Makefile.am       Fri May  8 17:58:15 2009
-+++ beast-20090428/./birnet/Makefile.am        Thu May  7 14:04:32 2009
-@@ -49,18 +49,14 @@
- # name ends in .lo or .o. however automake doesn't know .lo or .o libraries,
- # so we simply build an ordinary non-installed .la library and then use our
- # own rule to build the .o from the .la pieces.
--noinst_LTLIBRARIES         = libbirnet.la
-+lib_LTLIBRARIES            = libbirnet.la
- libbirnetincludedir        = $(includedir)/birnet
- libbirnetinclude_HEADERS   = $(birnet_headers) $(birnet_generated_headers)
- libbirnet_la_SOURCES       = $(birnet_sources)
- libbirnet_la_DEPENDENCIES  =
--libbirnet_la_LIBADD        = $(BIRNET_LIBS) -lm
-+libbirnet_la_LIBADD        = $(BIRNET_LIBS) -lm -lstdc++
- libbirnet_la_LDFLAGS       = -no-undefined # -Wl,-Bsymbolic
--# keep this .o rule in sync with the corresponding .la rule from Makefile.in
--libbirnet.o: $(libbirnet_la_OBJECTS) $(libbirnet_la_DEPENDENCIES)
--      $(CXXLINK)  $(libbirnet_la_LDFLAGS) $(libbirnet_la_OBJECTS) # $(libbirnet_la_LIBADD) $(LIBS)
--all-am: libbirnet.o
--CLEANFILES += libbirnet.lo libbirnet.o
-+CLEANFILES += libbirnet.lo
- EXTRA_DIST += $(birnet_private_headers)
- # === birnetconfig.h ===
---- obeast-20090428/./bse/Makefile.am  Fri May  8 17:58:32 2009
-+++ beast-20090428/./bse/Makefile.am   Thu May  7 13:09:52 2009
-@@ -139,7 +139,7 @@
- libbseinclude_HEADERS        = $(bse_public_headers) bse.idl $(bse_idl_sources) bsehack.idl $(idl_dummy_files)
- nodist_libbseinclude_HEADERS = bsecore.genidl.hh
- libbse_la_SOURCES            = $(bse_sources) $(bse_proc_gen_sources)
--libbse_la_LIBADD             = $(top_builddir)/birnet/libbirnet.o $(top_builddir)/sfi/libsfi.o $(BSE_LIBS) $(SFI_LIBS)
-+libbse_la_LIBADD             = $(top_builddir)/birnet/libbirnet.la $(top_builddir)/sfi/libsfi.la $(BSE_LIBS) $(SFI_LIBS)
- libbse_la_LDFLAGS            = $(strip                                \
-       -Wl,--version-script=$(srcdir)/ldscript.map             \
-       -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)    \
---- obeast-20090428/./bse/tests/Makefile.am    Sun Apr 26 16:34:16 2009
-+++ beast-20090428/./bse/tests/Makefile.am     Fri May  8 12:23:52 2009
-@@ -6,7 +6,7 @@
- SUBDIRS =
--INCLUDES += -I$(top_srcdir) -I$(top_builddir) $(SFI_CFLAGS)
-+INCLUDES += -I$(top_srcdir) -I$(top_builddir) $(SFI_CFLAGS) $(CFLAGS)
- DEFS += -DG_LOG_DOMAIN=\"BSE-TEST\" # -DG_DISABLE_CONST_RETURNS
---- obeast-20090428/./plugins/freeverb/Makefile.am     Sun Apr 26 16:34:20 2009
-+++ beast-20090428/./plugins/freeverb/Makefile.am      Fri May  8 12:41:44 2009
-@@ -4,7 +4,7 @@
- ## GNU Lesser General Public License version 2 or any later version.
- include $(top_srcdir)/Makefile.decl
--INCLUDES += -I$(top_srcdir) -I. $(BSE_CFLAGS) -DG_LOG_DOMAIN="\"$(strip $(basename $(<F)))\""
-+INCLUDES += -I$(top_srcdir) -I. $(BSE_CFLAGS) $(CFLAGS) -DG_LOG_DOMAIN="\"$(strip $(basename $(<F)))\""
- # install plugins under:
- plugindir = $(bseplugindir)
---- obeast-20090428/./plugins/Makefile.am      Sun Apr 26 16:34:19 2009
-+++ beast-20090428/./plugins/Makefile.am       Fri May  8 12:42:08 2009
-@@ -6,7 +6,7 @@
- SUBDIRS = icons . freeverb # evaluator
--INCLUDES += -I$(top_srcdir) -I. $(BSE_CFLAGS) -DG_LOG_DOMAIN="\"$(strip $(basename $(<F)))\""
-+INCLUDES += -I$(top_srcdir) -I. $(BSE_CFLAGS) $(CFLAGS) -DG_LOG_DOMAIN="\"$(strip $(basename $(<F)))\""
- #
- # C++ Plugins
---- obeast-20090428/./sfi/Makefile.am  Sun Apr 26 16:34:21 2009
-+++ beast-20090428/./sfi/Makefile.am   Thu May  7 14:14:39 2009
-@@ -39,16 +39,12 @@
- # name ends in .lo or .o. however automake doesn't know .lo or .o libraries,
- # so we simply build an ordinary non-installed .la library and then use our
- # own rule to build the .o from the .la pieces.
--noinst_LTLIBRARIES    = libsfi.la
-+lib_LTLIBRARIES       = libsfi.la
- libsfiincludedir      = $(includedir)/sfi
- libsfiinclude_HEADERS = $(sfi_public_headers)
- libsfi_la_SOURCES     = $(sfi_all_sources)
- libsfi_la_LDFLAGS     = -no-undefined # -Wl,-Bsymbolic
--libsfi_la_LIBADD      = $(SFI_LIBS) -lm
--# keep this .o rule in sync with the corresponding .la rule from Makefile.in
--libsfi.o: $(libsfi_la_OBJECTS) $(libsfi_la_DEPENDENCIES)
--      $(CXXLINK)  $(libsfi_la_LDFLAGS) $(libsfi_la_OBJECTS) # $(libsfi_la_LIBADD) $(LIBS)
--all-am: libsfi.o
-+libsfi_la_LIBADD      = $(top_builddir)/birnet/libbirnet.la $(SFI_LIBS) -lm
- CLEANFILES += libsfi.o libsfi.lo
- #
-@@ -61,7 +57,7 @@
- bin_PROGRAMS = sfidl
- sfidl_SOURCES = sfidl.cc $(common_idl_sources)
--sfidl_LDADD = $(SFI_LIBS) -lm $(top_builddir)/birnet/libbirnet.o # libsfi.la
-+sfidl_LDADD = $(SFI_LIBS) -lm $(top_builddir)/birnet/libbirnet.la # libsfi.la
- sfidl_CFLAGS = $(AM_CFLAGS) # hack to cause glib-extra.c to be compiled twice (work around automake)
- EXTRA_DIST += sfidl-generator.hh sfidl-namespace.hh sfidl-options.hh sfidl-parser.hh sfidl-factory.hh
- EXTRA_DIST += sfidl-cbase.hh sfidl-clientc.hh sfidl-clientcxx.hh sfidl-cxxbase.hh sfidl-hostc.hh sfidl-utils.hh
---- obeast-20090428/./shell/bsescm.c   Sun Apr 26 16:34:23 2009
-+++ beast-20090428/./shell/bsescm.c    Fri May  8 13:12:21 2009
-@@ -23,7 +23,9 @@
- #include <sfi/sfistore.h> /* no bin-compat */
- #include <sys/time.h>
- #include <libintl.h>
-+#ifndef WIN32
- #include <sys/resource.h>
-+#endif
- #include "bsescminterp.h"
- #include "topconfig.h"
-@@ -105,8 +107,10 @@
-       bse_scm_context = bse_init_glue_context (PRG_NAME);
-     }
-+#ifndef WIN32
-   /* now that the BSE thread runs, drop scheduling priorities if we have any */
-   setpriority (PRIO_PROCESS, getpid(), 0);
-+#endif
-   gh_enter (argc, argv, gh_main);
diff --git a/009_inline_lib_make.diff b/009_inline_lib_make.diff
deleted file mode 100644 (file)
index d07e074..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
---- 008-beast-20090428//./beast-gtk/gxk/Makefile.am    Sun Apr 26 16:34:15 2009
-+++ beast-20090428//./beast-gtk/gxk/Makefile.am        Sat May  9 06:29:44 2009
-@@ -120,8 +120,8 @@
- noinst_PROGRAMS = $(ALLTESTS)
- progs_LDADD     = $(strip                                     \
-       libgxk.a $(GXK_LIBS)                                    \
--      $(top_builddir)/sfi/libsfi.o $(SFI_LIBS)                \
--      $(top_builddir)/birnet/libbirnet.o $(BIRNET_LIBS)       \
-+      $(top_builddir)/sfi/libsfi.la $(SFI_LIBS)               \
-+      $(top_builddir)/birnet/libbirnet.la $(BIRNET_LIBS)      \
- )
---- 008-beast-20090428//./birnet/Makefile.am   Sun May 10 17:17:12 2009
-+++ beast-20090428//./birnet/Makefile.am       Sat May  9 06:20:39 2009
-@@ -143,7 +143,7 @@
- CLEANFILES += xgen-sigs birnetsignalvariants.hh xgen-signals.sed
- noinst_PROGRAMS = $(ALLTESTS)
--progs_ldadd     = libbirnet.o $(BIRNET_LIBS) -lm
-+progs_ldadd     = libbirnet.la $(BIRNET_LIBS) -lm
- noinst_PROGRAMS       += birnet-zintern
- birnet_zintern_SOURCES = birnet-zintern.cc
---- 008-beast-20090428//./birnet/tests/Makefile.am     Sun Apr 26 16:34:15 2009
-+++ beast-20090428//./birnet/tests/Makefile.am Sat May  9 06:22:09 2009
-@@ -8,7 +8,7 @@
- DEFS         += -DBIRNET_LOG_DOMAIN='"$(basename $(@F))"' -DPARANOID -DG_DISABLE_CONST_RETURNS
- noinst_PROGRAMS  = $(ALLTESTS)
--progs_ldadd    = $(top_builddir)/birnet/libbirnet.o $(BIRNET_LIBS) -lm
-+progs_ldadd    = $(top_builddir)/birnet/libbirnet.la $(BIRNET_LIBS) -lm
- TESTS         += infotest
- infotest_SOURCES = infotest.cc
---- 008-beast-20090428//./bse/bsecxxplugin.hh  Sun Apr 26 16:34:15 2009
-+++ beast-20090428//./bse/bsecxxplugin.hh      Sat May  9 07:55:54 2009
-@@ -55,7 +55,7 @@
- #define BSE_CXX_REGISTER_STATIC_HOOK(HookType)  BSE_CXX_REGISTER_HOOK_NODE (HookType, 1)
- #define BSE_CXX_REGISTER_HOOK_NODE(HookType, __static)                  \
-   template<class E> static BseExportNode* bse_export_node ();           \
--  template<> BseExportNode*                                             \
-+  template<> inline BseExportNode*                                      \
-   bse_export_node<HookType> ()                                          \
-   {                                                                     \
-     static BseExportNodeHook hnode = {                                  \
-@@ -90,7 +90,7 @@
-   (::NameSpace::bse_type_keeper__3##EnumType.get_type ())
- #define BSE_CXX_DECLARE_ENUM(EnumType,EnumName,N,ICode)                 \
-   template<class E> static BseExportNode* bse_export_node ();           \
--  template<> BseExportNode*                                             \
-+  template<> inline BseExportNode*                                      \
-   bse_export_node<EnumType> ()                                          \
-   {                                                                     \
-     static BseExportNodeEnum enode = {                                  \
-@@ -144,7 +144,7 @@
-   (::NameSpace::bse_type_keeper__1##RecordType.get_type ())
- #define BSE_CXX_DECLARE_RECORD(RecordType)                              \
-   template<class E> static BseExportNode* bse_export_node ();           \
--  template<> BseExportNode*                                             \
-+  template<> inline BseExportNode*                                      \
-   bse_export_node<RecordType> ()                                        \
-   {                                                                     \
-     static BseExportNodeBoxed bnode = {                                 \
-@@ -180,7 +180,7 @@
-   (::NameSpace::bse_type_keeper__2##SequenceType.get_type ())
- #define BSE_CXX_DECLARE_SEQUENCE(SequenceType)                                  \
-   template<class E> static BseExportNode* bse_export_node ();                   \
--  template<> BseExportNode*                                                     \
-+  template<> inline BseExportNode*                                              \
-   bse_export_node<SequenceType> ()                                              \
-   {                                                                             \
-     static BseExportNodeBoxed bnode = {                                         \
-@@ -218,7 +218,7 @@
-   extern ::Bse::ExportTypeKeeper bse_type_keeper__9##ProcType;
- #define BSE_CXX_REGISTER_PROCEDURE(ProcType)                                    \
-   template<class C> static ::BseExportNode* bse_export_node ();                 \
--  template<> ::BseExportNode*                                                   \
-+  template<> inline ::BseExportNode*                                            \
-   bse_export_node<Procedure::ProcType> ()                                       \
-   {                                                                             \
-     static ::BseExportNodeProc pnode = {                                        \
-@@ -258,7 +258,7 @@
- #define BSE_CXX_REGISTER_EFFECT(Effect)                                         \
-   BSE_CXX_DEFINE_STATIC_DATA (Effect##Base);                                    \
-   template<class C> static ::BseExportNode* bse_export_node ();                 \
--  template<> ::BseExportNode*                                                   \
-+  template<> inline ::BseExportNode*                                            \
-   bse_export_node<Effect> ()                                                    \
-   {                                                                             \
-     static ::BseExportNodeClass cnode = {                                       \
---- 008-beast-20090428//./launchers/suidmain.c Sun Apr 26 16:34:17 2009
-+++ beast-20090428//./launchers/suidmain.c     Sat May  9 08:24:45 2009
-@@ -18,12 +18,13 @@
- #include "topconfig.h"  /* holds HAVE_SETEUID etc... */
- #include "suidmain.h"
- #include <sys/time.h>
--#include <sys/resource.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- #include <errno.h>
-+#ifndef WIN32
-+#include <sys/resource.h>
- static int original_priority = 0;
-@@ -137,3 +138,22 @@
-   perror (executable);
-   return -1;
- }
-+#else
-+int
-+main (int    argc,
-+      char **argv)
-+{
-+  /* find executable */
-+  const char *executable = custom_find_executable (&argc, &argv);
-+  char *xbuffer = malloc (strlen (executable) + 4);
-+  sprintf (xbuffer, "%s.exe", executable);
-+  executable = xbuffer;
-+  
-+  /* exec */
-+  argv[0] = executable;
-+  execv (executable, argv);
-+  /* handle execution errors */
-+  perror (executable);
-+  return -1;
-+}
-+#endif
---- 008-beast-20090428//./sfi/Makefile.am      Sun May 10 17:17:12 2009
-+++ beast-20090428//./sfi/Makefile.am  Sat May  9 06:31:19 2009
-@@ -45,7 +45,6 @@
- libsfi_la_SOURCES     = $(sfi_all_sources)
- libsfi_la_LDFLAGS     = -no-undefined # -Wl,-Bsymbolic
- libsfi_la_LIBADD      = $(top_builddir)/birnet/libbirnet.la $(SFI_LIBS) -lm
--CLEANFILES += libsfi.o libsfi.lo
- #
- # programs to build
---- 008-beast-20090428//./sfi/tests/Makefile.am        Sun Apr 26 16:34:22 2009
-+++ beast-20090428//./sfi/tests/Makefile.am    Sat May  9 06:32:44 2009
-@@ -8,8 +8,8 @@
- DEFS         += -DG_LOG_DOMAIN='"$(basename $(@F))"' -DPARANOID # -DG_DISABLE_CONST_RETURNS
- noinst_PROGRAMS   = $(ALLTESTS)
--progs_nosfi_ldadd = $(top_builddir)/birnet/libbirnet.o $(SFI_LIBS) -lm
--progs_ldadd     = $(top_builddir)/birnet/libbirnet.o $(top_builddir)/sfi/libsfi.o $(SFI_LIBS) -lm
-+progs_nosfi_ldadd = $(top_builddir)/birnet/libbirnet.la $(SFI_LIBS) -lm
-+progs_ldadd     = $(top_builddir)/birnet/libbirnet.la $(top_builddir)/sfi/libsfi.la $(SFI_LIBS) -lm
- SFIDL                   = $(top_builddir)/sfi/sfidl
- # ring
---- 008-beast-20090428//./tests/bse/cxxbinding.cc      Sun Apr 26 16:34:25 2009
-+++ beast-20090428//./tests/bse/cxxbinding.cc  Sun May 10 13:16:41 2009
-@@ -29,8 +29,11 @@
-    * sleeps at least the required time, even in the presence of signals
-    * for instance due to (gdb)
-    */
-+  g_usleep (seconds * G_USEC_PER_SEC);
-+#if 0
-   while (seconds > 0)
-     seconds = sleep (seconds);
-+#endif
- }
- int
-@@ -123,7 +126,7 @@
-   Project project = server.use_new_project ("foo");
-   project.restore_from_file (file_name);
-   project.play();
--  sleep (3);
-+  do_sleep (3);
-   g_print ("done.\n");
-   sfi_glue_context_pop ();
---- 008-beast-20090428//./tests/bse/Makefile.am        Sun Apr 26 16:34:25 2009
-+++ beast-20090428//./tests/bse/Makefile.am    Sun May 10 10:48:34 2009
-@@ -5,7 +5,7 @@
- ## GNU Lesser General Public License version 2 or any later version.
- include $(top_srcdir)/Makefile.decl
--INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(SFI_CFLAGS)
-+INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(SFI_CFLAGS) $(CFLAGS)
- DEFS     += -DG_LOG_DOMAIN="\"BSE-TEST\"" # -DG_DISABLE_CONST_RETURNS
- SFIDL = $(top_builddir)/sfi/sfidl
- SFIDL_INC = --nostdinc -I$(top_srcdir) -I$(top_builddir)
---- 008-beast-20090428//./tests/latency/Makefile.am    Sun Apr 26 16:34:25 2009
-+++ beast-20090428//./tests/latency/Makefile.am        Sun May 10 10:01:51 2009
-@@ -4,7 +4,7 @@
- ## GNU Lesser General Public License version 2 or any later version.
- include $(top_srcdir)/Makefile.decl
--INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(SFI_CFLAGS)
-+INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(SFI_CFLAGS) $(CFLAGS)
- DEFS     += -DG_LOG_DOMAIN="\"BSE-TEST\"" # -DG_DISABLE_CONST_RETURNS
- # IDL Compiler
- SFIDL     = $(top_builddir)/sfi/sfidl
---- 008-beast-20090428//./tests/Makefile.am    Sun Apr 26 16:34:23 2009
-+++ beast-20090428//./tests/Makefile.am        Sat May  9 09:00:44 2009
-@@ -6,7 +6,7 @@
- SUBDIRS = . latency scripts bse audio filecheck
--INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(SFI_CFLAGS)
-+INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(SFI_CFLAGS) $(CFLAGS)
- DEFS += -DG_LOG_DOMAIN="\"BEAST-TEST\"" # -DG_DISABLE_CONST_RETURNS
- SFIDL = $(top_builddir)/sfi/sfidl
- SFIDL_INC = --nostdinc -I$(top_srcdir) -I$(top_builddir)
---- 008-beast-20090428//./tools/bsewavetool.cc Sun Apr 26 16:34:25 2009
-+++ beast-20090428//./tools/bsewavetool.cc     Sat May  9 08:56:09 2009
-@@ -835,8 +835,13 @@
-                        bse_error_blurb (error));
-             exit (1);
-           }
-+#ifdef WIN32
-+        gchar *temp_file = g_strdup_printf ("%s/bsewavetool-oggchunk%04X.tmp%06x", g_get_tmp_dir(), 0x1000 + nth, g_random_int());
-+      int tmpfd = open (temp_file, O_WRONLY | O_CREAT | O_TRUNC);
-+#else
-         gchar *temp_file = g_strdup_printf ("%s/bsewavetool-pid%u-oggchunk%04X.tmp%06xyXXXXXX", g_get_tmp_dir(), getpid(), 0x1000 + nth, rand() & 0xfffffd);
-         gint tmpfd = mkstemp (temp_file);
-+#endif
-         if (tmpfd < 0)
-           {
-             sfi_error ("chunk % 7.2f/%.0f: failed to open tmp file \"%s\": %s",
---- 008-beast-20090428//./tools/Makefile.am    Sun Apr 26 16:34:25 2009
-+++ beast-20090428//./tools/Makefile.am        Sat May  9 08:26:31 2009
-@@ -6,7 +6,7 @@
- SUBDIRS = . scripts
--INCLUDES += -I$(top_srcdir) -I$(top_builddir) $(BSE_CFLAGS)
-+INCLUDES += -I$(top_srcdir) -I$(top_builddir) $(BSE_CFLAGS) $(CFLAGS)
- DEFS += -DG_LOG_DOMAIN=\"BSE-TOOLS\" -DG_DISABLE_CONST_RETURNS
- noinst_PROGRAMS = $(ALLTESTS)
diff --git a/010_plugin_ext_crawler.diff b/010_plugin_ext_crawler.diff
deleted file mode 100644 (file)
index 690f916..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
---- 009-beast-20090428/./bse/bseplugin.c       Tue May 12 12:14:09 2009
-+++ beast-20090428/./bse/bseplugin.c   Tue May 12 12:36:09 2009
-@@ -737,6 +737,12 @@
-   return false;
- }
-+#ifdef WIN32
-+#define PLUGIN_EXTENSION ".dll"
-+#else
-+#define PLUGIN_EXTENSION ".so"
-+#endif
-+
- SfiRing*
- bse_plugin_path_list_files (gboolean include_drivers,
-                             gboolean include_plugins)
-@@ -752,21 +758,21 @@
-     {
-       if (include_drivers)
-         {
--          files = sfi_file_crawler_list_files (BSE_PATH_DRIVERS, "*.so", G_FILE_TEST_IS_REGULAR);
-+          files = sfi_file_crawler_list_files (BSE_PATH_DRIVERS, "*" PLUGIN_EXTENSION, G_FILE_TEST_IS_REGULAR);
-           ring = sfi_ring_concat (ring, sfi_ring_sort (files, (SfiCompareFunc) strcmp, NULL));
-           files = sfi_file_crawler_list_files (BSE_PATH_DRIVERS, "*.o", G_FILE_TEST_IS_REGULAR);
-           ring = sfi_ring_concat (ring, sfi_ring_sort (files, (SfiCompareFunc) strcmp, NULL));
-         }
-       if (include_plugins)
-         {
--          files = sfi_file_crawler_list_files (BSE_PATH_PLUGINS, "*.so", G_FILE_TEST_IS_REGULAR);
-+          files = sfi_file_crawler_list_files (BSE_PATH_PLUGINS, "*" PLUGIN_EXTENSION, G_FILE_TEST_IS_REGULAR);
-           ring = sfi_ring_concat (ring, sfi_ring_sort (files, (SfiCompareFunc) strcmp, NULL));
-           files = sfi_file_crawler_list_files (BSE_PATH_PLUGINS, "*.o", G_FILE_TEST_IS_REGULAR);
-           ring = sfi_ring_concat (ring, sfi_ring_sort (files, (SfiCompareFunc) strcmp, NULL));
-         }
-       if (include_plugins && BSE_GCONFIG (plugin_path) && BSE_GCONFIG (plugin_path)[0])
-         {
--          files = sfi_file_crawler_list_files (BSE_GCONFIG (plugin_path), "*.so", G_FILE_TEST_IS_REGULAR);
-+          files = sfi_file_crawler_list_files (BSE_GCONFIG (plugin_path), "*" PLUGIN_EXTENSION, G_FILE_TEST_IS_REGULAR);
-           ring = sfi_ring_concat (ring, sfi_ring_sort (files, (SfiCompareFunc) strcmp, NULL));
-           files = sfi_file_crawler_list_files (BSE_GCONFIG (plugin_path), "*.o", G_FILE_TEST_IS_REGULAR);
-           ring = sfi_ring_concat (ring, sfi_ring_sort (files, (SfiCompareFunc) strcmp, NULL));
-@@ -778,11 +784,11 @@
-   if (true)
-     {
-       const SfiCPUInfo cpu_info = sfi_cpu_info();
--      const char *exts[] = { ".FPU.so", ".FPU.la", ".so", ".la", };
-+      const char *exts[] = { ".FPU" PLUGIN_EXTENSION, ".FPU.la", PLUGIN_EXTENSION, ".la", };
-       if (BSE_WITH_SSE_FLAGS && !bse_main_args->force_fpu &&
-           cpu_info.x86_mmx && cpu_info.x86_sse && cpu_info.x86_ssesys)
-         {
--          exts[0] = ".SSE.so";  /* !".FPU.so" */
-+          exts[0] = ".SSE" PLUGIN_EXTENSION;  /* !".FPU.so" / ".FPU.dll" */
-           exts[1] = ".SSE.la";  /* !".FPU.la" */
-         }
-       SfiRing *fname;
---- 009-beast-20090428/./plugins/freeverb/Makefile.am  Tue May 12 12:14:15 2009
-+++ beast-20090428/./plugins/freeverb/Makefile.am      Mon May 11 16:47:24 2009
-@@ -10,7 +10,7 @@
- plugindir = $(bseplugindir)
- freeverb_la_SOURCES = allpass.cpp comb.cpp revmodel.cpp bsefreeverbcpp.cpp bsefreeverb.c
--freeverb_la_LDFLAGS = -module -avoid-version
-+freeverb_la_LDFLAGS = -module -avoid-version -no-undefined
- freeverb_la_LIBADD  = $(top_builddir)/bse/libbse.la $(BSE_LIBS) -lm
- plugin_LTLIBRARIES = freeverb.la
---- 009-beast-20090428/./plugins/Makefile.am   Tue May 12 12:14:15 2009
-+++ beast-20090428/./plugins/Makefile.am       Mon May 11 14:23:39 2009
-@@ -59,18 +59,22 @@
- )
- # === plugin build rule setup ===
--plugins_ldflags         = -avoid-version
--plugins_libs            = $(top_builddir)/bse/libbse.la $(BSE_LIBS) -lm
--plugins_built_sources           =     # listed in Makefile.plugins
-+plugins_ldflags         = -avoid-version -no-undefined
-+plugins_libs            = $(top_builddir)/bse/libbse.la $(top_builddir)/sfi/libsfi.la \
-+                            $(top_builddir)/birnet/libbirnet.la $(BSE_LIBS) -lm
-+# listed in Makefile.plugins:
-+plugins_built_sources           =     
- CLEANFILES             += $(plugins_built_sources)
- # .FPU plugins
--plugin_FPU_ltlibs       =     # listed in Makefile.plugins
-+# listed in Makefile.plugins:
-+plugin_FPU_ltlibs       =
- plugin_FPU_LTLIBRARIES          = $(plugin_FPU_ltlibs)
- plugin_FPUdir                   = $(bseplugindir)
- FPU_PLUGIN_CFLAGS       = $(AM_CFLAGS) $(PLUGIN_FLAGS) $(FPU_FLAGS)
- FPU_PLUGIN_CXXFLAGS     = $(AM_CXXFLAGS) $(PLUGIN_FLAGS) $(FPU_FLAGS)
- # .SSE plugins
--plugin_SSE_ltlibs       =     # listed in Makefile.plugins
-+# listed in Makefile.plugins:
-+plugin_SSE_ltlibs       =
- plugin_SSE_LTLIBRARIES          = $(plugin_SSE_cond_libs)
- plugin_SSEdir           = $(bseplugindir)
- SSE_PLUGIN_CFLAGS       = $(AM_CFLAGS) $(PLUGIN_FLAGS) $(SSE_FLAGS)
---- 009-beast-20090428/./sfi/sfidl-corecxx.cc  Tue May 12 12:14:09 2009
-+++ beast-20090428/./sfi/sfidl-corecxx.cc      Mon May 11 13:26:31 2009
-@@ -1362,8 +1362,8 @@
-         g_print ("{\n");
-         gint estatus = 0;
-         GError *error = NULL;
--        gchar *out, *err = NULL;
--        String cmd = String() + "gdk-pixbuf-csource " + "--name=local_pixstream " + ii->file;
-+        gchar *out, *err = NULL, *escaped = g_strescape (ii->file.c_str(), 0);
-+        String cmd = String() + "gdk-pixbuf-csource " + "--name=local_pixstream " + escaped;
-         g_spawn_command_line_sync (cmd.c_str(), &out, &err, &estatus, &error);
-         if (err && *err)
-           g_printerr ("gdk-pixbuf-csource: %s", err);
-@@ -1374,6 +1374,7 @@
-                           ii->file.c_str(), error ? ':' : ' ', error->message);
-             exit (estatus & 255 ? estatus : 1);
-           }
-+        g_free (escaped);
-         g_clear_error (&error);
-         g_free (err);
-         g_print ("  %s\n", out);
---- 009-beast-20090428/./sfi/sfifilecrawler.c  Tue May 12 12:13:58 2009
-+++ beast-20090428/./sfi/sfifilecrawler.c      Tue May 12 12:36:51 2009
-@@ -19,8 +19,7 @@
- #include "sfiwrapper.h"
- #include "topconfig.h"
- #include <string.h>
--#include <sys/types.h>
--#include <dirent.h>
-+#include <sys/stat.h>
- #define INCREMENTAL_RESULTS 1
-@@ -173,7 +172,7 @@
-   if (strchr (file_pattern, '?') || strchr (file_pattern, '*'))
-     {
-       gchar *s = g_strconcat (base_dir, G_DIR_SEPARATOR_S, NULL);
--      self->dhandle = opendir (s);
-+      self->dhandle = g_dir_open (s, 0, NULL);
-       g_free (s);
-       if (self->dhandle)
-       {
-@@ -199,16 +198,17 @@
- static void   /* self->accu is implicit in/out arg */
- file_crawler_crawl_readdir (SfiFileCrawler *self)
- {
--  DIR *dd = self->dhandle;
--  struct dirent *d_entry = readdir (dd);
-+  /* FIXME:stw: either this function is by design only supposed to be called
-+   * with self->dhandle != NULL, or my win32 changes need fixing
-+   */
-+  g_return_if_fail (self->dhandle != NULL);
-   
--  if (d_entry)
-+  const gchar *filename = g_dir_read_name (self->dhandle);
-+  if (filename)
-     {
--      if (!(d_entry->d_name[0] == '.' && d_entry->d_name[1] == 0) &&
--        !(d_entry->d_name[0] == '.' && d_entry->d_name[1] == '.' && d_entry->d_name[2] == 0) &&
--        g_pattern_match_string (self->pspec, d_entry->d_name))
-+      if (g_pattern_match_string (self->pspec, filename))
-       {
--        gchar *str = g_strconcat (self->base_dir, G_DIR_SEPARATOR_S, d_entry->d_name, NULL);
-+        gchar *str = g_strconcat (self->base_dir, G_DIR_SEPARATOR_S, filename, NULL);
-         if (self->ftest && !g_file_test_all (str, self->ftest))
-           g_free (str);
-         else
-@@ -221,12 +221,29 @@
-       self->pspec = NULL;
-       g_free (self->base_dir);
-       self->base_dir = NULL;
--      closedir (dd);
-+      g_dir_close (self->dhandle);
-       self->dhandle = NULL;
-       self->ftest = 0;
-     }
- }
-+/* On unix, it is equivalent with strchr (path, '/').
-+ *
-+ * On windows, it takes into account that both, '/' and '\' are
-+ * valid directory separators.
-+ */
-+static gchar*
-+find_next_dir_separator (const gchar *path)
-+{
-+  while (*path && !G_IS_DIR_SEPARATOR (*path))
-+    path++;
-+
-+  if (*path)
-+    return path;
-+  else
-+    return NULL;
-+}
-+
- static void
- file_crawler_queue_abs_file_path (SfiFileCrawler *self,
-                                 const gchar    *path_pattern,
-@@ -239,7 +256,7 @@
-   freeme = p = g_strdup (path_pattern);
-   
-   /* seperate root */
--  sep = strchr (p, G_DIR_SEPARATOR);
-+  sep = find_next_dir_separator (p);
-   g_return_if_fail (sep != NULL);     /* absolute paths must have a seperator */
-   *sep++ = 0;
-   
-@@ -257,12 +274,12 @@
-   self->dlist = sfi_ring_prepend (self->dlist, g_strdup (p));
-   
-   /* compress multiple dir seperators */
--  while (*sep == G_DIR_SEPARATOR)
-+  while (G_IS_DIR_SEPARATOR (*sep))
-     sep++;
-   
-   /* add remaining segments to queue */
-   p = sep;
--  sep = strchr (p, G_DIR_SEPARATOR);
-+  sep = find_next_dir_separator (p);
-   while (sep)
-     {
-       *sep++ = 0;
-@@ -271,7 +288,7 @@
-       while (*sep == G_DIR_SEPARATOR)
-       sep++;
-       p = sep;
--      sep = strchr (p, G_DIR_SEPARATOR);
-+      sep = find_next_dir_separator (p);
-     }
-   
-   /* final segment */
-@@ -344,7 +361,7 @@
-   gchar *home, *user = NULL;
-   if (rpath[0] != '~')
-     return cwd ? g_strconcat (cwd, G_DIR_SEPARATOR_S, rpath, NULL) : NULL;
--  dir = strchr (rpath + 1, G_DIR_SEPARATOR);
-+  dir = find_next_dir_separator (rpath + 1);
-   if (dir && dir > rpath + 1)
-     user = g_strndup (rpath + 1, dir - rpath - 1);
-   else if (!dir && rpath[1])
diff --git a/011_freeverb_sfi.diff b/011_freeverb_sfi.diff
deleted file mode 100644 (file)
index b4a4f99..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- 010-beast-20090428//./plugins/freeverb/Makefile.am Tue May 12 14:52:42 2009
-+++ beast-20090428//./plugins/freeverb/Makefile.am     Tue May 12 13:31:54 2009
-@@ -11,7 +11,7 @@
- freeverb_la_SOURCES = allpass.cpp comb.cpp revmodel.cpp bsefreeverbcpp.cpp bsefreeverb.c
- freeverb_la_LDFLAGS = -module -avoid-version -no-undefined
--freeverb_la_LIBADD  = $(top_builddir)/bse/libbse.la $(BSE_LIBS) -lm
-+freeverb_la_LIBADD  = $(top_builddir)/bse/libbse.la $(top_builddir)/sfi/libsfi.la $(BSE_LIBS) -lm
- plugin_LTLIBRARIES = freeverb.la
diff --git a/012_seq_waiter_and_domain.diff b/012_seq_waiter_and_domain.diff
deleted file mode 100644 (file)
index 073e230..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
---- 011-beast-20090428//./beast-gtk/bstdefs.h  Sun Apr 26 16:34:14 2009
-+++ beast-20090428//./beast-gtk/bstdefs.h      Wed May 13 14:32:10 2009
-@@ -89,8 +89,8 @@
- /* --- i18n and gettext helpers --- */
--#define _DOMAIN (NULL)
--#define _(str)        dgettext (_DOMAIN, str)
-+#define BEAST_GETTEXT_DOMAIN (NULL)
-+#define _(str)        dgettext (BEAST_GETTEXT_DOMAIN, str)
- #define N_(str)       (str)
---- 011-beast-20090428//./beast-gtk/bstusermessage.c   Sun Apr 26 16:34:15 2009
-+++ beast-20090428//./beast-gtk/bstusermessage.c       Wed May 13 14:33:25 2009
-@@ -364,7 +364,7 @@
-   if (label)
-     {
-       gint count = g_object_get_int (dialog, "BEAST-user-message-count");
--      gchar *rstr = g_strdup_printf (dngettext (_DOMAIN, _("Message has been repeated %u time"), _("Message has been repeated %u times"), count), count);
-+      gchar *rstr = g_strdup_printf (dngettext (BEAST_GETTEXT_DOMAIN, _("Message has been repeated %u time"), _("Message has been repeated %u times"), count), count);
-       g_object_set_int (dialog, "BEAST-user-message-count", count + 1);
-       gtk_label_set_text (label, rstr);
-       g_free (rstr);
---- 011-beast-20090428//./bse/bsesequencer.cc  Tue May 12 12:39:45 2009
-+++ beast-20090428//./bse/bsesequencer.cc      Thu May 14 12:59:43 2009
-@@ -24,7 +24,9 @@
- #include "bsemidireceiver.h"
- #include "bsemain.h"
- #include "bseieee754.h"
--#ifndef WIN32
-+#ifdef WIN32
-+#include "bsewin32.h"
-+#else
- #include <sys/poll.h>
- #endif
- #include <unistd.h>
-@@ -55,7 +57,11 @@
- /* --- variables --- */
- static BseSequencer    *global_sequencer = NULL;
- static BirnetCond          current_watch_cond = { 0, };
-+#ifdef WIN32
-+static BseWin32Waiter  *sequencer_win32_waiter;
-+#else
- static gint             sequencer_wake_up_pipe[2] = { -1, -1 };
-+#endif
- /* --- functions --- */
- extern "C" void
-@@ -65,7 +71,9 @@
-   sfi_cond_init (&current_watch_cond);
--#ifndef WIN32
-+#ifdef WIN32
-+  sequencer_win32_waiter = bse_win32_waiter_new();
-+#else
-   if (pipe (sequencer_wake_up_pipe) < 0)
-     g_error ("failed to create sequencer wake-up pipe: %s", strerror (errno));
-   glong flags = fcntl (sequencer_wake_up_pipe[0], F_GETFL, 0);
-@@ -88,11 +96,15 @@
- static void
- sequencer_wake_up (gpointer wake_up_data)
- {
-+#ifdef WIN32
-+  bse_win32_waiter_wakeup (sequencer_win32_waiter);
-+#else
-   guint8 wake_up_message = 'W';
-   gint err;
-   do
-     err = write (sequencer_wake_up_pipe[1], &wake_up_message, 1);
-   while (err < 0 && errno == EINTR);
-+#endif
- }
- namespace { // Anon
-@@ -272,22 +284,30 @@
- {
-   guint n_pfds = sequencer_poll_pool.get_n_pfds() + 1;  /* one for the wake-up pipe */
-   GPollFD *pfds = g_newa (GPollFD, n_pfds);
-+#ifndef WIN32
-   pfds[0].fd = sequencer_wake_up_pipe[0];
-+#endif
-   pfds[0].events = G_IO_IN;
-   pfds[0].revents = 0;
-   sequencer_poll_pool.fill_pfds (n_pfds - 1, pfds + 1); /* rest used for io watch array */
-   BSE_SEQUENCER_UNLOCK ();
--#ifndef WIN32
-+#ifdef WIN32
-+  gint result = bse_win32_waiter_wait (sequencer_win32_waiter, timeout_ms);
-+  pfds[0].revents = G_IO_IN;
-+#else
-   gint result = poll ((struct pollfd*) pfds, n_pfds, timeout_ms);
-   if (result < 0 && errno != EINTR)
-     g_printerr ("%s: poll() error: %s\n", G_STRFUNC, g_strerror (errno));
-+#endif
-   BSE_SEQUENCER_LOCK ();
-+#ifndef WIN32
-   if (result > 0 && pfds[0].revents)
-     {
-       guint8 buffer[256];
-       read (sequencer_wake_up_pipe[0], buffer, 256);    /* eat wake up message */
-       result -= 1;
-     }
-+#endif
-   if (result > 0)
-     {
-       /* dispatch io watches */
-@@ -310,7 +330,6 @@
-           sfi_cond_broadcast (&current_watch_cond);     /* wake up threads in bse_sequencer_remove_io_watch() */
-         }
-     }
--#endif
-   return !sfi_thread_aborted();
- }
---- 011-beast-20090428//./bse/Makefile.am      Tue May 12 12:39:45 2009
-+++ beast-20090428//./bse/Makefile.am  Thu May 14 13:03:04 2009
-@@ -56,7 +56,7 @@
-       bsenote.h               bsemidifile.h           bseblockutils.hh                \
-       bsecxxvalue.hh          bsecxxutils.hh          bsecxxbase.hh                   bsecxxclosure.hh \
-       bsecxxarg.hh            bsecxxmodule.hh         bsecxxplugin.hh                 bseloader.h \
--      bseresampler.hh         bseresamplerimpl.hh     \
-+      bseresampler.hh         bseresamplerimpl.hh     bsewin32.h \
- )
- # BSE C & C++ sources
- bse_sources = $(strip \
-@@ -94,7 +94,7 @@
-       bseloader-mad.c         bseloader-wav.c         \
-       bsebusmodule.cc         \
-       bsecore.cc              \
--      bseprobe.cc             \
-+      bseprobe.cc             bsewin32.cc             \
- )
- # BSE Synthesis Modules
- bse_idl_sources =
---- /dev/null  Thu May 14 13:31:15 2009
-+++ beast-20090428/bse/bsewin32.cc     Thu May 14 12:57:15 2009
-@@ -0,0 +1,74 @@
-+/* BSE - Bedevilled Sound Engine
-+ * Copyright (C) 2006 Stefan Westerfeld
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General
-+ * Public License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+/*
-+ * The notification stuff was adapted from glib's gmain.c (also LGPL,
-+ * see glib's AUTHORS file for individual authors).
-+ */
-+#include "bsewin32.h"
-+#include <windows.h>
-+
-+struct _BseWin32Waiter
-+{
-+  HANDLE wake_up_semaphore;
-+};
-+
-+extern "C" BseWin32Waiter *
-+bse_win32_waiter_new ()
-+{
-+  BseWin32Waiter *waiter = g_new0 (BseWin32Waiter, 1);
-+
-+  waiter->wake_up_semaphore = CreateSemaphore (NULL, 0, 100, NULL);
-+  if (waiter->wake_up_semaphore == NULL)
-+    g_error ("Cannot create wake-up semaphore: %s",
-+             g_win32_error_message (GetLastError ()));
-+
-+  return waiter;
-+}
-+
-+extern "C" void
-+bse_win32_waiter_destroy (BseWin32Waiter *waiter)
-+{
-+  CloseHandle (waiter->wake_up_semaphore);
-+}
-+
-+extern "C" void
-+bse_win32_waiter_wakeup (BseWin32Waiter *waiter)
-+{
-+  ReleaseSemaphore (waiter->wake_up_semaphore, 1, NULL);
-+}
-+
-+extern "C" int
-+bse_win32_waiter_wait (BseWin32Waiter *waiter,
-+                       int             timeout)
-+{
-+  HANDLE handles[1] = { waiter->wake_up_semaphore }; 
-+
-+  guint ready = WaitForMultipleObjects (1, handles, FALSE, timeout < 0 ? INFINITE : timeout);
-+  if (ready == WAIT_FAILED)
-+    {
-+      gchar *emsg = g_win32_error_message (GetLastError ());
-+      g_warning (G_STRLOC ": WaitForMultipleObjects() failed: %s", emsg);
-+      g_free (emsg);
-+
-+      return -1;
-+    }
-+  if (ready == WAIT_TIMEOUT)
-+    return 0;
-+  return 1;
-+}
---- /dev/null  Thu May 14 13:31:19 2009
-+++ beast-20090428/bse/bsewin32.h      Thu May 14 12:57:13 2009
-@@ -0,0 +1,35 @@
-+/* BSE - Bedevilled Sound Engine
-+ * Copyright (C) 2006 Stefan Westerfeld
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General
-+ * Public License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+#ifndef __BSE_WIN32_H__
-+#define __BSE_WIN32_H__
-+
-+#include <bse/bsedefs.h>
-+
-+G_BEGIN_DECLS
-+
-+typedef struct _BseWin32Waiter BseWin32Waiter;
-+
-+BseWin32Waiter *bse_win32_waiter_new ();
-+void            bse_win32_waiter_destroy (BseWin32Waiter *waiter);
-+void          bse_win32_waiter_wakeup (BseWin32Waiter *waiter);
-+int           bse_win32_waiter_wait (BseWin32Waiter *waiter, int timeout);
-+
-+G_END_DECLS
-+
-+#endif /* __BSE_BLOCK_UTILS_H__ */
diff --git a/013_doxer_portability.diff b/013_doxer_portability.diff
deleted file mode 100644 (file)
index dd33a80..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- ../orig/beast-20090519//./doxer/Config.py  2009-05-19 10:28:34 +0000
-+++ beast-20090519//./doxer/Config.py  2009-05-20 16:54:57 +0000
-@@ -17,11 +17,12 @@
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- import sys
-+import tempfile
- # --- constants ---
- init_dict = {
-   'CONFIG_VERSION'      : 0.6,
--  'TMP_DIR'           : '/tmp',
-+  'TMP_DIR'           : tempfile.gettempdir(),
- }
- # --- constant dictionary ---
---- ../orig/beast-20090519//./doxer/doxer.py   2009-05-19 10:28:34 +0000
-+++ beast-20090519//./doxer/doxer.py   2009-05-20 14:10:04 +0000
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python2.4
-+#!/usr/bin/env python
- #
- # Doxer - Software documentation system
- # Copyright (C) 2005-2006 Tim Janik
diff --git a/014_scmoff_docoff_relocate.diff b/014_scmoff_docoff_relocate.diff
deleted file mode 100644 (file)
index 8ac3c81..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-diff -ru orig/beast-20090519/Makefile.am src/beast-20090519/Makefile.am
---- orig/beast-20090519/Makefile.am    2009-05-19 10:28:27 +0000
-+++ src/beast-20090519/Makefile.am     2009-05-27 13:12:20 +0000
-@@ -4,7 +4,7 @@
- ## GNU Lesser General Public License version 2 or any later version.
- include $(top_srcdir)/Makefile.decl
--SUBDIRS = . data birnet sfi bse plugins shell beast-gtk launchers library tools po tests doxer docs web
-+SUBDIRS = . data birnet sfi bse plugins shell beast-gtk launchers library tools po tests doxer # docs web
- # require automake 1.9
- AUTOMAKE_OPTIONS = 1.9 dist-bzip2 no-dist-gzip
-diff -ru orig/beast-20090519/beast-gtk/bstmain.c src/beast-20090519/beast-gtk/bstmain.c
---- orig/beast-20090519/beast-gtk/bstmain.c    2009-05-30 16:08:31 +0000
-+++ src/beast-20090519/beast-gtk/bstmain.c     2009-05-29 18:32:13 +0000
-@@ -239,7 +239,7 @@
-     }
-   /* register BSE scripts */
--  if (register_scripts)
-+  if (0 && register_scripts)
-     {
-       bst_splash_update_entity (beast_splash, _("Scripts"));
-diff -ru orig/beast-20090519/bse/bsewin32.cc src/beast-20090519/bse/bsewin32.cc
---- orig/beast-20090519/bse/bsewin32.cc        2009-05-30 16:08:54 +0000
-+++ src/beast-20090519/bse/bsewin32.cc 2009-05-29 13:41:04 +0000
-@@ -22,6 +22,7 @@
-  */
- #include "bsewin32.h"
- #include <windows.h>
-+#include "topconfig.h"
- struct _BseWin32Waiter
- {
-@@ -72,3 +73,17 @@
-     return 0;
-   return 1;
- }
-+
-+extern "C" const char*
-+bse_path_relocate (const char *path)
-+{
-+  const char *result = path;
-+  const int prefix_len = strlen ("/c/beast");
-+  if (strncmp (path, "/c/beast", prefix_len) == 0)
-+    {
-+      char *relocated = g_strdup_printf ("c:/beast%s", path + prefix_len);
-+      result = g_intern_string (relocated);
-+      g_free (relocated);
-+    }
-+  return result;
-+}
-diff -ru orig/beast-20090519/bse/bsewin32.h src/beast-20090519/bse/bsewin32.h
---- orig/beast-20090519/bse/bsewin32.h 2009-05-30 16:08:54 +0000
-+++ src/beast-20090519/bse/bsewin32.h  2009-05-29 07:20:05 +0000
-@@ -20,6 +20,7 @@
- #define __BSE_WIN32_H__
- #include <bse/bsedefs.h>
-+#include <topconfig.h>           /* bse_path_relocate */
- G_BEGIN_DECLS
-diff -ru orig/beast-20090519/data/Makefile.am src/beast-20090519/data/Makefile.am
---- orig/beast-20090519/data/Makefile.am       2009-05-19 10:28:34 +0000
-+++ src/beast-20090519/data/Makefile.am        2009-05-29 07:23:23 +0000
-@@ -94,24 +94,29 @@
-       && echo "/* Generated data from $< (by make $@) */" > xgen-cph \
-       && echo >> xgen-cph \
-       && echo "#define SFIDL_PATH_STDINC        \"${sfidlstdincdir}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_BINARIES        \"${bindir}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_LADSPA          \"${bseladspapath}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_PLUGINS         \"${bseplugindir}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_DRIVERS         \"${bsedriverdir}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_DEMOS           \"${bsedemodir}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_SAMPLES         \"${bsesampledir}:${bseunversionedsampledir}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_EFFECTS         \"${bseeffectdir}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_INSTRUMENTS     \"${bseinstrumentdir}\"" >> xgen-cph \
--      && echo "#define BSE_PATH_SCRIPTS         \"${bsescriptdir}\"" >> xgen-cph \
-+      && echo "#define BSE_PATH_BINARIES        bse_path_relocate (\"${bindir}\")" >> xgen-cph \
-+      && echo "#define BSE_PATH_LADSPA          bse_path_relocate (\"${bseladspapath}\")" >> xgen-cph \
-+      && echo "#define BSE_PATH_PLUGINS         bse_path_relocate (\"${bseplugindir}\")" >> xgen-cph \
-+      && echo "#define BSE_PATH_DRIVERS         bse_path_relocate (\"${bsedriverdir}\")" >> xgen-cph \
-+      && echo "#define BSE_PATH_DEMOS           bse_path_relocate (\"${bsedemodir}\")" >> xgen-cph \
-+      && echo "#define BSE_PATH_SAMPLES         bse_path_relocate (\"${bsesampledir}:${bseunversionedsampledir}\")" >> xgen-cph \
-+      && echo "#define BSE_PATH_EFFECTS         bse_path_relocate (\"${bseeffectdir}\")" >> xgen-cph \
-+      && echo "#define BSE_PATH_INSTRUMENTS     bse_path_relocate (\"${bseinstrumentdir}\")" >> xgen-cph \
-+      && echo "#define BSE_PATH_SCRIPTS         bse_path_relocate (\"${bsescriptdir}\")" >> xgen-cph \
-       && echo "#define BSE_PATH_USER_DATA(dir)  \"${bseuserdatadir}\" dir" >> xgen-cph \
--      && echo "#define BST_PATH_BINARIES        \"${bindir}\"" >> xgen-cph \
--      && echo "#define BST_PATH_DOCS            \"${beastdocsdir}\"" >> xgen-cph \
--      && echo "#define BST_PATH_IMAGES          \"${beastimagesdir}\"" >> xgen-cph \
--      && echo "#define BST_PATH_LOCALE          \"${beastlocaledir}\"" >> xgen-cph \
--      && echo "#define BST_PATH_KEYS            \"${beastkeysdir}\"" >> xgen-cph \
--      && echo "#define BST_PATH_SKINS           \"${beastskinsdir}\"" >> xgen-cph \
--      && echo "#define BST_PATH_PREFIX          \"${prefix}\"" >> xgen-cph \
-+      && echo "#define BST_PATH_BINARIES        bse_path_relocate (\"${bindir}\")" >> xgen-cph \
-+      && echo "#define BST_PATH_DOCS            bse_path_relocate (\"${beastdocsdir}\")" >> xgen-cph \
-+      && echo "#define BST_PATH_IMAGES          bse_path_relocate (\"${beastimagesdir}\")" >> xgen-cph \
-+      && echo "#define BST_PATH_LOCALE          bse_path_relocate (\"${beastlocaledir}\")" >> xgen-cph \
-+      && echo "#define BST_PATH_KEYS            bse_path_relocate (\"${beastkeysdir}\")" >> xgen-cph \
-+      && echo "#define BST_PATH_SKINS           bse_path_relocate (\"${beastskinsdir}\")" >> xgen-cph \
-+      && echo "#define BST_PATH_PREFIX          bse_path_relocate (\"${prefix}\")" >> xgen-cph \
-       && echo >> xgen-cph \
-+      && echo "#ifdef __cplusplus" >> xgen-cph \
-+      && echo "extern \"C\"" >> xgen-cph \
-+      && echo "#endif" >> xgen-cph \
-+      && echo "const char *bse_path_relocate (const char *path);" >> xgen-cph \
-+      && echo >>xgen-cph \
-       && echo "/* Generated data ends here */" >> xgen-cph \
-       && (cp xgen-cph $@) \
-       && rm -f xgen-cph
-diff -ru orig/beast-20090519/shell/bsescm.c src/beast-20090519/shell/bsescm.c
---- orig/beast-20090519/shell/bsescm.c 2009-05-30 16:08:31 +0000
-+++ src/beast-20090519/shell/bsescm.c  2009-05-29 17:17:01 +0000
-@@ -50,7 +50,7 @@
- static gboolean        bse_scm_auto_play = TRUE;
- static SfiComPort     *bse_scm_port = NULL;
- static SfiGlueContext *bse_scm_context = NULL;
--static const gchar    *boot_script_path = BSE_PATH_SCRIPTS;
-+static const gchar    *boot_script_path = NULL; /* BSE_PATH_SCRIPTS */
- /* --- functions --- */
- static void
-@@ -67,7 +67,7 @@
-       char *argv[])
- {
-   const gchar *env_str;
--
-+  boot_script_path = BSE_PATH_SCRIPTS;
-   sfi_init (&argc, &argv, "BSESCM", NULL);
-   bse_init_textdomain_only();
-   setlocale (LC_ALL, "");
diff --git a/015_engine_wakeup_and_portaudio.diff b/015_engine_wakeup_and_portaudio.diff
deleted file mode 100644 (file)
index c1939dc..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
---- orig/beast-20090519//./bse/bseengine.c     2009-06-01 16:04:24 +0000
-+++ src/beast-20090519//./bse/bseengine.c      2009-06-01 16:08:36 +0000
-@@ -1339,8 +1339,9 @@
-                       guint            sample_freq,
-                       guint            control_freq)
- {
--  static BirnetMutex sync_mutex = { 0, };
--  static BirnetCond  sync_cond = { 0, };
-+  static BirnetMutex sync_mutex;
-+  static BirnetCond  sync_cond;
-+  static gboolean sync_mc_init = FALSE;
-   static gboolean sync_lock = FALSE;
-   guint block_size, control_raster, success = FALSE;
-   BseTrans *trans;
-@@ -1358,6 +1359,13 @@
-   if (_engine_mnl_head() || sync_lock)
-     return FALSE;
-   
-+  if (!sync_mc_init)
-+    {
-+      sfi_mutex_init (&sync_mutex);
-+      sfi_cond_init (&sync_cond);
-+      sync_mc_init = TRUE;
-+    }
-+ 
-   /* block master */
-   GSL_SPIN_LOCK (&sync_mutex);
-   job = sfi_new_struct0 (BseJob, 1);
-@@ -1444,6 +1452,8 @@
-     {
- #ifndef WIN32
-       gint err = pipe (master_data.wakeup_pipe);
-+#else
-+      master_data.win32_waiter = bse_win32_waiter_new();
- #endif
-       master_data.user_thread = sfi_thread_self ();
- #ifndef WIN32
-@@ -1477,11 +1487,15 @@
- {
-   if (master_thread)
-     {
-+#ifndef WIN32
-       guint8 data = 'W';
-       gint l;
-       do
-       l = write (master_data.wakeup_pipe[1], &data, 1);
-       while (l < 0 && (errno == EINTR || errno == ERESTART));
-+#else
-+      bse_win32_waiter_wakeup (master_data.win32_waiter);
-+#endif
-     }
- }
---- orig/beast-20090519//./bse/bseenginemaster.c       2009-06-01 16:04:24 +0000
-+++ src/beast-20090519//./bse/bseenginemaster.c        2009-06-01 15:38:23 +0000
-@@ -1181,6 +1181,9 @@
-           loop.revents_filled = TRUE;
-         else if (errno != EINTR)
-           g_printerr ("%s: poll() error: %s\n", G_STRFUNC, g_strerror (errno));
-+#else
-+        bse_win32_waiter_wait (mdata->win32_waiter, loop.timeout);
-+        loop.revents_filled = TRUE;
- #endif
-         if (loop.revents_filled)
-           need_dispatch = _engine_master_check (&loop);
-@@ -1188,7 +1191,7 @@
-       
-       if (need_dispatch)
-       _engine_master_dispatch ();
--      
-+#ifndef WIN32
-       /* clear wakeup pipe */
-       {
-       guint8 data[64];
-@@ -1197,6 +1200,7 @@
-         l = read (mdata->wakeup_pipe[0], data, sizeof (data));
-       while ((l < 0 && errno == EINTR) || l == sizeof (data));
-       }
-+#endif
-       
-       /* wakeup user thread if necessary */
-       if (bse_engine_has_garbage ())
---- orig/beast-20090519//./bse/bseenginemaster.h       2009-05-19 10:28:31 +0000
-+++ src/beast-20090519//./bse/bseenginemaster.h        2009-06-01 15:46:21 +0000
-@@ -18,6 +18,7 @@
- #define __BSE_ENGINE_MASTER_H__
- #include <bse/bseengine.h>
-+#include <bse/bsewin32.h>
- G_BEGIN_DECLS
-@@ -28,7 +29,11 @@
- void          _engine_master_dispatch         (void);
- typedef struct {
-   BirnetThread *user_thread;
-+#ifndef WIN32
-   gint       wakeup_pipe[2];  /* read(wakeup_pipe[0]), write(wakeup_pipe[1]) */
-+#else
-+  BseWin32Waiter *win32_waiter;
-+#endif
- } EngineMasterData;
- void          bse_engine_master_thread        (EngineMasterData       *mdata);
---- orig/beast-20090519//./drivers/bse-portaudio/bsepcmdevice-portaudio.cc     2009-05-19 10:28:35 +0000
-+++ src/beast-20090519//./drivers/bse-portaudio/bsepcmdevice-portaudio.cc      2009-06-01 16:17:43 +0000
-@@ -29,7 +29,7 @@
- using std::vector;
- using std::max;
--static BIRNET_MSG_TYPE_DEFINE (debug_pcm, "pcm", BIRNET_MSG_DEBUG, NULL);
-+static SFI_MSG_TYPE_DEFINE (debug_pcm, "pcm", SFI_MSG_DEBUG, NULL);
- #define DEBUG(...) sfi_debug (debug_pcm, __VA_ARGS__)
-@@ -54,7 +54,7 @@
- /* --- define object type and export to BSE --- */
- static const char type_blurb[] = ("PCM driver implementation using PortAudio (http://www.portaudio.com)");
- BSE_REGISTER_OBJECT (BsePcmDevicePortAudio, BsePcmDevice, NULL, "", type_blurb, NULL, bse_pcm_device_port_audio_class_init, NULL, bse_pcm_device_port_audio_init);
--BSE_DEFINE_EXPORTS (__FILE__);
-+BSE_DEFINE_EXPORTS();
- /* --- variables --- */
- static gpointer parent_class = NULL;
---- orig/beast-20090519//./drivers/bse-portaudio/Makefile.am   2009-05-19 10:28:35 +0000
-+++ src/beast-20090519//./drivers/bse-portaudio/Makefile.am    2009-05-31 10:21:54 +0000
-@@ -13,8 +13,8 @@
- # extra dependancies
- configure: acbeast.m4
--drivers_ldflags     = -avoid-version
--drivers_libs        = $(BSE_LIBS)
-+drivers_ldflags     = -avoid-version -no-undefined
-+drivers_libs        = $(BSE_LIBS) -lsfi
- driversdir          = $(bsedriverinstalldir)
- drivers_LTLIBRARIES = bsepcmdevice-portaudio.la
diff --git a/016_relocate_via_exename.diff b/016_relocate_via_exename.diff
deleted file mode 100644 (file)
index ff8e16d..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-diff -ru ./bse/bsewin32.cc /c/beastbuild/src/beast-20090519/bse/bsewin32.cc
---- ./bse/bsewin32.cc  2009-06-10 11:53:28 +0000
-+++ /c/beastbuild/src/beast-20090519/bse/bsewin32.cc   2009-06-09 18:52:51 +0000
-@@ -74,6 +74,32 @@
-   return 1;
- }
-+static void
-+transform_bslash_to_slash (char *buffer)
-+{
-+  while (*buffer)
-+    {
-+      if (*buffer == '\\')
-+      *buffer = '/';
-+      buffer++;
-+    }
-+}
-+
-+static void
-+cut_last_name_component (char *buffer, int times)
-+{
-+  while (times--)
-+    {
-+      char *delim = buffer;
-+      for (char *i = buffer; *i; i++)
-+      {
-+        if (*i == '/')
-+          delim = i;
-+      }
-+      *delim = 0;
-+    }
-+}
-+
- extern "C" const char*
- bse_path_relocate (const char *path)
- {
-@@ -81,7 +107,11 @@
-   const int prefix_len = strlen ("/c/beast");
-   if (strncmp (path, "/c/beast", prefix_len) == 0)
-     {
--      char *relocated = g_strdup_printf ("c:/beast%s", path + prefix_len);
-+      char buffer[512];
-+      GetModuleFileName(NULL, buffer, sizeof(buffer));
-+      transform_bslash_to_slash (buffer);
-+      cut_last_name_component (buffer, 2);
-+      char *relocated = g_strdup_printf ("%s%s", buffer, path + prefix_len);
-       result = g_intern_string (relocated);
-       g_free (relocated);
-     }
diff --git a/017_make_j6_win_bse.diff b/017_make_j6_win_bse.diff
deleted file mode 100644 (file)
index b23621e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- beast-20090519/bse/Makefile.am     2009-07-27 07:12:47 +0000
-+++ nbeast-20090519/bse/Makefile.am    2009-07-26 19:05:53 +0000
-@@ -279,7 +279,7 @@
- # this file describes the BSE public API and needs to be generated at the
- # end of the build process
- #
--bsehack.idl: bsecore.idl bseprocidl
-+bsehack.idl: bsecore.idl bseprocidl$(EXEEXT)
-       grep -v bsehack.idl $(srcdir)/bse.idl | $(SFIDL) $(SFIDL_INC) --list-types - > xgen-2-$(@F)
-       echo "/* this file was generated from make $< */" > xgen-$(@F) \
-       && ./bseprocidl xgen-2-$(@F) >> xgen-$(@F) \
diff --git a/attic/000a_configure_ogg_vorbis.diff b/attic/000a_configure_ogg_vorbis.diff
new file mode 100644 (file)
index 0000000..0305caf
--- /dev/null
@@ -0,0 +1,25 @@
+diff --git a/configure.in b/configure.in
+index e9b3faa..ab669ef 100644
+--- a/configure.in
++++ b/configure.in
+@@ -219,19 +219,7 @@ AC_DEFUN([AC_BSE_REQUIREMENTS],
+     AC_DEFINE_UNQUOTED(BSE_VERSION, "$BSE_VERSION", [BSE Version])
+     dnl # --- Ogg/Vorbis check ---
+-    OV_LIBS=
+-    ov_tests=0
+-    AC_CHECK_LIB(vorbisfile, ogg_stream_reset_serialno,
+-      [AC_CHECK_HEADER(ogg/ogg.h, ov_tests=`expr $ov_tests + 1`)]
+-      [AC_CHECK_HEADER(vorbis/vorbisfile.h, ov_tests=`expr $ov_tests + 1`)]
+-      [AC_CHECK_HEADER(vorbis/vorbisenc.h, ov_tests=`expr $ov_tests + 1`)]
+-      ,
+-      ov_tests=0, -lvorbisenc -lvorbis -logg)
+-    if test $ov_tests = 3 ; then
+-      OV_LIBS="-lvorbisfile -lvorbisenc -lvorbis -logg"
+-    else
+-      AC_MSG_WARN([failed to detect Ogg/Vorbis library (>=1.0) or headers])
+-    fi
++    PKG_CHECK_MODULES(OV, ogg >= 1.0.0 vorbis >= 1.0.0 vorbisfile >= 1.0.0 vorbisenc >= 1.0.0)
+     
+     dnl # --- libmad MPEG decoder check ---
+     dnl # libmad doesn't come with a mad.pc file (just its debian package)
diff --git a/attic/002_poll_constants.diff b/attic/002_poll_constants.diff
new file mode 100644 (file)
index 0000000..7c33fbe
--- /dev/null
@@ -0,0 +1,57 @@
+diff -ur orig/beast-20090428/birnet/configure.inc beast-20090428/birnet/configure.inc
+--- orig/beast-20090428/birnet/configure.inc   Tue Apr 28 17:28:03 2009
++++ beast-20090428/birnet/configure.inc        Sat May  2 16:24:51 2009
+@@ -42,25 +42,6 @@
+     BIRNET_SIZEOF_LONG="$glib_cv_sizeof_birnet_long"
+     AC_SUBST(BIRNET_SIZEOF_LONG) dnl # for birnetconfig.h
+-    dnl # --- POLL* ---
+-    poll_headers=["
+-      #define _GNU_SOURCE
+-      #include <sys/types.h>
+-      #include <sys/poll.h>
+-    "]
+-    AC_MSG_CHECKING([for POLL constants])
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLIN],     $poll_headers)
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLPRI],    $poll_headers)
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLOUT],    $poll_headers)
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLRDNORM], $poll_headers) # needs _GNU_SOURCE on linux
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLRDBAND], $poll_headers) # needs _GNU_SOURCE on linux
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLWRNORM], $poll_headers) # needs _GNU_SOURCE on linux
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLWRBAND], $poll_headers) # needs _GNU_SOURCE on linux
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLERR],    $poll_headers)
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLHUP],    $poll_headers)
+-    BIRNET_SUBST_COMPUTED_SYSVAL([POLLNVAL],   $poll_headers)
+-    AC_MSG_RESULT([done])
+-
+     dnl # --- OS/Win32 detection ---
+     dnl # needs AC_CANONICAL_HOST
+     test -z "$host" && {
+@@ -82,6 +63,27 @@
+     AC_SUBST(BIRNET_OS)
+     AC_SUBST(BIRNET_OS_CHOICES)
+     AC_DEFINE_UNQUOTED(BIRNET_OS_$BIRNET_OS, "1", [Win32 detection])
++
++    if test "$BIRNET_OS" != "WIN32"; then
++      dnl # --- POLL* ---
++      poll_headers=["
++      #define _GNU_SOURCE
++      #include <sys/types.h>
++      #include <sys/poll.h>
++      "]
++      AC_MSG_CHECKING([for POLL constants])
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLIN],     $poll_headers)
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLPRI],    $poll_headers)
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLOUT],    $poll_headers)
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLRDNORM], $poll_headers) # needs _GNU_SOURCE on linux
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLRDBAND], $poll_headers) # needs _GNU_SOURCE on linux
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLWRNORM], $poll_headers) # needs _GNU_SOURCE on linux
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLWRBAND], $poll_headers) # needs _GNU_SOURCE on linux
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLERR],    $poll_headers)
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLHUP],    $poll_headers)
++      BIRNET_SUBST_COMPUTED_SYSVAL([POLLNVAL],   $poll_headers)
++      AC_MSG_RESULT([done])
++    fi
+     dnl # --- sizeof threading structs ---
+     GLIB_SIZEOF([#include <pthread.h>], pthread_mutex_t, pth_mutex_t)
diff --git a/attic/004b_birnet_os.diff b/attic/004b_birnet_os.diff
new file mode 100644 (file)
index 0000000..7f13bb0
--- /dev/null
@@ -0,0 +1,787 @@
+diff --git a/birnet/Makefile.am b/birnet/Makefile.am
+index 3bfb462..9757012 100644
+--- a/birnet/Makefile.am
++++ b/birnet/Makefile.am
+@@ -5,7 +5,7 @@
+ include $(top_srcdir)/Makefile.decl
+ SUBDIRS               = . tests
+-INCLUDES       += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(BIRNET_CFLAGS)
++INCLUDES       += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(CFLAGS) $(BIRNET_CFLAGS)
+ DEFS            = -DBIRNET_LOG_DOMAIN=\"BIRNET\" -D_BIRNET_SOURCE_EXTENSIONS
+ GLIB_MKENUMS    = glib-mkenums
+@@ -34,6 +34,12 @@ birnet_sources = $(strip            \
+       birnetutf8.cc                   \
+       birnetutils.cc                  \
+ )
++if BIRNET_OS_WIN32
++birnet_sources += birnetoswin32.cc
++endif
++if BIRNET_OS_UNIX
++birnet_sources += birnetosunix.cc
++endif
+ birnet_private_headers = $(strip      \
+       birnetsignalslot.hh             \
+       birnetsignaltemplate.hh         \
+diff --git a/birnet/birnet.hh b/birnet/birnet.hh
+index c8c1127..279091b 100644
+--- a/birnet/birnet.hh
++++ b/birnet/birnet.hh
+@@ -20,6 +20,7 @@
+ #include <birnet/birnetconfig.h>
+ #include <birnet/birnetcpu.hh>
+ #include <birnet/birnetdebugtools.hh>
++#include <birnet/birnetos.hh>
+ #include <birnet/birnetmsg.hh>
+diff --git a/birnet/birnetcpu.cc b/birnet/birnetcpu.cc
+index 5c4ffb5..ba49ce8 100644
+--- a/birnet/birnetcpu.cc
++++ b/birnet/birnetcpu.cc
+@@ -16,6 +16,7 @@
+  */
+ #include <glib.h>
+ #include "birnetcpu.hh"
++#include "birnetos.hh"
+ #include <setjmp.h>
+ #include <signal.h>
+ #include <string.h>
+@@ -196,24 +197,7 @@ get_x86_cpu_features (CPUInfo *ci,
+   /* check system support for SSE */
+   if (ci->x86_sse)
+     {
+-      struct sigaction action, old_action;
+-      action.sa_handler = cpu_info_sigill_handler;
+-      sigemptyset (&action.sa_mask);
+-      action.sa_flags = SA_NOMASK;
+-      sigaction (SIGILL, &action, &old_action);
+-      if (setjmp (cpu_info_jmp_buf) == 0)
+-        {
+-          unsigned int mxcsr;
+-          __asm__ __volatile__ ("stmxcsr %0 ; sfence ; emms" : "=m" (mxcsr));
+-          /* executed SIMD instructions without exception */
+-          ci->x86_ssesys = true;
+-        }
+-      else
+-        {
+-          /* signal handler jumped here */
+-          // g_printerr ("caught SIGILL\n");
+-        }
+-      sigaction (SIGILL, &old_action, NULL);
++      ci->x86_ssesys = OS::check_sse_sys();
+     }
+   return true;
+diff --git a/birnet/birnetdebugtools.cc b/birnet/birnetdebugtools.cc
+index d8b5739..1ac3df1 100644
+--- a/birnet/birnetdebugtools.cc
++++ b/birnet/birnetdebugtools.cc
+@@ -16,7 +16,6 @@
+  */
+ #include "birnetdebugtools.hh"
+ #include "birnetthread.hh"
+-#include <syslog.h>
+ #include <errno.h>
+ #ifndef _ // FIXME
+diff --git a/birnet/birnetmsg.cc b/birnet/birnetmsg.cc
+index 0ae96ae..f2e9b85 100644
+--- a/birnet/birnetmsg.cc
++++ b/birnet/birnetmsg.cc
+@@ -17,7 +17,7 @@
+ #include <glib.h>
+ #include "birnetmsg.hh"
+ #include "birnetthread.hh"
+-#include <syslog.h>
++#include "birnetos.hh"
+ #include <errno.h>
+ #include <string.h>
+@@ -494,13 +494,13 @@ Msg::display_parts (const char         *domain,
+     {
+       String prefix = log_prefix ("", 0, domain, "", ident);
+       if (title.size() && false) // skip title in syslog
+-        syslog (msg_syslog_priority, "%s:0: %s\n", prefix.c_str(), title.c_str());
++        OS::syslog (msg_syslog_priority, "%s:0: %s\n", prefix.c_str(), title.c_str());
+       if (primary.size())
+-        syslog (msg_syslog_priority, "%s:1: %s\n", prefix.c_str(), primary.c_str());
++        OS::syslog (msg_syslog_priority, "%s:1: %s\n", prefix.c_str(), primary.c_str());
+       if (secondary.size())
+-        syslog (msg_syslog_priority, "%s:2: %s\n", prefix.c_str(), secondary.c_str());
++        OS::syslog (msg_syslog_priority, "%s:2: %s\n", prefix.c_str(), secondary.c_str());
+       if (details.size() && false) // skip details in syslog
+-        syslog (msg_syslog_priority, "%s:3: %s\n", prefix.c_str(), details.c_str());
++        OS::syslog (msg_syslog_priority, "%s:3: %s\n", prefix.c_str(), details.c_str());
+     }
+   /* log to logfile */
+   if (msg_log_file && (actions & LOG_TO_STDLOG))
+diff --git a/birnet/birnetos.hh b/birnet/birnetos.hh
+new file mode 100644
+index 0000000..5dfeff8
+--- /dev/null
++++ b/birnet/birnetos.hh
+@@ -0,0 +1,65 @@
++/* BirnetOS
++ * Copyright (C) 2009 Stefan Westerfeld
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * A copy of the GNU Lesser General Public License should ship along
++ * with this library; if not, see http://www.gnu.org/copyleft/.
++ */
++#ifndef __BIRNET_OS_HH__
++#define __BIRNET_OS_HH__
++
++#include <birnet/birnetutils.hh>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <unistd.h>
++
++namespace Birnet {
++
++namespace OS {
++
++/* --- functions --- */
++int   get_thread_priority (int thread_id);
++bool  check_sse_sys();
++void  syslog (int priority, const char *format, ...);
++void  raise_sigtrap();
++int   getpid();
++void  memset4 (uint32 *mem, uint32 filler, uint length); 
++
++// stat
++int   lstat (const char *path, struct stat *buf);
++bool  stat_is_socket (mode_t mode);        /* S_ISSOCK */
++bool  stat_is_link (mode_t mode);          /* S_ISLNK */
++
++// (at least) 48-bit random number generator
++void  srand48 (int32 seedval);
++int32 lrand48();
++
++// printf formatting
++int   vasprintf (char **strp, const char *fmt, va_list ap);
++
++// errno
++int   strerror_r (int errnum, char *buf, size_t buflen);
++
++} // OS
++
++// permissions
++extern int OS_S_IXGRP;
++extern int OS_S_IXOTH;
++
++// some errno values are not supported by every system
++extern int OS_ENOTBLK;
++extern int OS_ENOTSOCK;
++
++} // Birnet
++
++#endif /* __BIRNET_OS_HH__ */
++/* vim:set ts=8 sts=2 sw=2: */
+diff --git a/birnet/birnetosunix.cc b/birnet/birnetosunix.cc
+new file mode 100644
+index 0000000..5c002fa
+--- /dev/null
++++ b/birnet/birnetosunix.cc
+@@ -0,0 +1,183 @@
++/* BirnetOSUnix
++ * Copyright (C) 2009 Stefan Westerfeld
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * A copy of the GNU Lesser General Public License should ship along
++ * with this library; if not, see http://www.gnu.org/copyleft/.
++ */
++#include "birnetos.hh"
++#include <sys/time.h>
++#include <sys/resource.h>
++#include <signal.h>
++#include <setjmp.h>
++#include <glib.h>
++#include <stdlib.h>
++#include <stdarg.h>
++#include <syslog.h>
++#include <errno.h>
++#include <string.h>
++
++namespace Birnet {
++namespace OS {
++
++int
++get_thread_priority (int thread_id)
++{
++  return getpriority (PRIO_PROCESS, thread_id);
++}
++
++static jmp_buf check_sse_sys_jmp_buf;
++
++static void BIRNET_NORETURN
++check_sse_sys_sigill_handler (int dummy)
++{
++  longjmp (check_sse_sys_jmp_buf, 1);
++}
++
++bool
++check_sse_sys()
++{
++  struct sigaction action, old_action;
++  bool x86_ssesys = false;
++
++  action.sa_handler = check_sse_sys_sigill_handler;
++  sigemptyset (&action.sa_mask);
++  action.sa_flags = SA_NOMASK;
++  sigaction (SIGILL, &action, &old_action);
++  if (setjmp (check_sse_sys_jmp_buf) == 0)
++    {
++      unsigned int mxcsr;
++      __asm__ __volatile__ ("stmxcsr %0 ; sfence ; emms" : "=m" (mxcsr));
++      /* executed SIMD instructions without exception */
++      x86_ssesys = true;
++    }
++  else
++    {
++      /* signal handler jumped here */
++      // g_printerr ("caught SIGILL\n");
++    }
++  sigaction (SIGILL, &old_action, NULL);
++  return x86_ssesys;
++}
++
++void
++raise_sigtrap ()
++{
++  raise (SIGTRAP);
++}
++
++void
++memset4 (guint32   *mem,
++         guint32    filler,
++         guint      length) 
++{
++  BIRNET_STATIC_ASSERT (sizeof (*mem) == 4);
++  BIRNET_STATIC_ASSERT (sizeof (filler) == 4);
++  BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
++  wmemset ((wchar_t*) mem, filler, length);
++}
++
++// (at least) 48-bit random number generator
++void
++srand48 (int32 seedval)
++{
++  ::srand48 (seedval);
++}
++
++int32
++lrand48()
++{
++  return ::lrand48();
++}
++
++int
++getpid()
++{
++  return ::getpid();
++}
++
++int
++strerror_r (int errnum, char *buf, size_t buflen)
++{
++  char *result = ::strerror_r (errnum, buf, buflen);
++  if (!result)
++    {
++      errno = EINVAL;
++      return -1;
++    }
++  if (result != buf)
++    {
++      if (strlen (result) + 1 < buflen)
++      {
++        strcpy (buf, result);
++        return 0;
++      }
++      else
++      {
++        errno = ERANGE;
++      }
++    }
++  else
++    {
++      return 0;
++    }
++  return -1;
++}
++
++void
++syslog (int priority, char const* format, ...)
++{
++  va_list ap;
++
++  va_start(ap, format);
++  vsyslog (priority, format, ap);
++  va_end(ap);
++}
++
++int
++lstat (const char  *path,
++       struct stat *buf)
++{
++  return ::lstat (path, buf);
++}
++
++bool
++stat_is_socket (mode_t mode)
++{
++  return S_ISSOCK (mode);
++}
++
++bool
++stat_is_link (mode_t mode)
++{
++  return S_ISLNK (mode);
++}
++
++int
++vasprintf (char **strp, const char *fmt, va_list ap)
++{
++  return ::vasprintf (strp, fmt, ap);
++}
++
++} // OS
++
++// permissions
++int OS_S_IXGRP = S_IXGRP;
++int OS_S_IXOTH = S_IXOTH;
++
++// some errno values are not supported by every system
++int OS_ENOTBLK = ENOTBLK;
++int OS_ENOTSOCK = ENOTSOCK;
++
++
++} // Birnet
++
+diff --git a/birnet/birnetoswin32.cc b/birnet/birnetoswin32.cc
+new file mode 100644
+index 0000000..5006381
+--- /dev/null
++++ b/birnet/birnetoswin32.cc
+@@ -0,0 +1,151 @@
++/* BirnetOSWin32
++ * Copyright (C) 2009 Stefan Westerfeld
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Lesser General Public License for more details.
++ *
++ * A copy of the GNU Lesser General Public License should ship along
++ * with this library; if not, see http://www.gnu.org/copyleft/.
++ */
++#include "birnetos.hh"
++#include <glib.h>
++#include <glib/gprintf.h>
++#include <process.h>
++#include <sys/stat.h>
++
++namespace Birnet {
++namespace OS {
++
++void
++raise_sigtrap()
++{
++  G_BREAKPOINT();
++}
++
++int
++get_thread_priority (int thread_id)
++{
++  /* FIXME */
++  return 0;
++}
++
++bool
++check_sse_sys()
++{
++  return true;
++}
++
++void
++syslog (int priority, char const* format, ...)
++{
++  /* FIXME: */
++  g_error ("syslog is not supported on windows\n");
++}
++
++static inline GRand *
++grandom48()
++{
++  static GRand *r48 = NULL;
++  if (BIRNET_UNLIKELY (!r48))
++    r48 = g_rand_new();
++  return r48;
++}
++
++// (at least) 48-bit random number generator
++void
++srand48 (int32 seedval)
++{
++  g_rand_set_seed (grandom48(), seedval);
++}
++
++int32
++lrand48()
++{
++  return g_rand_int (grandom48());
++}
++
++int
++getpid()
++{
++  return _getpid();
++}
++
++int
++lstat (const char  *path,
++       struct stat *buf)
++{
++  return ::stat (path, buf);
++}
++
++bool
++stat_is_socket (mode_t mode)
++{
++  return false;
++}
++
++bool
++stat_is_link (mode_t mode)
++{
++  return false;
++}
++
++int
++vasprintf (char **strp, const char *fmt, va_list ap)
++{
++  return g_vasprintf (strp, fmt, ap);
++}
++
++/* MSDN recommends using strerror_s as threadsafe replacement for strerror, however it seems to
++   be impossible to use it from mingw gcc, so we reimplement a threadsafe version
++*/
++int
++strerror_r (int errnum, char *buf, size_t buflen)
++{
++  if (errnum >= 0 && errnum < _sys_nerr)
++    {
++      char *err_msg = _sys_errlist[errnum];
++      size_t len = strlen (err_msg);
++      if (len < buflen)
++      {
++        strcpy (buf, err_msg);
++        errno = 0;
++        return 0;
++      }
++      else
++      {
++        errno = ERANGE;
++      }
++    }
++  else
++    {
++      errno = EINVAL;
++    }
++  return -1;
++}
++
++void
++memset4 (uint32 *mem, uint32 filler, uint length)
++{
++  while (length--)
++    *mem++ = filler;
++}
++
++} // OS
++
++/* fake errno values */
++int OS_ENOTBLK  = 1000;
++int OS_ENOTSOCK = 1001;
++
++/* fake permissions */
++int OS_S_IXOTH = 0;
++int OS_S_IXGRP = 0;
++
++} // Birnet
++/* vim:set ts=8 sts=2 sw=2: */
+diff --git a/birnet/birnetthreadimpl.cc b/birnet/birnetthreadimpl.cc
+index e06f4fe..60f23c9 100644
+--- a/birnet/birnetthreadimpl.cc
++++ b/birnet/birnetthreadimpl.cc
+@@ -23,19 +23,16 @@
+ #define       _XOPEN_SOURCE   600     /* for full pthread facilities */
+ #endif        /* defining _XOPEN_SOURCE on random systems can have bad effects */
+ #include <glib.h>
+-#include <sys/time.h>
+-#include <sched.h>
+ #include <unistd.h>     /* sched_yield() */
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <errno.h>
+ #include <string.h>
+-#include <sys/resource.h>
+ #include <sys/time.h>
+-#include <sys/times.h>
+ #include "birnetutils.hh"
+ #include "birnetthread.hh"
++#include "birnetos.hh"
+ #define FLOATING_FLAG                           (1 << 31)
+ #define THREAD_REF_COUNT(thread)                (thread->ref_field & ~FLOATING_FLAG)
+@@ -906,7 +903,7 @@ birnet_thread_accounting_L (BirnetThread *self,
+       gint64 old_cstime = self->ac.cstime;
+       gdouble dfact = 1000000.0 / MAX (diff, 1);
+       self->ac.stamp = stamp;
+-      if (0)
++#if 0
+         {
+           struct rusage res = { { 0 } };
+           getrusage (RUSAGE_SELF, &res);
+@@ -916,8 +913,9 @@ birnet_thread_accounting_L (BirnetThread *self,
+           self->ac.cutime = timeval_usecs (&res.ru_utime);
+           self->ac.cstime = timeval_usecs (&res.ru_stime);
+         }
++#endif
+       thread_info_from_stat_L (self, dfact);
+-      self->info.priority = getpriority (PRIO_PROCESS, self->tid);
++      self->info.priority = OS::get_thread_priority (self->tid); 
+       self->info.utime = int64 (MAX (self->ac.utime - old_utime, 0) * dfact);
+       self->info.stime = int64 (MAX (self->ac.stime - old_stime, 0) * dfact);
+       self->info.cutime = int64 (MAX (self->ac.cutime - old_cutime, 0) * dfact);
+diff --git a/birnet/birnetutils.cc b/birnet/birnetutils.cc
+index 7d6dee3..d2e58d2 100644
+--- a/birnet/birnetutils.cc
++++ b/birnet/birnetutils.cc
+@@ -20,6 +20,7 @@
+ #include "birnetthread.hh"
+ #include "birnetmsg.hh"
+ #include "birnetcpu.hh"
++#include "birnetos.hh"
+ #include <errno.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -187,8 +188,8 @@ birnet_init (int        *argcp,
+   {
+     struct timeval tv;
+     gettimeofday (&tv, NULL);
+-    srand48 (tv.tv_usec + (tv.tv_sec << 16));
+-    srand (lrand48());
++    OS::srand48 (tv.tv_usec + (tv.tv_sec << 16));
++    srand (OS::lrand48());
+   }
+   /* initialize sub systems */
+@@ -257,11 +258,6 @@ BIRNET_STATIC_ASSERT (LDBL_MAX     >= 1E+37);
+ BIRNET_STATIC_ASSERT (LDBL_EPSILON <= 1E-9);
+ /* --- assertions/warnings/errors --- */
+-void
+-raise_sigtrap ()
+-{
+-  raise (SIGTRAP);
+-}
+ static void
+ stderr_print (bool        bail_out,
+@@ -430,7 +426,7 @@ string_vprintf (const char *format,
+                 va_list     vargs)
+ {
+   char *str = NULL;
+-  if (vasprintf (&str, format, vargs) >= 0 && str)
++  if (OS::vasprintf (&str, format, vargs) >= 0 && str)
+     {
+       String s = str;
+       free (str);
+@@ -609,7 +605,7 @@ string_from_errno (int errno_val)
+ {
+   char buffer[1024] = { 0, };
+   /* strerror_r() is broken on GNU systems, especially if _GNU_SOURCE is defined, so fall back to strerror() */
+-  if (strerror_r (errno_val, buffer, sizeof (buffer)) < 0 || !buffer[0])
++  if (OS::strerror_r (errno_val, buffer, sizeof (buffer)) < 0 || !buffer[0])
+     return strerror (errno_val);
+   return buffer;
+ }
+@@ -738,7 +734,7 @@ errno_check_file (const char *file_name,
+       
+       if (check_link)
+         {
+-          if (lstat (file_name, &st) < 0)
++          if (OS::lstat (file_name, &st) < 0)
+             return -errno;
+         }
+       else if (stat (file_name, &st) < 0)
+@@ -749,11 +745,11 @@ errno_check_file (const char *file_name,
+                     file_name, mode,
+                     S_ISREG (st.st_mode) ? "f" : "",
+                     S_ISDIR (st.st_mode) ? "d" : "",
+-                    S_ISLNK (st.st_mode) ? "l" : "",
++                    OS::stat_is_link (st.st_mode) ? "l" : "",
+                     S_ISCHR (st.st_mode) ? "c" : "",
+                     S_ISBLK (st.st_mode) ? "b" : "",
+                     S_ISFIFO (st.st_mode) ? "p" : "",
+-                    S_ISSOCK (st.st_mode) ? "s" : "");
++                    OS::stat_is_socket (st.st_mode) ? "s" : "");
+       
+       if (S_ISDIR (st.st_mode) && (check_file || check_link || check_char || check_block || check_pipe))
+         return -EISDIR;
+@@ -761,17 +757,17 @@ errno_check_file (const char *file_name,
+         return -EINVAL;
+       if (check_dir && !S_ISDIR (st.st_mode))
+         return -ENOTDIR;
+-      if (check_link && !S_ISLNK (st.st_mode))
++      if (check_link && !OS::stat_is_link (st.st_mode))
+         return -EINVAL;
+       if (check_char && !S_ISCHR (st.st_mode))
+         return -ENODEV;
+       if (check_block && !S_ISBLK (st.st_mode))
+-        return -ENOTBLK;
++        return -OS_ENOTBLK;
+       if (check_pipe && !S_ISFIFO (st.st_mode))
+         return -ENXIO;
+-      if (check_socket && !S_ISSOCK (st.st_mode))
+-        return -ENOTSOCK;
+-      if (check_exec && !(st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
++      if (check_socket && !OS::stat_is_socket (st.st_mode))
++        return -OS_ENOTSOCK;
++      if (check_exec && !(st.st_mode & (S_IXUSR | OS_S_IXGRP | OS_S_IXOTH)))
+         return -EACCES; /* for root executable, any +x bit is good enough */
+     }
+   
+@@ -1224,7 +1220,7 @@ url_create_redirect (const char    *url,
+   while (fd < 0)
+     {
+       g_free (tname);
+-      tname = g_strdup_printf ("/tmp/Url%08X%04X.html", (int) lrand48(), getpid());
++      tname = g_strdup_printf ("/tmp/Url%08X%04X.html", (int) OS::lrand48(), OS::getpid());
+       fd = open (tname, O_WRONLY | O_CREAT | O_EXCL, 00600);
+       if (fd < 0 && errno != EEXIST)
+         {
+@@ -1365,10 +1361,7 @@ memset4 (guint32        *mem,
+          guint32         filler,
+          guint           length)
+ {
+-  BIRNET_STATIC_ASSERT (sizeof (*mem) == 4);
+-  BIRNET_STATIC_ASSERT (sizeof (filler) == 4);
+-  BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+-  wmemset ((wchar_t*) mem, filler, length);
++  OS::memset4 (mem, filler, length);
+ }
+ /* --- memory utils --- */
+diff --git a/birnet/birnetutils.hh b/birnet/birnetutils.hh
+index fca908a..3b13549 100644
+--- a/birnet/birnetutils.hh
++++ b/birnet/birnetutils.hh
+@@ -18,6 +18,7 @@
+ #define __BIRNET_UTILS_XX_HH__
+ #include <birnet/birnetcdefs.h>
++#include <stdarg.h>
+ #include <string>
+ #include <vector>
+ #include <map>
+diff --git a/birnet/configure.inc b/birnet/configure.inc
+index 2e17f20..6dabed7 100644
+--- a/birnet/configure.inc
++++ b/birnet/configure.inc
+@@ -61,6 +61,9 @@ AC_DEFUN([AC_BIRNET_REQUIREMENTS],
+           ;;
+     esac
+     AC_SUBST(BIRNET_OS)
++    AM_CONDITIONAL([BIRNET_OS_WIN32], [test x$BIRNET_OS = xWIN32])
++    AM_CONDITIONAL([BIRNET_OS_UNIX], [test x$BIRNET_OS = xUNIX])
++    AC_SUBST(BIRNET_OS_IMPL)
+     AC_SUBST(BIRNET_OS_CHOICES)
+     AC_DEFINE_UNQUOTED(BIRNET_OS_$BIRNET_OS, "1", [Win32 detection])
+diff --git a/birnet/tests/systest.cc b/birnet/tests/systest.cc
+index b5440f7..4e82ff8 100644
+--- a/birnet/tests/systest.cc
++++ b/birnet/tests/systest.cc
+@@ -16,7 +16,9 @@
+  */
+ //#define TEST_VERBOSE
+ #include <birnet/birnettests.h>
++#ifndef WIN32
+ #include <poll.h>
++#endif
+ namespace {
+ using namespace Birnet;
+@@ -25,6 +27,7 @@ static void
+ test_poll()
+ {
+   TSTART("POLL constants");
++#ifndef WIN32
+   TASSERT (BIRNET_SYSVAL_POLLIN     == POLLIN);
+   TASSERT (BIRNET_SYSVAL_POLLPRI    == POLLPRI);
+   TASSERT (BIRNET_SYSVAL_POLLOUT    == POLLOUT);
+@@ -35,6 +38,7 @@ test_poll()
+   TASSERT (BIRNET_SYSVAL_POLLERR    == POLLERR);
+   TASSERT (BIRNET_SYSVAL_POLLHUP    == POLLHUP);
+   TASSERT (BIRNET_SYSVAL_POLLNVAL   == POLLNVAL);
++#endif
+   TDONE();
+ }
+diff --git a/birnet/tests/threads.cc b/birnet/tests/threads.cc
+index 0c32b67..ee0bf26 100644
+--- a/birnet/tests/threads.cc
++++ b/birnet/tests/threads.cc
+@@ -17,6 +17,7 @@
+ //#define TEST_VERBOSE
+ #include <birnet/birnettests.h>
+ #include <stdlib.h>
++#include <unistd.h>
+ namespace {
+ using namespace Birnet;
+@@ -934,7 +935,7 @@ struct RingBufferReader : public virtual Birnet::Thread, IntSequence {
+     for (uint l = 0; l < ring_buffer_test_length;)
+       {
+         uint k, n = ring->n_readable();
+-        n = lrand48() % MIN (n + 1, 65536 * 2);
++        n = OS::lrand48() % MIN (n + 1, 65536 * 2);
+         int buffer[n], *b = buffer;
+         if (rand() & 1)
+           {
+@@ -1007,7 +1008,7 @@ test_ring_buffer ()
+     {
+       TSTART ("AsyncRingBuffer-big");
+       uint ring_buffer_test_length = 999999 * (init_settings().test_quick ? 1 : 20);
+-      IntRingBuffer irb (16384 + (lrand48() % 8192));
++      IntRingBuffer irb (16384 + (OS::lrand48() % 8192));
+       RingBufferReader *rbr = new RingBufferReader (&irb, ring_buffer_test_length);
+       ref_sink (rbr);
+       RingBufferWriter *rbw = new RingBufferWriter (&irb, ring_buffer_test_length);
diff --git a/attic/005_beast_sfi.diff b/attic/005_beast_sfi.diff
new file mode 100644 (file)
index 0000000..22ffda7
--- /dev/null
@@ -0,0 +1,259 @@
+diff -ru ../orig/beast-20090428/sfi/sficomport.c obeast-20090428/sfi/sficomport.c
+--- ../orig/beast-20090428/sfi/sficomport.c    2009-05-05 10:00:43.000000000 -0400
++++ obeast-20090428/sfi/sficomport.c   2009-05-04 10:15:17.000000000 -0400
+@@ -26,7 +26,9 @@
+ #include <fcntl.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
++#ifndef WIN32
+ #include <sys/wait.h>
++#endif
+ static SFI_MSG_TYPE_DEFINE (debug_comport, "comport", SFI_MSG_DEBUG, NULL);
+ #define DEBUG(...)              sfi_debug (debug_comport, __VA_ARGS__)
+@@ -52,6 +54,10 @@
+ static gint
+ nonblock_fd (gint fd)
+ {
++#ifdef WIN32
++  g_print ("WIN32: implement nonblock_fd");
++  return fd;
++#else
+   if (fd >= 0)
+     {
+       glong r, d_long;
+@@ -66,6 +72,7 @@
+       while (r < 0 && errno == EINTR);
+     }
+   return fd;
++#endif
+ }
+ SfiComPort*
+@@ -200,6 +207,9 @@
+ {
+   if (port->remote_pid && !port->reaped)
+     {
++#ifdef WIN32
++      g_print ("implement com_port_try_reap\n");
++#else
+       int status = 0;
+       gint ret = waitpid (port->remote_pid, &status, mayblock ? 0 : WNOHANG);
+       if (ret > 0)
+@@ -215,6 +225,7 @@
+         }
+       else if (ret < 0 && errno == EINTR && mayblock)
+         com_port_try_reap (port, mayblock);
++#endif
+     }
+ }
+@@ -243,8 +254,12 @@
+       !port->reaped &&
+       !port->sigterm_sent)
+     {
++#ifdef WIN32
++      g_print ("WIN32: do implement kill()");
++#else
+       if (kill (port->remote_pid, SIGTERM) >= 0)
+         port->sigterm_sent = TRUE;
++#endif
+       com_port_try_reap (port, FALSE);
+     }
+   if (port->link)
+@@ -603,6 +618,9 @@
+       
+       if (blocking && !port->rvalues && port->pfd[0].fd >= 0)
+         {
++#ifdef WIN32
++        g_print ("WIN32: do implement select()\n");
++#else
+           struct timeval tv = { 60, 0, };
+           fd_set in_fds, out_fds, exp_fds;
+           gint xfd;
+@@ -625,6 +643,7 @@
+           /* block only once so higher layers may handle signals */
+           blocking = FALSE;
+           goto loop_blocking;
++#endif
+         }
+     }
+   MASS_DEBUG ("[%s: DONE receiving]", port->ident);
+@@ -730,8 +749,12 @@
+       !port->reaped &&
+       !port->sigkill_sent)
+     {
++#ifdef WIN32
++      g_print ("WIN32: do implement kill\n");
++#else
+       if (kill (port->remote_pid, SIGKILL) >= 0)
+         port->sigkill_sent = TRUE;
++#endif
+     }
+   com_port_try_reap (port, TRUE);
+ }
+Only in obeast-20090428/sfi/: sficomport.lo
+diff -ru ../orig/beast-20090428/sfi/sficomwire.c obeast-20090428/sfi/sficomwire.c
+--- ../orig/beast-20090428/sfi/sficomwire.c    2009-05-05 10:00:43.000000000 -0400
++++ obeast-20090428/sfi/sficomwire.c   2009-05-04 10:05:34.000000000 -0400
+@@ -23,7 +23,9 @@
+ #include <signal.h>
+ #include <fcntl.h>
+ #include <sys/time.h>
++#ifndef WIN32
+ #include <sys/resource.h>
++#endif
+ /* --- prototypes --- */
+@@ -35,6 +37,7 @@
+ static void
+ nonblock_fd (gint fd)
+ {
++#ifndef WIN32
+   if (fd >= 0)
+     {
+       glong r, d_long;
+@@ -48,6 +51,7 @@
+       r = fcntl (fd, F_SETFL, d_long);
+       while (r < 0 && errno == EINTR);
+     }
++#endif
+ }
+ SfiComWire*
+@@ -774,8 +778,10 @@
+   if (wire->standard_error >= 0)
+     close (wire->standard_error);
+   wire->standard_error = -1;
++#ifndef WIN32
+   if (wire->remote_pid > 1 && terminate)
+     kill (wire->remote_pid, SIGTERM);
++#endif
+   wire->remote_pid = -1;
+ }
+@@ -828,6 +834,9 @@
+ sfi_com_wire_select (SfiComWire *wire,
+                    guint       timeout)
+ {
++#ifdef WIN32
++  g_print ("WIN32: implement sfi_com_wire_select");
++#else
+   fd_set rfds, wfds, efds;
+   guint *fds, i, n, max_fd = 0;
+   struct timeval tv;
+@@ -859,6 +868,7 @@
+   tv.tv_usec = (timeout % 1000) * 1000;
+   tv.tv_sec = timeout / 1000;
+   select (max_fd + 1, &rfds, &wfds, NULL, &tv);
++#endif
+ }
+ gchar*
+@@ -919,11 +929,15 @@
+ static void
+ unset_cloexec (gint fd)
+ {
++#ifdef WIN32
++  g_print ("WIN32: implement unset_cloexec\n");
++#else
+   gint r;
+   
+   do
+     r = fcntl (fd, F_SETFD, 0 /* FD_CLOEXEC */);
+   while (r < 0 && errno == EINTR);
++#endif
+ }
+ typedef struct {
+@@ -940,8 +954,12 @@
+     unset_cloexec (cdata->keepexec1);
+   if (cdata->keepexec2)
+     unset_cloexec (cdata->keepexec2);
++#ifdef WIN32
++  g_print ("implement priority handling\n");
++#else
+   /* drop scheduling priorities if we have any */
+   setpriority (PRIO_PROCESS, getpid(), 0);
++#endif
+ }
+ gchar*
+@@ -955,6 +973,10 @@
+                    gint        *command_output,       /* readable */
+                    SfiRing     *args)
+ {
++#ifdef WIN32
++  g_print ("WIN32: implement sfi_com_spawn_async\n");
++  return NULL;
++#else
+   gint command_input_pipe[2] = { -1, -1 };
+   gint command_output_pipe[2] = { -1, -1 };
+   ChildSetupData setup_data = { -1, -1 };
+@@ -971,7 +993,7 @@
+   
+   if (command_fd_option)
+     {
+-      if (pipe (command_output_pipe) < 0 || pipe (command_input_pipe) < 0)
++     if (pipe (command_output_pipe) < 0 || pipe (command_input_pipe) < 0)
+       {
+         gint e = errno;
+         
+@@ -1048,4 +1070,5 @@
+     }
+   
+   return reterr;
++#endif
+ }
+diff -ru ../orig/beast-20090428/sfi/sfifilecrawler.c obeast-20090428/sfi/sfifilecrawler.c
+--- ../orig/beast-20090428/sfi/sfifilecrawler.c        2009-05-05 10:00:43.000000000 -0400
++++ obeast-20090428/sfi/sfifilecrawler.c       2009-05-04 10:07:09.000000000 -0400
+@@ -509,8 +509,13 @@
+           struct stat st;
+           if (stat (str, &st) < 0)      /* guard against existance */
+             {
++#ifdef WIN32
++            if (mkdir (str) < 0)
++              break;
++#else
+               if (mkdir (str, 0755) < 0)
+                 break;
++#endif
+             }
+         }
+     }
+@@ -601,7 +606,9 @@
+   return birnet_file_check (file, buffer);
+ }
++#ifndef WIN32
+ #include <pwd.h>
++#endif
+ static gchar*
+ get_user_home (const gchar *user,
+diff -ru ../orig/beast-20090428/sfi/sfistore.c obeast-20090428/sfi/sfistore.c
+--- ../orig/beast-20090428/sfi/sfistore.c      2009-05-05 10:00:43.000000000 -0400
++++ obeast-20090428/sfi/sfistore.c     2009-05-04 10:18:23.000000000 -0400
+@@ -402,6 +402,8 @@
+   return rstore;
+ }
++#define S_ISLNK(x) false
++
+ SfiRStore*
+ sfi_rstore_new_open (const gchar *fname)
+ {
+diff -ru ../orig/beast-20090428/sfi/sfitime.c obeast-20090428/sfi/sfitime.c
+--- ../orig/beast-20090428/sfi/sfitime.c       2009-05-05 10:00:43.000000000 -0400
++++ obeast-20090428/sfi/sfitime.c      2009-05-04 10:08:58.000000000 -0400
+@@ -60,7 +60,7 @@
+   t = tv.tv_sec + tv.tv_usec / 1000000;
+   /* we need to find out the timezone offset relative to GMT here */
+-#if 0
++#ifdef WIN32
+   { /* aparently FreeBSD/BSD4.3 doesn't have an extern long timezone; set by
+      * localtime(). if present, timezone contains # of seconds west of GMT.
+      */
diff --git a/attic/006_beast_birnet_tests.diff b/attic/006_beast_birnet_tests.diff
new file mode 100644 (file)
index 0000000..6077734
--- /dev/null
@@ -0,0 +1,60 @@
+diff -ur ../orig/beast-20090428/birnet/tests/systest.cc beast-20090428/birnet/tests/systest.cc
+--- ../orig/beast-20090428/birnet/tests/systest.cc     2009-05-05 10:00:43.000000000 -0400
++++ beast-20090428/birnet/tests/systest.cc     2009-05-05 10:22:53.000000000 -0400
+@@ -16,7 +16,9 @@
+  */
+ //#define TEST_VERBOSE
+ #include <birnet/birnettests.h>
++#ifndef WIN32
+ #include <poll.h>
++#endif
+ namespace {
+ using namespace Birnet;
+@@ -24,6 +26,7 @@
+ static void
+ test_poll()
+ {
++#ifndef WIN32
+   TSTART("POLL constants");
+   TASSERT (BIRNET_SYSVAL_POLLIN     == POLLIN);
+   TASSERT (BIRNET_SYSVAL_POLLPRI    == POLLPRI);
+@@ -36,6 +39,7 @@
+   TASSERT (BIRNET_SYSVAL_POLLHUP    == POLLHUP);
+   TASSERT (BIRNET_SYSVAL_POLLNVAL   == POLLNVAL);
+   TDONE();
++#endif
+ }
+ } // Anon
+Only in beast-20090428/birnet/tests: systest.exe
+Only in beast-20090428/birnet/tests: systest.o
+diff -ur ../orig/beast-20090428/birnet/tests/threads.cc beast-20090428/birnet/tests/threads.cc
+--- ../orig/beast-20090428/birnet/tests/threads.cc     2009-05-05 10:00:43.000000000 -0400
++++ beast-20090428/birnet/tests/threads.cc     2009-05-05 10:30:31.000000000 -0400
+@@ -17,6 +17,7 @@
+ //#define TEST_VERBOSE
+ #include <birnet/birnettests.h>
+ #include <stdlib.h>
++#include <unistd.h>
+ namespace {
+ using namespace Birnet;
+@@ -934,7 +935,7 @@
+     for (uint l = 0; l < ring_buffer_test_length;)
+       {
+         uint k, n = ring->n_readable();
+-        n = lrand48() % MIN (n + 1, 65536 * 2);
++        n = g_random_int() % MIN (n + 1, 65536 * 2);
+         int buffer[n], *b = buffer;
+         if (rand() & 1)
+           {
+@@ -1007,7 +1008,7 @@
+     {
+       TSTART ("AsyncRingBuffer-big");
+       uint ring_buffer_test_length = 999999 * (init_settings().test_quick ? 1 : 20);
+-      IntRingBuffer irb (16384 + (lrand48() % 8192));
++      IntRingBuffer irb (16384 + (g_random_int() % 8192));
+       RingBufferReader *rbr = new RingBufferReader (&irb, ring_buffer_test_length);
+       ref_sink (rbr);
+       RingBufferWriter *rbw = new RingBufferWriter (&irb, ring_buffer_test_length);
diff --git a/attic/007_g_print_and_bse.diff b/attic/007_g_print_and_bse.diff
new file mode 100755 (executable)
index 0000000..431e8fa
--- /dev/null
@@ -0,0 +1,4263 @@
+--- ../../../orig/beast-20090428/bse/Makefile.am       2009-05-05 10:00:43.000000000 -0400
++++ ../bse/Makefile.am 2009-05-07 05:20:09.000000000 -0400
+@@ -10,7 +10,7 @@
+ # need -I$(top_builddir) for <sfi/sficonfig.h>
+ # need -I$(srcdir) for "bseserver.h" in .genprc.c
+ # need -I. (builddir) for "bsecore.genidl.hh" in bsecore.cc
+-INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(BSE_CFLAGS) -DG_DISABLE_DEPRECATED -DG_DISABLE_CONST_RETURNS
++INCLUDES += -I$(top_srcdir) -I$(top_builddir) -I$(srcdir) -I. $(BSE_CFLAGS) -DG_DISABLE_DEPRECATED -DG_DISABLE_CONST_RETURNS $(CFLAGS)
+ DEFS     += $(strip \
+       $(patsubst %, -DG_LOG_DOMAIN=\"BSE\" -DBSE_COMPILATION, \
+                     $(filter $(<F), $(bse_sources) $(bse_sources))) \
+@@ -163,7 +163,7 @@
+ # rules to generate built sources
+ #
+ %.genprc.c: @PERLRULE@ %.proc mkcproc.pl
+-      $(srcdir)/mkcproc.pl --funcname $@ --preprocess $< >$@
++      $(PERL) $(srcdir)/mkcproc.pl --funcname $@ --preprocess $< >$@
+ CLEANSTAMPFILES = 
+ if WITH_PERLRULE
+ CLEANFILES += $(bse_proc_gen_sources) $(CLEANSTAMPFILES)
+--- ../../../orig/beast-20090428/bse/bseblockutils.hh  2009-05-05 10:00:43.000000000 -0400
++++ ../bse/bseblockutils.hh    2009-05-07 05:12:20.000000000 -0400
+@@ -191,10 +191,15 @@
+              float          *values,
+              float           value)
+ {
++#ifdef WIN32
++  while (n_values--)
++    *values++ = value;
++#else
+   BIRNET_STATIC_ASSERT (sizeof (float) == 4);
+   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+   const union { float f; guint32 vuint32; } u = { value };
+   wmemset ((wchar_t*) values, u.vuint32, n_values);
++#endif
+ }
+ inline void
+@@ -202,8 +207,13 @@
+              guint32        *values,
+              guint32         value)
+ {
++#ifdef WIN32
++  while (n_values--)
++    *values++ = value;
++#else
+   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+   wmemset ((wchar_t*) values, value, n_values);
++#endif
+ }
+ inline void
+@@ -211,8 +221,12 @@
+              guint32       *values,
+              const guint32 *ivalues)
+ {
++#ifdef WIN32
++  memcpy (values, ivalues, n_values * sizeof (guint32));
++#else
+   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+   wmemcpy ((wchar_t*) values, (const wchar_t*) ivalues, n_values);
++#endif
+ }
+ inline void
+@@ -220,9 +234,13 @@
+              gfloat       *values,
+              const gfloat *ivalues)
+ {
++#ifdef WIN32
++  memcpy (values, ivalues, n_values * sizeof (guint32));
++#else
+   BIRNET_STATIC_ASSERT (sizeof (float) == 4);
+   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+   wmemcpy ((wchar_t*) values, (const wchar_t*) ivalues, n_values);
++#endif
+ }
+ } // Bse
+@@ -236,8 +254,13 @@
+                      guint32 *values,
+                      guint32  vuint32)
+ {
++#ifdef WIN32
++  while (n_values--)
++    *values++ = vuint32;
++#else
+   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+   wmemset ((wchar_t*) values, vuint32, n_values);
++#endif
+ }
+ static inline void
+@@ -245,10 +268,15 @@
+                     float       *values,
+                     const float  value)
+ {
++#ifdef WIN32
++  while (n_values--)
++    *values++ = value;
++#else
+   BIRNET_STATIC_ASSERT (sizeof (float) == 4);
+   const union { float f; guint32 vuint32; } u = { value };
+   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+   wmemset ((wchar_t*) values, u.vuint32, n_values);
++#endif
+ }
+ static inline void
+@@ -256,8 +284,13 @@
+                      guint32       *values,
+                      const guint32 *ivalues)
+ {
++#if WIN32
++  while (n_values--)
++    *values++ = *ivalues++;
++#else
+   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+   wmemcpy ((wchar_t*) values, (const wchar_t*) ivalues, n_values);
++#endif
+ }
+ static inline void
+@@ -265,9 +298,14 @@
+                     gfloat       *values,
+                     const gfloat *ivalues)
+ {
++#if WIN32
++  while (n_values--)
++    *values++ = *ivalues++;
++#else
+   BIRNET_STATIC_ASSERT (sizeof (float) == 4);
+   BIRNET_STATIC_ASSERT (sizeof (wchar_t) == 4);
+   wmemcpy ((wchar_t*) values, (const wchar_t*) ivalues, n_values);
++#endif
+ }
+ G_END_DECLS
+--- ../../../orig/beast-20090428/bse/bseengine.c       2009-05-05 10:00:43.000000000 -0400
++++ ../bse/bseengine.c 2009-05-07 05:05:15.000000000 -0400
+@@ -1442,8 +1442,11 @@
+   
+   if (bse_engine_threaded)
+     {
++#ifndef WIN32
+       gint err = pipe (master_data.wakeup_pipe);
++#endif
+       master_data.user_thread = sfi_thread_self ();
++#ifndef WIN32
+       if (!err)
+       {
+         glong d_long = fcntl (master_data.wakeup_pipe[0], F_GETFL, 0);
+@@ -1460,6 +1463,7 @@
+       }
+       if (err)
+       g_error ("failed to create wakeup pipe: %s", g_strerror (errno));
++#endif
+       master_thread = sfi_thread_run ("DSP #1", (BirnetThreadFunc) bse_engine_master_thread, &master_data);
+       if (!master_thread)
+       g_error ("failed to create master thread");
+--- ../../../orig/beast-20090428/bse/bseenginemaster.c 2009-05-05 10:00:43.000000000 -0400
++++ ../bse/bseenginemaster.c   2009-05-07 05:15:02.000000000 -0400
+@@ -24,7 +24,9 @@
+ #include "bseieee754.h"
+ #include <string.h>
+ #include <unistd.h>
++#ifndef WIN32
+ #include <sys/poll.h>
++#endif
+ #include <sys/time.h>
+ #include <errno.h>
+@@ -1143,6 +1145,7 @@
+ {
+   bse_message_setup_thread_handler ();
++#ifndef WIN32
+   /* assert pollfd equality, since we're simply casting structures */
+   BIRNET_STATIC_ASSERT (sizeof (struct pollfd) == sizeof (GPollFD));
+   BIRNET_STATIC_ASSERT (G_STRUCT_OFFSET (GPollFD, fd) == G_STRUCT_OFFSET (struct pollfd, fd));
+@@ -1158,6 +1161,7 @@
+   master_pollfds[0].fd = mdata->wakeup_pipe[0];
+   master_pollfds[0].events = G_IO_IN;
+   master_n_pollfds = 1;
++#endif
+   master_pollfds_changed = TRUE;
+   
+   toyprof_stampinit ();
+@@ -1171,12 +1175,13 @@
+       
+       if (!need_dispatch)
+       {
++#ifndef WIN32
+         gint err = poll ((struct pollfd*) loop.fds, loop.n_fds, loop.timeout);
+         if (err >= 0)
+           loop.revents_filled = TRUE;
+         else if (errno != EINTR)
+           g_printerr ("%s: poll() error: %s\n", G_STRFUNC, g_strerror (errno));
+-        
++#endif
+         if (loop.revents_filled)
+           need_dispatch = _engine_master_check (&loop);
+       }
+--- ../../../orig/beast-20090428/bse/bsemididevice-oss.c       2009-05-05 10:00:43.000000000 -0400
++++ ../bse/bsemididevice-oss.c 2009-05-07 05:27:31.000000000 -0400
+@@ -30,7 +30,9 @@
+ #elif HAVE_SOUNDCARD_H
+ #include <soundcard.h>
+ #endif
++#ifndef WIN32
+ #include <sys/ioctl.h>
++#endif
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <unistd.h>
+@@ -40,6 +42,9 @@
+ static SFI_MSG_TYPE_DEFINE (debug_midi, "midi", SFI_MSG_DEBUG, NULL);
+ #define MIDI_DEBUG(...) sfi_debug (debug_midi, __VA_ARGS__)
++#ifdef WIN32
++#define O_NONBLOCK 0
++#endif
+ /* --- structs --- */
+--- ../../../orig/beast-20090428/bse/bsepcmdevice-oss.c        2009-05-05 10:00:43.000000000 -0400
++++ ../bse/bsepcmdevice-oss.c  2009-05-07 05:29:15.000000000 -0400
+@@ -21,7 +21,7 @@
+ #include      "gsldatautils.h"
+ #include      "gslcommon.h" // FIXME: remove
+-#ifndef       BSE_PCM_DEVICE_CONF_OSS
++#if !defined(BSE_PCM_DEVICE_CONF_OSS) || defined (WIN32)
+ BSE_DUMMY_TYPE (BsePcmDeviceOSS);
+ #else   /* BSE_PCM_DEVICE_CONF_OSS */
+--- ../../../orig/beast-20090428/bse/bseplugin.c       2009-05-05 10:00:43.000000000 -0400
++++ ../bse/bseplugin.c 2009-05-07 05:30:29.000000000 -0400
+@@ -611,8 +611,11 @@
+       /* open libtool archive */
+       gint fd = open (const_file_name, O_RDONLY, 0);
+       if (fd < 0)
+-        return (errno == ENOENT || errno == ENOTDIR || errno == ELOOP ?
+-                bse_error_blurb (BSE_ERROR_FILE_NOT_FOUND) :
++        return (errno == ENOENT || errno == ENOTDIR
++#ifndef WIN32
++                                || errno == ELOOP 
++#endif
++             ? bse_error_blurb (BSE_ERROR_FILE_NOT_FOUND) :
+                 "Unable to access plugin");
+       
+       /* and search libtool's dlname specification */
+--- ../../../orig/beast-20090428/bse/bsesequencer.cc   2009-05-05 10:00:43.000000000 -0400
++++ ../bse/bsesequencer.cc     2009-05-07 05:34:01.000000000 -0400
+@@ -24,7 +24,9 @@
+ #include "bsemidireceiver.h"
+ #include "bsemain.h"
+ #include "bseieee754.h"
++#ifndef WIN32
+ #include <sys/poll.h>
++#endif
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <errno.h>
+@@ -63,12 +65,14 @@
+   sfi_cond_init (&current_watch_cond);
++#ifndef WIN32
+   if (pipe (sequencer_wake_up_pipe) < 0)
+     g_error ("failed to create sequencer wake-up pipe: %s", strerror (errno));
+   glong flags = fcntl (sequencer_wake_up_pipe[0], F_GETFL, 0);
+   fcntl (sequencer_wake_up_pipe[0], F_SETFL, O_NONBLOCK | flags);
+   flags = fcntl (sequencer_wake_up_pipe[1], F_GETFL, 0);
+   fcntl (sequencer_wake_up_pipe[1], F_SETFL, O_NONBLOCK | flags);
++#endif
+   /* initialize BseSequencer */
+   static BseSequencer sseq = { 0, };
+@@ -185,7 +189,7 @@
+     watches.erase (watches.begin() + i);
+     return true;
+   }
+-  
++#ifndef WIN32 
+   BIRNET_STATIC_ASSERT (sizeof (GPollFD) == sizeof (struct pollfd));
+   BIRNET_STATIC_ASSERT (offsetof (GPollFD, fd) == offsetof (struct pollfd, fd));
+   BIRNET_STATIC_ASSERT (sizeof (((GPollFD*) 0)->fd) == sizeof (((struct pollfd*) 0)->fd));
+@@ -193,6 +197,7 @@
+   BIRNET_STATIC_ASSERT (sizeof (((GPollFD*) 0)->events) == sizeof (((struct pollfd*) 0)->events));
+   BIRNET_STATIC_ASSERT (offsetof (GPollFD, revents) == offsetof (struct pollfd, revents));
+   BIRNET_STATIC_ASSERT (sizeof (((GPollFD*) 0)->revents) == sizeof (((struct pollfd*) 0)->revents));
++#endif
+ };
+ } // Anon
+@@ -272,6 +277,7 @@
+   pfds[0].revents = 0;
+   sequencer_poll_pool.fill_pfds (n_pfds - 1, pfds + 1); /* rest used for io watch array */
+   BSE_SEQUENCER_UNLOCK ();
++#ifndef WIN32
+   gint result = poll ((struct pollfd*) pfds, n_pfds, timeout_ms);
+   if (result < 0 && errno != EINTR)
+     g_printerr ("%s: poll() error: %s\n", G_STRFUNC, g_strerror (errno));
+@@ -304,6 +310,7 @@
+           sfi_cond_broadcast (&current_watch_cond);     /* wake up threads in bse_sequencer_remove_io_watch() */
+         }
+     }
++#endif
+   return !sfi_thread_aborted();
+ }
+--- ../../../orig/beast-20090428/bse/bseserver.c       2009-05-05 10:00:43.000000000 -0400
++++ ../bse/bseserver.c 2009-05-07 05:31:41.000000000 -0400
+@@ -26,7 +26,9 @@
+ #include "bsemididevice-null.h"
+ #include "bsejanitor.h"
+ #include <sys/time.h>
++#ifndef WIN32
+ #include <sys/resource.h>
++#endif
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <string.h>
+@@ -1166,10 +1168,12 @@
+       int current_priority;
+       engine_is_initialized = TRUE;
+       bse_engine_init (TRUE);
++#ifndef WIN32
+       /* lower priorities compared to engine if our priority range permits */
+       current_priority = getpriority (PRIO_PROCESS, mypid);
+       if (current_priority <= -2 && mypid)
+         setpriority (PRIO_PROCESS, mypid, current_priority + 1);
++#endif
+     }
+   bse_engine_configure (BSE_GCONFIG (synth_latency), mix_freq, BSE_GCONFIG (synth_control_freq));
+--- ../../../orig/beast-20090428/bse/gslcommon.c       2009-05-05 10:00:43.000000000 -0400
++++ ../bse/gslcommon.c 2009-05-07 04:48:19.000000000 -0400
+@@ -18,13 +18,15 @@
+ #include "gsldatacache.h"
+ #include <unistd.h>
+-#include <sys/utsname.h>
+ #include <string.h>
+ #include <fcntl.h>
+ #include <stdlib.h>
+-#include <sched.h>
+ #include <errno.h>
++#ifndef WIN32
++#include <sys/utsname.h>
++#include <sched.h>
+ #include <sys/poll.h>
++#endif
+ #include <sys/stat.h>
+ #include <sys/time.h>
+@@ -179,7 +181,9 @@
+   switch (sys_errno)
+     {
+     case 0:             return BSE_ERROR_NONE;
++#ifdef ELOOP  /* Windows lacks this */
+     case ELOOP:
++#endif
+     case ENAMETOOLONG:
+     case ENOENT:        return BSE_ERROR_FILE_NOT_FOUND;
+     case EISDIR:        return BSE_ERROR_FILE_IS_DIR;
+@@ -187,9 +191,11 @@
+     case EPERM:
+     case EACCES:        return BSE_ERROR_PERMS;
+ #ifdef ENODATA  /* GNU/kFreeBSD lacks this */
+-    case ENODATA:
++    case ENODATA:     return BSE_ERROR_FILE_EOF;
+ #endif
++#ifdef ENOMSG /* Windows lacks this */
+     case ENOMSG:        return BSE_ERROR_FILE_EOF;
++#endif
+     case ENOMEM:      return BSE_ERROR_NO_MEMORY;
+     case ENOSPC:      return BSE_ERROR_NO_SPACE;
+     case ENFILE:      return BSE_ERROR_NO_FILES;
+@@ -198,7 +204,9 @@
+     case ESPIPE:
+     case EIO:           return BSE_ERROR_IO;
+     case EEXIST:        return BSE_ERROR_FILE_EXISTS;
++#ifdef ETXTBSY
+     case ETXTBSY:
++#endif
+     case EBUSY:         return BSE_ERROR_FILE_BUSY;
+     case EAGAIN:
+     case EINTR:               return BSE_ERROR_TEMP;
+--- ../../../orig/beast-20090428/bse/gsldatahandle-mad.c       2009-05-05 10:00:43.000000000 -0400
++++ ../bse/gsldatahandle-mad.c 2009-05-07 04:49:05.000000000 -0400
+@@ -21,7 +21,9 @@
+ #include <assert.h>
+ #include <stdio.h>
+ #include <unistd.h>
++#ifndef WIN32
+ #include <sys/mman.h>
++#endif
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+--- ../../../orig/beast-20090428/bse/gslfilehash.c     2009-05-05 10:00:43.000000000 -0400
++++ ../bse/gslfilehash.c       2009-05-07 04:49:52.000000000 -0400
+@@ -127,6 +127,10 @@
+     {
+       gint fd;
+       
++#ifdef WIN32
++#define O_NOCTTY 0
++#endif
++      
+       fd = open (file_name, O_RDONLY | O_NOCTTY, 0);
+       if (fd >= 0)
+       {
+--- ../../../orig/beast-20090428/sfi/sfidl-cbase.cc    2009-05-05 10:00:43.000000000 -0400
++++ ../sfi/sfidl-cbase.cc      2009-05-05 10:53:01.000000000 -0400
+@@ -507,33 +507,33 @@
+     }
+   bool first = true;
+-  printf("%s%s%s (", cTypeRet (mdef.result.type), proto?" ":"\n", mname.c_str());
++  g_print ("%s%s%s (", cTypeRet (mdef.result.type), proto?" ":"\n", mname.c_str());
+   for(pi = mdef.params.begin(); pi != mdef.params.end(); pi++)
+     {
+       if (pi->name == "_object_id") continue; // C++ binding: get _object_id from class
+-      if(!first) printf(", ");
++      if(!first) g_print (", ");
+       first = false;
+-      printf("%s %s", cTypeArg (pi->type), pi->name.c_str());
++      g_print ("%s %s", cTypeArg (pi->type), pi->name.c_str());
+     }
+   if (first)
+-    printf("void");
+-  printf(")");
++    g_print ("void");
++  g_print (")");
+   if (proto)
+     {
+-      printf(";\n");
++      g_print (";\n");
+       return;
+     }
+-  printf(" {\n");
++  g_print (" {\n");
+   String vret = createTypeCode (mdef.result.type, MODEL_VCALL_RET);
+   if (mdef.result.type != "void")
+-    printf ("  %s _retval;\n", vret.c_str());
++    g_print  ("  %s _retval;\n", vret.c_str());
+   String rfree = createTypeCode (mdef.result.type, "_retval_conv", MODEL_VCALL_RFREE);
+   if (rfree != "")
+-    printf ("  %s _retval_conv;\n", cTypeRet (mdef.result.type));
++    g_print  ("  %s _retval_conv;\n", cTypeRet (mdef.result.type));
+   map<String, String> cname;
+   for(pi = mdef.params.begin(); pi != mdef.params.end(); pi++)
+@@ -544,27 +544,27 @@
+         cname[pi->name] = pi->name + "__c";
+         String arg = createTypeCode(pi->type, MODEL_VCALL_CARG);
+-        printf("  %s %s__c = %s;\n", arg.c_str(), pi->name.c_str(), conv.c_str());
++        g_print ("  %s %s__c = %s;\n", arg.c_str(), pi->name.c_str(), conv.c_str());
+       }
+       else
+       cname[pi->name] = pi->name;
+     }
+-  printf("  ");
++  g_print ("  ");
+   if (mdef.result.type != "void")
+-    printf("_retval = ");
++    g_print ("_retval = ");
+   String vcall = createTypeCode(mdef.result.type, "", MODEL_VCALL);
+-  printf("%s (\"%s\", ", vcall.c_str(), dname.c_str());
++  g_print ("%s (\"%s\", ", vcall.c_str(), dname.c_str());
+   for(pi = mdef.params.begin(); pi != mdef.params.end(); pi++)
+-    printf("%s ", createTypeCode(pi->type, cname[pi->name], MODEL_VCALL_ARG).c_str());
+-  printf("0);\n");
++    g_print ("%s ", createTypeCode(pi->type, cname[pi->name], MODEL_VCALL_ARG).c_str());
++  g_print ("0);\n");
+   for(pi = mdef.params.begin(); pi != mdef.params.end(); pi++)
+     {
+       String cfree = createTypeCode (pi->type, cname[pi->name], MODEL_VCALL_CFREE);
+       if (cfree != "")
+-      printf("  %s;\n", cfree.c_str());
++      g_print ("  %s;\n", cfree.c_str());
+     }
+   if (mdef.result.type != "void")
+@@ -573,16 +573,16 @@
+       if (rfree != "")
+       {
+-        printf ("  _retval_conv = %s;\n", rconv.c_str());
+-        printf ("  %s;\n", rfree.c_str());
+-        printf ("  return _retval_conv;\n");
++        g_print  ("  _retval_conv = %s;\n", rconv.c_str());
++        g_print  ("  %s;\n", rfree.c_str());
++        g_print  ("  return _retval_conv;\n");
+       }
+       else
+       {
+-        printf ("  return %s;\n", rconv.c_str());
++        g_print  ("  return %s;\n", rconv.c_str());
+       }
+     }
+-  printf("}\n\n");
++  g_print ("}\n\n");
+ }
+ static bool choiceReverseSort(const ChoiceValue& e1, const ChoiceValue& e2)
+@@ -616,31 +616,31 @@
+       ci->name = makeLowerName (ci->name, '-');
+       sort (components.begin(), components.end(), ::choiceReverseSort);
+-      printf("static const SfiConstants %s_vals[%zd] = {\n",name.c_str(), ei->contents.size());
++      g_print ("static const SfiConstants %s_vals[%zd] = {\n",name.c_str(), ei->contents.size());
+       for (ci = components.begin(); ci != components.end(); ci++)
+       {
+         int value = ci->sequentialValue;
+         minval = min (value, minval);
+         maxval = max (value, maxval);
+-        printf("  { \"%s\", %zd, %d },\n", ci->name.c_str(), ci->name.size(), value);
++        g_print ("  { \"%s\", %zd, %d },\n", ci->name.c_str(), ci->name.size(), value);
+       }
+-      printf("};\n\n");
++      g_print ("};\n\n");
+-      printf("const gchar*\n");
+-      printf("%s_to_choice (%s value)\n", name.c_str(), arg.c_str());
+-      printf("{\n");
+-      printf("  g_return_val_if_fail (value >= %d && value <= %d, NULL);\n", minval, maxval);
+-      printf("  return sfi_constants_get_name (G_N_ELEMENTS (%s_vals), %s_vals, value);\n",
++      g_print ("const gchar*\n");
++      g_print ("%s_to_choice (%s value)\n", name.c_str(), arg.c_str());
++      g_print ("{\n");
++      g_print ("  g_return_val_if_fail (value >= %d && value <= %d, NULL);\n", minval, maxval);
++      g_print ("  return sfi_constants_get_name (G_N_ELEMENTS (%s_vals), %s_vals, value);\n",
+         name.c_str(), name.c_str());
+-      printf("}\n\n");
++      g_print ("}\n\n");
+-      printf("%s\n", cTypeRet (ei->name));
+-      printf("%s_from_choice (const gchar *choice)\n", name.c_str());
+-      printf("{\n");
+-      printf("  return (%s) (choice ? sfi_constants_get_index (G_N_ELEMENTS (%s_vals), "
++      g_print ("%s\n", cTypeRet (ei->name));
++      g_print ("%s_from_choice (const gchar *choice)\n", name.c_str());
++      g_print ("{\n");
++      g_print ("  return (%s) (choice ? sfi_constants_get_index (G_N_ELEMENTS (%s_vals), "
+                           "%s_vals, choice) : 0);\n", cTypeRet (ei->name), name.c_str(), name.c_str());
+-      printf("}\n");
+-      printf("\n");
++      g_print ("}\n");
++      g_print ("\n");
+     }
+ }
+@@ -651,7 +651,7 @@
+       if (parser.fromInclude (ri->name)) continue;
+       String mname = makeMixedName (ri->name);
+-      printf("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
++      g_print ("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
+     }
+ }
+@@ -662,7 +662,7 @@
+       if (parser.fromInclude (si->name)) continue;
+       String mname = makeMixedName (si->name);
+-      printf("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
++      g_print ("typedef struct _%s %s;\n", mname.c_str(), mname.c_str());
+     }
+ }
+@@ -674,14 +674,14 @@
+       String mname = makeMixedName (ri->name.c_str());
+-      printf("struct _%s {\n", mname.c_str());
++      g_print ("struct _%s {\n", mname.c_str());
+       for (vector<Param>::const_iterator pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
+       {
+-        printf("  %s %s;\n", cTypeField (pi->type), pi->name.c_str());
++        g_print ("  %s %s;\n", cTypeField (pi->type), pi->name.c_str());
+       }
+-      printf("};\n");
++      g_print ("};\n");
+     }
+-  printf("\n");
++  g_print ("\n");
+ }
+ void CodeGeneratorCBase::printClientSequenceDefinitions()
+@@ -694,10 +694,10 @@
+       String array = typeArray (si->content.type);
+       String elements = si->content.name;
+-      printf("struct _%s {\n", mname.c_str());
+-      printf("  guint n_%s;\n", elements.c_str ());
+-      printf("  %s %s;\n", array.c_str(), elements.c_str());
+-      printf("};\n");
++      g_print ("struct _%s {\n", mname.c_str());
++      g_print ("  guint n_%s;\n", elements.c_str ());
++      g_print ("  %s %s;\n", array.c_str(), elements.c_str());
++      g_print ("};\n");
+     }
+ }
+@@ -721,15 +721,15 @@
+       }
+       else
+       {
+-        printf("%s %s_new (void);\n", ret.c_str(), lname.c_str());
+-        printf("%s %s_copy_shallow (%s rec);\n", ret.c_str(), lname.c_str(), arg.c_str());
+-        printf("%s %s_from_rec (SfiRec *sfi_rec);\n", ret.c_str(), lname.c_str());
+-        printf("SfiRec *%s_to_rec (%s rec);\n", lname.c_str(), arg.c_str());
+-        printf("void %s_free (%s rec);\n", lname.c_str(), arg.c_str());
+-        printf("\n");
++        g_print ("%s %s_new (void);\n", ret.c_str(), lname.c_str());
++        g_print ("%s %s_copy_shallow (%s rec);\n", ret.c_str(), lname.c_str(), arg.c_str());
++        g_print ("%s %s_from_rec (SfiRec *sfi_rec);\n", ret.c_str(), lname.c_str());
++        g_print ("SfiRec *%s_to_rec (%s rec);\n", lname.c_str(), arg.c_str());
++        g_print ("void %s_free (%s rec);\n", lname.c_str(), arg.c_str());
++        g_print ("\n");
+       }
+     }
+-  printf("\n");
++  g_print ("\n");
+ }
+ void CodeGeneratorCBase::printClientSequenceMethodPrototypes (PrefixSymbolMode mode)
+@@ -755,14 +755,14 @@
+       }
+       else
+       {
+-        printf("%s %s_new (void);\n", ret.c_str(), lname.c_str());
+-        printf("void %s_append (%s seq, %s element);\n", lname.c_str(), arg.c_str(), element.c_str());
+-        printf("%s %s_copy_shallow (%s seq);\n", ret.c_str(), lname.c_str(), arg.c_str());
+-        printf("%s %s_from_seq (SfiSeq *sfi_seq);\n", ret.c_str(), lname.c_str());
+-        printf("SfiSeq *%s_to_seq (%s seq);\n", lname.c_str(), arg.c_str());
+-        printf("void %s_resize (%s seq, guint new_size);\n", lname.c_str(), arg.c_str());
+-        printf("void %s_free (%s seq);\n", lname.c_str(), arg.c_str());
+-        printf("\n");
++        g_print ("%s %s_new (void);\n", ret.c_str(), lname.c_str());
++        g_print ("void %s_append (%s seq, %s element);\n", lname.c_str(), arg.c_str(), element.c_str());
++        g_print ("%s %s_copy_shallow (%s seq);\n", ret.c_str(), lname.c_str(), arg.c_str());
++        g_print ("%s %s_from_seq (SfiSeq *sfi_seq);\n", ret.c_str(), lname.c_str());
++        g_print ("SfiSeq *%s_to_seq (%s seq);\n", lname.c_str(), arg.c_str());
++        g_print ("void %s_resize (%s seq, guint new_size);\n", lname.c_str(), arg.c_str());
++        g_print ("void %s_free (%s seq);\n", lname.c_str(), arg.c_str());
++        g_print ("\n");
+       }
+     }
+ }
+@@ -780,10 +780,10 @@
+       String lname = makeLowerName (ri->name.c_str());
+       String mname = makeMixedName (ri->name.c_str());
+-      printf("%s\n", ret.c_str());
+-      printf("%s_new (void)\n", lname.c_str());
+-      printf("{\n");
+-      printf("  %s rec = g_new0 (%s, 1);\n", arg.c_str(), mname.c_str());
++      g_print ("%s\n", ret.c_str());
++      g_print ("%s_new (void)\n", lname.c_str());
++      g_print ("{\n");
++      g_print ("  %s rec = g_new0 (%s, 1);\n", arg.c_str(), mname.c_str());
+       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
+       {
+         /* FIXME(tim): this needs to be much more versatile, so we can e.g. change
+@@ -793,93 +793,93 @@
+          * way we do it in the C++ language binding)
+          */
+         String init = funcNew (pi->type);
+-        if (init != "") printf("  rec->%s = %s();\n", pi->name.c_str(), init.c_str());
++        if (init != "") g_print ("  rec->%s = %s();\n", pi->name.c_str(), init.c_str());
+       }
+-      printf("  return rec;\n");
+-      printf("}\n\n");
++      g_print ("  return rec;\n");
++      g_print ("}\n\n");
+-      printf("%s\n", ret.c_str());
+-      printf("%s_copy_shallow (%s rec)\n", lname.c_str(), arg.c_str());
+-      printf("{\n");
+-      printf("  %s rec_copy;\n", arg.c_str());
+-      printf("  if (!rec)\n");
+-      printf("    return NULL;");
+-      printf("\n");
+-      printf("  rec_copy = g_new0 (%s, 1);\n", mname.c_str());
++      g_print ("%s\n", ret.c_str());
++      g_print ("%s_copy_shallow (%s rec)\n", lname.c_str(), arg.c_str());
++      g_print ("{\n");
++      g_print ("  %s rec_copy;\n", arg.c_str());
++      g_print ("  if (!rec)\n");
++      g_print ("    return NULL;");
++      g_print ("\n");
++      g_print ("  rec_copy = g_new0 (%s, 1);\n", mname.c_str());
+       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
+       {
+         /* FIXME(tim): this needs to be more versatile, so NULL fields can be special
+          * cased before copying */
+         String copy =  funcCopy (pi->type);
+-        printf("  rec_copy->%s = %s (rec->%s);\n", pi->name.c_str(), copy.c_str(),
++        g_print ("  rec_copy->%s = %s (rec->%s);\n", pi->name.c_str(), copy.c_str(),
+             pi->name.c_str());
+       }
+-      printf("  return rec_copy;\n");
+-      printf("}\n\n");
++      g_print ("  return rec_copy;\n");
++      g_print ("}\n\n");
+-      printf("%s\n", ret.c_str());
+-      printf("%s_from_rec (SfiRec *sfi_rec)\n", lname.c_str());
+-      printf("{\n");
+-      printf("  GValue *element;\n");
+-      printf("  %s rec;\n", arg.c_str());
+-      printf("  if (!sfi_rec)\n");
+-      printf("    return NULL;\n");
+-      printf("\n");
+-      printf("  rec = g_new0 (%s, 1);\n", mname.c_str());
++      g_print ("%s\n", ret.c_str());
++      g_print ("%s_from_rec (SfiRec *sfi_rec)\n", lname.c_str());
++      g_print ("{\n");
++      g_print ("  GValue *element;\n");
++      g_print ("  %s rec;\n", arg.c_str());
++      g_print ("  if (!sfi_rec)\n");
++      g_print ("    return NULL;\n");
++      g_print ("\n");
++      g_print ("  rec = g_new0 (%s, 1);\n", mname.c_str());
+       for (pi = ri->contents.begin(); pi != ri->contents.end(); pi++)
+       {
+         String elementFromValue = createTypeCode (pi->type, "element", MODEL_FROM_VALUE);
+         String init = funcNew (pi->type);
+-        printf("  element = sfi_rec_get (sfi_rec, \"%s\");\n", pi->name.c_str());
+-        printf("  if (element)\n");
+-        printf("    rec->%s = %s;\n", pi->name.c_str(), elementFromValue.c_str());
++        g_print ("  element = sfi_rec_get (sfi_rec, \"%s\");\n", pi->name.c_str());
++        g_print ("  if (element)\n");
++        g_print ("    rec->%s = %s;\n", pi->name.c_str(), elementFromValue.c_str());
+         if (init != "")
+           {
+-            printf("  else\n");
+-            printf("    rec->%s = %s();\n", pi->name.c_str(), init.c_str());
++            g_print ("  else\n");
++            g_print ("    rec->%s = %s();\n", pi->name.c_str(), init.c_str());
+           }
+       }
+-      printf("  return rec;\n");
+-      printf("}\n\n");
++      g_print ("  return rec;\n");
++      g_print ("}\n\n");
+-      printf("SfiRec *\n");
+-      printf("%s_to_rec (%s rec)\n", lname.c_str(), arg.c_str());
+-      printf("{\n");
+-      printf("  SfiRec *sfi_rec;\n");
+-      printf("  GValue *element;\n");
+-      printf("  if (!rec)\n");
+-      printf("    return NULL;\n");
+-      printf("\n");
+-      printf("  sfi_rec = sfi_rec_new ();\n");
++      g_print ("SfiRec *\n");
++      g_print ("%s_to_rec (%s rec)\n", lname.c_str(), arg.c_str());
++      g_print ("{\n");
++      g_print ("  SfiRec *sfi_rec;\n");
++      g_print ("  GValue *element;\n");
++      g_print ("  if (!rec)\n&quo