[proaudio] [1388] add (dirty) jackdbus patch for 0.116.1 |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/proaudio Archives
]
Revision: 1388
Author: gimpel
Date: 2008-12-14 17:04:17 +0100 (Sun, 14 Dec 2008)
Log Message:
-----------
add (dirty) jackdbus patch for 0.116.1
Modified Paths:
--------------
trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/Manifest
trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/jack-audio-connection-kit-0.116.1.ebuild
Added Paths:
-----------
trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-0.116.1-dbus.patch
trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-0.116.1-dbus_as-needed.patch
Modified: trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/Manifest
===================================================================
--- trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/Manifest 2008-12-12 22:41:30 UTC (rev 1387)
+++ trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/Manifest 2008-12-14 16:04:17 UTC (rev 1388)
@@ -1,3 +1,5 @@
+AUX jack-audio-connection-kit-0.116.1-dbus.patch 930659 RMD160 08e38b0264eb9c0ed09438123cad7e61beeb2e31 SHA1 467b0e485861a7c81f133e67818aa84139889b8a SHA256 818a6182de4e23388fff3863627abdc4df58a976c4f924b10ab3502ae026b88f
+AUX jack-audio-connection-kit-0.116.1-dbus_as-needed.patch 314 RMD160 77026765eb5fa7e97b6eb59e4c5f8c52288647de SHA1 60262c8cc412b17f0f2bbdd7fb49b870cc32710e SHA256 923efb309bc902e33a9d02b51f2cc1a0c1f4844d88c12236fb1fbf09066b5468
AUX jack-audio-connection-kit-transport.patch 309 RMD160 7b7130dd922ed14988eb591059d643ece39f6757 SHA1 ed8f9d90ec62476643f41ff60735d4aaaee84886 SHA256 74f1d155f365deb1461d070b37ccd7836c32c521d31960a3f4e6c3f2e528bada
AUX jack-transport-start-at-zero-fix.diff 1613 RMD160 aa2e1492841c4299647af812d68e9585ebd53b10 SHA1 9e18d8ed0fa755fcd4aa53e82693e03d71a94b7b SHA256 f836d29c3ee71624968e8befb3f9972c1906b926d4737e02499a6bec646b5a1f
DIST jack-audio-connection-kit-0.109.2.tar.gz 831141 RMD160 1e382cf6751b4df3d5d4ea75be7ee94adbc7746a SHA1 5a23c9817fb72858d5bc7b3077224575140b7f55 SHA256 27a7a70e5be0dbcdd98ee1a505399e006e06b4f58fcd3b8cd25763aa7e43bfd4
@@ -5,7 +7,7 @@
DIST jackdbus-patches-0.9.tar.bz2 39305 RMD160 0e9c348211684fa6b52261adca2c43ad1b5200db SHA1 342137f9763da9a2aebd818434515cf3cc41682d SHA256 c37fe0811b49da0dbaeb5fbc8ed7eddc47f514eda6b9dc662cff8f80847526f2
DIST netjack-0.12.tar.bz2 28044 RMD160 13d13f2a66c891da243f9a286833554f680937ff SHA1 f850ed654d0f115065d96bee34d9f7c05e8c5725 SHA256 c443bcb6ec2b477c52cab2fca75aef80fe2c2c91499e45ffdbb1c28ffaa7ee60
EBUILD jack-audio-connection-kit-0.109.2-r2.ebuild 4769 RMD160 0da7e08bf67145fc6f3b3379c463e32dc75eb04b SHA1 65f27fc56207e67716a57b566daf3d6184ba1a52 SHA256 d2cfa38406eb3ed863232c565abf6127984b59520ad1d9e00b4e0ca72aa1d972
-EBUILD jack-audio-connection-kit-0.116.1.ebuild 3750 RMD160 9c52d66a19670c8463462e7ab45d521acb0a8172 SHA1 bcf80a38efbe934a473960a3e655a61c1fcfcdae SHA256 c51b2d83693f8b432ba3d643d40557646e390d5622cc787ee56ec1b83ac586ba
+EBUILD jack-audio-connection-kit-0.116.1.ebuild 3948 RMD160 49043b85116d1cbed55797c0a24b654669d84706 SHA1 eff15192cb8f6cee0c3baa72df752872e7e126e9 SHA256 342440977ba7268af237d9ae984515e110ee26e50e4bef04965d129369c94808
EBUILD jack-audio-connection-kit-9999.ebuild 4848 RMD160 f64941a574ef1717abd351b8edb5613279b90376 SHA1 8e82fecabff302ae0b514ae6fa29bec49207c881 SHA256 6a41d6cc692aa4d64b16b373f5d3dc12e7cba87381892ff7e930ff7b8fd6a6af
MISC ChangeLog 3539 RMD160 b086e2d0d85010139008f643f1cff9a734edb3fc SHA1 cbf8a1a6526b0d6512001cf978ce67f1b47178c4 SHA256 37ff9acc8c3112600739b86c6e0c0310794675d18ab1b341c541d08e82f47922
MISC metadata.xml 268 RMD160 facc07bd885f20615a1f2555069329c642e1a566 SHA1 2456bdb8a218c9d477d2d6ee4bf158de070c7be4 SHA256 96629b266b743f566c29158d4498edeeb1cd6b1f0cd9629e42d4f10b4da82f89
Added: trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-0.116.1-dbus.patch
===================================================================
--- trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-0.116.1-dbus.patch (rev 0)
+++ trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-0.116.1-dbus.patch 2008-12-14 16:04:17 UTC (rev 1388)
@@ -0,0 +1,23898 @@
+diff -Naur jack-audio-connection-kit-0.116.1/aclocal.m4 jack-audio-connection-kit-0.116.1_dbus/aclocal.m4
+--- jack-audio-connection-kit-0.116.1/aclocal.m4 2008-12-05 21:48:31.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/aclocal.m4 2008-12-07 19:02:46.000000000 +0100
+@@ -1,7 +1,7 @@
+-# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
++# generated automatically by aclocal 1.10 -*- Autoconf -*-
+
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2005, 2006 Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -11,13 +11,10 @@
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+
+-m4_ifndef([AC_AUTOCONF_VERSION],
+- [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+-m4_if(AC_AUTOCONF_VERSION, [2.61],,
+-[m4_warning([this file was generated for autoconf 2.61.
+-You have another version of autoconf. It may work, but is not guaranteed to.
+-If you have problems, you may need to regenerate the build system entirely.
+-To do so, use the procedure documented by the package, typically `autoreconf'.])])
++m4_if(m4_PACKAGE_VERSION, [2.61],,
++[m4_fatal([this file was generated for autoconf 2.61.
++You have another version of autoconf. If you want to use that,
++you should regenerate the build system entirely.], [63])])
+
+ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+@@ -573,7 +570,6 @@
+ esac
+ ;;
+ *64-bit*)
+- libsuff=64
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+@@ -1632,13 +1628,11 @@
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -6589,7 +6583,7 @@
+
+ # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+ #
+-# Copyright © 2004 Scott James Remnant <scott@xxxxxxxxxxxx>.
++# Copyright \xA9 2004 Scott James Remnant <scott@xxxxxxxxxxxx>.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -6655,14 +6649,16 @@
+ # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+ # ---------------------------------------------
+ m4_define([_PKG_CONFIG],
+-[if test -n "$$1"; then
+- pkg_cv_[]$1="$$1"
+- elif test -n "$PKG_CONFIG"; then
+- PKG_CHECK_EXISTS([$3],
+- [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+- [pkg_failed=yes])
+- else
+- pkg_failed=untried
++[if test -n "$PKG_CONFIG"; then
++ if test -n "$$1"; then
++ pkg_cv_[]$1="$$1"
++ else
++ PKG_CHECK_EXISTS([$3],
++ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
++ [pkg_failed=yes])
++ fi
++else
++ pkg_failed=untried
+ fi[]dnl
+ ])# _PKG_CONFIG
+
+@@ -6706,9 +6702,9 @@
+ if test $pkg_failed = yes; then
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+- $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
++ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+ else
+- $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
++ $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+@@ -6743,7 +6739,7 @@
+ fi[]dnl
+ ])# PKG_CHECK_MODULES
+
+-# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
++# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -6758,7 +6754,7 @@
+ [am__api_version='1.10'
+ dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+ dnl require some minimum version. Point them to the right macro.
+-m4_if([$1], [1.10.1], [],
++m4_if([$1], [1.10], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+ ])
+
+@@ -6774,10 +6770,8 @@
+ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+ # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+-[AM_AUTOMAKE_VERSION([1.10.1])dnl
+-m4_ifndef([AC_AUTOCONF_VERSION],
+- [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+-_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
++[AM_AUTOMAKE_VERSION([1.10])dnl
++_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)])
+
+ # AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+@@ -7049,7 +7043,7 @@
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
++ if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+@@ -7109,13 +7103,13 @@
+ # Do all the work for Automake. -*- Autoconf -*-
+
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-# 2005, 2006, 2008 Free Software Foundation, Inc.
++# 2005, 2006 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+
+-# serial 13
++# serial 12
+
+ # This macro actually does too much. Some checks are only needed if
+ # your package does certain things. But this isn't really a big deal.
+@@ -7220,17 +7214,16 @@
+ # our stamp files there.
+ AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+ [# Compute $1's index in $config_headers.
+-_am_arg=$1
+ _am_stamp_count=1
+ for _am_header in $config_headers :; do
+ case $_am_header in
+- $_am_arg | $_am_arg:* )
++ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+ done
+-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
++echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+ # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+ #
+@@ -7565,7 +7558,7 @@
+
+ # _AM_SUBST_NOTMAKE(VARIABLE)
+ # ---------------------------
+-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
++# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in.
+ # This macro is traced by Automake.
+ AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/alpha/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/alpha/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/alpha/Makefile.in 2008-12-05 21:48:39.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/alpha/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/cris/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/cris/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/cris/Makefile.in 2008-12-05 21:48:39.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/cris/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/generic/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/generic/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/generic/Makefile.in 2008-12-05 21:48:39.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/generic/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/i386/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/i386/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/i386/Makefile.in 2008-12-05 21:48:39.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/i386/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/i486/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/i486/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/i486/Makefile.in 2008-12-05 21:48:40.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/i486/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/ia64/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/ia64/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/ia64/Makefile.in 2008-12-05 21:48:40.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/ia64/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/m68k/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/m68k/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/m68k/Makefile.in 2008-12-05 21:48:40.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/m68k/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/Makefile.in 2008-12-05 21:48:38.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -79,6 +79,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -120,6 +123,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -319,8 +324,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -345,8 +350,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -356,12 +361,13 @@
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/mips/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/mips/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/mips/Makefile.in 2008-12-05 21:48:40.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/mips/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/powerpc/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/powerpc/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/powerpc/Makefile.in 2008-12-05 21:48:40.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/powerpc/Makefile.in 2008-12-07 19:02:52.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/cpu/s390/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/cpu/s390/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/cpu/s390/Makefile.in 2008-12-05 21:48:40.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/cpu/s390/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/depcomp jack-audio-connection-kit-0.116.1_dbus/config/depcomp
+--- jack-audio-connection-kit-0.116.1/config/depcomp 2008-02-04 14:53:53.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/depcomp 2007-11-10 12:48:35.000000000 +0100
+@@ -1,9 +1,9 @@
+ #! /bin/sh
+ # depcomp - compile a program generating dependencies as side-effects
+
+-scriptversion=2007-03-29.01
++scriptversion=2006-10-15.18
+
+-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
++# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
+ # Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+@@ -215,39 +215,34 @@
+ # current directory. Also, the AIX compiler puts `$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+- test "x$dir" = "x$object" && dir=
+- base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
++ tmpdepfile="$stripped.u"
+ if test "$libtool" = yes; then
+- tmpdepfile1=$dir$base.u
+- tmpdepfile2=$base.u
+- tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+- tmpdepfile1=$dir$base.u
+- tmpdepfile2=$dir$base.u
+- tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+
++ if test -f "$tmpdepfile"; then :
++ else
++ stripped=`echo "$stripped" | sed 's,^.*/,,'`
++ tmpdepfile="$stripped.u"
++ fi
++
+ if test $stat -eq 0; then :
+ else
+- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+- for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+- do
+- test -f "$tmpdepfile" && break
+- done
+ if test -f "$tmpdepfile"; then
++ outname="$stripped.o"
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+- sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+- # That's a tab and a space in the [].
+- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
++ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
++ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+diff -Naur jack-audio-connection-kit-0.116.1/config/install-sh jack-audio-connection-kit-0.116.1_dbus/config/install-sh
+--- jack-audio-connection-kit-0.116.1/config/install-sh 2008-02-04 14:53:53.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/install-sh 2007-11-10 12:48:35.000000000 +0100
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ # install - install a program, script, or datafile
+
+-scriptversion=2006-12-25.00
++scriptversion=2006-10-14.15
+
+ # This originates from X11R5 (mit/util/scripts/install.sh), which was
+ # later released in X11R6 (xc/config/util/install.sh) with the
+@@ -48,7 +48,7 @@
+ # set DOITPROG to echo to test this script
+
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
+-doit=${DOITPROG-}
++doit="${DOITPROG-}"
+ if test -z "$doit"; then
+ doit_exec=exec
+ else
+@@ -58,49 +58,34 @@
+ # Put in absolute file names if you don't have them in your path;
+ # or use environment vars.
+
+-chgrpprog=${CHGRPPROG-chgrp}
+-chmodprog=${CHMODPROG-chmod}
+-chownprog=${CHOWNPROG-chown}
+-cmpprog=${CMPPROG-cmp}
+-cpprog=${CPPROG-cp}
+-mkdirprog=${MKDIRPROG-mkdir}
+-mvprog=${MVPROG-mv}
+-rmprog=${RMPROG-rm}
+-stripprog=${STRIPPROG-strip}
+-
+-posix_glob='?'
+-initialize_posix_glob='
+- test "$posix_glob" != "?" || {
+- if (set -f) 2>/dev/null; then
+- posix_glob=
+- else
+- posix_glob=:
+- fi
+- }
+-'
++mvprog="${MVPROG-mv}"
++cpprog="${CPPROG-cp}"
++chmodprog="${CHMODPROG-chmod}"
++chownprog="${CHOWNPROG-chown}"
++chgrpprog="${CHGRPPROG-chgrp}"
++stripprog="${STRIPPROG-strip}"
++rmprog="${RMPROG-rm}"
++mkdirprog="${MKDIRPROG-mkdir}"
+
++posix_glob=
+ posix_mkdir=
+
+ # Desired mode of installed file.
+ mode=0755
+
+-chgrpcmd=
+ chmodcmd=$chmodprog
+ chowncmd=
+-mvcmd=$mvprog
+-rmcmd="$rmprog -f"
++chgrpcmd=
+ stripcmd=
+-
++rmcmd="$rmprog -f"
++mvcmd="$mvprog"
+ src=
+ dst=
+ dir_arg=
+-dst_arg=
+-
+-copy_on_change=false
++dstarg=
+ no_target_directory=
+
+-usage="\
+-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
++usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+@@ -110,55 +95,65 @@
+ In the 4th, create DIRECTORIES.
+
+ Options:
+- --help display this help and exit.
+- --version display version info and exit.
+-
+- -c (ignored)
+- -C install only if different (preserve the last data modification time)
+- -d create directories instead of installing files.
+- -g GROUP $chgrpprog installed files to GROUP.
+- -m MODE $chmodprog installed files to MODE.
+- -o USER $chownprog installed files to USER.
+- -s $stripprog installed files.
+- -t DIRECTORY install into DIRECTORY.
+- -T report an error if DSTFILE is a directory.
++-c (ignored)
++-d create directories instead of installing files.
++-g GROUP $chgrpprog installed files to GROUP.
++-m MODE $chmodprog installed files to MODE.
++-o USER $chownprog installed files to USER.
++-s $stripprog installed files.
++-t DIRECTORY install into DIRECTORY.
++-T report an error if DSTFILE is a directory.
++--help display this help and exit.
++--version display version info and exit.
+
+ Environment variables override the default commands:
+- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+- RMPROG STRIPPROG
++ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+ "
+
+ while test $# -ne 0; do
+ case $1 in
+- -c) ;;
+-
+- -C) copy_on_change=true;;
++ -c) shift
++ continue;;
+
+- -d) dir_arg=true;;
++ -d) dir_arg=true
++ shift
++ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+- shift;;
++ shift
++ shift
++ continue;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
++ shift
++ shift
+ case $mode in
+ *' '* | *' '* | *'
+ '* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+- shift;;
++ continue;;
+
+ -o) chowncmd="$chownprog $2"
+- shift;;
+-
+- -s) stripcmd=$stripprog;;
+-
+- -t) dst_arg=$2
+- shift;;
+-
+- -T) no_target_directory=true;;
++ shift
++ shift
++ continue;;
++
++ -s) stripcmd=$stripprog
++ shift
++ continue;;
++
++ -t) dstarg=$2
++ shift
++ shift
++ continue;;
++
++ -T) no_target_directory=true
++ shift
++ continue;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+@@ -170,22 +165,21 @@
+
+ *) break;;
+ esac
+- shift
+ done
+
+-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
++if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+- if test -n "$dst_arg"; then
++ if test -n "$dstarg"; then
+ # $@ is not empty: it contains at least $arg.
+- set fnord "$@" "$dst_arg"
++ set fnord "$@" "$dstarg"
+ shift # fnord
+ fi
+ shift # arg
+- dst_arg=$arg
++ dstarg=$arg
+ done
+ fi
+
+@@ -230,7 +224,7 @@
+ do
+ # Protect names starting with `-'.
+ case $src in
+- -*) src=./$src;;
++ -*) src=./$src ;;
+ esac
+
+ if test -n "$dir_arg"; then
+@@ -248,22 +242,22 @@
+ exit 1
+ fi
+
+- if test -z "$dst_arg"; then
++ if test -z "$dstarg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+- dst=$dst_arg
++ dst=$dstarg
+ # Protect names starting with `-'.
+ case $dst in
+- -*) dst=./$dst;;
++ -*) dst=./$dst ;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+- echo "$0: $dst_arg: Is a directory" >&2
++ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+@@ -384,19 +378,26 @@
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+- /*) prefix='/';;
+- -*) prefix='./';;
+- *) prefix='';;
++ /*) prefix=/ ;;
++ -*) prefix=./ ;;
++ *) prefix= ;;
+ esac
+
+- eval "$initialize_posix_glob"
++ case $posix_glob in
++ '')
++ if (set -f) 2>/dev/null; then
++ posix_glob=true
++ else
++ posix_glob=false
++ fi ;;
++ esac
+
+ oIFS=$IFS
+ IFS=/
+- $posix_glob set -f
++ $posix_glob && set -f
+ set fnord $dstdir
+ shift
+- $posix_glob set +f
++ $posix_glob && set +f
+ IFS=$oIFS
+
+ prefixes=
+@@ -458,54 +459,41 @@
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+-
+- # If -C, don't bother to copy if it wouldn't change the file.
+- if $copy_on_change &&
+- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+-
+- eval "$initialize_posix_glob" &&
+- $posix_glob set -f &&
+- set X $old && old=:$2:$4:$5:$6 &&
+- set X $new && new=:$2:$4:$5:$6 &&
+- $posix_glob set +f &&
+-
+- test "$old" = "$new" &&
+- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+- then
+- rm -f "$dsttmp"
+- else
+- # Rename the file to the real destination.
+- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+-
+- # The rename failed, perhaps because mv can't rename something else
+- # to itself, or perhaps because mv is so ancient that it does not
+- # support -f.
+- {
+- # Now remove or move aside any old file at destination location.
+- # We try this two ways since rm can't unlink itself on some
+- # systems and the destination file might be busy for other
+- # reasons. In this case, the final cleanup might fail but the new
+- # file should still install successfully.
+- {
+- test ! -f "$dst" ||
+- $doit $rmcmd -f "$dst" 2>/dev/null ||
+- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+- } ||
+- { echo "$0: cannot unlink or rename $dst" >&2
+- (exit 1); exit 1
+- }
+- } &&
+-
+- # Now rename the file to the real destination.
+- $doit $mvcmd "$dsttmp" "$dst"
+- }
+- fi || exit 1
++ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
++ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
++ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
++ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
++
++ # Now rename the file to the real destination.
++ { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
++ || {
++ # The rename failed, perhaps because mv can't rename something else
++ # to itself, or perhaps because mv is so ancient that it does not
++ # support -f.
++
++ # Now remove or move aside any old file at destination location.
++ # We try this two ways since rm can't unlink itself on some
++ # systems and the destination file might be busy for other
++ # reasons. In this case, the final cleanup might fail but the new
++ # file should still install successfully.
++ {
++ if test -f "$dst"; then
++ $doit $rmcmd -f "$dst" 2>/dev/null \
++ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
++ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
++ || {
++ echo "$0: cannot unlink or rename $dst" >&2
++ (exit 1); exit 1
++ }
++ else
++ :
++ fi
++ } &&
++
++ # Now rename the file to the real destination.
++ $doit $mvcmd "$dsttmp" "$dst"
++ }
++ } || exit 1
+
+ trap '' 0
+ fi
+diff -Naur jack-audio-connection-kit-0.116.1/config/ltmain.sh jack-audio-connection-kit-0.116.1_dbus/config/ltmain.sh
+--- jack-audio-connection-kit-0.116.1/config/ltmain.sh 2008-01-30 21:26:55.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/ltmain.sh 2007-11-10 02:42:09.000000000 +0100
+@@ -44,7 +44,7 @@
+ PROGRAM=ltmain.sh
+ PACKAGE=libtool
+ VERSION=1.5.24
+-TIMESTAMP=" (1.1220.2.456 2007/06/24 02:25:32)"
++TIMESTAMP=" (1.1220.2.455 2007/06/24 02:13:29)"
+
+ # Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+diff -Naur jack-audio-connection-kit-0.116.1/config/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/Makefile.in 2008-12-05 21:48:46.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/Makefile.in 2008-12-07 19:02:56.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -83,6 +83,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -124,6 +127,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -326,8 +331,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -352,8 +357,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -363,12 +368,13 @@
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/os/generic/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/os/generic/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/os/generic/Makefile.in 2008-12-05 21:48:41.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/os/generic/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/os/gnu-linux/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/os/gnu-linux/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/os/gnu-linux/Makefile.in 2008-12-05 21:48:41.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/os/gnu-linux/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -242,8 +247,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -255,8 +260,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -266,12 +271,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/os/macosx/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/os/macosx/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/os/macosx/Makefile.in 2008-12-05 21:48:41.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/os/macosx/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -245,8 +250,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -258,8 +263,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -269,12 +274,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/os/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/os/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/os/Makefile.in 2008-12-05 21:48:41.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/os/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -79,6 +79,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -120,6 +123,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -319,8 +324,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -345,8 +350,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -356,12 +361,13 @@
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config/sysdeps/Makefile.in jack-audio-connection-kit-0.116.1_dbus/config/sysdeps/Makefile.in
+--- jack-audio-connection-kit-0.116.1/config/sysdeps/Makefile.in 2008-12-05 21:48:41.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config/sysdeps/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -253,8 +258,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -266,8 +271,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -277,12 +282,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/config.h.in jack-audio-connection-kit-0.116.1_dbus/config.h.in
+--- jack-audio-connection-kit-0.116.1/config.h.in 2008-12-04 22:00:51.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/config.h.in 2008-12-07 19:02:50.000000000 +0100
+@@ -3,6 +3,9 @@
+ /* Directory for plugins */
+ #undef ADDON_DIR
+
++/* Where services dir for DBUS is */
++#undef DBUS_SERVICES_DIR
++
+ /* Enable debugging messages */
+ #undef DEBUG_ENABLED
+
+@@ -39,9 +42,15 @@
+ /* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+ #undef HAVE_COREAUDIO_COREAUDIO_H
+
++/* Defined if D-Bus support needs to be built. */
++#undef HAVE_DBUS
++
+ /* Define to 1 if you have the <dlfcn.h> header file. */
+ #undef HAVE_DLFCN_H
+
++/* Define to 1 if you have the <expat.h> header file. */
++#undef HAVE_EXPAT_H
++
+ /* Define to 1 if you have the <getopt.h> header file. */
+ #undef HAVE_GETOPT_H
+
+@@ -69,6 +78,9 @@
+ /* Define to 1 if you have the `socket' library (-lsocket). */
+ #undef HAVE_LIBSOCKET
+
++/* Defined if libxml2 is present. */
++#undef HAVE_LIBXML2
++
+ /* Define to 1 if you have the <memory.h> header file. */
+ #undef HAVE_MEMORY_H
+
+@@ -154,6 +166,12 @@
+ /* Protocol version */
+ #undef PROTOCOL_VERSION
+
++/* Whether expat is used as settings persistence backend */
++#undef SETTINGS_PERSISTENCE_USE_EXPAT
++
++/* Whether libxml2 is used as settings persistence backend */
++#undef SETTINGS_PERSISTENCE_USE_LIBXML2
++
+ /* Define to 1 if you have the ANSI C header files. */
+ #undef STDC_HEADERS
+
+diff -Naur jack-audio-connection-kit-0.116.1/configure jack-audio-connection-kit-0.116.1_dbus/configure
+--- jack-audio-connection-kit-0.116.1/configure 2008-12-05 21:48:48.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/configure 2008-12-07 19:02:57.000000000 +0100
+@@ -903,6 +903,15 @@
+ SAMPLERATE_LIBS
+ CELT_CFLAGS
+ CELT_LIBS
++DBUS_CFLAGS
++DBUS_LIBS
++HAVE_DBUS_TRUE
++HAVE_DBUS_FALSE
++DBUS_SERVICES_DIR
++LIBXML2_CFLAGS
++LIBXML2_LIBS
++HAVE_LIBXML2_TRUE
++HAVE_LIBXML2_FALSE
+ PA_LIBS
+ HAVE_PA_TRUE
+ HAVE_PA_FALSE
+@@ -945,6 +954,12 @@
+ STRIPPED_JACKD_FALSE
+ HAVE_PPOLL_TRUE
+ HAVE_PPOLL_FALSE
++SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE
++SETTINGS_PERSISTENCE_USE_LIBXML2_FALSE
++SETTINGS_PERSISTENCE_USE_EXPAT_TRUE
++SETTINGS_PERSISTENCE_USE_EXPAT_FALSE
++SETTINGS_PERSISTENCE_DISABLED_TRUE
++SETTINGS_PERSISTENCE_DISABLED_FALSE
+ LIBOBJS
+ LTLIBOBJS'
+ ac_subst_files=''
+@@ -970,6 +985,10 @@
+ SAMPLERATE_LIBS
+ CELT_CFLAGS
+ CELT_LIBS
++DBUS_CFLAGS
++DBUS_LIBS
++LIBXML2_CFLAGS
++LIBXML2_LIBS
+ LIBFREEBOB_CFLAGS
+ LIBFREEBOB_LIBS
+ LIBFFADO_CFLAGS
+@@ -1595,6 +1614,8 @@
+ --disable-oldtrans remove old transport interfaces (default=yes)
+ --enable-stripped-jackd strip jack before computing its md5 sum (useful only
+ with Linux 2.4 kernel)
++ --disable-dbus don't build D-Bus integration
++ --enable-pkg-config-dbus-service-dir force D-Bus service install dir to be one returned by pkg-config
+ --enable-portaudio build PortAudio driver
+ --disable-coreaudio ignore CoreAudio driver
+ --disable-oss ignore OSS driver
+@@ -1642,6 +1663,12 @@
+ linker flags for SAMPLERATE, overriding pkg-config
+ CELT_CFLAGS C compiler flags for CELT, overriding pkg-config
+ CELT_LIBS linker flags for CELT, overriding pkg-config
++ DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config
++ DBUS_LIBS linker flags for DBUS, overriding pkg-config
++ LIBXML2_CFLAGS
++ C compiler flags for LIBXML2, overriding pkg-config
++ LIBXML2_LIBS
++ linker flags for LIBXML2, overriding pkg-config
+ LIBFREEBOB_CFLAGS
+ C compiler flags for LIBFREEBOB, overriding pkg-config
+ LIBFREEBOB_LIBS
+@@ -5034,7 +5061,7 @@
+ ;;
+ *-*-irix6*)
+ # Find out which ABI we are using.
+- echo '#line 5037 "configure"' > conftest.$ac_ext
++ echo '#line 5064 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -5099,7 +5126,6 @@
+ esac
+ ;;
+ *64-bit*)
+- libsuff=64
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+@@ -7300,11 +7326,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:7303: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:7329: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:7307: \$? = $ac_status" >&5
++ echo "$as_me:7333: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -7590,11 +7616,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:7593: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:7619: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:7597: \$? = $ac_status" >&5
++ echo "$as_me:7623: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -7694,11 +7720,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:7697: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:7723: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:7701: \$? = $ac_status" >&5
++ echo "$as_me:7727: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -9202,13 +9228,11 @@
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -10045,7 +10069,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+-#line 10048 "configure"
++#line 10072 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10145,7 +10169,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+-#line 10148 "configure"
++#line 10172 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -12565,11 +12589,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:12568: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:12592: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:12572: \$? = $ac_status" >&5
++ echo "$as_me:12596: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -12669,11 +12693,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:12672: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:12696: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:12676: \$? = $ac_status" >&5
++ echo "$as_me:12700: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -13170,13 +13194,11 @@
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -14233,11 +14255,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:14236: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:14258: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:14240: \$? = $ac_status" >&5
++ echo "$as_me:14262: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -14337,11 +14359,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:14340: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:14362: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:14344: \$? = $ac_status" >&5
++ echo "$as_me:14366: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -15773,13 +15795,11 @@
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -16526,11 +16546,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:16529: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:16549: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:16533: \$? = $ac_status" >&5
++ echo "$as_me:16553: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -16816,11 +16836,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:16819: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:16839: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:16823: \$? = $ac_status" >&5
++ echo "$as_me:16843: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -16920,11 +16940,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:16923: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:16943: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:16927: \$? = $ac_status" >&5
++ echo "$as_me:16947: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -18376,13 +18396,11 @@
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -23402,10 +23420,11 @@
+ { echo "$as_me:$LINENO: checking for SNDFILE" >&5
+ echo $ECHO_N "checking for SNDFILE... $ECHO_C" >&6; }
+
+-if test -n "$SNDFILE_CFLAGS"; then
+- pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$SNDFILE_CFLAGS"; then
++ pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0\"") >&5
+ ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0") 2>&5
+ ac_status=$?
+@@ -23415,13 +23434,15 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+-if test -n "$SNDFILE_LIBS"; then
+- pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$SNDFILE_LIBS"; then
++ pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0\"") >&5
+ ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0") 2>&5
+ ac_status=$?
+@@ -23431,8 +23452,9 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+
+
+@@ -23445,9 +23467,9 @@
+ _pkg_short_errors_supported=no
+ fi
+ if test $_pkg_short_errors_supported = yes; then
+- SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "sndfile >= 1.0" 2>&1`
++ SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sndfile >= 1.0"`
+ else
+- SNDFILE_PKG_ERRORS=`$PKG_CONFIG --print-errors "sndfile >= 1.0" 2>&1`
++ SNDFILE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sndfile >= 1.0"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SNDFILE_PKG_ERRORS" >&5
+@@ -23476,10 +23498,11 @@
+ { echo "$as_me:$LINENO: checking for SAMPLERATE" >&5
+ echo $ECHO_N "checking for SAMPLERATE... $ECHO_C" >&6; }
+
+-if test -n "$SAMPLERATE_CFLAGS"; then
+- pkg_cv_SAMPLERATE_CFLAGS="$SAMPLERATE_CFLAGS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$SAMPLERATE_CFLAGS"; then
++ pkg_cv_SAMPLERATE_CFLAGS="$SAMPLERATE_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.2\"") >&5
+ ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.2") 2>&5
+ ac_status=$?
+@@ -23489,13 +23512,15 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+-if test -n "$SAMPLERATE_LIBS"; then
+- pkg_cv_SAMPLERATE_LIBS="$SAMPLERATE_LIBS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$SAMPLERATE_LIBS"; then
++ pkg_cv_SAMPLERATE_LIBS="$SAMPLERATE_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.1.2\"") >&5
+ ($PKG_CONFIG --exists --print-errors "samplerate >= 0.1.2") 2>&5
+ ac_status=$?
+@@ -23505,8 +23530,9 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+
+
+@@ -23519,9 +23545,9 @@
+ _pkg_short_errors_supported=no
+ fi
+ if test $_pkg_short_errors_supported = yes; then
+- SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "samplerate >= 0.1.2" 2>&1`
++ SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "samplerate >= 0.1.2"`
+ else
+- SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --print-errors "samplerate >= 0.1.2" 2>&1`
++ SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "samplerate >= 0.1.2"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SAMPLERATE_PKG_ERRORS" >&5
+@@ -23553,10 +23579,11 @@
+ { echo "$as_me:$LINENO: checking for CELT" >&5
+ echo $ECHO_N "checking for CELT... $ECHO_C" >&6; }
+
+-if test -n "$CELT_CFLAGS"; then
+- pkg_cv_CELT_CFLAGS="$CELT_CFLAGS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$CELT_CFLAGS"; then
++ pkg_cv_CELT_CFLAGS="$CELT_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"celt >= 0.5.0\"") >&5
+ ($PKG_CONFIG --exists --print-errors "celt >= 0.5.0") 2>&5
+ ac_status=$?
+@@ -23566,13 +23593,15 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+-if test -n "$CELT_LIBS"; then
+- pkg_cv_CELT_LIBS="$CELT_LIBS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$CELT_LIBS"; then
++ pkg_cv_CELT_LIBS="$CELT_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"celt >= 0.5.0\"") >&5
+ ($PKG_CONFIG --exists --print-errors "celt >= 0.5.0") 2>&5
+ ac_status=$?
+@@ -23582,8 +23611,9 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+
+
+@@ -23596,9 +23626,9 @@
+ _pkg_short_errors_supported=no
+ fi
+ if test $_pkg_short_errors_supported = yes; then
+- CELT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "celt >= 0.5.0" 2>&1`
++ CELT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "celt >= 0.5.0"`
+ else
+- CELT_PKG_ERRORS=`$PKG_CONFIG --print-errors "celt >= 0.5.0" 2>&1`
++ CELT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "celt >= 0.5.0"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$CELT_PKG_ERRORS" >&5
+@@ -23641,6 +23671,452 @@
+ # PKG_CHECK_MODULES inside a --disable-whatever check, you need to
+ # do it somewhere *below* this comment.
+
++# Check whether --enable-dbus was given.
++if test "${enable_dbus+set}" = set; then
++ enableval=$enable_dbus; TRY_DBUS=$enableval
++else
++ TRY_DBUS=yes
++fi
++
++HAVE_DBUS=false
++if test "x$TRY_DBUS" = "xyes"
++then
++
++pkg_failed=no
++{ echo "$as_me:$LINENO: checking for DBUS" >&5
++echo $ECHO_N "checking for DBUS... $ECHO_C" >&6; }
++
++if test -n "$PKG_CONFIG"; then
++ if test -n "$DBUS_CFLAGS"; then
++ pkg_cv_DBUS_CFLAGS="$DBUS_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"dbus-1\"") >&5
++ ($PKG_CONFIG --exists --print-errors "dbus-1") 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ pkg_cv_DBUS_CFLAGS=`$PKG_CONFIG --cflags "dbus-1" 2>/dev/null`
++else
++ pkg_failed=yes
++fi
++ fi
++else
++ pkg_failed=untried
++fi
++if test -n "$PKG_CONFIG"; then
++ if test -n "$DBUS_LIBS"; then
++ pkg_cv_DBUS_LIBS="$DBUS_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"dbus-1\"") >&5
++ ($PKG_CONFIG --exists --print-errors "dbus-1") 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ pkg_cv_DBUS_LIBS=`$PKG_CONFIG --libs "dbus-1" 2>/dev/null`
++else
++ pkg_failed=yes
++fi
++ fi
++else
++ pkg_failed=untried
++fi
++
++
++
++if test $pkg_failed = yes; then
++
++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
++ _pkg_short_errors_supported=yes
++else
++ _pkg_short_errors_supported=no
++fi
++ if test $_pkg_short_errors_supported = yes; then
++ DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-1"`
++ else
++ DBUS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-1"`
++ fi
++ # Put the nasty error message in config.log where it belongs
++ echo "$DBUS_PKG_ERRORS" >&5
++
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++ true
++elif test $pkg_failed = untried; then
++ true
++else
++ DBUS_CFLAGS=$pkg_cv_DBUS_CFLAGS
++ DBUS_LIBS=$pkg_cv_DBUS_LIBS
++ { echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_DBUS 1
++_ACEOF
++ HAVE_DBUS=true
++fi
++fi
++
++ if $HAVE_DBUS; then
++ HAVE_DBUS_TRUE=
++ HAVE_DBUS_FALSE='#'
++else
++ HAVE_DBUS_TRUE='#'
++ HAVE_DBUS_FALSE=
++fi
++
++
++# Check whether --enable-pkg-config-dbus-service-dir was given.
++if test "${enable_pkg_config_dbus_service_dir+set}" = set; then
++ enableval=$enable_pkg_config_dbus_service_dir; DBUS_SERVICES_DIR_FORCE_REAL=$enableval
++else
++ DBUS_SERVICES_DIR_FORCE_REAL=no
++fi
++
++
++if test "x$HAVE_DBUS" = "xtrue"
++then
++ DBUS_SERVICES_DIR_REAL=`$PKG_CONFIG --variable=session_bus_services_dir dbus-1`
++ if test "x$DBUS_SERVICES_DIR_FORCE_REAL" = "xyes"
++ then
++ { echo "$as_me:$LINENO: WARNING: overriding D-Bus service install dir" >&5
++echo "$as_me: WARNING: overriding D-Bus service install dir" >&2;}
++ DBUS_SERVICES_DIR="$DBUS_SERVICES_DIR_REAL"
++ else
++
++ EXP_VAR=DATADIR
++ FROM_VAR=$datadir
++
++ prefix_save=$prefix
++ if test "x$prefix" = "xNONE"; then
++ prefix=/usr/local
++ fi
++ exec_prefix_save=$exec_prefix
++ if test "x$exec_prefix" = "xNONE"; then
++ if test "x$prefix_save" = "xNONE"; then
++ exec_prefix=/usr/local
++ else
++ exec_prefix=$prefix
++ fi
++ fi
++
++ full_var="$FROM_VAR"
++ while true; do
++ new_full_var="`eval echo $full_var`"
++ if test "x$new_full_var" = "x$full_var"; then break; fi
++ full_var=$new_full_var
++ done
++
++ full_var=$new_full_var
++ DATADIR=$full_var
++ prefix=$prefix_save
++ exec_prefix=$exec_prefix_save
++
++ DBUS_SERVICES_DIR="$DATADIR/dbus-1/services"
++ fi
++
++
++cat >>confdefs.h <<_ACEOF
++#define DBUS_SERVICES_DIR "$DBUS_SERVICES_DIR"
++_ACEOF
++
++fi
++
++HAVE_LIBXML2=false
++
++pkg_failed=no
++{ echo "$as_me:$LINENO: checking for LIBXML2" >&5
++echo $ECHO_N "checking for LIBXML2... $ECHO_C" >&6; }
++
++if test -n "$PKG_CONFIG"; then
++ if test -n "$LIBXML2_CFLAGS"; then
++ pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\"") >&5
++ ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null`
++else
++ pkg_failed=yes
++fi
++ fi
++else
++ pkg_failed=untried
++fi
++if test -n "$PKG_CONFIG"; then
++ if test -n "$LIBXML2_LIBS"; then
++ pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\"") >&5
++ ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null`
++else
++ pkg_failed=yes
++fi
++ fi
++else
++ pkg_failed=untried
++fi
++
++
++
++if test $pkg_failed = yes; then
++
++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
++ _pkg_short_errors_supported=yes
++else
++ _pkg_short_errors_supported=no
++fi
++ if test $_pkg_short_errors_supported = yes; then
++ LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libxml-2.0"`
++ else
++ LIBXML2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libxml-2.0"`
++ fi
++ # Put the nasty error message in config.log where it belongs
++ echo "$LIBXML2_PKG_ERRORS" >&5
++
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++ true
++elif test $pkg_failed = untried; then
++ true
++else
++ LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS
++ LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS
++ { echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_LIBXML2 1
++_ACEOF
++ HAVE_LIBXML2=true
++fi
++ if $HAVE_LIBXML2; then
++ HAVE_LIBXML2_TRUE=
++ HAVE_LIBXML2_FALSE='#'
++else
++ HAVE_LIBXML2_TRUE='#'
++ HAVE_LIBXML2_FALSE=
++fi
++
++
++{ echo "$as_me:$LINENO: checking for XML_ParserCreate_MM in -lexpat" >&5
++echo $ECHO_N "checking for XML_ParserCreate_MM in -lexpat... $ECHO_C" >&6; }
++if test "${ac_cv_lib_expat_XML_ParserCreate_MM+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-lexpat $LIBS"
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char XML_ParserCreate_MM ();
++int
++main ()
++{
++return XML_ParserCreate_MM ();
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
++ ac_cv_lib_expat_XML_ParserCreate_MM=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_cv_lib_expat_XML_ParserCreate_MM=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_lib_expat_XML_ParserCreate_MM" >&5
++echo "${ECHO_T}$ac_cv_lib_expat_XML_ParserCreate_MM" >&6; }
++if test $ac_cv_lib_expat_XML_ParserCreate_MM = yes; then
++
++for ac_header in expat.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++ # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++$ac_includes_default
++#include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_header_compiler=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
++ ac_header_preproc=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So? What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++ yes:no: )
++ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++ ac_header_preproc=yes
++ ;;
++ no:yes:* )
++ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++
++ ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++ cat >>confdefs.h <<_ACEOF
++#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ HAVE_EXPAT=true
++else
++ HAVE_EXPAT=false
++fi
++
++done
++
++else
++ HAVE_EXPAT=false
++fi
++
++
+ # Check which backend drivers can be built. The last one successfully
+ # configured becomes the default JACK driver; so the order of
+ # precedence is: alsa, sun, oss, coreaudio, portaudio, dummy.
+@@ -24361,10 +24837,11 @@
+ { echo "$as_me:$LINENO: checking for LIBFREEBOB" >&5
+ echo $ECHO_N "checking for LIBFREEBOB... $ECHO_C" >&6; }
+
+-if test -n "$LIBFREEBOB_CFLAGS"; then
+- pkg_cv_LIBFREEBOB_CFLAGS="$LIBFREEBOB_CFLAGS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$LIBFREEBOB_CFLAGS"; then
++ pkg_cv_LIBFREEBOB_CFLAGS="$LIBFREEBOB_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libfreebob >= 1.0.0\"") >&5
+ ($PKG_CONFIG --exists --print-errors "libfreebob >= 1.0.0") 2>&5
+ ac_status=$?
+@@ -24374,13 +24851,15 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+-if test -n "$LIBFREEBOB_LIBS"; then
+- pkg_cv_LIBFREEBOB_LIBS="$LIBFREEBOB_LIBS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$LIBFREEBOB_LIBS"; then
++ pkg_cv_LIBFREEBOB_LIBS="$LIBFREEBOB_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libfreebob >= 1.0.0\"") >&5
+ ($PKG_CONFIG --exists --print-errors "libfreebob >= 1.0.0") 2>&5
+ ac_status=$?
+@@ -24390,8 +24869,9 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+
+
+@@ -24404,9 +24884,9 @@
+ _pkg_short_errors_supported=no
+ fi
+ if test $_pkg_short_errors_supported = yes; then
+- LIBFREEBOB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libfreebob >= 1.0.0" 2>&1`
++ LIBFREEBOB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libfreebob >= 1.0.0"`
+ else
+- LIBFREEBOB_PKG_ERRORS=`$PKG_CONFIG --print-errors "libfreebob >= 1.0.0" 2>&1`
++ LIBFREEBOB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libfreebob >= 1.0.0"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBFREEBOB_PKG_ERRORS" >&5
+@@ -24457,10 +24937,11 @@
+ { echo "$as_me:$LINENO: checking for LIBFFADO" >&5
+ echo $ECHO_N "checking for LIBFFADO... $ECHO_C" >&6; }
+
+-if test -n "$LIBFFADO_CFLAGS"; then
+- pkg_cv_LIBFFADO_CFLAGS="$LIBFFADO_CFLAGS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$LIBFFADO_CFLAGS"; then
++ pkg_cv_LIBFFADO_CFLAGS="$LIBFFADO_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libffado >= 1.999.17\"") >&5
+ ($PKG_CONFIG --exists --print-errors "libffado >= 1.999.17") 2>&5
+ ac_status=$?
+@@ -24470,13 +24951,15 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+-if test -n "$LIBFFADO_LIBS"; then
+- pkg_cv_LIBFFADO_LIBS="$LIBFFADO_LIBS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$LIBFFADO_LIBS"; then
++ pkg_cv_LIBFFADO_LIBS="$LIBFFADO_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libffado >= 1.999.17\"") >&5
+ ($PKG_CONFIG --exists --print-errors "libffado >= 1.999.17") 2>&5
+ ac_status=$?
+@@ -24486,8 +24969,9 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+
+
+@@ -24500,9 +24984,9 @@
+ _pkg_short_errors_supported=no
+ fi
+ if test $_pkg_short_errors_supported = yes; then
+- LIBFFADO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libffado >= 1.999.17" 2>&1`
++ LIBFFADO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libffado >= 1.999.17"`
+ else
+- LIBFFADO_PKG_ERRORS=`$PKG_CONFIG --print-errors "libffado >= 1.999.17" 2>&1`
++ LIBFFADO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libffado >= 1.999.17"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBFFADO_PKG_ERRORS" >&5
+@@ -24553,10 +25037,11 @@
+ { echo "$as_me:$LINENO: checking for ALSA" >&5
+ echo $ECHO_N "checking for ALSA... $ECHO_C" >&6; }
+
+-if test -n "$ALSA_CFLAGS"; then
+- pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$ALSA_CFLAGS"; then
++ pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"alsa >= 1.0.0\"") >&5
+ ($PKG_CONFIG --exists --print-errors "alsa >= 1.0.0") 2>&5
+ ac_status=$?
+@@ -24566,13 +25051,15 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+-if test -n "$ALSA_LIBS"; then
+- pkg_cv_ALSA_LIBS="$ALSA_LIBS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
++if test -n "$PKG_CONFIG"; then
++ if test -n "$ALSA_LIBS"; then
++ pkg_cv_ALSA_LIBS="$ALSA_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
+ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"alsa >= 1.0.0\"") >&5
+ ($PKG_CONFIG --exists --print-errors "alsa >= 1.0.0") 2>&5
+ ac_status=$?
+@@ -24582,8 +25069,9 @@
+ else
+ pkg_failed=yes
+ fi
+- else
+- pkg_failed=untried
++ fi
++else
++ pkg_failed=untried
+ fi
+
+
+@@ -24596,9 +25084,9 @@
+ _pkg_short_errors_supported=no
+ fi
+ if test $_pkg_short_errors_supported = yes; then
+- ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "alsa >= 1.0.0" 2>&1`
++ ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "alsa >= 1.0.0"`
+ else
+- ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors "alsa >= 1.0.0" 2>&1`
++ ALSA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "alsa >= 1.0.0"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$ALSA_PKG_ERRORS" >&5
+@@ -25117,6 +25605,68 @@
+ fi
+
+
++SETTINGS_PERSISTENCE_WARNING=
++SETTINGS_PERSISTENCE_USE_LIBXML2=false
++SETTINGS_PERSISTENCE_USE_EXPAT=false
++SETTINGS_PERSISTENCE_DISABLED=true
++
++if test x$HAVE_EXPAT = xtrue
++then
++ SETTINGS_PERSISTENCE=expat
++ SETTINGS_PERSISTENCE_USE_EXPAT=true
++ SETTINGS_PERSISTENCE_DISABLED=false
++
++cat >>confdefs.h <<_ACEOF
++#define SETTINGS_PERSISTENCE_USE_EXPAT 1
++_ACEOF
++
++else
++ if test x$HAVE_LIBXML2 = xtrue
++ then
++ if test x$HAVE_FIREWIRE = xtrue
++ then
++ SETTINGS_PERSISTENCE=no
++ SETTINGS_PERSISTENCE_WARNING="libxml2 usage is incompatible with FireWire (FFADO) driver. If you want settings persistence, install expat or disable FireWire (FFADO) driver."
++ else
++ SETTINGS_PERSISTENCE=libxml2
++ SETTINGS_PERSISTENCE_USE_LIBXML2=true
++ SETTINGS_PERSISTENCE_DISABLED=false
++
++cat >>confdefs.h <<_ACEOF
++#define SETTINGS_PERSISTENCE_USE_LIBXML2 1
++_ACEOF
++
++ fi
++ else
++ SETTINGS_PERSISTENCE=no
++ fi
++fi
++
++ if $SETTINGS_PERSISTENCE_USE_LIBXML2; then
++ SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE=
++ SETTINGS_PERSISTENCE_USE_LIBXML2_FALSE='#'
++else
++ SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE='#'
++ SETTINGS_PERSISTENCE_USE_LIBXML2_FALSE=
++fi
++
++ if $SETTINGS_PERSISTENCE_USE_EXPAT; then
++ SETTINGS_PERSISTENCE_USE_EXPAT_TRUE=
++ SETTINGS_PERSISTENCE_USE_EXPAT_FALSE='#'
++else
++ SETTINGS_PERSISTENCE_USE_EXPAT_TRUE='#'
++ SETTINGS_PERSISTENCE_USE_EXPAT_FALSE=
++fi
++
++ if $SETTINGS_PERSISTENCE_DISABLED; then
++ SETTINGS_PERSISTENCE_DISABLED_TRUE=
++ SETTINGS_PERSISTENCE_DISABLED_FALSE='#'
++else
++ SETTINGS_PERSISTENCE_DISABLED_TRUE='#'
++ SETTINGS_PERSISTENCE_DISABLED_FALSE=
++fi
++
++
+ ac_config_files="$ac_config_files Makefile config/Makefile config/cpu/Makefile config/cpu/alpha/Makefile config/cpu/cris/Makefile config/cpu/generic/Makefile config/cpu/i386/Makefile config/cpu/i486/Makefile config/cpu/ia64/Makefile config/cpu/m68k/Makefile config/cpu/mips/Makefile config/cpu/powerpc/Makefile config/cpu/s390/Makefile config/os/Makefile config/os/generic/Makefile config/os/gnu-linux/Makefile config/os/macosx/Makefile config/sysdeps/Makefile doc/Makefile doc/reference.doxygen drivers/Makefile drivers/alsa/Makefile drivers/alsa-midi/Makefile drivers/dummy/Makefile drivers/oss/Makefile drivers/sun/Makefile drivers/portaudio/Makefile drivers/coreaudio/Makefile drivers/freebob/Makefile drivers/firewire/Makefile drivers/netjack/Makefile example-clients/Makefile tools/Makefile man/Makefile jack.pc jack.spec jack/Makefile jack/version.h jackd/Makefile jackd/jackd.1 libjack/Makefile"
+
+ cat >confcache <<\_ACEOF
+@@ -25250,6 +25800,20 @@
+ Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
++if test -z "${HAVE_DBUS_TRUE}" && test -z "${HAVE_DBUS_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"HAVE_DBUS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"HAVE_DBUS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${HAVE_LIBXML2_TRUE}" && test -z "${HAVE_LIBXML2_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"HAVE_LIBXML2\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"HAVE_LIBXML2\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
+ if test -z "${HAVE_PA_TRUE}" && test -z "${HAVE_PA_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_PA\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+@@ -25362,6 +25926,27 @@
+ Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
++if test -z "${SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE}" && test -z "${SETTINGS_PERSISTENCE_USE_LIBXML2_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"SETTINGS_PERSISTENCE_USE_LIBXML2\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"SETTINGS_PERSISTENCE_USE_LIBXML2\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${SETTINGS_PERSISTENCE_USE_EXPAT_TRUE}" && test -z "${SETTINGS_PERSISTENCE_USE_EXPAT_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"SETTINGS_PERSISTENCE_USE_EXPAT\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"SETTINGS_PERSISTENCE_USE_EXPAT\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${SETTINGS_PERSISTENCE_DISABLED_TRUE}" && test -z "${SETTINGS_PERSISTENCE_DISABLED_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"SETTINGS_PERSISTENCE_DISABLED\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"SETTINGS_PERSISTENCE_DISABLED\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
+
+ : ${CONFIG_STATUS=./config.status}
+ ac_clean_files_save=$ac_clean_files
+@@ -26111,6 +26696,15 @@
+ SAMPLERATE_LIBS!$SAMPLERATE_LIBS$ac_delim
+ CELT_CFLAGS!$CELT_CFLAGS$ac_delim
+ CELT_LIBS!$CELT_LIBS$ac_delim
++DBUS_CFLAGS!$DBUS_CFLAGS$ac_delim
++DBUS_LIBS!$DBUS_LIBS$ac_delim
++HAVE_DBUS_TRUE!$HAVE_DBUS_TRUE$ac_delim
++HAVE_DBUS_FALSE!$HAVE_DBUS_FALSE$ac_delim
++DBUS_SERVICES_DIR!$DBUS_SERVICES_DIR$ac_delim
++LIBXML2_CFLAGS!$LIBXML2_CFLAGS$ac_delim
++LIBXML2_LIBS!$LIBXML2_LIBS$ac_delim
++HAVE_LIBXML2_TRUE!$HAVE_LIBXML2_TRUE$ac_delim
++HAVE_LIBXML2_FALSE!$HAVE_LIBXML2_FALSE$ac_delim
+ PA_LIBS!$PA_LIBS$ac_delim
+ HAVE_PA_TRUE!$HAVE_PA_TRUE$ac_delim
+ HAVE_PA_FALSE!$HAVE_PA_FALSE$ac_delim
+@@ -26153,11 +26747,16 @@
+ STRIPPED_JACKD_FALSE!$STRIPPED_JACKD_FALSE$ac_delim
+ HAVE_PPOLL_TRUE!$HAVE_PPOLL_TRUE$ac_delim
+ HAVE_PPOLL_FALSE!$HAVE_PPOLL_FALSE$ac_delim
++SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE!$SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE$ac_delim
++SETTINGS_PERSISTENCE_USE_LIBXML2_FALSE!$SETTINGS_PERSISTENCE_USE_LIBXML2_FALSE$ac_delim
++SETTINGS_PERSISTENCE_USE_EXPAT_TRUE!$SETTINGS_PERSISTENCE_USE_EXPAT_TRUE$ac_delim
++SETTINGS_PERSISTENCE_USE_EXPAT_FALSE!$SETTINGS_PERSISTENCE_USE_EXPAT_FALSE$ac_delim
++SETTINGS_PERSISTENCE_DISABLED_TRUE!$SETTINGS_PERSISTENCE_DISABLED_TRUE$ac_delim
++SETTINGS_PERSISTENCE_DISABLED_FALSE!$SETTINGS_PERSISTENCE_DISABLED_FALSE$ac_delim
+ LIBOBJS!$LIBOBJS$ac_delim
+-LTLIBOBJS!$LTLIBOBJS$ac_delim
+ _ACEOF
+
+- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 83; then
++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+@@ -26176,6 +26775,48 @@
+
+ cat >>$CONFIG_STATUS <<_ACEOF
+ cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
++_ACEOF
++sed '
++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
++s/^/s,@/; s/!/@,|#_!!_#|/
++:n
++t n
++s/'"$ac_delim"'$/,g/; t
++s/$/\\/; p
++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
++' >>$CONFIG_STATUS <conf$$subs.sed
++rm -f conf$$subs.sed
++cat >>$CONFIG_STATUS <<_ACEOF
++CEOF$ac_eof
++_ACEOF
++
++
++ac_delim='%!_!# '
++for ac_last_try in false false false false false :; do
++ cat >conf$$subs.sed <<_ACEOF
++LTLIBOBJS!$LTLIBOBJS$ac_delim
++_ACEOF
++
++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 1; then
++ break
++ elif $ac_last_try; then
++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
++ { (exit 1); exit 1; }; }
++ else
++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
++ fi
++done
++
++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
++if test -n "$ac_eof"; then
++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
++ ac_eof=`expr $ac_eof + 1`
++fi
++
++cat >>$CONFIG_STATUS <<_ACEOF
++cat >"\$tmp/subs-3.sed" <<\CEOF$ac_eof
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+ _ACEOF
+ sed '
+@@ -26444,7 +27085,7 @@
+ s&@INSTALL@&$ac_INSTALL&;t t
+ s&@MKDIR_P@&$ac_MKDIR_P&;t t
+ $ac_datarootdir_hack
+-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" | sed -f "$tmp/subs-3.sed" >$tmp/out
+
+ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+@@ -26558,22 +27199,21 @@
+ fi
+ rm -f "$tmp/out12"
+ # Compute $ac_file's index in $config_headers.
+-_am_arg=$ac_file
+ _am_stamp_count=1
+ for _am_header in $config_headers :; do
+ case $_am_header in
+- $_am_arg | $_am_arg:* )
++ $ac_file | $ac_file:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+ done
+-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$_am_arg" : 'X\(//\)[^/]' \| \
+- X"$_am_arg" : 'X\(//\)$' \| \
+- X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+-echo X"$_am_arg" |
++echo "timestamp for $ac_file" >`$as_dirname -- $ac_file ||
++$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X$ac_file : 'X\(//\)[^/]' \| \
++ X$ac_file : 'X\(//\)$' \| \
++ X$ac_file : 'X\(/\)' \| . 2>/dev/null ||
++echo X$ac_file |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+@@ -26610,7 +27250,7 @@
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+- if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
++ if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+ $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+@@ -26778,7 +27418,32 @@
+ echo \| Default driver backend................................ : $JACK_DEFAULT_DRIVER
+ echo \| Shared memory interface............................... : $JACK_SHM_TYPE
+ echo \| IPC Temporary directory............................... : $DEFAULT_TMP_DIR
++echo \| D-Bus integration .................................... : $HAVE_DBUS
++if test "x$HAVE_DBUS" = "xtrue"
++then
++echo \| D-Bus service install dir............................. : $DBUS_SERVICES_DIR
++echo \| Settings persistence.................................. : $SETTINGS_PERSISTENCE
++fi
+ echo \| Install prefix........................................ : $prefix
+ echo \| Default tmp dir....................................... : $DEFAULT_TMP_DIR
+ echo
+
++if test "x$HAVE_DBUS" = "xtrue" -a "x$DBUS_SERVICES_DIR_REAL" != "x$DBUS_SERVICES_DIR"
++then
++ { echo "$as_me:$LINENO: WARNING: D-Bus session services directory as reported by pkg-config is $DBUS_SERVICES_DIR_REAL" >&5
++echo "$as_me: WARNING: D-Bus session services directory as reported by pkg-config is $DBUS_SERVICES_DIR_REAL" >&2;}
++ { echo "$as_me:$LINENO: WARNING: but service file will be installed in $DBUS_SERVICES_DIR" >&5
++echo "$as_me: WARNING: but service file will be installed in $DBUS_SERVICES_DIR" >&2;}
++ { echo "$as_me:$LINENO: WARNING: You may need to adjust your D-Bus configuration after installing jackdbus" >&5
++echo "$as_me: WARNING: You may need to adjust your D-Bus configuration after installing jackdbus" >&2;}
++ { echo "$as_me:$LINENO: WARNING: You can override dbus service install dir" >&5
++echo "$as_me: WARNING: You can override dbus service install dir" >&2;}
++ { echo "$as_me:$LINENO: WARNING: with --enable-pkg-config-dbus-service-dir option to this script" >&5
++echo "$as_me: WARNING: with --enable-pkg-config-dbus-service-dir option to this script" >&2;}
++fi
++
++if test "$SETTINGS_PERSISTENCE_WARNING"
++then
++ { echo "$as_me:$LINENO: WARNING: $SETTINGS_PERSISTENCE_WARNING" >&5
++echo "$as_me: WARNING: $SETTINGS_PERSISTENCE_WARNING" >&2;}
++fi
+diff -Naur jack-audio-connection-kit-0.116.1/configure.ac jack-audio-connection-kit-0.116.1_dbus/configure.ac
+--- jack-audio-connection-kit-0.116.1/configure.ac 2008-12-06 10:32:50.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/configure.ac 2008-12-07 19:01:15.000000000 +0100
+@@ -1,5 +1,5 @@
+ dnl Process this file with autoconf to produce a configure script.
+-dnl $Id: configure.ac 3189 2008-12-06 09:35:29Z paul $
++dnl $Id$
+
+ AC_INIT(jackd/jackd.c)
+
+@@ -678,6 +678,43 @@
+ # PKG_CHECK_MODULES inside a --disable-whatever check, you need to
+ # do it somewhere *below* this comment.
+
++AC_ARG_ENABLE(dbus, [ --disable-dbus don't build D-Bus integration ],
++ TRY_DBUS=$enableval , TRY_DBUS=yes )
++HAVE_DBUS=false
++if test "x$TRY_DBUS" = "xyes"
++then
++ PKG_CHECK_MODULES(DBUS, dbus-1, [AC_DEFINE([HAVE_DBUS], 1, [Defined if D-Bus support needs to be built.]) HAVE_DBUS=true], [true])
++fi
++
++AM_CONDITIONAL(HAVE_DBUS, $HAVE_DBUS)
++
++AC_ARG_ENABLE(pkg-config-dbus-service-dir,
++ [ --enable-pkg-config-dbus-service-dir force D-Bus service install dir to be one returned by pkg-config ],
++ DBUS_SERVICES_DIR_FORCE_REAL=$enableval , DBUS_SERVICES_DIR_FORCE_REAL=no )
++
++if test "x$HAVE_DBUS" = "xtrue"
++then
++ DBUS_SERVICES_DIR_REAL=`$PKG_CONFIG --variable=session_bus_services_dir dbus-1`
++ if test "x$DBUS_SERVICES_DIR_FORCE_REAL" = "xyes"
++ then
++ AC_MSG_WARN([overriding D-Bus service install dir])
++ DBUS_SERVICES_DIR="$DBUS_SERVICES_DIR_REAL"
++ else
++ AS_AC_EXPAND(DATADIR, $datadir)
++ DBUS_SERVICES_DIR="$DATADIR/dbus-1/services"
++ fi
++ AC_SUBST(DBUS_SERVICES_DIR)
++ AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for DBUS is])
++fi
++
++HAVE_LIBXML2=false
++PKG_CHECK_MODULES(LIBXML2, libxml-2.0, [AC_DEFINE([HAVE_LIBXML2], 1, [Defined if libxml2 is present.]) HAVE_LIBXML2=true], [true])
++AM_CONDITIONAL(HAVE_LIBXML2, $HAVE_LIBXML2)
++
++AC_CHECK_LIB(expat, XML_ParserCreate_MM,
++ [ AC_CHECK_HEADERS(expat.h, HAVE_EXPAT=true, HAVE_EXPAT=false) ],
++ HAVE_EXPAT=false)
++
+ # Check which backend drivers can be built. The last one successfully
+ # configured becomes the default JACK driver; so the order of
+ # precedence is: alsa, sun, oss, coreaudio, portaudio, dummy.
+@@ -844,6 +881,39 @@
+ AM_CONDITIONAL(STRIPPED_JACKD, $STRIPPED_JACKD)
+ AM_CONDITIONAL(HAVE_PPOLL, $HAVE_PPOLL)
+
++SETTINGS_PERSISTENCE_WARNING=
++SETTINGS_PERSISTENCE_USE_LIBXML2=false
++SETTINGS_PERSISTENCE_USE_EXPAT=false
++SETTINGS_PERSISTENCE_DISABLED=true
++
++if test x$HAVE_EXPAT = xtrue
++then
++ SETTINGS_PERSISTENCE=expat
++ SETTINGS_PERSISTENCE_USE_EXPAT=true
++ SETTINGS_PERSISTENCE_DISABLED=false
++ AC_DEFINE_UNQUOTED(SETTINGS_PERSISTENCE_USE_EXPAT, 1, [Whether expat is used as settings persistence backend])
++else
++ if test x$HAVE_LIBXML2 = xtrue
++ then
++ if test x$HAVE_FIREWIRE = xtrue
++ then
++ SETTINGS_PERSISTENCE=no
++ SETTINGS_PERSISTENCE_WARNING="libxml2 usage is incompatible with FireWire (FFADO) driver. If you want settings persistence, install expat or disable FireWire (FFADO) driver."
++ else
++ SETTINGS_PERSISTENCE=libxml2
++ SETTINGS_PERSISTENCE_USE_LIBXML2=true
++ SETTINGS_PERSISTENCE_DISABLED=false
++ AC_DEFINE_UNQUOTED(SETTINGS_PERSISTENCE_USE_LIBXML2, 1, [Whether libxml2 is used as settings persistence backend])
++ fi
++ else
++ SETTINGS_PERSISTENCE=no
++ fi
++fi
++
++AM_CONDITIONAL(SETTINGS_PERSISTENCE_USE_LIBXML2, $SETTINGS_PERSISTENCE_USE_LIBXML2)
++AM_CONDITIONAL(SETTINGS_PERSISTENCE_USE_EXPAT, $SETTINGS_PERSISTENCE_USE_EXPAT)
++AM_CONDITIONAL(SETTINGS_PERSISTENCE_DISABLED, $SETTINGS_PERSISTENCE_DISABLED)
++
+ AC_OUTPUT(
+ Makefile
+ config/Makefile
+@@ -912,7 +982,28 @@
+ echo \| Default driver backend................................ : $JACK_DEFAULT_DRIVER
+ echo \| Shared memory interface............................... : $JACK_SHM_TYPE
+ echo \| IPC Temporary directory............................... : $DEFAULT_TMP_DIR
++echo \| D-Bus integration .................................... : $HAVE_DBUS
++dnl echo \| D-Bus CFLAGS ......................................... : $DBUS_CFLAGS
++dnl echo \| D-Bus LIBS ........................................... : $DBUS_LIBS
++if test "x$HAVE_DBUS" = "xtrue"
++then
++echo \| D-Bus service install dir............................. : $DBUS_SERVICES_DIR
++echo \| Settings persistence.................................. : $SETTINGS_PERSISTENCE
++fi
+ echo \| Install prefix........................................ : $prefix
+ echo \| Default tmp dir....................................... : $DEFAULT_TMP_DIR
+ echo
+
++if test "x$HAVE_DBUS" = "xtrue" -a "x$DBUS_SERVICES_DIR_REAL" != "x$DBUS_SERVICES_DIR"
++then
++ AC_MSG_WARN([D-Bus session services directory as reported by pkg-config is $DBUS_SERVICES_DIR_REAL])
++ AC_MSG_WARN([but service file will be installed in $DBUS_SERVICES_DIR])
++ AC_MSG_WARN([You may need to adjust your D-Bus configuration after installing jackdbus])
++ AC_MSG_WARN([You can override dbus service install dir])
++ AC_MSG_WARN([with --enable-pkg-config-dbus-service-dir option to this script])
++fi
++
++if test "$SETTINGS_PERSISTENCE_WARNING"
++then
++ AC_MSG_WARN($SETTINGS_PERSISTENCE_WARNING)
++fi
+diff -Naur jack-audio-connection-kit-0.116.1/doc/Makefile.in jack-audio-connection-kit-0.116.1_dbus/doc/Makefile.in
+--- jack-audio-connection-kit-0.116.1/doc/Makefile.in 2008-12-05 21:48:41.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -68,6 +68,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -109,6 +112,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/annotated.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/annotated.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/annotated.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/annotated.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,9 +4,8 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>Data Structures</h1>Here are the data structures with brief descriptions:<table>
++<!-- Generated by Doxygen 1.5.4 -->
++<h1>JACK-AUDIO-CONNECTION-KIT Data Structures</h1>Here are the data structures with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="struct__jack__midi__event.html">_jack_midi_event</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structjack__ringbuffer__data__t.html">jack_ringbuffer_data_t</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structjack__ringbuffer__t.html">jack_ringbuffer_t</a></td><td class="indexvalue"></td></tr>
+@@ -14,9 +13,8 @@
+ <tr><td class="indexkey"><a class="el" href="structport__pair__t.html">port_pair_t</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structPOST__PACKED__STRUCTURE.html">POST_PACKED_STRUCTURE</a></td><td class="indexvalue"></td></tr>
+ </table>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/deprecated.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/deprecated.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/deprecated.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/deprecated.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1><a class="anchor" name="deprecated">Deprecated List </a></h1><a class="anchor" name="_deprecated000006"></a> <dl>
+ <dt>Class <a class="el" href="structjack__transport__info__t.html">jack_transport_info_t</a> </dt>
+ <dd>This is for compatibility with the earlier transport interface. Use the jack_position_t struct, instead. </dd>
+@@ -48,9 +47,8 @@
+ <dt>Global <a class="el" href="group__PortFunctions.html#ga47f28842463231c19795041b6f1460d">jack_port_untie</a> </dt>
+ <dd>This function will be removed from a future version of JACK. Do not use it. There is no replacement. It has turned out to serve essentially no purpose in real-life JACK clients. </dd>
+ </dl>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/doxygen.css jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/doxygen.css
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/doxygen.css 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/doxygen.css 2008-12-07 19:23:05.000000000 +0100
+@@ -2,21 +2,19 @@
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+ }
+ BODY,TD {
+- font-size: 90%;
++ font-size: 90%;
+ }
+ H1 {
+ text-align: center;
+- font-size: 160%;
++ font-size: 160%;
+ }
+ H2 {
+- font-size: 120%;
++ font-size: 120%;
+ }
+ H3 {
+- font-size: 100%;
+-}
+-CAPTION {
+- font-weight: bold
++ font-size: 100%;
+ }
++CAPTION { font-weight: bold }
+ DIV.qindex {
+ width: 100%;
+ background-color: #e8eef2;
+@@ -26,7 +24,7 @@
+ padding: 2px;
+ line-height: 140%;
+ }
+-DIV.navpath {
++DIV.nav {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+@@ -72,43 +70,15 @@
+ background-color: #6666cc;
+ color: #ffffff;
+ }
+-A.qindexHL:visited {
+- text-decoration: none;
+- background-color: #6666cc;
+- color: #ffffff
+-}
+-A.el {
+- text-decoration: none;
+- font-weight: bold
+-}
+-A.elRef {
+- font-weight: bold
+-}
+-A.code:link {
+- text-decoration: none;
+- font-weight: normal;
+- color: #0000FF
+-}
+-A.code:visited {
+- text-decoration: none;
+- font-weight: normal;
+- color: #0000FF
+-}
+-A.codeRef:link {
+- font-weight: normal;
+- color: #0000FF
+-}
+-A.codeRef:visited {
+- font-weight: normal;
+- color: #0000FF
+-}
+-A:hover {
+- text-decoration: none;
+- background-color: #f2f2ff
+-}
+-DL.el {
+- margin-left: -1cm
+-}
++A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
++A.el { text-decoration: none; font-weight: bold }
++A.elRef { font-weight: bold }
++A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
++A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
++A.codeRef:link { font-weight: normal; color: #0000FF}
++A.codeRef:visited { font-weight: normal; color: #0000FF}
++A:hover { text-decoration: none; background-color: #f2f2ff }
++DL.el { margin-left: -1cm }
+ .fragment {
+ font-family: monospace, fixed;
+ font-size: 95%;
+@@ -125,13 +95,7 @@
+ padding-top: 4px;
+ padding-bottom: 4px;
+ }
+-DIV.ah {
+- background-color: black;
+- font-weight: bold;
+- color: #ffffff;
+- margin-bottom: 3px;
+- margin-top: 3px
+-}
++DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+
+ DIV.groupHeader {
+ margin-left: 16px;
+@@ -139,11 +103,7 @@
+ margin-bottom: 6px;
+ font-weight: bold;
+ }
+-DIV.groupText {
+- margin-left: 16px;
+- font-style: italic;
+- font-size: 90%
+-}
++DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+ BODY {
+ background: white;
+ color: black;
+@@ -177,16 +137,11 @@
+ border: 1px solid #CCCCCC;
+ }
+ TR.memlist {
+- background-color: #f0f0f0;
+-}
+-P.formulaDsp {
+- text-align: center;
+-}
+-IMG.formulaDsp {
+-}
+-IMG.formulaInl {
+- vertical-align: middle;
++ background-color: #f0f0f0;
+ }
++P.formulaDsp { text-align: center; }
++IMG.formulaDsp { }
++IMG.formulaInl { vertical-align: middle; }
+ SPAN.keyword { color: #008000 }
+ SPAN.keywordtype { color: #604020 }
+ SPAN.keywordflow { color: #e08000 }
+@@ -194,13 +149,8 @@
+ SPAN.preprocessor { color: #806020 }
+ SPAN.stringliteral { color: #002080 }
+ SPAN.charliteral { color: #008080 }
+-SPAN.vhdldigit { color: #ff00ff }
+-SPAN.vhdlchar { color: #000000 }
+-SPAN.vhdlkeyword { color: #700070 }
+-SPAN.vhdllogic { color: #ff0000 }
+-
+ .mdescLeft {
+- padding: 0px 8px 4px 8px;
++ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+@@ -211,7 +161,7 @@
+ margin: 0px;
+ }
+ .mdescRight {
+- padding: 0px 8px 4px 8px;
++ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+@@ -308,26 +258,23 @@
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+- color: #606060;
++ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+ }
+-.search {
+- color: #003399;
+- font-weight: bold;
++.search { color: #003399;
++ font-weight: bold;
+ }
+ FORM.search {
+- margin-bottom: 0px;
+- margin-top: 0px;
++ margin-bottom: 0px;
++ margin-top: 0px;
+ }
+-INPUT.search {
+- font-size: 75%;
+- color: #000080;
+- font-weight: normal;
+- background-color: #e8eef2;
++INPUT.search { font-size: 75%;
++ color: #000080;
++ font-weight: normal;
++ background-color: #e8eef2;
+ }
+-TD.tiny {
+- font-size: 75%;
++TD.tiny { font-size: 75%;
+ }
+ a {
+ color: #1A41A8;
+@@ -335,70 +282,67 @@
+ a:visited {
+ color: #2A3798;
+ }
+-.dirtab {
+- padding: 4px;
+- border-collapse: collapse;
+- border: 1px solid #84b0c7;
+-}
+-TH.dirtab {
+- background: #e8eef2;
+- font-weight: bold;
+-}
+-HR {
+- height: 1px;
+- border: none;
+- border-top: 1px solid black;
++.dirtab { padding: 4px;
++ border-collapse: collapse;
++ border: 1px solid #84b0c7;
++}
++TH.dirtab { background: #e8eef2;
++ font-weight: bold;
++}
++HR { height: 1px;
++ border: none;
++ border-top: 1px solid black;
+ }
+
+ /* Style for detailed member documentation */
+ .memtemplate {
+- font-size: 80%;
+- color: #606060;
+- font-weight: normal;
+- margin-left: 3px;
++ font-size: 80%;
++ color: #606060;
++ font-weight: normal;
++ margin-left: 3px;
+ }
+ .memnav {
+- background-color: #e8eef2;
+- border: 1px solid #84b0c7;
+- text-align: center;
+- margin: 2px;
+- margin-right: 15px;
+- padding: 2px;
++ background-color: #e8eef2;
++ border: 1px solid #84b0c7;
++ text-align: center;
++ margin: 2px;
++ margin-right: 15px;
++ padding: 2px;
+ }
+ .memitem {
+- padding: 4px;
+- background-color: #eef3f5;
+- border-width: 1px;
+- border-style: solid;
+- border-color: #dedeee;
+- -moz-border-radius: 8px 8px 8px 8px;
++ padding: 4px;
++ background-color: #eef3f5;
++ border-width: 1px;
++ border-style: solid;
++ border-color: #dedeee;
++ -moz-border-radius: 8px 8px 8px 8px;
+ }
+ .memname {
+- white-space: nowrap;
+- font-weight: bold;
++ white-space: nowrap;
++ font-weight: bold;
+ }
+ .memdoc{
+- padding-left: 10px;
++ padding-left: 10px;
+ }
+ .memproto {
+- background-color: #d5e1e8;
+- width: 100%;
+- border-width: 1px;
+- border-style: solid;
+- border-color: #84b0c7;
+- font-weight: bold;
+- -moz-border-radius: 8px 8px 8px 8px;
++ background-color: #d5e1e8;
++ width: 100%;
++ border-width: 1px;
++ border-style: solid;
++ border-color: #84b0c7;
++ font-weight: bold;
++ -moz-border-radius: 8px 8px 8px 8px;
+ }
+ .paramkey {
+- text-align: right;
++ text-align: right;
+ }
+ .paramtype {
+- white-space: nowrap;
++ white-space: nowrap;
+ }
+ .paramname {
+- color: #602020;
+- font-style: italic;
+- white-space: nowrap;
++ color: #602020;
++ font-style: italic;
++ white-space: nowrap;
+ }
+ /* End Styling for detailed member documentation */
+
+@@ -407,67 +351,9 @@
+ font-family: sans-serif;
+ margin:0.5em;
+ }
+-/* these are for tree view when used as main index */
+-.directory {
+- font-size: 9pt;
+- font-weight: bold;
+-}
+-.directory h3 {
+- margin: 0px;
+- margin-top: 1em;
+- font-size: 11pt;
+-}
+-
+-/* The following two styles can be used to replace the root node title */
+-/* with an image of your choice. Simply uncomment the next two styles, */
+-/* specify the name of your image and be sure to set 'height' to the */
+-/* proper pixel height of your image. */
+-
+-/* .directory h3.swap { */
+-/* height: 61px; */
+-/* background-repeat: no-repeat; */
+-/* background-image: url("yourimage.gif"); */
+-/* } */
+-/* .directory h3.swap span { */
+-/* display: none; */
+-/* } */
+-
+-.directory > h3 {
+- margin-top: 0;
+-}
+-.directory p {
+- margin: 0px;
+- white-space: nowrap;
+-}
+-.directory div {
+- display: none;
+- margin: 0px;
+-}
+-.directory img {
+- vertical-align: -30%;
+-}
+-/* these are for tree view when not used as main index */
+-.directory-alt {
+- font-size: 100%;
+- font-weight: bold;
+-}
+-.directory-alt h3 {
+- margin: 0px;
+- margin-top: 1em;
+- font-size: 11pt;
+-}
+-.directory-alt > h3 {
+- margin-top: 0;
+-}
+-.directory-alt p {
+- margin: 0px;
+- white-space: nowrap;
+-}
+-.directory-alt div {
+- display: none;
+- margin: 0px;
+-}
+-.directory-alt img {
+- vertical-align: -30%;
+-}
+-
++.directory { font-size: 9pt; font-weight: bold; }
++.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
++.directory > h3 { margin-top: 0; }
++.directory p { margin: 0px; white-space: nowrap; }
++.directory div { display: none; margin: 0px; }
++.directory img { vertical-align: -30%; }
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/files.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/files.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/files.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/files.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,9 +4,8 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>File List</h1>Here is a list of all files with brief descriptions:<table>
++<!-- Generated by Doxygen 1.5.4 -->
++<h1>JACK-AUDIO-CONNECTION-KIT File List</h1>Here is a list of all files with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="inprocess_8c.html">inprocess.c</a></td><td class="indexvalue">This demonstrates the basic concepts for writing a client that runs within the JACK server process </td></tr>
+ <tr><td class="indexkey"><a class="el" href="intclient_8h.html">intclient.h</a> <a href="intclient_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="jack_8h.html">jack.h</a> <a href="jack_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+@@ -18,9 +17,8 @@
+ <tr><td class="indexkey"><a class="el" href="transport_8h.html">transport.h</a> <a href="transport_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="types_8h.html">types.h</a> <a href="types_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ </table>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/functions.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/functions.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/functions.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/functions.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,33 +4,34 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="functions.html"><span>All</span></a></li>
+- <li><a href="functions_vars.html"><span>Variables</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="#index_a"><span>a</span></a></li>
+- <li><a href="#index_b"><span>b</span></a></li>
+- <li><a href="#index_f"><span>f</span></a></li>
+- <li><a href="#index_i"><span>i</span></a></li>
+- <li><a href="#index_l"><span>l</span></a></li>
+- <li><a href="#index_m"><span>m</span></a></li>
+- <li><a href="#index_n"><span>n</span></a></li>
+- <li><a href="#index_o"><span>o</span></a></li>
+- <li><a href="#index_p"><span>p</span></a></li>
+- <li><a href="#index_r"><span>r</span></a></li>
+- <li><a href="#index_s"><span>s</span></a></li>
+- <li><a href="#index_t"><span>t</span></a></li>
+- <li><a href="#index_u"><span>u</span></a></li>
+- <li><a href="#index_v"><span>v</span></a></li>
+- <li><a href="#index_w"><span>w</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="functions.html"><span>All</span></a></li>
++ <li><a href="functions_vars.html"><span>Variables</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="#index_a"><span>a</span></a></li>
++ <li><a href="#index_b"><span>b</span></a></li>
++ <li><a href="#index_f"><span>f</span></a></li>
++ <li><a href="#index_i"><span>i</span></a></li>
++ <li><a href="#index_l"><span>l</span></a></li>
++ <li><a href="#index_m"><span>m</span></a></li>
++ <li><a href="#index_n"><span>n</span></a></li>
++ <li><a href="#index_o"><span>o</span></a></li>
++ <li><a href="#index_p"><span>p</span></a></li>
++ <li><a href="#index_r"><span>r</span></a></li>
++ <li><a href="#index_s"><span>s</span></a></li>
++ <li><a href="#index_t"><span>t</span></a></li>
++ <li><a href="#index_u"><span>u</span></a></li>
++ <li><a href="#index_v"><span>v</span></a></li>
++ <li><a href="#index_w"><span>w</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all struct and union fields with links to the structures/unions they belong to:
+ <p>
+ <h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+@@ -149,9 +150,8 @@
+ <li>write_ptr
+ : <a class="el" href="structjack__ringbuffer__t.html#7ba69e5aa3fdde2f4e4421e50c10b737">jack_ringbuffer_t</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/functions_vars.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/functions_vars.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/functions_vars.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/functions_vars.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,33 +4,34 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li><a href="functions.html"><span>All</span></a></li>
+- <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="#index_a"><span>a</span></a></li>
+- <li><a href="#index_b"><span>b</span></a></li>
+- <li><a href="#index_f"><span>f</span></a></li>
+- <li><a href="#index_i"><span>i</span></a></li>
+- <li><a href="#index_l"><span>l</span></a></li>
+- <li><a href="#index_m"><span>m</span></a></li>
+- <li><a href="#index_n"><span>n</span></a></li>
+- <li><a href="#index_o"><span>o</span></a></li>
+- <li><a href="#index_p"><span>p</span></a></li>
+- <li><a href="#index_r"><span>r</span></a></li>
+- <li><a href="#index_s"><span>s</span></a></li>
+- <li><a href="#index_t"><span>t</span></a></li>
+- <li><a href="#index_u"><span>u</span></a></li>
+- <li><a href="#index_v"><span>v</span></a></li>
+- <li><a href="#index_w"><span>w</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li><a href="functions.html"><span>All</span></a></li>
++ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="#index_a"><span>a</span></a></li>
++ <li><a href="#index_b"><span>b</span></a></li>
++ <li><a href="#index_f"><span>f</span></a></li>
++ <li><a href="#index_i"><span>i</span></a></li>
++ <li><a href="#index_l"><span>l</span></a></li>
++ <li><a href="#index_m"><span>m</span></a></li>
++ <li><a href="#index_n"><span>n</span></a></li>
++ <li><a href="#index_o"><span>o</span></a></li>
++ <li><a href="#index_p"><span>p</span></a></li>
++ <li><a href="#index_r"><span>r</span></a></li>
++ <li><a href="#index_s"><span>s</span></a></li>
++ <li><a href="#index_t"><span>t</span></a></li>
++ <li><a href="#index_u"><span>u</span></a></li>
++ <li><a href="#index_v"><span>v</span></a></li>
++ <li><a href="#index_w"><span>w</span></a></li>
++ </ul>
++</div>
++
++<p>
+
+ <p>
+ <h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+@@ -149,9 +150,8 @@
+ <li>write_ptr
+ : <a class="el" href="structjack__ringbuffer__t.html#7ba69e5aa3fdde2f4e4421e50c10b737">jack_ringbuffer_t</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x65.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x65.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x65.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x65.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,40 +4,40 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html#index_c"><span>c</span></a></li>
+- <li class="current"><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html#index_c"><span>c</span></a></li>
++ <li class="current"><a href="globals_0x65.html#index_e"><span>e</span></a></li>
++ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
++ <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
++ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
++ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
++ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
++ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ <p>
+ <h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+ <li>EXTENDED_TIME_INFO
+ : <a class="el" href="transport_8h.html#b54aee2c5b5197c588cdda2349434a21">transport.h</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x69.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x69.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x69.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x69.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,31 +4,32 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html#index_c"><span>c</span></a></li>
+- <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li class="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html#index_c"><span>c</span></a></li>
++ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
++ <li class="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
++ <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
++ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
++ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
++ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
++ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ <p>
+ <h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+@@ -37,9 +38,8 @@
+ <li>input_port
+ : <a class="el" href="simple__client_8c.html#f830efb2d3206ba81602df7945863a2d">simple_client.c</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x6a.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x6a.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x6a.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x6a.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,31 +4,32 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html#index_c"><span>c</span></a></li>
+- <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li class="current"><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html#index_c"><span>c</span></a></li>
++ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
++ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
++ <li class="current"><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
++ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
++ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
++ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
++ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ <p>
+ <h3><a class="anchor" name="index_j">- j -</a></h3><ul>
+@@ -431,9 +432,8 @@
+ <li>JackXRunCallback
+ : <a class="el" href="types_8h.html#7955ec486286fec4e2a71243bb66370e">types.h</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x6d.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x6d.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x6d.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x6d.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,40 +4,40 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html#index_c"><span>c</span></a></li>
+- <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li class="current"><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html#index_c"><span>c</span></a></li>
++ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
++ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
++ <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
++ <li class="current"><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
++ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
++ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
++ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ <p>
+ <h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+ <li>main()
+ : <a class="el" href="simple__client_8c.html#0ddf1224851353fc92bfbff6f499fa97">simple_client.c</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x6f.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x6f.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x6f.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x6f.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,40 +4,40 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html#index_c"><span>c</span></a></li>
+- <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li class="current"><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html#index_c"><span>c</span></a></li>
++ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
++ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
++ <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
++ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
++ <li class="current"><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
++ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
++ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ <p>
+ <h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+ <li>output_port
+ : <a class="el" href="simple__client_8c.html#163b2d99fab30f4f80d37b8e5fe6a9a2">simple_client.c</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x70.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x70.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x70.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x70.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,40 +4,40 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html#index_c"><span>c</span></a></li>
+- <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li class="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html#index_c"><span>c</span></a></li>
++ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
++ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
++ <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
++ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
++ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
++ <li class="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
++ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ <p>
+ <h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+ <li>process()
+ : <a class="el" href="simple__client_8c.html#01271cc6cf692278ae35d0062935d7ae">simple_client.c</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x72.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x72.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x72.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x72.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,44 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+-<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+-<title>JACK-AUDIO-CONNECTION-KIT: Data Fields</title>
+-<link href="doxygen.css" rel="stylesheet" type="text/css">
+-<link href="tabs.css" rel="stylesheet" type="text/css">
+-</head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html#index_c"><span>c</span></a></li>
+- <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li class="current"><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+- <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
+-Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+-<p>
+-<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+-<li>Run
+-: <a class="el" href="simple__client_8c.html#06fc87d81c62e9abb8790b6e5713c55b62fe6714ff73ae68f06737c0e1f5aa16">simple_client.c</a>
+-</ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Mon Nov 24 10:48:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+-<a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+-</body>
+-</html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x74.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x74.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_0x74.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_0x74.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,40 +4,40 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html#index_c"><span>c</span></a></li>
+- <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li class="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html#index_c"><span>c</span></a></li>
++ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
++ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
++ <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
++ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
++ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
++ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
++ <li class="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ <p>
+ <h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+ <li>THREAD_STACK
+ : <a class="el" href="thread_8h.html#f9a5d6addf893be0502ae41f52e794b2">thread.h</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_defs.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_defs.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_defs.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_defs.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,19 +4,18 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
+
+ <p>
+ <ul>
+@@ -39,9 +38,8 @@
+ <li>THREAD_STACK
+ : <a class="el" href="thread_8h.html#f9a5d6addf893be0502ae41f52e794b2">thread.h</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_enum.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_enum.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_enum.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_enum.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,19 +4,18 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
+
+ <p>
+ <ul>
+@@ -33,9 +32,8 @@
+ <li>JackStatus
+ : <a class="el" href="types_8h.html#af80297bce18297403b99e3d320ac8a8">types.h</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_eval.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_eval.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_eval.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_eval.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,24 +4,25 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="#index_j"><span>j</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="#index_j"><span>j</span></a></li>
++ </ul>
++</div>
++
++<p>
+
+ <p>
+ <h3><a class="anchor" name="index_j">- j -</a></h3><ul>
+@@ -98,9 +99,8 @@
+ <li>JackVideoFrameOffset
+ : <a class="el" href="transport_8h.html#64608154318de05af9e763bfb5fb8529a583c63f0723dd2226eb47cabfefde82">transport.h</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_func.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_func.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_func.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_func.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,27 +4,28 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html"><span>All</span></a></li>
+- <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li><a href="#index_i"><span>i</span></a></li>
+- <li><a href="#index_j"><span>j</span></a></li>
+- <li><a href="#index_m"><span>m</span></a></li>
+- <li><a href="#index_p"><span>p</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html"><span>All</span></a></li>
++ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li><a href="#index_i"><span>i</span></a></li>
++ <li><a href="#index_j"><span>j</span></a></li>
++ <li><a href="#index_m"><span>m</span></a></li>
++ <li><a href="#index_p"><span>p</span></a></li>
++ </ul>
++</div>
++
++<p>
+
+ <p>
+ <h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+@@ -285,9 +286,8 @@
+ <li>process()
+ : <a class="el" href="simple__client_8c.html#01271cc6cf692278ae35d0062935d7ae">simple_client.c</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,40 +4,40 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+- <div class="tabs">
+- <ul>
+- <li class="current"><a href="globals.html#index_c"><span>c</span></a></li>
+- <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+- <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+- <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
+- <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+- <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+- <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+- <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
++<div class="tabs">
++ <ul>
++ <li class="current"><a href="globals.html#index_c"><span>c</span></a></li>
++ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
++ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
++ <li><a href="globals_0x6a.html#index_j"><span>j</span></a></li>
++ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
++ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
++ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
++ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
++ </ul>
++</div>
++
++<p>
+ Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ <p>
+ <h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+ <li>client
+ : <a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">simple_client.c</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_type.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_type.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_type.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_type.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,19 +4,18 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
+
+ <p>
+ <ul>
+@@ -73,9 +72,8 @@
+ <li>JackXRunCallback
+ : <a class="el" href="types_8h.html#7955ec486286fec4e2a71243bb66370e">types.h</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/globals_vars.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_vars.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/globals_vars.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/globals_vars.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,19 +4,18 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+- <div class="tabs">
+- <ul>
+- <li><a href="globals.html"><span>All</span></a></li>
+- <li><a href="globals_func.html"><span>Functions</span></a></li>
+- <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+- <li><a href="globals_defs.html"><span>Defines</span></a></li>
+- </ul>
+- </div>
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
++<div class="tabs">
++ <ul>
++ <li><a href="globals.html"><span>All</span></a></li>
++ <li><a href="globals_func.html"><span>Functions</span></a></li>
++ <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
++ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
++ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
++ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
++ <li><a href="globals_defs.html"><span>Defines</span></a></li>
++ </ul>
++</div>
+
+ <p>
+ <ul>
+@@ -31,9 +30,8 @@
+ <li>output_port
+ : <a class="el" href="simple__client_8c.html#163b2d99fab30f4f80d37b8e5fe6a9a2">simple_client.c</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__ClientCallbacks.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ClientCallbacks.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__ClientCallbacks.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ClientCallbacks.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Setting Client Callbacks</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -58,7 +57,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -74,8 +73,6 @@
+ </dl>
+ Register a function (and argument) to be called if and when the JACK server shuts down the client thread. The function must be written as if it were an asynchonrous POSIX signal handler --- use only async-safe functions, and remember that it is executed from another thread. A typical function might set a flag or write to a pipe so that the rest of the application knows that the JACK client thread has shut down.<p>
+ NOTE: clients do not need to call this. It exists only to help more complex clients understand what is going on. It should be called before jack_client_activate().
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g664b5c6516c05878fdcd000af149fad9"></a><!-- doxytag: member="jack.h::jack_set_buffer_size_callback" ref="g664b5c6516c05878fdcd000af149fad9" args="(jack_client_t *client, JackBufferSizeCallback bufsize_callback, void *arg)" -->
+@@ -103,7 +100,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -147,7 +144,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -184,7 +181,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -221,7 +218,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -258,7 +255,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -295,7 +292,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -332,7 +329,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -343,8 +340,6 @@
+ The code in the supplied function must be suitable for real-time execution. That means that it cannot call functions that might block for a long time. This includes malloc, free, printf, pthread_mutex_lock, sleep, wait, poll, select, pthread_join, pthread_cond_wait, etc, etc. See <a href="http://jackit.sourceforge.net/docs/design/design.html#SECTION00411000000000000000">http://jackit.sourceforge.net/docs/design/design.html#SECTION00411000000000000000</a> for more information.<p>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code, causing JACK to remove that client from the <a class="el" href="simple__client_8c.html#01271cc6cf692278ae35d0062935d7ae">process()</a> graph. </dd></dl>
+
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="gfb44f979b13f2dc1fbf2ba7b52882d65"></a><!-- doxytag: member="jack.h::jack_set_sample_rate_callback" ref="gfb44f979b13f2dc1fbf2ba7b52882d65" args="(jack_client_t *client, JackSampleRateCallback srate_callback, void *arg)" -->
+@@ -372,7 +367,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -409,7 +404,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -447,7 +442,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -459,9 +454,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__ClientFunctions.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ClientFunctions.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__ClientFunctions.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ClientFunctions.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Creating & manipulating clients</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -42,7 +41,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -52,8 +51,6 @@
+ Tell the Jack server that the program is ready to start processing audio.<p>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g1a7d19cde344c471ff9a2ac946dc4407"></a><!-- doxytag: member="jack.h::jack_client_close" ref="g1a7d19cde344c471ff9a2ac946dc4407" args="(jack_client_t *client)" -->
+@@ -66,7 +63,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -76,8 +73,6 @@
+ Disconnects an external client from a JACK server.<p>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g841193e023f92f0bcde9f0ee1c9444e5"></a><!-- doxytag: member="jack.h::jack_client_name_size" ref="g841193e023f92f0bcde9f0ee1c9444e5" args="(void)" -->
+@@ -90,7 +85,7 @@
+ <td class="paramtype">void </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -111,7 +106,7 @@
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>client_name</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -152,7 +147,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -173,8 +168,6 @@
+ </ul>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>Opaque client handle if successful. If this is NULL, the open operation failed, <em>*status</em> includes <a class="el" href="types_8h.html#af80297bce18297403b99e3d320ac8a8354fbb027d989173f50921d239f3812b">JackFailure</a> and the caller is not a JACK client. </dd></dl>
+
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g66fa94a9d91d9acd75a7947a503ffd2a"></a><!-- doxytag: member="jack.h::jack_client_thread_id" ref="g66fa94a9d91d9acd75a7947a503ffd2a" args="(jack_client_t *)" -->
+@@ -187,7 +180,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -208,7 +201,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -230,7 +223,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -239,8 +232,6 @@
+ <p>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>pointer to actual client name. This is useful when <a class="el" href="types_8h.html#396617de2ef101891c51346f408a375e352b176ffa092ec946a06b707f6aa21b">JackUseExactName</a> is not specified on open and <a class="el" href="types_8h.html#af80297bce18297403b99e3d320ac8a809a73b951f3601ae9436bd3429ac0691">JackNameNotUnique</a> status was returned. In that case, the actual name will differ from the <em>client_name</em> requested. </dd></dl>
+
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g434a3fd1a07651586cbf77c3e1bf3ac7"></a><!-- doxytag: member="jack.h::jack_internal_client_close" ref="g434a3fd1a07651586cbf77c3e1bf3ac7" args="(const char *client_name)" -->
+@@ -253,7 +244,7 @@
+ <td class="paramtype">const char * </td>
+ <td class="paramname"> <em>client_name</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -290,7 +281,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -311,9 +302,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__ClientThreads.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ClientThreads.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__ClientThreads.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ClientThreads.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Creating and managing client threads</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -40,7 +39,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -101,7 +100,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -133,7 +132,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -154,7 +153,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -175,7 +174,7 @@
+ <td class="paramtype">pthread_t </td>
+ <td class="paramname"> <em>thread</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -192,9 +191,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__ErrorOutput.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ErrorOutput.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__ErrorOutput.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ErrorOutput.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Controlling error/information output</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -30,7 +29,7 @@
+ <td class="paramtype">void(*)(const char *) </td>
+ <td class="paramname"> <em>func</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -51,7 +50,7 @@
+ <td class="paramtype">void(*)(const char *) </td>
+ <td class="paramname"> <em>func</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -106,9 +105,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__Functions.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__Functions.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__Functions.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__Functions.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,1350 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+-<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+-<title>JACK-AUDIO-CONNECTION-KIT: for dealing with ports</title>
+-<link href="doxygen.css" rel="stylesheet" type="text/css">
+-<link href="tabs.css" rel="stylesheet" type="text/css">
+-</head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>for dealing with ports</h1><table border="0" cellpadding="0" cellspacing="0">
+-<tr><td></td></tr>
+-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g28977ad0cccf08cd600dd220e2b1c880">jack_client_open</a> (const char *client_name, <a class="el" href="types_8h.html#0ef5011e5aab7655ad0d64babf7d91f0">jack_options_t</a> options, <a class="el" href="types_8h.html#49053418570427a7a99d1bb45fb43f38">jack_status_t</a> *status,...)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g705aa8159e65464dc7e9cf65fc451b90">jack_client_new</a> (const char *client_name)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g1a7d19cde344c471ff9a2ac946dc4407">jack_client_close</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g841193e023f92f0bcde9f0ee1c9444e5">jack_client_name_size</a> (void)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gbece75a6af78b08cae1bc11ab70c51c1">jack_get_client_name</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g6a908a02427cdffb215d71a53ea74be3">jack_internal_client_new</a> (const char *client_name, const char *load_name, const char *load_init)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g434a3fd1a07651586cbf77c3e1bf3ac7">jack_internal_client_close</a> (const char *client_name)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gb6fd42ee3b80fe9259400343f0fa6c2d">jack_port_register</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, const char *port_name, const char *port_type, unsigned long flags, unsigned long buffer_size)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g01234365845595d801e14f52c6fdc820">jack_port_unregister</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gd0dcf2703cc45c1b7fbb1f31155fa721">jack_port_get_buffer</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *, <a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a>)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gd91c438ebc4e4a3dcd780cb458725647">jack_port_name</a> (const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g0f633c376aad920fcfacf3bf2fda68ae">jack_port_short_name</a> (const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g1aa5548dfdd59f181a9bace1db49188a">jack_port_flags</a> (const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gcdd2fec3db86f3db72e0c72e4660517e">jack_port_type</a> (const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gdef714da6d610eef46e135da271a089e">jack_port_is_mine</a> (const <a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gc305da4111a52c9fa9fb5310b2171928">jack_port_connected</a> (const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g6494e6be49e7023417989a22d0b029ea">jack_port_connected_to</a> (const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port, const char *port_name)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">const char ** </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gedfd816f0214875957fd938d35806568">jack_port_get_connections</a> (const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">const char ** </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#ga0716f9f963bd3504a5ad740dbfd64f1">jack_port_get_all_connections</a> (const <a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gfc84310ef47d41d6ab06a6f31971f716">jack_port_tie</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *src, <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *dst)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#ga47f28842463231c19795041b6f1460d">jack_port_untie</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gdf39bbfd054bac6c82d45cb540f56241">jack_port_get_latency</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g2919d10beee38708c2a5ffbe772fab99">jack_port_get_total_latency</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g1fd94d2042875e10e52842174e552477">jack_port_set_latency</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *, <a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a>)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g8a2e255e8f2fbd80e9a86501c8c7d0c6">jack_recompute_total_latency</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gc257a2134a945b15cdb9e374b278f8e8">jack_recompute_total_latencies</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g9bd94538138318065f00d2e53cb88389">jack_port_set_name</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port, const char *port_name)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#ga340fbc61554871d48baa5a84a0a3f88">jack_port_set_alias</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port, const char *alias)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gf311f2e2bbda899089a8e9200276fc86">jack_port_unset_alias</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port, const char *alias)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g3d6f38bb113d060dede97dabb70e3c7d">jack_port_get_aliases</a> (const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port, char *const aliases[2])</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g28bc3d642c3212c1f0ec367187865038">jack_port_request_monitor</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port, int onoff)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gba829da2da5da02c463b69b0f276db46">jack_port_request_monitor_by_name</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, const char *port_name, int onoff)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g95167bd35e80796d4b671fa550c96772">jack_port_ensure_monitor</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port, int onoff)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g55bc0edf81c273fa0275caf938f3468e">jack_port_monitoring_input</a> (<a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g462cfb7d50a41ed7a2c0e8ae303312b6">jack_connect</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, const char *source_port, const char *destination_port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g954b55bb7e2122ae70ed156e07669f19">jack_disconnect</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, const char *source_port, const char *destination_port)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g4577eff4f1c7a1b3af620a0dbab9c479">jack_port_disconnect</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> *)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size</a> (void)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g9dcf82a06a6260f35e165c33b21af589">jack_port_type_size</a> (void)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g42cd11190334f1ca94c68f243535b23f">jack_set_error_function</a> (void(*func)(const char *))</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g177b8a41da9847b025cef27a4a5b9917">jack_set_info_function</a> (void(*func)(const char *))</td></tr>
+-
+-<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#g2f71410a27ce7ffc971ba243bb96e59c">jack_error_callback</a> )(const char *msg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Functions.html#gcb61d9e065431cf58464223aa15fc1ae">jack_info_callback</a> )(const char *msg)</td></tr>
+-
+-</table>
+-<hr><a name="_details"></a><h2>Detailed Description</h2>
+-Note: More documentation can be found in <a class="el" href="types_8h.html">jack/types.h</a>. <hr><h2>Function Documentation</h2>
+-<a class="anchor" name="g1a7d19cde344c471ff9a2ac946dc4407"></a><!-- doxytag: member="jack.h::jack_client_close" ref="g1a7d19cde344c471ff9a2ac946dc4407" args="(jack_client_t *client)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_client_close </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Disconnects an external client from a JACK server.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00069">main()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g841193e023f92f0bcde9f0ee1c9444e5"></a><!-- doxytag: member="jack.h::jack_client_name_size" ref="g841193e023f92f0bcde9f0ee1c9444e5" args="(void)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_client_name_size </td>
+- <td>(</td>
+- <td class="paramtype">void </td>
+- <td class="paramname"> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the maximum number of characters in a JACK client name including the final NULL character. This value is a constant. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g705aa8159e65464dc7e9cf65fc451b90"></a><!-- doxytag: member="jack.h::jack_client_new" ref="g705aa8159e65464dc7e9cf65fc451b90" args="(const char *client_name)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a>* jack_client_new </td>
+- <td>(</td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>client_name</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<b>THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN NEW JACK CLIENTS</b>
+-</div>
+-</div><p>
+-<a class="anchor" name="g28977ad0cccf08cd600dd220e2b1c880"></a><!-- doxytag: member="jack.h::jack_client_open" ref="g28977ad0cccf08cd600dd220e2b1c880" args="(const char *client_name, jack_options_t options, jack_status_t *status,...)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a>* jack_client_open </td>
+- <td>(</td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>client_name</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#0ef5011e5aab7655ad0d64babf7d91f0">jack_options_t</a> </td>
+- <td class="paramname"> <em>options</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#49053418570427a7a99d1bb45fb43f38">jack_status_t</a> * </td>
+- <td class="paramname"> <em>status</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"> </td>
+- <td class="paramname"> <em>...</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Open an external client session with a JACK server. This interface is more complex but more powerful than <a class="el" href="group__Functions.html#g705aa8159e65464dc7e9cf65fc451b90">jack_client_new()</a>. With it, clients may choose which of several servers to connect, and control whether and how to start the server automatically, if it was not already running. There is also an option for JACK to generate a unique client name, when necessary.<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>client_name</em> </td><td>of at most <a class="el" href="group__Functions.html#g841193e023f92f0bcde9f0ee1c9444e5">jack_client_name_size()</a> characters. The name scope is local to each server. Unless forbidden by the <a class="el" href="types_8h.html#396617de2ef101891c51346f408a375e352b176ffa092ec946a06b707f6aa21b">JackUseExactName</a> option, the server will modify this name to create a unique variant, if needed.</td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>options</em> </td><td>formed by OR-ing together <a class="el" href="types_8h.html#396617de2ef101891c51346f408a375e">JackOptions</a> bits. Only the <a class="el" href="types_8h.html#b39e7f78dba631f3c0d34ac4cddcf80f">JackOpenOptions</a> bits are allowed.</td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>status</em> </td><td>(if non-NULL) an address for JACK to return information from the open operation. This status word is formed by OR-ing together the relevant <a class="el" href="types_8h.html#af80297bce18297403b99e3d320ac8a8">JackStatus</a> bits.</td></tr>
+- </table>
+-</dl>
+-<b>Optional parameters:</b> depending on corresponding [<em>options</em> bits] additional parameters may follow <em>status</em> (in this order).<p>
+-<ul>
+-<li>[<a class="el" href="types_8h.html#396617de2ef101891c51346f408a375e348557bfdc579daed2e35cc41c4f09c7">JackServerName</a>] <em>(char *) server_name</em> selects from among several possible concurrent server instances. Server names are unique to each user. If unspecified, use "default" unless $JACK_DEFAULT_SERVER is defined in the process environment.</li>
+-</ul>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>Opaque client handle if successful. If this is NULL, the open operation failed, <em>*status</em> includes <a class="el" href="types_8h.html#af80297bce18297403b99e3d320ac8a8354fbb027d989173f50921d239f3812b">JackFailure</a> and the caller is not a JACK client. </dd></dl>
+-
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00069">main()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g462cfb7d50a41ed7a2c0e8ae303312b6"></a><!-- doxytag: member="jack.h::jack_connect" ref="g462cfb7d50a41ed7a2c0e8ae303312b6" args="(jack_client_t *, const char *source_port, const char *destination_port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_connect </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>source_port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>destination_port</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Establish a connection between two ports.<p>
+-When a connection exists, data written to the source port will be available to be read at the destination port.<p>
+-<dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The port types must be identical.<p>
+-The <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478">JackPortFlags</a> of the <em>source_port</em> must include <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478a0e103ad40ec14c6b50120dd85089c26">JackPortIsOutput</a>.<p>
+-The <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478">JackPortFlags</a> of the <em>destination_port</em> must include <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f4789dea0e7c0d7f57b9674f7c321a5cc50c">JackPortIsInput</a>.</dd></dl>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, EEXIST if the connection is already made, otherwise a non-zero error code </dd></dl>
+-
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00069">main()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g954b55bb7e2122ae70ed156e07669f19"></a><!-- doxytag: member="jack.h::jack_disconnect" ref="g954b55bb7e2122ae70ed156e07669f19" args="(jack_client_t *, const char *source_port, const char *destination_port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_disconnect </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>source_port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>destination_port</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Remove a connection between two ports.<p>
+-<dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The port types must be identical.<p>
+-The <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478">JackPortFlags</a> of the <em>source_port</em> must include <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478a0e103ad40ec14c6b50120dd85089c26">JackPortIsOutput</a>.<p>
+-The <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478">JackPortFlags</a> of the <em>destination_port</em> must include <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f4789dea0e7c0d7f57b9674f7c321a5cc50c">JackPortIsInput</a>.</dd></dl>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gbece75a6af78b08cae1bc11ab70c51c1"></a><!-- doxytag: member="jack.h::jack_get_client_name" ref="gbece75a6af78b08cae1bc11ab70c51c1" args="(jack_client_t *client)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">char* jack_get_client_name </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>pointer to actual client name. This is useful when <a class="el" href="types_8h.html#396617de2ef101891c51346f408a375e352b176ffa092ec946a06b707f6aa21b">JackUseExactName</a> is not specified on open and <a class="el" href="types_8h.html#af80297bce18297403b99e3d320ac8a809a73b951f3601ae9436bd3429ac0691">JackNameNotUnique</a> status was returned. In that case, the actual name will differ from the <em>client_name</em> requested. </dd></dl>
+-
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00069">main()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g434a3fd1a07651586cbf77c3e1bf3ac7"></a><!-- doxytag: member="jack.h::jack_internal_client_close" ref="g434a3fd1a07651586cbf77c3e1bf3ac7" args="(const char *client_name)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void jack_internal_client_close </td>
+- <td>(</td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>client_name</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Remove an internal client from a JACK server.<p>
+-<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>Please use <a class="el" href="intclient_8h.html#dca1931231a03563544281cda1530ca6">jack_internal_client_load()</a>. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g6a908a02427cdffb215d71a53ea74be3"></a><!-- doxytag: member="jack.h::jack_internal_client_new" ref="g6a908a02427cdffb215d71a53ea74be3" args="(const char *client_name, const char *load_name, const char *load_init)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_internal_client_new </td>
+- <td>(</td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>client_name</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>load_name</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>load_init</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Load an internal client into the Jack server.<p>
+-Internal clients run inside the JACK server process. They can use most of the same functions as external clients. Each internal client must declare <a class="el" href="inprocess_8c.html#872c1ad15ec7ba35574b0bafc91212c9">jack_initialize()</a> and <a class="el" href="inprocess_8c.html#1343309803bc07aacba7f4fd8f46b0a3">jack_finish()</a> entry points, called at load and unload times. See <a class="el" href="inprocess_8c.html" title="This demonstrates the basic concepts for writing a client that runs within the JACK...">inprocess.c</a> for an example of how to write an internal client.<p>
+-<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>Please use <a class="el" href="intclient_8h.html#dca1931231a03563544281cda1530ca6">jack_internal_client_load()</a>.</dd></dl>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>client_name</em> </td><td>of at most <a class="el" href="group__Functions.html#g841193e023f92f0bcde9f0ee1c9444e5">jack_client_name_size()</a> characters.</td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>load_name</em> </td><td>of a shared object file containing the code for the new client.</td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>load_init</em> </td><td>an arbitary string passed to the <a class="el" href="inprocess_8c.html#872c1ad15ec7ba35574b0bafc91212c9">jack_initialize()</a> routine of the new client (may be NULL).</td></tr>
+- </table>
+-</dl>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if successful. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gc305da4111a52c9fa9fb5310b2171928"></a><!-- doxytag: member="jack.h::jack_port_connected" ref="gc305da4111a52c9fa9fb5310b2171928" args="(const jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_connected </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>number of connections to or from <em>port</em>.</dd></dl>
+-<dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The calling client must own <em>port</em>. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g6494e6be49e7023417989a22d0b029ea"></a><!-- doxytag: member="jack.h::jack_port_connected_to" ref="g6494e6be49e7023417989a22d0b029ea" args="(const jack_port_t *port, const char *port_name)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_connected_to </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>port_name</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE if the locally-owned <em>port</em> is <b>directly</b> connected to the <em>port_name</em>.</dd></dl>
+-<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a> </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g4577eff4f1c7a1b3af620a0dbab9c479"></a><!-- doxytag: member="jack.h::jack_port_disconnect" ref="g4577eff4f1c7a1b3af620a0dbab9c479" args="(jack_client_t *, jack_port_t *)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_disconnect </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Perform the same function as <a class="el" href="group__Functions.html#g954b55bb7e2122ae70ed156e07669f19">jack_disconnect()</a> using port handles rather than names. This avoids the name lookup inherent in the name-based version.<p>
+-Clients connecting their own ports are likely to use this function, while generic connection clients (e.g. patchbays) would use <a class="el" href="group__Functions.html#g954b55bb7e2122ae70ed156e07669f19">jack_disconnect()</a>.
+-</div>
+-</div><p>
+-<a class="anchor" name="g95167bd35e80796d4b671fa550c96772"></a><!-- doxytag: member="jack.h::jack_port_ensure_monitor" ref="g95167bd35e80796d4b671fa550c96772" args="(jack_port_t *port, int onoff)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_ensure_monitor </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">int </td>
+- <td class="paramname"> <em>onoff</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-If <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f4780271c73ded98c373ebf8c5e59b51bb0c">JackPortCanMonitor</a> is set for a port, this function turns on input monitoring if it was off, and turns it off if only one request has been made to turn it on. Otherwise it does nothing.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g1aa5548dfdd59f181a9bace1db49188a"></a><!-- doxytag: member="jack.h::jack_port_flags" ref="g1aa5548dfdd59f181a9bace1db49188a" args="(const jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_flags </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478">JackPortFlags</a> of the jack_port_t. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g3d6f38bb113d060dede97dabb70e3c7d"></a><!-- doxytag: member="jack.h::jack_port_get_aliases" ref="g3d6f38bb113d060dede97dabb70e3c7d" args="(const jack_port_t *port, char *const aliases[2])" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_get_aliases </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">char *const </td>
+- <td class="paramname"> <em>aliases</em>[2]</td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="ga0716f9f963bd3504a5ad740dbfd64f1"></a><!-- doxytag: member="jack.h::jack_port_get_all_connections" ref="ga0716f9f963bd3504a5ad740dbfd64f1" args="(const jack_client_t *client, const jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">const char** jack_port_get_all_connections </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>a null-terminated array of full port names to which the <em>port</em> is connected. If none, returns NULL.</dd></dl>
+-The caller is responsible for calling free(3) on any non-NULL returned value.<p>
+-This differs from <a class="el" href="group__Functions.html#gedfd816f0214875957fd938d35806568">jack_port_get_connections()</a> in two important respects:<p>
+-1) You may not call this function from code that is executed in response to a JACK event. For example, you cannot use it in a GraphReordered handler.<p>
+-2) You need not be the owner of the port to get information about its connections.<p>
+-<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a> </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gd0dcf2703cc45c1b7fbb1f31155fa721"></a><!-- doxytag: member="jack.h::jack_port_get_buffer" ref="gd0dcf2703cc45c1b7fbb1f31155fa721" args="(jack_port_t *, jack_nframes_t)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void* jack_port_get_buffer </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td>
+- <td class="paramname"></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-This returns a pointer to the memory area associated with the specified port. For an output port, it will be a memory area that can be written to; for an input port, it will be an area containing the data from the port's connection(s), or zero-filled. if there are multiple inbound connections, the data will be mixed appropriately.<p>
+-FOR OUTPUT PORTS ONLY : WILL BE DEPRECATED in Jack 2.0 !! --------------------------------------------------------- You may cache the value returned, but only between calls to your "blocksize" callback. For this reason alone, you should either never cache the return value or ensure you have a "blocksize" callback and be sure to invalidate the cached address from there.<p>
+-Caching output ports is DEPRECATED in Jack 2.0, due to some new optimization (like "pipelining"). Port buffers have to be retrieved in each callback for proper functionning.
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00036">inprocess()</a>, and <a class="el" href="simple__client_8c-source.html#l00034">process()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gedfd816f0214875957fd938d35806568"></a><!-- doxytag: member="jack.h::jack_port_get_connections" ref="gedfd816f0214875957fd938d35806568" args="(const jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">const char** jack_port_get_connections </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>a null-terminated array of full port names to which the <em>port</em> is connected. If none, returns NULL.</dd></dl>
+-The caller is responsible for calling free(3) on any non-NULL returned value.<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>locally owned jack_port_t pointer.</td></tr>
+- </table>
+-</dl>
+-<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a>, <a class="el" href="group__Functions.html#ga0716f9f963bd3504a5ad740dbfd64f1">jack_port_get_all_connections()</a> </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gdf39bbfd054bac6c82d45cb540f56241"></a><!-- doxytag: member="jack.h::jack_port_get_latency" ref="gdf39bbfd054bac6c82d45cb540f56241" args="(jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> jack_port_get_latency </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the time (in frames) between data being available or delivered at/to a port, and the time at which it arrived at or is delivered to the "other side" of the port. E.g. for a physical audio output port, this is the time between writing to the port and when the signal will leave the connector. For a physical audio input port, this is the time between the sound arriving at the connector and the corresponding frames being readable from the port. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g2919d10beee38708c2a5ffbe772fab99"></a><!-- doxytag: member="jack.h::jack_port_get_total_latency" ref="g2919d10beee38708c2a5ffbe772fab99" args="(jack_client_t *, jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> jack_port_get_total_latency </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-The maximum of the sum of the latencies in every connection path that can be drawn between the port and other ports with the <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478e902a1c91f82b33cb956e1ac310592b3">JackPortIsTerminal</a> flag set.
+-</div>
+-</div><p>
+-<a class="anchor" name="gdef714da6d610eef46e135da271a089e"></a><!-- doxytag: member="jack.h::jack_port_is_mine" ref="gdef714da6d610eef46e135da271a089e" args="(const jack_client_t *, const jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_is_mine </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE if the jack_port_t belongs to the jack_client_t. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g55bc0edf81c273fa0275caf938f3468e"></a><!-- doxytag: member="jack.h::jack_port_monitoring_input" ref="g55bc0edf81c273fa0275caf938f3468e" args="(jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_monitoring_input </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE if input monitoring has been requested for <em>port</em>. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gd91c438ebc4e4a3dcd780cb458725647"></a><!-- doxytag: member="jack.h::jack_port_name" ref="gd91c438ebc4e4a3dcd780cb458725647" args="(const jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">const char* jack_port_name </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the full name of the jack_port_t (including the <em>"client_name:"</em> prefix).</dd></dl>
+-<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a>. </dd></dl>
+-
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00069">main()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g926fd481c441bb72a9bdaa73fbd9dbd8"></a><!-- doxytag: member="jack.h::jack_port_name_size" ref="g926fd481c441bb72a9bdaa73fbd9dbd8" args="(void)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_name_size </td>
+- <td>(</td>
+- <td class="paramtype">void </td>
+- <td class="paramname"> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the maximum number of characters in a full JACK port name including the final NULL character. This value is a constant.</dd></dl>
+-A port's full name contains the owning client name concatenated with a colon (:) followed by its short name and a NULL character.
+-</div>
+-</div><p>
+-<a class="anchor" name="gb6fd42ee3b80fe9259400343f0fa6c2d"></a><!-- doxytag: member="jack.h::jack_port_register" ref="gb6fd42ee3b80fe9259400343f0fa6c2d" args="(jack_client_t *client, const char *port_name, const char *port_type, unsigned long flags, unsigned long buffer_size)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a>* jack_port_register </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>port_name</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>port_type</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">unsigned long </td>
+- <td class="paramname"> <em>flags</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">unsigned long </td>
+- <td class="paramname"> <em>buffer_size</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Create a new port for the client. This is an object used for moving data of any type in or out of the client. Ports may be connected in various ways.<p>
+-Each port has a short name. The port's full name contains the name of the client concatenated with a colon (:) followed by its short name. The <a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a> is the maximum length of this full name. Exceeding that will cause the port registration to fail and return NULL.<p>
+-All ports have a type, which may be any non-NULL and non-zero length string, passed as an argument. Some port types are built into the JACK API, like JACK_DEFAULT_AUDIO_TYPE or JACK_DEFAULT_MIDI_TYPE<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>pointer to JACK client structure. </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>port_name</em> </td><td>non-empty short name for the new port (not including the leading <em>"client_name:"</em>). </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>port_type</em> </td><td>port type name. If longer than <a class="el" href="group__Functions.html#g9dcf82a06a6260f35e165c33b21af589">jack_port_type_size()</a>, only that many characters are significant. </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>flags</em> </td><td><a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478">JackPortFlags</a> bit mask. </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>buffer_size</em> </td><td>must be non-zero if this is not a built-in <em>port_type</em>. Otherwise, it is ignored.</td></tr>
+- </table>
+-</dl>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>jack_port_t pointer on success, otherwise NULL. </dd></dl>
+-
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00069">main()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g28bc3d642c3212c1f0ec367187865038"></a><!-- doxytag: member="jack.h::jack_port_request_monitor" ref="g28bc3d642c3212c1f0ec367187865038" args="(jack_port_t *port, int onoff)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_request_monitor </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">int </td>
+- <td class="paramname"> <em>onoff</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-If <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f4780271c73ded98c373ebf8c5e59b51bb0c">JackPortCanMonitor</a> is set for this <em>port</em>, turn input monitoring on or off. Otherwise, do nothing.
+-</div>
+-</div><p>
+-<a class="anchor" name="gba829da2da5da02c463b69b0f276db46"></a><!-- doxytag: member="jack.h::jack_port_request_monitor_by_name" ref="gba829da2da5da02c463b69b0f276db46" args="(jack_client_t *client, const char *port_name, int onoff)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_request_monitor_by_name </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>port_name</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">int </td>
+- <td class="paramname"> <em>onoff</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-If <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f4780271c73ded98c373ebf8c5e59b51bb0c">JackPortCanMonitor</a> is set for this <em>port_name</em>, turn input monitoring on or off. Otherwise, do nothing.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code.</dd></dl>
+-<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a> </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="ga340fbc61554871d48baa5a84a0a3f88"></a><!-- doxytag: member="jack.h::jack_port_set_alias" ref="ga340fbc61554871d48baa5a84a0a3f88" args="(jack_port_t *port, const char *alias)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_set_alias </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>alias</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Set <em>alias</em> as an alias for <em>port</em>. May be called at any time. If the alias is longer than <a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a>, it will be truncated.<p>
+-After a successful call, and until JACK exits or <a class="el" href="group__Functions.html#gf311f2e2bbda899089a8e9200276fc86">jack_port_unset_alias()</a> is called, may be used as a alternate name for the port.<p>
+-Ports can have up to two aliases - if both are already set, this function will return an error.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g1fd94d2042875e10e52842174e552477"></a><!-- doxytag: member="jack.h::jack_port_set_latency" ref="g1fd94d2042875e10e52842174e552477" args="(jack_port_t *, jack_nframes_t)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void jack_port_set_latency </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td>
+- <td class="paramname"></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-The port latency is zero by default. Clients that control physical hardware with non-zero latency should call this to set the latency to its correct value. Note that the value should include any systemic latency present "outside" the physical hardware controlled by the client. For example, for a client controlling a digital audio interface connected to an external digital converter, the latency setting should include both buffering by the audio interface *and* the converter.
+-</div>
+-</div><p>
+-<a class="anchor" name="g9bd94538138318065f00d2e53cb88389"></a><!-- doxytag: member="jack.h::jack_port_set_name" ref="g9bd94538138318065f00d2e53cb88389" args="(jack_port_t *port, const char *port_name)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_set_name </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>port_name</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Modify a port's short name. May be called at any time. If the resulting full name (including the <em>"client_name:"</em> prefix) is longer than <a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a>, it will be truncated.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g0f633c376aad920fcfacf3bf2fda68ae"></a><!-- doxytag: member="jack.h::jack_port_short_name" ref="g0f633c376aad920fcfacf3bf2fda68ae" args="(const jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">const char* jack_port_short_name </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the short name of the jack_port_t (not including the <em>"client_name:"</em> prefix).</dd></dl>
+-<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__Functions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a>. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gfc84310ef47d41d6ab06a6f31971f716"></a><!-- doxytag: member="jack.h::jack_port_tie" ref="gfc84310ef47d41d6ab06a6f31971f716" args="(jack_port_t *src, jack_port_t *dst)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_tie </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>src</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>dst</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-A client may call this on a pair of its own ports to semi-permanently wire them together. This means that a client that wants to direct-wire an input port to an output port can call this and then no longer have to worry about moving data between them. Any data arriving at the input port will appear automatically at the output port.<p>
+-The 'destination' port must be an output port. The 'source' port must be an input port. Both ports must belong to the same client. You cannot use this to tie ports between clients. That is what a connection is for.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gcdd2fec3db86f3db72e0c72e4660517e"></a><!-- doxytag: member="jack.h::jack_port_type" ref="gcdd2fec3db86f3db72e0c72e4660517e" args="(const jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">const char* jack_port_type </td>
+- <td>(</td>
+- <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the <em>port</em> type, at most <a class="el" href="group__Functions.html#g9dcf82a06a6260f35e165c33b21af589">jack_port_type_size()</a> characters including a final NULL. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g9dcf82a06a6260f35e165c33b21af589"></a><!-- doxytag: member="jack.h::jack_port_type_size" ref="g9dcf82a06a6260f35e165c33b21af589" args="(void)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_type_size </td>
+- <td>(</td>
+- <td class="paramtype">void </td>
+- <td class="paramname"> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the maximum number of characters in a JACK port type name including the final NULL character. This value is a constant. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g01234365845595d801e14f52c6fdc820"></a><!-- doxytag: member="jack.h::jack_port_unregister" ref="g01234365845595d801e14f52c6fdc820" args="(jack_client_t *, jack_port_t *)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_unregister </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Remove the port from the client, disconnecting any existing connections.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gf311f2e2bbda899089a8e9200276fc86"></a><!-- doxytag: member="jack.h::jack_port_unset_alias" ref="gf311f2e2bbda899089a8e9200276fc86" args="(jack_port_t *port, const char *alias)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_unset_alias </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">const char * </td>
+- <td class="paramname"> <em>alias</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Remove <em>alias</em> as an alias for <em>port</em>. May be called at any time.<p>
+-After a successful call, <em>alias</em> can no longer be used as a alternate name for the port.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="ga47f28842463231c19795041b6f1460d"></a><!-- doxytag: member="jack.h::jack_port_untie" ref="ga47f28842463231c19795041b6f1460d" args="(jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_port_untie </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-This undoes the effect of <a class="el" href="group__Functions.html#gfc84310ef47d41d6ab06a6f31971f716">jack_port_tie()</a>. The port should be same as the 'destination' port passed to <a class="el" href="group__Functions.html#gfc84310ef47d41d6ab06a6f31971f716">jack_port_tie()</a>.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gc257a2134a945b15cdb9e374b278f8e8"></a><!-- doxytag: member="jack.h::jack_recompute_total_latencies" ref="gc257a2134a945b15cdb9e374b278f8e8" args="(jack_client_t *)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_recompute_total_latencies </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Request a complete recomputation of all port latencies. This can be called by a client that has just changed the internal latency of its port using jack_port_set_latency and wants to ensure that all signal pathways in the graph are updated with respect to the values that will be returned by jack_port_get_total_latency. It allows a client to change multiple port latencies without triggering a recompute for each change.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>zero for successful execution of the request. non-zero otherwise. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g8a2e255e8f2fbd80e9a86501c8c7d0c6"></a><!-- doxytag: member="jack.h::jack_recompute_total_latency" ref="g8a2e255e8f2fbd80e9a86501c8c7d0c6" args="(jack_client_t *, jack_port_t *port)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_recompute_total_latency </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+- <td class="paramname"> <em>port</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Request a complete recomputation of a port's total latency. This can be called by a client that has just changed the internal latency of its port using jack_port_set_latency and wants to ensure that all signal pathways in the graph are updated with respect to the values that will be returned by jack_port_get_total_latency.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>zero for successful execution of the request. non-zero otherwise. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g42cd11190334f1ca94c68f243535b23f"></a><!-- doxytag: member="jack.h::jack_set_error_function" ref="g42cd11190334f1ca94c68f243535b23f" args="(void(*func)(const char *))" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void jack_set_error_function </td>
+- <td>(</td>
+- <td class="paramtype">void(*)(const char *) </td>
+- <td class="paramname"> <em>func</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Set the <a class="el" href="group__Functions.html#g2f71410a27ce7ffc971ba243bb96e59c">jack_error_callback</a> for error message display.<p>
+-The JACK library provides two built-in callbacks for this purpose: default_jack_error_callback() and silent_jack_error_callback().
+-</div>
+-</div><p>
+-<a class="anchor" name="g177b8a41da9847b025cef27a4a5b9917"></a><!-- doxytag: member="jack.h::jack_set_info_function" ref="g177b8a41da9847b025cef27a4a5b9917" args="(void(*func)(const char *))" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void jack_set_info_function </td>
+- <td>(</td>
+- <td class="paramtype">void(*)(const char *) </td>
+- <td class="paramname"> <em>func</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Set the <a class="el" href="group__Functions.html#gcb61d9e065431cf58464223aa15fc1ae">jack_info_callback</a> for info message display.
+-</div>
+-</div><p>
+-<hr><h2>Variable Documentation</h2>
+-<a class="anchor" name="g2f71410a27ce7ffc971ba243bb96e59c"></a><!-- doxytag: member="jack.h::jack_error_callback" ref="g2f71410a27ce7ffc971ba243bb96e59c" args=")(const char *msg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void(* <a class="el" href="group__Functions.html#g2f71410a27ce7ffc971ba243bb96e59c">jack_error_callback</a>)(const char *msg) </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Display JACK error message.<p>
+-Set via <a class="el" href="group__Functions.html#g42cd11190334f1ca94c68f243535b23f">jack_set_error_function()</a>, otherwise a JACK-provided default will print <em>msg</em> (plus a newline) to stderr.<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>msg</em> </td><td>error message text (no newline at end). </td></tr>
+- </table>
+-</dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gcb61d9e065431cf58464223aa15fc1ae"></a><!-- doxytag: member="jack.h::jack_info_callback" ref="gcb61d9e065431cf58464223aa15fc1ae" args=")(const char *msg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void(* <a class="el" href="group__Functions.html#gcb61d9e065431cf58464223aa15fc1ae">jack_info_callback</a>)(const char *msg) </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Display JACK info message.<p>
+-Set via <a class="el" href="group__Functions.html#g177b8a41da9847b025cef27a4a5b9917">jack_set_info_function()</a>, otherwise a JACK-provided default will print <em>msg</em> (plus a newline) to stdout.<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>msg</em> </td><td>info message text (no newline at end). </td></tr>
+- </table>
+-</dl>
+-
+-</div>
+-</div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Sun Nov 23 17:53:21 2008 for JACK-AUDIO-CONNECTION-KIT by
+-<a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+-</body>
+-</html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__MIDIAPI.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__MIDIAPI.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__MIDIAPI.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__MIDIAPI.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Reading and writing MIDI data</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -35,7 +34,7 @@
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>port_buffer</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -77,7 +76,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -122,7 +121,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -173,7 +172,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -204,7 +203,7 @@
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>port_buffer</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -224,7 +223,7 @@
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>port_buffer</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -252,7 +251,7 @@
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>port_buffer</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -269,9 +268,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__NonCallbackAPI.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__NonCallbackAPI.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__NonCallbackAPI.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__NonCallbackAPI.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>The non-callback API</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -38,7 +37,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -65,7 +64,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -107,7 +106,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -138,7 +137,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -149,9 +148,8 @@
+ It should be replace by use of @ jack_cycle_wait and @ jack_cycle_signal functions.
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__PortFunctions.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__PortFunctions.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__PortFunctions.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__PortFunctions.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Creating & manipulating ports</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -100,7 +99,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -114,8 +113,6 @@
+ The <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f478">JackPortFlags</a> of the <em>destination_port</em> must include <a class="el" href="types_8h.html#cbcada380e9dfdd5bff1296e7156f4789dea0e7c0d7f57b9674f7c321a5cc50c">JackPortIsInput</a>.</dd></dl>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, EEXIST if the connection is already made, otherwise a non-zero error code </dd></dl>
+
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g954b55bb7e2122ae70ed156e07669f19"></a><!-- doxytag: member="jack.h::jack_disconnect" ref="g954b55bb7e2122ae70ed156e07669f19" args="(jack_client_t *, const char *source_port, const char *destination_port)" -->
+@@ -143,7 +140,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -168,7 +165,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -199,7 +196,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -230,7 +227,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -260,7 +257,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -282,7 +279,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -312,7 +309,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -341,7 +338,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -376,7 +373,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -386,8 +383,6 @@
+ This returns a pointer to the memory area associated with the specified port. For an output port, it will be a memory area that can be written to; for an input port, it will be an area containing the data from the port's connection(s), or zero-filled. if there are multiple inbound connections, the data will be mixed appropriately.<p>
+ FOR OUTPUT PORTS ONLY : WILL BE DEPRECATED in Jack 2.0 !! --------------------------------------------------------- You may cache the value returned, but only between calls to your "blocksize" callback. For this reason alone, you should either never cache the return value or ensure you have a "blocksize" callback and be sure to invalidate the cached address from there.<p>
+ Caching output ports is DEPRECATED in Jack 2.0, due to some new optimization (like "pipelining"). Port buffers have to be retrieved in each callback for proper functionning.
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00036">inprocess()</a>, and <a class="el" href="simple__client_8c-source.html#l00028">process()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="gedfd816f0214875957fd938d35806568"></a><!-- doxytag: member="jack.h::jack_port_get_connections" ref="gedfd816f0214875957fd938d35806568" args="(const jack_port_t *port)" -->
+@@ -400,7 +395,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -428,7 +423,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -458,7 +453,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -487,7 +482,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -508,7 +503,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -529,7 +524,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -539,8 +534,6 @@
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>the full name of the jack_port_t (including the <em>"client_name:"</em> prefix).</dd></dl>
+ <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__PortFunctions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a>. </dd></dl>
+
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g926fd481c441bb72a9bdaa73fbd9dbd8"></a><!-- doxytag: member="jack.h::jack_port_name_size" ref="g926fd481c441bb72a9bdaa73fbd9dbd8" args="(void)" -->
+@@ -553,7 +546,7 @@
+ <td class="paramtype">void </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -601,7 +594,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -622,8 +615,6 @@
+ </dl>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>jack_port_t pointer on success, otherwise NULL. </dd></dl>
+
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g28bc3d642c3212c1f0ec367187865038"></a><!-- doxytag: member="jack.h::jack_port_request_monitor" ref="g28bc3d642c3212c1f0ec367187865038" args="(jack_port_t *port, int onoff)" -->
+@@ -645,7 +636,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -680,7 +671,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -712,7 +703,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -745,7 +736,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -774,7 +765,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -796,7 +787,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -827,7 +818,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -848,7 +839,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -869,7 +860,7 @@
+ <td class="paramtype">void </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -899,7 +890,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -930,7 +921,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -953,7 +944,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#91bf0f8fb0619705676136a7f5e3a931">jack_port_t</a> * </td>
+ <td class="paramname"> <em>port</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -974,7 +965,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -1005,7 +996,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -1017,9 +1008,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__PortSearching.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__PortSearching.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__PortSearching.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__PortSearching.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Looking up ports</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -48,7 +47,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -65,8 +64,6 @@
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>a NULL-terminated array of ports that match the specified arguments. The caller is responsible for calling free(3) any non-NULL returned value.</dd></dl>
+ <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__PortFunctions.html#g926fd481c441bb72a9bdaa73fbd9dbd8">jack_port_name_size()</a>, <a class="el" href="group__PortFunctions.html#g9dcf82a06a6260f35e165c33b21af589">jack_port_type_size()</a> </dd></dl>
+
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="gab2bd6a0a47b115d042f6b6371aaff9d"></a><!-- doxytag: member="jack.h::jack_port_by_id" ref="gab2bd6a0a47b115d042f6b6371aaff9d" args="(jack_client_t *client, jack_port_id_t port_id)" -->
+@@ -88,7 +85,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -118,7 +115,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -130,9 +127,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__ServerControl.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ServerControl.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__ServerControl.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__ServerControl.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Controlling & querying JACK server operation</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -33,7 +32,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -54,7 +53,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -77,7 +76,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -99,7 +98,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -108,8 +107,6 @@
+ <p>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>the sample rate of the jack system, as set by the user when jackd was started. </dd></dl>
+
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="g760b46981bd1d455332d382d6101687c"></a><!-- doxytag: member="jack.h::jack_set_buffer_size" ref="g760b46981bd1d455332d382d6101687c" args="(jack_client_t *client, jack_nframes_t nframes)" -->
+@@ -131,7 +128,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -170,7 +167,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -191,9 +188,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__Setting.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__Setting.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__Setting.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__Setting.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,467 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+-<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+-<title>JACK-AUDIO-CONNECTION-KIT: Client Callbacks</title>
+-<link href="doxygen.css" rel="stylesheet" type="text/css">
+-<link href="tabs.css" rel="stylesheet" type="text/css">
+-</head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>Client Callbacks</h1><table border="0" cellpadding="0" cellspacing="0">
+-<tr><td></td></tr>
+-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#gbad6ea38ac9d8e5ff4231a083604fff9">jack_set_thread_init_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, <a class="el" href="types_8h.html#7c4428bf3b2caf8bb0b92314acaa1307">JackThreadInitCallback</a> thread_init_callback, void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#g76f99f987700b33cd3c28b3cb79f6bf5">jack_on_shutdown</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, void(*function)(void *arg), void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#g62351a5803421b6c21b9ffb9124801ef">jack_set_process_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, <a class="el" href="types_8h.html#4923142208a8e7dacf00ca7a10681d2b">JackProcessCallback</a> process_callback, void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#gc8e87f2c4054afc41c98c8f6a2460859">jack_set_freewheel_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, <a class="el" href="types_8h.html#c7b7d36a121a4828002b2c5a8ddefcd6">JackFreewheelCallback</a> freewheel_callback, void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#g664b5c6516c05878fdcd000af149fad9">jack_set_buffer_size_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, <a class="el" href="types_8h.html#0261190ceecb5da2c2f57a95407f3207">JackBufferSizeCallback</a> bufsize_callback, void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#gfb44f979b13f2dc1fbf2ba7b52882d65">jack_set_sample_rate_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, <a class="el" href="types_8h.html#b993af9e0b5fe4f9b9645c092abcec35">JackSampleRateCallback</a> srate_callback, void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#gdbabe066f85692eb50546cbf2bd5c209">jack_set_client_registration_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#0ae385908cac1f5dffbdf25c377237f4">JackClientRegistrationCallback</a> registration_callback, void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#g36c72f648c7adb7a1698564cb65c4dd9">jack_set_port_registration_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#be0df275316020d3607e0cde8e1161d3">JackPortRegistrationCallback</a> registration_callback, void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#g9f1de5c519d43a5ec60a373d8953ad1f">jack_set_port_connect_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#a5218343bca6daa13a99c30ea39ac96c">JackPortConnectCallback</a> connect_callback, void *arg)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#g50f1f3a79e50cf04016b2ec57be60f0b">jack_set_graph_order_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#8a656ca8ccb88cb25255e1ae85e834c7">JackGraphOrderCallback</a> graph_callback, void *)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__Setting.html#g185c6859d72bb56452b72d1dcd8924f7">jack_set_xrun_callback</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, <a class="el" href="types_8h.html#7955ec486286fec4e2a71243bb66370e">JackXRunCallback</a> xrun_callback, void *arg)</td></tr>
+-
+-</table>
+-<hr><h2>Function Documentation</h2>
+-<a class="anchor" name="g76f99f987700b33cd3c28b3cb79f6bf5"></a><!-- doxytag: member="jack.h::jack_on_shutdown" ref="g76f99f987700b33cd3c28b3cb79f6bf5" args="(jack_client_t *client, void(*function)(void *arg), void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void jack_on_shutdown </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void(*)(void *arg) </td>
+- <td class="paramname"> <em>function</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>pointer to JACK client structure. </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>function</em> </td><td>The jack_shutdown function pointer. </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>arg</em> </td><td>The arguments for the jack_shutdown function.</td></tr>
+- </table>
+-</dl>
+-Register a function (and argument) to be called if and when the JACK server shuts down the client thread. The function must be written as if it were an asynchonrous POSIX signal handler --- use only async-safe functions, and remember that it is executed from another thread. A typical function might set a flag or write to a pipe so that the rest of the application knows that the JACK client thread has shut down.<p>
+-NOTE: clients do not need to call this. It exists only to help more complex clients understand what is going on. It should be called before jack_client_activate().
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00069">main()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g664b5c6516c05878fdcd000af149fad9"></a><!-- doxytag: member="jack.h::jack_set_buffer_size_callback" ref="g664b5c6516c05878fdcd000af149fad9" args="(jack_client_t *client, JackBufferSizeCallback bufsize_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_buffer_size_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#0261190ceecb5da2c2f57a95407f3207">JackBufferSizeCallback</a> </td>
+- <td class="paramname"> <em>bufsize_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell JACK to call <em>bufsize_callback</em> whenever the size of the the buffer that will be passed to the <em>process_callback</em> is about to change. Clients that depend on knowing the buffer size must supply a <em>bufsize_callback</em> before activating themselves.<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>pointer to JACK client structure. </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>bufsize_callback</em> </td><td>function to call when the buffer size changes. </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>arg</em> </td><td>argument for <em>bufsize_callback</em>.</td></tr>
+- </table>
+-</dl>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gdbabe066f85692eb50546cbf2bd5c209"></a><!-- doxytag: member="jack.h::jack_set_client_registration_callback" ref="gdbabe066f85692eb50546cbf2bd5c209" args="(jack_client_t *, JackClientRegistrationCallback registration_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_client_registration_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#0ae385908cac1f5dffbdf25c377237f4">JackClientRegistrationCallback</a> </td>
+- <td class="paramname"> <em>registration_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the JACK server to call <em>registration_callback</em> whenever a port is registered or unregistered, passing <em>arg</em> as a parameter.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gc8e87f2c4054afc41c98c8f6a2460859"></a><!-- doxytag: member="jack.h::jack_set_freewheel_callback" ref="gc8e87f2c4054afc41c98c8f6a2460859" args="(jack_client_t *client, JackFreewheelCallback freewheel_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_freewheel_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#c7b7d36a121a4828002b2c5a8ddefcd6">JackFreewheelCallback</a> </td>
+- <td class="paramname"> <em>freewheel_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the Jack server to call <em>freewheel_callback</em> whenever we enter or leave "freewheel" mode, passing <em>arg</em> as the second argument. The first argument to the callback will be non-zero if JACK is entering freewheel mode, and zero otherwise.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g50f1f3a79e50cf04016b2ec57be60f0b"></a><!-- doxytag: member="jack.h::jack_set_graph_order_callback" ref="g50f1f3a79e50cf04016b2ec57be60f0b" args="(jack_client_t *, JackGraphOrderCallback graph_callback, void *)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_graph_order_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#8a656ca8ccb88cb25255e1ae85e834c7">JackGraphOrderCallback</a> </td>
+- <td class="paramname"> <em>graph_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the JACK server to call <em>graph_callback</em> whenever the processing graph is reordered, passing <em>arg</em> as a parameter.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g9f1de5c519d43a5ec60a373d8953ad1f"></a><!-- doxytag: member="jack.h::jack_set_port_connect_callback" ref="g9f1de5c519d43a5ec60a373d8953ad1f" args="(jack_client_t *, JackPortConnectCallback connect_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_port_connect_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#a5218343bca6daa13a99c30ea39ac96c">JackPortConnectCallback</a> </td>
+- <td class="paramname"> <em>connect_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the JACK server to call <em>connect_callback</em> whenever a port is connected or disconnected, passing <em>arg</em> as a parameter.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g36c72f648c7adb7a1698564cb65c4dd9"></a><!-- doxytag: member="jack.h::jack_set_port_registration_callback" ref="g36c72f648c7adb7a1698564cb65c4dd9" args="(jack_client_t *, JackPortRegistrationCallback registration_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_port_registration_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#be0df275316020d3607e0cde8e1161d3">JackPortRegistrationCallback</a> </td>
+- <td class="paramname"> <em>registration_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the JACK server to call <em>registration_callback</em> whenever a port is registered or unregistered, passing <em>arg</em> as a parameter.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g62351a5803421b6c21b9ffb9124801ef"></a><!-- doxytag: member="jack.h::jack_set_process_callback" ref="g62351a5803421b6c21b9ffb9124801ef" args="(jack_client_t *client, JackProcessCallback process_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_process_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#4923142208a8e7dacf00ca7a10681d2b">JackProcessCallback</a> </td>
+- <td class="paramname"> <em>process_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the Jack server to call <em>process_callback</em> whenever there is work be done, passing <em>arg</em> as the second argument.<p>
+-The code in the supplied function must be suitable for real-time execution. That means that it cannot call functions that might block for a long time. This includes malloc, free, printf, pthread_mutex_lock, sleep, wait, poll, select, pthread_join, pthread_cond_wait, etc, etc. See <a href="http://jackit.sourceforge.net/docs/design/design.html#SECTION00411000000000000000">http://jackit.sourceforge.net/docs/design/design.html#SECTION00411000000000000000</a> for more information.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code, causing JACK to remove that client from the <a class="el" href="simple__client_8c.html#01271cc6cf692278ae35d0062935d7ae">process()</a> graph. </dd></dl>
+-
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00069">main()</a>.</p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gfb44f979b13f2dc1fbf2ba7b52882d65"></a><!-- doxytag: member="jack.h::jack_set_sample_rate_callback" ref="gfb44f979b13f2dc1fbf2ba7b52882d65" args="(jack_client_t *client, JackSampleRateCallback srate_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_sample_rate_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#b993af9e0b5fe4f9b9645c092abcec35">JackSampleRateCallback</a> </td>
+- <td class="paramname"> <em>srate_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the Jack server to call <em>srate_callback</em> whenever the system sample rate changes.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="gbad6ea38ac9d8e5ff4231a083604fff9"></a><!-- doxytag: member="jack.h::jack_set_thread_init_callback" ref="gbad6ea38ac9d8e5ff4231a083604fff9" args="(jack_client_t *client, JackThreadInitCallback thread_init_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_thread_init_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#7c4428bf3b2caf8bb0b92314acaa1307">JackThreadInitCallback</a> </td>
+- <td class="paramname"> <em>thread_init_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell JACK to call <em>thread_init_callback</em> once just after the creation of the thread in which all other callbacks will be handled.<p>
+-The code in the supplied function does not need to be suitable for real-time execution.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code, causing JACK to remove that client from the <a class="el" href="simple__client_8c.html#01271cc6cf692278ae35d0062935d7ae">process()</a> graph. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g185c6859d72bb56452b72d1dcd8924f7"></a><!-- doxytag: member="jack.h::jack_set_xrun_callback" ref="g185c6859d72bb56452b72d1dcd8924f7" args="(jack_client_t *, JackXRunCallback xrun_callback, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_xrun_callback </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#7955ec486286fec4e2a71243bb66370e">JackXRunCallback</a> </td>
+- <td class="paramname"> <em>xrun_callback</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the JACK server to call <em>xrun_callback</em> whenever there is a xrun, passing <em>arg</em> as a parameter.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code </dd></dl>
+-
+-</div>
+-</div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Sun Nov 23 17:53:21 2008 for JACK-AUDIO-CONNECTION-KIT by
+-<a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+-</body>
+-</html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__The.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__The.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__The.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__The.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,157 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+-<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+-<title>JACK-AUDIO-CONNECTION-KIT: non-callback API</title>
+-<link href="doxygen.css" rel="stylesheet" type="text/css">
+-<link href="tabs.css" rel="stylesheet" type="text/css">
+-</head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>non-callback API</h1><table border="0" cellpadding="0" cellspacing="0">
+-<tr><td></td></tr>
+-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__The.html#g1584ce29ad39817f7c494843b732ac94">jack_thread_wait</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *, int status)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__The.html#g16580703a75f9669b35e0c3af74c87f7">jack_cycle_wait</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__The.html#gf537b9889195861efce278f4837bc60e">jack_cycle_signal</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, int status)</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__The.html#g12d4c9b1cbc7cdd76aeb466f6e3cdfd9">jack_set_process_thread</a> (<a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="el" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>, <a class="el" href="types_8h.html#6f0cea0ebbd7aee4ec0591d3c26699f5">JackThreadCallback</a> fun, void *arg)</td></tr>
+-
+-</table>
+-<hr><h2>Function Documentation</h2>
+-<a class="anchor" name="gf537b9889195861efce278f4837bc60e"></a><!-- doxytag: member="jack.h::jack_cycle_signal" ref="gf537b9889195861efce278f4837bc60e" args="(jack_client_t *client, int status)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">void jack_cycle_signal </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">int </td>
+- <td class="paramname"> <em>status</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Signal next clients in the graph.<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>- pointer to a JACK client structure </td></tr>
+- <tr><td valign="top"></td><td valign="top"><em>status</em> </td><td>- if non-zero, calling thread should exit </td></tr>
+- </table>
+-</dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g16580703a75f9669b35e0c3af74c87f7"></a><!-- doxytag: member="jack.h::jack_cycle_wait" ref="g16580703a75f9669b35e0c3af74c87f7" args="(jack_client_t *client)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> jack_cycle_wait </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em> </td>
+- <td> ) </td>
+- <td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Wait until this JACK client should process data.<p>
+-<dl compact><dt><b>Parameters:</b></dt><dd>
+- <table border="0" cellspacing="2" cellpadding="0">
+- <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>- pointer to a JACK client structure</td></tr>
+- </table>
+-</dl>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>the number of frames of data to process </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g12d4c9b1cbc7cdd76aeb466f6e3cdfd9"></a><!-- doxytag: member="jack.h::jack_set_process_thread" ref="g12d4c9b1cbc7cdd76aeb466f6e3cdfd9" args="(jack_client_t *client, JackThreadCallback fun, void *arg)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int jack_set_process_thread </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname"> <em>client</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype"><a class="el" href="types_8h.html#6f0cea0ebbd7aee4ec0591d3c26699f5">JackThreadCallback</a> </td>
+- <td class="paramname"> <em>fun</em>, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">void * </td>
+- <td class="paramname"> <em>arg</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-Tell the Jack server to call <em>thread_callback</em> in the RT thread. Typical use are in conjunction with <em>jack_cycle_wait</em> and @ jack_cycle_signal functions. The code in the supplied function must be suitable for real-time execution. That means that it cannot call functions that might block for a long time. This includes malloc, free, printf, pthread_mutex_lock, sleep, wait, poll, select, pthread_join, pthread_cond_wait, etc, etc. See <a href="http://jackit.sourceforge.net/docs/design/design.html#SECTION00411000000000000000">http://jackit.sourceforge.net/docs/design/design.html#SECTION00411000000000000000</a> for more information.<p>
+-<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, otherwise a non-zero error code. </dd></dl>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="g1584ce29ad39817f7c494843b732ac94"></a><!-- doxytag: member="jack.h::jack_thread_wait" ref="g1584ce29ad39817f7c494843b732ac94" args="(jack_client_t *, int status)" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> jack_thread_wait </td>
+- <td>(</td>
+- <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+- <td class="paramname">, </td>
+- </tr>
+- <tr>
+- <td class="paramkey"></td>
+- <td></td>
+- <td class="paramtype">int </td>
+- <td class="paramname"> <em>status</em></td><td> </td>
+- </tr>
+- <tr>
+- <td></td>
+- <td>)</td>
+- <td></td><td></td><td></td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-<b>THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN NEW JACK CLIENTS</b><p>
+-It should be replace by use of @ jack_cycle_wait and @ jack_cycle_signal functions.
+-</div>
+-</div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Sun Nov 23 17:53:21 2008 for JACK-AUDIO-CONNECTION-KIT by
+-<a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+-</body>
+-</html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__TimeFunctions.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__TimeFunctions.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__TimeFunctions.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__TimeFunctions.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Handling time</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+@@ -33,7 +32,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -54,7 +53,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -84,7 +83,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -104,7 +103,7 @@
+ <td>(</td>
+ <td class="paramname"> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -126,7 +125,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -156,7 +155,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -167,9 +166,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/group__TransportControl.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__TransportControl.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/group__TransportControl.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/group__TransportControl.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>Transport and Timebase control</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+@@ -102,7 +101,7 @@
+ <td class="paramtype">const <a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -128,7 +127,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -172,7 +171,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -211,7 +210,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -262,7 +261,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -305,7 +304,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -344,7 +343,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -382,7 +381,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -412,7 +411,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -440,7 +439,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -457,9 +456,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/index.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/index.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/index.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/index.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,11 +4,10 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>JACK Audio Connection Kit</h1>
+ <p>
+-<h3 align="center">0.116.0 </h3><h2><a class="anchor" name="intro">
++<h3 align="center">0.116.1 </h3><h2><a class="anchor" name="intro">
+ Introduction</a></h2>
+ JACK is a low-latency audio server, written for any operating system that is reasonably POSIX compliant. It currently exists for Linux, OS X, Solaris, FreeBSD and Windows. It can connect several client applications to an audio device, and allow them to share audio with each other. Clients can run as separate processes like normal applications, or within the JACK server as "plugins".<p>
+ JACK was designed from the ground up for professional audio work, and its design focuses on two key areas: synchronous execution of all clients, and low latency operation.<p>
+@@ -45,9 +44,8 @@
+ License</a></h2>
+ Copyright (C) 2001-2008 by Paul Davis and others.<p>
+ JACK is free software; you can redistribute it and/or modify it under the terms of the GNU GPL and LGPL licenses as published by the Free Software Foundation, <<a href="http://www.gnu.org">http://www.gnu.org</a>>. The JACK server uses the GPL, as noted in the source file headers. However, the JACK library is licensed under the LGPL, allowing proprietary programs to link with it and use JACK services. You should have received a copy of these Licenses along with the program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.<p>
+-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. </div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. <hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/inprocess_8c.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/inprocess_8c.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/inprocess_8c.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/inprocess_8c.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>inprocess.c File Reference</h1>This demonstrates the basic concepts for writing a client that runs within the JACK server process. <a href="#_details">More...</a>
+ <p>
+ <code>#include <stdlib.h></code><br>
+@@ -48,7 +47,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -58,10 +57,6 @@
+ Called in the realtime thread on every process cycle. The entry point name was passed to <a class="el" href="group__ClientCallbacks.html#g62351a5803421b6c21b9ffb9124801ef">jack_set_process_callback()</a> from <a class="el" href="inprocess_8c.html#872c1ad15ec7ba35574b0bafc91212c9">jack_initialize()</a>. Although this is an internal client, its <a class="el" href="simple__client_8c.html#01271cc6cf692278ae35d0062935d7ae">process()</a> interface is identical to <a class="el" href="simple__client_8c.html">simple_client.c</a>.<p>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if successful; otherwise <a class="el" href="inprocess_8c.html#1343309803bc07aacba7f4fd8f46b0a3">jack_finish()</a> will be called and the client terminated immediately. </dd></dl>
+
+-<p>References <a class="el" href="inprocess_8c-source.html#l00022">port_pair_t::input_port</a>, <a class="el" href="group__PortFunctions.html#gd0dcf2703cc45c1b7fbb1f31155fa721">jack_port_get_buffer()</a>, and <a class="el" href="inprocess_8c-source.html#l00023">port_pair_t::output_port</a>.</p>
+-
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="1343309803bc07aacba7f4fd8f46b0a3"></a><!-- doxytag: member="inprocess.c::jack_finish" ref="1343309803bc07aacba7f4fd8f46b0a3" args="(void *arg)" -->
+@@ -74,7 +69,7 @@
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>arg</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -109,7 +104,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -125,13 +120,10 @@
+ </dl>
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if successful; otherwise <a class="el" href="inprocess_8c.html#1343309803bc07aacba7f4fd8f46b0a3">jack_finish()</a> will be called and the client terminated immediately. </dd></dl>
+
+-<p>References <a class="el" href="inprocess_8c-source.html#l00036">inprocess()</a>, <a class="el" href="inprocess_8c-source.html#l00022">port_pair_t::input_port</a>, <a class="el" href="group__ClientFunctions.html#g0033c673e8583f3166ca334b3e3dc751">jack_activate()</a>, <a class="el" href="group__PortFunctions.html#g462cfb7d50a41ed7a2c0e8ae303312b6">jack_connect()</a>, <a class="el" href="types_8h-source.html#l00202">JACK_DEFAULT_AUDIO_TYPE</a>, <a class="el" href="group__PortFunctions.html#gd91c438ebc4e4a3dcd780cb458725647">jack_port_name()</a>, <a class="el" href="group__PortFunctions.html#gb6fd42ee3b80fe9259400343f0fa6c2d">jack_port_register()</a>, <a class="el" href="group__ClientCallbacks.html#g62351a5803421b6c21b9ffb9124801ef">jack_set_process_callback()</a>, <a class="el" href="types_8h-source.html#l00224">JackPortIsInput</a>, <a class="el" href="types_8h-source.html#l00230">JackPortIsOutput</a>, and <a class="el" href="inprocess_8c-source.html#l00023">port_pair_t::output_port</a>.</p>
+-
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/intclient_8h.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/intclient_8h.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/intclient_8h.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/intclient_8h.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>intclient.h File Reference</h1><code>#include <<a class="el" href="types_8h-source.html">jack/types.h</a>></code><br>
+
+ <p>
+@@ -41,7 +40,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -84,7 +83,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -140,7 +139,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -187,7 +186,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -205,9 +204,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/intclient_8h-source.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/intclient_8h-source.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/intclient_8h-source.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/intclient_8h-source.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,7 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>intclient.h</h1><a href="intclient_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+ <a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2004 Jack O'Quin</span>
+ <a name="l00003"></a>00003 <span class="comment"> * </span>
+@@ -52,9 +52,8 @@
+ <a name="l00127"></a>00127 <span class="preprocessor">#endif</span>
+ <a name="l00128"></a>00128 <span class="preprocessor"></span>
+ <a name="l00129"></a>00129 <span class="preprocessor">#endif </span><span class="comment">/* __jack_intclient_h__ */</span>
+-</pre></div></div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/jack_8h.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/jack_8h.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/jack_8h.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/jack_8h.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>jack.h File Reference</h1><code>#include <pthread.h></code><br>
+ <code>#include <<a class="el" href="types_8h-source.html">jack/types.h</a>></code><br>
+ <code>#include <<a class="el" href="transport_8h-source.html">jack/transport.h</a>></code><br>
+@@ -181,7 +180,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -198,9 +197,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/jack_8h-source.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/jack_8h-source.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/jack_8h-source.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/jack_8h-source.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,7 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>jack.h</h1><a href="jack_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+ <a name="l00002"></a>00002 <span class="comment"> Copyright (C) 2001 Paul Davis</span>
+ <a name="l00003"></a>00003 <span class="comment"> Copyright (C) 2004 Jack O'Quin</span>
+@@ -240,9 +240,8 @@
+ <a name="l00955"></a>00955 <span class="preprocessor">#endif</span>
+ <a name="l00956"></a>00956 <span class="preprocessor"></span>
+ <a name="l00957"></a>00957 <span class="preprocessor">#endif </span><span class="comment">/* __jack_h__ */</span>
+-</pre></div></div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/mainpage_8dox.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/mainpage_8dox.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/mainpage_8dox.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/mainpage_8dox.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,14 +4,12 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>mainpage.dox File Reference</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ </table>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/midiport_8h.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/midiport_8h.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/midiport_8h.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/midiport_8h.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>midiport.h File Reference</h1><code>#include <<a class="el" href="types_8h-source.html">jack/types.h</a>></code><br>
+ <code>#include <stdlib.h></code><br>
+
+@@ -64,12 +63,11 @@
+ <div class="memdoc">
+
+ <p>
+-A Jack MIDI event.
++
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/midiport_8h-source.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/midiport_8h-source.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/midiport_8h-source.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/midiport_8h-source.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,7 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>midiport.h</h1><a href="midiport_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+ <a name="l00002"></a>00002 <span class="comment"> Copyright (C) 2004 Ian Esten</span>
+ <a name="l00003"></a>00003 <span class="comment"> </span>
+@@ -94,9 +94,8 @@
+ <a name="l00158"></a>00158 <span class="preprocessor">#endif </span><span class="comment">/* __JACK_MIDIPORT_H */</span>
+ <a name="l00159"></a>00159
+ <a name="l00160"></a>00160
+-</pre></div></div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/modules.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/modules.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/modules.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/modules.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,9 +4,8 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>Modules</h1>Here is a list of all modules:<ul>
++<!-- Generated by Doxygen 1.5.4 -->
++<h1>JACK-AUDIO-CONNECTION-KIT Modules</h1>Here is a list of all modules:<ul>
+ <li><a class="el" href="group__ClientFunctions.html">Creating & manipulating clients</a>
+ <li><a class="el" href="group__NonCallbackAPI.html">The non-callback API</a>
+ <li><a class="el" href="group__ClientCallbacks.html">Setting Client Callbacks</a>
+@@ -19,9 +18,8 @@
+ <li><a class="el" href="group__TransportControl.html">Transport and Timebase control</a>
+ <li><a class="el" href="group__MIDIAPI.html">Reading and writing MIDI data</a>
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/pages.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/pages.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/pages.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/pages.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,9 +4,8 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>Related Pages</h1>Here is a list of all related documentation pages:<ul>
++<!-- Generated by Doxygen 1.5.4 -->
++<h1>JACK-AUDIO-CONNECTION-KIT Related Pages</h1>Here is a list of all related documentation pages:<ul>
+ <li><a class="el" href="transport-design.html">JACK Transport Design</a>
+
+ <li><a class="el" href="porting-guide.html">Porting JACK</a>
+@@ -14,9 +13,8 @@
+ <li><a class="el" href="deprecated.html">Deprecated List</a>
+
+ </ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/porting_8dox.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/porting_8dox.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/porting_8dox.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/porting_8dox.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,14 +4,12 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>porting.dox File Reference</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ </table>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/porting-guide.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/porting-guide.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/porting-guide.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/porting-guide.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1><a class="anchor" name="porting-guide">Porting JACK </a></h1>The <a class="el" href="index.html#index">JACK Audio Connection Kit</a> is designed to be portable to any system supporting the relevant POSIX and C language standards. It currently works with GNU/Linux and Mac OS X on several different processor architectures. This document describes the steps needed to port JACK to another platform, and the methods used to provide portability.<p>
+ <ul>
+ <li><a class="el" href="porting-guide.html#portrequirements">Requirements</a></li><li><a class="el" href="porting-guide.html#portoverview">Overview</a></li><li><a class="el" href="porting-guide.html#portopsys">Operating System Dependencies</a></li><li><a class="el" href="porting-guide.html#portcpu">Processor Dependencies</a></li><li><a class="el" href="porting-guide.html#portissues">Issues Not Addressed</a></li></ul>
+@@ -52,9 +51,8 @@
+ <p>
+ <ul>
+ <li>Platform-specific build tools like Apple's Project Builder are not well-supported. </li></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/ringbuffer_8h.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/ringbuffer_8h.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/ringbuffer_8h.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/ringbuffer_8h.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>ringbuffer.h File Reference</h1><code>#include <sys/types.h></code><br>
+
+ <p>
+@@ -57,7 +56,7 @@
+ <td class="paramtype">size_t </td>
+ <td class="paramname"> <em>sz</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -84,7 +83,7 @@
+ <td class="paramtype"><a class="el" href="structjack__ringbuffer__t.html">jack_ringbuffer_t</a> * </td>
+ <td class="paramname"> <em>rb</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -119,7 +118,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -157,7 +156,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -186,7 +185,7 @@
+ <td class="paramtype"><a class="el" href="structjack__ringbuffer__t.html">jack_ringbuffer_t</a> * </td>
+ <td class="paramname"> <em>rb</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -228,7 +227,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -272,7 +271,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -310,7 +309,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -338,7 +337,7 @@
+ <td class="paramtype">const <a class="el" href="structjack__ringbuffer__t.html">jack_ringbuffer_t</a> * </td>
+ <td class="paramname"> <em>rb</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -365,7 +364,7 @@
+ <td class="paramtype"><a class="el" href="structjack__ringbuffer__t.html">jack_ringbuffer_t</a> * </td>
+ <td class="paramname"> <em>rb</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -407,7 +406,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -445,7 +444,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -473,7 +472,7 @@
+ <td class="paramtype">const <a class="el" href="structjack__ringbuffer__t.html">jack_ringbuffer_t</a> * </td>
+ <td class="paramname"> <em>rb</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -490,9 +489,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/ringbuffer_8h-source.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/ringbuffer_8h-source.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/ringbuffer_8h-source.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/ringbuffer_8h-source.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,7 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>ringbuffer.h</h1><a href="ringbuffer_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+ <a name="l00002"></a>00002 <span class="comment"> Copyright (C) 2000 Paul Davis</span>
+ <a name="l00003"></a>00003 <span class="comment"> Copyright (C) 2003 Rohan Drape</span>
+@@ -87,9 +87,8 @@
+ <a name="l00233"></a>00233 <span class="preprocessor">#endif</span>
+ <a name="l00234"></a>00234 <span class="preprocessor"></span>
+ <a name="l00235"></a>00235 <span class="preprocessor">#endif</span>
+-</pre></div></div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/simple__client_8c.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/simple__client_8c.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/simple__client_8c.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/simple__client_8c.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>simple_client.c File Reference</h1>This simple client demonstrates the most basic features of JACK as they would be used by many applications. <a href="#_details">More...</a>
+ <p>
+ <code>#include <stdio.h></code><br>
+@@ -45,7 +44,7 @@
+ <td class="paramtype">void * </td>
+ <td class="paramname"> <em>arg</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -53,8 +52,6 @@
+
+ <p>
+ JACK calls this shutdown_callback if the server ever shuts down or decides to disconnect the client.
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="simple_client.c::main" ref="0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
+@@ -76,7 +73,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -84,8 +81,6 @@
+
+ <p>
+
+-<p>References <a class="el" href="simple__client_8c-source.html#l00017">client</a>, <a class="el" href="simple__client_8c-source.html#l00015">input_port</a>, <a class="el" href="group__ClientFunctions.html#g0033c673e8583f3166ca334b3e3dc751">jack_activate()</a>, <a class="el" href="group__ClientFunctions.html#g1a7d19cde344c471ff9a2ac946dc4407">jack_client_close()</a>, <a class="el" href="group__ClientFunctions.html#g28977ad0cccf08cd600dd220e2b1c880">jack_client_open()</a>, <a class="el" href="group__PortFunctions.html#g462cfb7d50a41ed7a2c0e8ae303312b6">jack_connect()</a>, <a class="el" href="types_8h-source.html#l00202">JACK_DEFAULT_AUDIO_TYPE</a>, <a class="el" href="group__ClientFunctions.html#gbece75a6af78b08cae1bc11ab70c51c1">jack_get_client_name()</a>, <a class="el" href="group__PortSearching.html#gc35dd734330ea73e6609804040fd791f">jack_get_ports()</a>, <a class="el" href="group__ServerControl.html#ga8f78d8594e1de1935711d25e9be61de">jack_get_sample_rate()</a>, <a class="el" href="group__ClientCallbacks.html#g76f99f987700b33cd3c28b3cb79f6bf5">jack_on_shutdown()</a>, <a class="el" href="group__PortFunctions.html#gd91c438ebc4e4a3dcd780cb458725647">jack_port_name()</a>, <a class="el" href="group__PortFunctions.html#gb6fd42ee3b80fe9259400343f0fa6c2d">jack_port_register()</a>, <a class="el" href="group__ClientCallbacks.html#g62351a5803421b6c21b9ffb9124801ef">jack_set_process_callback()</a>, <a class="el" href="simple__client_8c-source.html#l00045">jack_shutdown()</a>, <a class="el" href="types_8h-source.html#l00348">JackNameNotUnique</a>, <a class="el" href="types_8h-source.html#l00278">JackNullOption</a>, <a class="el" href="types_8h-source.html#l00224">JackPortIsInput</a>, <a class="el" href="types_8h-source.html#l00230">JackPortIsOutput</a>, <a class="el" href="types_8h-source.html#l00236">JackPortIsPhysical</a>, <a class="el" href="types_8h-source.html#l00361">JackServerFailed</a>, <a class="el" href="types_8h-source.html#l00356">JackServerStarted</a>, <a class="el" href="simple__client_8c-source.html#l00016">output_port</a>, and <a class="el" href="simple__client_8c-source.html#l00028">process()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="01271cc6cf692278ae35d0062935d7ae"></a><!-- doxytag: member="simple_client.c::process" ref="01271cc6cf692278ae35d0062935d7ae" args="(jack_nframes_t nframes, void *arg)" -->
+@@ -107,7 +102,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -116,10 +111,6 @@
+ <p>
+ The process callback for this JACK application is called in a special realtime thread once for each audio cycle.<p>
+ This client does nothing more than copy data from its input port to its output port. It will exit when stopped by the user (e.g. using Ctrl-C on a unix-ish operating system)
+-<p>References <a class="el" href="simple__client_8c-source.html#l00015">input_port</a>, <a class="el" href="group__PortFunctions.html#gd0dcf2703cc45c1b7fbb1f31155fa721">jack_port_get_buffer()</a>, and <a class="el" href="simple__client_8c-source.html#l00016">output_port</a>.</p>
+-
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <hr><h2>Variable Documentation</h2>
+@@ -136,8 +127,6 @@
+
+ <p>
+
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="f830efb2d3206ba81602df7945863a2d"></a><!-- doxytag: member="simple_client.c::input_port" ref="f830efb2d3206ba81602df7945863a2d" args="" -->
+@@ -153,8 +142,6 @@
+
+ <p>
+
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>, and <a class="el" href="simple__client_8c-source.html#l00028">process()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="163b2d99fab30f4f80d37b8e5fe6a9a2"></a><!-- doxytag: member="simple_client.c::output_port" ref="163b2d99fab30f4f80d37b8e5fe6a9a2" args="" -->
+@@ -170,13 +157,10 @@
+
+ <p>
+
+-<p>Referenced by <a class="el" href="simple__client_8c-source.html#l00051">main()</a>, and <a class="el" href="simple__client_8c-source.html#l00028">process()</a>.</p>
+-
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/statistics_8h.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/statistics_8h.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/statistics_8h.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/statistics_8h.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>statistics.h File Reference</h1><code>#include <<a class="el" href="types_8h-source.html">jack/types.h</a>></code><br>
+
+ <p>
+@@ -30,7 +29,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -51,7 +50,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -72,7 +71,7 @@
+ <td class="paramtype"><a class="el" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> * </td>
+ <td class="paramname"> <em>client</em> </td>
+ <td> ) </td>
+- <td></td>
++ <td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -82,9 +81,8 @@
+ Reset the maximum delay counter. This would be useful to estimate the effect that a change to the configuration of a running system (e.g. toggling kernel preemption) has on the delay experienced by JACK, without having to restart the JACK engine.
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/statistics_8h-source.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/statistics_8h-source.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/statistics_8h-source.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/statistics_8h-source.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,7 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>statistics.h</h1><a href="statistics_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+ <a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2004 Rui Nuno Capela, Lee Revell</span>
+ <a name="l00003"></a>00003 <span class="comment"> * </span>
+@@ -45,9 +45,8 @@
+ <a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
+ <a name="l00055"></a>00055 <span class="preprocessor"></span>
+ <a name="l00056"></a>00056 <span class="preprocessor">#endif </span><span class="comment">/* __statistics_h__ */</span>
+-</pre></div></div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/struct____attribute____.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/struct____attribute____.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/struct____attribute____.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/struct____attribute____.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,364 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+-<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+-<title>JACK-AUDIO-CONNECTION-KIT: __attribute__ Struct Reference</title>
+-<link href="doxygen.css" rel="stylesheet" type="text/css">
+-<link href="tabs.css" rel="stylesheet" type="text/css">
+-</head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>__attribute__ Struct Reference</h1><!-- doxytag: class="__attribute__" --><code>#include <<a class="el" href="transport_8h-source.html">transport.h</a>></code>
+-<p>
+-<table border="0" cellpadding="0" cellspacing="0">
+-<tr><td></td></tr>
+-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#fcdc9d816e23c3ab82b8537a65dd505f">unique_1</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#9b578722d78af01d732b1dfd28d84de1">usecs</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#0ec7840d2b06bb592e8ddc69bf6baec8">frame_rate</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#3ce51b810ff0001700d883a012a029c1">frame</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="transport_8h.html#64608154318de05af9e763bfb5fb8529">jack_position_bits_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#672cf73367843b9ae57cecf19baf296e">valid</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#063fde9ef86e4bf6ee076fc47064c33c">bar</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#0ca646c1c7d0ab37f521d100af060778">beat</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#20325b31953dca852440d3156fdba105">tick</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#4b88a6922fdfdc25e8d1d2cde9a39403">bar_start_tick</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#ab529943b163dc60c3a6c6049000e3ba">beats_per_bar</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#abf816642d3ffb9641080a94e9a64394">beat_type</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#3c375763b2c296d187efbbb0de7a6141">ticks_per_beat</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#1884b05e8034e10a86e764d3fa1d15ef">beats_per_minute</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#04fd293d170da53d2a77d1d6bcdc6423">frame_time</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#e8b3866454bfb7201f5e0526856b71d0">next_time</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#00fec1c40f16dbcf3da793398f06fbbf">bbt_offset</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#cfa1804e2549550b40ccde3ff09d0ab4">audio_frames_per_video_frame</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#f9d55c3e8df8a329392ffd5ab3e8c014">video_offset</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#d15cce7871386d18235d75c54d683e0c">padding</a> [7]</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct____attribute____.html#75273d9697aec6ad4c436354bca1b078">unique_2</a></td></tr>
+-
+-</table>
+-<hr><a name="_details"></a><h2>Detailed Description</h2>
+-Struct for transport position information. <hr><h2>Field Documentation</h2>
+-<a class="anchor" name="fcdc9d816e23c3ab82b8537a65dd505f"></a><!-- doxytag: member="__attribute__::unique_1" ref="fcdc9d816e23c3ab82b8537a65dd505f" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a> <a class="el" href="struct____attribute____.html#fcdc9d816e23c3ab82b8537a65dd505f">__attribute__::unique_1</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-unique ID
+-</div>
+-</div><p>
+-<a class="anchor" name="9b578722d78af01d732b1dfd28d84de1"></a><!-- doxytag: member="__attribute__::usecs" ref="9b578722d78af01d732b1dfd28d84de1" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> <a class="el" href="struct____attribute____.html#9b578722d78af01d732b1dfd28d84de1">__attribute__::usecs</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-monotonic, free-rolling
+-</div>
+-</div><p>
+-<a class="anchor" name="0ec7840d2b06bb592e8ddc69bf6baec8"></a><!-- doxytag: member="__attribute__::frame_rate" ref="0ec7840d2b06bb592e8ddc69bf6baec8" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> <a class="el" href="struct____attribute____.html#0ec7840d2b06bb592e8ddc69bf6baec8">__attribute__::frame_rate</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current frame rate (per second)
+-</div>
+-</div><p>
+-<a class="anchor" name="3ce51b810ff0001700d883a012a029c1"></a><!-- doxytag: member="__attribute__::frame" ref="3ce51b810ff0001700d883a012a029c1" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> <a class="el" href="struct____attribute____.html#3ce51b810ff0001700d883a012a029c1">__attribute__::frame</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-frame number, always present
+-</div>
+-</div><p>
+-<a class="anchor" name="672cf73367843b9ae57cecf19baf296e"></a><!-- doxytag: member="__attribute__::valid" ref="672cf73367843b9ae57cecf19baf296e" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="transport_8h.html#64608154318de05af9e763bfb5fb8529">jack_position_bits_t</a> <a class="el" href="struct____attribute____.html#672cf73367843b9ae57cecf19baf296e">__attribute__::valid</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-which other fields are valid
+-</div>
+-</div><p>
+-<a class="anchor" name="063fde9ef86e4bf6ee076fc47064c33c"></a><!-- doxytag: member="__attribute__::bar" ref="063fde9ef86e4bf6ee076fc47064c33c" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int32_t <a class="el" href="struct____attribute____.html#063fde9ef86e4bf6ee076fc47064c33c">__attribute__::bar</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current bar
+-</div>
+-</div><p>
+-<a class="anchor" name="0ca646c1c7d0ab37f521d100af060778"></a><!-- doxytag: member="__attribute__::beat" ref="0ca646c1c7d0ab37f521d100af060778" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int32_t <a class="el" href="struct____attribute____.html#0ca646c1c7d0ab37f521d100af060778">__attribute__::beat</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current beat-within-bar
+-</div>
+-</div><p>
+-<a class="anchor" name="20325b31953dca852440d3156fdba105"></a><!-- doxytag: member="__attribute__::tick" ref="20325b31953dca852440d3156fdba105" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int32_t <a class="el" href="struct____attribute____.html#20325b31953dca852440d3156fdba105">__attribute__::tick</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current tick-within-beat
+-</div>
+-</div><p>
+-<a class="anchor" name="4b88a6922fdfdc25e8d1d2cde9a39403"></a><!-- doxytag: member="__attribute__::bar_start_tick" ref="4b88a6922fdfdc25e8d1d2cde9a39403" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="struct____attribute____.html#4b88a6922fdfdc25e8d1d2cde9a39403">__attribute__::bar_start_tick</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="ab529943b163dc60c3a6c6049000e3ba"></a><!-- doxytag: member="__attribute__::beats_per_bar" ref="ab529943b163dc60c3a6c6049000e3ba" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">float <a class="el" href="struct____attribute____.html#ab529943b163dc60c3a6c6049000e3ba">__attribute__::beats_per_bar</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-time signature "numerator"
+-</div>
+-</div><p>
+-<a class="anchor" name="abf816642d3ffb9641080a94e9a64394"></a><!-- doxytag: member="__attribute__::beat_type" ref="abf816642d3ffb9641080a94e9a64394" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">float <a class="el" href="struct____attribute____.html#abf816642d3ffb9641080a94e9a64394">__attribute__::beat_type</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-time signature "denominator"
+-</div>
+-</div><p>
+-<a class="anchor" name="3c375763b2c296d187efbbb0de7a6141"></a><!-- doxytag: member="__attribute__::ticks_per_beat" ref="3c375763b2c296d187efbbb0de7a6141" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="struct____attribute____.html#3c375763b2c296d187efbbb0de7a6141">__attribute__::ticks_per_beat</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="1884b05e8034e10a86e764d3fa1d15ef"></a><!-- doxytag: member="__attribute__::beats_per_minute" ref="1884b05e8034e10a86e764d3fa1d15ef" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="struct____attribute____.html#1884b05e8034e10a86e764d3fa1d15ef">__attribute__::beats_per_minute</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="04fd293d170da53d2a77d1d6bcdc6423"></a><!-- doxytag: member="__attribute__::frame_time" ref="04fd293d170da53d2a77d1d6bcdc6423" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="struct____attribute____.html#04fd293d170da53d2a77d1d6bcdc6423">__attribute__::frame_time</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current time in seconds
+-</div>
+-</div><p>
+-<a class="anchor" name="e8b3866454bfb7201f5e0526856b71d0"></a><!-- doxytag: member="__attribute__::next_time" ref="e8b3866454bfb7201f5e0526856b71d0" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="struct____attribute____.html#e8b3866454bfb7201f5e0526856b71d0">__attribute__::next_time</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-next sequential frame_time (unless repositioned)
+-</div>
+-</div><p>
+-<a class="anchor" name="00fec1c40f16dbcf3da793398f06fbbf"></a><!-- doxytag: member="__attribute__::bbt_offset" ref="00fec1c40f16dbcf3da793398f06fbbf" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> <a class="el" href="struct____attribute____.html#00fec1c40f16dbcf3da793398f06fbbf">__attribute__::bbt_offset</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-frame offset for the BBT fields (the given bar, beat, and tick values actually refer to a time frame_offset frames before the start of the cycle), should be assumed to be 0 if JackBBTFrameOffset is not set. If JackBBTFrameOffset is set and this value is zero, the BBT time refers to the first frame of this cycle. If the value is positive, the BBT time refers to a frame that many frames before the start of the cycle.
+-</div>
+-</div><p>
+-<a class="anchor" name="cfa1804e2549550b40ccde3ff09d0ab4"></a><!-- doxytag: member="__attribute__::audio_frames_per_video_frame" ref="cfa1804e2549550b40ccde3ff09d0ab4" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">float <a class="el" href="struct____attribute____.html#cfa1804e2549550b40ccde3ff09d0ab4">__attribute__::audio_frames_per_video_frame</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-number of audio frames per video frame. Should be assumed zero if JackAudioVideoRatio is not set. If JackAudioVideoRatio is set and the value is zero, no video data exists within the JACK graph
+-</div>
+-</div><p>
+-<a class="anchor" name="f9d55c3e8df8a329392ffd5ab3e8c014"></a><!-- doxytag: member="__attribute__::video_offset" ref="f9d55c3e8df8a329392ffd5ab3e8c014" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> <a class="el" href="struct____attribute____.html#f9d55c3e8df8a329392ffd5ab3e8c014">__attribute__::video_offset</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-audio frame at which the first video frame in this cycle occurs. Should be assumed to be 0 if JackVideoFrameOffset is not set. If JackVideoFrameOffset is set, but the value is zero, there is no video frame within this cycle.
+-</div>
+-</div><p>
+-<a class="anchor" name="d15cce7871386d18235d75c54d683e0c"></a><!-- doxytag: member="__attribute__::padding" ref="d15cce7871386d18235d75c54d683e0c" args="[7]" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int32_t <a class="el" href="struct____attribute____.html#d15cce7871386d18235d75c54d683e0c">__attribute__::padding</a>[7] </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="75273d9697aec6ad4c436354bca1b078"></a><!-- doxytag: member="__attribute__::unique_2" ref="75273d9697aec6ad4c436354bca1b078" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a> <a class="el" href="struct____attribute____.html#75273d9697aec6ad4c436354bca1b078">__attribute__::unique_2</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-unique ID
+-</div>
+-</div><p>
+-<hr>The documentation for this struct was generated from the following file:<ul>
+-<li><a class="el" href="transport_8h-source.html">transport.h</a></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 14 16:48:24 2008 for JACK-AUDIO-CONNECTION-KIT by
+-<a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+-</body>
+-</html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/struct__jack__midi__event.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/struct__jack__midi__event.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/struct__jack__midi__event.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/struct__jack__midi__event.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>_jack_midi_event Struct Reference</h1><!-- doxytag: class="_jack_midi_event" --><code>#include <<a class="el" href="midiport_8h-source.html">midiport.h</a>></code>
+ <p>
+ <table border="0" cellpadding="0" cellspacing="0">
+@@ -67,9 +66,8 @@
+ </div><p>
+ <hr>The documentation for this struct was generated from the following file:<ul>
+ <li><a class="el" href="midiport_8h-source.html">midiport.h</a></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/structjack__position__t.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structjack__position__t.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/structjack__position__t.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structjack__position__t.html 1970-01-01 01:00:00.000000000 +0100
+@@ -1,364 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+-<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+-<title>JACK-AUDIO-CONNECTION-KIT: jack_position_t Struct Reference</title>
+-<link href="doxygen.css" rel="stylesheet" type="text/css">
+-<link href="tabs.css" rel="stylesheet" type="text/css">
+-</head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
+-<h1>jack_position_t Struct Reference</h1><!-- doxytag: class="jack_position_t" --><code>#include <<a class="el" href="transport_8h-source.html">transport.h</a>></code>
+-<p>
+-<table border="0" cellpadding="0" cellspacing="0">
+-<tr><td></td></tr>
+-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#2fe4e3ede6d03c170abce08f867f9bc7">unique_1</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#08e43943a7153ecff15b0f8ba6517e95">usecs</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#de3f7758360f5ec5432abaead67b553a">frame_rate</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#b1d0fe08334f47b1aa8bb36ba722228f">frame</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="transport_8h.html#64608154318de05af9e763bfb5fb8529">jack_position_bits_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#838c733e8006d1a0cc6921b4a132a8e4">valid</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#4f42cef08eb48a97a1b746698697d0de">bar</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#fb3f220fd87757095057abc152289110">beat</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#9ba36f6c4eaede3bb1c9b7a85b5f76d1">tick</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#67ff65ba02ba4146b1e46ce6d51ec644">bar_start_tick</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#dc52988414544ba1b86429dad68c6260">beats_per_bar</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#15383588a3fb97333204bc564cf1c06c">beat_type</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#08ca4c388c6460dcef82f03346ccbf52">ticks_per_beat</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#657486be93ebcb20e3a1b45a91f30d33">beats_per_minute</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#bd97b0d447281eebffa750c2b90e791d">frame_time</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#83e65f9658fa4d93658cbad47d446b0b">next_time</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#e4bb9383734d2e7ca7758011102c03b2">bbt_offset</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#f28a3e9ee8b36a92309de372093f56f3">audio_frames_per_video_frame</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#c03889456c88714ddf680784ee970d3b">video_offset</a></td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#c3a837fabff41e637a7f6fb50dbe6f22">padding</a> [7]</td></tr>
+-
+-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structjack__position__t.html#9c3d31034160d5d2b9205eae9983e385">unique_2</a></td></tr>
+-
+-</table>
+-<hr><a name="_details"></a><h2>Detailed Description</h2>
+-Struct for transport position information. <hr><h2>Field Documentation</h2>
+-<a class="anchor" name="2fe4e3ede6d03c170abce08f867f9bc7"></a><!-- doxytag: member="jack_position_t::unique_1" ref="2fe4e3ede6d03c170abce08f867f9bc7" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a> <a class="el" href="structjack__position__t.html#2fe4e3ede6d03c170abce08f867f9bc7">jack_position_t::unique_1</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-unique ID
+-</div>
+-</div><p>
+-<a class="anchor" name="08e43943a7153ecff15b0f8ba6517e95"></a><!-- doxytag: member="jack_position_t::usecs" ref="08e43943a7153ecff15b0f8ba6517e95" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> <a class="el" href="structjack__position__t.html#08e43943a7153ecff15b0f8ba6517e95">jack_position_t::usecs</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-monotonic, free-rolling
+-</div>
+-</div><p>
+-<a class="anchor" name="de3f7758360f5ec5432abaead67b553a"></a><!-- doxytag: member="jack_position_t::frame_rate" ref="de3f7758360f5ec5432abaead67b553a" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> <a class="el" href="structjack__position__t.html#de3f7758360f5ec5432abaead67b553a">jack_position_t::frame_rate</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current frame rate (per second)
+-</div>
+-</div><p>
+-<a class="anchor" name="b1d0fe08334f47b1aa8bb36ba722228f"></a><!-- doxytag: member="jack_position_t::frame" ref="b1d0fe08334f47b1aa8bb36ba722228f" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> <a class="el" href="structjack__position__t.html#b1d0fe08334f47b1aa8bb36ba722228f">jack_position_t::frame</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-frame number, always present
+-</div>
+-</div><p>
+-<a class="anchor" name="838c733e8006d1a0cc6921b4a132a8e4"></a><!-- doxytag: member="jack_position_t::valid" ref="838c733e8006d1a0cc6921b4a132a8e4" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="transport_8h.html#64608154318de05af9e763bfb5fb8529">jack_position_bits_t</a> <a class="el" href="structjack__position__t.html#838c733e8006d1a0cc6921b4a132a8e4">jack_position_t::valid</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-which other fields are valid
+-</div>
+-</div><p>
+-<a class="anchor" name="4f42cef08eb48a97a1b746698697d0de"></a><!-- doxytag: member="jack_position_t::bar" ref="4f42cef08eb48a97a1b746698697d0de" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int32_t <a class="el" href="structjack__position__t.html#4f42cef08eb48a97a1b746698697d0de">jack_position_t::bar</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current bar
+-</div>
+-</div><p>
+-<a class="anchor" name="fb3f220fd87757095057abc152289110"></a><!-- doxytag: member="jack_position_t::beat" ref="fb3f220fd87757095057abc152289110" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int32_t <a class="el" href="structjack__position__t.html#fb3f220fd87757095057abc152289110">jack_position_t::beat</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current beat-within-bar
+-</div>
+-</div><p>
+-<a class="anchor" name="9ba36f6c4eaede3bb1c9b7a85b5f76d1"></a><!-- doxytag: member="jack_position_t::tick" ref="9ba36f6c4eaede3bb1c9b7a85b5f76d1" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int32_t <a class="el" href="structjack__position__t.html#9ba36f6c4eaede3bb1c9b7a85b5f76d1">jack_position_t::tick</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current tick-within-beat
+-</div>
+-</div><p>
+-<a class="anchor" name="67ff65ba02ba4146b1e46ce6d51ec644"></a><!-- doxytag: member="jack_position_t::bar_start_tick" ref="67ff65ba02ba4146b1e46ce6d51ec644" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="structjack__position__t.html#67ff65ba02ba4146b1e46ce6d51ec644">jack_position_t::bar_start_tick</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="dc52988414544ba1b86429dad68c6260"></a><!-- doxytag: member="jack_position_t::beats_per_bar" ref="dc52988414544ba1b86429dad68c6260" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">float <a class="el" href="structjack__position__t.html#dc52988414544ba1b86429dad68c6260">jack_position_t::beats_per_bar</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-time signature "numerator"
+-</div>
+-</div><p>
+-<a class="anchor" name="15383588a3fb97333204bc564cf1c06c"></a><!-- doxytag: member="jack_position_t::beat_type" ref="15383588a3fb97333204bc564cf1c06c" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">float <a class="el" href="structjack__position__t.html#15383588a3fb97333204bc564cf1c06c">jack_position_t::beat_type</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-time signature "denominator"
+-</div>
+-</div><p>
+-<a class="anchor" name="08ca4c388c6460dcef82f03346ccbf52"></a><!-- doxytag: member="jack_position_t::ticks_per_beat" ref="08ca4c388c6460dcef82f03346ccbf52" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="structjack__position__t.html#08ca4c388c6460dcef82f03346ccbf52">jack_position_t::ticks_per_beat</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="657486be93ebcb20e3a1b45a91f30d33"></a><!-- doxytag: member="jack_position_t::beats_per_minute" ref="657486be93ebcb20e3a1b45a91f30d33" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="structjack__position__t.html#657486be93ebcb20e3a1b45a91f30d33">jack_position_t::beats_per_minute</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="bd97b0d447281eebffa750c2b90e791d"></a><!-- doxytag: member="jack_position_t::frame_time" ref="bd97b0d447281eebffa750c2b90e791d" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="structjack__position__t.html#bd97b0d447281eebffa750c2b90e791d">jack_position_t::frame_time</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-current time in seconds
+-</div>
+-</div><p>
+-<a class="anchor" name="83e65f9658fa4d93658cbad47d446b0b"></a><!-- doxytag: member="jack_position_t::next_time" ref="83e65f9658fa4d93658cbad47d446b0b" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">double <a class="el" href="structjack__position__t.html#83e65f9658fa4d93658cbad47d446b0b">jack_position_t::next_time</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-next sequential frame_time (unless repositioned)
+-</div>
+-</div><p>
+-<a class="anchor" name="e4bb9383734d2e7ca7758011102c03b2"></a><!-- doxytag: member="jack_position_t::bbt_offset" ref="e4bb9383734d2e7ca7758011102c03b2" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> <a class="el" href="structjack__position__t.html#e4bb9383734d2e7ca7758011102c03b2">jack_position_t::bbt_offset</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-frame offset for the BBT fields (the given bar, beat, and tick values actually refer to a time frame_offset frames before the start of the cycle), should be assumed to be 0 if JackBBTFrameOffset is not set. If JackBBTFrameOffset is set and this value is zero, the BBT time refers to the first frame of this cycle. If the value is positive, the BBT time refers to a frame that many frames before the start of the cycle.
+-</div>
+-</div><p>
+-<a class="anchor" name="f28a3e9ee8b36a92309de372093f56f3"></a><!-- doxytag: member="jack_position_t::audio_frames_per_video_frame" ref="f28a3e9ee8b36a92309de372093f56f3" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">float <a class="el" href="structjack__position__t.html#f28a3e9ee8b36a92309de372093f56f3">jack_position_t::audio_frames_per_video_frame</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-number of audio frames per video frame. Should be assumed zero if JackAudioVideoRatio is not set. If JackAudioVideoRatio is set and the value is zero, no video data exists within the JACK graph
+-</div>
+-</div><p>
+-<a class="anchor" name="c03889456c88714ddf680784ee970d3b"></a><!-- doxytag: member="jack_position_t::video_offset" ref="c03889456c88714ddf680784ee970d3b" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> <a class="el" href="structjack__position__t.html#c03889456c88714ddf680784ee970d3b">jack_position_t::video_offset</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-audio frame at which the first video frame in this cycle occurs. Should be assumed to be 0 if JackVideoFrameOffset is not set. If JackVideoFrameOffset is set, but the value is zero, there is no video frame within this cycle.
+-</div>
+-</div><p>
+-<a class="anchor" name="c3a837fabff41e637a7f6fb50dbe6f22"></a><!-- doxytag: member="jack_position_t::padding" ref="c3a837fabff41e637a7f6fb50dbe6f22" args="[7]" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname">int32_t <a class="el" href="structjack__position__t.html#c3a837fabff41e637a7f6fb50dbe6f22">jack_position_t::padding</a>[7] </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-
+-</div>
+-</div><p>
+-<a class="anchor" name="9c3d31034160d5d2b9205eae9983e385"></a><!-- doxytag: member="jack_position_t::unique_2" ref="9c3d31034160d5d2b9205eae9983e385" args="" -->
+-<div class="memitem">
+-<div class="memproto">
+- <table class="memname">
+- <tr>
+- <td class="memname"><a class="el" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a> <a class="el" href="structjack__position__t.html#9c3d31034160d5d2b9205eae9983e385">jack_position_t::unique_2</a> </td>
+- </tr>
+- </table>
+-</div>
+-<div class="memdoc">
+-
+-<p>
+-unique ID
+-</div>
+-</div><p>
+-<hr>The documentation for this struct was generated from the following file:<ul>
+-<li><a class="el" href="transport_8h-source.html">transport.h</a></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Thu Sep 25 19:55:41 2008 for JACK-AUDIO-CONNECTION-KIT by
+-<a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+-</body>
+-</html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/structjack__ringbuffer__data__t.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structjack__ringbuffer__data__t.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/structjack__ringbuffer__data__t.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structjack__ringbuffer__data__t.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>jack_ringbuffer_data_t Struct Reference</h1><!-- doxytag: class="jack_ringbuffer_data_t" --><code>#include <<a class="el" href="ringbuffer_8h-source.html">ringbuffer.h</a>></code>
+ <p>
+ <table border="0" cellpadding="0" cellspacing="0">
+@@ -49,9 +48,8 @@
+ </div><p>
+ <hr>The documentation for this struct was generated from the following file:<ul>
+ <li><a class="el" href="ringbuffer_8h-source.html">ringbuffer.h</a></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/structjack__ringbuffer__t.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structjack__ringbuffer__t.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/structjack__ringbuffer__t.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structjack__ringbuffer__t.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>jack_ringbuffer_t Struct Reference</h1><!-- doxytag: class="jack_ringbuffer_t" --><code>#include <<a class="el" href="ringbuffer_8h-source.html">ringbuffer.h</a>></code>
+ <p>
+ <table border="0" cellpadding="0" cellspacing="0">
+@@ -117,9 +116,8 @@
+ </div><p>
+ <hr>The documentation for this struct was generated from the following file:<ul>
+ <li><a class="el" href="ringbuffer_8h-source.html">ringbuffer.h</a></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/structjack__transport__info__t.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structjack__transport__info__t.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/structjack__transport__info__t.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structjack__transport__info__t.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>jack_transport_info_t Struct Reference</h1><!-- doxytag: class="jack_transport_info_t" --><code>#include <<a class="el" href="transport_8h-source.html">transport.h</a>></code>
+ <p>
+ <table border="0" cellpadding="0" cellspacing="0">
+@@ -307,9 +306,8 @@
+ </div><p>
+ <hr>The documentation for this struct was generated from the following file:<ul>
+ <li><a class="el" href="transport_8h-source.html">transport.h</a></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/structport__pair__t.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structport__pair__t.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/structport__pair__t.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structport__pair__t.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>port_pair_t Struct Reference</h1><!-- doxytag: class="port_pair_t" --><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ <tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+@@ -29,8 +28,6 @@
+
+ <p>
+
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00036">inprocess()</a>, and <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="3dc6231b538a867d1f310383cf9e60e2"></a><!-- doxytag: member="port_pair_t::output_port" ref="3dc6231b538a867d1f310383cf9e60e2" args="" -->
+@@ -46,15 +43,12 @@
+
+ <p>
+
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00036">inprocess()</a>, and <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>.</p>
+-
+ </div>
+ </div><p>
+ <hr>The documentation for this struct was generated from the following file:<ul>
+ <li><a class="el" href="inprocess_8c.html">inprocess.c</a></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/structPOST__PACKED__STRUCTURE.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structPOST__PACKED__STRUCTURE.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/structPOST__PACKED__STRUCTURE.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/structPOST__PACKED__STRUCTURE.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>POST_PACKED_STRUCTURE Struct Reference</h1><!-- doxytag: class="POST_PACKED_STRUCTURE" --><code>#include <<a class="el" href="transport_8h-source.html">transport.h</a>></code>
+ <p>
+ <table border="0" cellpadding="0" cellspacing="0">
+@@ -356,9 +355,8 @@
+ </div><p>
+ <hr>The documentation for this struct was generated from the following file:<ul>
+ <li><a class="el" href="transport_8h-source.html">transport.h</a></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/tabs.css jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/tabs.css
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/tabs.css 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/tabs.css 2008-12-07 19:23:05.000000000 +0100
+@@ -94,7 +94,7 @@
+ padding-bottom : 6px;
+ }
+
+-DIV.navpath
++DIV.nav
+ {
+ background : none;
+ border : none;
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/thread_8h.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/thread_8h.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/thread_8h.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/thread_8h.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>thread.h File Reference</h1><code>#include <pthread.h></code><br>
+
+ <p>
+@@ -43,9 +42,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/thread_8h-source.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/thread_8h-source.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/thread_8h-source.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/thread_8h-source.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,7 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>thread.h</h1><a href="thread_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+ <a name="l00002"></a>00002 <span class="comment"> Copyright (C) 2004 Paul Davis</span>
+ <a name="l00003"></a>00003 <span class="comment"></span>
+@@ -59,9 +59,8 @@
+ <a name="l00109"></a>00109 <span class="preprocessor">#endif</span>
+ <a name="l00110"></a>00110 <span class="preprocessor"></span>
+ <a name="l00111"></a>00111 <span class="preprocessor">#endif </span><span class="comment">/* __jack_thread_h__ */</span>
+-</pre></div></div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/transport_8dox.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/transport_8dox.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/transport_8dox.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/transport_8dox.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,14 +4,12 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>transport.dox File Reference</h1><table border="0" cellpadding="0" cellspacing="0">
+ <tr><td></td></tr>
+ </table>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/transport_8h.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/transport_8h.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/transport_8h.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/transport_8h.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>transport.h File Reference</h1><code>#include <<a class="el" href="types_8h-source.html">jack/types.h</a>></code><br>
+
+ <p>
+@@ -236,7 +235,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -274,7 +273,7 @@
+ <tr>
+ <td></td>
+ <td>)</td>
+- <td></td><td></td><td></td>
++ <td></td><td></td><td width="100%"></td>
+ </tr>
+ </table>
+ </div>
+@@ -286,9 +285,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/transport_8h-source.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/transport_8h-source.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/transport_8h-source.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/transport_8h-source.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,7 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>transport.h</h1><a href="transport_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+ <a name="l00002"></a>00002 <span class="comment"> Copyright (C) 2002 Paul Davis</span>
+ <a name="l00003"></a>00003 <span class="comment"> Copyright (C) 2003 Jack O'Quin</span>
+@@ -50,68 +50,68 @@
+ <a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+ <a name="l00044"></a>00044 <span class="preprocessor"></span>
+ <a name="l00045"></a>00045
+-<a name="l00049"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">00049</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
++<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+ <a name="l00050"></a>00050
+-<a name="l00051"></a>00051 <span class="comment">/* the order matters for binary compatibility */</span>
+-<a name="l00052"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd7230087dc754e67549d91e78a4242393f0">00052</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd7230087dc754e67549d91e78a4242393f0">JackTransportStopped</a> = 0,
+-<a name="l00053"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd724077d7d6fe566f3f0441755a588ad1b2">00053</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd724077d7d6fe566f3f0441755a588ad1b2">JackTransportRolling</a> = 1,
+-<a name="l00054"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd720aa16c4e52ecbe843d4b48d2f95f5a74">00054</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd720aa16c4e52ecbe843d4b48d2f95f5a74">JackTransportLooping</a> = 2,
+-<a name="l00055"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd728c1e22fce8ef6c18baf7a5c6a69060ac">00055</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd728c1e22fce8ef6c18baf7a5c6a69060ac">JackTransportStarting</a> = 3
++<a name="l00051"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd7230087dc754e67549d91e78a4242393f0">00051</a> <span class="comment">/* the order matters for binary compatibility */</span>
++<a name="l00052"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd724077d7d6fe566f3f0441755a588ad1b2">00052</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd7230087dc754e67549d91e78a4242393f0">JackTransportStopped</a> = 0,
++<a name="l00053"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd720aa16c4e52ecbe843d4b48d2f95f5a74">00053</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd724077d7d6fe566f3f0441755a588ad1b2">JackTransportRolling</a> = 1,
++<a name="l00054"></a><a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd728c1e22fce8ef6c18baf7a5c6a69060ac">00054</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd720aa16c4e52ecbe843d4b48d2f95f5a74">JackTransportLooping</a> = 2,
++<a name="l00055"></a>00055 <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd728c1e22fce8ef6c18baf7a5c6a69060ac">JackTransportStarting</a> = 3
+ <a name="l00057"></a>00057 } <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">jack_transport_state_t</a>;
+-<a name="l00058"></a>00058
+-<a name="l00059"></a><a class="code" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">00059</a> <span class="keyword">typedef</span> uint64_t <a class="code" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a>;
+-<a name="l00064"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529">00064</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+-<a name="l00065"></a>00065
+-<a name="l00066"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb852967a05cdeb270265e98330f1d232cdd8c">00066</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb852967a05cdeb270265e98330f1d232cdd8c">JackPositionBBT</a> = 0x10,
+-<a name="l00067"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529295a1fce9de7364dccbbe832da1b00c0">00067</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529295a1fce9de7364dccbbe832da1b00c0">JackPositionTimecode</a> = 0x20,
+-<a name="l00068"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb85293bcc4689386f97d0eebd07c7bfc1ddb3">00068</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb85293bcc4689386f97d0eebd07c7bfc1ddb3">JackBBTFrameOffset</a> = 0x40,
+-<a name="l00069"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb852934939b3185f52faedb1e9bfd914fa49b">00069</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb852934939b3185f52faedb1e9bfd914fa49b">JackAudioVideoRatio</a> = 0x80,
+-<a name="l00070"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529a583c63f0723dd2226eb47cabfefde82">00070</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529a583c63f0723dd2226eb47cabfefde82">JackVideoFrameOffset</a> = 0x100
++<a name="l00058"></a><a class="code" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">00058</a>
++<a name="l00059"></a>00059 <span class="keyword">typedef</span> uint64_t <a class="code" href="transport_8h.html#f01026c6ef9eb9ef003ed23b6d8ada5f">jack_unique_t</a>;
++<a name="l00064"></a>00064 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
++<a name="l00065"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb852967a05cdeb270265e98330f1d232cdd8c">00065</a>
++<a name="l00066"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529295a1fce9de7364dccbbe832da1b00c0">00066</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb852967a05cdeb270265e98330f1d232cdd8c">JackPositionBBT</a> = 0x10,
++<a name="l00067"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb85293bcc4689386f97d0eebd07c7bfc1ddb3">00067</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529295a1fce9de7364dccbbe832da1b00c0">JackPositionTimecode</a> = 0x20,
++<a name="l00068"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb852934939b3185f52faedb1e9bfd914fa49b">00068</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb85293bcc4689386f97d0eebd07c7bfc1ddb3">JackBBTFrameOffset</a> = 0x40,
++<a name="l00069"></a><a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529a583c63f0723dd2226eb47cabfefde82">00069</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb852934939b3185f52faedb1e9bfd914fa49b">JackAudioVideoRatio</a> = 0x80,
++<a name="l00070"></a>00070 <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529a583c63f0723dd2226eb47cabfefde82">JackVideoFrameOffset</a> = 0x100
+ <a name="l00071"></a>00071 } <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529">jack_position_bits_t</a>;
+ <a name="l00072"></a>00072
+-<a name="l00074"></a><a class="code" href="transport_8h.html#4ec2f03448e8b633e08cbf17fe6de6f9">00074</a> <span class="preprocessor">#define JACK_POSITION_MASK (JackPositionBBT|JackPositionTimecode|JackBBTFrameOffset|JackAudioVideoRatio|JackVideoFrameOffset)</span>
+-<a name="l00075"></a><a class="code" href="transport_8h.html#b54aee2c5b5197c588cdda2349434a21">00075</a> <span class="preprocessor"></span><span class="preprocessor">#define EXTENDED_TIME_INFO</span>
++<a name="l00074"></a><a class="code" href="transport_8h.html#b54aee2c5b5197c588cdda2349434a21">00074</a> <span class="preprocessor">#define JACK_POSITION_MASK (JackPositionBBT|JackPositionTimecode|JackBBTFrameOffset|JackAudioVideoRatio|JackVideoFrameOffset)</span>
++<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define EXTENDED_TIME_INFO</span>
+ <a name="l00076"></a>00076 <span class="preprocessor"></span>
+-<a name="l00080"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html">00080</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
++<a name="l00080"></a>00080 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+ <a name="l00081"></a>00081
+-<a name="l00082"></a>00082 <span class="comment">/* these four cannot be set from clients: the server sets them */</span>
+-<a name="l00083"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#97eeb64495a42647b9241b1246672964">00083</a> jack_unique_t unique_1;
+-<a name="l00084"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#ef7057404f191126e15acd5ac27cf589">00084</a> <a class="code" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> usecs;
+-<a name="l00085"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#fdd0fd7566e9cc6cae2d5757c28f5312">00085</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> frame_rate;
+-<a name="l00086"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#c30a2abfa874c7c0001243dbbfb3b556">00086</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> frame;
+-<a name="l00088"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#df71142c78e0dad473d14868789adbb0">00088</a> <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529">jack_position_bits_t</a> valid;
+-<a name="l00090"></a>00090 <span class="comment">/* JackPositionBBT fields: */</span>
+-<a name="l00091"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#120b5d56aa4784ecd35b1f6d44a5d99d">00091</a> int32_t bar;
+-<a name="l00092"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#6a807e02c0af3bda1c028ea79cdfdfc1">00092</a> int32_t beat;
+-<a name="l00093"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#8ba634b02d95d449b55ccbb9b59fe871">00093</a> int32_t tick;
+-<a name="l00094"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#595f34fd1a1870cd5f078e101d42742b">00094</a> <span class="keywordtype">double</span> bar_start_tick;
+-<a name="l00095"></a>00095
+-<a name="l00096"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#197ba21f1ea14185ec653b85b178b135">00096</a> <span class="keywordtype">float</span> beats_per_bar;
+-<a name="l00097"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#3116fa14f58f46c619152b9a1871faea">00097</a> <span class="keywordtype">float</span> beat_type;
+-<a name="l00098"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#41a57b741cd051ffe6ec9a32a1980cb7">00098</a> <span class="keywordtype">double</span> ticks_per_beat;
+-<a name="l00099"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#6e27495baa61f29a2c2a7a2aa1f7f051">00099</a> <span class="keywordtype">double</span> beats_per_minute;
++<a name="l00082"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#97eeb64495a42647b9241b1246672964">00082</a> <span class="comment">/* these four cannot be set from clients: the server sets them */</span>
++<a name="l00083"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#ef7057404f191126e15acd5ac27cf589">00083</a> jack_unique_t unique_1;
++<a name="l00084"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#fdd0fd7566e9cc6cae2d5757c28f5312">00084</a> <a class="code" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> usecs;
++<a name="l00085"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#c30a2abfa874c7c0001243dbbfb3b556">00085</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> frame_rate;
++<a name="l00086"></a>00086 <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> frame;
++<a name="l00088"></a>00088 <a class="code" href="transport_8h.html#64608154318de05af9e763bfb5fb8529">jack_position_bits_t</a> valid;
++<a name="l00090"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#120b5d56aa4784ecd35b1f6d44a5d99d">00090</a> <span class="comment">/* JackPositionBBT fields: */</span>
++<a name="l00091"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#6a807e02c0af3bda1c028ea79cdfdfc1">00091</a> int32_t bar;
++<a name="l00092"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#8ba634b02d95d449b55ccbb9b59fe871">00092</a> int32_t beat;
++<a name="l00093"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#595f34fd1a1870cd5f078e101d42742b">00093</a> int32_t tick;
++<a name="l00094"></a>00094 <span class="keywordtype">double</span> bar_start_tick;
++<a name="l00095"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#197ba21f1ea14185ec653b85b178b135">00095</a>
++<a name="l00096"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#3116fa14f58f46c619152b9a1871faea">00096</a> <span class="keywordtype">float</span> beats_per_bar;
++<a name="l00097"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#41a57b741cd051ffe6ec9a32a1980cb7">00097</a> <span class="keywordtype">float</span> beat_type;
++<a name="l00098"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#6e27495baa61f29a2c2a7a2aa1f7f051">00098</a> <span class="keywordtype">double</span> ticks_per_beat;
++<a name="l00099"></a>00099 <span class="keywordtype">double</span> beats_per_minute;
+ <a name="l00100"></a>00100
+-<a name="l00101"></a>00101 <span class="comment">/* JackPositionTimecode fields: (EXPERIMENTAL: could change) */</span>
+-<a name="l00102"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#449b807043e6c4ab6659217c231ff3c5">00102</a> <span class="keywordtype">double</span> frame_time;
+-<a name="l00103"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#d36d718a05cfe62d7013990f4fff579e">00103</a> <span class="keywordtype">double</span> next_time;
+-<a name="l00106"></a>00106 <span class="comment">/* JackBBTFrameOffset fields: */</span>
+-<a name="l00107"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#ed4e0cf7e61b583fefedc5d13e5d8989">00107</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> bbt_offset;
++<a name="l00101"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#449b807043e6c4ab6659217c231ff3c5">00101</a> <span class="comment">/* JackPositionTimecode fields: (EXPERIMENTAL: could change) */</span>
++<a name="l00102"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#d36d718a05cfe62d7013990f4fff579e">00102</a> <span class="keywordtype">double</span> frame_time;
++<a name="l00103"></a>00103 <span class="keywordtype">double</span> next_time;
++<a name="l00106"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#ed4e0cf7e61b583fefedc5d13e5d8989">00106</a> <span class="comment">/* JackBBTFrameOffset fields: */</span>
++<a name="l00107"></a>00107 <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> bbt_offset;
+ <a name="l00122"></a>00122 <span class="comment">/* JACK video positional data (experimental) */</span>
+-<a name="l00123"></a>00123
+-<a name="l00124"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#88c1712ef477cd4ce710485cb571e671">00124</a> <span class="keywordtype">float</span> audio_frames_per_video_frame;
+-<a name="l00131"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#4ed1c10f80d4fb270bee6c14758852fd">00131</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> video_offset;
++<a name="l00123"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#88c1712ef477cd4ce710485cb571e671">00123</a>
++<a name="l00124"></a>00124 <span class="keywordtype">float</span> audio_frames_per_video_frame;
++<a name="l00131"></a>00131 <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> video_offset;
+ <a name="l00138"></a>00138 <span class="comment">/* For binary compatibility, new fields should be allocated from</span>
+ <a name="l00139"></a>00139 <span class="comment"> * this padding area with new valid bits controlling access, so</span>
+-<a name="l00140"></a>00140 <span class="comment"> * the existing structure size and offsets are preserved. */</span>
+-<a name="l00141"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#2610086eed044ac155125273549db2ef">00141</a> int32_t padding[7];
++<a name="l00140"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#2610086eed044ac155125273549db2ef">00140</a> <span class="comment"> * the existing structure size and offsets are preserved. */</span>
++<a name="l00141"></a>00141 int32_t padding[7];
+ <a name="l00142"></a>00142
+-<a name="l00143"></a>00143 <span class="comment">/* When (unique_1 == unique_2) the contents are consistent. */</span>
+-<a name="l00144"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#b8b1911c5a9585aaf6decd6f74d530b0">00144</a> jack_unique_t unique_2;
++<a name="l00143"></a><a class="code" href="structPOST__PACKED__STRUCTURE.html#b8b1911c5a9585aaf6decd6f74d530b0">00143</a> <span class="comment">/* When (unique_1 == unique_2) the contents are consistent. */</span>
++<a name="l00144"></a>00144 jack_unique_t unique_2;
+ <a name="l00146"></a>00146 } <a class="code" href="structPOST__PACKED__STRUCTURE.html">POST_PACKED_STRUCTURE</a> jack_position_t;
+ <a name="l00147"></a>00147
+ <a name="l00169"></a>00169 <span class="keywordtype">int</span> <a class="code" href="group__TransportControl.html#ge9bb139e62d7498adc500f301f3af3da">jack_release_timebase</a> (<a class="code" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="code" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>);
+ <a name="l00170"></a>00170
+-<a name="l00192"></a><a class="code" href="group__TransportControl.html#gb6c4ce3efb68e584d589cf8765363411">00192</a> <span class="keyword">typedef</span> int (*<a class="code" href="group__TransportControl.html#gb6c4ce3efb68e584d589cf8765363411">JackSyncCallback</a>)(<a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">jack_transport_state_t</a> state,
++<a name="l00192"></a>00192 <span class="keyword">typedef</span> int (*<a class="code" href="group__TransportControl.html#gb6c4ce3efb68e584d589cf8765363411">JackSyncCallback</a>)(<a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">jack_transport_state_t</a> state,
+ <a name="l00193"></a>00193 jack_position_t *pos,
+ <a name="l00194"></a>00194 <span class="keywordtype">void</span> *arg);
+ <a name="l00195"></a>00195
+@@ -122,7 +122,7 @@
+ <a name="l00237"></a>00237 <span class="keywordtype">int</span> <a class="code" href="group__TransportControl.html#g0a890a0d635b99905cc33fbde5efa0fa">jack_set_sync_timeout</a> (<a class="code" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="code" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>,
+ <a name="l00238"></a>00238 <a class="code" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> timeout);
+ <a name="l00239"></a>00239
+-<a name="l00269"></a><a class="code" href="group__TransportControl.html#g5861cf9b84a0a3c3f6ff0f193ca3ec2c">00269</a> <span class="keyword">typedef</span> void (*<a class="code" href="group__TransportControl.html#g5861cf9b84a0a3c3f6ff0f193ca3ec2c">JackTimebaseCallback</a>)(<a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">jack_transport_state_t</a> state,
++<a name="l00269"></a>00269 <span class="keyword">typedef</span> void (*<a class="code" href="group__TransportControl.html#g5861cf9b84a0a3c3f6ff0f193ca3ec2c">JackTimebaseCallback</a>)(<a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">jack_transport_state_t</a> state,
+ <a name="l00270"></a>00270 <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> nframes,
+ <a name="l00271"></a>00271 jack_position_t *pos,
+ <a name="l00272"></a>00272 <span class="keywordtype">int</span> new_pos,
+@@ -153,38 +153,38 @@
+ <a name="l00397"></a>00397 <span class="comment"> * for compatibility with the earlier JACK transport implementation.</span>
+ <a name="l00398"></a>00398 <span class="comment"> *********************************************************************/</span>
+ <a name="l00399"></a>00399
+-<a name="l00405"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef">00405</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+-<a name="l00406"></a>00406
+-<a name="l00407"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef6da5504263d81baf27d53ce2e40e2e9d">00407</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef6da5504263d81baf27d53ce2e40e2e9d">JackTransportState</a> = 0x1,
+-<a name="l00408"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef16f3fb237dea88a0ff61515efc2e6ec8">00408</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef16f3fb237dea88a0ff61515efc2e6ec8">JackTransportPosition</a> = 0x2,
+-<a name="l00409"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef1757aa4327bc7be2cea3f7d07a570896">00409</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef1757aa4327bc7be2cea3f7d07a570896">JackTransportLoop</a> = 0x4,
+-<a name="l00410"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef19f7f95e8c369e9a2bd91f1e7b75d8ec">00410</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef19f7f95e8c369e9a2bd91f1e7b75d8ec">JackTransportSMPTE</a> = 0x8,
+-<a name="l00411"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eefc018587585c9420479978cd49154d02e">00411</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eefc018587585c9420479978cd49154d02e">JackTransportBBT</a> = 0x10
++<a name="l00405"></a>00405 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
++<a name="l00406"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef6da5504263d81baf27d53ce2e40e2e9d">00406</a>
++<a name="l00407"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef16f3fb237dea88a0ff61515efc2e6ec8">00407</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef6da5504263d81baf27d53ce2e40e2e9d">JackTransportState</a> = 0x1,
++<a name="l00408"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef1757aa4327bc7be2cea3f7d07a570896">00408</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef16f3fb237dea88a0ff61515efc2e6ec8">JackTransportPosition</a> = 0x2,
++<a name="l00409"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef19f7f95e8c369e9a2bd91f1e7b75d8ec">00409</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef1757aa4327bc7be2cea3f7d07a570896">JackTransportLoop</a> = 0x4,
++<a name="l00410"></a><a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eefc018587585c9420479978cd49154d02e">00410</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef19f7f95e8c369e9a2bd91f1e7b75d8ec">JackTransportSMPTE</a> = 0x8,
++<a name="l00411"></a>00411 <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eefc018587585c9420479978cd49154d02e">JackTransportBBT</a> = 0x10
+ <a name="l00413"></a>00413 } <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef">jack_transport_bits_t</a>;
+ <a name="l00414"></a>00414
+-<a name="l00421"></a><a class="code" href="structjack__transport__info__t.html">00421</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
++<a name="l00421"></a>00421 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+ <a name="l00422"></a>00422
+ <a name="l00423"></a>00423 <span class="comment">/* these two cannot be set from clients: the server sets them */</span>
+-<a name="l00424"></a>00424
+-<a name="l00425"></a><a class="code" href="structjack__transport__info__t.html#b9dcc731355c88c22554ccd18fdcacc0">00425</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> frame_rate;
+-<a name="l00426"></a><a class="code" href="structjack__transport__info__t.html#fa8d37eda78c4ce47469157674aaa7e3">00426</a> <a class="code" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> usecs;
+-<a name="l00428"></a><a class="code" href="structjack__transport__info__t.html#69fc58b6d2004fd243186255acc7292e">00428</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef">jack_transport_bits_t</a> valid;
+-<a name="l00429"></a><a class="code" href="structjack__transport__info__t.html#748678d245f92f396833cefaca67630c">00429</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">jack_transport_state_t</a> transport_state;
+-<a name="l00430"></a><a class="code" href="structjack__transport__info__t.html#7d823f347b9788095d6473dd4ffdf589">00430</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> frame;
+-<a name="l00431"></a><a class="code" href="structjack__transport__info__t.html#1ae73aca12a5e0404bf02f0aed497f02">00431</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> loop_start;
+-<a name="l00432"></a><a class="code" href="structjack__transport__info__t.html#9effad51f43ef06580217c2c92b3f78d">00432</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> loop_end;
+-<a name="l00433"></a>00433
+-<a name="l00434"></a><a class="code" href="structjack__transport__info__t.html#d04a7477cc221e0dec25b0e207352a2e">00434</a> <span class="keywordtype">long</span> smpte_offset;
+-<a name="l00435"></a><a class="code" href="structjack__transport__info__t.html#62b6bea05fdb499ca5945a5a32a64350">00435</a> <span class="keywordtype">float</span> smpte_frame_rate;
+-<a name="l00437"></a><a class="code" href="structjack__transport__info__t.html#f2a616f6b626180ca1755ace9b47f25f">00437</a> <span class="keywordtype">int</span> bar;
+-<a name="l00438"></a><a class="code" href="structjack__transport__info__t.html#3aa1e26090cfefa28315dc3ea2570b84">00438</a> <span class="keywordtype">int</span> beat;
+-<a name="l00439"></a><a class="code" href="structjack__transport__info__t.html#45efc4128e2405f4f54c8b2340c064cd">00439</a> <span class="keywordtype">int</span> tick;
+-<a name="l00440"></a><a class="code" href="structjack__transport__info__t.html#95bc4a23ed5feaf1f21b5655913c3695">00440</a> <span class="keywordtype">double</span> bar_start_tick;
+-<a name="l00441"></a>00441
+-<a name="l00442"></a><a class="code" href="structjack__transport__info__t.html#7129c362cf296e381ffd992bb70c5659">00442</a> <span class="keywordtype">float</span> beats_per_bar;
+-<a name="l00443"></a><a class="code" href="structjack__transport__info__t.html#3a568f42b2597a1a8fe5c5681b832c2e">00443</a> <span class="keywordtype">float</span> beat_type;
+-<a name="l00444"></a><a class="code" href="structjack__transport__info__t.html#4d98a25dc59cf9c7beb203f32b911a51">00444</a> <span class="keywordtype">double</span> ticks_per_beat;
+-<a name="l00445"></a><a class="code" href="structjack__transport__info__t.html#4505cb67b61179da4a9dd03b7137144e">00445</a> <span class="keywordtype">double</span> beats_per_minute;
++<a name="l00424"></a><a class="code" href="structjack__transport__info__t.html#b9dcc731355c88c22554ccd18fdcacc0">00424</a>
++<a name="l00425"></a><a class="code" href="structjack__transport__info__t.html#fa8d37eda78c4ce47469157674aaa7e3">00425</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> frame_rate;
++<a name="l00426"></a>00426 <a class="code" href="types_8h.html#f9a29b8728e95cc38e2932c0ef855b7e">jack_time_t</a> usecs;
++<a name="l00428"></a><a class="code" href="structjack__transport__info__t.html#748678d245f92f396833cefaca67630c">00428</a> <a class="code" href="transport_8h.html#230191365921fd425c389ed5eab18eef">jack_transport_bits_t</a> valid;
++<a name="l00429"></a><a class="code" href="structjack__transport__info__t.html#7d823f347b9788095d6473dd4ffdf589">00429</a> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">jack_transport_state_t</a> transport_state;
++<a name="l00430"></a><a class="code" href="structjack__transport__info__t.html#1ae73aca12a5e0404bf02f0aed497f02">00430</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> frame;
++<a name="l00431"></a><a class="code" href="structjack__transport__info__t.html#9effad51f43ef06580217c2c92b3f78d">00431</a> <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> loop_start;
++<a name="l00432"></a>00432 <a class="code" href="types_8h.html#a954df532e901ae5172e68a23f3da9b6">jack_nframes_t</a> loop_end;
++<a name="l00433"></a><a class="code" href="structjack__transport__info__t.html#d04a7477cc221e0dec25b0e207352a2e">00433</a>
++<a name="l00434"></a><a class="code" href="structjack__transport__info__t.html#62b6bea05fdb499ca5945a5a32a64350">00434</a> <span class="keywordtype">long</span> smpte_offset;
++<a name="l00435"></a>00435 <span class="keywordtype">float</span> smpte_frame_rate;
++<a name="l00437"></a><a class="code" href="structjack__transport__info__t.html#3aa1e26090cfefa28315dc3ea2570b84">00437</a> <span class="keywordtype">int</span> bar;
++<a name="l00438"></a><a class="code" href="structjack__transport__info__t.html#45efc4128e2405f4f54c8b2340c064cd">00438</a> <span class="keywordtype">int</span> beat;
++<a name="l00439"></a><a class="code" href="structjack__transport__info__t.html#95bc4a23ed5feaf1f21b5655913c3695">00439</a> <span class="keywordtype">int</span> tick;
++<a name="l00440"></a>00440 <span class="keywordtype">double</span> bar_start_tick;
++<a name="l00441"></a><a class="code" href="structjack__transport__info__t.html#7129c362cf296e381ffd992bb70c5659">00441</a>
++<a name="l00442"></a><a class="code" href="structjack__transport__info__t.html#3a568f42b2597a1a8fe5c5681b832c2e">00442</a> <span class="keywordtype">float</span> beats_per_bar;
++<a name="l00443"></a><a class="code" href="structjack__transport__info__t.html#4d98a25dc59cf9c7beb203f32b911a51">00443</a> <span class="keywordtype">float</span> beat_type;
++<a name="l00444"></a><a class="code" href="structjack__transport__info__t.html#4505cb67b61179da4a9dd03b7137144e">00444</a> <span class="keywordtype">double</span> ticks_per_beat;
++<a name="l00445"></a>00445 <span class="keywordtype">double</span> beats_per_minute;
+ <a name="l00446"></a>00446
+ <a name="l00447"></a>00447 } <a class="code" href="structjack__transport__info__t.html">jack_transport_info_t</a>;
+ <a name="l00448"></a>00448
+@@ -199,9 +199,8 @@
+ <a name="l00476"></a>00476 <span class="preprocessor">#endif</span>
+ <a name="l00477"></a>00477 <span class="preprocessor"></span>
+ <a name="l00478"></a>00478 <span class="preprocessor">#endif </span><span class="comment">/* __jack_transport_h__ */</span>
+-</pre></div></div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/transport-design.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/transport-design.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/transport-design.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/transport-design.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1><a class="anchor" name="transport-design">JACK Transport Design </a></h1>The <a class="el" href="index.html#index">JACK Audio Connection Kit</a> provides simple transport interfaces for starting, stopping and repositioning a set of clients. This document describes the overall design of these interfaces, their detailed specifications are in <<a class="el" href="transport_8h.html">jack/transport.h</a>><p>
+ <ul>
+ <li><a class="el" href="transport-design.html#requirements">Requirements</a></li><li><a class="el" href="transport-design.html#overview">Overview</a></li><li><a class="el" href="transport-design.html#timebase">Timebase Master</a></li><li><a class="el" href="transport-design.html#transportcontrol">Transport Control</a></li><li><a class="el" href="transport-design.html#transportclients">Transport Clients</a></li><li><a class="el" href="transport-design.html#compatibility">Compatibility</a></li><li><a class="el" href="transport-design.html#issues">Issues Not Addressed</a></li></ul>
+@@ -77,7 +76,7 @@
+ <div align="center">
+ <img src="fsm.png" alt="fsm.png">
+ <p><strong>Transport State Transition Diagram</strong></p></div>
+- <h2><a class="anchor" name="transportclients">
++<h2><a class="anchor" name="transportclients">
+ Transport Clients</a></h2>
+ Transport clients were formerly known as "transport slaves". We want to make it easy for almost every JACK client to be a transport client.<p>
+ <div class="fragment"><pre class="fragment"> <a class="code" href="transport_8h.html#66e50952a88eb087867922bfe3d0bd72">jack_transport_state_t</a> <a class="code" href="group__TransportControl.html#g74dc7b03f39736ed1b22968743a0c657">jack_transport_query</a> (<a class="code" href="types_8h.html#96cf103940d2ee71b141d4b9d0c116bf">jack_client_t</a> *<a class="code" href="simple__client_8c.html#fed7053cd7bdd1cce33dec7213f340ea">client</a>,
+@@ -106,9 +105,8 @@
+ This design currently does not address several issues. This means they will probably not be included in JACK release 1.0.<p>
+ <ul>
+ <li>variable speed</li><li>reverse play</li><li>looping </li></ul>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:43 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:55 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/types_8h.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/types_8h.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/types_8h.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/types_8h.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,8 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
+-<div class="contents">
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>types.h File Reference</h1><code>#include <inttypes.h></code><br>
+
+ <p>
+@@ -121,8 +120,6 @@
+
+ <p>
+ Used for the type argument of <a class="el" href="group__PortFunctions.html#gb6fd42ee3b80fe9259400343f0fa6c2d">jack_port_register()</a> for default audio and midi ports.
+-<p>Referenced by <a class="el" href="inprocess_8c-source.html#l00060">jack_initialize()</a>, and <a class="el" href="simple__client_8c-source.html#l00051">main()</a>.</p>
+-
+ </div>
+ </div><p>
+ <a class="anchor" name="270e0f81331caf216976ef15fa0be816"></a><!-- doxytag: member="types.h::JACK_DEFAULT_MIDI_TYPE" ref="270e0f81331caf216976ef15fa0be816" args="" -->
+@@ -703,9 +700,8 @@
+
+ </div>
+ </div><p>
+-</div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++<hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:53 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/doc/reference/html/types_8h-source.html jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/types_8h-source.html
+--- jack-audio-connection-kit-0.116.1/doc/reference/html/types_8h-source.html 2008-12-06 11:48:58.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/doc/reference/html/types_8h-source.html 2008-12-07 19:23:05.000000000 +0100
+@@ -4,7 +4,7 @@
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ <link href="tabs.css" rel="stylesheet" type="text/css">
+ </head><body>
+-<!-- Generated by Doxygen 1.5.6 -->
++<!-- Generated by Doxygen 1.5.4 -->
+ <h1>types.h</h1><a href="types_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+ <a name="l00002"></a>00002 <span class="comment"> Copyright (C) 2001 Paul Davis</span>
+ <a name="l00003"></a>00003 <span class="comment"> Copyright (C) 2004 Jack O'Quin</span>
+@@ -138,9 +138,8 @@
+ <a name="l00398"></a><a class="code" href="types_8h.html#49053418570427a7a99d1bb45fb43f38">00398</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="types_8h.html#af80297bce18297403b99e3d320ac8a8">JackStatus</a> <a class="code" href="types_8h.html#49053418570427a7a99d1bb45fb43f38">jack_status_t</a>;
+ <a name="l00399"></a>00399
+ <a name="l00400"></a>00400 <span class="preprocessor">#endif </span><span class="comment">/* __jack_types_h__ */</span>
+-</pre></div></div>
+-<hr size="1"><address style="text-align: right;"><small>Generated on Fri Dec 5 17:19:40 2008 for JACK-AUDIO-CONNECTION-KIT by
++</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sun Dec 7 20:13:52 2008 for JACK-AUDIO-CONNECTION-KIT by
+ <a href="http://www.doxygen.org/index.html">
+-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
++<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address>
+ </body>
+ </html>
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/alsa/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/alsa/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/alsa/Makefile.in 2008-12-05 21:48:42.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/alsa/Makefile.in 2008-12-07 19:02:54.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -65,7 +65,7 @@
+ jack_alsa_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(jack_alsa_la_CFLAGS) \
+ $(CFLAGS) $(jack_alsa_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -105,6 +105,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -146,6 +149,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -287,8 +292,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -296,8 +301,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -422,8 +427,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -435,8 +440,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -446,12 +451,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/alsa-midi/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/alsa-midi/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/alsa-midi/Makefile.in 2008-12-05 21:48:42.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/alsa-midi/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -245,8 +250,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -258,8 +263,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -269,12 +274,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/coreaudio/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/coreaudio/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/coreaudio/Makefile.in 2008-12-05 21:48:42.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/coreaudio/Makefile.in 2008-12-07 19:02:54.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -60,7 +60,7 @@
+ jack_coreaudio_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jack_coreaudio_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -100,6 +100,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -141,6 +144,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -270,8 +275,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -279,8 +284,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -334,8 +339,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -347,8 +352,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -358,12 +363,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/dummy/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/dummy/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/dummy/Makefile.in 2008-12-05 21:48:42.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/dummy/Makefile.in 2008-12-07 19:02:54.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -60,7 +60,7 @@
+ jack_dummy_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jack_dummy_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -100,6 +100,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -141,6 +144,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -270,8 +275,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -279,8 +284,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -334,8 +339,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -347,8 +352,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -358,12 +363,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/firewire/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/firewire/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/firewire/Makefile.in 2008-12-05 21:48:43.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/firewire/Makefile.in 2008-12-07 19:02:54.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -66,7 +66,7 @@
+ jack_firewire_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jack_firewire_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -106,6 +106,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -147,6 +150,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -277,8 +282,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -286,8 +291,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -341,8 +346,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -354,8 +359,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -365,12 +370,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/freebob/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/freebob/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/freebob/Makefile.in 2008-12-05 21:48:43.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/freebob/Makefile.in 2008-12-07 19:02:54.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -68,7 +68,7 @@
+ jack_freebob_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(jack_freebob_la_CFLAGS) \
+ $(CFLAGS) $(jack_freebob_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -108,6 +108,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -149,6 +152,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -280,8 +285,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -289,8 +294,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -367,8 +372,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -380,8 +385,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -391,12 +396,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/Makefile.in 2008-12-05 21:48:42.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/Makefile.in 2008-12-07 19:02:53.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -78,6 +78,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -119,6 +122,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -335,8 +340,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -361,8 +366,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -372,12 +377,13 @@
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/netjack/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/netjack/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/netjack/Makefile.in 2008-12-05 21:48:43.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/netjack/Makefile.in 2008-12-07 19:02:54.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -63,7 +63,7 @@
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jack_net_la_LDFLAGS) $(LDFLAGS) -o $@
+ @HAVE_SAMPLERATE_TRUE@am_jack_net_la_rpath = -rpath $(plugindir)
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -104,6 +104,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -145,6 +148,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -275,8 +280,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -284,8 +289,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -340,8 +345,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -353,8 +358,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -364,12 +369,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/oss/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/oss/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/oss/Makefile.in 2008-12-05 21:48:43.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/oss/Makefile.in 2008-12-07 19:02:54.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -60,7 +60,7 @@
+ jack_oss_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jack_oss_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -100,6 +100,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -141,6 +144,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -270,8 +275,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -279,8 +284,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -334,8 +339,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -347,8 +352,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -358,12 +363,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/portaudio/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/portaudio/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/portaudio/Makefile.in 2008-12-05 21:48:44.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/portaudio/Makefile.in 2008-12-07 19:02:55.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -61,7 +61,7 @@
+ jack_portaudio_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jack_portaudio_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -101,6 +101,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -142,6 +145,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -272,8 +277,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -281,8 +286,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -336,8 +341,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -349,8 +354,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -360,12 +365,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/drivers/sun/Makefile.in jack-audio-connection-kit-0.116.1_dbus/drivers/sun/Makefile.in
+--- jack-audio-connection-kit-0.116.1/drivers/sun/Makefile.in 2008-12-05 21:48:44.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/drivers/sun/Makefile.in 2008-12-07 19:02:55.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -60,7 +60,7 @@
+ jack_sun_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jack_sun_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -100,6 +100,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -141,6 +144,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -270,8 +275,8 @@
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(plugindir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(plugindir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -279,8 +284,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$p"; \
+ done
+
+ clean-pluginLTLIBRARIES:
+@@ -334,8 +339,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -347,8 +352,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -358,12 +363,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/example-clients/Makefile.in jack-audio-connection-kit-0.116.1_dbus/example-clients/Makefile.in
+--- jack-audio-connection-kit-0.116.1/example-clients/Makefile.in 2008-12-05 21:48:44.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/example-clients/Makefile.in 2008-12-07 19:02:55.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -115,7 +115,7 @@
+ jack_transport_client_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jack_transport_client_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -162,6 +162,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -203,6 +206,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -362,8 +367,8 @@
+ @list='$(ip_client_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(ip_clientLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ip_clientdir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(ip_clientLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ip_clientdir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(ip_clientLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ip_clientdir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(ip_clientLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ip_clientdir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -371,8 +376,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(ip_client_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(ip_clientdir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(ip_clientdir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ip_clientdir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ip_clientdir)/$$p"; \
+ done
+
+ clean-ip_clientLTLIBRARIES:
+@@ -396,8 +401,8 @@
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
++ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
++ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+@@ -485,8 +490,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -498,8 +503,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -509,12 +514,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/jack/engine.h jack-audio-connection-kit-0.116.1_dbus/jack/engine.h
+--- jack-audio-connection-kit-0.116.1/jack/engine.h 2008-12-02 17:06:37.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jack/engine.h 2008-12-07 19:01:15.000000000 +0100
+@@ -157,6 +157,10 @@
+ int audio_in_cnt;
+ int midi_out_cnt;
+ int midi_in_cnt;
++
++ void (* jackctl_port_registration_notify)(void * jackctl_context, jack_port_id_t port_id, int yn);
++ void (* jackctl_connection_notify)(void * jackctl_context, jack_port_id_t port1_id, jack_port_id_t port2_id, int connected);
++ void * jackctl_context;
+ };
+
+ /* public functions */
+diff -Naur jack-audio-connection-kit-0.116.1/jack/list.h jack-audio-connection-kit-0.116.1_dbus/jack/list.h
+--- jack-audio-connection-kit-0.116.1/jack/list.h 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jack/list.h 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,874 @@
++/* -*- Mode: C ; c-basic-offset: 2 -*- */
++/*****************************************************************************
++ *
++ * Linux kernel header adapted for user-mode
++ * The 2.6.17-rt1 version was used.
++ *
++ * Original copyright holders of this code are unknown, they were not
++ * mentioned in the original file.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; version 2 of the License
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ *****************************************************************************/
++
++#ifndef _LINUX_LIST_H
++#define _LINUX_LIST_H
++
++#include <stddef.h>
++
++#if !defined(offsetof)
++#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
++#endif
++
++/**
++ * container_of - cast a member of a structure out to the containing structure
++ * @ptr: the pointer to the member.
++ * @type: the type of the container struct this is embedded in.
++ * @member: the name of the member within the struct.
++ *
++ */
++#define container_of(ptr, type, member) ({ \
++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
++ (type *)( (char *)__mptr - offsetof(type,member) );})
++
++#define prefetch(x) (x = x)
++
++/*
++ * These are non-NULL pointers that will result in page faults
++ * under normal circumstances, used to verify that nobody uses
++ * non-initialized list entries.
++ */
++#define LIST_POISON1 ((void *) 0x00100100)
++#define LIST_POISON2 ((void *) 0x00200200)
++
++/*
++ * Simple doubly linked list implementation.
++ *
++ * Some of the internal functions ("__xxx") are useful when
++ * manipulating whole lists rather than single entries, as
++ * sometimes we already know the next/prev entries and we can
++ * generate better code by using them directly rather than
++ * using the generic single-entry routines.
++ */
++
++struct list_head {
++ struct list_head *next, *prev;
++};
++
++#define LIST_HEAD_INIT(name) { &(name), &(name) }
++
++#define LIST_HEAD(name) \
++ struct list_head name = LIST_HEAD_INIT(name)
++
++static inline void INIT_LIST_HEAD(struct list_head *list)
++{
++ list->next = list;
++ list->prev = list;
++}
++
++/*
++ * Insert a new entry between two known consecutive entries.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static inline void __list_add(struct list_head *new,
++ struct list_head *prev,
++ struct list_head *next)
++{
++ next->prev = new;
++ new->next = next;
++ new->prev = prev;
++ prev->next = new;
++}
++
++/**
++ * list_add - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it after
++ *
++ * Insert a new entry after the specified head.
++ * This is good for implementing stacks.
++ */
++static inline void list_add(struct list_head *new, struct list_head *head)
++{
++ __list_add(new, head, head->next);
++}
++
++/**
++ * list_add_tail - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it before
++ *
++ * Insert a new entry before the specified head.
++ * This is useful for implementing queues.
++ */
++static inline void list_add_tail(struct list_head *new, struct list_head *head)
++{
++ __list_add(new, head->prev, head);
++}
++
++/*
++ * Insert a new entry between two known consecutive entries.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static inline void __list_add_rcu(struct list_head * new,
++ struct list_head * prev, struct list_head * next)
++{
++ new->next = next;
++ new->prev = prev;
++// smp_wmb();
++ next->prev = new;
++ prev->next = new;
++}
++
++/**
++ * list_add_rcu - add a new entry to rcu-protected list
++ * @new: new entry to be added
++ * @head: list head to add it after
++ *
++ * Insert a new entry after the specified head.
++ * This is good for implementing stacks.
++ *
++ * The caller must take whatever precautions are necessary
++ * (such as holding appropriate locks) to avoid racing
++ * with another list-mutation primitive, such as list_add_rcu()
++ * or list_del_rcu(), running on this same list.
++ * However, it is perfectly legal to run concurrently with
++ * the _rcu list-traversal primitives, such as
++ * list_for_each_entry_rcu().
++ */
++static inline void list_add_rcu(struct list_head *new, struct list_head *head)
++{
++ __list_add_rcu(new, head, head->next);
++}
++
++/**
++ * list_add_tail_rcu - add a new entry to rcu-protected list
++ * @new: new entry to be added
++ * @head: list head to add it before
++ *
++ * Insert a new entry before the specified head.
++ * This is useful for implementing queues.
++ *
++ * The caller must take whatever precautions are necessary
++ * (such as holding appropriate locks) to avoid racing
++ * with another list-mutation primitive, such as list_add_tail_rcu()
++ * or list_del_rcu(), running on this same list.
++ * However, it is perfectly legal to run concurrently with
++ * the _rcu list-traversal primitives, such as
++ * list_for_each_entry_rcu().
++ */
++static inline void list_add_tail_rcu(struct list_head *new,
++ struct list_head *head)
++{
++ __list_add_rcu(new, head->prev, head);
++}
++
++/*
++ * Delete a list entry by making the prev/next entries
++ * point to each other.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static inline void __list_del(struct list_head * prev, struct list_head * next)
++{
++ next->prev = prev;
++ prev->next = next;
++}
++
++/**
++ * list_del - deletes entry from list.
++ * @entry: the element to delete from the list.
++ * Note: list_empty on entry does not return true after this, the entry is
++ * in an undefined state.
++ */
++static inline void list_del(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ entry->next = LIST_POISON1;
++ entry->prev = LIST_POISON2;
++}
++
++/**
++ * list_del_rcu - deletes entry from list without re-initialization
++ * @entry: the element to delete from the list.
++ *
++ * Note: list_empty on entry does not return true after this,
++ * the entry is in an undefined state. It is useful for RCU based
++ * lockfree traversal.
++ *
++ * In particular, it means that we can not poison the forward
++ * pointers that may still be used for walking the list.
++ *
++ * The caller must take whatever precautions are necessary
++ * (such as holding appropriate locks) to avoid racing
++ * with another list-mutation primitive, such as list_del_rcu()
++ * or list_add_rcu(), running on this same list.
++ * However, it is perfectly legal to run concurrently with
++ * the _rcu list-traversal primitives, such as
++ * list_for_each_entry_rcu().
++ *
++ * Note that the caller is not permitted to immediately free
++ * the newly deleted entry. Instead, either synchronize_rcu()
++ * or call_rcu() must be used to defer freeing until an RCU
++ * grace period has elapsed.
++ */
++static inline void list_del_rcu(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ entry->prev = LIST_POISON2;
++}
++
++/*
++ * list_replace_rcu - replace old entry by new one
++ * @old : the element to be replaced
++ * @new : the new element to insert
++ *
++ * The old entry will be replaced with the new entry atomically.
++ */
++static inline void list_replace_rcu(struct list_head *old,
++ struct list_head *new)
++{
++ new->next = old->next;
++ new->prev = old->prev;
++// smp_wmb();
++ new->next->prev = new;
++ new->prev->next = new;
++ old->prev = LIST_POISON2;
++}
++
++/**
++ * list_del_init - deletes entry from list and reinitialize it.
++ * @entry: the element to delete from the list.
++ */
++static inline void list_del_init(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ INIT_LIST_HEAD(entry);
++}
++
++/**
++ * list_move - delete from one list and add as another's head
++ * @list: the entry to move
++ * @head: the head that will precede our entry
++ */
++static inline void list_move(struct list_head *list, struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add(list, head);
++}
++
++/**
++ * list_move_tail - delete from one list and add as another's tail
++ * @list: the entry to move
++ * @head: the head that will follow our entry
++ */
++static inline void list_move_tail(struct list_head *list,
++ struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add_tail(list, head);
++}
++
++/**
++ * list_empty - tests whether a list is empty
++ * @head: the list to test.
++ */
++static inline int list_empty(const struct list_head *head)
++{
++ return head->next == head;
++}
++
++/**
++ * list_empty_careful - tests whether a list is
++ * empty _and_ checks that no other CPU might be
++ * in the process of still modifying either member
++ *
++ * NOTE: using list_empty_careful() without synchronization
++ * can only be safe if the only activity that can happen
++ * to the list entry is list_del_init(). Eg. it cannot be used
++ * if another CPU could re-list_add() it.
++ *
++ * @head: the list to test.
++ */
++static inline int list_empty_careful(const struct list_head *head)
++{
++ struct list_head *next = head->next;
++ return (next == head) && (next == head->prev);
++}
++
++static inline void __list_splice(struct list_head *list,
++ struct list_head *head)
++{
++ struct list_head *first = list->next;
++ struct list_head *last = list->prev;
++ struct list_head *at = head->next;
++
++ first->prev = head;
++ head->next = first;
++
++ last->next = at;
++ at->prev = last;
++}
++
++/**
++ * list_splice - join two lists
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ */
++static inline void list_splice(struct list_head *list, struct list_head *head)
++{
++ if (!list_empty(list))
++ __list_splice(list, head);
++}
++
++/**
++ * list_splice_init - join two lists and reinitialise the emptied list.
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ *
++ * The list at @list is reinitialised
++ */
++static inline void list_splice_init(struct list_head *list,
++ struct list_head *head)
++{
++ if (!list_empty(list)) {
++ __list_splice(list, head);
++ INIT_LIST_HEAD(list);
++ }
++}
++
++/**
++ * list_entry - get the struct for this entry
++ * @ptr: the &struct list_head pointer.
++ * @type: the type of the struct this is embedded in.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_entry(ptr, type, member) \
++ container_of(ptr, type, member)
++
++/**
++ * list_for_each - iterate over a list
++ * @pos: the &struct list_head to use as a loop counter.
++ * @head: the head for your list.
++ */
++#define list_for_each(pos, head) \
++ for (pos = (head)->next; prefetch(pos->next), pos != (head); \
++ pos = pos->next)
++
++/**
++ * __list_for_each - iterate over a list
++ * @pos: the &struct list_head to use as a loop counter.
++ * @head: the head for your list.
++ *
++ * This variant differs from list_for_each() in that it's the
++ * simplest possible list iteration code, no prefetching is done.
++ * Use this for code that knows the list to be very short (empty
++ * or 1 entry) most of the time.
++ */
++#define __list_for_each(pos, head) \
++ for (pos = (head)->next; pos != (head); pos = pos->next)
++
++/**
++ * list_for_each_prev - iterate over a list backwards
++ * @pos: the &struct list_head to use as a loop counter.
++ * @head: the head for your list.
++ */
++#define list_for_each_prev(pos, head) \
++ for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
++ pos = pos->prev)
++
++/**
++ * list_for_each_safe - iterate over a list safe against removal of list entry
++ * @pos: the &struct list_head to use as a loop counter.
++ * @n: another &struct list_head to use as temporary storage
++ * @head: the head for your list.
++ */
++#define list_for_each_safe(pos, n, head) \
++ for (pos = (head)->next, n = pos->next; pos != (head); \
++ pos = n, n = pos->next)
++
++/**
++ * list_for_each_entry - iterate over list of given type
++ * @pos: the type * to use as a loop counter.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry(pos, head, member) \
++ for (pos = list_entry((head)->next, typeof(*pos), member); \
++ prefetch(pos->member.next), &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_reverse - iterate backwards over list of given type.
++ * @pos: the type * to use as a loop counter.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_reverse(pos, head, member) \
++ for (pos = list_entry((head)->prev, typeof(*pos), member); \
++ prefetch(pos->member.prev), &pos->member != (head); \
++ pos = list_entry(pos->member.prev, typeof(*pos), member))
++
++/**
++ * list_prepare_entry - prepare a pos entry for use as a start point in
++ * list_for_each_entry_continue
++ * @pos: the type * to use as a start point
++ * @head: the head of the list
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_prepare_entry(pos, head, member) \
++ ((pos) ? : list_entry(head, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_continue - iterate over list of given type
++ * continuing after existing point
++ * @pos: the type * to use as a loop counter.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_continue(pos, head, member) \
++ for (pos = list_entry(pos->member.next, typeof(*pos), member); \
++ prefetch(pos->member.next), &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_from - iterate over list of given type
++ * continuing from existing point
++ * @pos: the type * to use as a loop counter.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_from(pos, head, member) \
++ for (; prefetch(pos->member.next), &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
++ * @pos: the type * to use as a loop counter.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_safe(pos, n, head, member) \
++ for (pos = list_entry((head)->next, typeof(*pos), member), \
++ n = list_entry(pos->member.next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.next, typeof(*n), member))
++
++/**
++ * list_for_each_entry_safe_continue - iterate over list of given type
++ * continuing after existing point safe against removal of list entry
++ * @pos: the type * to use as a loop counter.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_safe_continue(pos, n, head, member) \
++ for (pos = list_entry(pos->member.next, typeof(*pos), member), \
++ n = list_entry(pos->member.next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.next, typeof(*n), member))
++
++/**
++ * list_for_each_entry_safe_from - iterate over list of given type
++ * from existing point safe against removal of list entry
++ * @pos: the type * to use as a loop counter.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_safe_from(pos, n, head, member) \
++ for (n = list_entry(pos->member.next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.next, typeof(*n), member))
++
++/**
++ * list_for_each_entry_safe_reverse - iterate backwards over list of given type safe against
++ * removal of list entry
++ * @pos: the type * to use as a loop counter.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_safe_reverse(pos, n, head, member) \
++ for (pos = list_entry((head)->prev, typeof(*pos), member), \
++ n = list_entry(pos->member.prev, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.prev, typeof(*n), member))
++
++/**
++ * list_for_each_rcu - iterate over an rcu-protected list
++ * @pos: the &struct list_head to use as a loop counter.
++ * @head: the head for your list.
++ *
++ * This list-traversal primitive may safely run concurrently with
++ * the _rcu list-mutation primitives such as list_add_rcu()
++ * as long as the traversal is guarded by rcu_read_lock().
++ */
++#define list_for_each_rcu(pos, head) \
++ for (pos = (head)->next; \
++ prefetch(rcu_dereference(pos)->next), pos != (head); \
++ pos = pos->next)
++
++#define __list_for_each_rcu(pos, head) \
++ for (pos = (head)->next; \
++ rcu_dereference(pos) != (head); \
++ pos = pos->next)
++
++/**
++ * list_for_each_safe_rcu - iterate over an rcu-protected list safe
++ * against removal of list entry
++ * @pos: the &struct list_head to use as a loop counter.
++ * @n: another &struct list_head to use as temporary storage
++ * @head: the head for your list.
++ *
++ * This list-traversal primitive may safely run concurrently with
++ * the _rcu list-mutation primitives such as list_add_rcu()
++ * as long as the traversal is guarded by rcu_read_lock().
++ */
++#define list_for_each_safe_rcu(pos, n, head) \
++ for (pos = (head)->next; \
++ n = rcu_dereference(pos)->next, pos != (head); \
++ pos = n)
++
++/**
++ * list_for_each_entry_rcu - iterate over rcu list of given type
++ * @pos: the type * to use as a loop counter.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ *
++ * This list-traversal primitive may safely run concurrently with
++ * the _rcu list-mutation primitives such as list_add_rcu()
++ * as long as the traversal is guarded by rcu_read_lock().
++ */
++#define list_for_each_entry_rcu(pos, head, member) \
++ for (pos = list_entry((head)->next, typeof(*pos), member); \
++ prefetch(rcu_dereference(pos)->member.next), \
++ &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++
++/**
++ * list_for_each_continue_rcu - iterate over an rcu-protected list
++ * continuing after existing point.
++ * @pos: the &struct list_head to use as a loop counter.
++ * @head: the head for your list.
++ *
++ * This list-traversal primitive may safely run concurrently with
++ * the _rcu list-mutation primitives such as list_add_rcu()
++ * as long as the traversal is guarded by rcu_read_lock().
++ */
++#define list_for_each_continue_rcu(pos, head) \
++ for ((pos) = (pos)->next; \
++ prefetch(rcu_dereference((pos))->next), (pos) != (head); \
++ (pos) = (pos)->next)
++
++/*
++ * Double linked lists with a single pointer list head.
++ * Mostly useful for hash tables where the two pointer list head is
++ * too wasteful.
++ * You lose the ability to access the tail in O(1).
++ */
++
++struct hlist_head {
++ struct hlist_node *first;
++};
++
++struct hlist_node {
++ struct hlist_node *next, **pprev;
++};
++
++#define HLIST_HEAD_INIT { .first = NULL }
++#define HLIST_HEAD(name) struct hlist_head name = { .first = NULL }
++#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
++static inline void INIT_HLIST_NODE(struct hlist_node *h)
++{
++ h->next = NULL;
++ h->pprev = NULL;
++}
++
++static inline int hlist_unhashed(const struct hlist_node *h)
++{
++ return !h->pprev;
++}
++
++static inline int hlist_empty(const struct hlist_head *h)
++{
++ return !h->first;
++}
++
++static inline void __hlist_del(struct hlist_node *n)
++{
++ struct hlist_node *next = n->next;
++ struct hlist_node **pprev = n->pprev;
++ *pprev = next;
++ if (next)
++ next->pprev = pprev;
++}
++
++static inline void hlist_del(struct hlist_node *n)
++{
++ __hlist_del(n);
++ n->next = LIST_POISON1;
++ n->pprev = LIST_POISON2;
++}
++
++/**
++ * hlist_del_rcu - deletes entry from hash list without re-initialization
++ * @n: the element to delete from the hash list.
++ *
++ * Note: list_unhashed() on entry does not return true after this,
++ * the entry is in an undefined state. It is useful for RCU based
++ * lockfree traversal.
++ *
++ * In particular, it means that we can not poison the forward
++ * pointers that may still be used for walking the hash list.
++ *
++ * The caller must take whatever precautions are necessary
++ * (such as holding appropriate locks) to avoid racing
++ * with another list-mutation primitive, such as hlist_add_head_rcu()
++ * or hlist_del_rcu(), running on this same list.
++ * However, it is perfectly legal to run concurrently with
++ * the _rcu list-traversal primitives, such as
++ * hlist_for_each_entry().
++ */
++static inline void hlist_del_rcu(struct hlist_node *n)
++{
++ __hlist_del(n);
++ n->pprev = LIST_POISON2;
++}
++
++static inline void hlist_del_init(struct hlist_node *n)
++{
++ if (!hlist_unhashed(n)) {
++ __hlist_del(n);
++ INIT_HLIST_NODE(n);
++ }
++}
++
++/*
++ * hlist_replace_rcu - replace old entry by new one
++ * @old : the element to be replaced
++ * @new : the new element to insert
++ *
++ * The old entry will be replaced with the new entry atomically.
++ */
++static inline void hlist_replace_rcu(struct hlist_node *old,
++ struct hlist_node *new)
++{
++ struct hlist_node *next = old->next;
++
++ new->next = next;
++ new->pprev = old->pprev;
++// smp_wmb();
++ if (next)
++ new->next->pprev = &new->next;
++ *new->pprev = new;
++ old->pprev = LIST_POISON2;
++}
++
++static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
++{
++ struct hlist_node *first = h->first;
++ n->next = first;
++ if (first)
++ first->pprev = &n->next;
++ h->first = n;
++ n->pprev = &h->first;
++}
++
++
++/**
++ * hlist_add_head_rcu - adds the specified element to the specified hlist,
++ * while permitting racing traversals.
++ * @n: the element to add to the hash list.
++ * @h: the list to add to.
++ *
++ * The caller must take whatever precautions are necessary
++ * (such as holding appropriate locks) to avoid racing
++ * with another list-mutation primitive, such as hlist_add_head_rcu()
++ * or hlist_del_rcu(), running on this same list.
++ * However, it is perfectly legal to run concurrently with
++ * the _rcu list-traversal primitives, such as
++ * hlist_for_each_entry_rcu(), used to prevent memory-consistency
++ * problems on Alpha CPUs. Regardless of the type of CPU, the
++ * list-traversal primitive must be guarded by rcu_read_lock().
++ */
++static inline void hlist_add_head_rcu(struct hlist_node *n,
++ struct hlist_head *h)
++{
++ struct hlist_node *first = h->first;
++ n->next = first;
++ n->pprev = &h->first;
++// smp_wmb();
++ if (first)
++ first->pprev = &n->next;
++ h->first = n;
++}
++
++/* next must be != NULL */
++static inline void hlist_add_before(struct hlist_node *n,
++ struct hlist_node *next)
++{
++ n->pprev = next->pprev;
++ n->next = next;
++ next->pprev = &n->next;
++ *(n->pprev) = n;
++}
++
++static inline void hlist_add_after(struct hlist_node *n,
++ struct hlist_node *next)
++{
++ next->next = n->next;
++ n->next = next;
++ next->pprev = &n->next;
++
++ if(next->next)
++ next->next->pprev = &next->next;
++}
++
++/**
++ * hlist_add_before_rcu - adds the specified element to the specified hlist
++ * before the specified node while permitting racing traversals.
++ * @n: the new element to add to the hash list.
++ * @next: the existing element to add the new element before.
++ *
++ * The caller must take whatever precautions are necessary
++ * (such as holding appropriate locks) to avoid racing
++ * with another list-mutation primitive, such as hlist_add_head_rcu()
++ * or hlist_del_rcu(), running on this same list.
++ * However, it is perfectly legal to run concurrently with
++ * the _rcu list-traversal primitives, such as
++ * hlist_for_each_entry_rcu(), used to prevent memory-consistency
++ * problems on Alpha CPUs.
++ */
++static inline void hlist_add_before_rcu(struct hlist_node *n,
++ struct hlist_node *next)
++{
++ n->pprev = next->pprev;
++ n->next = next;
++// smp_wmb();
++ next->pprev = &n->next;
++ *(n->pprev) = n;
++}
++
++/**
++ * hlist_add_after_rcu - adds the specified element to the specified hlist
++ * after the specified node while permitting racing traversals.
++ * @prev: the existing element to add the new element after.
++ * @n: the new element to add to the hash list.
++ *
++ * The caller must take whatever precautions are necessary
++ * (such as holding appropriate locks) to avoid racing
++ * with another list-mutation primitive, such as hlist_add_head_rcu()
++ * or hlist_del_rcu(), running on this same list.
++ * However, it is perfectly legal to run concurrently with
++ * the _rcu list-traversal primitives, such as
++ * hlist_for_each_entry_rcu(), used to prevent memory-consistency
++ * problems on Alpha CPUs.
++ */
++static inline void hlist_add_after_rcu(struct hlist_node *prev,
++ struct hlist_node *n)
++{
++ n->next = prev->next;
++ n->pprev = &prev->next;
++// smp_wmb();
++ prev->next = n;
++ if (n->next)
++ n->next->pprev = &n->next;
++}
++
++#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
++
++#define hlist_for_each(pos, head) \
++ for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
++ pos = pos->next)
++
++#define hlist_for_each_safe(pos, n, head) \
++ for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
++ pos = n)
++
++/**
++ * hlist_for_each_entry - iterate over list of given type
++ * @tpos: the type * to use as a loop counter.
++ * @pos: the &struct hlist_node to use as a loop counter.
++ * @head: the head for your list.
++ * @member: the name of the hlist_node within the struct.
++ */
++#define hlist_for_each_entry(tpos, pos, head, member) \
++ for (pos = (head)->first; \
++ pos && ({ prefetch(pos->next); 1;}) && \
++ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
++ pos = pos->next)
++
++/**
++ * hlist_for_each_entry_continue - iterate over a hlist continuing after existing point
++ * @tpos: the type * to use as a loop counter.
++ * @pos: the &struct hlist_node to use as a loop counter.
++ * @member: the name of the hlist_node within the struct.
++ */
++#define hlist_for_each_entry_continue(tpos, pos, member) \
++ for (pos = (pos)->next; \
++ pos && ({ prefetch(pos->next); 1;}) && \
++ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
++ pos = pos->next)
++
++/**
++ * hlist_for_each_entry_from - iterate over a hlist continuing from existing point
++ * @tpos: the type * to use as a loop counter.
++ * @pos: the &struct hlist_node to use as a loop counter.
++ * @member: the name of the hlist_node within the struct.
++ */
++#define hlist_for_each_entry_from(tpos, pos, member) \
++ for (; pos && ({ prefetch(pos->next); 1;}) && \
++ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
++ pos = pos->next)
++
++/**
++ * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
++ * @tpos: the type * to use as a loop counter.
++ * @pos: the &struct hlist_node to use as a loop counter.
++ * @n: another &struct hlist_node to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the hlist_node within the struct.
++ */
++#define hlist_for_each_entry_safe(tpos, pos, n, head, member) \
++ for (pos = (head)->first; \
++ pos && ({ n = pos->next; 1; }) && \
++ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
++ pos = n)
++
++/**
++ * hlist_for_each_entry_rcu - iterate over rcu list of given type
++ * @tpos: the type * to use as a loop counter.
++ * @pos: the &struct hlist_node to use as a loop counter.
++ * @head: the head for your list.
++ * @member: the name of the hlist_node within the struct.
++ *
++ * This list-traversal primitive may safely run concurrently with
++ * the _rcu list-mutation primitives such as hlist_add_head_rcu()
++ * as long as the traversal is guarded by rcu_read_lock().
++ */
++#define hlist_for_each_entry_rcu(tpos, pos, head, member) \
++ for (pos = (head)->first; \
++ rcu_dereference(pos) && ({ prefetch(pos->next); 1;}) && \
++ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
++ pos = pos->next)
++
++#endif
+diff -Naur jack-audio-connection-kit-0.116.1/jack/Makefile.am jack-audio-connection-kit-0.116.1_dbus/jack/Makefile.am
+--- jack-audio-connection-kit-0.116.1/jack/Makefile.am 2007-04-12 21:08:33.000000000 +0200
++++ jack-audio-connection-kit-0.116.1_dbus/jack/Makefile.am 2008-12-07 19:01:15.000000000 +0100
+@@ -24,6 +24,7 @@
+ internal.h \
+ intsimd.h \
+ jslist.h \
++ list.h \
+ memops.h \
+ messagebuffer.h \
+ pool.h \
+diff -Naur jack-audio-connection-kit-0.116.1/jack/Makefile.in jack-audio-connection-kit-0.116.1_dbus/jack/Makefile.in
+--- jack-audio-connection-kit-0.116.1/jack/Makefile.in 2008-12-05 21:48:44.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jack/Makefile.in 2008-12-07 19:02:55.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -81,6 +81,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -122,6 +125,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -229,6 +234,7 @@
+ internal.h \
+ intsimd.h \
+ jslist.h \
++ list.h \
+ memops.h \
+ messagebuffer.h \
+ pool.h \
+@@ -303,8 +309,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -316,8 +322,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -327,12 +333,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/engine.c jack-audio-connection-kit-0.116.1_dbus/jackd/engine.c
+--- jack-audio-connection-kit-0.116.1/jackd/engine.c 2008-12-02 17:29:23.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/engine.c 2008-12-07 19:01:15.000000000 +0100
+@@ -87,10 +87,10 @@
+ const char *name);
+ static int jack_rechain_graph (jack_engine_t *engine);
+ static void jack_clear_fifos (jack_engine_t *engine);
+-static int jack_port_do_connect (jack_engine_t *engine,
++int jack_port_do_connect (jack_engine_t *engine,
+ const char *source_port,
+ const char *destination_port);
+-static int jack_port_do_disconnect (jack_engine_t *engine,
++int jack_port_do_disconnect (jack_engine_t *engine,
+ const char *source_port,
+ const char *destination_port);
+ static int jack_port_do_disconnect_all (jack_engine_t *engine,
+@@ -1731,6 +1731,10 @@
+ engine->midi_out_cnt = 0;
+ engine->midi_in_cnt = 0;
+
++ engine->jackctl_port_registration_notify = NULL;
++ engine->jackctl_connection_notify = NULL;
++ engine->jackctl_context = NULL;
++
+ jack_engine_reset_rolling_usecs (engine);
+ engine->max_usecs = 0.0f;
+
+@@ -2441,6 +2445,11 @@
+ jack_deliver_event (engine, client, &event);
+ }
+ }
++
++ if (engine->jackctl_connection_notify != NULL)
++ {
++ engine->jackctl_connection_notify(engine->jackctl_context, a, b, connected);
++ }
+ }
+
+ static int
+@@ -3193,7 +3202,7 @@
+ jack_info("engine.c: <-- dump ends -->");
+ }
+
+-static int
++int
+ jack_port_do_connect (jack_engine_t *engine,
+ const char *source_port,
+ const char *destination_port)
+@@ -3523,7 +3532,7 @@
+ return 0;
+ }
+
+-static int
++int
+ jack_port_do_disconnect (jack_engine_t *engine,
+ const char *source_port,
+ const char *destination_port)
+@@ -4024,6 +4033,11 @@
+ }
+ }
+ }
++
++ if (engine->jackctl_port_registration_notify != NULL)
++ {
++ engine->jackctl_port_registration_notify(engine->jackctl_context, port_id, yn);
++ }
+ }
+
+ void
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,279 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++ Copyright (C) 2007-2008 Juuso Alasuutari
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <config.h>
++
++#include <string.h>
++#include <dbus/dbus.h>
++
++#include <jack/internal.h>
++
++#include "jackcontroller.h"
++#include "jackcontroller_internal.h"
++#include "jackcontroller_xml.h"
++
++struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[] =
++{
++ &g_jack_controller_iface_introspectable,
++ &g_jack_controller_iface_control,
++ &g_jack_controller_iface_configure,
++ &g_jack_controller_iface_patchbay,
++ &g_jack_controller_iface_transport,
++ NULL
++};
++
++jackctl_driver
++jack_controller_find_driver(
++ jackctl_server server,
++ const char * driver_name)
++{
++ const JSList * node_ptr;
++
++ node_ptr = jackctl_server_get_drivers_list(server);
++
++ while (node_ptr)
++ {
++ if (strcmp(jackctl_driver_get_name((jackctl_driver)node_ptr->data), driver_name) == 0)
++ {
++ return (jackctl_driver)node_ptr->data;
++ }
++
++ node_ptr = jack_slist_next(node_ptr);
++ }
++
++ return NULL;
++}
++
++jackctl_parameter
++jack_controller_find_parameter(
++ const JSList * parameters_list,
++ const char * parameter_name)
++{
++ while (parameters_list)
++ {
++ if (strcmp(jackctl_parameter_get_name((jackctl_parameter)parameters_list->data), parameter_name) == 0)
++ {
++ return (jackctl_parameter)parameters_list->data;
++ }
++
++ parameters_list = jack_slist_next(parameters_list);
++ }
++
++ return NULL;
++}
++
++bool
++jack_controller_select_driver(
++ struct jack_controller * controller_ptr,
++ const char * driver_name)
++{
++ jackctl_driver driver;
++
++ driver = jack_controller_find_driver(controller_ptr->server, driver_name);
++ if (driver == NULL)
++ {
++ return false;
++ }
++
++ jack_info("driver \"%s\" selected", driver_name);
++
++ controller_ptr->driver = driver;
++ controller_ptr->driver_set = true;
++
++ return true;
++}
++
++bool
++jack_controller_start_server(
++ struct jack_controller * controller_ptr,
++ void *dbus_call_context_ptr)
++{
++ jack_info("Starting jack server...");
++
++ if (controller_ptr->started)
++ {
++ jack_info("Already started.");
++ return TRUE;
++ }
++
++ if (controller_ptr->driver == NULL)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "Select driver first!");
++ return FALSE;
++ }
++
++ if (!jackctl_server_start(
++ controller_ptr->server,
++ controller_ptr->driver,
++ controller_ptr,
++ jack_controller_patchbay_client_appeared_callback,
++ jack_controller_patchbay_client_disappeared_callback,
++ jack_controller_patchbay_port_appeared_callback,
++ jack_controller_patchbay_port_disappeared_callback,
++ jack_controller_patchbay_ports_connected_callback,
++ jack_controller_patchbay_ports_disconnected_callback))
++ {
++ return FALSE;
++ }
++
++ controller_ptr->started = true;
++
++ return TRUE;
++}
++
++bool
++jack_controller_stop_server(
++ struct jack_controller * controller_ptr,
++ void *dbus_call_context_ptr)
++{
++ jack_info("Stopping jack server...");
++
++ if (!controller_ptr->started)
++ {
++ jack_info("Already stopped.");
++ return TRUE;
++ }
++
++ if (!jackctl_server_stop(controller_ptr->server))
++ {
++ return FALSE;
++ }
++
++ controller_ptr->started = false;
++
++ return TRUE;
++}
++
++void *
++jack_controller_create(
++ DBusConnection *connection)
++{
++ struct jack_controller *controller_ptr;
++ const JSList * node_ptr;
++ const char ** driver_name_target;
++ JSList * drivers;
++ DBusObjectPathVTable vtable =
++ {
++ jack_dbus_message_handler_unregister,
++ jack_dbus_message_handler,
++ NULL
++ };
++
++ controller_ptr = malloc(sizeof(struct jack_controller));
++ if (!controller_ptr)
++ {
++ jack_error("Ran out of memory trying to allocate struct jack_controller");
++ goto fail;
++ }
++
++ if (!jack_controller_patchbay_init(controller_ptr))
++ {
++ jack_error("Failed to initialize patchbay district");
++ goto fail_free;
++ }
++
++ controller_ptr->server = jackctl_server_create(NULL);
++ if (controller_ptr->server == NULL)
++ {
++ jack_error("Failed to create server object");
++ goto fail_uninit_patchbay;
++ }
++
++ controller_ptr->started = false;
++ controller_ptr->driver = NULL;
++ controller_ptr->driver_set = true;
++
++ drivers = (JSList *)jackctl_server_get_drivers_list(controller_ptr->server);
++ controller_ptr->drivers_count = jack_slist_length(drivers);
++ controller_ptr->driver_names = malloc(controller_ptr->drivers_count * sizeof(const char *));
++ if (controller_ptr->driver_names == NULL)
++ {
++ jack_error("Ran out of memory trying to allocate driver names array");
++ goto fail_destroy_server;
++ }
++
++ driver_name_target = controller_ptr->driver_names;
++ node_ptr = jackctl_server_get_drivers_list(controller_ptr->server);
++ while (node_ptr != NULL)
++ {
++ *driver_name_target = jackctl_driver_get_name((jackctl_driver)node_ptr->data);
++
++ /* select default driver */
++ if (controller_ptr->driver == NULL && strcmp(*driver_name_target, JACK_DEFAULT_DRIVER) == 0)
++ {
++ controller_ptr->driver = (jackctl_driver_t *)node_ptr->data;
++ }
++
++ node_ptr = jack_slist_next(node_ptr);
++ driver_name_target++;
++ }
++
++ controller_ptr->dbus_descriptor.context = controller_ptr;
++ controller_ptr->dbus_descriptor.interfaces = g_jackcontroller_interfaces;
++
++ if (!dbus_connection_register_object_path(
++ connection,
++ JACK_CONTROLLER_OBJECT_PATH,
++ &vtable,
++ &controller_ptr->dbus_descriptor))
++ {
++ jack_error("Ran out of memory trying to register D-Bus object path");
++ goto fail_free_driver_names_array;
++ }
++
++ jack_controller_settings_load(controller_ptr);
++
++ return controller_ptr;
++
++fail_free_driver_names_array:
++ free(controller_ptr->driver_names);
++
++fail_destroy_server:
++ jackctl_server_destroy(controller_ptr->server);
++
++fail_uninit_patchbay:
++ jack_controller_patchbay_uninit(controller_ptr);
++
++fail_free:
++ free(controller_ptr);
++
++fail:
++ return NULL;
++}
++
++#define controller_ptr ((struct jack_controller *)context)
++
++void
++jack_controller_destroy(
++ void * context)
++{
++ if (controller_ptr->started)
++ {
++ jack_controller_stop_server(controller_ptr, NULL);
++ }
++
++ free(controller_ptr->driver_names);
++
++ jackctl_server_destroy(controller_ptr->server);
++
++ jack_controller_patchbay_uninit(controller_ptr);
++
++ free(controller_ptr);
++}
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller.h jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller.h
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller.h 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller.h 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,31 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#ifndef JACKCONTROLLER_H__2CC80B1E_8D5D_45E3_A9D8_9086DDF68BB5__INCLUDED
++#define JACKCONTROLLER_H__2CC80B1E_8D5D_45E3_A9D8_9086DDF68BB5__INCLUDED
++
++void *
++jack_controller_create(
++ DBusConnection *connection);
++
++void
++jack_controller_destroy(
++ void *controller_ptr);
++
++#endif /* #ifndef JACKCONTROLLER_H__2CC80B1E_8D5D_45E3_A9D8_9086DDF68BB5__INCLUDED */
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_configure.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_configure.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_configure.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_configure.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,2258 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++ Copyright (C) 2007-2008 Juuso Alasuutari
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <config.h>
++
++#include <stdint.h>
++#include <string.h>
++#include <assert.h>
++#include <dbus/dbus.h>
++
++#include <jack/internal.h>
++
++#include "jackdbus.h"
++#include "jackcontroller_internal.h"
++#include "jackcontroller_xml.h"
++
++#define PTNODE_ENGINE "engine"
++#define PTNODE_DRIVER "driver"
++#define PTNODE_DRIVERS "drivers"
++#define PTNODE_INTERNALS "internals"
++
++#define ENGINE_DRIVER_PARAMETER_NAME "driver"
++#define ENGINE_DRIVER_PARAMETER_TYPE JackParamString
++#define ENGINE_DRIVER_PARAMETER_SHORT_DESCR "Driver to use"
++#define ENGINE_DRIVER_PARAMETER_LONG_DESCR ""
++
++struct parameter_info
++{
++ unsigned char type;
++ const char * name;
++ const char * short_decr;
++ const char * long_descr;
++};
++
++unsigned char jack_controller_dbus_types[JACK_PARAM_MAX] =
++{
++ [JackParamInt] = DBUS_TYPE_INT32,
++ [JackParamUInt] = DBUS_TYPE_UINT32,
++ [JackParamChar] = DBUS_TYPE_BYTE,
++ [JackParamString] = DBUS_TYPE_STRING,
++ [JackParamBool] = DBUS_TYPE_BOOLEAN,
++};
++
++const char * jack_controller_dbus_type_signatures[JACK_PARAM_MAX] =
++{
++ [JackParamInt] = DBUS_TYPE_INT32_AS_STRING,
++ [JackParamUInt] = DBUS_TYPE_UINT32_AS_STRING,
++ [JackParamChar] = DBUS_TYPE_BYTE_AS_STRING,
++ [JackParamString] = DBUS_TYPE_STRING_AS_STRING,
++ [JackParamBool] = DBUS_TYPE_BOOLEAN_AS_STRING,
++};
++
++#define PARAM_TYPE_JACK_TO_DBUS(_) jack_controller_dbus_types[_]
++#define PARAM_TYPE_JACK_TO_DBUS_SIGNATURE(_) jack_controller_dbus_type_signatures[_]
++
++static
++bool
++jack_controller_jack_to_dbus_variant(
++ jackctl_param_type_t type,
++ const union jackctl_parameter_value * value_ptr,
++ message_arg_t * dbusv_ptr)
++{
++ switch (type)
++ {
++ case JackParamInt:
++ dbusv_ptr->int32 = (dbus_int32_t)value_ptr->i;
++ return true;
++ case JackParamUInt:
++ dbusv_ptr->uint32 = (dbus_uint32_t)value_ptr->ui;
++ return true;
++ case JackParamChar:
++ dbusv_ptr->byte = value_ptr->c;
++ return true;
++ case JackParamString:
++ dbusv_ptr->string = value_ptr->str;
++ return true;
++ case JackParamBool:
++ dbusv_ptr->boolean = (dbus_bool_t)value_ptr->b;
++ return true;
++ }
++
++ jack_error("Unknown JACK parameter type %i", (int)type);
++ assert(0);
++ return false;
++}
++
++static
++bool
++jack_controller_dbus_to_jack_variant(
++ int type,
++ const message_arg_t * dbusv_ptr,
++ union jackctl_parameter_value * value_ptr)
++{
++ size_t len;
++
++ switch (type)
++ {
++ case DBUS_TYPE_INT32:
++ value_ptr->i = dbusv_ptr->int32;
++ return true;
++ case DBUS_TYPE_UINT32:
++ value_ptr->ui = dbusv_ptr->uint32;
++ return true;
++ case DBUS_TYPE_BYTE:
++ value_ptr->c = dbusv_ptr->byte;
++ return true;
++ case DBUS_TYPE_STRING:
++ len = strlen(dbusv_ptr->string);
++ if (len > JACK_PARAM_STRING_MAX)
++ {
++ jack_error("Parameter string value is too long (%u)", (unsigned int)len);
++ return false;
++ }
++ memcpy(value_ptr->str, dbusv_ptr->string, len + 1);
++
++ return true;
++ case DBUS_TYPE_BOOLEAN:
++ value_ptr->b = dbusv_ptr->boolean;
++ return true;
++ }
++
++ jack_error("Unknown D-Bus parameter type %i", (int)type);
++ return false;
++}
++
++/*
++ * Construct a return message for a Get[Driver|Engine]ParameterValue method call.
++ *
++ * The operation can only fail due to lack of memory, in which case
++ * there's no sense in trying to construct an error return. Instead,
++ * call->reply will be set to NULL and handled in send_method_return().
++ */
++static void
++jack_dbus_construct_method_return_parameter(
++ struct jack_dbus_method_call * call,
++ dbus_bool_t is_set,
++ int type,
++ const char * signature,
++ message_arg_t default_value,
++ message_arg_t value)
++{
++ DBusMessageIter iter;
++
++ /* Create a new method return message. */
++ call->reply = dbus_message_new_method_return (call->message);
++ if (!call->reply)
++ {
++ goto fail;
++ }
++
++ dbus_message_iter_init_append (call->reply, &iter);
++
++ /* Append the is_set argument. */
++ if (!dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, (const void *) &is_set))
++ {
++ goto fail_unref;
++ }
++
++ /* Append the 'default' and 'value' arguments. */
++ if (!jack_dbus_message_append_variant(&iter, type, signature, &default_value))
++ {
++ goto fail_unref;
++ }
++ if (!jack_dbus_message_append_variant(&iter, type, signature, &value))
++ {
++ goto fail_unref;
++ }
++
++ return;
++
++fail_unref:
++ dbus_message_unref (call->reply);
++ call->reply = NULL;
++
++fail:
++ jack_error ("Ran out of memory trying to construct method return");
++}
++
++static
++bool
++jack_controller_dbus_get_parameter_address_ex(
++ struct jack_dbus_method_call * call,
++ DBusMessageIter * iter_ptr,
++ const char ** address_array)
++{
++ const char * signature;
++ DBusMessageIter array_iter;
++ int type;
++ int index;
++
++ if (!dbus_message_iter_init(call->message, iter_ptr))
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid arguments to method '%s'. No input arguments found.",
++ call->method_name);
++ return false;
++ }
++
++ signature = dbus_message_iter_get_signature(iter_ptr);
++ if (signature == NULL)
++ {
++ jack_error("dbus_message_iter_get_signature() failed");
++ return false;
++ }
++
++ if (strcmp(signature, "as") != 0)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid arguments to method '%s'. Input arguments signature '%s', must begin with 'as'.",
++ call->method_name,
++ signature);
++ return false;
++ }
++
++ dbus_message_iter_recurse(iter_ptr, &array_iter);
++
++ index = 0;
++ while ((type = dbus_message_iter_get_arg_type(&array_iter)) != DBUS_TYPE_INVALID)
++ {
++ if (index == 3)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid arguments to method '%s'. Parameter address array must contain not more than three elements.",
++ call->method_name);
++ return false;
++ }
++
++ ;
++ if (type != DBUS_TYPE_STRING)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_FATAL,
++ "Internal error when parsing parameter address of method '%s'. Address array element type '%c' is not string type.",
++ call->method_name,
++ type);
++ return false;
++ }
++
++ dbus_message_iter_get_basic(&array_iter, address_array + index);
++ //jack_info("address component: '%s'", address_array[index]);
++
++ dbus_message_iter_next(&array_iter);
++ index++;
++ }
++
++ while (index < 3)
++ {
++ address_array[index] = NULL;
++ index++;
++ }
++
++ return true;
++}
++
++static
++bool
++jack_controller_dbus_get_parameter_address(
++ struct jack_dbus_method_call * call,
++ const char ** address_array)
++{
++ DBusMessageIter iter;
++ bool ret;
++
++ ret = jack_controller_dbus_get_parameter_address_ex(call, &iter, address_array);
++ if (ret && dbus_message_iter_has_next(&iter))
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid arguments to method '%s'. Input arguments signature must be 'as'.",
++ call->method_name);
++ return false;
++ }
++
++ return ret;
++}
++
++#define controller_ptr ((struct jack_controller *)call->context)
++
++static
++bool
++jack_controller_fill_parameter_names(
++ struct jack_dbus_method_call * call,
++ DBusMessageIter * iter_ptr,
++ const char * special_first,
++ const JSList * parameters_list)
++{
++ DBusMessageIter array_iter;
++ const char * param_name;
++
++ if (!dbus_message_iter_open_container(iter_ptr, DBUS_TYPE_ARRAY, "s", &array_iter))
++ {
++ return false;
++ }
++
++ if (special_first != NULL)
++ {
++ if (!dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &special_first))
++ {
++ dbus_message_iter_close_container(iter_ptr, &array_iter);
++ return false;
++ }
++ }
++
++ /* Append parameter descriptions to the array. */
++ while (parameters_list != NULL)
++ {
++ param_name = jackctl_parameter_get_name(parameters_list->data);
++ if (!dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, ¶m_name))
++ {
++ dbus_message_iter_close_container(iter_ptr, &array_iter);
++ return false;
++ }
++
++ parameters_list = jack_slist_next(parameters_list);
++ }
++
++ return dbus_message_iter_close_container(iter_ptr, &array_iter);
++}
++
++static
++void
++jack_controller_dbus_read_container(
++ struct jack_dbus_method_call * call)
++{
++ const char * address[3];
++ dbus_bool_t leaf;
++ DBusMessageIter iter;
++ DBusMessageIter array_iter;
++ const char * child_name;
++ unsigned int index;
++ //jackctl_internal_t * internal;
++ jackctl_driver_t * driver;
++
++ //jack_info("jack_controller_dbus_read_container() called");
++
++ if (!jack_controller_dbus_get_parameter_address(call, address))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_controller_dbus_get_parameter_address() has
++ * constructed an error for us. */
++ return;
++ }
++
++ //jack_info("address is '%s':'%s':'%s'", address[0], address[1], address[2]);
++
++ /* Create a new method return message. */
++ call->reply = dbus_message_new_method_return(call->message);
++ if (!call->reply)
++ {
++ goto oom;
++ }
++
++ dbus_message_iter_init_append(call->reply, &iter);
++
++ if (address[0] == NULL) /* root node */
++ {
++ //jack_info("reading root container");
++
++ leaf = false;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &leaf))
++ {
++ goto oom_unref;
++ }
++
++ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &array_iter))
++ {
++ goto oom_unref;
++ }
++
++ child_name = PTNODE_ENGINE;
++ if (!dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &child_name))
++ {
++ goto oom_close_unref;
++ }
++
++ child_name = PTNODE_DRIVER;
++ if (!dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &child_name))
++ {
++ goto oom_close_unref;
++ }
++
++ child_name = PTNODE_DRIVERS;
++ if (!dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &child_name))
++ {
++ goto oom_close_unref;
++ }
++
++ child_name = PTNODE_INTERNALS;
++ if (!dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &child_name))
++ {
++ goto oom_close_unref;
++ }
++
++ dbus_message_iter_close_container(&iter, &array_iter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] == NULL &&
++ strcmp(address[0], PTNODE_ENGINE) == 0) /* engine parameters requested */
++ {
++ //jack_info("reading engine params container");
++
++ leaf = true;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &leaf))
++ {
++ goto oom_unref;
++ }
++
++ if (!jack_controller_fill_parameter_names(
++ call,
++ &iter,
++ ENGINE_DRIVER_PARAMETER_NAME,
++ jackctl_server_get_parameters(controller_ptr->server)))
++ {
++ goto oom_unref;
++ }
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] == NULL &&
++ strcmp(address[0], PTNODE_DRIVER) == 0) /* current driver parameters requested */
++ {
++ //jack_info("reading current driver params container");
++
++ leaf = true;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &leaf))
++ {
++ goto oom_unref;
++ }
++
++ if (!jack_controller_fill_parameter_names(
++ call,
++ &iter,
++ NULL,
++ jackctl_driver_get_parameters(controller_ptr->driver)))
++ {
++ goto oom_unref;
++ }
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ strcmp(address[0], PTNODE_DRIVERS) == 0)
++ {
++ leaf = address[1] != NULL;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &leaf))
++ {
++ goto oom_unref;
++ }
++
++ if (!leaf) /* available drivers requested */
++ {
++ //jack_info("reading drivers container");
++
++ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &array_iter))
++ {
++ goto oom_unref;
++ }
++
++ for (index = 0; index < controller_ptr->drivers_count; index++)
++ {
++ if (!dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, controller_ptr->driver_names + index))
++ {
++ goto oom_close_unref;
++ }
++ }
++
++ dbus_message_iter_close_container(&iter, &array_iter);
++ }
++ else /* specified driver parameters requested */
++ {
++ //jack_info("reading driver '%s' params container", address[1]);
++
++ driver = jack_controller_find_driver(controller_ptr->server, address[1]);
++ if (driver == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown driver '%s'",
++ address[1]);
++ return;
++ }
++
++ if (!jack_controller_fill_parameter_names(
++ call,
++ &iter,
++ NULL,
++ jackctl_driver_get_parameters(driver)))
++ {
++ goto oom_unref;
++ }
++ }
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ strcmp(address[0], PTNODE_INTERNALS) == 0)
++ {
++ leaf = address[1] != NULL;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &leaf))
++ {
++ goto oom_unref;
++ }
++
++ if (!leaf) /* available internals requested */
++ {
++ //jack_info("reading internals container");
++
++ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &array_iter))
++ {
++ goto oom_unref;
++ }
++
++#if 0
++ for (index = 0; index < controller_ptr->internals_count; index++)
++ {
++ if (!dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, controller_ptr->internal_names + index))
++ {
++ goto oom_close_unref;
++ }
++ }
++#endif
++
++ dbus_message_iter_close_container(&iter, &array_iter);
++ }
++ else /* specified driver parameters requested */
++ {
++ //jack_info("reading internal '%s' params container", address[1]);
++
++#if 0
++ internal = jack_controller_find_internal(controller_ptr->server, address[1]);
++ if (internal == NULL)
++ {
++#endif
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown internal '%s'",
++ address[1]);
++ return;
++#if 0
++ }
++
++ if (!jack_controller_fill_parameter_names(
++ call,
++ &iter,
++ NULL,
++ jackctl_internal_get_parameters(internal)))
++ {
++ goto oom_unref;
++ }
++#endif
++ }
++
++ return;
++ }
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid container address '%s':'%s':'%s' supplied to method '%s'.",
++ address[0],
++ address[1],
++ address[2],
++ call->method_name);
++
++ return;
++
++oom_close_unref:
++ dbus_message_iter_close_container(&iter, &array_iter);
++
++oom_unref:
++ dbus_message_unref(call->reply);
++ call->reply = NULL;
++
++oom:
++ jack_error ("Ran out of memory trying to construct method return");
++}
++
++static
++void
++jack_controller_get_parameters_info(
++ struct jack_dbus_method_call * call,
++ struct parameter_info * special_parameter_info_ptr,
++ const JSList * parameters_list)
++{
++ DBusMessageIter iter, array_iter, struct_iter;
++ unsigned char type;
++ const char *str;
++
++ call->reply = dbus_message_new_method_return (call->message);
++ if (!call->reply)
++ {
++ goto fail;
++ }
++
++ dbus_message_iter_init_append (call->reply, &iter);
++
++ /* Open the array. */
++ if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(ysss)", &array_iter))
++ {
++ goto fail_unref;
++ }
++
++ if (special_parameter_info_ptr != NULL)
++ {
++ /* Open the struct. */
++ if (!dbus_message_iter_open_container (&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++
++ /* Append parameter type. */
++ type = PARAM_TYPE_JACK_TO_DBUS(special_parameter_info_ptr->type);
++ if (!dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_BYTE, &type))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Append parameter name. */
++ if (!dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_STRING, &special_parameter_info_ptr->name))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Append parameter short description. */
++ if (!dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_STRING, &special_parameter_info_ptr->short_decr))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Append parameter long description. */
++ if (!dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_STRING, &special_parameter_info_ptr->long_descr))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Close the struct. */
++ if (!dbus_message_iter_close_container (&array_iter, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++ }
++
++ /* Append parameter descriptions to the array. */
++ while (parameters_list != NULL)
++ {
++ /* Open the struct. */
++ if (!dbus_message_iter_open_container (&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++
++ /* Append parameter type. */
++ type = PARAM_TYPE_JACK_TO_DBUS(jackctl_parameter_get_type(parameters_list->data));
++ if (!dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_BYTE, &type))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Append parameter name. */
++ str = jackctl_parameter_get_name(parameters_list->data);
++ if (!dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_STRING, &str))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Append parameter short description. */
++ str = jackctl_parameter_get_short_description(parameters_list->data);
++ if (!dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_STRING, &str))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Append parameter long description. */
++ str = jackctl_parameter_get_long_description(parameters_list->data);
++ if (!dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_STRING, &str))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Close the struct. */
++ if (!dbus_message_iter_close_container (&array_iter, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++
++ parameters_list = jack_slist_next(parameters_list);
++ }
++
++ /* Close the array. */
++ if (!dbus_message_iter_close_container (&iter, &array_iter))
++ {
++ goto fail_unref;
++ }
++
++ return;
++
++fail_close2_unref:
++ dbus_message_iter_close_container (&iter, &struct_iter);
++
++fail_close_unref:
++ dbus_message_iter_close_container (&iter, &array_iter);
++
++fail_unref:
++ dbus_message_unref (call->reply);
++ call->reply = NULL;
++
++fail:
++ jack_error ("Ran out of memory trying to construct method return");
++}
++
++static
++void
++jack_controller_dbus_get_parameters_info(
++ struct jack_dbus_method_call * call)
++{
++ const char * address[3];
++ //jackctl_internal_t * internal;
++ jackctl_driver_t * driver;
++ struct parameter_info driver_parameter_info;
++
++ //jack_info("jack_controller_dbus_get_parameters_info() called");
++
++ if (!jack_controller_dbus_get_parameter_address(call, address))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_controller_dbus_get_parameter_address() has
++ * constructed an error for us. */
++ return;
++ }
++
++ //jack_info("address is '%s':'%s':'%s'", address[0], address[1], address[2]);
++
++ if (address[0] != NULL &&
++ address[1] == NULL &&
++ strcmp(address[0], PTNODE_ENGINE) == 0) /* engine parameters requested */
++ {
++ driver_parameter_info.type = ENGINE_DRIVER_PARAMETER_TYPE;
++ driver_parameter_info.name = ENGINE_DRIVER_PARAMETER_NAME;
++ driver_parameter_info.short_decr = ENGINE_DRIVER_PARAMETER_SHORT_DESCR;
++ driver_parameter_info.long_descr = ENGINE_DRIVER_PARAMETER_LONG_DESCR;
++
++ jack_controller_get_parameters_info(
++ call,
++ &driver_parameter_info,
++ jackctl_server_get_parameters(controller_ptr->server));
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] == NULL &&
++ strcmp(address[0], PTNODE_DRIVER) == 0) /* current driver parameters requested */
++ {
++ jack_controller_get_parameters_info(
++ call,
++ NULL,
++ jackctl_driver_get_parameters(controller_ptr->driver));
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_DRIVERS) == 0)
++ {
++ driver = jack_controller_find_driver(controller_ptr->server, address[1]);
++ if (driver == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown driver '%s'",
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameters_info(
++ call,
++ NULL,
++ jackctl_driver_get_parameters(driver));
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_INTERNALS) == 0)
++ {
++#if 0
++ internal = jack_controller_find_internal(controller_ptr->server, address[1]);
++ if (internal == NULL)
++ {
++#endif
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown internal '%s'",
++ address[1]);
++ return;
++#if 0
++ }
++
++ jack_controller_get_parameters_info(
++ call,
++ NULL,
++ jackctl_internal_get_parameters(internal));
++
++ return;
++#endif
++ }
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid container address '%s':'%s':'%s' supplied to method '%s'.",
++ address[0],
++ address[1],
++ address[2],
++ call->method_name);
++}
++
++static
++void
++jack_controller_get_parameter_info_ex(
++ struct jack_dbus_method_call * call,
++ struct parameter_info * info_ptr)
++{
++ DBusMessageIter iter, struct_iter;
++ unsigned char type;
++
++ call->reply = dbus_message_new_method_return(call->message);
++ if (!call->reply)
++ {
++ goto fail;
++ }
++
++ dbus_message_iter_init_append(call->reply, &iter);
++
++ /* Open the struct. */
++ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
++ {
++ goto fail_unref;
++ }
++
++ /* Append parameter type. */
++ type = PARAM_TYPE_JACK_TO_DBUS(info_ptr->type);
++ if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_BYTE, &type))
++ {
++ goto fail_close_unref;
++ }
++
++ /* Append parameter name. */
++ if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &info_ptr->name))
++ {
++ goto fail_close_unref;
++ }
++
++ /* Append parameter short description. */
++ if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &info_ptr->short_decr))
++ {
++ goto fail_close_unref;
++ }
++
++ /* Append parameter long description. */
++ if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &info_ptr->long_descr))
++ {
++ goto fail_close_unref;
++ }
++
++ /* Close the struct. */
++ if (!dbus_message_iter_close_container(&iter, &struct_iter))
++ {
++ goto fail_unref;
++ }
++
++ return;
++
++fail_close_unref:
++ dbus_message_iter_close_container(&iter, &struct_iter);
++
++fail_unref:
++ dbus_message_unref(call->reply);
++ call->reply = NULL;
++
++fail:
++ jack_error("Ran out of memory trying to construct method return");
++}
++
++static
++void
++jack_controller_get_parameter_info(
++ struct jack_dbus_method_call * call,
++ jackctl_parameter_t * parameter)
++{
++ struct parameter_info info;
++
++ info.type = jackctl_parameter_get_type(parameter);
++ info.name = jackctl_parameter_get_name(parameter);
++ info.short_decr = jackctl_parameter_get_short_description(parameter);
++ info.long_descr = jackctl_parameter_get_long_description(parameter);
++
++ jack_controller_get_parameter_info_ex(call, &info);
++}
++
++static
++void
++jack_controller_dbus_get_parameter_info(
++ struct jack_dbus_method_call * call)
++{
++ const char * address[3];
++ //jackctl_internal_t * internal;
++ jackctl_driver_t * driver;
++ jackctl_parameter_t * parameter;
++ struct parameter_info driver_parameter_info;
++
++ //jack_info("jack_controller_dbus_get_parameter_info() called");
++
++ if (!jack_controller_dbus_get_parameter_address(call, address))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_controller_dbus_get_parameter_address() has
++ * constructed an error for us. */
++ return;
++ }
++
++ //jack_info("address is '%s':'%s':'%s'", address[0], address[1], address[2]);
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_ENGINE) == 0) /* engine parameters requested */
++ {
++ if (strcmp(address[1], ENGINE_DRIVER_PARAMETER_NAME) == 0)
++ {
++ driver_parameter_info.type = ENGINE_DRIVER_PARAMETER_TYPE;
++ driver_parameter_info.name = ENGINE_DRIVER_PARAMETER_NAME;
++ driver_parameter_info.short_decr = ENGINE_DRIVER_PARAMETER_SHORT_DESCR;
++ driver_parameter_info.long_descr = ENGINE_DRIVER_PARAMETER_LONG_DESCR;
++
++ jack_controller_get_parameter_info_ex(call, &driver_parameter_info);
++
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown engine parameter '%s'",
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_info(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_DRIVER) == 0) /* current driver parameters requested */
++ {
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(controller_ptr->driver), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[1],
++ jackctl_driver_get_name(controller_ptr->driver));
++ return;
++ }
++
++ jack_controller_get_parameter_info(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_DRIVERS) == 0)
++ {
++ driver = jack_controller_find_driver(controller_ptr->server, address[1]);
++ if (driver == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown driver '%s'",
++ address[1]);
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_info(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_INTERNALS) == 0)
++ {
++#if 0
++ internal = jack_controller_find_internal(controller_ptr->server, address[1]);
++ if (internal == NULL)
++ {
++#endif
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown internal '%s'",
++ address[1]);
++ return;
++#if 0
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_internal_get_parameters(internal), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for internal '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_info(call, parameter);
++
++ return;
++#endif
++ }
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid container address '%s':'%s':'%s' supplied to method '%s'.",
++ address[0],
++ address[1],
++ address[2],
++ call->method_name);
++}
++
++static
++void
++jack_controller_get_parameter_constraint(
++ struct jack_dbus_method_call * call,
++ jackctl_parameter_t * parameter)
++{
++ uint32_t index;
++ uint32_t count;
++ union jackctl_parameter_value min;
++ union jackctl_parameter_value max;
++ union jackctl_parameter_value jackctl_value;
++ DBusMessageIter iter, array_iter, struct_iter;
++ const char * descr;
++ jackctl_param_type_t type;
++ message_arg_t value;
++ bool is_range;
++
++ type = jackctl_parameter_get_type(parameter);
++
++ call->reply = dbus_message_new_method_return(call->message);
++ if (!call->reply)
++ {
++ goto fail;
++ }
++
++ dbus_message_iter_init_append(call->reply, &iter);
++
++ is_range = jackctl_parameter_has_range_constraint(parameter);
++ value.boolean = is_range;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &value))
++ {
++ goto fail_unref;
++ }
++
++ value.boolean = jackctl_parameter_constraint_is_strict(parameter);
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &value))
++ {
++ goto fail_unref;
++ }
++
++ value.boolean = jackctl_parameter_constraint_is_fake_value(parameter);
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &value))
++ {
++ goto fail_unref;
++ }
++
++ /* Open the array. */
++ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(vs)", &array_iter))
++ {
++ goto fail_unref;
++ }
++
++ if (is_range)
++ {
++ jackctl_parameter_get_range_constraint(parameter, &min, &max);
++
++ /* Open the struct. */
++ if (!dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++
++ jack_controller_jack_to_dbus_variant(type, &min, &value);
++
++ if (!jack_dbus_message_append_variant(&struct_iter, PARAM_TYPE_JACK_TO_DBUS(type), PARAM_TYPE_JACK_TO_DBUS_SIGNATURE(type), &value))
++ {
++ goto fail_close2_unref;
++ }
++
++ descr = "min";
++
++ if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &descr))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Close the struct. */
++ if (!dbus_message_iter_close_container(&array_iter, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++
++ /* Open the struct. */
++ if (!dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++
++ jack_controller_jack_to_dbus_variant(type, &max, &value);
++
++ if (!jack_dbus_message_append_variant(&struct_iter, PARAM_TYPE_JACK_TO_DBUS(type), PARAM_TYPE_JACK_TO_DBUS_SIGNATURE(type), &value))
++ {
++ goto fail_close2_unref;
++ }
++
++ descr = "max";
++
++ if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &descr))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Close the struct. */
++ if (!dbus_message_iter_close_container(&array_iter, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++ }
++ else
++ {
++ count = jackctl_parameter_get_enum_constraints_count(parameter);
++
++ /* Append enum values to the array. */
++ for (index = 0 ; index < count ; index++)
++ {
++ jackctl_value = jackctl_parameter_get_enum_constraint_value(parameter, index);
++ descr = jackctl_parameter_get_enum_constraint_description(parameter, index);
++
++ jack_controller_jack_to_dbus_variant(type, &jackctl_value, &value);
++
++ /* Open the struct. */
++ if (!dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++
++ if (!jack_dbus_message_append_variant(&struct_iter, PARAM_TYPE_JACK_TO_DBUS(type), PARAM_TYPE_JACK_TO_DBUS_SIGNATURE(type), &value))
++ {
++ goto fail_close2_unref;
++ }
++
++ if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &descr))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Close the struct. */
++ if (!dbus_message_iter_close_container(&array_iter, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++ }
++ }
++
++ /* Close the array. */
++ if (!dbus_message_iter_close_container(&iter, &array_iter))
++ {
++ goto fail_unref;
++ }
++
++ return;
++
++fail_close2_unref:
++ dbus_message_iter_close_container(&array_iter, &struct_iter);
++
++fail_close_unref:
++ dbus_message_iter_close_container(&iter, &array_iter);
++
++fail_unref:
++ dbus_message_unref(call->reply);
++ call->reply = NULL;
++
++fail:
++ jack_error ("Ran out of memory trying to construct method return");
++}
++
++static
++void
++jack_controller_get_parameter_constraint_engine_driver(
++ struct jack_dbus_method_call * call)
++{
++ unsigned int index;
++ DBusMessageIter iter, array_iter, struct_iter;
++ jackctl_param_type_t type;
++ dbus_bool_t bval;
++ message_arg_t value;
++
++ type = ENGINE_DRIVER_PARAMETER_TYPE;
++
++ call->reply = dbus_message_new_method_return(call->message);
++ if (!call->reply)
++ {
++ goto fail;
++ }
++
++ dbus_message_iter_init_append(call->reply, &iter);
++
++ /* is_range */
++ bval = false;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &bval))
++ {
++ goto fail_unref;
++ }
++
++ /* is_strict */
++ bval = true;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &bval))
++ {
++ goto fail_unref;
++ }
++
++ /* is_fake_value */
++ bval = true;
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &bval))
++ {
++ goto fail_unref;
++ }
++
++ /* Open the array. */
++ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(vs)", &array_iter))
++ {
++ goto fail_unref;
++ }
++
++ /* Append enum values to the array. */
++ for (index = 0 ; index < controller_ptr->drivers_count ; index++)
++ {
++ /* Open the struct. */
++ if (!dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++
++ value.string = controller_ptr->driver_names[index];
++ if (!jack_dbus_message_append_variant(
++ &struct_iter,
++ PARAM_TYPE_JACK_TO_DBUS(type),
++ PARAM_TYPE_JACK_TO_DBUS_SIGNATURE(type),
++ &value))
++ {
++ goto fail_close2_unref;
++ }
++
++ if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &value))
++ {
++ goto fail_close2_unref;
++ }
++
++ /* Close the struct. */
++ if (!dbus_message_iter_close_container(&array_iter, &struct_iter))
++ {
++ goto fail_close_unref;
++ }
++ }
++
++ /* Close the array. */
++ if (!dbus_message_iter_close_container(&iter, &array_iter))
++ {
++ goto fail_unref;
++ }
++
++ return;
++
++fail_close2_unref:
++ dbus_message_iter_close_container(&array_iter, &struct_iter);
++
++fail_close_unref:
++ dbus_message_iter_close_container(&iter, &array_iter);
++
++fail_unref:
++ dbus_message_unref(call->reply);
++ call->reply = NULL;
++
++fail:
++ jack_error ("Ran out of memory trying to construct method return");
++}
++
++static
++void
++jack_controller_dbus_get_parameter_constraint(
++ struct jack_dbus_method_call * call)
++{
++ const char * address[3];
++ //jackctl_internal_t * internal;
++ jackctl_driver_t * driver;
++ jackctl_parameter_t * parameter;
++
++ //jack_info("jack_controller_dbus_get_parameter_constraint() called");
++
++ if (!jack_controller_dbus_get_parameter_address(call, address))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_controller_dbus_get_parameter_address() has
++ * constructed an error for us. */
++ return;
++ }
++
++ //jack_info("address is '%s':'%s':'%s'", address[0], address[1], address[2]);
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_ENGINE) == 0) /* engine parameters requested */
++ {
++ if (strcmp(address[1], ENGINE_DRIVER_PARAMETER_NAME) == 0)
++ {
++ jack_controller_get_parameter_constraint_engine_driver(call);
++
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown engine parameter '%s'",
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_constraint(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_DRIVER) == 0) /* current driver parameters requested */
++ {
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(controller_ptr->driver), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[1],
++ jackctl_driver_get_name(controller_ptr->driver));
++ return;
++ }
++
++ jack_controller_get_parameter_constraint(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_DRIVERS) == 0)
++ {
++ driver = jack_controller_find_driver(controller_ptr->server, address[1]);
++ if (driver == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown driver '%s'",
++ address[1]);
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_constraint(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_INTERNALS) == 0)
++ {
++#if 0
++ internal = jack_controller_find_internal(controller_ptr->server, address[1]);
++ if (internal == NULL)
++ {
++#endif
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown internal '%s'",
++ address[1]);
++ return;
++#if 0
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_internal_get_parameters(internal), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for internal '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_constraint(call, parameter);
++
++ return;
++#endif
++ }
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid container address '%s':'%s':'%s' supplied to method '%s'.",
++ address[0],
++ address[1],
++ address[2],
++ call->method_name);
++}
++
++static
++void
++jack_controller_get_parameter_value(
++ struct jack_dbus_method_call * call,
++ jackctl_parameter_t * parameter)
++{
++ int type;
++ union jackctl_parameter_value jackctl_value;
++ union jackctl_parameter_value jackctl_default_value;
++ message_arg_t value;
++ message_arg_t default_value;
++
++ type = jackctl_parameter_get_type(parameter);
++ jackctl_default_value = jackctl_parameter_get_default_value(parameter);
++ jackctl_value = jackctl_parameter_get_value(parameter);
++
++ jack_controller_jack_to_dbus_variant(type, &jackctl_value, &value);
++ jack_controller_jack_to_dbus_variant(type, &jackctl_default_value, &default_value);
++
++ /* Construct the reply. */
++ jack_dbus_construct_method_return_parameter(
++ call,
++ (dbus_bool_t)(jackctl_parameter_is_set(parameter) ? TRUE : FALSE),
++ PARAM_TYPE_JACK_TO_DBUS(type),
++ PARAM_TYPE_JACK_TO_DBUS_SIGNATURE(type),
++ default_value,
++ value);
++}
++
++static
++void
++jack_controller_get_parameter_value_engine_driver(
++ struct jack_dbus_method_call * call)
++{
++ message_arg_t value;
++ message_arg_t default_value;
++
++ default_value.string = JACK_DEFAULT_DRIVER;
++ value.string = jackctl_driver_get_name(controller_ptr->driver);
++
++ /* Construct the reply. */
++ jack_dbus_construct_method_return_parameter(
++ call,
++ controller_ptr->driver_set,
++ DBUS_TYPE_STRING,
++ DBUS_TYPE_STRING_AS_STRING,
++ default_value,
++ value);
++}
++
++static void
++jack_controller_dbus_get_parameter_value(
++ struct jack_dbus_method_call * call)
++{
++ const char * address[3];
++ //jackctl_internal_t * internal;
++ jackctl_driver_t * driver;
++ jackctl_parameter_t * parameter;
++
++ //jack_info("jack_controller_dbus_get_parameter_value() called");
++
++ if (!jack_controller_dbus_get_parameter_address(call, address))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_controller_dbus_get_parameter_address() has
++ * constructed an error for us. */
++ return;
++ }
++
++ //jack_info("address is '%s':'%s':'%s'", address[0], address[1], address[2]);
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_ENGINE) == 0) /* engine parameters requested */
++ {
++ if (strcmp(address[1], ENGINE_DRIVER_PARAMETER_NAME) == 0)
++ {
++ jack_controller_get_parameter_value_engine_driver(call);
++
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown engine parameter '%s'",
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_value(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_DRIVER) == 0) /* current driver parameters requested */
++ {
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(controller_ptr->driver), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[1],
++ jackctl_driver_get_name(controller_ptr->driver));
++ return;
++ }
++
++ jack_controller_get_parameter_value(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_DRIVERS) == 0)
++ {
++ driver = jack_controller_find_driver(controller_ptr->server, address[1]);
++ if (driver == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown driver '%s'",
++ address[1]);
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_value(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_INTERNALS) == 0)
++ {
++#if 0
++ internal = jack_controller_find_internal(controller_ptr->server, address[1]);
++ if (internal == NULL)
++ {
++#endif
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown internal '%s'",
++ address[1]);
++ return;
++#if 0
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_internal_get_parameters(internal), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for internal '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_get_parameter_value(call, parameter);
++
++ return;
++#endif
++ }
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid container address '%s':'%s':'%s' supplied to method '%s'.",
++ address[0],
++ address[1],
++ address[2],
++ call->method_name);
++}
++
++static
++void
++jack_controller_set_parameter_value(
++ struct jack_dbus_method_call * call,
++ jackctl_parameter_t * parameter,
++ message_arg_t * arg_ptr,
++ int arg_type)
++{
++ jackctl_param_type_t type;
++ union jackctl_parameter_value value;
++
++ type = jackctl_parameter_get_type(parameter);
++
++ if (PARAM_TYPE_JACK_TO_DBUS(type) != arg_type)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Parameter value type mismatch: was expecting '%c', got '%c'",
++ (char)PARAM_TYPE_JACK_TO_DBUS(type),
++ (char)arg_type);
++ return;
++ }
++
++ if (!jack_controller_dbus_to_jack_variant(
++ arg_type,
++ arg_ptr,
++ &value))
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Cannot convert parameter value");
++ return;
++ }
++
++ jackctl_parameter_set_value(parameter, &value);
++
++ jack_controller_settings_save_auto(controller_ptr);
++
++ jack_dbus_construct_method_return_empty(call);
++}
++
++static
++void
++jack_controller_set_parameter_value_engine_driver(
++ struct jack_dbus_method_call * call,
++ message_arg_t * arg_ptr,
++ int arg_type)
++{
++ union jackctl_parameter_value value;
++
++ if (arg_type != DBUS_TYPE_STRING)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Engine parameter value type mismatch: was expecting '%c', got '%c'",
++ (char)DBUS_TYPE_STRING,
++ (char)arg_type);
++ return;
++ }
++
++ if (!jack_controller_dbus_to_jack_variant(
++ arg_type,
++ arg_ptr,
++ &value))
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Cannot convert engine parameter value");
++ return;
++ }
++
++ if (!jack_controller_select_driver(controller_ptr, value.str))
++ {
++ /* Couldn't find driver with the specified name. */
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_DRIVER,
++ "Unknown driver '%s'",
++ value.str);
++ return;
++ }
++
++ jack_controller_settings_save_auto(controller_ptr);
++
++ jack_dbus_construct_method_return_empty(call);
++}
++
++static
++void
++jack_controller_dbus_set_parameter_value(
++ struct jack_dbus_method_call * call)
++{
++ const char * address[3];
++ DBusMessageIter iter;
++ DBusMessageIter variant_iter;
++ message_arg_t arg;
++ int arg_type;
++ //jackctl_internal_t * internal;
++ jackctl_driver_t * driver;
++ jackctl_parameter_t * parameter;
++
++ //jack_info("jack_controller_dbus_set_parameter_value() called");
++
++ if (!jack_controller_dbus_get_parameter_address_ex(call, &iter, address))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_controller_dbus_get_parameter_address() has
++ * constructed an error for us. */
++ return;
++ }
++
++ //jack_info("address is '%s':'%s':'%s'", address[0], address[1], address[2]);
++
++ dbus_message_iter_next(&iter);
++
++ if (dbus_message_iter_has_next(&iter))
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid arguments to method '%s'. Too many arguments.",
++ call->method_name);
++ return;
++ }
++
++ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid arguments to method '%s'. Value to set must be variant.",
++ call->method_name);
++ return;
++ }
++
++ dbus_message_iter_recurse (&iter, &variant_iter);
++ dbus_message_iter_get_basic(&variant_iter, &arg);
++ arg_type = dbus_message_iter_get_arg_type(&variant_iter);
++
++ //jack_info("argument of type '%c'", arg_type);
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_ENGINE) == 0) /* engine parameters requested */
++ {
++ if (strcmp(address[1], ENGINE_DRIVER_PARAMETER_NAME) == 0)
++ {
++ jack_controller_set_parameter_value_engine_driver(call, &arg, arg_type);
++
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown engine parameter '%s'",
++ address[1]);
++ return;
++ }
++
++ jack_controller_set_parameter_value(call, parameter, &arg, arg_type);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_DRIVER) == 0) /* current driver parameters requested */
++ {
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(controller_ptr->driver), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[1],
++ jackctl_driver_get_name(controller_ptr->driver));
++ return;
++ }
++
++ jack_controller_set_parameter_value(call, parameter, &arg, arg_type);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_DRIVERS) == 0)
++ {
++ driver = jack_controller_find_driver(controller_ptr->server, address[1]);
++ if (driver == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown driver '%s'",
++ address[1]);
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_set_parameter_value(call, parameter, &arg, arg_type);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_INTERNALS) == 0)
++ {
++#if 0
++ internal = jack_controller_find_internal(controller_ptr->server, address[1]);
++ if (internal == NULL)
++ {
++#endif
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown internal '%s'",
++ address[1]);
++ return;
++#if 0
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_internal_get_parameters(internal), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for internal '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_set_parameter_value(call, parameter, &arg, arg_type);
++ return;
++#endif
++ }
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid container address '%s':'%s':'%s' supplied to method '%s'.",
++ address[0],
++ address[1],
++ address[2],
++ call->method_name);
++}
++
++static
++void
++jack_controller_reset_parameter_value(
++ struct jack_dbus_method_call * call,
++ jackctl_parameter_t * parameter)
++{
++ jackctl_parameter_reset(parameter);
++
++ jack_controller_settings_save_auto(controller_ptr);
++
++ jack_dbus_construct_method_return_empty(call);
++}
++
++static
++void
++jack_controller_reset_parameter_value_engine_driver(
++ struct jack_dbus_method_call * call)
++{
++ if (!jack_controller_select_driver(controller_ptr, JACK_DEFAULT_DRIVER))
++ {
++ /* Couldn't find driver with the specified name. */
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_DRIVER,
++ "Default driver '%s' is unknown",
++ JACK_DEFAULT_DRIVER);
++ return;
++ }
++
++ controller_ptr->driver_set = false;
++
++ jack_controller_settings_save_auto(controller_ptr);
++
++ jack_dbus_construct_method_return_empty(call);
++}
++
++static
++void
++jack_controller_dbus_reset_parameter_value(
++ struct jack_dbus_method_call * call)
++{
++ const char * address[3];
++ //jackctl_internal_t * internal;
++ jackctl_driver_t * driver;
++ jackctl_parameter_t * parameter;
++
++ //jack_info("jack_controller_dbus_reset_parameter_value() called");
++
++ if (!jack_controller_dbus_get_parameter_address(call, address))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_controller_dbus_get_parameter_address() has
++ * constructed an error for us. */
++ return;
++ }
++
++ //jack_info("address is '%s':'%s':'%s'", address[0], address[1], address[2]);
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_ENGINE) == 0) /* engine parameters requested */
++ {
++ if (strcmp(address[1], ENGINE_DRIVER_PARAMETER_NAME) == 0)
++ {
++ jack_controller_reset_parameter_value_engine_driver(call);
++
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown engine parameter '%s'",
++ address[1]);
++ return;
++ }
++
++ jack_controller_reset_parameter_value(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] == NULL &&
++ strcmp(address[0], PTNODE_DRIVER) == 0) /* current driver parameters requested */
++ {
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(controller_ptr->driver), address[1]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[1],
++ jackctl_driver_get_name(controller_ptr->driver));
++ return;
++ }
++
++ jack_controller_reset_parameter_value(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_DRIVERS) == 0)
++ {
++ driver = jack_controller_find_driver(controller_ptr->server, address[1]);
++ if (driver == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown driver '%s'",
++ address[1]);
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for driver '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_reset_parameter_value(call, parameter);
++
++ return;
++ }
++
++ if (address[0] != NULL &&
++ address[1] != NULL &&
++ address[2] != NULL &&
++ strcmp(address[0], PTNODE_INTERNALS) == 0)
++ {
++#if 0
++ internal = jack_controller_find_internal(controller_ptr->server, address[1]);
++ if (internal == NULL)
++ {
++#endif
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_INTERNAL,
++ "Unknown internal '%s'",
++ address[1]);
++ return;
++#if 0
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_internal_get_parameters(internal), address[2]);
++ if (parameter == NULL)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_UNKNOWN_PARAMETER,
++ "Unknown parameter '%s' for internal '%s'",
++ address[2],
++ address[1]);
++ return;
++ }
++
++ jack_controller_reset_parameter_value(call, parameter);
++
++ return;
++#endif
++ }
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid container address '%s':'%s':'%s' supplied to method '%s'.",
++ address[0],
++ address[1],
++ address[2],
++ call->method_name);
++}
++
++#undef controller_ptr
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(ReadContainer, "Get names of child parameters or containers")
++ JACK_DBUS_METHOD_ARGUMENT_IN("parent", "as", "Address of parent container")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("leaf", "b", "Whether children are parameters (true) or containers (false)")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("children", "as", "Array of child names")
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(GetParametersInfo, "Retrieve info about parameters")
++ JACK_DBUS_METHOD_ARGUMENT_IN("parent", "as", "Address of parameters parent")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("parameter_info_array", "a(ysss)", "Array of parameter info structs. Each info struct contains: type char, name, short and long description")
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(GetParameterInfo, "Retrieve info about parameter")
++ JACK_DBUS_METHOD_ARGUMENT_IN("parameter", "as", "Address of parameter")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("parameter_info", "(ysss)", "Parameter info struct that contains: type char, name, short and long description")
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(GetParameterConstraint, "Get constraint of parameter")
++ JACK_DBUS_METHOD_ARGUMENT_IN("parameter", "as", "Address of parameter")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("is_range", "b", "Whether constrinat is a range. If so, values parameter will contain two values, min and max")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("is_strict", "b", "Whether enum constraint is strict. I.e. value not listed in values array will not work")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("is_fake_value", "b", "Whether enum values are fake. I.e. have no user meaningful meaning")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("values", "a(vs)", "Values. If there is no constraint, this array will be empty. For range constraint there will be two values, min and max. For enum constraint there will be 2 or more values.")
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(GetParameterValue, "Get value of parameter")
++ JACK_DBUS_METHOD_ARGUMENT_IN("parameter", "as", "Address of parameter")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("is_set", "b", "Whether parameter is set or its default value is used")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("default", "v", "Default value of parameter")
++ JACK_DBUS_METHOD_ARGUMENT_OUT("value", "v", "Actual value of parameter")
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(SetParameterValue, "Set value of parameter")
++ JACK_DBUS_METHOD_ARGUMENT_IN("parameter", "as", "Address of parameter")
++ JACK_DBUS_METHOD_ARGUMENT_IN("value", "v", "New value for parameter")
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(ResetParameterValue, "Reset parameter to default value")
++ JACK_DBUS_METHOD_ARGUMENT_IN("parameter", "as", "Address of parameter")
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHODS_BEGIN
++ JACK_DBUS_METHOD_DESCRIBE(ReadContainer, jack_controller_dbus_read_container)
++ JACK_DBUS_METHOD_DESCRIBE(GetParametersInfo, jack_controller_dbus_get_parameters_info)
++ JACK_DBUS_METHOD_DESCRIBE(GetParameterInfo, jack_controller_dbus_get_parameter_info)
++ JACK_DBUS_METHOD_DESCRIBE(GetParameterConstraint, jack_controller_dbus_get_parameter_constraint)
++ JACK_DBUS_METHOD_DESCRIBE(GetParameterValue, jack_controller_dbus_get_parameter_value)
++ JACK_DBUS_METHOD_DESCRIBE(SetParameterValue, jack_controller_dbus_set_parameter_value)
++ JACK_DBUS_METHOD_DESCRIBE(ResetParameterValue, jack_controller_dbus_reset_parameter_value)
++JACK_DBUS_METHODS_END
++
++/*
++ * Parameter addresses:
++ *
++ * "engine"
++ * "engine", "driver"
++ * "engine", "realtime"
++ * "engine", ...more engine parameters
++ *
++ * "driver", "device"
++ * "driver", ...more driver parameters
++ *
++ * "drivers", "alsa", "device"
++ * "drivers", "alsa", ...more alsa driver parameters
++ *
++ * "drivers", ...more drivers
++ *
++ * "internals", "netmanager", "multicast_ip"
++ * "internals", "netmanager", ...more netmanager parameters
++ *
++ * "internals", ...more internals
++ *
++ */
++
++JACK_DBUS_IFACE_BEGIN(g_jack_controller_iface_configure, "org.jackaudio.Configure")
++ JACK_DBUS_IFACE_EXPOSE_METHODS
++JACK_DBUS_IFACE_END
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_control.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_control.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_control.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_control.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,236 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++ Copyright (C) 2007-2008 Juuso Alasuutari
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <config.h>
++
++#include <stdint.h>
++#include <string.h>
++#include <stdio.h>
++#include <assert.h>
++#include <dbus/dbus.h>
++
++#include <jack/internal.h>
++
++#include "jackdbus.h"
++#include "jackcontroller_internal.h"
++
++#define controller_ptr ((struct jack_controller *)call->context)
++
++/*
++ * Check if the supplied method name exists in org.jackaudio.JackControl,
++ * if it does execute it and return true. Otherwise return false.
++ */
++static
++bool
++jack_control_run_method(
++ struct jack_dbus_method_call * call,
++ const struct jack_dbus_interface_method_descriptor * methods)
++{
++ int type;
++ message_arg_t arg;
++
++ /* use empty reply if not overriden in the code that follows */
++ type = DBUS_TYPE_INVALID;
++
++ if (strcmp (call->method_name, "Exit") == 0)
++ {
++ g_exit_command = TRUE;
++ }
++ else if (strcmp (call->method_name, "IsStarted") == 0)
++ {
++ type = DBUS_TYPE_BOOLEAN;
++ arg.boolean = (dbus_bool_t) (controller_ptr->started ? TRUE : FALSE);
++ }
++ else if (strcmp (call->method_name, "StartServer") == 0)
++ {
++ if (!jack_controller_start_server(controller_ptr, call))
++ {
++ jack_error ("Failed to start server");
++ }
++ }
++ else if (strcmp (call->method_name, "StopServer") == 0)
++ {
++ if (!jack_controller_stop_server(controller_ptr, call))
++ {
++ jack_error ("Failed to stop server");
++ }
++ }
++ else if (strcmp (call->method_name, "GetLoad") == 0)
++ {
++ if (!controller_ptr->started)
++ {
++ goto not_started;
++ }
++
++ type = DBUS_TYPE_DOUBLE;
++ arg.doubl = jackctl_server_get_load(controller_ptr->server);
++ }
++ else if (strcmp (call->method_name, "GetXruns") == 0)
++ {
++ type = DBUS_TYPE_UINT32;
++ arg.uint32 = (uint32_t)jackctl_server_get_xruns(controller_ptr->server);
++ }
++ else if (strcmp (call->method_name, "GetSampleRate") == 0)
++ {
++ if (!controller_ptr->started)
++ {
++ goto not_started;
++ }
++
++ type = DBUS_TYPE_UINT32;
++ arg.uint32 = (uint32_t)jackctl_server_get_sample_rate(controller_ptr->server);
++ }
++ else if (strcmp (call->method_name, "GetLatency") == 0)
++ {
++ if (!controller_ptr->started)
++ {
++ goto not_started;
++ }
++
++ type = DBUS_TYPE_DOUBLE;
++ arg.doubl = jackctl_server_get_latency(controller_ptr->server);
++ }
++ else if (strcmp (call->method_name, "GetBufferSize") == 0)
++ {
++ if (!controller_ptr->started)
++ {
++ goto not_started;
++ }
++
++ type = DBUS_TYPE_UINT32;
++ arg.uint32 = jackctl_server_get_buffer_size(controller_ptr->server);
++ }
++ else if (strcmp (call->method_name, "SetBufferSize") == 0)
++ {
++ dbus_uint32_t buffer_size;
++
++ if (!controller_ptr->started)
++ {
++ goto not_started;
++ }
++
++ if (!jack_dbus_get_method_args(call, DBUS_TYPE_UINT32, &buffer_size, DBUS_TYPE_INVALID))
++ {
++ /* jack_dbus_get_method_args() has set reply for us */
++ goto exit;
++ }
++
++ if (!jackctl_server_set_buffer_size(controller_ptr->server, buffer_size))
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_GENERIC,
++ "jackctl_server_set_buffer_size() failed.");
++
++ goto exit;
++ }
++ }
++ else if (strcmp (call->method_name, "IsRealtime") == 0)
++ {
++ type = DBUS_TYPE_BOOLEAN;
++ arg.boolean = (dbus_bool_t) (jackctl_server_is_realtime(controller_ptr->server) ? TRUE : FALSE);
++ }
++ else if (strcmp (call->method_name, "ResetXruns") == 0)
++ {
++ jackctl_server_reset_xruns(controller_ptr->server);
++ }
++ else
++ {
++ return false;
++ }
++
++ jack_dbus_construct_method_return_single(call, type, arg);
++
++ return true;
++
++not_started:
++ jack_dbus_error (call, JACK_DBUS_ERROR_SERVER_NOT_RUNNING,
++ "Can't execute this method with stopped JACK server");
++
++exit:
++ return true;
++}
++
++#undef controller_ptr
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(IsStarted)
++ JACK_DBUS_METHOD_ARGUMENT("started", "b", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(StartServer)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(StopServer)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetLoad)
++ JACK_DBUS_METHOD_ARGUMENT("load", "d", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetXruns)
++ JACK_DBUS_METHOD_ARGUMENT("xruns_count", "u", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetSampleRate)
++ JACK_DBUS_METHOD_ARGUMENT("sample_rate", "u", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetLatency)
++ JACK_DBUS_METHOD_ARGUMENT("latency_ms", "d", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetBufferSize)
++ JACK_DBUS_METHOD_ARGUMENT("buffer_size_frames", "u", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(SetBufferSize)
++ JACK_DBUS_METHOD_ARGUMENT("buffer_size_frames", "u", false)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(IsRealtime)
++ JACK_DBUS_METHOD_ARGUMENT("realtime", "b", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(ResetXruns)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++static
++const struct jack_dbus_interface_method_descriptor g_jack_controller_control_iface_methods[] =
++{
++ JACK_DBUS_METHOD_DESCRIBE(IsStarted, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(StartServer, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(StopServer, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(GetLoad, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(GetXruns, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(GetSampleRate, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(GetLatency, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(GetBufferSize, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(SetBufferSize, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(IsRealtime, NULL)
++ JACK_DBUS_METHOD_DESCRIBE(ResetXruns, NULL)
++ JACK_DBUS_METHOD_DESCRIBE_END
++};
++
++struct jack_dbus_interface_descriptor g_jack_controller_iface_control =
++{
++ "org.jackaudio.JackControl",
++ jack_control_run_method,
++ g_jack_controller_control_iface_methods
++};
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_introspectable.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_introspectable.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_introspectable.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_introspectable.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,159 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007-2008 Nedko Arnaudov
++ Copyright (C) 2007-2008 Juuso Alasuutari
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <config.h>
++
++#include <stdint.h>
++#include <string.h>
++#include <stdio.h>
++#include <assert.h>
++#include <dbus/dbus.h>
++
++#include "jackdbus.h"
++
++static char g_xml_data[102400];
++
++static
++void
++jack_controller_dbus_introspect(
++ struct jack_dbus_method_call * call)
++{
++ jack_dbus_construct_method_return_single(
++ call,
++ DBUS_TYPE_STRING,
++ (message_arg_t)(const char *)g_xml_data);
++}
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(Introspect)
++ JACK_DBUS_METHOD_ARGUMENT("xml_data", "s", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++static
++const struct jack_dbus_interface_method_descriptor g_jack_controller_introspectable_iface_methods[] =
++{
++ JACK_DBUS_METHOD_DESCRIBE(Introspect, jack_controller_dbus_introspect)
++ JACK_DBUS_METHOD_DESCRIBE_END
++};
++
++JACK_DBUS_IFACE_DESCRIBE(
++ g_jack_controller_iface_introspectable,
++ "org.freedesktop.DBus.Introspectable",
++ g_jack_controller_introspectable_iface_methods,
++ NULL);
++
++static char * g_buffer_ptr;
++
++static
++void
++write_line_format(const char * format, ...)
++{
++ va_list ap;
++
++ va_start(ap, format);
++ g_buffer_ptr += vsprintf(g_buffer_ptr, format, ap);
++ va_end(ap);
++}
++
++static
++void
++write_line(const char * line)
++{
++ write_line_format("%s\n", line);
++}
++
++void jack_controller_introspect_init() __attribute__((constructor));
++
++void
++jack_controller_introspect_init()
++{
++ struct jack_dbus_interface_descriptor ** interface_ptr_ptr;
++ const struct jack_dbus_interface_method_descriptor * method_ptr;
++ const struct jack_dbus_interface_method_argument_descriptor * method_argument_ptr;
++ const struct jack_dbus_interface_signal_descriptor * signal_ptr;
++ const struct jack_dbus_interface_signal_argument_descriptor * signal_argument_ptr;
++
++ g_buffer_ptr = g_xml_data;
++
++ write_line("<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"");
++ write_line("\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">");
++
++ write_line("<node name=\"" JACK_CONTROLLER_OBJECT_PATH "\">");
++
++ interface_ptr_ptr = g_jackcontroller_interfaces;
++
++ while (*interface_ptr_ptr != NULL)
++ {
++ write_line_format(" <interface name=\"%s\">\n", (*interface_ptr_ptr)->name);
++
++ if ((*interface_ptr_ptr)->methods != NULL)
++ {
++ method_ptr = (*interface_ptr_ptr)->methods;
++ while (method_ptr->name != NULL)
++ {
++ write_line_format(" <method name=\"%s\">\n", method_ptr->name);
++
++ method_argument_ptr = method_ptr->arguments;
++
++ while (method_argument_ptr->name != NULL)
++ {
++ write_line_format(
++ " <arg name=\"%s\" type=\"%s\" direction=\"%s\" />\n",
++ method_argument_ptr->name,
++ method_argument_ptr->type,
++ method_argument_ptr->direction_out ? "out" : "in");
++ method_argument_ptr++;
++ }
++
++ write_line(" </method>");
++ method_ptr++;
++ }
++ }
++
++ if ((*interface_ptr_ptr)->signals != NULL)
++ {
++ signal_ptr = (*interface_ptr_ptr)->signals;
++ while (signal_ptr->name != NULL)
++ {
++ write_line_format(" <signal name=\"%s\">\n", signal_ptr->name);
++
++ signal_argument_ptr = signal_ptr->arguments;
++
++ while (signal_argument_ptr->name != NULL)
++ {
++ write_line_format(
++ " <arg name=\"%s\" type=\"%s\" />\n",
++ signal_argument_ptr->name,
++ signal_argument_ptr->type);
++ signal_argument_ptr++;
++ }
++
++ write_line(" </signal>");
++ signal_ptr++;
++ }
++ }
++
++ write_line(" </interface>");
++ interface_ptr_ptr++;
++ }
++
++ write_line("</node>");
++
++ *g_buffer_ptr = 0;
++}
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_patchbay.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_patchbay.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_patchbay.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_patchbay.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,1262 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <config.h>
++
++#include <stdint.h>
++#include <string.h>
++#include <stdio.h>
++#include <assert.h>
++#include <dbus/dbus.h>
++
++#include <jack/internal.h>
++
++#include "jackdbus.h"
++#include "jackcontroller_internal.h"
++#include "../jack/list.h"
++
++#define JACK_DBUS_IFACE_NAME "org.jackaudio.JackPatchbay"
++
++struct jack_graph
++{
++ uint64_t version;
++ struct list_head clients;
++ struct list_head ports;
++ struct list_head connections;
++};
++
++struct jack_graph_client
++{
++ uint64_t id;
++ char * name;
++ int pid;
++ struct list_head siblings;
++ struct list_head ports;
++};
++
++struct jack_graph_port
++{
++ uint64_t id;
++ char * name;
++ uint32_t flags;
++ uint32_t type;
++ struct list_head siblings_graph;
++ struct list_head siblings_client;
++ struct jack_graph_client * client;
++};
++
++struct jack_graph_connection
++{
++ uint64_t id;
++ struct jack_graph_port * port1;
++ struct jack_graph_port * port2;
++ struct list_head siblings;
++};
++
++struct jack_controller_patchbay
++{
++ pthread_mutex_t lock;
++ struct jack_graph graph;
++};
++
++bool
++jack_controller_patchbay_init(
++ struct jack_controller * controller_ptr)
++{
++ struct jack_controller_patchbay * patchbay_ptr;
++
++ //jack_info("jack_controller_patchbay_init() called");
++
++ patchbay_ptr = malloc(sizeof(struct jack_controller_patchbay));
++ if (patchbay_ptr == NULL)
++ {
++ jack_error("Memory allocation of jack_controller_patchbay structure failed.");
++ return false;
++ }
++
++ pthread_mutex_init(&patchbay_ptr->lock, NULL);
++ INIT_LIST_HEAD(&patchbay_ptr->graph.clients);
++ INIT_LIST_HEAD(&patchbay_ptr->graph.ports);
++ INIT_LIST_HEAD(&patchbay_ptr->graph.connections);
++ patchbay_ptr->graph.version = 1;
++
++ controller_ptr->patchbay_context = patchbay_ptr;
++
++ return true;
++}
++
++void
++jack_controller_patchbay_send_signal_graph_changed(
++ dbus_uint64_t new_graph_version)
++{
++
++ jack_dbus_send_signal(
++ JACK_CONTROLLER_OBJECT_PATH,
++ JACK_DBUS_IFACE_NAME,
++ "GraphChanged",
++ DBUS_TYPE_UINT64,
++ &new_graph_version,
++ DBUS_TYPE_INVALID);
++}
++
++void
++jack_controller_patchbay_send_signal_client_appeared(
++ dbus_uint64_t new_graph_version,
++ dbus_uint64_t client_id,
++ const char * client_name)
++{
++
++ jack_dbus_send_signal(
++ JACK_CONTROLLER_OBJECT_PATH,
++ JACK_DBUS_IFACE_NAME,
++ "ClientAppeared",
++ DBUS_TYPE_UINT64,
++ &new_graph_version,
++ DBUS_TYPE_UINT64,
++ &client_id,
++ DBUS_TYPE_STRING,
++ &client_name,
++ DBUS_TYPE_INVALID);
++}
++
++void
++jack_controller_patchbay_send_signal_client_disappeared(
++ dbus_uint64_t new_graph_version,
++ dbus_uint64_t client_id,
++ const char * client_name)
++{
++
++ jack_dbus_send_signal(
++ JACK_CONTROLLER_OBJECT_PATH,
++ JACK_DBUS_IFACE_NAME,
++ "ClientDisappeared",
++ DBUS_TYPE_UINT64,
++ &new_graph_version,
++ DBUS_TYPE_UINT64,
++ &client_id,
++ DBUS_TYPE_STRING,
++ &client_name,
++ DBUS_TYPE_INVALID);
++}
++
++void
++jack_controller_patchbay_send_signal_port_appeared(
++ dbus_uint64_t new_graph_version,
++ dbus_uint64_t client_id,
++ const char * client_name,
++ dbus_uint64_t port_id,
++ const char * port_name,
++ dbus_uint32_t port_flags,
++ dbus_uint32_t port_type)
++{
++
++ jack_dbus_send_signal(
++ JACK_CONTROLLER_OBJECT_PATH,
++ JACK_DBUS_IFACE_NAME,
++ "PortAppeared",
++ DBUS_TYPE_UINT64,
++ &new_graph_version,
++ DBUS_TYPE_UINT64,
++ &client_id,
++ DBUS_TYPE_STRING,
++ &client_name,
++ DBUS_TYPE_UINT64,
++ &port_id,
++ DBUS_TYPE_STRING,
++ &port_name,
++ DBUS_TYPE_UINT32,
++ &port_flags,
++ DBUS_TYPE_UINT32,
++ &port_type,
++ DBUS_TYPE_INVALID);
++}
++
++void
++jack_controller_patchbay_send_signal_port_disappeared(
++ dbus_uint64_t new_graph_version,
++ dbus_uint64_t client_id,
++ const char * client_name,
++ dbus_uint64_t port_id,
++ const char * port_name)
++{
++
++ jack_dbus_send_signal(
++ JACK_CONTROLLER_OBJECT_PATH,
++ JACK_DBUS_IFACE_NAME,
++ "PortDisappeared",
++ DBUS_TYPE_UINT64,
++ &new_graph_version,
++ DBUS_TYPE_UINT64,
++ &client_id,
++ DBUS_TYPE_STRING,
++ &client_name,
++ DBUS_TYPE_UINT64,
++ &port_id,
++ DBUS_TYPE_STRING,
++ &port_name,
++ DBUS_TYPE_INVALID);
++}
++
++void
++jack_controller_patchbay_send_signal_ports_connected(
++ dbus_uint64_t new_graph_version,
++ dbus_uint64_t client1_id,
++ const char * client1_name,
++ dbus_uint64_t port1_id,
++ const char * port1_name,
++ dbus_uint64_t client2_id,
++ const char * client2_name,
++ dbus_uint64_t port2_id,
++ const char * port2_name,
++ dbus_uint64_t connection_id)
++{
++
++ jack_dbus_send_signal(
++ JACK_CONTROLLER_OBJECT_PATH,
++ JACK_DBUS_IFACE_NAME,
++ "PortsConnected",
++ DBUS_TYPE_UINT64,
++ &new_graph_version,
++ DBUS_TYPE_UINT64,
++ &client1_id,
++ DBUS_TYPE_STRING,
++ &client1_name,
++ DBUS_TYPE_UINT64,
++ &port1_id,
++ DBUS_TYPE_STRING,
++ &port1_name,
++ DBUS_TYPE_UINT64,
++ &client2_id,
++ DBUS_TYPE_STRING,
++ &client2_name,
++ DBUS_TYPE_UINT64,
++ &port2_id,
++ DBUS_TYPE_STRING,
++ &port2_name,
++ DBUS_TYPE_UINT64,
++ &connection_id,
++ DBUS_TYPE_INVALID);
++}
++
++void
++jack_controller_patchbay_send_signal_ports_disconnected(
++ dbus_uint64_t new_graph_version,
++ dbus_uint64_t client1_id,
++ const char * client1_name,
++ dbus_uint64_t port1_id,
++ const char * port1_name,
++ dbus_uint64_t client2_id,
++ const char * client2_name,
++ dbus_uint64_t port2_id,
++ const char * port2_name,
++ dbus_uint64_t connection_id)
++{
++
++ jack_dbus_send_signal(
++ JACK_CONTROLLER_OBJECT_PATH,
++ JACK_DBUS_IFACE_NAME,
++ "PortsDisconnected",
++ DBUS_TYPE_UINT64,
++ &new_graph_version,
++ DBUS_TYPE_UINT64,
++ &client1_id,
++ DBUS_TYPE_STRING,
++ &client1_name,
++ DBUS_TYPE_UINT64,
++ &port1_id,
++ DBUS_TYPE_STRING,
++ &port1_name,
++ DBUS_TYPE_UINT64,
++ &client2_id,
++ DBUS_TYPE_STRING,
++ &client2_name,
++ DBUS_TYPE_UINT64,
++ &port2_id,
++ DBUS_TYPE_STRING,
++ &port2_name,
++ DBUS_TYPE_UINT64,
++ &connection_id,
++ DBUS_TYPE_INVALID);
++}
++
++static
++struct jack_graph_client *
++jack_controller_patchbay_find_client_by_id(
++ struct jack_controller_patchbay *patchbay_ptr,
++ uint64_t id)
++{
++ struct list_head *node_ptr;
++ struct jack_graph_client *client_ptr;
++
++ list_for_each(node_ptr, &patchbay_ptr->graph.clients)
++ {
++ client_ptr = list_entry(node_ptr, struct jack_graph_client, siblings);
++ if (client_ptr->id == id)
++ {
++ return client_ptr;
++ }
++ }
++
++ return NULL;
++}
++
++#define patchbay_ptr ((struct jack_controller_patchbay *)((struct jack_controller *)server_context)->patchbay_context)
++
++void *
++jack_controller_patchbay_client_appeared_callback(
++ void * server_context,
++ uint64_t client_id,
++ const char * client_name)
++{
++ struct jack_graph_client * client_ptr;
++
++/* jack_info("new client: '%s' (%" PRIu64 ")", client_name, client_id); */
++
++ client_ptr = malloc(sizeof(struct jack_graph_client));
++ if (client_ptr == NULL)
++ {
++ jack_error("Memory allocation of jack_graph_client structure failed.");
++ goto fail;
++ }
++
++ client_ptr->name = strdup(client_name);
++ if (client_ptr->name == NULL)
++ {
++ jack_error("strdup() call for client name '%s' failed.", client_name);
++ goto fail_free_client;
++ }
++
++ client_ptr->id = client_id;
++ INIT_LIST_HEAD(&client_ptr->ports);
++
++ client_ptr->pid = jackctl_get_client_pid(server_context, client_ptr->name);
++ jack_info("New client '%s' with PID %d", client_ptr->name, client_ptr->pid);
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++ list_add_tail(&client_ptr->siblings, &patchbay_ptr->graph.clients);
++ patchbay_ptr->graph.version++;
++ jack_controller_patchbay_send_signal_client_appeared(patchbay_ptr->graph.version, client_id, client_name);
++ jack_controller_patchbay_send_signal_graph_changed(patchbay_ptr->graph.version);
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++ return client_ptr;
++
++fail_free_client:
++ free(client_ptr);
++
++fail:
++ return NULL;
++}
++
++#define client_ptr ((struct jack_graph_client *)client_context)
++
++void
++jack_controller_patchbay_client_disappeared_callback(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context)
++{
++/* jack_info("client %" PRIu64 " gone", client_id); */
++
++ if (client_ptr == NULL)
++ {
++ jack_error("Ignoring disappear of client that failed to appear.");
++ return;
++ }
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++ list_del(&client_ptr->siblings);
++ patchbay_ptr->graph.version++;
++ jack_controller_patchbay_send_signal_client_disappeared(patchbay_ptr->graph.version, client_id, client_ptr->name);
++ jack_controller_patchbay_send_signal_graph_changed(patchbay_ptr->graph.version);
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++ free(client_ptr->name);
++ free(client_ptr);
++}
++
++void *
++jack_controller_patchbay_port_appeared_callback(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context,
++ uint64_t port_id,
++ const char * port_name,
++ uint32_t port_flags,
++ uint32_t port_type)
++{
++ struct jack_graph_port * port_ptr;
++
++/* jack_info( */
++/* "new port: '%s' (%" PRIu64 "), flags 0x%" PRIX32 ", type %" PRIu32 ", of client %" PRIu64, */
++/* port_name, */
++/* port_id, */
++/* port_flags, */
++/* port_type, */
++/* client_id); */
++
++ port_ptr = malloc(sizeof(struct jack_graph_port));
++ if (port_ptr == NULL)
++ {
++ jack_error("Memory allocation of jack_graph_port structure failed.");
++ goto fail;
++ }
++
++ port_ptr->name = strdup(port_name);
++ if (port_ptr->name == NULL)
++ {
++ jack_error("strdup() call for port name '%s' failed.", port_name);
++ goto fail_free_client;
++ }
++
++ port_ptr->id = port_id;
++ port_ptr->flags = port_flags;
++ port_ptr->type = port_type;
++ port_ptr->client = client_ptr;
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++ list_add_tail(&port_ptr->siblings_client, &client_ptr->ports);
++ list_add_tail(&port_ptr->siblings_graph, &patchbay_ptr->graph.ports);
++ patchbay_ptr->graph.version++;
++ jack_controller_patchbay_send_signal_port_appeared(
++ patchbay_ptr->graph.version,
++ client_id,
++ client_ptr->name,
++ port_id,
++ port_name,
++ port_flags,
++ port_type);
++ jack_controller_patchbay_send_signal_graph_changed(patchbay_ptr->graph.version);
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++ return port_ptr;
++
++fail_free_client:
++ free(port_ptr);
++
++fail:
++ return NULL;
++}
++
++#define port_ptr ((struct jack_graph_port *)port_context)
++
++void
++jack_controller_patchbay_port_disappeared_callback(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context,
++ uint64_t port_id,
++ void * port_context)
++{
++/* jack_info("port %" PRIu64 " of client %" PRIu64 " gone", port_id, client_id); */
++
++ if (port_ptr == NULL)
++ {
++ jack_error("Ignoring disappear of port that failed to appear.");
++ return;
++ }
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++ list_del(&port_ptr->siblings_client);
++ list_del(&port_ptr->siblings_graph);
++ patchbay_ptr->graph.version++;
++ jack_controller_patchbay_send_signal_port_disappeared(patchbay_ptr->graph.version, client_id, client_ptr->name, port_id, port_ptr->name);
++ jack_controller_patchbay_send_signal_graph_changed(patchbay_ptr->graph.version);
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++ free(port_ptr->name);
++ free(port_ptr);
++}
++
++#undef port_ptr
++#undef client_ptr
++
++#define port1_ptr ((struct jack_graph_port *)port1_context)
++#define port2_ptr ((struct jack_graph_port *)port2_context)
++
++void *
++jack_controller_patchbay_ports_connected_callback(
++ void * server_context,
++ uint64_t client1_id,
++ void * client1_context,
++ uint64_t port1_id,
++ void * port1_context,
++ uint64_t client2_id,
++ void * client2_context,
++ uint64_t port2_id,
++ void * port2_context,
++ uint64_t connection_id)
++{
++ struct jack_graph_connection * connection_ptr;
++
++/* jack_info( */
++/* "connected: '%s' (%" PRIu64 "), of client %" PRIu64 " and '%s' (%" PRIu64 "), of client %" PRIu64, */
++/* port1_ptr->name, */
++/* port1_id, */
++/* client1_id, */
++/* port2_ptr->name, */
++/* port2_id, */
++/* client2_id); */
++
++ connection_ptr = malloc(sizeof(struct jack_graph_connection));
++ if (connection_ptr == NULL)
++ {
++ jack_error("Memory allocation of jack_graph_connection structure failed.");
++ return NULL;
++ }
++
++ connection_ptr->id = connection_id;
++ connection_ptr->port1 = port1_ptr;
++ connection_ptr->port2 = port2_ptr;
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++ list_add_tail(&connection_ptr->siblings, &patchbay_ptr->graph.connections);
++ patchbay_ptr->graph.version++;
++ jack_controller_patchbay_send_signal_ports_connected(
++ patchbay_ptr->graph.version,
++ client1_id,
++ port1_ptr->client->name,
++ port1_id,
++ port1_ptr->name,
++ client2_id,
++ port2_ptr->client->name,
++ port2_id,
++ port2_ptr->name,
++ connection_id);
++ jack_controller_patchbay_send_signal_graph_changed(patchbay_ptr->graph.version);
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++ return connection_ptr;
++}
++
++#define connection_ptr ((struct jack_graph_connection *)connection_context)
++
++void
++jack_controller_patchbay_ports_disconnected_callback(
++ void * server_context,
++ uint64_t client1_id,
++ void * client1_context,
++ uint64_t port1_id,
++ void * port1_context,
++ uint64_t client2_id,
++ void * client2_context,
++ uint64_t port2_id,
++ void * port2_context,
++ uint64_t connection_id,
++ void * connection_context)
++{
++/* jack_info( */
++/* "disconnected: '%s' (%" PRIu64 "), of client %" PRIu64 " and '%s' (%" PRIu64 "), of client %" PRIu64, */
++/* port1_ptr->name, */
++/* port1_id, */
++/* client1_id, */
++/* port2_ptr->name, */
++/* port2_id, */
++/* client2_id); */
++
++ if (connection_ptr == NULL)
++ {
++ jack_error("Ignoring removal of connection that failed to appear.");
++ return;
++ }
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++ list_del(&connection_ptr->siblings);
++ patchbay_ptr->graph.version++;
++ jack_controller_patchbay_send_signal_ports_disconnected(
++ patchbay_ptr->graph.version,
++ client1_id,
++ port1_ptr->client->name,
++ port1_id,
++ port1_ptr->name,
++ client2_id,
++ port2_ptr->client->name,
++ port2_id,
++ port2_ptr->name,
++ connection_id);
++ jack_controller_patchbay_send_signal_graph_changed(patchbay_ptr->graph.version);
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++ free(connection_ptr);
++}
++
++#undef connection_ptr
++#undef port1_ptr
++#undef port2_ptr
++#undef patchbay_ptr
++
++#define controller_ptr ((struct jack_controller *)call->context)
++#define patchbay_ptr ((struct jack_controller_patchbay *)controller_ptr->patchbay_context)
++
++static
++void
++jack_controller_dbus_get_all_ports(
++ struct jack_dbus_method_call * call)
++{
++ struct list_head * client_node_ptr;
++ struct list_head * port_node_ptr;
++ struct jack_graph_client * client_ptr;
++ struct jack_graph_port * port_ptr;
++ DBusMessageIter iter, sub_iter;
++ char fullname[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE];
++ char *fullname_var = fullname;
++
++ call->reply = dbus_message_new_method_return (call->message);
++ if (!call->reply)
++ {
++ goto fail;
++ }
++
++ dbus_message_iter_init_append (call->reply, &iter);
++
++ if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "s", &sub_iter))
++ {
++ goto fail_unref;
++ }
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++
++ list_for_each(client_node_ptr, &patchbay_ptr->graph.clients)
++ {
++ client_ptr = list_entry(client_node_ptr, struct jack_graph_client, siblings);
++
++ list_for_each(port_node_ptr, &client_ptr->ports)
++ {
++ port_ptr = list_entry(port_node_ptr, struct jack_graph_port, siblings_client);
++
++ jack_info("%s:%s", client_ptr->name, port_ptr->name);
++ sprintf(fullname, "%s:%s", client_ptr->name, port_ptr->name);
++ if (!dbus_message_iter_append_basic (&sub_iter, DBUS_TYPE_STRING, &fullname_var))
++ {
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++ dbus_message_iter_close_container (&iter, &sub_iter);
++ goto fail_unref;
++ }
++ }
++ }
++
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++ if (!dbus_message_iter_close_container (&iter, &sub_iter))
++ {
++ goto fail_unref;
++ }
++
++ return;
++
++fail_unref:
++ dbus_message_unref (call->reply);
++ call->reply = NULL;
++
++fail:
++ jack_error ("Ran out of memory trying to construct method return");
++}
++
++static
++void
++jack_controller_dbus_get_graph(
++ struct jack_dbus_method_call * call)
++{
++ struct list_head * client_node_ptr;
++ struct list_head * port_node_ptr;
++ struct list_head * connection_node_ptr;
++ struct jack_graph_client * client_ptr;
++ struct jack_graph_port * port_ptr;
++ struct jack_graph_connection * connection_ptr;
++ DBusMessageIter iter;
++ DBusMessageIter clients_array_iter;
++ DBusMessageIter client_struct_iter;
++ DBusMessageIter ports_array_iter;
++ DBusMessageIter port_struct_iter;
++ dbus_uint64_t version;
++ DBusMessageIter connections_array_iter;
++ DBusMessageIter connection_struct_iter;
++
++ if (!jack_dbus_get_method_args(call, DBUS_TYPE_UINT64, &version, DBUS_TYPE_INVALID))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_dbus_get_method_args() has constructed an error for us.
++ */
++ goto exit;
++ }
++
++ //jack_info("Getting graph, know version is %" PRIu32, version);
++
++ call->reply = dbus_message_new_method_return(call->message);
++ if (!call->reply)
++ {
++ jack_error("Ran out of memory trying to construct method return");
++ goto exit;
++ }
++
++ dbus_message_iter_init_append (call->reply, &iter);
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++
++ if (version > patchbay_ptr->graph.version)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_INVALID_ARGS,
++ "known graph version %" PRIu64 " is newer than actual version %" PRIu64,
++ version,
++ patchbay_ptr->graph.version);
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++ goto exit;
++ }
++
++ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT64, &patchbay_ptr->graph.version))
++ {
++ goto nomem_unlock;
++ }
++
++ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(tsa(tsuu))", &clients_array_iter))
++ {
++ goto nomem_unlock;
++ }
++
++ if (version < patchbay_ptr->graph.version)
++ {
++ list_for_each(client_node_ptr, &patchbay_ptr->graph.clients)
++ {
++ client_ptr = list_entry(client_node_ptr, struct jack_graph_client, siblings);
++
++ if (!dbus_message_iter_open_container (&clients_array_iter, DBUS_TYPE_STRUCT, NULL, &client_struct_iter))
++ {
++ goto nomem_close_clients_array;
++ }
++
++ if (!dbus_message_iter_append_basic(&client_struct_iter, DBUS_TYPE_UINT64, &client_ptr->id))
++ {
++ goto nomem_close_client_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&client_struct_iter, DBUS_TYPE_STRING, &client_ptr->name))
++ {
++ goto nomem_close_client_struct;
++ }
++
++ if (!dbus_message_iter_open_container(&client_struct_iter, DBUS_TYPE_ARRAY, "(tsuu)", &ports_array_iter))
++ {
++ goto nomem_close_client_struct;
++ }
++
++ list_for_each(port_node_ptr, &client_ptr->ports)
++ {
++ port_ptr = list_entry(port_node_ptr, struct jack_graph_port, siblings_client);
++
++ if (!dbus_message_iter_open_container(&ports_array_iter, DBUS_TYPE_STRUCT, NULL, &port_struct_iter))
++ {
++ goto nomem_close_ports_array;
++ }
++
++ if (!dbus_message_iter_append_basic(&port_struct_iter, DBUS_TYPE_UINT64, &port_ptr->id))
++ {
++ goto nomem_close_port_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&port_struct_iter, DBUS_TYPE_STRING, &port_ptr->name))
++ {
++ goto nomem_close_port_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&port_struct_iter, DBUS_TYPE_UINT32, &port_ptr->flags))
++ {
++ goto nomem_close_port_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&port_struct_iter, DBUS_TYPE_UINT32, &port_ptr->type))
++ {
++ goto nomem_close_port_struct;
++ }
++
++ if (!dbus_message_iter_close_container(&ports_array_iter, &port_struct_iter))
++ {
++ goto nomem_close_ports_array;
++ }
++ }
++
++ if (!dbus_message_iter_close_container(&client_struct_iter, &ports_array_iter))
++ {
++ goto nomem_close_client_struct;
++ }
++
++ if (!dbus_message_iter_close_container(&clients_array_iter, &client_struct_iter))
++ {
++ goto nomem_close_clients_array;
++ }
++ }
++ }
++
++ if (!dbus_message_iter_close_container(&iter, &clients_array_iter))
++ {
++ goto nomem_unlock;
++ }
++
++ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(tstststst)", &connections_array_iter))
++ {
++ goto nomem_unlock;
++ }
++
++ if (version < patchbay_ptr->graph.version)
++ {
++ list_for_each(connection_node_ptr, &patchbay_ptr->graph.connections)
++ {
++ connection_ptr = list_entry(connection_node_ptr, struct jack_graph_connection, siblings);
++
++ if (!dbus_message_iter_open_container(&connections_array_iter, DBUS_TYPE_STRUCT, NULL, &connection_struct_iter))
++ {
++ goto nomem_close_connections_array;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_UINT64, &connection_ptr->port1->client->id))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_STRING, &connection_ptr->port1->client->name))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_UINT64, &connection_ptr->port1->id))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_STRING, &connection_ptr->port1->name))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_UINT64, &connection_ptr->port2->client->id))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_STRING, &connection_ptr->port2->client->name))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_UINT64, &connection_ptr->port2->id))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_STRING, &connection_ptr->port2->name))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_append_basic(&connection_struct_iter, DBUS_TYPE_UINT64, &connection_ptr->id))
++ {
++ goto nomem_close_connection_struct;
++ }
++
++ if (!dbus_message_iter_close_container(&connections_array_iter, &connection_struct_iter))
++ {
++ goto nomem_close_connections_array;
++ }
++ }
++ }
++
++ if (!dbus_message_iter_close_container(&iter, &connections_array_iter))
++ {
++ goto nomem_unlock;
++ }
++
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++ return;
++
++nomem_close_connection_struct:
++ dbus_message_iter_close_container(&connections_array_iter, &connection_struct_iter);
++
++nomem_close_connections_array:
++ dbus_message_iter_close_container(&iter, &connections_array_iter);
++ goto nomem_unlock;
++
++nomem_close_port_struct:
++ dbus_message_iter_close_container(&ports_array_iter, &port_struct_iter);
++
++nomem_close_ports_array:
++ dbus_message_iter_close_container(&client_struct_iter, &ports_array_iter);
++
++nomem_close_client_struct:
++ dbus_message_iter_close_container(&clients_array_iter, &client_struct_iter);
++
++nomem_close_clients_array:
++ dbus_message_iter_close_container(&iter, &clients_array_iter);
++
++nomem_unlock:
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++
++//nomem:
++ dbus_message_unref(call->reply);
++ call->reply = NULL;
++ jack_error("Ran out of memory trying to construct method return");
++
++exit:
++ return;
++}
++
++static
++void
++jack_controller_dbus_connect_ports_by_name(
++ struct jack_dbus_method_call * call)
++{
++ const char * client1_name;
++ const char * port1_name;
++ const char * client2_name;
++ const char * port2_name;
++
++/* jack_info("jack_controller_dbus_connect_ports_by_name() called."); */
++
++ if (!controller_ptr->started)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_SERVER_NOT_RUNNING,
++ "Can't execute this method with stopped JACK server");
++ return;
++ }
++
++ if (!jack_dbus_get_method_args(
++ call,
++ DBUS_TYPE_STRING,
++ &client1_name,
++ DBUS_TYPE_STRING,
++ &port1_name,
++ DBUS_TYPE_STRING,
++ &client2_name,
++ DBUS_TYPE_STRING,
++ &port2_name,
++ DBUS_TYPE_INVALID))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_dbus_get_method_args() has constructed an error for us.
++ */
++ return;
++ }
++
++/* jack_info("connecting %s:%s and %s:%s", client1_name, port1_name, client2_name, port2_name); */
++
++ if (!jackctl_connect_ports_by_name(
++ controller_ptr->server,
++ client1_name,
++ port1_name,
++ client2_name,
++ port2_name))
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_GENERIC,
++ "jackctl_connect_ports_by_name() failed.");
++ return;
++ }
++
++ jack_dbus_construct_method_return_empty(call);
++}
++
++static
++void
++jack_controller_dbus_connect_ports_by_id(
++ struct jack_dbus_method_call * call)
++{
++ jack_info("jack_controller_dbus_connect_ports_by_id() called.");
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_GENERIC,
++ "This method is not implemented yet");
++}
++
++static
++void
++jack_controller_dbus_disconnect_ports_by_name(
++ struct jack_dbus_method_call * call)
++{
++ const char * client1_name;
++ const char * port1_name;
++ const char * client2_name;
++ const char * port2_name;
++
++/* jack_info("jack_controller_dbus_disconnect_ports_by_name() called."); */
++
++ if (!controller_ptr->started)
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_SERVER_NOT_RUNNING,
++ "Can't execute this method with stopped JACK server");
++ return;
++ }
++
++ if (!jack_dbus_get_method_args(
++ call,
++ DBUS_TYPE_STRING,
++ &client1_name,
++ DBUS_TYPE_STRING,
++ &port1_name,
++ DBUS_TYPE_STRING,
++ &client2_name,
++ DBUS_TYPE_STRING,
++ &port2_name,
++ DBUS_TYPE_INVALID))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_dbus_get_method_args() has constructed an error for us.
++ */
++ return;
++ }
++
++/* jack_info("disconnecting %s:%s and %s:%s", client1_name, port1_name, client2_name, port2_name); */
++
++ if (!jackctl_disconnect_ports_by_name(
++ controller_ptr->server,
++ client1_name,
++ port1_name,
++ client2_name,
++ port2_name))
++ {
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_GENERIC,
++ "jackctl_disconnect_ports_by_name() failed.");
++ return;
++ }
++
++ jack_dbus_construct_method_return_empty(call);
++}
++
++static
++void
++jack_controller_dbus_disconnect_ports_by_id(
++ struct jack_dbus_method_call * call)
++{
++ jack_info("jack_controller_dbus_disconnect_ports_by_id() called.");
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_GENERIC,
++ "This method is not implemented yet");
++}
++
++static
++void
++jack_controller_dbus_disconnect_ports_by_connection_id(
++ struct jack_dbus_method_call * call)
++{
++ jack_info("jack_controller_dbus_disconnect_ports_by_id() called.");
++
++ jack_dbus_error(
++ call,
++ JACK_DBUS_ERROR_GENERIC,
++ "This method is not implemented yet");
++}
++
++static
++void
++jack_controller_dbus_get_client_pid(
++ struct jack_dbus_method_call * call)
++{
++ dbus_uint64_t client_id;
++ struct jack_graph_client *client_ptr;
++ message_arg_t arg;
++
++/* jack_info("jack_controller_dbus_get_client_pid() called."); */
++
++ if (!jack_dbus_get_method_args(
++ call,
++ DBUS_TYPE_UINT64,
++ &client_id,
++ DBUS_TYPE_INVALID))
++ {
++ /* The method call had invalid arguments meaning that
++ * jack_dbus_get_method_args() has constructed an error for us.
++ */
++ return;
++ }
++
++ pthread_mutex_lock(&patchbay_ptr->lock);
++
++ client_ptr = jack_controller_patchbay_find_client_by_id(patchbay_ptr, client_id);
++ if (client_ptr == NULL)
++ {
++ jack_dbus_error(call, JACK_DBUS_ERROR_INVALID_ARGS, "cannot find client %" PRIu64, client_id);
++ goto unlock;
++ }
++
++ arg.int64 = client_ptr->pid;
++
++ jack_dbus_construct_method_return_single(call, DBUS_TYPE_INT64, arg);
++
++unlock:
++ pthread_mutex_unlock(&patchbay_ptr->lock);
++}
++
++#undef controller_ptr
++
++void
++jack_controller_patchbay_uninit(
++ struct jack_controller * controller_ptr)
++{
++ //jack_info("jack_controller_patchbay_uninit() called");
++
++ pthread_mutex_destroy(&patchbay_ptr->lock);
++}
++
++#undef patchbay_ptr
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetAllPorts)
++ JACK_DBUS_METHOD_ARGUMENT("ports_list", "as", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetGraph)
++ JACK_DBUS_METHOD_ARGUMENT("known_graph_version", DBUS_TYPE_UINT64_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("current_graph_version", DBUS_TYPE_UINT64_AS_STRING, true)
++ JACK_DBUS_METHOD_ARGUMENT("clients_and_ports", "a(tsa(tsuu))", true)
++ JACK_DBUS_METHOD_ARGUMENT("connections", "a(tstststst)", true)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(ConnectPortsByName)
++ JACK_DBUS_METHOD_ARGUMENT("client1_name", DBUS_TYPE_STRING_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("port1_name", DBUS_TYPE_STRING_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("client2_name", DBUS_TYPE_STRING_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("port2_name", DBUS_TYPE_STRING_AS_STRING, false)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(ConnectPortsByID)
++ JACK_DBUS_METHOD_ARGUMENT("port1_id", DBUS_TYPE_UINT64_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("port2_id", DBUS_TYPE_UINT64_AS_STRING, false)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(DisconnectPortsByName)
++ JACK_DBUS_METHOD_ARGUMENT("client1_name", DBUS_TYPE_STRING_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("port1_name", DBUS_TYPE_STRING_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("client2_name", DBUS_TYPE_STRING_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("port2_name", DBUS_TYPE_STRING_AS_STRING, false)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(DisconnectPortsByID)
++ JACK_DBUS_METHOD_ARGUMENT("port1_id", DBUS_TYPE_UINT64_AS_STRING, false)
++ JACK_DBUS_METHOD_ARGUMENT("port2_id", DBUS_TYPE_UINT64_AS_STRING, false)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(DisconnectPortsByConnectionID)
++ JACK_DBUS_METHOD_ARGUMENT("connection_id", DBUS_TYPE_UINT64_AS_STRING, false)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetClientPID)
++ JACK_DBUS_METHOD_ARGUMENT("client_id", DBUS_TYPE_INT64_AS_STRING, false)
++JACK_DBUS_METHOD_ARGUMENTS_END
++
++static
++const struct jack_dbus_interface_method_descriptor g_jack_controller_patchbay_iface_methods[] =
++{
++ JACK_DBUS_METHOD_DESCRIBE(GetAllPorts, jack_controller_dbus_get_all_ports)
++ JACK_DBUS_METHOD_DESCRIBE(GetGraph, jack_controller_dbus_get_graph)
++ JACK_DBUS_METHOD_DESCRIBE(ConnectPortsByName, jack_controller_dbus_connect_ports_by_name)
++ JACK_DBUS_METHOD_DESCRIBE(ConnectPortsByID, jack_controller_dbus_connect_ports_by_id)
++ JACK_DBUS_METHOD_DESCRIBE(DisconnectPortsByName, jack_controller_dbus_disconnect_ports_by_name)
++ JACK_DBUS_METHOD_DESCRIBE(DisconnectPortsByID, jack_controller_dbus_disconnect_ports_by_id)
++ JACK_DBUS_METHOD_DESCRIBE(DisconnectPortsByConnectionID, jack_controller_dbus_disconnect_ports_by_connection_id)
++ JACK_DBUS_METHOD_DESCRIBE(GetClientPID, jack_controller_dbus_get_client_pid)
++ JACK_DBUS_METHOD_DESCRIBE_END
++};
++
++JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(GraphChanged)
++ JACK_DBUS_SIGNAL_ARGUMENT("new_graph_version", DBUS_TYPE_UINT64_AS_STRING)
++JACK_DBUS_SIGNAL_ARGUMENTS_END
++
++JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(ClientAppeared)
++ JACK_DBUS_SIGNAL_ARGUMENT("new_graph_version", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client_name", DBUS_TYPE_STRING_AS_STRING)
++JACK_DBUS_SIGNAL_ARGUMENTS_END
++
++JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(ClientDisappeared)
++ JACK_DBUS_SIGNAL_ARGUMENT("new_graph_version", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client_name", DBUS_TYPE_STRING_AS_STRING)
++JACK_DBUS_SIGNAL_ARGUMENTS_END
++
++JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(PortAppeared)
++ JACK_DBUS_SIGNAL_ARGUMENT("new_graph_version", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port_flags", DBUS_TYPE_UINT32_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port_type", DBUS_TYPE_UINT32_AS_STRING)
++JACK_DBUS_SIGNAL_ARGUMENTS_END
++
++JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(PortDisappeared)
++ JACK_DBUS_SIGNAL_ARGUMENT("new_graph_version", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port_name", DBUS_TYPE_STRING_AS_STRING)
++JACK_DBUS_SIGNAL_ARGUMENTS_END
++
++JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(PortsConnected)
++ JACK_DBUS_SIGNAL_ARGUMENT("new_graph_version", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client1_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client1_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port1_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port1_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client2_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client2_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port2_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port2_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("connection_id", DBUS_TYPE_UINT64_AS_STRING)
++JACK_DBUS_SIGNAL_ARGUMENTS_END
++
++JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(PortsDisconnected)
++ JACK_DBUS_SIGNAL_ARGUMENT("new_graph_version", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client1_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client1_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port1_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port1_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client2_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("client2_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port2_id", DBUS_TYPE_UINT64_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("port2_name", DBUS_TYPE_STRING_AS_STRING)
++ JACK_DBUS_SIGNAL_ARGUMENT("connection_id", DBUS_TYPE_UINT64_AS_STRING)
++JACK_DBUS_SIGNAL_ARGUMENTS_END
++
++static
++const struct jack_dbus_interface_signal_descriptor g_jack_controller_patchbay_iface_signals[] =
++{
++ JACK_DBUS_SIGNAL_DESCRIBE(GraphChanged)
++ JACK_DBUS_SIGNAL_DESCRIBE(ClientAppeared)
++ JACK_DBUS_SIGNAL_DESCRIBE(ClientDisappeared)
++ JACK_DBUS_SIGNAL_DESCRIBE(PortAppeared)
++ JACK_DBUS_SIGNAL_DESCRIBE(PortDisappeared)
++ JACK_DBUS_SIGNAL_DESCRIBE(PortsConnected)
++ JACK_DBUS_SIGNAL_DESCRIBE(PortsDisconnected)
++ JACK_DBUS_SIGNAL_DESCRIBE_END
++};
++
++JACK_DBUS_IFACE_DESCRIBE(
++ g_jack_controller_iface_patchbay,
++ JACK_DBUS_IFACE_NAME,
++ g_jack_controller_patchbay_iface_methods,
++ g_jack_controller_patchbay_iface_signals);
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_transport.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_transport.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_iface_transport.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_iface_transport.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,40 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <config.h>
++
++#include <stdint.h>
++#include <string.h>
++#include <stdio.h>
++#include <assert.h>
++#include <dbus/dbus.h>
++
++#include "jackdbus.h"
++
++static
++const struct jack_dbus_interface_method_descriptor g_jack_controller_transport_iface_methods[] =
++{
++ JACK_DBUS_METHOD_DESCRIBE_END
++};
++
++JACK_DBUS_IFACE_DESCRIBE(
++ g_jack_controller_iface_transport,
++ "org.jackaudio.JackTransport",
++ g_jack_controller_transport_iface_methods,
++ NULL);
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_internal.h jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_internal.h
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_internal.h 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_internal.h 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,178 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++ Copyright (C) 2007-2008 Juuso Alasuutari
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#ifndef JACKCONTROLLER_INTERNAL_H__04D54D51_3D79_49A2_A1DA_F8587E9E7F42__INCLUDED
++#define JACKCONTROLLER_INTERNAL_H__04D54D51_3D79_49A2_A1DA_F8587E9E7F42__INCLUDED
++
++#include <stdbool.h>
++#include "jackctl.h"
++#include "jackdbus.h"
++
++struct jack_controller
++{
++ jackctl_server server;
++
++ void * patchbay_context;
++
++ bool started;
++
++ const char ** driver_names;
++ unsigned int drivers_count;
++
++ /* current driver, NULL if not driver is selected */
++ jackctl_driver driver;
++ bool driver_set;
++
++ struct jack_dbus_object_descriptor dbus_descriptor;
++};
++
++#define JACK_CONF_HEADER_TEXT \
++ "JACK settings, as persisted by D-Bus object.\n" \
++ "You probably don't want to edit this because\n" \
++ "it will be overwritten next time jackdbus saves.\n"
++
++jackctl_driver
++jack_controller_find_driver(
++ jackctl_server server,
++ const char * driver_name);
++
++jackctl_parameter
++jack_controller_find_parameter(
++ const JSList * parameters_list,
++ const char * parameter_name);
++
++bool
++jack_controller_start_server(
++ struct jack_controller * controller_ptr,
++ void *dbus_call_context_ptr);
++
++bool
++jack_controller_stop_server(
++ struct jack_controller * controller_ptr,
++ void *dbus_call_context_ptr);
++
++bool
++jack_controller_select_driver(
++ struct jack_controller * controller_ptr,
++ const char * driver_name);
++
++void
++jack_controller_settings_set_driver_option(
++ jackctl_driver driver,
++ const char *option_name,
++ const char *option_value);
++
++void
++jack_controller_settings_set_engine_option(
++ struct jack_controller *controller_ptr,
++ const char *option_name,
++ const char *option_value);
++
++bool
++jack_controller_settings_save_engine_options(
++ void *context,
++ struct jack_controller *controller_ptr,
++ void *dbus_call_context_ptr);
++
++bool
++jack_controller_settings_write_option(
++ void *context,
++ const char *name,
++ const char *content,
++ void *dbus_call_context_ptr);
++
++bool
++jack_controller_settings_save_driver_options(
++ void *context,
++ jackctl_driver driver,
++ void *dbus_call_context_ptr);
++
++bool
++jack_controller_patchbay_init(
++ struct jack_controller * controller_ptr);
++
++void
++jack_controller_patchbay_uninit(
++ struct jack_controller * controller_ptr);
++
++void *
++jack_controller_patchbay_client_appeared_callback(
++ void * server_context,
++ uint64_t client_id,
++ const char * client_name);
++
++void
++jack_controller_patchbay_client_disappeared_callback(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context);
++
++void *
++jack_controller_patchbay_port_appeared_callback(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context,
++ uint64_t port_id,
++ const char * port_name,
++ uint32_t port_flags,
++ uint32_t port_type);
++
++void
++jack_controller_patchbay_port_disappeared_callback(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context,
++ uint64_t port_id,
++ void * port_context);
++
++void *
++jack_controller_patchbay_ports_connected_callback(
++ void * server_context,
++ uint64_t client1_id,
++ void * client1_context,
++ uint64_t port1_id,
++ void * port1_context,
++ uint64_t client2_id,
++ void * client2_context,
++ uint64_t port2_id,
++ void * port2_context,
++ uint64_t connection_id);
++
++void
++jack_controller_patchbay_ports_disconnected_callback(
++ void * server_context,
++ uint64_t client1_id,
++ void * client1_context,
++ uint64_t port1_id,
++ void * port1_context,
++ uint64_t client2_id,
++ void * client2_context,
++ uint64_t port2_id,
++ void * port2_context,
++ uint64_t connection_id,
++ void * connection_context);
++
++extern struct jack_dbus_interface_descriptor g_jack_controller_iface_introspectable;
++extern struct jack_dbus_interface_descriptor g_jack_controller_iface_control;
++extern struct jack_dbus_interface_descriptor g_jack_controller_iface_configure;
++extern struct jack_dbus_interface_descriptor g_jack_controller_iface_patchbay;
++extern struct jack_dbus_interface_descriptor g_jack_controller_iface_transport;
++
++#endif /* #ifndef JACKCONTROLLER_INTERNAL_H__04D54D51_3D79_49A2_A1DA_F8587E9E7F42__INCLUDED */
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,314 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <stdbool.h>
++#include <string.h>
++#include <stdio.h>
++#include <dbus/dbus.h>
++
++#include <jack/driver.h>
++#include <jack/engine.h>
++#include "jackcontroller_internal.h"
++
++void
++jack_controller_settings_set_bool_option(
++ const char *value_str,
++ int *value_ptr)
++{
++ if (strcmp(value_str, "true") == 0)
++ {
++ *value_ptr = true;
++ }
++ else if (strcmp(value_str, "false") == 0)
++ {
++ *value_ptr = false;
++ }
++ else
++ {
++ jack_error("ignoring unknown bool value \"%s\"", value_str);
++ }
++}
++
++void
++jack_controller_settings_set_sint_option(
++ const char *value_str,
++ int *value_ptr)
++{
++ *value_ptr = atoi(value_str);
++}
++
++void
++jack_controller_settings_set_uint_option(
++ const char *value_str,
++ unsigned int *value_ptr)
++{
++ *value_ptr = strtoul(value_str, NULL, 10);
++}
++
++void
++jack_controller_settings_set_char_option(
++ const char *value_str,
++ char *value_ptr)
++{
++ if (value_str[0] == 0 || value_str[1] != 0)
++ {
++ jack_error("invalid char option value \"%s\"", value_str);
++ return;
++ }
++
++ *value_ptr = *value_str;
++}
++
++void
++jack_controller_settings_set_string_option(
++ const char *value_str,
++ char *value_ptr,
++ size_t max_size)
++{
++ size_t size;
++
++ size = strlen(value_str);
++
++ if (size >= max_size)
++ {
++ jack_error("string option value \"%s\" is too long, max is %u chars (including terminating zero)", value_str, (unsigned int)max_size);
++ return;
++ }
++
++ strcpy(value_ptr, value_str);
++}
++
++void
++jack_controller_settings_set_driver_option(
++ jackctl_driver driver,
++ const char *option_name,
++ const char *option_value)
++{
++ jackctl_parameter parameter;
++ jackctl_param_type_t type;
++ int value_int;
++ unsigned int value_uint;
++ union jackctl_parameter_value value;
++
++ jack_info("setting driver option \"%s\" to value \"%s\"", option_name, option_value);
++
++ parameter = jack_controller_find_parameter(jackctl_driver_get_parameters(driver), option_name);
++ if (parameter == NULL)
++ {
++ jack_error(
++ "Unknown parameter \"%s\" of driver \"%s\"",
++ option_name,
++ jackctl_driver_get_name(driver));
++ return;
++ }
++
++ type = jackctl_parameter_get_type(parameter);
++
++ switch (type)
++ {
++ case JackParamInt:
++ jack_controller_settings_set_sint_option(option_value, &value_int);
++ value.i = value_int;
++ break;
++ case JackParamUInt:
++ jack_controller_settings_set_uint_option(option_value, &value_uint);
++ value.ui = value_uint;
++ break;
++ case JackParamChar:
++ jack_controller_settings_set_char_option(option_value, &value.c);
++ break;
++ case JackParamString:
++ jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
++ break;
++ case JackParamBool:
++ jack_controller_settings_set_bool_option(option_value, &value_int);
++ value.i = value_int;
++ break;
++ default:
++ jack_error("Parameter \"%s\" of driver \"%s\" is of unknown type %d",
++ jackctl_parameter_get_name(parameter),
++ jackctl_driver_get_name(driver),
++ type);
++ }
++
++ jackctl_parameter_set_value(parameter, &value);
++}
++
++void
++jack_controller_settings_set_engine_option(
++ struct jack_controller *controller_ptr,
++ const char *option_name,
++ const char *option_value)
++{
++ jackctl_parameter parameter;
++ jackctl_param_type_t type;
++ int value_int;
++ unsigned int value_uint;
++ union jackctl_parameter_value value;
++
++ jack_info("setting engine option \"%s\" to value \"%s\"", option_name, option_value);
++
++ if (strcmp(option_name, "driver") == 0)
++ {
++ if (!jack_controller_select_driver(controller_ptr, option_value))
++ {
++ jack_error("unknown driver '%s'", option_value);
++ }
++
++ return;
++ }
++
++ parameter = jack_controller_find_parameter(jackctl_server_get_parameters(controller_ptr->server), option_name);
++ if (parameter == NULL)
++ {
++ jack_error(
++ "Unknown engine parameter \"%s\"",
++ option_name);
++ return;
++ }
++
++ type = jackctl_parameter_get_type(parameter);
++
++ switch (type)
++ {
++ case JackParamInt:
++ jack_controller_settings_set_sint_option(option_value, &value_int);
++ value.i = value_int;
++ break;
++ case JackParamUInt:
++ jack_controller_settings_set_uint_option(option_value, &value_uint);
++ value.ui = value_uint;
++ break;
++ case JackParamChar:
++ jack_controller_settings_set_char_option(option_value, &value.c);
++ break;
++ case JackParamString:
++ jack_controller_settings_set_string_option(option_value, value.str, sizeof(value.str));
++ break;
++ case JackParamBool:
++ jack_controller_settings_set_bool_option(option_value, &value_int);
++ value.i = value_int;
++ break;
++ default:
++ jack_error("Engine parameter \"%s\" is of unknown type %d",
++ jackctl_parameter_get_name(parameter),
++ type);
++ }
++
++ jackctl_parameter_set_value(parameter, &value);
++}
++
++static
++bool
++jack_controller_settings_save_options(
++ void *context,
++ const JSList * parameters_list,
++ void *dbus_call_context_ptr)
++{
++ jackctl_parameter parameter;
++ jackctl_param_type_t type;
++ union jackctl_parameter_value value;
++ const char * name;
++ char value_str[50];
++
++ while (parameters_list != NULL)
++ {
++ parameter = (jackctl_parameter)parameters_list->data;
++
++ if (jackctl_parameter_is_set(parameter))
++ {
++ type = jackctl_parameter_get_type(parameter);
++ value = jackctl_parameter_get_value(parameter);
++ name = jackctl_parameter_get_name(parameter);
++
++ switch (type)
++ {
++ case JackParamInt:
++ sprintf(value_str, "%d", (int)value.i);
++ if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
++ {
++ return false;
++ }
++ break;
++ case JackParamUInt:
++ sprintf(value_str, "%u", (unsigned int)value.ui);
++ if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
++ {
++ return false;
++ }
++ break;
++ case JackParamChar:
++ sprintf(value_str, "%c", (char)value.c);
++ if (!jack_controller_settings_write_option(context, name, value_str, dbus_call_context_ptr))
++ {
++ return false;
++ }
++ break;
++ case JackParamString:
++ if (!jack_controller_settings_write_option(context, name, value.str, dbus_call_context_ptr))
++ {
++ return false;
++ }
++ break;
++ case JackParamBool:
++ if (!jack_controller_settings_write_option(context, name, value.b ? "true" : "false", dbus_call_context_ptr))
++ {
++ return false;
++ }
++ break;
++ default:
++ jack_error("parameter of unknown type %d", type);
++ }
++ }
++
++ parameters_list = jack_slist_next(parameters_list);
++ }
++
++ return true;
++}
++
++bool
++jack_controller_settings_save_engine_options(
++ void *context,
++ struct jack_controller *controller_ptr,
++ void *dbus_call_context_ptr)
++{
++ if (controller_ptr->driver != NULL)
++ {
++ if (!jack_controller_settings_write_option(
++ context,
++ "driver",
++ jackctl_driver_get_name(controller_ptr->driver),
++ dbus_call_context_ptr))
++ {
++ return false;
++ }
++ }
++
++ return jack_controller_settings_save_options(context, jackctl_server_get_parameters(controller_ptr->server), dbus_call_context_ptr);
++}
++
++bool
++jack_controller_settings_save_driver_options(
++ void *context,
++ jackctl_driver driver,
++ void *dbus_call_context_ptr)
++{
++ return jack_controller_settings_save_options(context, jackctl_driver_get_parameters(driver), dbus_call_context_ptr);
++}
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml_expat.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml_expat.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml_expat.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml_expat.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,318 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <stdbool.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <unistd.h>
++#include <fcntl.h>
++#include <errno.h>
++#include <string.h>
++#include <expat.h>
++#include <dbus/dbus.h>
++
++#include <jack/driver.h>
++#include <jack/engine.h>
++#include "jackcontroller_internal.h"
++#include "jackdbus.h"
++
++bool
++jack_controller_settings_init()
++{
++ return true;
++}
++
++void
++jack_controller_settings_uninit()
++{
++}
++
++#define PARSE_CONTEXT_ROOT 0
++#define PARSE_CONTEXT_JACK 1
++#define PARSE_CONTEXT_ENGINE 1
++#define PARSE_CONTEXT_DRIVERS 2
++#define PARSE_CONTEXT_DRIVER 3
++#define PARSE_CONTEXT_OPTION 4
++
++#define MAX_STACK_DEPTH 10
++
++struct parse_context
++{
++ struct jack_controller *controller_ptr;
++ XML_Bool error;
++ unsigned int element[MAX_STACK_DEPTH];
++ signed int depth;
++ jackctl_driver driver;
++ char option[JACK_DRIVER_PARAM_STRING_MAX+1];
++ int option_used;
++ char *name;
++};
++
++#define context_ptr ((struct parse_context *)data)
++
++void
++jack_controller_settings_callback_chrdata(void *data, const XML_Char *s, int len)
++{
++ if (context_ptr->error)
++ {
++ return;
++ }
++
++ if (context_ptr->element[context_ptr->depth] == PARSE_CONTEXT_OPTION)
++ {
++ if (context_ptr->option_used + len >= JACK_DRIVER_PARAM_STRING_MAX)
++ {
++ jack_error("xml parse max char data length reached");
++ context_ptr->error = XML_TRUE;
++ return;
++ }
++
++ memcpy(context_ptr->option + context_ptr->option_used, s, len);
++ context_ptr->option_used += len;
++ }
++}
++
++void
++jack_controller_settings_callback_elstart(void *data, const char *el, const char **attr)
++{
++ jackctl_driver driver;
++
++ if (context_ptr->error)
++ {
++ return;
++ }
++
++ if (context_ptr->depth + 1 >= MAX_STACK_DEPTH)
++ {
++ jack_error("xml parse max stack depth reached");
++ context_ptr->error = XML_TRUE;
++ return;
++ }
++
++ if (strcmp(el, "jack") == 0)
++ {
++ //jack_info("<jack>");
++ context_ptr->element[++context_ptr->depth] = PARSE_CONTEXT_JACK;
++ return;
++ }
++
++ if (strcmp(el, "engine") == 0)
++ {
++ //jack_info("<engine>");
++ context_ptr->element[++context_ptr->depth] = PARSE_CONTEXT_ENGINE;
++ return;
++ }
++
++ if (strcmp(el, "drivers") == 0)
++ {
++ //jack_info("<drivers>");
++ context_ptr->element[++context_ptr->depth] = PARSE_CONTEXT_DRIVERS;
++ return;
++ }
++
++ if (strcmp(el, "driver") == 0)
++ {
++ if ((attr[0] == NULL || attr[2] != NULL) || strcmp(attr[0], "name") != 0)
++ {
++ jack_error("<driver> XML element must contain exactly one attribute, named \"name\"");
++ context_ptr->error = XML_TRUE;
++ return;
++ }
++
++ //jack_info("<driver>");
++ context_ptr->element[++context_ptr->depth] = PARSE_CONTEXT_DRIVER;
++
++ driver = jack_controller_find_driver(context_ptr->controller_ptr->server, attr[1]);
++ if (driver == NULL)
++ {
++ jack_error("ignoring settings for unknown driver \"%s\"", attr[1]);
++ }
++ else
++ {
++ jack_info("setting for driver \"%s\" found", attr[1]);
++ }
++
++ context_ptr->driver = driver;
++
++ return;
++ }
++
++ if (strcmp(el, "option") == 0)
++ {
++ //jack_info("<option>");
++ if ((attr[0] == NULL || attr[2] != NULL) || strcmp(attr[0], "name") != 0)
++ {
++ jack_error("<option> XML element must contain exactly one attribute, named \"name\"");
++ context_ptr->error = XML_TRUE;
++ return;
++ }
++
++ context_ptr->name = strdup(attr[1]);
++ if (context_ptr->name == NULL)
++ {
++ jack_error("strdup() failed");
++ context_ptr->error = XML_TRUE;
++ return;
++ }
++
++ context_ptr->element[++context_ptr->depth] = PARSE_CONTEXT_OPTION;
++ context_ptr->option_used = 0;
++ return;
++ }
++
++ jack_error("unknown element \"%s\"", el);
++ context_ptr->error = XML_TRUE;
++}
++
++void
++jack_controller_settings_callback_elend(void *data, const char *el)
++{
++ if (context_ptr->error)
++ {
++ return;
++ }
++
++ //jack_info("element end (depth = %d, element = %u)", context_ptr->depth, context_ptr->element[context_ptr->depth]);
++
++ if (context_ptr->element[context_ptr->depth] == PARSE_CONTEXT_OPTION)
++ {
++ context_ptr->option[context_ptr->option_used] = 0;
++
++ if (context_ptr->depth == 2 &&
++ context_ptr->element[0] == PARSE_CONTEXT_JACK &&
++ context_ptr->element[1] == PARSE_CONTEXT_ENGINE)
++ {
++ jack_controller_settings_set_engine_option(context_ptr->controller_ptr, context_ptr->name, context_ptr->option);
++ }
++
++ if (context_ptr->depth == 3 &&
++ context_ptr->element[0] == PARSE_CONTEXT_JACK &&
++ context_ptr->element[1] == PARSE_CONTEXT_DRIVERS &&
++ context_ptr->element[2] == PARSE_CONTEXT_DRIVER &&
++ context_ptr->driver != NULL)
++ {
++ jack_controller_settings_set_driver_option(context_ptr->driver, context_ptr->name, context_ptr->option);
++ }
++ }
++
++ context_ptr->depth--;
++
++ if (context_ptr->name != NULL)
++ {
++ free(context_ptr->name);
++ context_ptr->name = NULL;
++ }
++}
++
++#undef context_ptr
++
++void
++jack_controller_settings_load(
++ struct jack_controller * controller_ptr)
++{
++ XML_Parser parser;
++ int bytes_read;
++ void *buffer;
++ char *filename;
++ size_t conf_len;
++ struct stat st;
++ int fd;
++ enum XML_Status xmls;
++ struct parse_context context;
++
++ conf_len = strlen(JACKDBUS_CONF);
++
++ filename = malloc(g_jackdbus_config_dir_len + conf_len + 1);
++ if (filename == NULL)
++ {
++ jack_error("Out of memory.");
++ goto exit;
++ }
++
++ memcpy(filename, g_jackdbus_config_dir, g_jackdbus_config_dir_len);
++ memcpy(filename + g_jackdbus_config_dir_len, JACKDBUS_CONF, conf_len);
++ filename[g_jackdbus_config_dir_len + conf_len] = 0;
++
++ jack_info("Loading settings from \"%s\" using %s ...", filename, XML_ExpatVersion());
++
++ if (stat(filename, &st) != 0)
++ {
++ jack_error("failed to stat \"%s\", error is %d (%s)", filename, errno, strerror(errno));
++ }
++
++ fd = open(filename, O_RDONLY);
++ if (fd == -1)
++ {
++ jack_error("open() failed to open conf filename.");
++ goto exit_free_filename;
++ }
++
++ parser = XML_ParserCreate(NULL);
++ if (parser == NULL)
++ {
++ jack_error("XML_ParserCreate() failed to create parser object.");
++ goto exit_close_file;
++ }
++
++ //jack_info("conf file size is %llu bytes", (unsigned long long)st.st_size);
++
++ /* we are expecting that conf file has small enough size to fit in memory */
++
++ buffer = XML_GetBuffer(parser, st.st_size);
++ if (buffer == NULL)
++ {
++ jack_error("XML_GetBuffer() failed.");
++ goto exit_free_parser;
++ }
++
++ bytes_read = read(fd, buffer, st.st_size);
++ if (bytes_read != st.st_size)
++ {
++ jack_error("read() returned unexpected result.");
++ goto exit_free_parser;
++ }
++
++ context.controller_ptr = controller_ptr;
++ context.error = XML_FALSE;
++ context.depth = -1;
++ context.name = NULL;
++
++ XML_SetElementHandler(parser, jack_controller_settings_callback_elstart, jack_controller_settings_callback_elend);
++ XML_SetCharacterDataHandler(parser, jack_controller_settings_callback_chrdata);
++ XML_SetUserData(parser, &context);
++
++ xmls = XML_ParseBuffer(parser, bytes_read, XML_TRUE);
++ if (xmls == XML_STATUS_ERROR)
++ {
++ jack_error("XML_ParseBuffer() failed.");
++ goto exit_free_parser;
++ }
++
++exit_free_parser:
++ XML_ParserFree(parser);
++
++exit_close_file:
++ close(fd);
++
++exit_free_filename:
++ free(filename);
++
++exit:
++ return;
++}
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml.h jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml.h
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml.h 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml.h 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,36 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#ifndef JACKCONTROLLER_XML_H__4F102BD2_3354_41C9_B842_DC00E1557A0F__INCLUDED
++#define JACKCONTROLLER_XML_H__4F102BD2_3354_41C9_B842_DC00E1557A0F__INCLUDED
++
++bool
++jack_controller_settings_save(
++ struct jack_controller * controller_ptr,
++ void *dbus_call_context_ptr);
++
++void
++jack_controller_settings_load(
++ struct jack_controller * controller_ptr);
++
++void
++jack_controller_settings_save_auto(
++ struct jack_controller * controller_ptr);
++
++#endif /* #ifndef JACKCONTROLLER_XML_H__4F102BD2_3354_41C9_B842_DC00E1557A0F__INCLUDED */
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml_libxml.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml_libxml.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml_libxml.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml_libxml.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,572 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <stdbool.h>
++#include <string.h>
++#include <dbus/dbus.h>
++
++#include <libxml/xmlwriter.h>
++#include <libxml/parser.h>
++#include <libxml/xpath.h>
++
++#include <jack/driver.h>
++#include <jack/engine.h>
++#include "jackcontroller_internal.h"
++#include "jackdbus.h"
++
++/* XPath expression used for engine options selection */
++#define XPATH_ENGINE_OPTIONS_EXPRESSION "/jack/engine/option"
++
++/* XPath expression used for drivers selection */
++#define XPATH_DRIVERS_EXPRESSION "/jack/drivers/driver"
++
++/* XPath expression used for driver options selection */
++#define XPATH_DRIVER_OPTIONS_EXPRESSION "/jack/drivers/driver[@name = '%s']/option"
++
++bool
++jack_controller_settings_init()
++{
++ /*
++ * this initialize the library and check potential ABI mismatches
++ * between the version it was compiled for and the actual shared
++ * library used.
++ */
++ LIBXML_TEST_VERSION;
++
++ return true;
++}
++
++void
++jack_controller_settings_uninit()
++{
++}
++
++#define writer ((xmlTextWriterPtr)context)
++
++bool
++jack_controller_settings_write_option(
++ void *context,
++ const char *name,
++ const char *content,
++ void *dbus_call_context_ptr)
++{
++ if (xmlTextWriterStartElement(writer, BAD_CAST "option") == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterStartElement() failed.");
++ return false;
++ }
++
++ if (xmlTextWriterWriteAttribute(writer, BAD_CAST "name", BAD_CAST name) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterWriteAttribute() failed.");
++ return false;
++ }
++
++ if (xmlTextWriterWriteString(writer, BAD_CAST content) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterWriteString() failed.");
++ return false;
++ }
++
++ if (xmlTextWriterEndElement(writer) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterEndElement() failed.");
++ return false;
++ }
++
++ return true;
++}
++
++#undef writer
++
++bool
++jack_controller_settings_write_engine(
++ struct jack_controller * controller_ptr,
++ xmlTextWriterPtr writer,
++ void *dbus_call_context_ptr)
++{
++/* jack_info("engine settings begin"); */
++
++/* if (xmlTextWriterWriteComment(writer, BAD_CAST "engine parameters") == -1) */
++/* { */
++/* jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterWriteComment() failed."); */
++/* return false; */
++/* } */
++
++ if (xmlTextWriterStartElement(writer, BAD_CAST "engine") == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterStartElement() failed.");
++ return false;
++ }
++
++ if (!jack_controller_settings_save_engine_options(writer, controller_ptr, dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ if (xmlTextWriterEndElement(writer) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterEndElement() failed.");
++ return false;
++ }
++
++/* jack_info("engine settings end"); */
++ return true;
++}
++
++bool
++jack_controller_settings_write_driver(
++ struct jack_controller * controller_ptr,
++ xmlTextWriterPtr writer,
++ jackctl_driver driver,
++ void *dbus_call_context_ptr)
++{
++/* if (xmlTextWriterWriteComment(writer, BAD_CAST "driver parameters") == -1) */
++/* { */
++/* jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterWriteComment() failed."); */
++/* return false; */
++/* } */
++
++ if (xmlTextWriterStartElement(writer, BAD_CAST "driver") == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterStartElement() failed.");
++ return false;
++ }
++
++ if (xmlTextWriterWriteAttribute(writer, BAD_CAST "name", BAD_CAST jackctl_driver_get_name(driver)) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterWriteAttribute() failed.");
++ return false;
++ }
++
++ if (!jack_controller_settings_save_driver_options(writer, driver, dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ if (xmlTextWriterEndElement(writer) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterEndElement() failed.");
++ return false;
++ }
++
++ return true;
++}
++
++bool
++jack_controller_settings_write_drivers(
++ struct jack_controller * controller_ptr,
++ xmlTextWriterPtr writer,
++ void *dbus_call_context_ptr)
++{
++ const JSList * node_ptr;
++ jackctl_driver driver;
++
++ if (xmlTextWriterStartElement(writer, BAD_CAST "drivers") == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterStartElement() failed.");
++ return false;
++ }
++
++ node_ptr = jackctl_server_get_drivers_list(controller_ptr->server);
++
++ while (node_ptr != NULL)
++ {
++ driver = (jackctl_driver)node_ptr->data;
++
++ if (!jack_controller_settings_write_driver(
++ controller_ptr,
++ writer,
++ driver,
++ dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ node_ptr = jack_slist_next(node_ptr);
++ }
++
++ if (xmlTextWriterEndElement(writer) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterEndElement() failed.");
++ return false;
++ }
++
++ return true;
++}
++
++bool
++jack_controller_settings_save(
++ struct jack_controller * controller_ptr,
++ void *dbus_call_context_ptr)
++{
++ xmlTextWriterPtr writer;
++ char *filename;
++ size_t conf_len;
++ bool ret;
++ time_t timestamp;
++ char timestamp_str[28];
++
++ time(×tamp);
++ timestamp_str[0] = ' ';
++ ctime_r(×tamp, timestamp_str + 1);
++ timestamp_str[25] = ' ';
++
++ ret = false;
++
++ conf_len = strlen(JACKDBUS_CONF);
++
++ filename = malloc(g_jackdbus_config_dir_len + conf_len + 1);
++ if (filename == NULL)
++ {
++ jack_error("Out of memory.");
++ goto fail;
++ }
++
++ memcpy(filename, g_jackdbus_config_dir, g_jackdbus_config_dir_len);
++ memcpy(filename + g_jackdbus_config_dir_len, JACKDBUS_CONF, conf_len);
++ filename[g_jackdbus_config_dir_len + conf_len] = 0;
++
++ jack_info("saving settings to \"%s\"", filename);
++
++ writer = xmlNewTextWriterFilename(filename, 0);
++ if (writer == NULL)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "Error creating the xml writer.");
++ goto fail_free_filename;
++ }
++
++ if (xmlTextWriterSetIndent(writer, 1) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterSetIndent() failed.");
++ goto fail_free_writter;
++ }
++
++ if (xmlTextWriterStartDocument(writer, NULL, NULL, NULL) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterStartDocument() failed.");
++ goto fail_free_writter;
++ }
++
++ if (xmlTextWriterWriteComment(writer, BAD_CAST "\n" JACK_CONF_HEADER_TEXT) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterWriteComment() failed.");
++ goto fail_free_writter;
++ }
++
++ if (xmlTextWriterWriteComment(writer, BAD_CAST timestamp_str) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterWriteComment() failed.");
++ goto fail_free_writter;
++ }
++
++ if (xmlTextWriterStartElement(writer, BAD_CAST "jack") == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterStartElement() failed.");
++ goto fail_free_writter;
++ }
++
++ if (!jack_controller_settings_write_engine(controller_ptr, writer, dbus_call_context_ptr))
++ {
++ goto fail_free_writter;
++ }
++
++ if (!jack_controller_settings_write_drivers(controller_ptr, writer, dbus_call_context_ptr))
++ {
++ goto fail_free_writter;
++ }
++
++ if (xmlTextWriterEndElement(writer) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterStartElement() failed.");
++ goto fail_free_writter;
++ }
++
++ if (xmlTextWriterEndDocument(writer) == -1)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "xmlTextWriterEndDocument() failed.");
++ goto fail_free_writter;
++ }
++
++ ret = true;
++
++fail_free_writter:
++ xmlFreeTextWriter(writer);
++
++fail_free_filename:
++ free(filename);
++
++fail:
++ return ret;
++}
++
++void
++jack_controller_settings_read_engine(
++ struct jack_controller * controller_ptr,
++ xmlXPathContextPtr xpath_ctx_ptr)
++{
++ xmlXPathObjectPtr xpath_obj_ptr;
++ xmlBufferPtr content_buffer_ptr;
++ int i;
++ const char *option_name;
++ const char *option_value;
++
++ /* Evaluate xpath expression */
++ xpath_obj_ptr = xmlXPathEvalExpression((const xmlChar *)XPATH_ENGINE_OPTIONS_EXPRESSION, xpath_ctx_ptr);
++ if (xpath_obj_ptr == NULL)
++ {
++ jack_error("Unable to evaluate XPath expression \"%s\"", XPATH_ENGINE_OPTIONS_EXPRESSION);
++ goto exit;
++ }
++
++ if (xpath_obj_ptr->nodesetval == NULL || xpath_obj_ptr->nodesetval->nodeNr == 0)
++ {
++ jack_error("XPath \"%s\" evaluation returned no data", XPATH_ENGINE_OPTIONS_EXPRESSION);
++ goto free_xpath_obj;
++ }
++
++ content_buffer_ptr = xmlBufferCreate();
++ if (content_buffer_ptr == NULL)
++ {
++ jack_error("xmlBufferCreate() failed.");
++ goto free_xpath_obj;
++ }
++
++ for (i = 0 ; i < xpath_obj_ptr->nodesetval->nodeNr ; i++)
++ {
++ //jack_info("engine option \"%s\" at index %d", xmlGetProp(xpath_obj_ptr->nodesetval->nodeTab[i], BAD_CAST "name"), i);
++
++ if (xmlNodeBufGetContent(content_buffer_ptr, xpath_obj_ptr->nodesetval->nodeTab[i]) == -1)
++ {
++ jack_error("xmlNodeBufGetContent() failed.");
++ goto next_option;
++ }
++
++ option_name = (const char *)xmlGetProp(xpath_obj_ptr->nodesetval->nodeTab[i], BAD_CAST "name");
++ option_value = (const char *)xmlBufferContent(content_buffer_ptr);
++
++ jack_controller_settings_set_engine_option(controller_ptr, option_name, option_value);
++
++ next_option:
++ xmlBufferEmpty(content_buffer_ptr);
++ }
++
++//free_buffer:
++ xmlBufferFree(content_buffer_ptr);
++
++free_xpath_obj:
++ xmlXPathFreeObject(xpath_obj_ptr);
++
++exit:
++ return;
++}
++
++void
++jack_controller_settings_read_driver(
++ struct jack_controller * controller_ptr,
++ xmlXPathContextPtr xpath_ctx_ptr,
++ jackctl_driver driver)
++{
++ char *xpath;
++ size_t xpath_len;
++ xmlXPathObjectPtr xpath_obj_ptr;
++ xmlBufferPtr content_buffer_ptr;
++ int i;
++ const char *option_name;
++ const char *option_value;
++ const char *driver_name;
++
++ driver_name = jackctl_driver_get_name(driver);
++
++ jack_info("reading options for driver \"%s\"", driver_name);
++
++ xpath_len = snprintf(NULL, 0, XPATH_DRIVER_OPTIONS_EXPRESSION, driver_name);
++
++ xpath = malloc(xpath_len);
++ if (xpath == NULL)
++ {
++ jack_error("Out of memory.");
++ goto exit;
++ }
++
++ snprintf(xpath, xpath_len, XPATH_DRIVER_OPTIONS_EXPRESSION, driver_name);
++
++ //jack_info("xpath = \"%s\"", xpath);
++
++ /* Evaluate xpath expression */
++ xpath_obj_ptr = xmlXPathEvalExpression((const xmlChar *)xpath, xpath_ctx_ptr);
++ if (xpath_obj_ptr == NULL)
++ {
++ jack_error("Unable to evaluate XPath expression \"%s\"", xpath);
++ goto free_xpath;
++ }
++
++ if (xpath_obj_ptr->nodesetval == NULL || xpath_obj_ptr->nodesetval->nodeNr == 0)
++ {
++ //jack_info("XPath \"%s\" evaluation returned no data", xpath);
++ goto free_xpath_obj;
++ }
++
++ content_buffer_ptr = xmlBufferCreate();
++ if (content_buffer_ptr == NULL)
++ {
++ jack_error("xmlBufferCreate() failed.");
++ goto free_xpath_obj;
++ }
++
++ for (i = 0 ; i < xpath_obj_ptr->nodesetval->nodeNr ; i++)
++ {
++ //jack_info("driver option \"%s\" at index %d", xmlGetProp(xpath_obj_ptr->nodesetval->nodeTab[i], BAD_CAST "name"), i);
++
++ if (xmlNodeBufGetContent(content_buffer_ptr, xpath_obj_ptr->nodesetval->nodeTab[i]) == -1)
++ {
++ jack_error("xmlNodeBufGetContent() failed.");
++ goto next_option;
++ }
++
++ option_name = (const char *)xmlGetProp(xpath_obj_ptr->nodesetval->nodeTab[i], BAD_CAST "name");
++ option_value = (const char *)xmlBufferContent(content_buffer_ptr);
++
++ jack_controller_settings_set_driver_option(driver, option_name, option_value);
++
++ next_option:
++ xmlBufferEmpty(content_buffer_ptr);
++ }
++
++//free_buffer:
++ xmlBufferFree(content_buffer_ptr);
++
++free_xpath_obj:
++ xmlXPathFreeObject(xpath_obj_ptr);
++
++free_xpath:
++ free(xpath);
++
++exit:
++ return;
++}
++
++void
++jack_controller_settings_read_drivers(
++ struct jack_controller * controller_ptr,
++ xmlXPathContextPtr xpath_ctx_ptr)
++{
++ xmlXPathObjectPtr xpath_obj_ptr;
++ int i;
++ const char *driver_name;
++ jackctl_driver driver;
++
++ /* Evaluate xpath expression */
++ xpath_obj_ptr = xmlXPathEvalExpression((const xmlChar *)XPATH_DRIVERS_EXPRESSION, xpath_ctx_ptr);
++ if (xpath_obj_ptr == NULL)
++ {
++ jack_error("Unable to evaluate XPath expression \"%s\"", XPATH_DRIVERS_EXPRESSION);
++ goto exit;
++ }
++
++ if (xpath_obj_ptr->nodesetval == NULL || xpath_obj_ptr->nodesetval->nodeNr == 0)
++ {
++ jack_error("XPath \"%s\" evaluation returned no data", XPATH_DRIVERS_EXPRESSION);
++ goto free_xpath_obj;
++ }
++
++ for (i = 0 ; i < xpath_obj_ptr->nodesetval->nodeNr ; i++)
++ {
++ driver_name = (const char *)xmlGetProp(xpath_obj_ptr->nodesetval->nodeTab[i], BAD_CAST "name");
++
++ driver = jack_controller_find_driver(controller_ptr->server, driver_name);
++ if (driver == NULL)
++ {
++ jack_error("ignoring settings for unknown driver \"%s\"", driver_name);
++ }
++ else
++ {
++ jack_info("setting for driver \"%s\" found", driver_name);
++
++ jack_controller_settings_read_driver(controller_ptr, xpath_ctx_ptr, driver);
++ }
++ }
++
++free_xpath_obj:
++ xmlXPathFreeObject(xpath_obj_ptr);
++
++exit:
++ return;
++}
++
++void
++jack_controller_settings_load(
++ struct jack_controller * controller_ptr)
++{
++ char *filename;
++ size_t conf_len;
++ xmlDocPtr doc_ptr;
++ xmlXPathContextPtr xpath_ctx_ptr;
++
++ conf_len = strlen(JACKDBUS_CONF);
++
++ filename = malloc(g_jackdbus_config_dir_len + conf_len + 1);
++ if (filename == NULL)
++ {
++ jack_error("Out of memory.");
++ goto exit;
++ }
++
++ memcpy(filename, g_jackdbus_config_dir, g_jackdbus_config_dir_len);
++ memcpy(filename + g_jackdbus_config_dir_len, JACKDBUS_CONF, conf_len);
++ filename[g_jackdbus_config_dir_len + conf_len] = 0;
++
++ jack_info("loading settings from \"%s\"", filename);
++
++ doc_ptr = xmlParseFile(filename);
++ if (doc_ptr == NULL)
++ {
++ jack_error("Failed to parse \"%s\"", filename);
++ goto free_filename;
++ }
++
++ /* Create xpath evaluation context */
++ xpath_ctx_ptr = xmlXPathNewContext(doc_ptr);
++ if (xpath_ctx_ptr == NULL)
++ {
++ jack_error("Unable to create new XPath context");
++ goto free_doc;
++ }
++
++ jack_controller_settings_read_engine(controller_ptr, xpath_ctx_ptr);
++ jack_controller_settings_read_drivers(controller_ptr, xpath_ctx_ptr);
++
++ xmlXPathFreeContext(xpath_ctx_ptr);
++
++free_doc:
++ xmlFreeDoc(doc_ptr);
++
++free_filename:
++ free(filename);
++
++exit:
++ return;
++}
++
++void
++jack_controller_settings_save_auto(
++ struct jack_controller * controller_ptr)
++{
++ jack_controller_settings_save(controller_ptr, NULL);
++}
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml_nop.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml_nop.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml_nop.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml_nop.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,58 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <stdbool.h>
++#include <dbus/dbus.h>
++
++#include <jack/driver.h>
++#include <jack/engine.h>
++#include "jackdbus.h"
++#include "jackcontroller_internal.h"
++
++bool
++jack_controller_settings_init()
++{
++ return true;
++}
++
++void
++jack_controller_settings_uninit()
++{
++}
++
++bool
++jack_controller_settings_save(
++ struct jack_controller * controller_ptr,
++ void *dbus_call_context_ptr)
++{
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "jackdbus compiled without settings persistence");
++ return true;
++}
++
++void
++jack_controller_settings_load(
++ struct jack_controller * controller_ptr)
++{
++}
++
++void
++jack_controller_settings_save_auto(
++ struct jack_controller * controller_ptr)
++{
++}
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml_write_raw.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml_write_raw.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackcontroller_xml_write_raw.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackcontroller_xml_write_raw.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,270 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <stdbool.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <unistd.h>
++#include <fcntl.h>
++#include <errno.h>
++#include <string.h>
++#include <dbus/dbus.h>
++
++#include <jack/driver.h>
++#include <jack/engine.h>
++#include "jackcontroller_internal.h"
++#include "jackdbus.h"
++
++bool
++jack_controller_settings_write_string(int fd, const char * string, void *dbus_call_context_ptr)
++{
++ size_t len;
++
++ len = strlen(string);
++
++ if (write(fd, string, len) != len)
++ {
++ jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "write() failed to write config file.");
++ return false;
++ }
++
++ return true;
++}
++
++struct save_context
++{
++ int fd;
++ const char *indent;
++};
++
++#define save_context_ptr ((struct save_context *)context)
++#define fd (save_context_ptr->fd)
++
++bool
++jack_controller_settings_write_option(
++ void *context,
++ const char *name,
++ const char *content,
++ void *dbus_call_context_ptr)
++{
++ if (!jack_controller_settings_write_string(fd, save_context_ptr->indent, dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "<option name=\"", dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ if (!jack_controller_settings_write_string(fd, name, dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "\">", dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ if (!jack_controller_settings_write_string(fd, content, dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "</option>\n", dbus_call_context_ptr))
++ {
++ return false;
++ }
++
++ return true;
++}
++
++#undef fd
++
++bool
++jack_controller_settings_save(
++ struct jack_controller * controller_ptr,
++ void *dbus_call_context_ptr)
++{
++ char *filename;
++ size_t conf_len;
++ int fd;
++ bool ret;
++ time_t timestamp;
++ char timestamp_str[26];
++ struct save_context context;
++ const JSList * node_ptr;
++ jackctl_driver driver;
++
++ time(×tamp);
++ ctime_r(×tamp, timestamp_str);
++ timestamp_str[24] = 0;
++
++ ret = false;
++
++ conf_len = strlen(JACKDBUS_CONF);
++
++ filename = malloc(g_jackdbus_config_dir_len + conf_len + 1);
++ if (filename == NULL)
++ {
++ jack_error("Out of memory.");
++ goto exit;
++ }
++
++ memcpy(filename, g_jackdbus_config_dir, g_jackdbus_config_dir_len);
++ memcpy(filename + g_jackdbus_config_dir_len, JACKDBUS_CONF, conf_len);
++ filename[g_jackdbus_config_dir_len + conf_len] = 0;
++
++ jack_info("Saving settings to \"%s\" ...", filename);
++
++ fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
++ if (fd == -1)
++ {
++ jack_error("open() failed to open conf filename.");
++ goto exit_free_filename;
++ }
++
++ context.fd = fd;
++
++ if (!jack_controller_settings_write_string(fd, "<?xml version=\"1.0\"?>\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "<!--\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, JACK_CONF_HEADER_TEXT, dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "-->\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "<!-- ", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, timestamp_str, dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, " -->\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "<jack>\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, " <engine>\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ context.indent = " ";
++ if (!jack_controller_settings_save_engine_options(&context, controller_ptr, dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, " </engine>\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, " <drivers>\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ node_ptr = jackctl_server_get_drivers_list(controller_ptr->server);
++
++ while (node_ptr != NULL)
++ {
++ driver = (jackctl_driver)node_ptr->data;
++
++ if (!jack_controller_settings_write_string(fd, " <driver name=\"", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, jackctl_driver_get_name(driver), dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "\">\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ context.indent = " ";
++
++ if (!jack_controller_settings_save_driver_options(&context, driver, dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, " </driver>\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ node_ptr = jack_slist_next(node_ptr);
++ }
++
++ if (!jack_controller_settings_write_string(fd, " </drivers>\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ if (!jack_controller_settings_write_string(fd, "</jack>\n", dbus_call_context_ptr))
++ {
++ goto exit_close;
++ }
++
++ ret = true;
++
++exit_close:
++ close(fd);
++
++exit_free_filename:
++ free(filename);
++
++exit:
++ return ret;
++}
++
++void
++jack_controller_settings_save_auto(
++ struct jack_controller * controller_ptr)
++{
++ jack_controller_settings_save(controller_ptr, NULL);
++}
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackctl.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackctl.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackctl.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackctl.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,1877 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ JACK control API implementation
++
++ Copyright (C) 2008 Nedko Arnaudov
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <stdbool.h>
++#include <stdint.h>
++#include <string.h>
++#include <errno.h>
++#include <dirent.h>
++#include <stdio.h>
++#include <assert.h>
++
++#include <config.h>
++#include <jack/internal.h>
++#include <jack/engine.h>
++#include <jack/driver.h>
++
++#include "../libjack/local.h"
++
++#include "jackctl.h"
++
++struct jackctl_server
++{
++ char * name;
++ JSList * drivers;
++ JSList * parameters;
++
++ jack_engine_t * engine;
++
++ unsigned int xruns;
++
++ /* bool, whether to be "realtime" */
++ union jackctl_parameter_value realtime;
++ union jackctl_parameter_value default_realtime;
++
++ /* int32_t */
++ union jackctl_parameter_value realtime_priority;
++ union jackctl_parameter_value default_realtime_priority;
++
++ /* bool, if true - do not attempt to lock memory, even in realtime mode. */
++ union jackctl_parameter_value no_mem_lock;
++ union jackctl_parameter_value default_no_mem_lock;
++
++ /* bool, whether to exit once all clients have closed their connections */
++ union jackctl_parameter_value temporary;
++ union jackctl_parameter_value default_temporary;
++
++ /* bool, whether to be verbose */
++ union jackctl_parameter_value verbose;
++ union jackctl_parameter_value default_verbose;
++
++ /* int32_t, msecs; if zero, use period size. */
++ union jackctl_parameter_value client_timeout;
++ union jackctl_parameter_value default_client_timeout;
++
++ /* uint32_t, maximum number of ports the JACK server can manage */
++ union jackctl_parameter_value port_max;
++ union jackctl_parameter_value default_port_max;
++
++ /* bool, whether to unlock libraries GTK+, QT, FLTK, Wine */
++ union jackctl_parameter_value do_unlock;
++ union jackctl_parameter_value default_do_unlock;
++
++ /* int32_t */
++ union jackctl_parameter_value frame_time_offset;
++ union jackctl_parameter_value default_frame_time_offset;
++
++ /* bool, whether to prevent from ever kicking out clients because they were too slow */
++ union jackctl_parameter_value nozombies;
++ union jackctl_parameter_value default_nozombies;
++
++ /* char, clock source */
++ union jackctl_parameter_value clock_source;
++ union jackctl_parameter_value default_clock_source;
++
++ /* bool, whether to remove the shared memory registry used by all JACK server instances before startup */
++ union jackctl_parameter_value replace_registry;
++ union jackctl_parameter_value default_replace_registry;
++
++ uint64_t next_client_id;
++ uint64_t next_port_id;
++ uint64_t next_connection_id;
++ void * patchbay_context;
++ jackctl_client_appeared_callback client_appeared_callback;
++ jackctl_client_disappeared_callback client_disappeared_callback;
++ jackctl_port_appeared_callback port_appeared_callback;
++ jackctl_port_disappeared_callback port_disappeared_callback;
++ jackctl_ports_connected_callback ports_connected_callback;
++ jackctl_ports_disconnected_callback ports_disconnected_callback;
++
++ JSList * clients;
++ JSList * connections;
++};
++
++struct jackctl_driver
++{
++ char * filename;
++ jack_driver_desc_t * desc_ptr;
++ JSList * parameters;
++ JSList * set_parameters;
++};
++
++struct jackctl_parameter
++{
++ const char * name;
++ const char * short_description;
++ const char * long_description;
++ jackctl_param_type_t type;
++ bool is_set;
++ union jackctl_parameter_value * value_ptr;
++ union jackctl_parameter_value * default_value_ptr;
++
++ union jackctl_parameter_value value;
++ union jackctl_parameter_value default_value;
++ struct jackctl_driver * driver_ptr;
++ char id;
++ jack_driver_param_t * driver_parameter_ptr;
++};
++
++struct jackctl_client
++{
++ uint64_t id;
++ char * name;
++ pid_t pid;
++ JSList * ports;
++ void * patchbay_context;
++};
++
++struct jackctl_port
++{
++ uint64_t id;
++ char * name;
++ uint32_t flags;
++ uint32_t type;
++ struct jackctl_client * client_ptr;
++ void * patchbay_context;
++};
++
++struct jackctl_connection
++{
++ uint64_t id;
++ struct jackctl_port * port1_ptr;
++ struct jackctl_port * port2_ptr;
++ void * patchbay_context;
++};
++
++static
++struct jackctl_parameter *
++jackctl_add_parameter(
++ JSList ** parameters_list_ptr_ptr,
++ const char * name,
++ const char * short_description,
++ const char * long_description,
++ jackctl_param_type_t type,
++ union jackctl_parameter_value * value_ptr,
++ union jackctl_parameter_value * default_value_ptr,
++ union jackctl_parameter_value value)
++{
++ struct jackctl_parameter * parameter_ptr;
++
++ parameter_ptr = malloc(sizeof(struct jackctl_parameter));
++ if (parameter_ptr == NULL)
++ {
++ jack_error("Cannot allocate memory for jackctl_parameter structure.");
++ goto fail;
++ }
++
++ parameter_ptr->name = name;
++ parameter_ptr->short_description = short_description;
++ parameter_ptr->long_description = long_description;
++ parameter_ptr->type = type;
++ parameter_ptr->is_set = false;
++
++ if (value_ptr == NULL)
++ {
++ value_ptr = ¶meter_ptr->value;
++ }
++
++ if (default_value_ptr == NULL)
++ {
++ default_value_ptr = ¶meter_ptr->default_value;
++ }
++
++ parameter_ptr->value_ptr = value_ptr;
++ parameter_ptr->default_value_ptr = default_value_ptr;
++
++ *value_ptr = *default_value_ptr = value;
++
++ parameter_ptr->driver_ptr = NULL;
++ parameter_ptr->driver_parameter_ptr = NULL;
++ parameter_ptr->id = 0;
++
++ *parameters_list_ptr_ptr = jack_slist_append(*parameters_list_ptr_ptr, parameter_ptr);
++
++ return parameter_ptr;
++
++fail:
++ return NULL;
++}
++
++static
++void
++jackctl_free_driver_parameters(
++ struct jackctl_driver * driver_ptr)
++{
++ JSList * next_node_ptr;
++
++ while (driver_ptr->parameters)
++ {
++ next_node_ptr = driver_ptr->parameters->next;
++ free(driver_ptr->parameters->data);
++ free(driver_ptr->parameters);
++ driver_ptr->parameters = next_node_ptr;
++ }
++
++ while (driver_ptr->set_parameters)
++ {
++ next_node_ptr = driver_ptr->set_parameters->next;
++ free(driver_ptr->set_parameters->data);
++ free(driver_ptr->set_parameters);
++ driver_ptr->set_parameters = next_node_ptr;
++ }
++}
++
++static
++bool
++jackctl_add_driver_parameters(
++ struct jackctl_driver * driver_ptr)
++{
++ uint32_t i;
++ union jackctl_parameter_value jackctl_value;
++ jackctl_param_type_t jackctl_type;
++ struct jackctl_parameter * parameter_ptr;
++ jack_driver_param_desc_t * descriptor_ptr;
++
++ for (i = 0 ; i < driver_ptr->desc_ptr->nparams ; i++)
++ {
++ descriptor_ptr = driver_ptr->desc_ptr->params + i;
++
++ switch (descriptor_ptr->type)
++ {
++ case JackDriverParamInt:
++ jackctl_type = JackParamInt;
++ jackctl_value.i = descriptor_ptr->value.i;
++ break;
++ case JackDriverParamUInt:
++ jackctl_type = JackParamUInt;
++ jackctl_value.ui = descriptor_ptr->value.ui;
++ break;
++ case JackDriverParamChar:
++ jackctl_type = JackParamChar;
++ jackctl_value.c = descriptor_ptr->value.c;
++ break;
++ case JackDriverParamString:
++ jackctl_type = JackParamString;
++ strcpy(jackctl_value.str, descriptor_ptr->value.str);
++ break;
++ case JackDriverParamBool:
++ jackctl_type = JackParamBool;
++ jackctl_value.b = descriptor_ptr->value.i;
++ break;
++ default:
++ jack_error("unknown driver parameter type %i", (int)descriptor_ptr->type);
++ assert(0);
++ goto fail;
++ }
++
++ parameter_ptr = jackctl_add_parameter(
++ &driver_ptr->parameters,
++ descriptor_ptr->name,
++ descriptor_ptr->short_desc,
++ descriptor_ptr->long_desc,
++ jackctl_type,
++ NULL,
++ NULL,
++ jackctl_value);
++
++ if (parameter_ptr == NULL)
++ {
++ goto fail;
++ }
++
++ parameter_ptr->driver_ptr = driver_ptr;
++ parameter_ptr->id = descriptor_ptr->character;
++ }
++
++ return true;
++
++fail:
++ jackctl_free_driver_parameters(driver_ptr);
++
++ return false;
++}
++
++static
++bool
++jackctl_load_driver_descriptor(
++ struct jackctl_server * server_ptr,
++ struct jackctl_driver * driver_ptr)
++{
++ jack_driver_desc_t * descriptor;
++ JackDriverDescFunction so_get_descriptor;
++ void * dlhandle;
++ const char * dlerr;
++ int err;
++
++ if (server_ptr->verbose.b) {
++ jack_info ("getting driver descriptor from %s", driver_ptr->filename);
++ }
++
++ dlhandle = dlopen(driver_ptr->filename, RTLD_NOW|RTLD_GLOBAL);
++ if (dlhandle == NULL) {
++ jack_error("could not open driver .so '%s': %s", driver_ptr->filename, dlerror());
++ return false;
++ }
++
++ so_get_descriptor = (JackDriverDescFunction)
++ dlsym(dlhandle, "driver_get_descriptor");
++
++ dlerr = dlerror();
++ if (dlerr != NULL) {
++ jack_error("cannot find driver_get_descriptor symbol: %s", dlerr);
++ dlclose(dlhandle);
++ return false;
++ }
++
++ descriptor = so_get_descriptor();
++ if (descriptor == NULL) {
++ jack_error("driver from '%s' returned NULL descriptor", driver_ptr->filename);
++ dlclose(dlhandle);
++ return false;
++ }
++
++ err = dlclose(dlhandle);
++ if (err != 0) {
++ jack_error("error closing driver .so '%s': %s", driver_ptr->filename, dlerror());
++ free(descriptor->params);
++ free(descriptor);
++ return false;
++ }
++
++ /* for some mad reason we are storing filename in descriptor allocated by driver
++ instead of reusing dlhandle when another dlsym() call is needed */
++ snprintf (descriptor->file, sizeof(descriptor->file), "%s", driver_ptr->filename);
++
++ driver_ptr->desc_ptr = descriptor;
++
++ return true;
++}
++
++static int
++jack_drivers_load(
++ struct jackctl_server * server_ptr)
++{
++ struct dirent * dir_entry;
++ DIR * dir_stream;
++ const char * ptr;
++ int err;
++ char* driver_dir;
++ struct jackctl_driver * driver_ptr;
++ struct jackctl_driver * other_driver_ptr;
++ JSList * node_ptr;
++ unsigned int drivers_count;
++
++ if ((driver_dir = getenv("JACK_DRIVER_DIR")) == 0) {
++ driver_dir = ADDON_DIR;
++ }
++
++ if (server_ptr->verbose.b) {
++ jack_info ("searching for drivers in %s", driver_dir);
++ }
++
++ /* search through the driver_dir and add get descriptors
++ from the .so files in it */
++ dir_stream = opendir (driver_dir);
++ if (!dir_stream) {
++ jack_error ("could not open driver directory %s: %s",
++ driver_dir, strerror (errno));
++ return false;
++ }
++
++ drivers_count = 0;
++
++ while ( (dir_entry = readdir (dir_stream)) ) {
++ /* check the filename is of the right format */
++ if (strncmp ("jack_", dir_entry->d_name, 5) != 0) {
++ continue;
++ }
++
++#if SETTINGS_PERSISTENCE_USE_LIBXML2
++ /* disable ffado driver.
++ it is incompatible with using libxml2 by other module,
++ be it jackdbus or some other driver.
++ libxml2 has global hooks used by libxml++, used by libffado */
++ if (strcmp ("jack_firewire.so", dir_entry->d_name) == 0) {
++ continue;
++ }
++#endif
++
++ ptr = strrchr (dir_entry->d_name, '.');
++ if (!ptr) {
++ continue;
++ }
++ ptr++;
++ if (strncmp ("so", ptr, 2) != 0) {
++ continue;
++ }
++
++ driver_ptr = malloc(sizeof(struct jackctl_driver));
++ if (driver_ptr == NULL)
++ {
++ jack_error("memory allocation of jackctl_driver structure failed.");
++ continue;
++ }
++
++ driver_ptr->filename = malloc(strlen(driver_dir) + 1 + strlen(dir_entry->d_name) + 1);
++
++ sprintf(driver_ptr->filename, "%s/%s", driver_dir, dir_entry->d_name);
++
++ if (!jackctl_load_driver_descriptor(server_ptr, driver_ptr))
++ {
++ goto dealloc_driver;
++ }
++
++ /* check it doesn't exist already */
++ for (node_ptr = server_ptr->drivers; node_ptr != NULL; node_ptr = jack_slist_next(node_ptr))
++ {
++ other_driver_ptr = (struct jackctl_driver *)node_ptr->data;
++
++ if (strcmp(driver_ptr->desc_ptr->name, other_driver_ptr->desc_ptr->name) == 0)
++ {
++ jack_error(
++ "the drivers in '%s' and '%s' both have the name '%s'; using the first",
++ other_driver_ptr->filename,
++ driver_ptr->filename,
++ driver_ptr->desc_ptr->name);
++ goto dealloc_descriptor;
++ }
++ }
++
++ driver_ptr->parameters = NULL;
++ driver_ptr->set_parameters = NULL;
++
++ if (!jackctl_add_driver_parameters(driver_ptr))
++ {
++ assert(driver_ptr->parameters == NULL);
++ goto dealloc_descriptor;
++ }
++
++ server_ptr->drivers = jack_slist_append(server_ptr->drivers, driver_ptr);
++ drivers_count++;
++
++ continue;
++
++ dealloc_descriptor:
++ free(driver_ptr->desc_ptr->params);
++ free(driver_ptr->desc_ptr);
++
++ dealloc_driver:
++ free(driver_ptr->filename);
++ free(driver_ptr);
++ }
++
++ err = closedir (dir_stream);
++ if (err) {
++ jack_error ("error closing driver directory %s: %s",
++ driver_dir, strerror (errno));
++ }
++
++ if (drivers_count == 0)
++ {
++ jack_error ("could not find any drivers in %s!", driver_dir);
++ return false;
++ }
++
++ return true;
++}
++
++static
++void
++jackctl_server_free_drivers(
++ struct jackctl_server * server_ptr)
++{
++ JSList * next_node_ptr;
++ struct jackctl_driver * driver_ptr;
++
++ while (server_ptr->drivers)
++ {
++ next_node_ptr = server_ptr->drivers->next;
++ driver_ptr = (struct jackctl_driver *)server_ptr->drivers->data;
++
++ jackctl_free_driver_parameters(driver_ptr);
++ free(driver_ptr->desc_ptr->params);
++ free(driver_ptr->desc_ptr);
++ free(driver_ptr->filename);
++ free(driver_ptr);
++
++ free(server_ptr->drivers);
++ server_ptr->drivers = next_node_ptr;
++ }
++}
++
++static
++void
++jackctl_server_free_parameters(
++ struct jackctl_server * server_ptr)
++{
++ JSList * next_node_ptr;
++
++ while (server_ptr->parameters)
++ {
++ next_node_ptr = server_ptr->parameters->next;
++ free(server_ptr->parameters->data);
++ free(server_ptr->parameters);
++ server_ptr->parameters = next_node_ptr;
++ }
++}
++
++static void
++jack_cleanup_files (const char *server_name)
++{
++ DIR *dir;
++ struct dirent *dirent;
++ char dir_name[PATH_MAX+1] = "";
++ jack_server_dir (server_name, dir_name);
++
++ /* On termination, we remove all files that jackd creates so
++ * subsequent attempts to start jackd will not believe that an
++ * instance is already running. If the server crashes or is
++ * terminated with SIGKILL, this is not possible. So, cleanup
++ * is also attempted when jackd starts.
++ *
++ * There are several tricky issues. First, the previous JACK
++ * server may have run for a different user ID, so its files
++ * may be inaccessible. This is handled by using a separate
++ * JACK_TMP_DIR subdirectory for each user. Second, there may
++ * be other servers running with different names. Each gets
++ * its own subdirectory within the per-user directory. The
++ * current process has already registered as `server_name', so
++ * we know there is no other server actively using that name.
++ */
++
++ /* nothing to do if the server directory does not exist */
++ if ((dir = opendir (dir_name)) == NULL) {
++ return;
++ }
++
++ /* unlink all the files in this directory, they are mine */
++ while ((dirent = readdir (dir)) != NULL) {
++
++ char fullpath[PATH_MAX+1];
++
++ if ((strcmp (dirent->d_name, ".") == 0)
++ || (strcmp (dirent->d_name, "..") == 0)) {
++ continue;
++ }
++
++ snprintf (fullpath, sizeof (fullpath), "%s/%s",
++ dir_name, dirent->d_name);
++
++ if (unlink (fullpath)) {
++ jack_error ("cannot unlink `%s' (%s)", fullpath,
++ strerror (errno));
++ }
++ }
++
++ closedir (dir);
++
++ /* now, delete the per-server subdirectory, itself */
++ if (rmdir (dir_name)) {
++ jack_error ("cannot remove `%s' (%s)", dir_name,
++ strerror (errno));
++ }
++
++ /* finally, delete the per-user subdirectory, if empty */
++ if (rmdir (jack_user_dir ())) {
++ if (errno != ENOTEMPTY) {
++ jack_error ("cannot remove `%s' (%s)",
++ jack_user_dir (), strerror (errno));
++ }
++ }
++}
++
++static
++int
++jackctl_xrun(void *arg)
++{
++ ((struct jackctl_server *)arg)->xruns++;
++
++ return 0;
++}
++
++jackctl_server jackctl_server_create(const char * name)
++{
++ struct jackctl_server * server_ptr;
++ union jackctl_parameter_value value;
++
++ server_ptr = malloc(sizeof(struct jackctl_server));
++ if (server_ptr == NULL)
++ {
++ jack_error("Cannot allocate memory for jackctl_server structure.");
++ goto fail;
++ }
++
++ if (name != NULL)
++ {
++ server_ptr->name = strdup(name);
++ }
++ else
++ {
++ server_ptr->name = strdup(jack_default_server_name());
++ }
++
++ if (server_ptr->name == NULL)
++ {
++ goto fail_free_server;
++ }
++
++ server_ptr->drivers = NULL;
++ server_ptr->parameters = NULL;
++
++ server_ptr->engine = NULL;
++ server_ptr->xruns = 0;
++ server_ptr->next_client_id = 1;
++ server_ptr->next_port_id = 1;
++ server_ptr->next_connection_id = 1;
++
++ value.b = false;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "realtime",
++ "Whether to use realtime mode",
++ "Use realtime scheduling. This is needed for reliable low-latency performance. On most systems, it requires JACK to run with special scheduler and memory allocation privileges, which may be obtained in several ways. On Linux you should use PAM.",
++ JackParamBool,
++ &server_ptr->realtime,
++ &server_ptr->default_realtime,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.i = 10;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "realtime-priority",
++ "Scheduler priority when running in realtime mode.",
++ "",
++ JackParamInt,
++ &server_ptr->realtime_priority,
++ &server_ptr->default_realtime_priority,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.b = false;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "no-mem-lock",
++ "Do not attempt to lock memory, even in realtime mode.",
++ "",
++ JackParamBool,
++ &server_ptr->no_mem_lock,
++ &server_ptr->default_no_mem_lock,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.b = false;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "temporary",
++ "Exit once all clients have closed their connections.",
++ "",
++ JackParamBool,
++ &server_ptr->temporary,
++ &server_ptr->default_temporary,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.b = false;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "verbose",
++ "Verbose mode.",
++ "",
++ JackParamBool,
++ &server_ptr->verbose,
++ &server_ptr->default_verbose,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.i = 500;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "client-timeout",
++ "Client timeout limit in milliseconds",
++ "Client timeout limit in milliseconds. In realtime mode the client timeout must be smaller than the watchdog timeout (5000 msec).",
++ JackParamInt,
++ &server_ptr->client_timeout,
++ &server_ptr->default_client_timeout,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.b = false;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "no-zombies",
++ "Prevent JACK from ever kicking out clients because they were too slow.",
++ "Prevent JACK from ever kicking out clients because they were too slow. JACK and its clients are still subject to the supervision of the watchdog thread or its equivalent.",
++ JackParamBool,
++ &server_ptr->nozombies,
++ &server_ptr->default_nozombies,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.ui = 256;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "port-max",
++ "Maximum number of ports the JACK server can manage",
++ "",
++ JackParamUInt,
++ &server_ptr->port_max,
++ &server_ptr->default_port_max,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.b = false;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "libs-unlock",
++ "Unlock libraries GTK+, QT, FLTK, Wine.",
++ "",
++ JackParamBool,
++ &server_ptr->do_unlock,
++ &server_ptr->default_do_unlock,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.c = 's';
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "clock-source",
++ "Clock source",
++ "Select a specific wall clock.\n"
++ " 'c' - Cycle Counter\n"
++ " 'h' - HPET timer\n"
++ " 's' - System timer\n",
++ JackParamChar,
++ &server_ptr->clock_source,
++ &server_ptr->default_clock_source,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.i = 0;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "debug-timer",
++ "Debug timer",
++ "",
++ JackParamInt,
++ &server_ptr->frame_time_offset,
++ &server_ptr->default_frame_time_offset,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ value.b = false;
++ if (jackctl_add_parameter(
++ &server_ptr->parameters,
++ "replace-registry",
++ "Replace registry.",
++ "Remove the shared memory registry used by all JACK server instances before startup. This should rarely be used, and is intended only for occasions when the structure of this registry changes in ways that are incompatible across JACK versions (which is rare).",
++ JackParamBool,
++ &server_ptr->replace_registry,
++ &server_ptr->default_replace_registry,
++ value) == NULL)
++ {
++ goto fail_free_name;
++ }
++
++ if (!jack_drivers_load(server_ptr))
++ {
++ goto fail_free_parameters;
++ }
++
++ return (jackctl_server)server_ptr;
++
++fail_free_parameters:
++ jackctl_server_free_parameters(server_ptr);
++
++fail_free_name:
++ free(server_ptr->name);
++
++fail_free_server:
++ free(server_ptr);
++
++fail:
++ return NULL;
++}
++
++static
++struct jackctl_client *
++jackctl_find_client(
++ struct jackctl_server * server_ptr,
++ const char * client_name, /* not '\0' terminated */
++ size_t client_name_len) /* without terminating '\0' */
++{
++ JSList * node_ptr;
++ struct jackctl_client * client_ptr;
++
++ node_ptr = server_ptr->clients;
++
++ while (node_ptr != NULL)
++ {
++ client_ptr = node_ptr->data;
++ if (strncmp(client_ptr->name, client_name, client_name_len) == 0)
++ {
++ return client_ptr;
++ }
++
++ node_ptr = jack_slist_next(node_ptr);
++ }
++
++ return NULL;
++}
++
++static
++struct jackctl_client *
++jackctl_find_or_create_client(
++ struct jackctl_server * server_ptr,
++ const char * client_name, /* not '\0' terminated */
++ size_t client_name_len, /* without terminating '\0' */
++ pid_t pid)
++{
++ struct jackctl_client * client_ptr;
++
++ /* First, try to find existing client */
++ client_ptr = jackctl_find_client(server_ptr, client_name, client_name_len);
++ if (client_ptr != NULL)
++ {
++ return client_ptr;
++ }
++
++ /* Such client does not exist, create new one */
++
++ client_ptr = malloc(sizeof(struct jackctl_client));
++ if (client_ptr == NULL)
++ {
++ jack_error("Allocation of jackctl_client structure failed.");
++ goto fail;
++ }
++
++ client_ptr->name = malloc((client_name_len + 1) * sizeof(char));
++ if (client_ptr->name == NULL)
++ {
++ jack_error("Allocation of client name string of %u chars failed.", (unsigned int)client_name_len);
++ goto fail_free_client;
++ }
++
++ memcpy(client_ptr->name, client_name, client_name_len * sizeof(char));
++ client_ptr->name[client_name_len] = '\0';
++
++ client_ptr->ports = NULL;
++
++ client_ptr->id = server_ptr->next_client_id++;
++
++ client_ptr->pid = pid;
++
++ server_ptr->clients = jack_slist_append(server_ptr->clients, client_ptr);
++
++ if (server_ptr->client_appeared_callback != NULL)
++ {
++ client_ptr->patchbay_context = server_ptr->client_appeared_callback(
++ server_ptr->patchbay_context,
++ client_ptr->id,
++ client_ptr->name);
++
++ }
++
++
++ return client_ptr;
++
++fail_free_client:
++ free(client_ptr);
++
++fail:
++ return NULL;
++}
++
++static
++struct jackctl_port *
++jackctl_find_port(
++ struct jackctl_client * client_ptr,
++ const char * port_name) /* '\0' terminated */
++{
++ JSList * node_ptr;
++ struct jackctl_port * port_ptr;
++
++ node_ptr = client_ptr->ports;
++
++ while (node_ptr != NULL)
++ {
++ port_ptr = node_ptr->data;
++ if (strcmp(port_ptr->name, port_name) == 0)
++ {
++ return port_ptr;
++ }
++
++ node_ptr = jack_slist_next(node_ptr);
++ }
++
++ return NULL;
++}
++
++static
++bool
++jackctl_remove_port(
++ struct jackctl_server * server_ptr,
++ struct jackctl_client * client_ptr,
++ const char * port_name)
++{
++ JSList * node_ptr;
++ struct jackctl_port * port_ptr;
++
++ node_ptr = client_ptr->ports;
++
++ while (node_ptr != NULL)
++ {
++ port_ptr = node_ptr->data;
++ if (strcmp(port_ptr->name, port_name) == 0)
++ {
++ goto found;
++ }
++
++ node_ptr = jack_slist_next(node_ptr);
++ }
++
++ jack_error("Unknown port '%s' of client '%s'", port_name, client_ptr->name);
++
++ return false;
++
++found:
++ client_ptr->ports = jack_slist_remove(client_ptr->ports, port_ptr);
++
++ if (server_ptr->port_disappeared_callback != NULL)
++ {
++ server_ptr->port_disappeared_callback(
++ server_ptr->patchbay_context,
++ client_ptr->id,
++ client_ptr->patchbay_context,
++ port_ptr->id,
++ port_ptr->patchbay_context);
++
++ }
++
++ free(port_ptr->name);
++ free(port_ptr);
++
++ if (client_ptr->ports == NULL)
++ {
++ /* the last port of the client, remove the client */
++
++ server_ptr->clients = jack_slist_remove(server_ptr->clients, client_ptr);
++
++ if (server_ptr->client_disappeared_callback != NULL)
++ {
++ server_ptr->client_disappeared_callback(
++ server_ptr->patchbay_context,
++ client_ptr->id,
++ client_ptr->patchbay_context);
++
++ }
++
++ free(client_ptr->name);
++ free(client_ptr);
++ }
++
++ return true;
++}
++
++#define server_ptr ((struct jackctl_server *)server)
++
++int
++jack_port_do_connect(
++ jack_engine_t *engine,
++ const char *source_port,
++ const char *destination_port);
++
++int
++jack_port_do_disconnect(
++ jack_engine_t *engine,
++ const char *source_port,
++ const char *destination_port);
++
++bool
++jackctl_connect_ports_by_name(
++ jackctl_server server,
++ const char * client1_name,
++ const char * port1_name,
++ const char * client2_name,
++ const char * port2_name)
++{
++ int ret;
++ char port1_full_name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE];
++ char port2_full_name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE];
++
++ if (strlen(client1_name) + strlen(port1_name) + 2 > JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE ||
++ strlen(client2_name) + strlen(port2_name) + 2 > JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE)
++ {
++ jack_error("client name + port name too long");
++ return false;
++ }
++
++ sprintf(port1_full_name, "%s:%s", client1_name, port1_name);
++ sprintf(port2_full_name, "%s:%s", client2_name, port2_name);
++
++ ret = jack_port_do_connect(
++ server_ptr->engine,
++ port1_full_name,
++ port2_full_name);
++
++ if (ret != 0)
++ {
++ jack_error("jack_port_do_connect('%s', '%s') failed with %d", port1_full_name, port2_full_name, ret);
++ return false;
++ }
++
++ return true;
++}
++
++bool
++jackctl_disconnect_ports_by_name(
++ jackctl_server server,
++ const char * client1_name,
++ const char * port1_name,
++ const char * client2_name,
++ const char * port2_name)
++{
++ int ret;
++ char port1_full_name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE];
++ char port2_full_name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE];
++
++ if (strlen(client1_name) + strlen(port1_name) + 2 > JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE ||
++ strlen(client2_name) + strlen(port2_name) + 2 > JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE)
++ {
++ jack_error("client name + port name too long");
++ return false;
++ }
++
++ sprintf(port1_full_name, "%s:%s", client1_name, port1_name);
++ sprintf(port2_full_name, "%s:%s", client2_name, port2_name);
++
++ ret = jack_port_do_disconnect(
++ server_ptr->engine,
++ port1_full_name,
++ port2_full_name);
++
++ if (ret != 0)
++ {
++ jack_error("jack_port_do_disconnect('%s', '%s') failed with %d", port1_full_name, port2_full_name, ret);
++ return false;
++ }
++
++ return true;
++}
++
++void jackctl_server_destroy(jackctl_server server)
++{
++ jackctl_server_free_drivers(server_ptr);
++ jackctl_server_free_parameters(server_ptr);
++ free(server_ptr->name);
++ free(server_ptr);
++}
++
++const JSList * jackctl_server_get_drivers_list(jackctl_server server)
++{
++ return server_ptr->drivers;
++}
++
++bool jackctl_server_stop(jackctl_server server)
++{
++ JSList * next_client_node_ptr;
++ struct jackctl_client * client_ptr;
++ JSList * next_port_node_ptr;
++ struct jackctl_port * port_ptr;
++
++ jack_engine_delete(server_ptr->engine);
++
++ /* clean up shared memory and files from this server instance */
++ if (server_ptr->verbose.b)
++ {
++ jack_info("cleaning up shared memory");
++ }
++
++ jack_cleanup_shm();
++
++ if (server_ptr->verbose.b)
++ {
++ jack_info("cleaning up files");
++ }
++
++ jack_cleanup_files(server_ptr->name);
++
++ if (server_ptr->verbose.b)
++ {
++ jack_info("unregistering server `%s'", server_ptr->name);
++ }
++
++ jack_unregister_server(server_ptr->name);
++
++ while (server_ptr->clients)
++ {
++ next_client_node_ptr = server_ptr->clients->next;
++
++ client_ptr = server_ptr->clients->data;
++
++ while (client_ptr->ports)
++ {
++ next_port_node_ptr = client_ptr->ports->next;
++ port_ptr = client_ptr->ports->data;
++
++ if (server_ptr->port_disappeared_callback != NULL)
++ {
++ server_ptr->port_disappeared_callback(
++ server_ptr->patchbay_context,
++ client_ptr->id,
++ client_ptr->patchbay_context,
++ port_ptr->id,
++ port_ptr->patchbay_context);
++
++ }
++
++ free(port_ptr->name);
++ free(port_ptr);
++
++ free(client_ptr->ports);
++ client_ptr->ports = next_port_node_ptr;
++ }
++
++ if (server_ptr->client_disappeared_callback != NULL)
++ {
++ server_ptr->client_disappeared_callback(
++ server_ptr->patchbay_context,
++ client_ptr->id,
++ client_ptr->patchbay_context);
++
++ }
++
++ free(client_ptr->name);
++ free(client_ptr);
++
++ free(server_ptr->clients);
++ server_ptr->clients = next_client_node_ptr;
++ }
++
++ server_ptr->engine = NULL;
++
++ return true;
++}
++
++double jackctl_server_get_load(jackctl_server server)
++{
++ return server_ptr->engine->control->cpu_load;
++}
++
++unsigned int jackctl_server_get_sample_rate(jackctl_server server)
++{
++ return server_ptr->engine->control->current_time.frame_rate;
++}
++
++double jackctl_server_get_latency(jackctl_server server)
++{
++ return server_ptr->engine->driver->period_usecs / 1000.0;
++}
++
++unsigned int
++jackctl_server_get_buffer_size(
++ jackctl_server server)
++{
++ return server_ptr->engine->control->buffer_size;
++}
++
++int
++jack_set_buffer_size_request (jack_engine_t *engine, jack_nframes_t nframes);
++
++bool
++jackctl_server_set_buffer_size(
++ jackctl_server server,
++ unsigned int nframes)
++{
++ int ret;
++ ret = jack_set_buffer_size_request(server_ptr->engine, nframes);
++ if (ret != 0)
++ {
++ jack_error("jack_set_buffer_size_request() failed.");
++ return false;
++ }
++
++ return true;
++}
++
++bool jackctl_server_is_realtime(jackctl_server server)
++{
++ return server_ptr->realtime.b;
++}
++
++unsigned int jackctl_server_get_xruns(jackctl_server server)
++{
++ return server_ptr->xruns;
++}
++
++void jackctl_server_reset_xruns(jackctl_server server)
++{
++ server_ptr->xruns = 0;
++}
++
++const JSList * jackctl_server_get_parameters(jackctl_server server)
++{
++ return server_ptr->parameters;
++}
++
++static
++void
++jackctl_port_registration_notify(
++ void * server,
++ jack_port_id_t port_id,
++ int yn)
++{
++ const char * port_full_name;
++ struct jackctl_client * client_ptr;
++ const char * port_short_name;
++ struct jackctl_port * port_ptr;
++ jack_client_id_t client_id;
++ jack_client_internal_t * client;
++ pid_t pid;
++
++/* jack_info("jackctl_port_registration_notify() called."); */
++
++ port_full_name = server_ptr->engine->control->ports[port_id].name;
++
++ client_id = server_ptr->engine->control->ports[port_id].id;
++ client = jack_client_internal_by_id(server_ptr->engine, client_id);
++ if (client != NULL)
++ {
++ pid = client->control->pid;
++ }
++ else
++ {
++ pid = 0;
++ }
++
++ port_short_name = strchr(port_full_name, ':');
++ if (port_short_name == NULL)
++ {
++ jack_error("port name '%s' does not contain ':' separator char", port_full_name);
++ return;
++ }
++
++ port_short_name++; /* skip ':' separator char */
++
++ if (yn)
++ {
++ /* appearing port */
++
++ client_ptr = jackctl_find_or_create_client(server_ptr, port_full_name, port_short_name - port_full_name - 1, pid);
++ if (client_ptr == NULL)
++ {
++ jack_error("Creation of new jackctl client failed.");
++ return;
++ }
++
++ port_ptr = malloc(sizeof(struct jackctl_port));
++ if (port_ptr == NULL)
++ {
++ jack_error("Allocation of jackctl_port structure failed.");
++ return;
++ }
++
++ port_ptr->id = server_ptr->next_port_id++;
++ port_ptr->name = strdup(port_short_name);
++ port_ptr->client_ptr = client_ptr;
++ port_ptr->flags = server_ptr->engine->control->ports[port_id].flags;
++ port_ptr->type = server_ptr->engine->control->ports[port_id].ptype_id;
++
++ client_ptr->ports = jack_slist_append(client_ptr->ports, port_ptr);
++
++ if (server_ptr->port_appeared_callback != NULL)
++ {
++ port_ptr->patchbay_context = server_ptr->port_appeared_callback(
++ server_ptr->patchbay_context,
++ client_ptr->id,
++ client_ptr->patchbay_context,
++ port_ptr->id,
++ port_ptr->name,
++ port_ptr->flags,
++ port_ptr->type);
++ }
++
++ return;
++ }
++
++ /* disappearing port */
++
++ client_ptr = jackctl_find_client(server_ptr, port_full_name, port_short_name - port_full_name - 1);
++ if (client_ptr == NULL)
++ {
++ jack_error("Port '%s' of unknown jackctl client disappeared.", port_full_name);
++ return;
++ }
++
++ jackctl_remove_port(server_ptr, client_ptr, port_short_name);
++}
++
++void
++jackctl_connection_notify(
++ void * server,
++ jack_port_id_t port1_id,
++ jack_port_id_t port2_id,
++ int connected)
++{
++ const char * port1_full_name;
++ struct jackctl_client * client1_ptr;
++ const char * port1_short_name;
++ struct jackctl_port * port1_ptr;
++ const char * port2_full_name;
++ struct jackctl_client * client2_ptr;
++ const char * port2_short_name;
++ struct jackctl_port * port2_ptr;
++ struct jackctl_connection * connection_ptr;
++ JSList * node_ptr;
++
++/* jack_info("jackctl_connection_notify() called."); */
++
++ port1_full_name = server_ptr->engine->control->ports[port1_id].name;
++
++ port1_short_name = strchr(port1_full_name, ':');
++ if (port1_short_name == NULL)
++ {
++ jack_error("port name '%s' does not contain ':' separator char", port1_full_name);
++ return;
++ }
++
++ port1_short_name++; /* skip ':' separator char */
++
++ port2_full_name = server_ptr->engine->control->ports[port2_id].name;
++
++ port2_short_name = strchr(port2_full_name, ':');
++ if (port2_short_name == NULL)
++ {
++ jack_error("port name '%s' does not contain ':' separator char", port2_full_name);
++ return;
++ }
++
++ port2_short_name++; /* skip ':' separator char */
++
++ client1_ptr = jackctl_find_client(server_ptr, port1_full_name, port1_short_name - port1_full_name - 1);
++ if (client1_ptr == NULL)
++ {
++ jack_error("Port '%s' of unknown jackctl client.", port1_full_name);
++ return;
++ }
++
++ port1_ptr = jackctl_find_port(client1_ptr, port1_short_name);
++ if (port1_ptr == NULL)
++ {
++ jack_error("Unknown port '%s'.", port1_full_name);
++ return;
++ }
++
++ client2_ptr = jackctl_find_client(server_ptr, port2_full_name, port2_short_name - port2_full_name - 1);
++ if (client2_ptr == NULL)
++ {
++ jack_error("Port '%s' of unknown jackctl client.", port2_full_name);
++ return;
++ }
++
++ port2_ptr = jackctl_find_port(client2_ptr, port2_short_name);
++ if (port2_ptr == NULL)
++ {
++ jack_error("Unknown port '%s'.", port2_full_name);
++ return;
++ }
++
++ if (connected && server_ptr->ports_connected_callback != NULL)
++ {
++ connection_ptr = malloc(sizeof(struct jackctl_connection));
++ if (connection_ptr == NULL)
++ {
++ jack_error("Allocation of jackctl_connection structure failed.");
++ return;
++ }
++
++ connection_ptr->id = server_ptr->next_connection_id++;
++ connection_ptr->port1_ptr = port1_ptr;
++ connection_ptr->port2_ptr = port2_ptr;
++
++ server_ptr->connections = jack_slist_append(server_ptr->connections, connection_ptr);
++
++ connection_ptr->patchbay_context = server_ptr->ports_connected_callback(
++ server_ptr->patchbay_context,
++ client1_ptr->id,
++ client1_ptr->patchbay_context,
++ port1_ptr->id,
++ port1_ptr->patchbay_context,
++ client2_ptr->id,
++ client2_ptr->patchbay_context,
++ port2_ptr->id,
++ port2_ptr->patchbay_context,
++ connection_ptr->id);
++ }
++
++ if (!connected && server_ptr->ports_disconnected_callback != NULL)
++ {
++ node_ptr = server_ptr->connections;
++
++ while (node_ptr != NULL)
++ {
++ connection_ptr = node_ptr->data;
++ if ((connection_ptr->port1_ptr == port1_ptr &&
++ connection_ptr->port2_ptr == port2_ptr) ||
++ (connection_ptr->port1_ptr == port2_ptr &&
++ connection_ptr->port2_ptr == port1_ptr))
++ {
++ server_ptr->connections = jack_slist_remove(server_ptr->connections, connection_ptr);
++
++ server_ptr->ports_disconnected_callback(
++ server_ptr->patchbay_context,
++ client1_ptr->id,
++ client1_ptr->patchbay_context,
++ port1_ptr->id,
++ port1_ptr->patchbay_context,
++ client2_ptr->id,
++ client2_ptr->patchbay_context,
++ port2_ptr->id,
++ port2_ptr->patchbay_context,
++ connection_ptr->id,
++ connection_ptr->patchbay_context);
++ return;
++ }
++
++ node_ptr = jack_slist_next(node_ptr);
++ }
++
++ jack_error("Cannot find connection being removed");
++ }
++}
++
++#define driver_ptr ((struct jackctl_driver *)driver)
++
++bool
++jackctl_server_start(
++ jackctl_server server,
++ jackctl_driver driver,
++ void * context,
++ jackctl_client_appeared_callback client_appeared_callback,
++ jackctl_client_disappeared_callback client_disappeared_callback,
++ jackctl_port_appeared_callback port_appeared_callback,
++ jackctl_port_disappeared_callback port_disappeared_callback,
++ jackctl_ports_connected_callback ports_connected_callback,
++ jackctl_ports_disconnected_callback ports_disconnected_callback)
++{
++ int rc;
++
++ switch (server_ptr->clock_source.c)
++ {
++ case 'h':
++ jack_info("Using HPET timer as clock source.");
++ clock_source = JACK_TIMER_HPET;
++ break;
++ case 'c':
++ jack_info("Using Cycle Counter as clock source.");
++ clock_source = JACK_TIMER_CYCLE_COUNTER;
++ break;
++ case 's':
++ jack_info("Using System timer as clock source.");
++ clock_source = JACK_TIMER_SYSTEM_CLOCK;
++ break;
++ default:
++ jack_error(
++ "Invalid value '%c' for clock source, "
++ "valid values are "
++ "'c' for Cycle Counter, "
++ "'h' for HPET timer and "
++ "'s' for System timer",
++ server_ptr->clock_source.c);
++ return false;
++ }
++
++ rc = jack_register_server(server_ptr->name, server_ptr->replace_registry.b);
++ switch (rc)
++ {
++ case EEXIST:
++ jack_error("`%s' server already active", server_ptr->name);
++ goto fail;
++ case ENOSPC:
++ jack_error("too many servers already active");
++ goto fail;
++ case ENOMEM:
++ jack_error("no access to shm registry");
++ goto fail;
++ }
++
++ if (server_ptr->verbose.b)
++ {
++ jack_info ("server `%s' registered", server_ptr->name);
++ }
++
++ /* clean up shared memory and files from any previous
++ * instance of this server name */
++ jack_cleanup_shm();
++ jack_cleanup_files(server_ptr->name);
++
++ if (!server_ptr->realtime.b && server_ptr->client_timeout.i == 0)
++ server_ptr->client_timeout.i = 500; /* 0.5 sec; usable when non realtime. */
++
++ /* get the engine/driver started */
++
++ server_ptr->engine = jack_engine_new(
++ server_ptr->realtime.b,
++ server_ptr->realtime_priority.i,
++ !server_ptr->no_mem_lock.b,
++ server_ptr->do_unlock.b,
++ server_ptr->name,
++ server_ptr->temporary.b,
++ server_ptr->verbose.b,
++ server_ptr->client_timeout.i,
++ server_ptr->port_max.ui,
++ getpid(),
++ server_ptr->frame_time_offset.i,
++ server_ptr->nozombies.b,
++ NULL);
++ if (server_ptr->engine == NULL)
++ {
++ jack_error("Cannot create engine!");
++ goto fail_unregister_server;
++ }
++
++ server_ptr->engine->jackctl_port_registration_notify = jackctl_port_registration_notify;
++ server_ptr->engine->jackctl_connection_notify = jackctl_connection_notify;
++ server_ptr->engine->jackctl_context = server_ptr;
++
++ server_ptr->patchbay_context = context;
++ server_ptr->client_appeared_callback = client_appeared_callback;
++ server_ptr->client_disappeared_callback = client_disappeared_callback;
++ server_ptr->port_appeared_callback = port_appeared_callback;
++ server_ptr->port_disappeared_callback = port_disappeared_callback;
++ server_ptr->ports_connected_callback = ports_connected_callback;
++ server_ptr->ports_disconnected_callback = ports_disconnected_callback;
++
++ server_ptr->clients = NULL;
++ server_ptr->connections = NULL;
++
++ jack_info("loading driver \"%s\" ...", driver_ptr->desc_ptr->name);
++
++ if (jack_engine_load_driver(server_ptr->engine, driver_ptr->desc_ptr, driver_ptr->set_parameters)) {
++ jack_error("cannot load driver module %s", driver_ptr->desc_ptr->name);
++ goto fail_delete_engine;
++ }
++
++ server_ptr->xruns = 0;
++ server_ptr->engine->driver->internal_client->private_client->xrun = jackctl_xrun;
++ server_ptr->engine->driver->internal_client->private_client->xrun_arg = server_ptr;
++
++ if (server_ptr->engine->driver->start(server_ptr->engine->driver) != 0) {
++ jack_error("cannot start \"%s\" driver", driver_ptr->desc_ptr->name);
++ goto fail_delete_engine;
++ }
++
++ return true;
++
++fail_unregister_server:
++ if (server_ptr->verbose.b)
++ {
++ jack_info("cleaning up shared memory");
++ }
++
++ jack_cleanup_shm();
++
++ if (server_ptr->verbose.b)
++ {
++ jack_info("cleaning up files");
++ }
++
++ jack_cleanup_files(server_ptr->name);
++
++ if (server_ptr->verbose.b)
++ {
++ jack_info("unregistering server `%s'", server_ptr->name);
++ }
++
++ jack_unregister_server(server_ptr->name);
++
++fail_delete_engine:
++ jack_engine_delete(server_ptr->engine);
++ server_ptr->engine = NULL;
++
++fail:
++ return false;
++}
++
++int
++jackctl_get_client_pid(
++ jackctl_server server,
++ const char * name)
++{
++ struct jackctl_client * client_ptr;
++
++ client_ptr = jackctl_find_client(server_ptr, name, strlen(name));
++ if (client_ptr == NULL)
++ {
++ return 0;
++ }
++
++ return client_ptr->pid;
++}
++
++#undef server_ptr
++
++const char * jackctl_driver_get_name(jackctl_driver driver)
++{
++ return driver_ptr->desc_ptr->name;
++}
++
++const JSList * jackctl_driver_get_parameters(jackctl_driver driver)
++{
++ return driver_ptr->parameters;
++}
++
++#undef driver_ptr
++
++#define parameter_ptr ((struct jackctl_parameter *)parameter)
++
++const char * jackctl_parameter_get_name(jackctl_parameter parameter)
++{
++ return parameter_ptr->name;
++}
++
++const char * jackctl_parameter_get_short_description(jackctl_parameter parameter)
++{
++ return parameter_ptr->short_description;
++}
++
++const char * jackctl_parameter_get_long_description(jackctl_parameter parameter)
++{
++ return parameter_ptr->long_description;
++}
++
++bool jackctl_parameter_has_range_constraint(jackctl_parameter parameter)
++{
++ return false;
++ //return parameter_ptr->constraint_ptr != NULL && (parameter_ptr->constraint_ptr->flags & JACK_CONSTRAINT_FLAG_RANGE) != 0;
++}
++
++bool jackctl_parameter_has_enum_constraint(jackctl_parameter parameter)
++{
++ return false;
++ //return parameter_ptr->constraint_ptr != NULL && (parameter_ptr->constraint_ptr->flags & JACK_CONSTRAINT_FLAG_RANGE) == 0;
++}
++
++uint32_t jackctl_parameter_get_enum_constraints_count(jackctl_parameter parameter)
++{
++#if 0
++ if (!jackctl_parameter_has_enum_constraint(parameter_ptr))
++ {
++ return 0;
++ }
++
++ return parameter_ptr->constraint_ptr->constraint.enumeration.count;
++#else
++ return 0;
++#endif
++}
++
++union jackctl_parameter_value jackctl_parameter_get_enum_constraint_value(jackctl_parameter parameter, uint32_t index)
++{
++ //jack_driver_param_value_t * value_ptr;
++ union jackctl_parameter_value jackctl_value;
++
++#if 0
++ value_ptr = ¶meter_ptr->constraint_ptr->constraint.enumeration.possible_values_array[index].value;
++
++ switch (parameter_ptr->type)
++ {
++ case JackParamInt:
++ jackctl_value.i = value_ptr->i;
++ break;
++ case JackParamUInt:
++ jackctl_value.ui = value_ptr->ui;
++ break;
++ case JackParamChar:
++ jackctl_value.c = value_ptr->c;
++ break;
++ case JackParamString:
++ strcpy(jackctl_value.str, value_ptr->str);
++ break;
++ default:
++#endif
++ jack_error("bad driver parameter type %i (enum constraint)", (int)parameter_ptr->type);
++ assert(0);
++#if 0
++ }
++#endif
++
++ return jackctl_value;
++}
++
++const char * jackctl_parameter_get_enum_constraint_description(jackctl_parameter parameter, uint32_t index)
++{
++ return "???";
++ //return parameter_ptr->constraint_ptr->constraint.enumeration.possible_values_array[index].short_desc;
++}
++
++void jackctl_parameter_get_range_constraint(jackctl_parameter parameter, union jackctl_parameter_value * min_ptr, union jackctl_parameter_value * max_ptr)
++{
++#if 0
++ switch (parameter_ptr->type)
++ {
++ case JackParamInt:
++ min_ptr->i = parameter_ptr->constraint_ptr->constraint.range.min.i;
++ max_ptr->i = parameter_ptr->constraint_ptr->constraint.range.max.i;
++ return;
++ case JackParamUInt:
++ min_ptr->ui = parameter_ptr->constraint_ptr->constraint.range.min.ui;
++ max_ptr->ui = parameter_ptr->constraint_ptr->constraint.range.max.ui;
++ return;
++ default:
++#endif
++ jack_error("bad driver parameter type %i (range constraint)", (int)parameter_ptr->type);
++ assert(0);
++#if 0
++ }
++#endif
++}
++
++bool jackctl_parameter_constraint_is_strict(jackctl_parameter parameter)
++{
++ return false;
++ //return parameter_ptr->constraint_ptr != NULL && (parameter_ptr->constraint_ptr->flags & JACK_CONSTRAINT_FLAG_STRICT) != 0;
++}
++
++bool jackctl_parameter_constraint_is_fake_value(jackctl_parameter parameter)
++{
++ return false;
++ //return parameter_ptr->constraint_ptr != NULL && (parameter_ptr->constraint_ptr->flags & JACK_CONSTRAINT_FLAG_FAKE_VALUE) != 0;
++}
++
++jackctl_param_type_t jackctl_parameter_get_type(jackctl_parameter parameter)
++{
++ return parameter_ptr->type;
++}
++
++bool jackctl_parameter_is_set(jackctl_parameter parameter)
++{
++ return parameter_ptr->is_set;
++}
++
++union jackctl_parameter_value jackctl_parameter_get_value(jackctl_parameter parameter)
++{
++ return *parameter_ptr->value_ptr;
++}
++
++bool jackctl_parameter_reset(jackctl_parameter parameter)
++{
++ if (!parameter_ptr->is_set)
++ {
++ return true;
++ }
++
++ parameter_ptr->is_set = false;
++
++ *parameter_ptr->value_ptr = *parameter_ptr->default_value_ptr;
++
++ return true;
++}
++
++bool jackctl_parameter_set_value(jackctl_parameter parameter, const union jackctl_parameter_value * value_ptr)
++{
++ bool new_driver_parameter;
++
++ /* for driver parameters, set the parameter by adding jack_driver_param_t in the set_parameters list */
++ if (parameter_ptr->driver_ptr != NULL)
++ {
++/* jack_info("setting driver parameter %p ...", parameter_ptr); */
++ new_driver_parameter = parameter_ptr->driver_parameter_ptr == NULL;
++ if (new_driver_parameter)
++ {
++/* jack_info("new driver parameter..."); */
++
++ parameter_ptr->driver_parameter_ptr = malloc(sizeof(jack_driver_param_t));
++ if (parameter_ptr->driver_parameter_ptr == NULL)
++ {
++ jack_error ("Allocation of jack_driver_param_t structure failed");
++ return false;
++ }
++
++ parameter_ptr->driver_parameter_ptr->character = parameter_ptr->id;
++
++ parameter_ptr->driver_ptr->set_parameters = jack_slist_append(parameter_ptr->driver_ptr->set_parameters, parameter_ptr->driver_parameter_ptr);
++ }
++
++ switch (parameter_ptr->type)
++ {
++ case JackParamInt:
++ parameter_ptr->driver_parameter_ptr->value.i = value_ptr->i;
++ break;
++ case JackParamUInt:
++ parameter_ptr->driver_parameter_ptr->value.ui = value_ptr->ui;
++ break;
++ case JackParamChar:
++ parameter_ptr->driver_parameter_ptr->value.c = value_ptr->c;
++ break;
++ case JackParamString:
++ strcpy(parameter_ptr->driver_parameter_ptr->value.str, value_ptr->str);
++ break;
++ case JackParamBool:
++ parameter_ptr->driver_parameter_ptr->value.i = value_ptr->b;
++ break;
++ default:
++ jack_error("unknown parameter type %i", (int)parameter_ptr->type);
++ assert(0);
++
++ if (new_driver_parameter)
++ {
++ parameter_ptr->driver_ptr->set_parameters = jack_slist_remove(parameter_ptr->driver_ptr->set_parameters, parameter_ptr->driver_parameter_ptr);
++ }
++
++ return false;
++ }
++ }
++
++ parameter_ptr->is_set = true;
++ *parameter_ptr->value_ptr = *value_ptr;
++
++ return true;
++}
++
++union jackctl_parameter_value jackctl_parameter_get_default_value(jackctl_parameter parameter)
++{
++ return *parameter_ptr->default_value_ptr;
++}
++
++#undef parameter_ptr
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackctl.h jack-audio-connection-kit-0.116.1_dbus/jackd/jackctl.h
+--- jack-audio-connection-kit-0.116.1/jackd/jackctl.h 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackctl.h 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,592 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ JACK control API
++
++ Copyright (C) 2008 Nedko Arnaudov
++ Copyright (C) 2008 GRAME
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
++#define JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
++
++/** Parameter types, intentionally similar to jack_driver_param_type_t */
++typedef enum
++{
++ JackParamInt = 1, /**< @brief value type is a signed integer */
++ JackParamUInt, /**< @brief value type is an unsigned integer */
++ JackParamChar, /**< @brief value type is a char */
++ JackParamString, /**< @brief value type is a string with max size of ::JACK_PARAM_STRING_MAX+1 chars */
++ JackParamBool, /**< @brief value type is a boolean */
++} jackctl_param_type_t;
++
++/** @brief Max value that jackctl_param_type_t type can have */
++#define JACK_PARAM_MAX (JackParamBool + 1)
++
++/** @brief Max length of string parameter value, excluding terminating nul char */
++#define JACK_PARAM_STRING_MAX 63
++
++/** @brief Type for parameter value */
++/* intentionally similar to jack_driver_param_value_t */
++union jackctl_parameter_value
++{
++ uint32_t ui; /**< @brief member used for ::JackParamUInt */
++ int32_t i; /**< @brief member used for ::JackParamInt */
++ char c; /**< @brief member used for ::JackParamChar */
++ char str[JACK_PARAM_STRING_MAX + 1]; /**< @brief member used for ::JackParamString */
++ bool b; /**< @brief member used for ::JackParamBool */
++};
++
++/** opaque type for server object */
++typedef struct jackctl_server jackctl_server_t;
++
++/** opaque type for driver object */
++typedef struct jackctl_driver jackctl_driver_t;
++
++/** opaque type for internal client object */
++typedef struct jackctl_internal jackctl_internal_t;
++
++/** opaque type for parameter object */
++typedef struct jackctl_parameter jackctl_parameter_t;
++
++typedef jackctl_server_t * jackctl_server;
++typedef jackctl_driver_t * jackctl_driver;
++typedef jackctl_internal_t * jackctl_internal;
++typedef jackctl_parameter_t * jackctl_parameter;
++
++typedef
++void *
++(* jackctl_client_appeared_callback)(
++ void * server_context,
++ uint64_t client_id,
++ const char * client_name);
++
++typedef
++void
++(* jackctl_client_disappeared_callback)(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context);
++
++typedef
++void *
++(* jackctl_port_appeared_callback)(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context,
++ uint64_t port_id,
++ const char * port_name,
++ uint32_t port_flags,
++ uint32_t port_type);
++
++typedef
++void
++(* jackctl_port_disappeared_callback)(
++ void * server_context,
++ uint64_t client_id,
++ void * client_context,
++ uint64_t port_id,
++ void * port_context);
++
++typedef
++void *
++(* jackctl_ports_connected_callback)(
++ void * server_context,
++ uint64_t client1_id,
++ void * client1_context,
++ uint64_t port1_id,
++ void * port1_context,
++ uint64_t client2_id,
++ void * client2_context,
++ uint64_t port2_id,
++ void * port2_context,
++ uint64_t connection_id);
++
++typedef
++void
++(* jackctl_ports_disconnected_callback)(
++ void * server_context,
++ uint64_t client1_id,
++ void * client1_context,
++ uint64_t port1_id,
++ void * port1_context,
++ uint64_t client2_id,
++ void * client2_context,
++ uint64_t port2_id,
++ void * port2_context,
++ uint64_t connection_id,
++ void * connection_context);
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++#if 0
++} /* Adjust editor indent */
++#endif
++
++/**
++ * Call this function to setup process signal handling. As a general
++ * rule, it is required for proper operation for the server object.
++ *
++ * @param flags signals setup flags, use 0 for none. Currently no
++ * flags are defined
++ *
++ * @return the configurated signal set.
++ */
++sigset_t
++jackctl_setup_signals(
++ unsigned int flags);
++
++/**
++ * Call this function to wait on a signal set.
++ *
++ * @param signals signals set to wait on
++ */
++void
++jackctl_wait_signals(
++ sigset_t signals);
++
++/**
++ * Call this function to create server object.
++ *
++ * @return server object handle, NULL if creation of server object
++ * failed. Successfully created server object must be destroyed with
++ * paired call to ::jackctl_server_destroy
++ */
++jackctl_server_t *
++jackctl_server_create();
++
++/**
++ * Call this function to destroy server object.
++ *
++ * @param server server object handle to destroy
++ */
++void
++jackctl_server_destroy(
++ jackctl_server_t * server);
++
++/**
++ * Call this function to get list of available drivers. List node data
++ * pointers is a driver object handle (::jackctl_driver_t).
++ *
++ * @param server server object handle to get drivers for
++ *
++ * @return Single linked list of driver object handles. Must not be
++ * modified. Always same for same server object.
++ */
++const JSList *
++jackctl_server_get_drivers_list(
++ jackctl_server_t * server);
++
++/**
++ * Call this function to start JACK server
++ *
++ * @param server server object handle
++ * @param driver driver to use
++ *
++ * @return success status: true - success, false - fail
++ */
++bool
++jackctl_server_start(
++ jackctl_server_t * server,
++ jackctl_driver_t * driver,
++ void * context,
++ jackctl_client_appeared_callback client_appeared_callback,
++ jackctl_client_disappeared_callback client_disappeared_callback,
++ jackctl_port_appeared_callback port_appeared_callback,
++ jackctl_port_disappeared_callback port_disappeared_callback,
++ jackctl_ports_connected_callback ports_connected_callback,
++ jackctl_ports_disconnected_callback ports_disconnected_callback);
++
++/**
++ * Call this function to stop JACK server
++ *
++ * @param server server object handle
++ *
++ * @return success status: true - success, false - fail
++ */
++bool
++jackctl_server_stop(
++ jackctl_server_t * server);
++
++/**
++ * Call this function to get list of server parameters. List node data
++ * pointers is a parameter object handle (::jackctl_parameter_t).
++ *
++ * @param server server object handle to get parameters for
++ *
++ * @return Single linked list of parameter object handles. Must not be
++ * modified. Always same for same server object.
++ */
++const JSList *
++jackctl_server_get_parameters(
++ jackctl_server_t * server);
++
++/**
++ * Call this function to get name of driver.
++ *
++ * @param driver driver object handle to get name of
++ *
++ * @return driver name. Must not be modified. Always same for same
++ * driver object.
++ */
++const char *
++jackctl_driver_get_name(
++ jackctl_driver_t * driver);
++
++/**
++ * Call this function to get list of driver parameters. List node data
++ * pointers is a parameter object handle (::jackctl_parameter_t).
++ *
++ * @param driver driver object handle to get parameters for
++ *
++ * @return Single linked list of parameter object handles. Must not be
++ * modified. Always same for same driver object.
++ */
++const JSList *
++jackctl_driver_get_parameters(
++ jackctl_driver_t * driver);
++
++/**
++ * Call this function to get parameter name.
++ *
++ * @param parameter parameter object handle to get name of
++ *
++ * @return parameter name. Must not be modified. Always same for same
++ * parameter object.
++ */
++const char *
++jackctl_parameter_get_name(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function to get parameter short description.
++ *
++ * @param parameter parameter object handle to get short description of
++ *
++ * @return parameter short description. Must not be modified. Always
++ * same for same parameter object.
++ */
++const char *
++jackctl_parameter_get_short_description(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function to get parameter long description.
++ *
++ * @param parameter parameter object handle to get long description of
++ *
++ * @return parameter long description. Must not be modified. Always
++ * same for same parameter object.
++ */
++const char *
++jackctl_parameter_get_long_description(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function to get parameter type.
++ *
++ * @param parameter parameter object handle to get type of
++ *
++ * @return parameter type. Always same for same parameter object.
++ */
++jackctl_param_type_t
++jackctl_parameter_get_type(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function to get parameter character.
++ *
++ * @param parameter parameter object handle to get character of
++ *
++ * @return character.
++ */
++char
++jackctl_parameter_get_id(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function to check whether parameter has been set, or its
++ * default value is being used.
++ *
++ * @param parameter parameter object handle to check
++ *
++ * @return true - parameter is set, false - parameter is using default
++ * value.
++ */
++bool
++jackctl_parameter_is_set(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function to reset parameter to its default value.
++ *
++ * @param parameter parameter object handle to reset value of
++ *
++ * @return success status: true - success, false - fail
++ */
++bool
++jackctl_parameter_reset(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function to get parameter value.
++ *
++ * @param parameter parameter object handle to get value of
++ *
++ * @return parameter value.
++ */
++union jackctl_parameter_value
++jackctl_parameter_get_value(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function to set parameter value.
++ *
++ * @param parameter parameter object handle to get value of
++ * @param value_ptr pointer to variable containing parameter value
++ *
++ * @return success status: true - success, false - fail
++ */
++bool
++jackctl_parameter_set_value(
++ jackctl_parameter_t * parameter,
++ const union jackctl_parameter_value * value_ptr);
++
++/**
++ * Call this function to get parameter default value.
++ *
++ * @param parameter parameter object handle to get default value of
++ *
++ * @return parameter default value.
++ */
++union jackctl_parameter_value
++jackctl_parameter_get_default_value(
++ jackctl_parameter_t * parameter);
++
++/**
++ * Call this function check whether parameter has range constraint.
++ *
++ * @param parameter object handle of parameter to check
++ *
++ * @return whether parameter has range constraint.
++ */
++bool
++jackctl_parameter_has_range_constraint(
++ jackctl_parameter_t * parameter_ptr);
++
++/**
++ * Call this function check whether parameter has enumeration constraint.
++ *
++ * @param parameter object handle of parameter to check
++ *
++ * @return whether parameter has enumeration constraint.
++ */
++bool
++jackctl_parameter_has_enum_constraint(
++ jackctl_parameter_t * parameter_ptr);
++
++/**
++ * Call this function get how many enumeration values parameter has.
++ *
++ * @param parameter object handle of parameter
++ *
++ * @return number of enumeration values
++ */
++uint32_t
++jackctl_parameter_get_enum_constraints_count(
++ jackctl_parameter_t * parameter_ptr);
++
++/**
++ * Call this function to get parameter enumeration value.
++ *
++ * @param parameter object handle of parameter
++ * @param index index of parameter enumeration value
++ *
++ * @return enumeration value.
++ */
++union jackctl_parameter_value
++jackctl_parameter_get_enum_constraint_value(
++ jackctl_parameter_t * parameter_ptr,
++ uint32_t index);
++
++/**
++ * Call this function to get parameter enumeration value description.
++ *
++ * @param parameter object handle of parameter
++ * @param index index of parameter enumeration value
++ *
++ * @return enumeration value description.
++ */
++const char *
++jackctl_parameter_get_enum_constraint_description(
++ jackctl_parameter_t * parameter_ptr,
++ uint32_t index);
++
++/**
++ * Call this function to get parameter range.
++ *
++ * @param parameter object handle of parameter
++ * @param min_ptr pointer to variable receiving parameter minimum value
++ * @param max_ptr pointer to variable receiving parameter maximum value
++ */
++void
++jackctl_parameter_get_range_constraint(
++ jackctl_parameter_t * parameter_ptr,
++ union jackctl_parameter_value * min_ptr,
++ union jackctl_parameter_value * max_ptr);
++
++/**
++ * Call this function to check whether parameter constraint is strict,
++ * i.e. whether supplying non-matching value will not work for sure.
++ *
++ * @param parameter parameter object handle to check
++ *
++ * @return whether parameter constraint is strict.
++ */
++bool
++jackctl_parameter_constraint_is_strict(
++ jackctl_parameter_t * parameter_ptr);
++
++/**
++ * Call this function to check whether parameter has fake values,
++ * i.e. values have no user meaningful meaning and only value
++ * description is meaningful to user.
++ *
++ * @param parameter parameter object handle to check
++ *
++ * @return whether parameter constraint is strict.
++ */
++bool
++jackctl_parameter_constraint_is_fake_value(
++ jackctl_parameter_t * parameter_ptr);
++
++/**
++ * Call this function to get list of available internal clients. List node data
++ * pointers is a internal client object handle (::jackctl_internal_t).
++ *
++ * @param server server object handle to get internal clients for
++ *
++ * @return Single linked list of internal client object handles. Must not be
++ * modified. Always same for same server object.
++ */
++const JSList *
++jackctl_server_get_internals_list(
++ jackctl_server_t * server);
++
++/**
++ * Call this function to get name of internal client.
++ *
++ * @param internal internal object handle to get name of
++ *
++ * @return internal name. Must not be modified. Always same for same
++ * internal object.
++ */
++const char *
++jackctl_internal_get_name(
++ jackctl_internal_t * internal);
++
++/**
++ * Call this function to get list of internal parameters. List node data
++ * pointers is a parameter object handle (::jackctl_parameter_t).
++ *
++ * @param internal internal object handle to get parameters for
++ *
++ * @return Single linked list of parameter object handles. Must not be
++ * modified. Always same for same internal object.
++ */
++const JSList *
++jackctl_internal_get_parameters(
++ jackctl_internal_t * internal);
++
++/**
++ * Call this function to load one internal client.
++ *
++ * @param server server object handle
++ * @param internal internal to use
++ *
++ * @return success status: true - success, false - fail
++ */
++bool
++jackctl_server_load_internal(
++ jackctl_server_t * server,
++ jackctl_internal_t * internal);
++
++/**
++ * Call this function to unload one internal client.
++ *
++ * @param server server object handle
++ * @param internal internal to unload
++ *
++ * @return success status: true - success, false - fail
++ */
++bool
++jackctl_server_unload_internal(
++ jackctl_server_t * server,
++ jackctl_internal_t * internal);
++
++
++double jackctl_server_get_load(jackctl_server server);
++unsigned int jackctl_server_get_sample_rate(jackctl_server server);
++double jackctl_server_get_latency(jackctl_server server);
++unsigned int jackctl_server_get_buffer_size(jackctl_server server);
++bool jackctl_server_set_buffer_size(jackctl_server server, unsigned int nframes);
++bool jackctl_server_is_realtime(jackctl_server server);
++unsigned int jackctl_server_get_xruns(jackctl_server server);
++void jackctl_server_reset_xruns(jackctl_server server);
++int jackctl_get_client_pid(jackctl_server server, const char * name);
++
++bool
++jackctl_connect_ports_by_name(
++ jackctl_server server,
++ const char * client1_name,
++ const char * port1_name,
++ const char * client2_name,
++ const char * port2_name);
++
++bool
++jackctl_connect_ports_by_id(
++ jackctl_server server,
++ const char * port1_id,
++ const char * port2_id);
++
++bool
++jackctl_disconnect_ports_by_name(
++ jackctl_server server,
++ const char * client1_name,
++ const char * port1_name,
++ const char * client2_name,
++ const char * port2_name);
++
++bool
++jackctl_disconnect_ports_by_id(
++ jackctl_server server,
++ const char * port1_id,
++ const char * port2_id);
++
++bool
++jackctl_disconnect_ports_by_connection_id(
++ jackctl_server server,
++ const char * connection_id);
++
++#if 0
++{ /* Adjust editor indent */
++#endif
++#ifdef __cplusplus
++} /* extern "C" */
++#endif
++
++#endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackdbus.c jack-audio-connection-kit-0.116.1_dbus/jackd/jackdbus.c
+--- jack-audio-connection-kit-0.116.1/jackd/jackdbus.c 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackdbus.c 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,894 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++ Copyright (C) 2007-2008 Juuso Alasuutari
++ Copyright (C) 2008 Marc-Olivier Barre
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#include <config.h>
++
++#include <stdio.h>
++#include <string.h>
++#include <errno.h>
++#include <sys/stat.h>
++#include <signal.h>
++#include <dbus/dbus.h>
++
++#include <jack/internal.h>
++
++#include "jackdbus.h"
++#include "jackcontroller.h"
++
++FILE *g_logfile;
++char *g_jackdbus_config_dir;
++size_t g_jackdbus_config_dir_len; /* without terminating '\0' char */
++char *g_jackdbus_log_dir;
++size_t g_jackdbus_log_dir_len; /* without terminating '\0' char */
++int g_exit_command;
++DBusConnection *g_connection;
++
++void
++jack_dbus_send_signal(
++ const char *sender_object_path,
++ const char *iface,
++ const char *signal_name,
++ int first_arg_type,
++ ...)
++{
++ DBusMessage *message_ptr;
++ va_list ap;
++
++ va_start(ap, first_arg_type);
++
++ message_ptr = dbus_message_new_signal(sender_object_path, iface, signal_name);
++ if (message_ptr == NULL)
++ {
++ jack_error("dbus_message_new_signal() failed.");
++ goto exit;
++ }
++
++ if (!dbus_message_append_args_valist(message_ptr, first_arg_type, ap))
++ {
++ jack_error("dbus_message_append_args_valist() failed.");
++ goto unref;
++ }
++
++ /* Add message to outgoing message queue */
++ if (!dbus_connection_send(g_connection, message_ptr, NULL))
++ {
++ jack_error("dbus_connection_send() failed.");
++ goto unref;
++ }
++
++unref:
++ dbus_message_unref(message_ptr);
++
++exit:
++ va_end(ap);
++}
++
++/*
++ * Send a method return.
++ *
++ * If call->reply is NULL (i.e. a message construct method failed
++ * due to lack of memory) attempt to send a void method return.
++ */
++static
++void
++jack_dbus_send_method_return(
++ struct jack_dbus_method_call * call)
++{
++ if (call->reply)
++ {
++ retry_send:
++ if (!dbus_connection_send (call->connection, call->reply, NULL))
++ {
++ jack_error ("Ran out of memory trying to queue method return");
++ }
++
++ dbus_connection_flush (call->connection);
++ dbus_message_unref (call->reply);
++ call->reply = NULL;
++ }
++ else
++ {
++ jack_error ("send_method_return() called with a NULL message,"
++ " trying to construct a void return...");
++
++ if ((call->reply = dbus_message_new_method_return (call->message)))
++ {
++ goto retry_send;
++ }
++ else
++ {
++ jack_error ("Failed to construct method return!");
++ }
++ }
++}
++
++#define object_ptr ((struct jack_dbus_object_descriptor *)data)
++
++/*
++ * The D-Bus message handler for object path /org/jackaudio/Controller.
++ */
++DBusHandlerResult
++jack_dbus_message_handler(
++ DBusConnection *connection,
++ DBusMessage *message,
++ void *data)
++{
++ struct jack_dbus_method_call call;
++ const char *interface_name;
++ struct jack_dbus_interface_descriptor ** interface_ptr_ptr;
++
++ /* Check if the message is a method call. If not, ignore it. */
++ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
++ {
++ goto handled;
++ }
++
++ /* Get the invoked method's name and make sure it's non-NULL. */
++ if (!(call.method_name = dbus_message_get_member (message)))
++ {
++ jack_dbus_error(
++ &call,
++ JACK_DBUS_ERROR_UNKNOWN_METHOD,
++ "Received method call with empty method name");
++ goto send_return;
++ }
++
++ /* Initialize our data. */
++ call.context = object_ptr->context;
++ call.connection = connection;
++ call.message = message;
++ call.reply = NULL;
++
++ /* Check if there's an interface specified for this method call. */
++ interface_name = dbus_message_get_interface (message);
++ if (interface_name != NULL)
++ {
++ /* Check if we can match the interface and method.
++ * The inteface handler functions only return false if the
++ * method name was unknown, otherwise they run the specified
++ * method and return TRUE.
++ */
++
++ interface_ptr_ptr = object_ptr->interfaces;
++
++ while (*interface_ptr_ptr != NULL)
++ {
++ if (strcmp(interface_name, (*interface_ptr_ptr)->name) == 0)
++ {
++ if (!(*interface_ptr_ptr)->handler(&call, (*interface_ptr_ptr)->methods))
++ {
++ break;
++ }
++
++ goto send_return;
++ }
++
++ interface_ptr_ptr++;
++ }
++ }
++ else
++ {
++ /* No interface was specified so we have to try them all. This is
++ * dictated by the D-Bus specification which states that method calls
++ * omitting the interface must never be rejected.
++ */
++
++ interface_ptr_ptr = object_ptr->interfaces;
++
++ while (*interface_ptr_ptr != NULL)
++ {
++ if ((*interface_ptr_ptr)->handler(&call, (*interface_ptr_ptr)->methods))
++ {
++ goto send_return;
++ }
++
++ interface_ptr_ptr++;
++ }
++ }
++
++ jack_dbus_error(
++ &call,
++ JACK_DBUS_ERROR_UNKNOWN_METHOD,
++ "Method \"%s\" with signature \"%s\" on interface \"%s\" doesn't exist",
++ call.method_name,
++ dbus_message_get_signature(message),
++ interface_name);
++
++send_return:
++ jack_dbus_send_method_return(&call);
++
++handled:
++ return DBUS_HANDLER_RESULT_HANDLED;
++}
++
++void
++jack_dbus_message_handler_unregister(
++ DBusConnection *connection,
++ void *data)
++{
++ jack_info ("Message handler was unregistered");
++}
++
++#undef object_ptr
++
++/*
++ * Check if the supplied method name exists in org.jackaudio.JackConfigure,
++ * if it does execute it and return TRUE. Otherwise return FALSE.
++ */
++bool
++jack_dbus_run_method(
++ struct jack_dbus_method_call *call,
++ const struct jack_dbus_interface_method_descriptor * methods)
++{
++ const struct jack_dbus_interface_method_descriptor * method_ptr;
++
++ method_ptr = methods;
++
++ while (method_ptr->name != NULL)
++ {
++ if (strcmp(call->method_name, method_ptr->name) == 0)
++ {
++ method_ptr->handler(call);
++ return TRUE;
++ }
++
++ method_ptr++;
++ }
++
++ return FALSE;
++}
++
++/*
++ * Read arguments from a method call.
++ * If the operation fails construct an error and return false,
++ * otherwise return true.
++ */
++bool
++jack_dbus_get_method_args(
++ struct jack_dbus_method_call *call,
++ int type,
++ ...)
++{
++ va_list args;
++ DBusError error;
++ bool retval = true;
++
++ va_start (args, type);
++ dbus_error_init (&error);
++
++ if (!dbus_message_get_args_valist (call->message, &error, type, args))
++ {
++ jack_dbus_error (call, JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid arguments to method \"%s\"",
++ call->method_name);
++ retval = false;
++ }
++
++ dbus_error_free (&error);
++ va_end (args);
++
++ return retval;
++}
++
++/*
++ * Read a string and a variant argument from a method call.
++ * If the operation fails construct an error and return false,
++ * otherwise return true.
++ */
++bool
++jack_dbus_get_method_args_string_and_variant(
++ struct jack_dbus_method_call *call,
++ const char **arg1,
++ message_arg_t *arg2,
++ int *type_ptr)
++{
++ DBusMessageIter iter, sub_iter;
++
++ /* First we want a string... */
++ if (dbus_message_iter_init (call->message, &iter)
++ && dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_STRING)
++ {
++ dbus_message_iter_get_basic (&iter, arg1);
++ dbus_message_iter_next (&iter);
++
++ /* ...and then a variant. */
++ if (dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_VARIANT)
++ {
++ dbus_message_iter_recurse (&iter, &sub_iter);
++ dbus_message_iter_get_basic (&sub_iter, arg2);
++ *type_ptr = dbus_message_iter_get_arg_type (&sub_iter);
++
++ /* Got what we wanted. */
++ return true;
++ }
++ }
++
++ jack_dbus_error (call, JACK_DBUS_ERROR_INVALID_ARGS,
++ "Invalid arguments to method \"%s\"",
++ call->method_name);
++
++ return false;
++}
++
++/*
++ * Append a variant type to a D-Bus message.
++ * Return false if something fails, true otherwise.
++ */
++bool
++jack_dbus_message_append_variant(
++ DBusMessageIter *iter,
++ int type,
++ const char *signature,
++ message_arg_t *arg)
++{
++ DBusMessageIter sub_iter;
++
++ /* Open a variant container. */
++ if (!dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, signature, &sub_iter))
++ {
++ goto fail;
++ }
++
++ /* Append the supplied value. */
++ if (!dbus_message_iter_append_basic (&sub_iter, type, (const void *) arg))
++ {
++ dbus_message_iter_close_container (iter, &sub_iter);
++ goto fail;
++ }
++
++ /* Close the container. */
++ if (!dbus_message_iter_close_container (iter, &sub_iter))
++ {
++ goto fail;
++ }
++
++ return true;
++
++fail:
++ return false;
++}
++
++/*
++ * Construct an empty method return message.
++ *
++ * The operation can only fail due to lack of memory, in which case
++ * there's no sense in trying to construct an error return. Instead,
++ * call->reply will be set to NULL and handled in send_method_return().
++ */
++void
++jack_dbus_construct_method_return_empty(
++ struct jack_dbus_method_call * call)
++{
++ call->reply = dbus_message_new_method_return (call->message);
++
++ if (call->reply == NULL)
++ {
++ jack_error ("Ran out of memory trying to construct method return");
++ }
++}
++
++/*
++ * Construct a method return which holds a single argument or, if
++ * the type parameter is DBUS_TYPE_INVALID, no arguments at all
++ * (a void message).
++ *
++ * The operation can only fail due to lack of memory, in which case
++ * there's no sense in trying to construct an error return. Instead,
++ * call->reply will be set to NULL and handled in send_method_return().
++ */
++void
++jack_dbus_construct_method_return_single(
++ struct jack_dbus_method_call *call,
++ int type,
++ message_arg_t arg)
++{
++ DBusMessageIter iter;
++ call->reply = dbus_message_new_method_return (call->message);
++
++ if (call->reply == NULL)
++ {
++ goto fail_no_mem;
++ }
++
++ /* Void method return requested by caller. */
++ if (type == DBUS_TYPE_INVALID)
++ {
++ return;
++ }
++
++ /* Prevent crash on NULL input string. */
++ else if (type == DBUS_TYPE_STRING && arg.string == NULL)
++ {
++ arg.string = "";
++ }
++
++ dbus_message_iter_init_append (call->reply, &iter);
++
++ if (!dbus_message_iter_append_basic (&iter, type, (const void *) &arg))
++ {
++ dbus_message_unref (call->reply);
++ call->reply = NULL;
++ goto fail_no_mem;
++ }
++
++ return;
++
++fail_no_mem:
++ jack_error ("Ran out of memory trying to construct method return");
++}
++
++/*
++ * Construct a method return which holds an array of strings.
++ *
++ * The operation can only fail due to lack of memory, in which case
++ * there's no sense in trying to construct an error return. Instead,
++ * call->reply will be set to NULL and handled in send_method_return().
++ */
++void
++jack_dbus_construct_method_return_array_of_strings(
++ struct jack_dbus_method_call *call,
++ unsigned int num_members,
++ const char **array)
++{
++ DBusMessageIter iter, sub_iter;
++ unsigned int i;
++
++ call->reply = dbus_message_new_method_return (call->message);
++ if (!call->reply)
++ {
++ goto fail;
++ }
++
++ dbus_message_iter_init_append (call->reply, &iter);
++
++ if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "s", &sub_iter))
++ {
++ goto fail_unref;
++ }
++
++ for (i = 0; i < num_members; ++i)
++ {
++ if (!dbus_message_iter_append_basic (&sub_iter, DBUS_TYPE_STRING, (const void *) &array[i]))
++ {
++ dbus_message_iter_close_container (&iter, &sub_iter);
++ goto fail_unref;
++ }
++ }
++
++ if (!dbus_message_iter_close_container (&iter, &sub_iter))
++ {
++ goto fail_unref;
++ }
++
++ return;
++
++fail_unref:
++ dbus_message_unref (call->reply);
++ call->reply = NULL;
++
++fail:
++ jack_error ("Ran out of memory trying to construct method return");
++}
++
++void
++jack_dbus_info_callback(const char *msg)
++{
++ time_t timestamp;
++ char timestamp_str[26];
++
++ time(×tamp);
++ ctime_r(×tamp, timestamp_str);
++ timestamp_str[24] = 0;
++
++ fprintf(g_logfile, "%s: %s\n", timestamp_str, msg);
++ fflush(g_logfile);
++}
++
++void
++jack_dbus_error_callback(const char *msg)
++{
++ time_t timestamp;
++ char timestamp_str[26];
++
++ time(×tamp);
++ ctime_r(×tamp, timestamp_str);
++ timestamp_str[24] = 0;
++
++ fprintf(g_logfile, "%s: ERROR: %s\n", timestamp_str, msg);
++ fflush(g_logfile);
++}
++
++bool
++ensure_dir_exist(const char *dirname, int mode)
++{
++ struct stat st;
++ if (stat(dirname, &st) != 0)
++ {
++ if (errno == ENOENT)
++ {
++ printf("Directory \"%s\" does not exist. Creating...\n", dirname);
++ if (mkdir(dirname, mode) != 0)
++ {
++ fprintf(stderr, "Failed to create \"%s\" directory: %d (%s)\n", dirname, errno, strerror(errno));
++ return false;
++ }
++ }
++ else
++ {
++ fprintf(stderr, "Failed to stat \"%s\": %d (%s)\n", dirname, errno, strerror(errno));
++ return false;
++ }
++ }
++ else
++ {
++ if (!S_ISDIR(st.st_mode))
++ {
++ fprintf(stderr, "\"%s\" exists but is not directory.\n", dirname);
++ return false;
++ }
++ }
++ return true;
++}
++
++char *
++pathname_cat(const char *pathname_a, const char *pathname_b)
++{
++ char *pathname;
++ int pathname_a_len, pathname_b_len, pathname_len;
++ pathname_a_len = strlen(pathname_a);
++ pathname_b_len = strlen(pathname_b);
++ pathname = malloc(pathname_a_len + pathname_b_len + 1);
++ if (pathname == NULL)
++ {
++ fprintf(stderr, "Out of memory\n");
++ return NULL;
++ }
++ memcpy(pathname, pathname_a, pathname_a_len);
++ memcpy(pathname + pathname_a_len, pathname_b, pathname_b_len);
++ pathname_len = pathname_a_len + pathname_b_len;
++ pathname[pathname_len] = 0;
++ return pathname;
++}
++
++bool
++paths_init()
++{
++ const char *home_dir, *xdg_config_home, *xdg_log_home;
++
++ home_dir = getenv("HOME");
++ if (home_dir == NULL)
++ {
++ fprintf(stderr, "Environment variable HOME not set\n");
++ goto fail;
++ }
++
++ xdg_config_home = getenv("XDG_CONFIG_HOME");
++ if (xdg_config_home == NULL)
++ {
++ if (!(xdg_config_home = pathname_cat(home_dir, DEFAULT_XDG_CONFIG))) goto fail;
++ }
++
++ if (!(xdg_log_home = pathname_cat(home_dir, DEFAULT_XDG_LOG))) goto fail;
++
++ if (!(g_jackdbus_config_dir = pathname_cat(xdg_config_home, JACKDBUS_DIR))) goto fail;
++ if (!(g_jackdbus_log_dir = pathname_cat(xdg_log_home, JACKDBUS_DIR))) goto fail;
++
++ if (!ensure_dir_exist(xdg_config_home, 0700))
++ {
++ goto fail;
++ }
++
++ if (!ensure_dir_exist(xdg_log_home, 0700))
++ {
++ goto fail;
++ }
++
++ if (!ensure_dir_exist(g_jackdbus_config_dir, 0700))
++ {
++ free(g_jackdbus_config_dir);
++ goto fail;
++ }
++ g_jackdbus_config_dir_len = strlen(g_jackdbus_config_dir);
++
++ if (!ensure_dir_exist(g_jackdbus_log_dir, 0700))
++ {
++ free(g_jackdbus_log_dir);
++ goto fail;
++ }
++ g_jackdbus_log_dir_len = strlen(g_jackdbus_log_dir);
++
++ return true;
++
++fail:
++ return false;
++}
++
++void
++paths_uninit()
++{
++ free(g_jackdbus_config_dir);
++ free(g_jackdbus_log_dir);
++}
++
++int
++log_init()
++{
++ char *log_filename;
++ size_t log_len;
++
++ log_len = strlen(JACKDBUS_LOG);
++
++ log_filename = malloc(g_jackdbus_log_dir_len + log_len + 1);
++ if (log_filename == NULL)
++ {
++ fprintf(stderr, "Out of memory\n");
++ return FALSE;
++ }
++
++ memcpy(log_filename, g_jackdbus_log_dir, g_jackdbus_log_dir_len);
++ memcpy(log_filename + g_jackdbus_log_dir_len, JACKDBUS_LOG, log_len);
++ log_filename[g_jackdbus_log_dir_len + log_len] = 0;
++
++ g_logfile = fopen(log_filename, "a");
++ if (g_logfile == NULL)
++ {
++ fprintf(stderr, "Cannot open jackdbus log file \"%s\": %d (%s)\n", log_filename, errno, strerror(errno));
++ free(log_filename);
++ return FALSE;
++ }
++
++ free(log_filename);
++
++ return TRUE;
++}
++
++void
++log_uninit()
++{
++ fclose(g_logfile);
++}
++
++void
++jack_dbus_error(
++ void *dbus_call_context_ptr,
++ const char *error_name,
++ const char *format,
++ ...)
++{
++ va_list ap;
++ char buffer[300];
++
++ va_start(ap, format);
++
++ vsnprintf(buffer, sizeof(buffer), format, ap);
++
++ jack_error_callback(buffer);
++ if (dbus_call_context_ptr != NULL)
++ {
++ ((struct jack_dbus_method_call *)dbus_call_context_ptr)->reply = dbus_message_new_error(
++ ((struct jack_dbus_method_call *)dbus_call_context_ptr)->message,
++ error_name,
++ buffer);
++ }
++
++ va_end(ap);
++}
++
++static void
++do_nothing_handler (int sig)
++{
++ /* this is used by the child (active) process, but it never
++ gets called unless we are already shutting down after
++ another signal.
++ */
++ char buf[64];
++ snprintf (buf, sizeof(buf),
++ "received signal %d during shutdown (ignored)\n", sig);
++ write (1, buf, strlen (buf));
++}
++
++void
++do_signal_magic()
++{
++ sigset_t signals;
++ sigset_t allsignals;
++ struct sigaction action;
++ int i;
++
++ /* ensure that we are in our own process group so that
++ kill (SIG, -pgrp) does the right thing.
++ */
++
++ setsid();
++
++ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
++
++ /* what's this for?
++
++ POSIX says that signals are delivered like this:
++
++ * if a thread has blocked that signal, it is not
++ a candidate to receive the signal.
++ * of all threads not blocking the signal, pick
++ one at random, and deliver the signal.
++
++ this means that a simple-minded multi-threaded program can
++ expect to get POSIX signals delivered randomly to any one
++ of its threads,
++
++ here, we block all signals that we think we might receive
++ and want to catch. all "child" threads will inherit this
++ setting. if we create a thread that calls sigwait() on the
++ same set of signals, implicitly unblocking all those
++ signals. any of those signals that are delivered to the
++ process will be delivered to that thread, and that thread
++ alone. this makes cleanup for a signal-driven exit much
++ easier, since we know which thread is doing it and more
++ importantly, we are free to call async-unsafe functions,
++ because the code is executing in normal thread context
++ after a return from sigwait().
++ */
++
++ sigemptyset(&signals);
++ sigaddset(&signals, SIGHUP);
++ sigaddset(&signals, SIGINT);
++ sigaddset(&signals, SIGQUIT);
++ sigaddset(&signals, SIGPIPE);
++ sigaddset(&signals, SIGTERM);
++ sigaddset(&signals, SIGUSR1);
++ sigaddset(&signals, SIGUSR2);
++
++ /* all child threads will inherit this mask unless they
++ * explicitly reset it
++ */
++
++ pthread_sigmask (SIG_BLOCK, &signals, 0);
++
++ /* install a do-nothing handler because otherwise pthreads
++ behaviour is undefined when we enter sigwait.
++ */
++
++ sigfillset (&allsignals);
++ action.sa_handler = do_nothing_handler;
++ action.sa_mask = allsignals;
++ action.sa_flags = SA_RESTART|SA_RESETHAND;
++
++ for (i = 1; i < NSIG; i++) {
++ if (sigismember (&signals, i)) {
++ sigaction (i, &action, 0);
++ }
++ }
++}
++
++int
++main (int argc, char **argv)
++{
++ DBusError error;
++ int ret;
++ void *controller_ptr;
++
++ if (!jack_controller_settings_init())
++ {
++ ret = 1;
++ goto fail;
++ }
++
++ if (argc != 2 || strcmp(argv[1], "auto") != 0)
++ {
++ ret = 0;
++ fprintf(
++ stderr,
++ "jackdbus should be auto-executed by D-Bus message bus daemon.\n"
++ "If you want to run it manually anyway, specify \"auto\" as only parameter\n");
++ goto fail_uninit_xml;
++ }
++
++ if (!paths_init())
++ {
++ ret = 1;
++ goto fail_uninit_xml;
++ }
++
++ if (!log_init())
++ {
++ ret = 1;
++ goto fail_uninit_paths;
++ }
++
++#if !defined(DISABLE_SIGNAL_MAGIC)
++ do_signal_magic();
++#endif
++
++ jack_set_error_function(jack_dbus_error_callback);
++ jack_set_info_function(jack_dbus_info_callback);
++
++ jack_info("------------------");
++ jack_info("Controller activated. Version " VERSION);
++
++ if (!dbus_threads_init_default())
++ {
++ jack_error("dbus_threads_init_default() failed");
++ ret = 1;
++ goto fail_uninit_log;
++ }
++
++ dbus_error_init (&error);
++ g_connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
++ if (dbus_error_is_set (&error))
++ {
++ jack_error("Cannot connect to D-Bus session bus: %s", error.message);
++ ret = 1;
++ goto fail_uninit_log;
++ }
++
++ ret = dbus_bus_request_name(
++ g_connection,
++ "org.jackaudio.service",
++ DBUS_NAME_FLAG_DO_NOT_QUEUE,
++ &error);
++ if (ret == -1)
++ {
++ jack_error("Cannot request service name: %s", error.message);
++ dbus_error_free(&error);
++ ret = 1;
++ goto fail_unref_connection;
++ }
++ else if (ret == DBUS_REQUEST_NAME_REPLY_EXISTS)
++ {
++ jack_error("Requested D-Bus service name already exists");
++ ret = 1;
++ goto fail_unref_connection;
++ }
++
++ controller_ptr = jack_controller_create(g_connection);
++
++ if (controller_ptr == NULL)
++ {
++ ret = 1;
++ goto fail_unref_connection;
++ }
++
++ jack_info("Listening for D-Bus messages");
++
++ g_exit_command = FALSE;
++ while (!g_exit_command && dbus_connection_read_write_dispatch (g_connection, 200));
++
++ jack_controller_destroy(controller_ptr);
++
++ jack_info("Controller deactivated.");
++
++ ret = 0;
++
++fail_unref_connection:
++ dbus_connection_unref(g_connection);
++
++fail_uninit_log:
++ log_uninit();
++
++fail_uninit_paths:
++ paths_uninit();
++
++fail_uninit_xml:
++ jack_controller_settings_uninit();
++
++fail:
++ return ret;
++}
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/jackdbus.h jack-audio-connection-kit-0.116.1_dbus/jackd/jackdbus.h
+--- jack-audio-connection-kit-0.116.1/jackd/jackdbus.h 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/jackdbus.h 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,312 @@
++/* -*- mode: c; c-file-style: "bsd"; -*- */
++/*
++ Copyright (C) 2007,2008 Nedko Arnaudov
++ Copyright (C) 2007-2008 Juuso Alasuutari
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++*/
++
++#ifndef JACKDBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED
++#define JACKDBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED
++
++#include <stdbool.h>
++
++#define JACK_DBUS_DEBUG
++
++//#define DISABLE_SIGNAL_MAGIC
++
++#define DEFAULT_XDG_CONFIG "/.config"
++#define DEFAULT_XDG_LOG "/.log"
++#define JACKDBUS_DIR "/jack"
++#define JACKDBUS_LOG "/jackdbus.log"
++#define JACKDBUS_CONF "/conf-jack1.xml"
++
++extern char *g_jackdbus_config_dir;
++extern size_t g_jackdbus_config_dir_len; /* without terminating '\0' char */
++extern int g_exit_command;
++
++bool
++jack_controller_settings_init();
++
++void
++jack_controller_settings_uninit();
++
++#define JACK_DBUS_ERROR_UNKNOWN_METHOD "org.jackaudio.Error.UnknownMethod"
++#define JACK_DBUS_ERROR_SERVER_NOT_RUNNING "org.jackaudio.Error.ServerNotRunning"
++#define JACK_DBUS_ERROR_UNKNOWN_DRIVER "org.jackaudio.Error.UnknownDriver"
++#define JACK_DBUS_ERROR_UNKNOWN_INTERNAL "org.jackaudio.Error.UnknownInternal"
++#define JACK_DBUS_ERROR_UNKNOWN_PARAMETER "org.jackaudio.Error.UnknownParameter"
++#define JACK_DBUS_ERROR_INVALID_ARGS "org.jackaudio.Error.InvalidArgs"
++#define JACK_DBUS_ERROR_GENERIC "org.jackaudio.Error.Generic"
++#define JACK_DBUS_ERROR_FATAL "org.jackaudio.Error.Fatal"
++
++struct jack_dbus_method_call
++{
++ void *context;
++ DBusConnection *connection;
++ const char *method_name;
++ DBusMessage *message;
++ DBusMessage *reply;
++};
++
++struct jack_dbus_interface_method_argument_descriptor
++{
++ const char * name;
++ const char * type;
++ bool direction_out; /* true - out, false - in */
++};
++
++struct jack_dbus_interface_method_descriptor
++{
++ const char * name;
++ const struct jack_dbus_interface_method_argument_descriptor * arguments;
++ void (* handler)(struct jack_dbus_method_call * call);
++};
++
++struct jack_dbus_interface_signal_argument_descriptor
++{
++ const char * name;
++ const char * type;
++};
++
++struct jack_dbus_interface_signal_descriptor
++{
++ const char * name;
++ const struct jack_dbus_interface_signal_argument_descriptor * arguments;
++};
++
++struct jack_dbus_interface_descriptor
++{
++ const char * name;
++
++ bool
++ (* handler)(
++ struct jack_dbus_method_call * call,
++ const struct jack_dbus_interface_method_descriptor * methods);
++
++ const struct jack_dbus_interface_method_descriptor * methods;
++ const struct jack_dbus_interface_signal_descriptor * signals;
++};
++
++struct jack_dbus_object_descriptor
++{
++ struct jack_dbus_interface_descriptor ** interfaces;
++ void * context;
++};
++
++typedef union
++{
++ unsigned char byte;
++ dbus_bool_t boolean;
++ dbus_int16_t int16;
++ dbus_uint16_t uint16;
++ dbus_int32_t int32;
++ dbus_uint32_t uint32;
++ dbus_int64_t int64;
++ dbus_uint64_t uint64;
++ double doubl;
++ const char *string;
++} message_arg_t;
++
++#define JACK_DBUS_METHOD_ARGUMENTS_BEGIN(method_name) \
++static \
++struct jack_dbus_interface_method_argument_descriptor method_name ## _arguments[] = \
++{
++
++#define JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(method_name, descr) \
++static const \
++struct jack_dbus_interface_method_argument_descriptor method_name ## _arguments[] = \
++{
++
++#define JACK_DBUS_METHOD_ARGUMENT(argument_name, argument_type, argument_direction_out) \
++ { \
++ .name = argument_name, \
++ .type = argument_type, \
++ .direction_out = argument_direction_out \
++ },
++
++#define JACK_DBUS_METHOD_ARGUMENT_IN(argument_name, argument_type, descr) \
++ { \
++ .name = argument_name, \
++ .type = argument_type, \
++ .direction_out = false \
++ },
++
++#define JACK_DBUS_METHOD_ARGUMENT_OUT(argument_name, argument_type, descr) \
++ { \
++ .name = argument_name, \
++ .type = argument_type, \
++ .direction_out = true \
++ },
++
++#define JACK_DBUS_METHOD_ARGUMENTS_END \
++ JACK_DBUS_METHOD_ARGUMENT(NULL, NULL, false) \
++};
++
++#define JACK_DBUS_METHODS_BEGIN \
++static const \
++struct jack_dbus_interface_method_descriptor methods_dtor[] = \
++{
++
++#define JACK_DBUS_METHOD_DESCRIBE(method_name, handler_name) \
++ { \
++ .name = # method_name, \
++ .arguments = method_name ## _arguments, \
++ .handler = handler_name \
++ },
++
++#define JACK_DBUS_METHODS_END \
++ { \
++ .name = NULL, \
++ .arguments = NULL, \
++ .handler = NULL \
++ } \
++};
++
++/* TODO: this should go away, JACK_DBUS_METHODS_END should be used instead */
++#define JACK_DBUS_METHOD_DESCRIBE_END \
++ { \
++ .name = NULL, \
++ .arguments = NULL, \
++ .handler = NULL \
++ }
++
++#define JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(signal_name) \
++static \
++struct jack_dbus_interface_signal_argument_descriptor signal_name ## _arguments[] = \
++{
++
++#define JACK_DBUS_SIGNAL_ARGUMENT(argument_name, argument_type) \
++ { \
++ .name = argument_name, \
++ .type = argument_type \
++ },
++
++#define JACK_DBUS_SIGNAL_ARGUMENTS_END \
++ JACK_DBUS_SIGNAL_ARGUMENT(NULL, NULL) \
++};
++
++#define JACK_DBUS_SIGNAL_DESCRIBE(signal_name) \
++ { \
++ .name = # signal_name, \
++ .arguments = signal_name ## _arguments \
++ },
++
++#define JACK_DBUS_SIGNAL_DESCRIBE_END \
++ { \
++ .name = NULL, \
++ .arguments = NULL, \
++ }
++
++#define JACK_DBUS_IFACE_BEGIN(iface_var, iface_name) \
++struct jack_dbus_interface_descriptor iface_var = \
++{ \
++ .name = iface_name, \
++ .handler = jack_dbus_run_method,
++
++#define JACK_DBUS_IFACE_HANDLER(handler_func) \
++ .handler = handler_func,
++
++#define JACK_DBUS_IFACE_EXPOSE_METHODS \
++ .methods = methods_dtor,
++
++#define JACK_DBUS_IFACE_EXPOSE_SIGNALS \
++ .signals = signals_dtor,
++
++#define JACK_DBUS_IFACE_END \
++};
++
++/* TODO: this should go away, other JACK_DBUS_IFACE_XXX should be used instead */
++#define JACK_DBUS_IFACE_DESCRIBE(iface_var, iface_name, iface_methods, iface_signals) \
++struct jack_dbus_interface_descriptor iface_var = \
++{ \
++ .name = iface_name, \
++ .handler = jack_dbus_run_method, \
++ .methods = iface_methods, \
++ .signals = iface_signals \
++}
++
++DBusHandlerResult
++jack_dbus_message_handler(
++ DBusConnection *connection,
++ DBusMessage *message,
++ void *data);
++
++void
++jack_dbus_message_handler_unregister(
++ DBusConnection *connection,
++ void *data);
++
++bool
++jack_dbus_run_method(
++ struct jack_dbus_method_call * call,
++ const struct jack_dbus_interface_method_descriptor * methods);
++
++void
++jack_dbus_error(
++ void *dbus_call_context_ptr,
++ const char *error_name,
++ const char *format,
++ ...);
++
++bool
++jack_dbus_get_method_args(
++ struct jack_dbus_method_call *call,
++ int type,
++ ...);
++
++bool
++jack_dbus_get_method_args_string_and_variant(
++ struct jack_dbus_method_call *call,
++ const char **arg1,
++ message_arg_t *arg2,
++ int *type_ptr);
++
++bool
++jack_dbus_message_append_variant(
++ DBusMessageIter *iter,
++ int type,
++ const char *signature,
++ message_arg_t *arg);
++
++void
++jack_dbus_construct_method_return_empty(
++ struct jack_dbus_method_call * call);
++
++void
++jack_dbus_construct_method_return_single(
++ struct jack_dbus_method_call *call,
++ int type,
++ message_arg_t arg);
++
++void
++jack_dbus_construct_method_return_array_of_strings(
++ struct jack_dbus_method_call *call,
++ unsigned int num_members,
++ const char **array);
++
++void
++jack_dbus_send_signal(
++ const char *sender_object_path,
++ const char *iface,
++ const char *signal_name,
++ int first_arg_type,
++ ...);
++
++#define JACK_CONTROLLER_OBJECT_PATH "/org/jackaudio/Controller"
++
++extern struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[];
++
++#endif /* #ifndef JACKDBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED */
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/Makefile.am jack-audio-connection-kit-0.116.1_dbus/jackd/Makefile.am
+--- jack-audio-connection-kit-0.116.1/jackd/Makefile.am 2008-12-02 12:13:14.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/Makefile.am 2008-12-07 19:01:15.000000000 +0100
+@@ -21,10 +21,17 @@
+
+ bin_PROGRAMS = jackd $(CAP_PROGS)
+
+-AM_CFLAGS = $(JACK_CFLAGS) -DJACK_LOCATION=\"$(bindir)\"
++if HAVE_DBUS
++bin_PROGRAMS += jackdbus
++endif
++
++AM_CFLAGS = $(JACK_CFLAGS) -DJACK_LOCATION=\"$(bindir)\" $(DBUS_CFLAGS) $(LIBXML2_CFLAGS)
+
+-jackd_SOURCES = jackd.c
+-jackd_LDADD = libjackserver.la $(CAP_LIBS) @OS_LDFLAGS@
++COMMON_SOURCES = engine.c clientengine.c transengine.c
++COMMON_LIBS = libjackserver.la $(CAP_LIBS) @OS_LDFLAGS@
++
++jackd_SOURCES = jackd.c $(COMMON_SOURCES)
++jackd_LDADD = $(COMMON_LIBS) $(DBUS_LIBS)
+
+ noinst_HEADERS = jack_md5.h md5.h md5_loc.h \
+ clientengine.h transengine.h
+@@ -56,6 +63,43 @@
+ man_MANS = jackd.1 jackstart.1
+ EXTRA_DIST = $(man_MANS)
+
++if HAVE_DBUS
++noinst_HEADERS += jackdbus.h jackctl.h jackcontroller.h jackcontroller_xml.h jackcontroller_internal.h
++jackdbus_SOURCES = jackdbus.c jackctl.c $(COMMON_SOURCES) jackcontroller.c
++jackdbus_SOURCES += jackcontroller_iface_introspectable.c
++jackdbus_SOURCES += jackcontroller_iface_control.c
++jackdbus_SOURCES += jackcontroller_iface_configure.c
++jackdbus_SOURCES += jackcontroller_iface_patchbay.c
++jackdbus_SOURCES += jackcontroller_iface_transport.c
++jackdbus_LDADD = $(COMMON_LIBS) $(DBUS_LIBS)
++
++if SETTINGS_PERSISTENCE_USE_LIBXML2
++jackdbus_SOURCES += jackcontroller_xml_libxml.c jackcontroller_xml.c
++jackdbus_LDADD += $(LIBXML2_LIBS)
++endif
++
++if SETTINGS_PERSISTENCE_USE_EXPAT
++jackdbus_SOURCES += jackcontroller_xml_expat.c jackcontroller_xml.c jackcontroller_xml_write_raw.c
++jackdbus_LDADD += -lexpat
++endif
++
++if SETTINGS_PERSISTENCE_DISABLED
++jackdbus_SOURCES += jackcontroller_xml_nop.c
++endif
++
++# Dbus service file
++servicedir = $(DBUS_SERVICES_DIR)
++service_in_files = org.jackaudio.service.in
++service_DATA = $(service_in_files:.service.in=.service)
++
++# Rule to make the service file with bindir expanded
++$(service_DATA): $(service_in_files) Makefile
++ @sed -e "s|\@bindir\@|$(bindir)|" $< > $@
++
++EXTRA_DIST += $(service_in_files)
++
++endif
++
+ dist-hook:
+ rm -f $(distdir)/jack_md5.h
+ distclean-local:
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/Makefile.in jack-audio-connection-kit-0.116.1_dbus/jackd/Makefile.in
+--- jack-audio-connection-kit-0.116.1/jackd/Makefile.in 2008-12-05 21:48:45.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/Makefile.in 2008-12-07 19:02:55.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -16,6 +16,7 @@
+
+
+
++
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+@@ -35,9 +36,17 @@
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
+-bin_PROGRAMS = jackd$(EXEEXT) $(am__EXEEXT_1)
++bin_PROGRAMS = jackd$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2)
++@HAVE_DBUS_TRUE@am__append_1 = jackdbus
++@HAVE_DBUS_TRUE@am__append_2 = jackdbus.h jackctl.h jackcontroller.h jackcontroller_xml.h jackcontroller_internal.h
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE@am__append_3 = jackcontroller_xml_libxml.c jackcontroller_xml.c
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE@am__append_4 = $(LIBXML2_LIBS)
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_EXPAT_TRUE@am__append_5 = jackcontroller_xml_expat.c jackcontroller_xml.c jackcontroller_xml_write_raw.c
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_EXPAT_TRUE@am__append_6 = -lexpat
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_DISABLED_TRUE@am__append_7 = jackcontroller_xml_nop.c
++@HAVE_DBUS_TRUE@am__append_8 = $(service_in_files)
+ subdir = jackd
+-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
++DIST_COMMON = $(am__noinst_HEADERS_DIST) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/jackd.1.in ChangeLog
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+@@ -54,7 +63,7 @@
+ esac;
+ am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
+- "$(DESTDIR)$(man1dir)"
++ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(servicedir)"
+ libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES)
+ libjackserver_la_DEPENDENCIES = simd.lo
+@@ -72,19 +81,53 @@
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libjackserver_la_CFLAGS) \
+ $(CFLAGS) $(libjackserver_la_LDFLAGS) $(LDFLAGS) -o $@
+ @USE_CAPABILITIES_TRUE@am__EXEEXT_1 = jackstart$(EXEEXT)
++@HAVE_DBUS_TRUE@am__EXEEXT_2 = jackdbus$(EXEEXT)
+ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(bin_PROGRAMS)
+-am_jackd_OBJECTS = jackd.$(OBJEXT)
++am__objects_1 = engine.$(OBJEXT) clientengine.$(OBJEXT) \
++ transengine.$(OBJEXT)
++am_jackd_OBJECTS = jackd.$(OBJEXT) $(am__objects_1)
+ jackd_OBJECTS = $(am_jackd_OBJECTS)
+ am__DEPENDENCIES_1 =
+-jackd_DEPENDENCIES = libjackserver.la $(am__DEPENDENCIES_1)
++am__DEPENDENCIES_2 = libjackserver.la $(am__DEPENDENCIES_1)
++jackd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
++am__jackdbus_SOURCES_DIST = jackdbus.c jackctl.c engine.c \
++ clientengine.c transengine.c jackcontroller.c \
++ jackcontroller_iface_introspectable.c \
++ jackcontroller_iface_control.c \
++ jackcontroller_iface_configure.c \
++ jackcontroller_iface_patchbay.c \
++ jackcontroller_iface_transport.c jackcontroller_xml_libxml.c \
++ jackcontroller_xml.c jackcontroller_xml_expat.c \
++ jackcontroller_xml_write_raw.c jackcontroller_xml_nop.c
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE@am__objects_2 = jackcontroller_xml_libxml.$(OBJEXT) \
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE@ jackcontroller_xml.$(OBJEXT)
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_EXPAT_TRUE@am__objects_3 = jackcontroller_xml_expat.$(OBJEXT) \
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_EXPAT_TRUE@ jackcontroller_xml.$(OBJEXT) \
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_EXPAT_TRUE@ jackcontroller_xml_write_raw.$(OBJEXT)
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_DISABLED_TRUE@am__objects_4 = jackcontroller_xml_nop.$(OBJEXT)
++@HAVE_DBUS_TRUE@am_jackdbus_OBJECTS = jackdbus.$(OBJEXT) \
++@HAVE_DBUS_TRUE@ jackctl.$(OBJEXT) $(am__objects_1) \
++@HAVE_DBUS_TRUE@ jackcontroller.$(OBJEXT) \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_introspectable.$(OBJEXT) \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_control.$(OBJEXT) \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_configure.$(OBJEXT) \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_patchbay.$(OBJEXT) \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_transport.$(OBJEXT) \
++@HAVE_DBUS_TRUE@ $(am__objects_2) $(am__objects_3) \
++@HAVE_DBUS_TRUE@ $(am__objects_4)
++jackdbus_OBJECTS = $(am_jackdbus_OBJECTS)
++@HAVE_DBUS_TRUE@@SETTINGS_PERSISTENCE_USE_LIBXML2_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
++@HAVE_DBUS_TRUE@jackdbus_DEPENDENCIES = $(am__DEPENDENCIES_2) \
++@HAVE_DBUS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_3) \
++@HAVE_DBUS_TRUE@ $(am__DEPENDENCIES_1)
+ am_jackstart_OBJECTS = jackstart.$(OBJEXT) md5.$(OBJEXT)
+ jackstart_OBJECTS = $(am_jackstart_OBJECTS)
+ jackstart_LDADD = $(LDADD)
+ jackstart_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(jackstart_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -97,12 +140,17 @@
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+ SOURCES = $(libjackserver_la_SOURCES) $(jackd_SOURCES) \
+- $(jackstart_SOURCES)
++ $(jackdbus_SOURCES) $(jackstart_SOURCES)
+ DIST_SOURCES = $(libjackserver_la_SOURCES) $(jackd_SOURCES) \
+- $(jackstart_SOURCES)
++ $(am__jackdbus_SOURCES_DIST) $(jackstart_SOURCES)
+ man1dir = $(mandir)/man1
+ NROFF = nroff
+ MANS = $(man_MANS)
++serviceDATA_INSTALL = $(INSTALL_DATA)
++DATA = $(service_DATA)
++am__noinst_HEADERS_DIST = jack_md5.h md5.h md5_loc.h clientengine.h \
++ transengine.h jackdbus.h jackctl.h jackcontroller.h \
++ jackcontroller_xml.h jackcontroller_internal.h
+ HEADERS = $(noinst_HEADERS)
+ ETAGS = etags
+ CTAGS = ctags
+@@ -129,6 +177,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -170,6 +221,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -258,12 +311,13 @@
+ @USE_CAPABILITIES_TRUE@CAP_PROGS = jackstart
+ @USE_CAPABILITIES_FALSE@CAP_LIBS =
+ @USE_CAPABILITIES_TRUE@CAP_LIBS = -lcap
+-AM_CFLAGS = $(JACK_CFLAGS) -DJACK_LOCATION=\"$(bindir)\"
+-jackd_SOURCES = jackd.c
+-jackd_LDADD = libjackserver.la $(CAP_LIBS) @OS_LDFLAGS@
+-noinst_HEADERS = jack_md5.h md5.h md5_loc.h \
+- clientengine.h transengine.h
+-
++AM_CFLAGS = $(JACK_CFLAGS) -DJACK_LOCATION=\"$(bindir)\" $(DBUS_CFLAGS) $(LIBXML2_CFLAGS)
++COMMON_SOURCES = engine.c clientengine.c transengine.c
++COMMON_LIBS = libjackserver.la $(CAP_LIBS) @OS_LDFLAGS@
++jackd_SOURCES = jackd.c $(COMMON_SOURCES)
++jackd_LDADD = $(COMMON_LIBS) $(DBUS_LIBS)
++noinst_HEADERS = jack_md5.h md5.h md5_loc.h clientengine.h \
++ transengine.h $(am__append_2)
+ BUILT_SOURCES = jack_md5.h
+ jackstart_SOURCES = jackstart.c md5.c
+ jackstart_LDFLAGS = -lcap
+@@ -276,7 +330,23 @@
+ libjackserver_la_LIBADD = simd.lo @OS_LDFLAGS@
+ libjackserver_la_LDFLAGS = -export-dynamic -version-info @JACK_SO_VERSION@
+ man_MANS = jackd.1 jackstart.1
+-EXTRA_DIST = $(man_MANS)
++EXTRA_DIST = $(man_MANS) $(am__append_8)
++@HAVE_DBUS_TRUE@jackdbus_SOURCES = jackdbus.c jackctl.c \
++@HAVE_DBUS_TRUE@ $(COMMON_SOURCES) jackcontroller.c \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_introspectable.c \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_control.c \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_configure.c \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_patchbay.c \
++@HAVE_DBUS_TRUE@ jackcontroller_iface_transport.c \
++@HAVE_DBUS_TRUE@ $(am__append_3) $(am__append_5) \
++@HAVE_DBUS_TRUE@ $(am__append_7)
++@HAVE_DBUS_TRUE@jackdbus_LDADD = $(COMMON_LIBS) $(DBUS_LIBS) \
++@HAVE_DBUS_TRUE@ $(am__append_4) $(am__append_6)
++
++# Dbus service file
++@HAVE_DBUS_TRUE@servicedir = $(DBUS_SERVICES_DIR)
++@HAVE_DBUS_TRUE@service_in_files = org.jackaudio.service.in
++@HAVE_DBUS_TRUE@service_DATA = $(service_in_files:.service.in=.service)
+ all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+@@ -319,8 +389,8 @@
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -328,8 +398,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+ done
+
+ clean-libLTLIBRARIES:
+@@ -351,8 +421,8 @@
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
++ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
++ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+@@ -373,6 +443,9 @@
+ jackd$(EXEEXT): $(jackd_OBJECTS) $(jackd_DEPENDENCIES)
+ @rm -f jackd$(EXEEXT)
+ $(LINK) $(jackd_OBJECTS) $(jackd_LDADD) $(LIBS)
++jackdbus$(EXEEXT): $(jackdbus_OBJECTS) $(jackdbus_DEPENDENCIES)
++ @rm -f jackdbus$(EXEEXT)
++ $(LINK) $(jackdbus_OBJECTS) $(jackdbus_LDADD) $(LIBS)
+ jackstart$(EXEEXT): $(jackstart_OBJECTS) $(jackstart_DEPENDENCIES)
+ @rm -f jackstart$(EXEEXT)
+ $(jackstart_LINK) $(jackstart_OBJECTS) $(jackstart_LDADD) $(LIBS)
+@@ -383,7 +456,22 @@
+ distclean-compile:
+ -rm -f *.tab.c
+
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clientengine.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/engine.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_iface_configure.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_iface_control.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_iface_introspectable.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_iface_patchbay.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_iface_transport.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_xml.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_xml_expat.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_xml_libxml.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_xml_nop.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackcontroller_xml_write_raw.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackctl.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackd.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackdbus.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jackstart.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjackserver_la-client.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjackserver_la-clientengine.Plo@am__quote@
+@@ -402,6 +490,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjackserver_la-transengine.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjackserver_la-unlock.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transengine.Po@am__quote@
+
+ .c.o:
+ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@@ -586,14 +675,31 @@
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
++install-serviceDATA: $(service_DATA)
++ @$(NORMAL_INSTALL)
++ test -z "$(servicedir)" || $(MKDIR_P) "$(DESTDIR)$(servicedir)"
++ @list='$(service_DATA)'; for p in $$list; do \
++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++ f=$(am__strip_dir) \
++ echo " $(serviceDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(servicedir)/$$f'"; \
++ $(serviceDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(servicedir)/$$f"; \
++ done
++
++uninstall-serviceDATA:
++ @$(NORMAL_UNINSTALL)
++ @list='$(service_DATA)'; for p in $$list; do \
++ f=$(am__strip_dir) \
++ echo " rm -f '$(DESTDIR)$(servicedir)/$$f'"; \
++ rm -f "$(DESTDIR)$(servicedir)/$$f"; \
++ done
+
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -605,8 +711,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -616,12 +722,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+@@ -666,11 +773,11 @@
+ check-am: all-am
+ check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(HEADERS)
++all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) $(HEADERS)
+ install-binPROGRAMS: install-libLTLIBRARIES
+
+ installdirs:
+- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
++ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(servicedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+ install: $(BUILT_SOURCES)
+@@ -721,7 +828,7 @@
+
+ info-am:
+
+-install-data-am: install-man
++install-data-am: install-man install-serviceDATA
+
+ install-dvi: install-dvi-am
+
+@@ -760,7 +867,7 @@
+ ps-am:
+
+ uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \
+- uninstall-man
++ uninstall-man uninstall-serviceDATA
+
+ uninstall-man: uninstall-man1
+
+@@ -775,12 +882,13 @@
+ install-dvi-am install-exec install-exec-am install-exec-hook \
+ install-html install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-man1 install-pdf \
+- install-pdf-am install-ps install-ps-am install-strip \
+- installcheck installcheck-am installdirs maintainer-clean \
+- maintainer-clean-generic mostlyclean mostlyclean-compile \
+- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+- tags uninstall uninstall-am uninstall-binPROGRAMS \
+- uninstall-libLTLIBRARIES uninstall-man uninstall-man1
++ install-pdf-am install-ps install-ps-am install-serviceDATA \
++ install-strip installcheck installcheck-am installdirs \
++ maintainer-clean maintainer-clean-generic mostlyclean \
++ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
++ pdf pdf-am ps ps-am tags uninstall uninstall-am \
++ uninstall-binPROGRAMS uninstall-libLTLIBRARIES uninstall-man \
++ uninstall-man1 uninstall-serviceDATA
+
+ @USE_CAPABILITIES_TRUE@install-exec-hook:
+ @USE_CAPABILITIES_TRUE@ if [ "`id -u`" = "0" ]; \
+@@ -801,6 +909,10 @@
+ simd.lo: $(srcdir)/../libjack/simd.c
+ $(LIBTOOL) --mode=compile $(CC) -I$(top_builddir) $(JACK_CORE_CFLAGS) $(SIMD_CFLAGS) -c -o simd.lo $(srcdir)/../libjack/simd.c
+
++# Rule to make the service file with bindir expanded
++@HAVE_DBUS_TRUE@$(service_DATA): $(service_in_files) Makefile
++@HAVE_DBUS_TRUE@ @sed -e "s|\@bindir\@|$(bindir)|" $< > $@
++
+ dist-hook:
+ rm -f $(distdir)/jack_md5.h
+ distclean-local:
+diff -Naur jack-audio-connection-kit-0.116.1/jackd/org.jackaudio.service.in jack-audio-connection-kit-0.116.1_dbus/jackd/org.jackaudio.service.in
+--- jack-audio-connection-kit-0.116.1/jackd/org.jackaudio.service.in 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jackd/org.jackaudio.service.in 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,3 @@
++[D-BUS Service]
++Name=org.jackaudio.service
++Exec=@bindir@/jackdbus auto
+diff -Naur jack-audio-connection-kit-0.116.1/jack.spec jack-audio-connection-kit-0.116.1_dbus/jack.spec
+--- jack-audio-connection-kit-0.116.1/jack.spec 2008-12-05 22:01:48.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jack.spec 2008-12-07 19:12:33.000000000 +0100
+@@ -1,4 +1,4 @@
+-# $Id: jack.spec.in 3158 2008-12-03 19:10:18Z rncbc $
++# $Id$
+ # set to 0 to build rpms without capabilities support
+ %define enable_capabilities 0
+ # strip binaries
+diff -Naur jack-audio-connection-kit-0.116.1/jack.spec.in jack-audio-connection-kit-0.116.1_dbus/jack.spec.in
+--- jack-audio-connection-kit-0.116.1/jack.spec.in 2008-12-04 11:30:28.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/jack.spec.in 2008-12-07 18:59:23.000000000 +0100
+@@ -1,4 +1,4 @@
+-# $Id: jack.spec.in 3158 2008-12-03 19:10:18Z rncbc $
++# $Id$
+ # set to 0 to build rpms without capabilities support
+ %define enable_capabilities 0
+ # strip binaries
+diff -Naur jack-audio-connection-kit-0.116.1/libjack/client.c jack-audio-connection-kit-0.116.1_dbus/libjack/client.c
+--- jack-audio-connection-kit-0.116.1/libjack/client.c 2008-12-04 11:30:27.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/libjack/client.c 2008-12-07 19:01:15.000000000 +0100
+@@ -61,6 +61,10 @@
+ #include <sysdeps/pThreadUtilities.h>
+ #endif
+
++#if HAVE_DBUS
++#include <dbus/dbus.h>
++#endif
++
+ static pthread_mutex_t client_lock;
+ static pthread_cond_t client_ready;
+
+@@ -627,6 +631,50 @@
+ return fd;
+ }
+
++#if HAVE_DBUS
++static void
++start_server_dbus()
++{
++ DBusError err;
++ DBusConnection *conn;
++ DBusMessage *msg;
++
++ // initialise the errors
++ dbus_error_init(&err);
++
++ // connect to the bus
++ conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
++ if (dbus_error_is_set(&err)) {
++ fprintf(stderr, "Connection Error (%s)\n", err.message);
++ dbus_error_free(&err);
++ }
++ if (NULL == conn) {
++ exit(1);
++ }
++
++ msg = dbus_message_new_method_call(
++ "org.jackaudio.service", // target for the method call
++ "/org/jackaudio/Controller", // object to call on
++ "org.jackaudio.JackControl", // interface to call on
++ "StartServer"); // method name
++ if (NULL == msg) {
++ fprintf(stderr, "Message Null\n");
++ exit(1);
++ }
++
++ // send message and get a handle for a reply
++ if (!dbus_connection_send(conn, msg, NULL))
++ {
++ fprintf(stderr, "Out Of Memory!\n");
++ exit(1);
++ }
++
++ dbus_message_unref(msg);
++ dbus_connection_flush(conn);
++ dbus_error_free(&err);
++}
++#endif
++
+ /* Exec the JACK server in this process. Does not return. */
+ static void
+ _start_server (const char *server_name)
+@@ -806,6 +854,24 @@
+
+ if ((*req_fd = server_connect (va->server_name)) < 0) {
+ int trys;
++#if HAVE_DBUS
++ if ((options & JackNoStartServer)
++ || getenv("JACK_NO_START_SERVER")) {
++ *status |= (JackFailure|JackServerFailed);
++ goto fail;
++ }
++
++ start_server_dbus();
++ trys = 5;
++ do {
++ sleep(1);
++ if (--trys < 0) {
++ *status |= (JackFailure|JackServerFailed);
++ goto fail;
++ }
++ } while ((*req_fd = server_connect (va->server_name)) < 0);
++ *status |= JackServerStarted;
++#else
+ if (start_server(va->server_name, options)) {
+ *status |= (JackFailure|JackServerFailed);
+ goto fail;
+@@ -819,6 +885,7 @@
+ }
+ } while ((*req_fd = server_connect (va->server_name)) < 0);
+ *status |= JackServerStarted;
++#endif
+ }
+
+ /* format connection request */
+diff -Naur jack-audio-connection-kit-0.116.1/libjack/Makefile.am jack-audio-connection-kit-0.116.1_dbus/libjack/Makefile.am
+--- jack-audio-connection-kit-0.116.1/libjack/Makefile.am 2008-12-04 22:23:18.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/libjack/Makefile.am 2008-12-07 19:01:15.000000000 +0100
+@@ -31,12 +31,12 @@
+
+ noinst_HEADERS = local.h
+
+-AM_CFLAGS = $(JACK_CFLAGS) -DJACK_LOCATION=\"$(bindir)\"
++AM_CFLAGS = $(JACK_CFLAGS) $(DBUS_CFLAGS) -DJACK_LOCATION=\"$(bindir)\"
+ AM_CXXFLAGS = $(JACK_CFLAGS)
+
+ libjack_la_CFLAGS = $(AM_CFLAGS)
+
+ libjack_la_SOURCES = $(SOURCE_FILES)
+-libjack_la_LIBADD = simd.lo @OS_LDFLAGS@
++libjack_la_LIBADD = simd.lo @OS_LDFLAGS@ $(DBUS_LIBS)
+ libjack_la_LDFLAGS = -export-dynamic -version-info @JACK_SO_VERSION@
+-
++libjack_la_LIBS = $(DBUS_LIBS)
+diff -Naur jack-audio-connection-kit-0.116.1/libjack/Makefile.in jack-audio-connection-kit-0.116.1_dbus/libjack/Makefile.in
+--- jack-audio-connection-kit-0.116.1/libjack/Makefile.in 2008-12-05 21:48:45.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/libjack/Makefile.in 2008-12-07 19:02:56.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -54,7 +54,8 @@
+ am__installdirs = "$(DESTDIR)$(libdir)"
+ libLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(lib_LTLIBRARIES)
+-libjack_la_DEPENDENCIES = simd.lo
++am__DEPENDENCIES_1 =
++libjack_la_DEPENDENCIES = simd.lo $(am__DEPENDENCIES_1)
+ am__objects_1 = libjack_la-client.lo libjack_la-intclient.lo \
+ libjack_la-messagebuffer.lo libjack_la-pool.lo \
+ libjack_la-port.lo libjack_la-midiport.lo \
+@@ -67,7 +68,7 @@
+ libjack_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libjack_la_CFLAGS) \
+ $(CFLAGS) $(libjack_la_LDFLAGS) $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -107,6 +108,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -148,6 +152,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -249,12 +255,13 @@
+
+ lib_LTLIBRARIES = libjack.la
+ noinst_HEADERS = local.h
+-AM_CFLAGS = $(JACK_CFLAGS) -DJACK_LOCATION=\"$(bindir)\"
++AM_CFLAGS = $(JACK_CFLAGS) $(DBUS_CFLAGS) -DJACK_LOCATION=\"$(bindir)\"
+ AM_CXXFLAGS = $(JACK_CFLAGS)
+ libjack_la_CFLAGS = $(AM_CFLAGS)
+ libjack_la_SOURCES = $(SOURCE_FILES)
+-libjack_la_LIBADD = simd.lo @OS_LDFLAGS@
++libjack_la_LIBADD = simd.lo @OS_LDFLAGS@ $(DBUS_LIBS)
+ libjack_la_LDFLAGS = -export-dynamic -version-info @JACK_SO_VERSION@
++libjack_la_LIBS = $(DBUS_LIBS)
+ all: all-am
+
+ .SUFFIXES:
+@@ -294,8 +301,8 @@
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
++ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
++ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+ else :; fi; \
+ done
+
+@@ -303,8 +310,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
++ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
++ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+ done
+
+ clean-libLTLIBRARIES:
+@@ -461,8 +468,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -474,8 +481,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -485,12 +492,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+diff -Naur jack-audio-connection-kit-0.116.1/Makefile.am jack-audio-connection-kit-0.116.1_dbus/Makefile.am
+--- jack-audio-connection-kit-0.116.1/Makefile.am 2008-12-05 09:48:48.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/Makefile.am 2008-12-07 19:01:15.000000000 +0100
+@@ -27,3 +27,8 @@
+ rpm -ta $(distdir).tar.gz
+
+ dist-hook: dist-check-doxygen
++
++if HAVE_DBUS
++install-data-hook:
++ @if test "`ps h -C jackdbus`" ; then echo; echo; echo 'WARNING: jackdbus seems to be running, you may want to deactivate current service using "jack_control exit".'; echo; echo; fi
++endif
+diff -Naur jack-audio-connection-kit-0.116.1/Makefile.in jack-audio-connection-kit-0.116.1_dbus/Makefile.in
+--- jack-audio-connection-kit-0.116.1/Makefile.in 2008-12-05 21:48:38.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/Makefile.in 2008-12-07 19:02:51.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -103,6 +103,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -144,6 +147,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -398,8 +403,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -424,8 +429,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -435,12 +440,13 @@
+ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+@@ -514,10 +520,6 @@
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+-dist-lzma: distdir
+- tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+- $(am__remove_distdir)
+-
+ dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+@@ -544,8 +546,6 @@
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+- *.tar.lzma*) \
+- unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+@@ -637,6 +637,7 @@
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
++@HAVE_DBUS_FALSE@install-data-hook:
+ clean: clean-recursive
+
+ clean-am: clean-generic clean-libtool mostlyclean-am
+@@ -658,6 +659,8 @@
+ info-am:
+
+ install-data-am: install-pkgconfigDATA
++ @$(NORMAL_INSTALL)
++ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+
+ install-dvi: install-dvi-recursive
+
+@@ -696,16 +699,16 @@
+ uninstall-am: uninstall-pkgconfigDATA
+
+ .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+- install-strip
++ install-data-am install-strip
+
+ .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+- dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-zip \
+- distcheck distclean distclean-generic distclean-hdr \
+- distclean-libtool distclean-tags distcleancheck distdir \
+- distuninstallcheck dvi dvi-am html html-am info info-am \
+- install install-am install-data install-data-am install-dvi \
++ dist-gzip dist-hook dist-shar dist-tarZ dist-zip distcheck \
++ distclean distclean-generic distclean-hdr distclean-libtool \
++ distclean-tags distcleancheck distdir distuninstallcheck dvi \
++ dvi-am html html-am info info-am install install-am \
++ install-data install-data-am install-data-hook install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-pkgconfigDATA install-ps \
+@@ -726,6 +729,9 @@
+ rpm -ta $(distdir).tar.gz
+
+ dist-hook: dist-check-doxygen
++
++@HAVE_DBUS_TRUE@install-data-hook:
++@HAVE_DBUS_TRUE@ @if test "`ps h -C jackdbus`" ; then echo; echo; echo 'WARNING: jackdbus seems to be running, you may want to deactivate current service using "jack_control exit".'; echo; echo; fi
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff -Naur jack-audio-connection-kit-0.116.1/man/alsa_in.1 jack-audio-connection-kit-0.116.1_dbus/man/alsa_in.1
+--- jack-audio-connection-kit-0.116.1/man/alsa_in.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/alsa_in.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH ALSA_IO "1" "December 2008" "0-116-1"
++.TH ALSA_IO "1" "декември 2008" "0-116-1"
+ .SH NAME
+ \fBalsa_in\fR, \fBalsa_out\fR \- Jack clients that perform I/O with an alternate audio interface
+ .SH SYNOPSIS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_bufsize.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_bufsize.1
+--- jack-audio-connection-kit-0.116.1/man/jack_bufsize.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_bufsize.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_BUFSIZE "1" "December 2008" "0-116-1"
++.TH JACK_BUFSIZE "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_bufsize \- JACK toolkit client to change the JACK buffer size
+ .SH SYNOPSYS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_connect.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_connect.1
+--- jack-audio-connection-kit-0.116.1/man/jack_connect.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_connect.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_CONNECT "1" "December 2008" "0-116-1"
++.TH JACK_CONNECT "1" "декември 2008" "0-116-1"
+ .SH NAME
+ \fBjack_connect\fR, \fBjack_disconnect\R \- JACK toolkit clients for connecting & disconnecting ports
+ .SH SYNOPSIS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_freewheel.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_freewheel.1
+--- jack-audio-connection-kit-0.116.1/man/jack_freewheel.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_freewheel.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_FREEWHEEL "1" "December 2008" "0-116-1"
++.TH JACK_FREEWHEEL "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_freewheel \- JACK toolkit client to control freewheeling mode
+ .SH SYNOPSYS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_impulse_grabber.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_impulse_grabber.1
+--- jack-audio-connection-kit-0.116.1/man/jack_impulse_grabber.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_impulse_grabber.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_IMPULSE_GRABBER "1" "December 2008" "0-116-1"
++.TH JACK_IMPULSE_GRABBER "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_impulse_grabber \- JACK toolkit client to grab an impulse (response)
+ .SH SYNOPSYS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_load.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_load.1
+--- jack-audio-connection-kit-0.116.1/man/jack_load.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_load.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_LOAD "1" "December 2008" "0-116-1"
++.TH JACK_LOAD "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_load \- JACK toolkit client for loading in-process clients
+ .SH SYNOPSYS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_lsp.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_lsp.1
+--- jack-audio-connection-kit-0.116.1/man/jack_lsp.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_lsp.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_LSP "1" "December 2008" "0-116-1"
++.TH JACK_LSP "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_lsp \- JACK toolkit client to list informtion on ports
+ .SH SYNOPSIS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_metro.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_metro.1
+--- jack-audio-connection-kit-0.116.1/man/jack_metro.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_metro.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_METRO "1" "December 2008" "0-116-1"
++.TH JACK_METRO "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_metro \- JACK toolkit metronome
+ .SH SYNOPSIS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_monitor_client.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_monitor_client.1
+--- jack-audio-connection-kit-0.116.1/man/jack_monitor_client.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_monitor_client.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_CONNECT "1" "December 2008" "0-116-1"
++.TH JACK_CONNECT "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_monitor_client \- The JACK Audio Connection Kit example client
+ .SH SYNOPSYS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jackrec.1 jack-audio-connection-kit-0.116.1_dbus/man/jackrec.1
+--- jack-audio-connection-kit-0.116.1/man/jackrec.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jackrec.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACKREC "1" "December 2008" "0-116-1"
++.TH JACKREC "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jackrec \- JACK toolkit client for recording audio
+ .SH SYNOPSYS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_showtime.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_showtime.1
+--- jack-audio-connection-kit-0.116.1/man/jack_showtime.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_showtime.1 2008-12-07 19:13:55.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_SHOWTIME "1" "December 2008" "0-116-1"
++.TH JACK_SHOWTIME "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_showtime \- The JACK Audio Connection Kit example client
+ .SH SYNOPSYS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_transport.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_transport.1
+--- jack-audio-connection-kit-0.116.1/man/jack_transport.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_transport.1 2008-12-07 19:13:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_TRANSPORT "1" "December 2008" "0-116-1"
++.TH JACK_TRANSPORT "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_transport \- JACK toolkit client for transport control
+ .SH SYNOPSIS
+diff -Naur jack-audio-connection-kit-0.116.1/man/jack_unload.1 jack-audio-connection-kit-0.116.1_dbus/man/jack_unload.1
+--- jack-audio-connection-kit-0.116.1/man/jack_unload.1 2008-12-06 11:48:36.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/jack_unload.1 2008-12-07 19:13:56.000000000 +0100
+@@ -1,4 +1,4 @@
+-.TH JACK_UNLOAD "1" "December 2008" "0-116-1"
++.TH JACK_UNLOAD "1" "декември 2008" "0-116-1"
+ .SH NAME
+ jack_unload \- The JACK Audio Connection Kit example client
+ .SH SYNOPSYS
+diff -Naur jack-audio-connection-kit-0.116.1/man/Makefile.in jack-audio-connection-kit-0.116.1_dbus/man/Makefile.in
+--- jack-audio-connection-kit-0.116.1/man/Makefile.in 2008-12-05 21:48:45.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/man/Makefile.in 2008-12-07 19:02:56.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -72,6 +72,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -113,6 +116,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+diff -Naur jack-audio-connection-kit-0.116.1/TODO jack-audio-connection-kit-0.116.1_dbus/TODO
+--- jack-audio-connection-kit-0.116.1/TODO 2008-11-24 16:33:44.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/TODO 2008-11-29 18:17:53.000000000 +0100
+@@ -2,7 +2,7 @@
+ *** TODO - A one file mini-bugzilla for JACK developers ***
+ =======================================================================
+
+-Version: $Id: TODO 3116 2008-11-24 15:36:26Z paul $
++Version: $Id$
+
+ NOTE: web-based bug tracker for JACK was put online in Oct 2003. It is
+ now the preferred way to report and track bugs and feature
+diff -Naur jack-audio-connection-kit-0.116.1/tools/jack_control jack-audio-connection-kit-0.116.1_dbus/tools/jack_control
+--- jack-audio-connection-kit-0.116.1/tools/jack_control 1970-01-01 01:00:00.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/tools/jack_control 2008-12-07 19:01:15.000000000 +0100
+@@ -0,0 +1,310 @@
++#!/usr/bin/env python
++
++name_base = 'org.jackaudio'
++control_interface_name = name_base + '.JackControl'
++configure_interface_name = name_base + '.Configure'
++service_name = name_base + '.service'
++
++import sys
++import os
++from traceback import print_exc
++
++import dbus
++
++def bool_convert(str_value):
++ if str_value.lower() == "false":
++ return False
++
++ if str_value.lower() == "off":
++ return False
++
++ if str_value.lower() == "no":
++ return False
++
++ if str_value == "0":
++ return False
++
++ if str_value.lower() == "(null)":
++ return False
++
++ return bool(str_value)
++
++def dbus_type_to_python_type(dbus_value):
++ if type(dbus_value) == dbus.Boolean:
++ return bool(dbus_value)
++ if type(dbus_value) == dbus.Int32 or type(dbus_value) == dbus.UInt32:
++ return int(dbus_value)
++ return dbus_value
++
++def python_type_to_jackdbus_type(value, type_char):
++ type_char = str(type_char)
++
++ if type_char == "b":
++ return bool_convert(value);
++ elif type_char == "y":
++ return dbus.Byte(value);
++ elif type_char == "i":
++ return dbus.Int32(value)
++ elif type_char == "u":
++ return dbus.UInt32(value)
++
++ return value
++
++def dbus_type_to_type_string(dbus_value):
++ if type(dbus_value) == dbus.Boolean:
++ return "bool"
++ if type(dbus_value) == dbus.Int32:
++ return "sint"
++ if type(dbus_value) == dbus.UInt32:
++ return "uint"
++ if type(dbus_value) == dbus.Byte:
++ return "char"
++ if type(dbus_value) == dbus.String:
++ return "str"
++
++ return None # throw exception here?
++
++def dbus_typesig_to_type_string(type_char):
++ type_char = str(type_char)
++ if type_char == 'i':
++ return "sint"
++ if type_char == 'u':
++ return "uint"
++ if type_char == 'y':
++ return "char"
++ if type_char == 's':
++ return "str"
++ if type_char == 'b':
++ return "bool"
++
++ print 'shit'
++ return None # throw exception here?
++
++def get_parameters(iface, path):
++ params = iface.GetParametersInfo(path)
++
++ #print params
++ for param in params:
++ typestr = dbus_typesig_to_type_string(param[0])
++ name = param[1]
++ #print name
++ descr = param[2]
++ #print descr
++ isset, default, value = iface.GetParameterValue(path + [name])
++ #print typestr
++ if bool(isset):
++ isset = "set"
++ else:
++ isset = "notset"
++ value = dbus_type_to_python_type(value)
++ default = dbus_type_to_python_type(default)
++
++ print "%20s: %s (%s:%s:%s:%s)" %(name, descr, typestr, isset, default, value)
++
++def main():
++ if len(sys.argv) == 1:
++ print "Usage: %s [command] [command] ..." % os.path.basename(sys.argv[0])
++ print "Commands:"
++ print " exit - exit jack dbus service (stops jack server if currently running)"
++ print " status - check whether jack server is started, return value is 0 if runing and 1 otherwise"
++ print " start - start jack server if not currently started"
++ print " stop - stop jack server if currenly started"
++ print " dl - get list of available drivers"
++ print " dg - get currently selected driver"
++ print " ds <driver> - select driver"
++ print " dp - get parameters of currently selected driver"
++ print " dpd <param> - get long description for driver parameter"
++ print " dps <param> <value> - set driver parameter"
++ print " il - get list of available internals"
++ print " ip <name> - get parameters of given internal"
++ print " ipd <name> <param> - get long description for internal parameter"
++ print " ips <name> <param> <value> - set internal parameter"
++ print " iload <name> - load internal"
++ print " iunload <name> - unload internal"
++ print " ep - get engine parameters"
++ print " epd <param> - get long description for engine parameter"
++ print " eps <param> <value> - set engine parameter"
++ sys.exit(0)
++
++ bus = dbus.SessionBus()
++
++ controller = bus.get_object(service_name, "/org/jackaudio/Controller")
++ control_iface = dbus.Interface(controller, control_interface_name)
++ configure_iface = dbus.Interface(controller, configure_interface_name)
++
++ # check arguments
++ index = 1
++ while index < len(sys.argv):
++ arg = sys.argv[index]
++ index += 1
++ try:
++ if arg == "exit":
++ print "--- exit"
++ control_iface.Exit()
++ elif arg == "status":
++ print "--- status"
++ if control_iface.IsStarted():
++ print "started"
++ sys.exit(0)
++ else:
++ print "stopped"
++ sys.exit(1)
++ elif arg == 'start':
++ print "--- start"
++ control_iface.StartServer()
++ elif arg == 'stop':
++ print "--- stop"
++ control_iface.StopServer()
++ elif arg == 'ism':
++ if control_iface.IsManuallyActivated():
++ print "Manually activated"
++ else:
++ print "Automatically activated"
++ elif arg == 'dl':
++ print "--- drivers list"
++ is_range, is_strict, is_fake_values, values = configure_iface.GetParameterConstraint(['engine', 'driver'])
++ for value in values:
++ print value[1]
++ elif arg == 'dg':
++ print "--- get selected driver"
++ isset, default, value = configure_iface.GetParameterValue(['engine', 'driver'])
++ print value
++ elif arg == 'ds':
++ if index >= len(sys.argv):
++ print "driver select command requires driver name argument"
++ sys.exit()
++
++ arg = sys.argv[index]
++ index += 1
++
++ print "--- driver select \"%s\"" % arg
++ configure_iface.SetParameterValue(['engine', 'driver'], dbus.String(arg))
++ elif arg == 'dp':
++ print "--- get driver parameters (type:isset:default:value)"
++ get_parameters(configure_iface, ['driver'])
++ elif arg == 'dpd':
++ if index >= len(sys.argv):
++ print "get driver parameter long description command requires parameter name argument"
++ sys.exit()
++
++ param = sys.argv[index]
++ index += 1
++
++ print "--- get driver parameter description (%s)" % param
++ type_char, name, short_descr, long_descr = configure_iface.GetParameterInfo(['driver', param])
++ print long_descr,
++ elif arg == 'dps':
++ if index + 1 >= len(sys.argv):
++ print "driver parameter set command requires parameter name and value arguments"
++ sys.exit()
++
++ param = sys.argv[index]
++ index += 1
++ value = sys.argv[index]
++ index += 1
++
++ print "--- driver param set \"%s\" -> \"%s\"" % (param, value)
++
++ type_char, name, short_descr, long_descr = configure_iface.GetParameterInfo(['driver', param])
++ configure_iface.SetParameterValue(['driver', param], python_type_to_jackdbus_type(value, type_char))
++ elif arg == 'ep':
++ print "--- get engine parameters (type:isset:default:value)"
++ get_parameters(configure_iface, ['engine'])
++ elif arg == 'epd':
++ if index >= len(sys.argv):
++ print "get engine parameter long description command requires parameter name argument"
++ sys.exit()
++
++ param_name = sys.argv[index]
++ index += 1
++
++ print "--- get engine parameter description (%s)" % param_name
++
++ type_char, name, short_descr, long_descr = configure_iface.GetParameterInfo(['engine', param_name])
++ print long_descr,
++ elif arg == 'eps':
++ if index + 1 >= len(sys.argv):
++ print "engine parameter set command requires parameter name and value arguments"
++ sys.exit()
++
++ param = sys.argv[index]
++ index += 1
++ value = sys.argv[index]
++ index += 1
++
++ print "--- engine param set \"%s\" -> \"%s\"" % (param, value)
++
++ type_char, name, short_descr, long_descr = configure_iface.GetParameterInfo(['engine', param])
++ configure_iface.SetParameterValue(['engine', param], python_type_to_jackdbus_type(value, type_char))
++ elif arg == 'il':
++ print "--- internals list"
++ is_leaf, internals = configure_iface.ReadContainer(['internals'])
++ for internal in internals:
++ print internal
++ elif arg == 'ip':
++ print "--- get internal parameters (type:isset:default:value)"
++
++ if index >= len(sys.argv):
++ print "internal parameters command requires internal name argument"
++ sys.exit()
++
++ internal_name = sys.argv[index]
++ index += 1
++
++ get_parameters(configure_iface, ['internals', internal_name])
++ elif arg == 'ipd':
++ if index + 1 >= len(sys.argv):
++ print "get internal parameter long description command requires internal and parameter name arguments"
++ sys.exit()
++
++ name = sys.argv[index]
++ index += 1
++ param = sys.argv[index]
++ index += 1
++
++ print "--- get internal parameter description (%s)" % param
++ type_char, name, short_descr, long_descr = configure_iface.GetParameterInfo(['internals', name, param])
++ print long_descr
++ elif arg == 'ips':
++ if index + 2 >= len(sys.argv):
++ print "get internal parameter long description command requires internal, parameter name and value arguments"
++ sys.exit()
++
++ internal_name = sys.argv[index]
++ index += 1
++ param = sys.argv[index]
++ index += 1
++ value = sys.argv[index]
++ index += 1
++
++ print "--- internal param set \"%s\" -> \"%s\"" % (param, value)
++
++ type_char, name, short_descr, long_descr = configure_iface.GetParameterInfo(['internals', internal_name, param])
++ configure_iface.SetParameterValue(['internals', internal_name, param], python_type_to_jackdbus_type(value, type_char))
++ elif arg == 'iload':
++ print "--- load internal"
++
++ if index >= len(sys.argv):
++ print "load internal command requires internal name argument"
++ sys.exit()
++
++ name = sys.argv[index]
++ index += 1
++ result = control_iface.LoadInternal(name)
++ elif arg == 'iunload':
++ print "--- unload internal"
++
++ if index >= len(sys.argv):
++ print "unload internal command requires internal name argument"
++ sys.exit()
++
++ name = sys.argv[index]
++ index += 1
++ result = control_iface.UnloadInternal(name)
++ else:
++ print "Unknown command '%s'" % arg
++ except dbus.DBusException, e:
++ print "DBus exception: %s" % str(e)
++
++if __name__ == '__main__':
++ main()
+diff -Naur jack-audio-connection-kit-0.116.1/tools/Makefile.am jack-audio-connection-kit-0.116.1_dbus/tools/Makefile.am
+--- jack-audio-connection-kit-0.116.1/tools/Makefile.am 2008-11-29 15:03:10.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/tools/Makefile.am 2008-12-07 19:01:15.000000000 +0100
+@@ -52,6 +52,10 @@
+ $(JACK_TRANSPORT) \
+ $(NETJACK_TOOLS)
+
++if HAVE_DBUS
++dist_bin_SCRIPTS = jack_control
++endif
++
+ noinst_PROGRAMS = jack_thread_wait
+
+ if HAVE_SNDFILE
+diff -Naur jack-audio-connection-kit-0.116.1/tools/Makefile.in jack-audio-connection-kit-0.116.1_dbus/tools/Makefile.in
+--- jack-audio-connection-kit-0.116.1/tools/Makefile.in 2008-12-05 21:48:45.000000000 +0100
++++ jack-audio-connection-kit-0.116.1_dbus/tools/Makefile.in 2008-12-07 19:02:56.000000000 +0100
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.10.1 from Makefile.am.
++# Makefile.in generated by automake 1.10 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -14,6 +14,7 @@
+
+ @SET_MAKE@
+
++
+ VPATH = @srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+ pkglibdir = $(libdir)/@PACKAGE@
+@@ -42,7 +43,8 @@
+ $(am__EXEEXT_4)
+ noinst_PROGRAMS = jack_thread_wait$(EXEEXT)
+ subdir = tools
+-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++DIST_COMMON = $(am__dist_bin_SCRIPTS_DIST) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+@@ -57,7 +59,7 @@
+ @HAVE_ALSA_TRUE@@HAVE_SAMPLERATE_TRUE@ alsa_out$(EXEEXT)
+ @HAVE_SAMPLERATE_TRUE@am__EXEEXT_4 = jack_netsource$(EXEEXT) \
+ @HAVE_SAMPLERATE_TRUE@ $(am__EXEEXT_3)
+-am__installdirs = "$(DESTDIR)$(bindir)"
++am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
+ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
+ am__alsa_in_SOURCES_DIST = alsa_in.c time_smoother.c
+@@ -165,7 +167,10 @@
+ jackrec_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(jackrec_LDFLAGS) \
+ $(LDFLAGS) -o $@
+-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++am__dist_bin_SCRIPTS_DIST = jack_control
++dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
++SCRIPTS = $(dist_bin_SCRIPTS)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+ am__depfiles_maybe = depfiles
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+@@ -218,6 +223,9 @@
+ CXXDEPMODE = @CXXDEPMODE@
+ CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@
+ DEFAULT_TMP_DIR = @DEFAULT_TMP_DIR@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+@@ -259,6 +267,8 @@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
++LIBXML2_LIBS = @LIBXML2_LIBS@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+@@ -349,6 +359,7 @@
+ @HAVE_READLINE_TRUE@JACK_TRANSPORT = jack_transport
+ @HAVE_SAMPLERATE_FALSE@NETJACK_TOOLS =
+ @HAVE_SAMPLERATE_TRUE@NETJACK_TOOLS = jack_netsource $(am__append_1)
++@HAVE_DBUS_TRUE@dist_bin_SCRIPTS = jack_control
+
+ # note! jackrec_CFLAGS syntax not supported by automake-1.4
+ @HAVE_SNDFILE_TRUE@sndfile_cflags = @SNDFILE_CFLAGS@
+@@ -451,8 +462,8 @@
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
++ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
++ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+@@ -522,6 +533,25 @@
+ jackrec$(EXEEXT): $(jackrec_OBJECTS) $(jackrec_DEPENDENCIES)
+ @rm -f jackrec$(EXEEXT)
+ $(jackrec_LINK) $(jackrec_OBJECTS) $(jackrec_LDADD) $(LIBS)
++install-dist_binSCRIPTS: $(dist_bin_SCRIPTS)
++ @$(NORMAL_INSTALL)
++ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
++ @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \
++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++ if test -f $$d$$p; then \
++ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
++ echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
++ $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
++ else :; fi; \
++ done
++
++uninstall-dist_binSCRIPTS:
++ @$(NORMAL_UNINSTALL)
++ @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \
++ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
++ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
++ rm -f "$(DESTDIR)$(bindir)/$$f"; \
++ done
+
+ mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+@@ -606,8 +636,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+ tags: TAGS
+
+@@ -619,8 +649,8 @@
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+@@ -630,12 +660,13 @@
+ CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
++ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+- END { if (nonempty) { for (i in files) print i; }; }'`; \
++ $(AWK) ' { files[$$0] = 1; } \
++ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+@@ -679,9 +710,9 @@
+ dist-hook
+ check-am: all-am
+ check: check-am
+-all-am: Makefile $(PROGRAMS)
++all-am: Makefile $(PROGRAMS) $(SCRIPTS)
+ installdirs:
+- for dir in "$(DESTDIR)$(bindir)"; do \
++ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+ install: install-am
+@@ -734,7 +765,7 @@
+
+ install-dvi: install-dvi-am
+
+-install-exec-am: install-binPROGRAMS
++install-exec-am: install-binPROGRAMS install-dist_binSCRIPTS
+
+ install-html: install-html-am
+
+@@ -766,7 +797,7 @@
+
+ ps-am:
+
+-uninstall-am: uninstall-binPROGRAMS
++uninstall-am: uninstall-binPROGRAMS uninstall-dist_binSCRIPTS
+
+ .MAKE: install-am install-strip
+
+@@ -775,14 +806,15 @@
+ dist-hook distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+- install-data install-data-am install-dvi install-dvi-am \
+- install-exec install-exec-am install-html install-html-am \
+- install-info install-info-am install-man install-pdf \
+- install-pdf-am install-ps install-ps-am install-strip \
+- installcheck installcheck-am installdirs maintainer-clean \
+- maintainer-clean-generic mostlyclean mostlyclean-compile \
+- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+- tags uninstall uninstall-am uninstall-binPROGRAMS
++ install-data install-data-am install-dist_binSCRIPTS \
++ install-dvi install-dvi-am install-exec install-exec-am \
++ install-html install-html-am install-info install-info-am \
++ install-man install-pdf install-pdf-am install-ps \
++ install-ps-am install-strip installcheck installcheck-am \
++ installdirs maintainer-clean maintainer-clean-generic \
++ mostlyclean mostlyclean-compile mostlyclean-generic \
++ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
++ uninstall-am uninstall-binPROGRAMS uninstall-dist_binSCRIPTS
+
+ @HAVE_SNDFILE_TRUE@dist-check-sndfile:
+ @HAVE_SNDFILE_FALSE@dist-check-sndfile:
Added: trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-0.116.1-dbus_as-needed.patch
===================================================================
--- trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-0.116.1-dbus_as-needed.patch (rev 0)
+++ trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-0.116.1-dbus_as-needed.patch 2008-12-14 16:04:17 UTC (rev 1388)
@@ -0,0 +1,10 @@
+--- configure.ac.orig 2008-12-14 16:54:30.000000000 +0100
++++ configure.ac 2008-12-14 16:59:14.000000000 +0100
+@@ -705,6 +705,7 @@
+ fi
+ AC_SUBST(DBUS_SERVICES_DIR)
+ AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for DBUS is])
++ LIBS="$LIBS $DBUS_LIBS"
+ fi
+
+ HAVE_LIBXML2=false
Modified: trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/jack-audio-connection-kit-0.116.1.ebuild
===================================================================
--- trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/jack-audio-connection-kit-0.116.1.ebuild 2008-12-12 22:41:30 UTC (rev 1387)
+++ trunk/overlays/proaudio/media-sound/jack-audio-connection-kit/jack-audio-connection-kit-0.116.1.ebuild 2008-12-14 16:04:17 UTC (rev 1388)
@@ -11,14 +11,14 @@
LICENSE="GPL-2 LGPL-2.1"
SLOT="0"
KEYWORDS="~amd64 ~x86"
-IUSE="3dnow altivec alsa caps celt coreaudio cpudetection doc debug ieee1394
-jack-tmpfs mmx netjack oss portaudio sse freebob"
+IUSE="3dnow altivec alsa caps celt coreaudio cpudetection dbus doc debug ieee1394 jack-tmpfs mmx netjack oss portaudio sse freebob"
RDEPEND="
>=media-libs/libsndfile-1.0.0
sys-libs/ncurses
caps? ( sys-libs/libcap )
celt? ( >=media-libs/celt-0.5.0 )
+ dbus? ( sys-apps/dbus )
portaudio? ( =media-libs/portaudio-18* )
alsa? ( >=media-libs/alsa-lib-0.9.1 )
freebob? ( sys-libs/libfreebob )
@@ -39,6 +39,17 @@
fi
}
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ if use dbus; then
+ epatch "${FILESDIR}/${P}-dbus.patch"
+ epatch "${FILESDIR}/${P}-dbus_as-needed.patch"
+ eautoreconf
+ fi
+}
+
src_compile() {
# building docs isn't configureable anymore, they are build if doxygen is
# installed