[Pkg-mpd-commits] [pkg-mpc] 01/08: Imported Upstream version 0.27

Florian Schlichting fsfs at moszumanska.debian.org
Tue Jun 2 21:35:13 UTC 2015


This is an automated email from the git hooks/post-receive script.

fsfs pushed a commit to branch master
in repository pkg-mpc.

commit 5f289c6cd66485a2b3ebc2155c74747cdffc7435
Author: Florian Schlichting <fsfs at debian.org>
Date:   Tue Jun 2 22:38:36 2015 +0200

    Imported Upstream version 0.27
---
 Makefile.am                   |  28 +-
 Makefile.in                   | 999 ++++++++++++++++++++++++++++++++----------
 NEWS                          |  13 +
 aclocal.m4                    |   8 +-
 configure                     | 269 +++++++++++-
 configure.ac                  |  20 +-
 doc/mpc-completion.bash       |   2 +-
 doc/mpc.1                     |   8 +-
 m4/check.m4                   | 132 ++++++
 src/Compiler.h                |  56 ++-
 src/args.c                    |   6 +-
 src/args.h                    |   2 +-
 src/charset.c                 |   2 +-
 src/charset.h                 |   2 +-
 src/command.c                 | 294 ++++++++-----
 src/command.h                 |   3 +-
 src/format.c                  | 259 +++++++++++
 src/{path.h => format.h}      |  37 +-
 src/idle.c                    |   2 +-
 src/idle.h                    |   2 +-
 src/list.c                    | 204 +--------
 src/list.h                    |  50 +--
 src/main.c                    |  30 +-
 src/message.c                 |  13 +-
 src/message.h                 |   2 +-
 src/mpc.h                     |   2 +-
 src/options.c                 |   2 +-
 src/options.h                 |   2 +-
 src/password.c                |   2 +-
 src/password.h                |   2 +-
 src/path.c                    |   2 +-
 src/path.h                    |   2 +-
 src/queue.c                   |  51 ++-
 src/queue.h                   |   2 +-
 src/search.c                  |  40 +-
 src/search.h                  |   5 +-
 src/song_format.c             | 114 +++++
 src/{path.h => song_format.h} |  30 +-
 src/status.c                  |   5 +-
 src/status.h                  |   2 +-
 src/sticker.c                 |   2 +-
 src/sticker.h                 |   2 +-
 src/tab.c                     |  23 +-
 src/tab.h                     |   2 +-
 src/util.c                    | 234 +---------
 src/util.h                    |   6 +-
 test-driver                   | 139 ++++++
 test/test_format.c            | 152 +++++++
 48 files changed, 2298 insertions(+), 968 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 7b84b2d..1567ba9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
 ACLOCAL_AMFLAGS = -I m4
-AUTOMAKE_OPTIONS = foreign 1.11 dist-xz
+AUTOMAKE_OPTIONS = foreign 1.11 dist-xz subdir-objects
 
 man_MANS = doc/mpc.1
 doc_DATA = AUTHORS COPYING NEWS README \
@@ -15,6 +15,8 @@ src_mpc_SOURCES = \
 	src/password.c src/password.h \
 	src/status.c src/status.h \
 	src/args.c src/args.h \
+	src/format.c src/format.h \
+	src/song_format.c src/song_format.h \
 	src/util.c src/util.h \
 	src/command.c src/command.h \
 	src/queue.c src/queue.h \
@@ -34,6 +36,30 @@ endif
 src_mpc_CPPFLAGS = $(AM_CPPFLAGS) $(ICONV_CFLAGS) $(LIBMPDCLIENT_CFLAGS)
 src_mpc_LDADD = $(ICONV_LIBS) $(LIBMPDCLIENT_LIBS)
 
+if ENABLE_TEST
+C_TESTS = \
+	test/test_format
+
+TESTS = $(C_TESTS)
+
+check_PROGRAMS = \
+	$(C_TESTS)
+
+test_test_format_SOURCES = \
+	src/format.c \
+	src/song_format.c \
+	test/test_format.c
+test_test_format_CFLAGS = $(AM_CFLAGS) $(CHECK_CFLAGS)
+test_test_format_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/src $(ICONV_CFLAGS) $(LIBMPDCLIENT_CFLAGS)
+test_test_format_LDADD = $(ICONV_LIBS) $(LIBMPDCLIENT_LIBS) $(CHECK_LIBS) -lrt -lm
+test_test_format_LDFLAGS = -pthread
+
+if HAVE_ICONV
+test_test_format_SOURCES += src/charset.c src/charset.h
+endif
+
+endif
+
 # sparse is a semantic parser
 # URL: git://www.kernel.org/pub/scm/devel/sparse/sparse.git
 SPARSE = sparse
diff --git a/Makefile.in b/Makefile.in
index be6a791..bfcb51e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -79,18 +79,22 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 bin_PROGRAMS = src/mpc$(EXEEXT)
 @HAVE_ICONV_TRUE at am__append_1 = src/charset.c src/charset.h
+ at ENABLE_TEST_TRUE@TESTS = $(am__EXEEXT_1)
+ at ENABLE_TEST_TRUE@check_PROGRAMS = $(am__EXEEXT_1)
+ at ENABLE_TEST_TRUE@@HAVE_ICONV_TRUE at am__append_2 = src/charset.c src/charset.h
 subdir = .
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(top_srcdir)/configure $(am__configure_deps) \
-	$(srcdir)/config.h.in depcomp AUTHORS COPYING INSTALL NEWS \
-	README compile install-sh missing
+	$(srcdir)/config.h.in depcomp test-driver AUTHORS COPYING \
+	INSTALL NEWS README compile install-sh missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \
 	$(top_srcdir)/m4/ax_append_flag.m4 \
 	$(top_srcdir)/m4/ax_append_link_flags.m4 \
 	$(top_srcdir)/m4/ax_check_compile_flag.m4 \
 	$(top_srcdir)/m4/ax_check_link_flag.m4 \
-	$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/check.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -101,28 +105,46 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
 	"$(DESTDIR)$(docdir)"
+ at ENABLE_TEST_TRUE@am__EXEEXT_1 = test/test_format$(EXEEXT)
 PROGRAMS = $(bin_PROGRAMS)
 am__src_mpc_SOURCES_DIST = src/main.c src/mpc.h src/list.c src/list.h \
 	src/password.c src/password.h src/status.c src/status.h \
-	src/args.c src/args.h src/util.c src/util.h src/command.c \
-	src/command.h src/queue.c src/queue.h src/sticker.c \
-	src/sticker.h src/tab.c src/tab.h src/idle.c src/idle.h \
-	src/message.c src/message.h src/search.c src/search.h \
-	src/options.c src/options.h src/path.c src/path.h \
+	src/args.c src/args.h src/format.c src/format.h \
+	src/song_format.c src/song_format.h src/util.c src/util.h \
+	src/command.c src/command.h src/queue.c src/queue.h \
+	src/sticker.c src/sticker.h src/tab.c src/tab.h src/idle.c \
+	src/idle.h src/message.c src/message.h src/search.c \
+	src/search.h src/options.c src/options.h src/path.c src/path.h \
 	src/Compiler.h src/charset.c src/charset.h
- at HAVE_ICONV_TRUE@am__objects_1 = src_mpc-charset.$(OBJEXT)
-am_src_mpc_OBJECTS = src_mpc-main.$(OBJEXT) src_mpc-list.$(OBJEXT) \
-	src_mpc-password.$(OBJEXT) src_mpc-status.$(OBJEXT) \
-	src_mpc-args.$(OBJEXT) src_mpc-util.$(OBJEXT) \
-	src_mpc-command.$(OBJEXT) src_mpc-queue.$(OBJEXT) \
-	src_mpc-sticker.$(OBJEXT) src_mpc-tab.$(OBJEXT) \
-	src_mpc-idle.$(OBJEXT) src_mpc-message.$(OBJEXT) \
-	src_mpc-search.$(OBJEXT) src_mpc-options.$(OBJEXT) \
-	src_mpc-path.$(OBJEXT) $(am__objects_1)
+am__dirstamp = $(am__leading_dot)dirstamp
+ at HAVE_ICONV_TRUE@am__objects_1 = src/src_mpc-charset.$(OBJEXT)
+am_src_mpc_OBJECTS = src/src_mpc-main.$(OBJEXT) \
+	src/src_mpc-list.$(OBJEXT) src/src_mpc-password.$(OBJEXT) \
+	src/src_mpc-status.$(OBJEXT) src/src_mpc-args.$(OBJEXT) \
+	src/src_mpc-format.$(OBJEXT) src/src_mpc-song_format.$(OBJEXT) \
+	src/src_mpc-util.$(OBJEXT) src/src_mpc-command.$(OBJEXT) \
+	src/src_mpc-queue.$(OBJEXT) src/src_mpc-sticker.$(OBJEXT) \
+	src/src_mpc-tab.$(OBJEXT) src/src_mpc-idle.$(OBJEXT) \
+	src/src_mpc-message.$(OBJEXT) src/src_mpc-search.$(OBJEXT) \
+	src/src_mpc-options.$(OBJEXT) src/src_mpc-path.$(OBJEXT) \
+	$(am__objects_1)
 src_mpc_OBJECTS = $(am_src_mpc_OBJECTS)
 am__DEPENDENCIES_1 =
 src_mpc_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am__dirstamp = $(am__leading_dot)dirstamp
+am__test_test_format_SOURCES_DIST = src/format.c src/song_format.c \
+	test/test_format.c src/charset.c src/charset.h
+ at ENABLE_TEST_TRUE@@HAVE_ICONV_TRUE at am__objects_2 = src/test_test_format-charset.$(OBJEXT)
+ at ENABLE_TEST_TRUE@am_test_test_format_OBJECTS =  \
+ at ENABLE_TEST_TRUE@	src/test_test_format-format.$(OBJEXT) \
+ at ENABLE_TEST_TRUE@	src/test_test_format-song_format.$(OBJEXT) \
+ at ENABLE_TEST_TRUE@	test/test_test_format-test_format.$(OBJEXT) \
+ at ENABLE_TEST_TRUE@	$(am__objects_2)
+test_test_format_OBJECTS = $(am_test_test_format_OBJECTS)
+ at ENABLE_TEST_TRUE@test_test_format_DEPENDENCIES =  \
+ at ENABLE_TEST_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ at ENABLE_TEST_TRUE@	$(am__DEPENDENCIES_1)
+test_test_format_LINK = $(CCLD) $(test_test_format_CFLAGS) $(CFLAGS) \
+	$(test_test_format_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_ at AM_V@)
 am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -155,8 +177,9 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(src_mpc_SOURCES)
-DIST_SOURCES = $(am__src_mpc_SOURCES_DIST)
+SOURCES = $(src_mpc_SOURCES) $(test_test_format_SOURCES)
+DIST_SOURCES = $(am__src_mpc_SOURCES_DIST) \
+	$(am__test_test_format_SOURCES_DIST)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -214,7 +237,183 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
-AM_RECURSIVE_TARGETS = cscope
+AM_RECURSIVE_TARGETS = cscope check recheck
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -244,6 +443,8 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CYGPATH_W = @CYGPATH_W@
@@ -329,7 +530,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 ACLOCAL_AMFLAGS = -I m4
-AUTOMAKE_OPTIONS = foreign 1.11 dist-xz
+AUTOMAKE_OPTIONS = foreign 1.11 dist-xz subdir-objects
 man_MANS = doc/mpc.1
 doc_DATA = AUTHORS COPYING NEWS README \
 	doc/mpd-m3u-handler.sh doc/mpd-pls-handler.sh doc/mppledit \
@@ -338,14 +539,25 @@ doc_DATA = AUTHORS COPYING NEWS README \
 EXTRA_DIST = $(man_MANS) $(doc_DATA)
 src_mpc_SOURCES = src/main.c src/mpc.h src/list.c src/list.h \
 	src/password.c src/password.h src/status.c src/status.h \
-	src/args.c src/args.h src/util.c src/util.h src/command.c \
-	src/command.h src/queue.c src/queue.h src/sticker.c \
-	src/sticker.h src/tab.c src/tab.h src/idle.c src/idle.h \
-	src/message.c src/message.h src/search.c src/search.h \
-	src/options.c src/options.h src/path.c src/path.h \
+	src/args.c src/args.h src/format.c src/format.h \
+	src/song_format.c src/song_format.h src/util.c src/util.h \
+	src/command.c src/command.h src/queue.c src/queue.h \
+	src/sticker.c src/sticker.h src/tab.c src/tab.h src/idle.c \
+	src/idle.h src/message.c src/message.h src/search.c \
+	src/search.h src/options.c src/options.h src/path.c src/path.h \
 	src/Compiler.h $(am__append_1)
 src_mpc_CPPFLAGS = $(AM_CPPFLAGS) $(ICONV_CFLAGS) $(LIBMPDCLIENT_CFLAGS)
 src_mpc_LDADD = $(ICONV_LIBS) $(LIBMPDCLIENT_LIBS)
+ at ENABLE_TEST_TRUE@C_TESTS = \
+ at ENABLE_TEST_TRUE@	test/test_format
+
+ at ENABLE_TEST_TRUE@test_test_format_SOURCES = src/format.c \
+ at ENABLE_TEST_TRUE@	src/song_format.c test/test_format.c \
+ at ENABLE_TEST_TRUE@	$(am__append_2)
+ at ENABLE_TEST_TRUE@test_test_format_CFLAGS = $(AM_CFLAGS) $(CHECK_CFLAGS)
+ at ENABLE_TEST_TRUE@test_test_format_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/src $(ICONV_CFLAGS) $(LIBMPDCLIENT_CFLAGS)
+ at ENABLE_TEST_TRUE@test_test_format_LDADD = $(ICONV_LIBS) $(LIBMPDCLIENT_LIBS) $(CHECK_LIBS) -lrt -lm
+ at ENABLE_TEST_TRUE@test_test_format_LDFLAGS = -pthread
 
 # sparse is a semantic parser
 # URL: git://www.kernel.org/pub/scm/devel/sparse/sparse.git
@@ -359,7 +571,7 @@ all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
+.SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs
 am--refresh: Makefile
 	@:
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
@@ -451,274 +663,428 @@ uninstall-binPROGRAMS:
 
 clean-binPROGRAMS:
 	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+clean-checkPROGRAMS:
+	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
 src/$(am__dirstamp):
 	@$(MKDIR_P) src
 	@: > src/$(am__dirstamp)
+src/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) src/$(DEPDIR)
+	@: > src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-main.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-list.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-password.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-status.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-args.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-format.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-song_format.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-util.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-command.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-queue.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-sticker.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-tab.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-idle.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-message.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-search.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-options.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-path.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/src_mpc-charset.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
 
 src/mpc$(EXEEXT): $(src_mpc_OBJECTS) $(src_mpc_DEPENDENCIES) $(EXTRA_src_mpc_DEPENDENCIES) src/$(am__dirstamp)
 	@rm -f src/mpc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(src_mpc_OBJECTS) $(src_mpc_LDADD) $(LIBS)
+src/test_test_format-format.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/test_test_format-song_format.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+test/$(am__dirstamp):
+	@$(MKDIR_P) test
+	@: > test/$(am__dirstamp)
+test/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) test/$(DEPDIR)
+	@: > test/$(DEPDIR)/$(am__dirstamp)
+test/test_test_format-test_format.$(OBJEXT): test/$(am__dirstamp) \
+	test/$(DEPDIR)/$(am__dirstamp)
+src/test_test_format-charset.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+
+test/test_format$(EXEEXT): $(test_test_format_OBJECTS) $(test_test_format_DEPENDENCIES) $(EXTRA_test_test_format_DEPENDENCIES) test/$(am__dirstamp)
+	@rm -f test/test_format$(EXEEXT)
+	$(AM_V_CCLD)$(test_test_format_LINK) $(test_test_format_OBJECTS) $(test_test_format_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
+	-rm -f src/*.$(OBJEXT)
+	-rm -f test/*.$(OBJEXT)
 
 distclean-compile:
 	-rm -f *.tab.c
 
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-args.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-charset.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-command.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-idle.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-list.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-main.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-message.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-options.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-password.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-path.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-queue.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-search.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-status.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-sticker.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-tab.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/src_mpc-util.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-args.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-charset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-command.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-format.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-idle.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-list.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-main.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-message.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-options.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-password.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-path.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-queue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-search.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-song_format.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-status.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-sticker.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-tab.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/src_mpc-util.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/test_test_format-charset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/test_test_format-format.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/test_test_format-song_format.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at test/$(DEPDIR)/test_test_format-test_format.Po at am__quote@
 
 .c.o:
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
 
 .c.obj:
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-src_mpc-main.o: src/main.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-main.o -MD -MP -MF $(DEPDIR)/src_mpc-main.Tpo -c -o src_mpc-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-main.Tpo $(DEPDIR)/src_mpc-main.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/main.c' object='src_mpc-main.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-main.o: src/main.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-main.o -MD -MP -MF src/$(DEPDIR)/src_mpc-main.Tpo -c -o src/src_mpc-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-main.Tpo src/$(DEPDIR)/src_mpc-main.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/main.c' object='src/src_mpc-main.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c
+
+src/src_mpc-main.obj: src/main.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-main.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-main.Tpo -c -o src/src_mpc-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-main.Tpo src/$(DEPDIR)/src_mpc-main.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/main.c' object='src/src_mpc-main.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi`
+
+src/src_mpc-list.o: src/list.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-list.o -MD -MP -MF src/$(DEPDIR)/src_mpc-list.Tpo -c -o src/src_mpc-list.o `test -f 'src/list.c' || echo '$(srcdir)/'`src/list.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-list.Tpo src/$(DEPDIR)/src_mpc-list.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/list.c' object='src/src_mpc-list.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-list.o `test -f 'src/list.c' || echo '$(srcdir)/'`src/list.c
+
+src/src_mpc-list.obj: src/list.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-list.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-list.Tpo -c -o src/src_mpc-list.obj `if test -f 'src/list.c'; then $(CYGPATH_W) 'src/list.c'; else $(CYGPATH_W) '$(srcdir)/src/list.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-list.Tpo src/$(DEPDIR)/src_mpc-list.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/list.c' object='src/src_mpc-list.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-list.obj `if test -f 'src/list.c'; then $(CYGPATH_W) 'src/list.c'; else $(CYGPATH_W) '$(srcdir)/src/list.c'; fi`
+
+src/src_mpc-password.o: src/password.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-password.o -MD -MP -MF src/$(DEPDIR)/src_mpc-password.Tpo -c -o src/src_mpc-password.o `test -f 'src/password.c' || echo '$(srcdir)/'`src/password.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-password.Tpo src/$(DEPDIR)/src_mpc-password.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/password.c' object='src/src_mpc-password.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-password.o `test -f 'src/password.c' || echo '$(srcdir)/'`src/password.c
+
+src/src_mpc-password.obj: src/password.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-password.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-password.Tpo -c -o src/src_mpc-password.obj `if test -f 'src/password.c'; then $(CYGPATH_W) 'src/password.c'; else $(CYGPATH_W) '$(srcdir)/src/password.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-password.Tpo src/$(DEPDIR)/src_mpc-password.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/password.c' object='src/src_mpc-password.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-password.obj `if test -f 'src/password.c'; then $(CYGPATH_W) 'src/password.c'; else $(CYGPATH_W) '$(srcdir)/src/password.c'; fi`
+
+src/src_mpc-status.o: src/status.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-status.o -MD -MP -MF src/$(DEPDIR)/src_mpc-status.Tpo -c -o src/src_mpc-status.o `test -f 'src/status.c' || echo '$(srcdir)/'`src/status.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-status.Tpo src/$(DEPDIR)/src_mpc-status.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/status.c' object='src/src_mpc-status.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-status.o `test -f 'src/status.c' || echo '$(srcdir)/'`src/status.c
+
+src/src_mpc-status.obj: src/status.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-status.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-status.Tpo -c -o src/src_mpc-status.obj `if test -f 'src/status.c'; then $(CYGPATH_W) 'src/status.c'; else $(CYGPATH_W) '$(srcdir)/src/status.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-status.Tpo src/$(DEPDIR)/src_mpc-status.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/status.c' object='src/src_mpc-status.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-status.obj `if test -f 'src/status.c'; then $(CYGPATH_W) 'src/status.c'; else $(CYGPATH_W) '$(srcdir)/src/status.c'; fi`
+
+src/src_mpc-args.o: src/args.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-args.o -MD -MP -MF src/$(DEPDIR)/src_mpc-args.Tpo -c -o src/src_mpc-args.o `test -f 'src/args.c' || echo '$(srcdir)/'`src/args.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-args.Tpo src/$(DEPDIR)/src_mpc-args.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/args.c' object='src/src_mpc-args.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-args.o `test -f 'src/args.c' || echo '$(srcdir)/'`src/args.c
 
-src_mpc-main.obj: src/main.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-main.obj -MD -MP -MF $(DEPDIR)/src_mpc-main.Tpo -c -o src_mpc-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-main.Tpo $(DEPDIR)/src_mpc-main.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/main.c' object='src_mpc-main.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-args.obj: src/args.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-args.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-args.Tpo -c -o src/src_mpc-args.obj `if test -f 'src/args.c'; then $(CYGPATH_W) 'src/args.c'; else $(CYGPATH_W) '$(srcdir)/src/args.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-args.Tpo src/$(DEPDIR)/src_mpc-args.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/args.c' object='src/src_mpc-args.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-args.obj `if test -f 'src/args.c'; then $(CYGPATH_W) 'src/args.c'; else $(CYGPATH_W) '$(srcdir)/src/args.c'; fi`
 
-src_mpc-list.o: src/list.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-list.o -MD -MP -MF $(DEPDIR)/src_mpc-list.Tpo -c -o src_mpc-list.o `test -f 'src/list.c' || echo '$(srcdir)/'`src/list.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-list.Tpo $(DEPDIR)/src_mpc-list.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/list.c' object='src_mpc-list.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-format.o: src/format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-format.o -MD -MP -MF src/$(DEPDIR)/src_mpc-format.Tpo -c -o src/src_mpc-format.o `test -f 'src/format.c' || echo '$(srcdir)/'`src/format.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-format.Tpo src/$(DEPDIR)/src_mpc-format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/format.c' object='src/src_mpc-format.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-list.o `test -f 'src/list.c' || echo '$(srcdir)/'`src/list.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-format.o `test -f 'src/format.c' || echo '$(srcdir)/'`src/format.c
 
-src_mpc-list.obj: src/list.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-list.obj -MD -MP -MF $(DEPDIR)/src_mpc-list.Tpo -c -o src_mpc-list.obj `if test -f 'src/list.c'; then $(CYGPATH_W) 'src/list.c'; else $(CYGPATH_W) '$(srcdir)/src/list.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-list.Tpo $(DEPDIR)/src_mpc-list.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/list.c' object='src_mpc-list.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-format.obj: src/format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-format.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-format.Tpo -c -o src/src_mpc-format.obj `if test -f 'src/format.c'; then $(CYGPATH_W) 'src/format.c'; else $(CYGPATH_W) '$(srcdir)/src/format.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-format.Tpo src/$(DEPDIR)/src_mpc-format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/format.c' object='src/src_mpc-format.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-list.obj `if test -f 'src/list.c'; then $(CYGPATH_W) 'src/list.c'; else $(CYGPATH_W) '$(srcdir)/src/list.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-format.obj `if test -f 'src/format.c'; then $(CYGPATH_W) 'src/format.c'; else $(CYGPATH_W) '$(srcdir)/src/format.c'; fi`
 
-src_mpc-password.o: src/password.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-password.o -MD -MP -MF $(DEPDIR)/src_mpc-password.Tpo -c -o src_mpc-password.o `test -f 'src/password.c' || echo '$(srcdir)/'`src/password.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-password.Tpo $(DEPDIR)/src_mpc-password.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/password.c' object='src_mpc-password.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-song_format.o: src/song_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-song_format.o -MD -MP -MF src/$(DEPDIR)/src_mpc-song_format.Tpo -c -o src/src_mpc-song_format.o `test -f 'src/song_format.c' || echo '$(srcdir)/'`src/song_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-song_format.Tpo src/$(DEPDIR)/src_mpc-song_format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/song_format.c' object='src/src_mpc-song_format.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-password.o `test -f 'src/password.c' || echo '$(srcdir)/'`src/password.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-song_format.o `test -f 'src/song_format.c' || echo '$(srcdir)/'`src/song_format.c
 
-src_mpc-password.obj: src/password.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-password.obj -MD -MP -MF $(DEPDIR)/src_mpc-password.Tpo -c -o src_mpc-password.obj `if test -f 'src/password.c'; then $(CYGPATH_W) 'src/password.c'; else $(CYGPATH_W) '$(srcdir)/src/password.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-password.Tpo $(DEPDIR)/src_mpc-password.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/password.c' object='src_mpc-password.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-song_format.obj: src/song_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-song_format.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-song_format.Tpo -c -o src/src_mpc-song_format.obj `if test -f 'src/song_format.c'; then $(CYGPATH_W) 'src/song_format.c'; else $(CYGPATH_W) '$(srcdir)/src/song_format.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-song_format.Tpo src/$(DEPDIR)/src_mpc-song_format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/song_format.c' object='src/src_mpc-song_format.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-password.obj `if test -f 'src/password.c'; then $(CYGPATH_W) 'src/password.c'; else $(CYGPATH_W) '$(srcdir)/src/password.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-song_format.obj `if test -f 'src/song_format.c'; then $(CYGPATH_W) 'src/song_format.c'; else $(CYGPATH_W) '$(srcdir)/src/song_format.c'; fi`
 
-src_mpc-status.o: src/status.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-status.o -MD -MP -MF $(DEPDIR)/src_mpc-status.Tpo -c -o src_mpc-status.o `test -f 'src/status.c' || echo '$(srcdir)/'`src/status.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-status.Tpo $(DEPDIR)/src_mpc-status.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/status.c' object='src_mpc-status.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-util.o: src/util.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-util.o -MD -MP -MF src/$(DEPDIR)/src_mpc-util.Tpo -c -o src/src_mpc-util.o `test -f 'src/util.c' || echo '$(srcdir)/'`src/util.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-util.Tpo src/$(DEPDIR)/src_mpc-util.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/util.c' object='src/src_mpc-util.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-status.o `test -f 'src/status.c' || echo '$(srcdir)/'`src/status.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-util.o `test -f 'src/util.c' || echo '$(srcdir)/'`src/util.c
 
-src_mpc-status.obj: src/status.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-status.obj -MD -MP -MF $(DEPDIR)/src_mpc-status.Tpo -c -o src_mpc-status.obj `if test -f 'src/status.c'; then $(CYGPATH_W) 'src/status.c'; else $(CYGPATH_W) '$(srcdir)/src/status.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-status.Tpo $(DEPDIR)/src_mpc-status.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/status.c' object='src_mpc-status.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-util.obj: src/util.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-util.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-util.Tpo -c -o src/src_mpc-util.obj `if test -f 'src/util.c'; then $(CYGPATH_W) 'src/util.c'; else $(CYGPATH_W) '$(srcdir)/src/util.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-util.Tpo src/$(DEPDIR)/src_mpc-util.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/util.c' object='src/src_mpc-util.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-status.obj `if test -f 'src/status.c'; then $(CYGPATH_W) 'src/status.c'; else $(CYGPATH_W) '$(srcdir)/src/status.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-util.obj `if test -f 'src/util.c'; then $(CYGPATH_W) 'src/util.c'; else $(CYGPATH_W) '$(srcdir)/src/util.c'; fi`
 
-src_mpc-args.o: src/args.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-args.o -MD -MP -MF $(DEPDIR)/src_mpc-args.Tpo -c -o src_mpc-args.o `test -f 'src/args.c' || echo '$(srcdir)/'`src/args.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-args.Tpo $(DEPDIR)/src_mpc-args.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/args.c' object='src_mpc-args.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-command.o: src/command.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-command.o -MD -MP -MF src/$(DEPDIR)/src_mpc-command.Tpo -c -o src/src_mpc-command.o `test -f 'src/command.c' || echo '$(srcdir)/'`src/command.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-command.Tpo src/$(DEPDIR)/src_mpc-command.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/command.c' object='src/src_mpc-command.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-args.o `test -f 'src/args.c' || echo '$(srcdir)/'`src/args.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-command.o `test -f 'src/command.c' || echo '$(srcdir)/'`src/command.c
 
-src_mpc-args.obj: src/args.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-args.obj -MD -MP -MF $(DEPDIR)/src_mpc-args.Tpo -c -o src_mpc-args.obj `if test -f 'src/args.c'; then $(CYGPATH_W) 'src/args.c'; else $(CYGPATH_W) '$(srcdir)/src/args.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-args.Tpo $(DEPDIR)/src_mpc-args.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/args.c' object='src_mpc-args.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-command.obj: src/command.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-command.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-command.Tpo -c -o src/src_mpc-command.obj `if test -f 'src/command.c'; then $(CYGPATH_W) 'src/command.c'; else $(CYGPATH_W) '$(srcdir)/src/command.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-command.Tpo src/$(DEPDIR)/src_mpc-command.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/command.c' object='src/src_mpc-command.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-args.obj `if test -f 'src/args.c'; then $(CYGPATH_W) 'src/args.c'; else $(CYGPATH_W) '$(srcdir)/src/args.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-command.obj `if test -f 'src/command.c'; then $(CYGPATH_W) 'src/command.c'; else $(CYGPATH_W) '$(srcdir)/src/command.c'; fi`
 
-src_mpc-util.o: src/util.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-util.o -MD -MP -MF $(DEPDIR)/src_mpc-util.Tpo -c -o src_mpc-util.o `test -f 'src/util.c' || echo '$(srcdir)/'`src/util.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-util.Tpo $(DEPDIR)/src_mpc-util.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/util.c' object='src_mpc-util.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-queue.o: src/queue.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-queue.o -MD -MP -MF src/$(DEPDIR)/src_mpc-queue.Tpo -c -o src/src_mpc-queue.o `test -f 'src/queue.c' || echo '$(srcdir)/'`src/queue.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-queue.Tpo src/$(DEPDIR)/src_mpc-queue.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/queue.c' object='src/src_mpc-queue.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-util.o `test -f 'src/util.c' || echo '$(srcdir)/'`src/util.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-queue.o `test -f 'src/queue.c' || echo '$(srcdir)/'`src/queue.c
 
-src_mpc-util.obj: src/util.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-util.obj -MD -MP -MF $(DEPDIR)/src_mpc-util.Tpo -c -o src_mpc-util.obj `if test -f 'src/util.c'; then $(CYGPATH_W) 'src/util.c'; else $(CYGPATH_W) '$(srcdir)/src/util.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-util.Tpo $(DEPDIR)/src_mpc-util.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/util.c' object='src_mpc-util.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-queue.obj: src/queue.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-queue.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-queue.Tpo -c -o src/src_mpc-queue.obj `if test -f 'src/queue.c'; then $(CYGPATH_W) 'src/queue.c'; else $(CYGPATH_W) '$(srcdir)/src/queue.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-queue.Tpo src/$(DEPDIR)/src_mpc-queue.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/queue.c' object='src/src_mpc-queue.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-util.obj `if test -f 'src/util.c'; then $(CYGPATH_W) 'src/util.c'; else $(CYGPATH_W) '$(srcdir)/src/util.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-queue.obj `if test -f 'src/queue.c'; then $(CYGPATH_W) 'src/queue.c'; else $(CYGPATH_W) '$(srcdir)/src/queue.c'; fi`
 
-src_mpc-command.o: src/command.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-command.o -MD -MP -MF $(DEPDIR)/src_mpc-command.Tpo -c -o src_mpc-command.o `test -f 'src/command.c' || echo '$(srcdir)/'`src/command.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-command.Tpo $(DEPDIR)/src_mpc-command.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/command.c' object='src_mpc-command.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-sticker.o: src/sticker.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-sticker.o -MD -MP -MF src/$(DEPDIR)/src_mpc-sticker.Tpo -c -o src/src_mpc-sticker.o `test -f 'src/sticker.c' || echo '$(srcdir)/'`src/sticker.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-sticker.Tpo src/$(DEPDIR)/src_mpc-sticker.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/sticker.c' object='src/src_mpc-sticker.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-command.o `test -f 'src/command.c' || echo '$(srcdir)/'`src/command.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-sticker.o `test -f 'src/sticker.c' || echo '$(srcdir)/'`src/sticker.c
 
-src_mpc-command.obj: src/command.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-command.obj -MD -MP -MF $(DEPDIR)/src_mpc-command.Tpo -c -o src_mpc-command.obj `if test -f 'src/command.c'; then $(CYGPATH_W) 'src/command.c'; else $(CYGPATH_W) '$(srcdir)/src/command.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-command.Tpo $(DEPDIR)/src_mpc-command.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/command.c' object='src_mpc-command.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-sticker.obj: src/sticker.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-sticker.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-sticker.Tpo -c -o src/src_mpc-sticker.obj `if test -f 'src/sticker.c'; then $(CYGPATH_W) 'src/sticker.c'; else $(CYGPATH_W) '$(srcdir)/src/sticker.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-sticker.Tpo src/$(DEPDIR)/src_mpc-sticker.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/sticker.c' object='src/src_mpc-sticker.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-command.obj `if test -f 'src/command.c'; then $(CYGPATH_W) 'src/command.c'; else $(CYGPATH_W) '$(srcdir)/src/command.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-sticker.obj `if test -f 'src/sticker.c'; then $(CYGPATH_W) 'src/sticker.c'; else $(CYGPATH_W) '$(srcdir)/src/sticker.c'; fi`
 
-src_mpc-queue.o: src/queue.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-queue.o -MD -MP -MF $(DEPDIR)/src_mpc-queue.Tpo -c -o src_mpc-queue.o `test -f 'src/queue.c' || echo '$(srcdir)/'`src/queue.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-queue.Tpo $(DEPDIR)/src_mpc-queue.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/queue.c' object='src_mpc-queue.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-tab.o: src/tab.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-tab.o -MD -MP -MF src/$(DEPDIR)/src_mpc-tab.Tpo -c -o src/src_mpc-tab.o `test -f 'src/tab.c' || echo '$(srcdir)/'`src/tab.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-tab.Tpo src/$(DEPDIR)/src_mpc-tab.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tab.c' object='src/src_mpc-tab.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-queue.o `test -f 'src/queue.c' || echo '$(srcdir)/'`src/queue.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-tab.o `test -f 'src/tab.c' || echo '$(srcdir)/'`src/tab.c
 
-src_mpc-queue.obj: src/queue.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-queue.obj -MD -MP -MF $(DEPDIR)/src_mpc-queue.Tpo -c -o src_mpc-queue.obj `if test -f 'src/queue.c'; then $(CYGPATH_W) 'src/queue.c'; else $(CYGPATH_W) '$(srcdir)/src/queue.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-queue.Tpo $(DEPDIR)/src_mpc-queue.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/queue.c' object='src_mpc-queue.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-tab.obj: src/tab.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-tab.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-tab.Tpo -c -o src/src_mpc-tab.obj `if test -f 'src/tab.c'; then $(CYGPATH_W) 'src/tab.c'; else $(CYGPATH_W) '$(srcdir)/src/tab.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-tab.Tpo src/$(DEPDIR)/src_mpc-tab.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tab.c' object='src/src_mpc-tab.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-queue.obj `if test -f 'src/queue.c'; then $(CYGPATH_W) 'src/queue.c'; else $(CYGPATH_W) '$(srcdir)/src/queue.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-tab.obj `if test -f 'src/tab.c'; then $(CYGPATH_W) 'src/tab.c'; else $(CYGPATH_W) '$(srcdir)/src/tab.c'; fi`
 
-src_mpc-sticker.o: src/sticker.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-sticker.o -MD -MP -MF $(DEPDIR)/src_mpc-sticker.Tpo -c -o src_mpc-sticker.o `test -f 'src/sticker.c' || echo '$(srcdir)/'`src/sticker.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-sticker.Tpo $(DEPDIR)/src_mpc-sticker.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/sticker.c' object='src_mpc-sticker.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-idle.o: src/idle.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-idle.o -MD -MP -MF src/$(DEPDIR)/src_mpc-idle.Tpo -c -o src/src_mpc-idle.o `test -f 'src/idle.c' || echo '$(srcdir)/'`src/idle.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-idle.Tpo src/$(DEPDIR)/src_mpc-idle.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/idle.c' object='src/src_mpc-idle.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-sticker.o `test -f 'src/sticker.c' || echo '$(srcdir)/'`src/sticker.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-idle.o `test -f 'src/idle.c' || echo '$(srcdir)/'`src/idle.c
 
-src_mpc-sticker.obj: src/sticker.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-sticker.obj -MD -MP -MF $(DEPDIR)/src_mpc-sticker.Tpo -c -o src_mpc-sticker.obj `if test -f 'src/sticker.c'; then $(CYGPATH_W) 'src/sticker.c'; else $(CYGPATH_W) '$(srcdir)/src/sticker.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-sticker.Tpo $(DEPDIR)/src_mpc-sticker.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/sticker.c' object='src_mpc-sticker.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-idle.obj: src/idle.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-idle.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-idle.Tpo -c -o src/src_mpc-idle.obj `if test -f 'src/idle.c'; then $(CYGPATH_W) 'src/idle.c'; else $(CYGPATH_W) '$(srcdir)/src/idle.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-idle.Tpo src/$(DEPDIR)/src_mpc-idle.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/idle.c' object='src/src_mpc-idle.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-sticker.obj `if test -f 'src/sticker.c'; then $(CYGPATH_W) 'src/sticker.c'; else $(CYGPATH_W) '$(srcdir)/src/sticker.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-idle.obj `if test -f 'src/idle.c'; then $(CYGPATH_W) 'src/idle.c'; else $(CYGPATH_W) '$(srcdir)/src/idle.c'; fi`
 
-src_mpc-tab.o: src/tab.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-tab.o -MD -MP -MF $(DEPDIR)/src_mpc-tab.Tpo -c -o src_mpc-tab.o `test -f 'src/tab.c' || echo '$(srcdir)/'`src/tab.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-tab.Tpo $(DEPDIR)/src_mpc-tab.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tab.c' object='src_mpc-tab.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-message.o: src/message.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-message.o -MD -MP -MF src/$(DEPDIR)/src_mpc-message.Tpo -c -o src/src_mpc-message.o `test -f 'src/message.c' || echo '$(srcdir)/'`src/message.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-message.Tpo src/$(DEPDIR)/src_mpc-message.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/message.c' object='src/src_mpc-message.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-tab.o `test -f 'src/tab.c' || echo '$(srcdir)/'`src/tab.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-message.o `test -f 'src/message.c' || echo '$(srcdir)/'`src/message.c
 
-src_mpc-tab.obj: src/tab.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-tab.obj -MD -MP -MF $(DEPDIR)/src_mpc-tab.Tpo -c -o src_mpc-tab.obj `if test -f 'src/tab.c'; then $(CYGPATH_W) 'src/tab.c'; else $(CYGPATH_W) '$(srcdir)/src/tab.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-tab.Tpo $(DEPDIR)/src_mpc-tab.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tab.c' object='src_mpc-tab.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-message.obj: src/message.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-message.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-message.Tpo -c -o src/src_mpc-message.obj `if test -f 'src/message.c'; then $(CYGPATH_W) 'src/message.c'; else $(CYGPATH_W) '$(srcdir)/src/message.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-message.Tpo src/$(DEPDIR)/src_mpc-message.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/message.c' object='src/src_mpc-message.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-tab.obj `if test -f 'src/tab.c'; then $(CYGPATH_W) 'src/tab.c'; else $(CYGPATH_W) '$(srcdir)/src/tab.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-message.obj `if test -f 'src/message.c'; then $(CYGPATH_W) 'src/message.c'; else $(CYGPATH_W) '$(srcdir)/src/message.c'; fi`
 
-src_mpc-idle.o: src/idle.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-idle.o -MD -MP -MF $(DEPDIR)/src_mpc-idle.Tpo -c -o src_mpc-idle.o `test -f 'src/idle.c' || echo '$(srcdir)/'`src/idle.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-idle.Tpo $(DEPDIR)/src_mpc-idle.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/idle.c' object='src_mpc-idle.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-search.o: src/search.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-search.o -MD -MP -MF src/$(DEPDIR)/src_mpc-search.Tpo -c -o src/src_mpc-search.o `test -f 'src/search.c' || echo '$(srcdir)/'`src/search.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-search.Tpo src/$(DEPDIR)/src_mpc-search.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/search.c' object='src/src_mpc-search.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-idle.o `test -f 'src/idle.c' || echo '$(srcdir)/'`src/idle.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-search.o `test -f 'src/search.c' || echo '$(srcdir)/'`src/search.c
 
-src_mpc-idle.obj: src/idle.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-idle.obj -MD -MP -MF $(DEPDIR)/src_mpc-idle.Tpo -c -o src_mpc-idle.obj `if test -f 'src/idle.c'; then $(CYGPATH_W) 'src/idle.c'; else $(CYGPATH_W) '$(srcdir)/src/idle.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-idle.Tpo $(DEPDIR)/src_mpc-idle.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/idle.c' object='src_mpc-idle.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-search.obj: src/search.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-search.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-search.Tpo -c -o src/src_mpc-search.obj `if test -f 'src/search.c'; then $(CYGPATH_W) 'src/search.c'; else $(CYGPATH_W) '$(srcdir)/src/search.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-search.Tpo src/$(DEPDIR)/src_mpc-search.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/search.c' object='src/src_mpc-search.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-idle.obj `if test -f 'src/idle.c'; then $(CYGPATH_W) 'src/idle.c'; else $(CYGPATH_W) '$(srcdir)/src/idle.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-search.obj `if test -f 'src/search.c'; then $(CYGPATH_W) 'src/search.c'; else $(CYGPATH_W) '$(srcdir)/src/search.c'; fi`
 
-src_mpc-message.o: src/message.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-message.o -MD -MP -MF $(DEPDIR)/src_mpc-message.Tpo -c -o src_mpc-message.o `test -f 'src/message.c' || echo '$(srcdir)/'`src/message.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-message.Tpo $(DEPDIR)/src_mpc-message.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/message.c' object='src_mpc-message.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-options.o: src/options.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-options.o -MD -MP -MF src/$(DEPDIR)/src_mpc-options.Tpo -c -o src/src_mpc-options.o `test -f 'src/options.c' || echo '$(srcdir)/'`src/options.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-options.Tpo src/$(DEPDIR)/src_mpc-options.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/options.c' object='src/src_mpc-options.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-message.o `test -f 'src/message.c' || echo '$(srcdir)/'`src/message.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-options.o `test -f 'src/options.c' || echo '$(srcdir)/'`src/options.c
 
-src_mpc-message.obj: src/message.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-message.obj -MD -MP -MF $(DEPDIR)/src_mpc-message.Tpo -c -o src_mpc-message.obj `if test -f 'src/message.c'; then $(CYGPATH_W) 'src/message.c'; else $(CYGPATH_W) '$(srcdir)/src/message.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-message.Tpo $(DEPDIR)/src_mpc-message.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/message.c' object='src_mpc-message.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-options.obj: src/options.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-options.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-options.Tpo -c -o src/src_mpc-options.obj `if test -f 'src/options.c'; then $(CYGPATH_W) 'src/options.c'; else $(CYGPATH_W) '$(srcdir)/src/options.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-options.Tpo src/$(DEPDIR)/src_mpc-options.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/options.c' object='src/src_mpc-options.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-message.obj `if test -f 'src/message.c'; then $(CYGPATH_W) 'src/message.c'; else $(CYGPATH_W) '$(srcdir)/src/message.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-options.obj `if test -f 'src/options.c'; then $(CYGPATH_W) 'src/options.c'; else $(CYGPATH_W) '$(srcdir)/src/options.c'; fi`
 
-src_mpc-search.o: src/search.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-search.o -MD -MP -MF $(DEPDIR)/src_mpc-search.Tpo -c -o src_mpc-search.o `test -f 'src/search.c' || echo '$(srcdir)/'`src/search.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-search.Tpo $(DEPDIR)/src_mpc-search.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/search.c' object='src_mpc-search.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-path.o: src/path.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-path.o -MD -MP -MF src/$(DEPDIR)/src_mpc-path.Tpo -c -o src/src_mpc-path.o `test -f 'src/path.c' || echo '$(srcdir)/'`src/path.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-path.Tpo src/$(DEPDIR)/src_mpc-path.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/path.c' object='src/src_mpc-path.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-search.o `test -f 'src/search.c' || echo '$(srcdir)/'`src/search.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-path.o `test -f 'src/path.c' || echo '$(srcdir)/'`src/path.c
 
-src_mpc-search.obj: src/search.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-search.obj -MD -MP -MF $(DEPDIR)/src_mpc-search.Tpo -c -o src_mpc-search.obj `if test -f 'src/search.c'; then $(CYGPATH_W) 'src/search.c'; else $(CYGPATH_W) '$(srcdir)/src/search.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-search.Tpo $(DEPDIR)/src_mpc-search.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/search.c' object='src_mpc-search.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-path.obj: src/path.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-path.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-path.Tpo -c -o src/src_mpc-path.obj `if test -f 'src/path.c'; then $(CYGPATH_W) 'src/path.c'; else $(CYGPATH_W) '$(srcdir)/src/path.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-path.Tpo src/$(DEPDIR)/src_mpc-path.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/path.c' object='src/src_mpc-path.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-search.obj `if test -f 'src/search.c'; then $(CYGPATH_W) 'src/search.c'; else $(CYGPATH_W) '$(srcdir)/src/search.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-path.obj `if test -f 'src/path.c'; then $(CYGPATH_W) 'src/path.c'; else $(CYGPATH_W) '$(srcdir)/src/path.c'; fi`
 
-src_mpc-options.o: src/options.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-options.o -MD -MP -MF $(DEPDIR)/src_mpc-options.Tpo -c -o src_mpc-options.o `test -f 'src/options.c' || echo '$(srcdir)/'`src/options.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-options.Tpo $(DEPDIR)/src_mpc-options.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/options.c' object='src_mpc-options.o' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-charset.o: src/charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-charset.o -MD -MP -MF src/$(DEPDIR)/src_mpc-charset.Tpo -c -o src/src_mpc-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-charset.Tpo src/$(DEPDIR)/src_mpc-charset.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/charset.c' object='src/src_mpc-charset.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-options.o `test -f 'src/options.c' || echo '$(srcdir)/'`src/options.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c
 
-src_mpc-options.obj: src/options.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-options.obj -MD -MP -MF $(DEPDIR)/src_mpc-options.Tpo -c -o src_mpc-options.obj `if test -f 'src/options.c'; then $(CYGPATH_W) 'src/options.c'; else $(CYGPATH_W) '$(srcdir)/src/options.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-options.Tpo $(DEPDIR)/src_mpc-options.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/options.c' object='src_mpc-options.obj' libtool=no @AMDEPBACKSLASH@
+src/src_mpc-charset.obj: src/charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_mpc-charset.obj -MD -MP -MF src/$(DEPDIR)/src_mpc-charset.Tpo -c -o src/src_mpc-charset.obj `if test -f 'src/charset.c'; then $(CYGPATH_W) 'src/charset.c'; else $(CYGPATH_W) '$(srcdir)/src/charset.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/src_mpc-charset.Tpo src/$(DEPDIR)/src_mpc-charset.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/charset.c' object='src/src_mpc-charset.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-options.obj `if test -f 'src/options.c'; then $(CYGPATH_W) 'src/options.c'; else $(CYGPATH_W) '$(srcdir)/src/options.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_mpc-charset.obj `if test -f 'src/charset.c'; then $(CYGPATH_W) 'src/charset.c'; else $(CYGPATH_W) '$(srcdir)/src/charset.c'; fi`
 
-src_mpc-path.o: src/path.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-path.o -MD -MP -MF $(DEPDIR)/src_mpc-path.Tpo -c -o src_mpc-path.o `test -f 'src/path.c' || echo '$(srcdir)/'`src/path.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-path.Tpo $(DEPDIR)/src_mpc-path.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/path.c' object='src_mpc-path.o' libtool=no @AMDEPBACKSLASH@
+src/test_test_format-format.o: src/format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -MT src/test_test_format-format.o -MD -MP -MF src/$(DEPDIR)/test_test_format-format.Tpo -c -o src/test_test_format-format.o `test -f 'src/format.c' || echo '$(srcdir)/'`src/format.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/test_test_format-format.Tpo src/$(DEPDIR)/test_test_format-format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/format.c' object='src/test_test_format-format.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-path.o `test -f 'src/path.c' || echo '$(srcdir)/'`src/path.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -c -o src/test_test_format-format.o `test -f 'src/format.c' || echo '$(srcdir)/'`src/format.c
 
-src_mpc-path.obj: src/path.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-path.obj -MD -MP -MF $(DEPDIR)/src_mpc-path.Tpo -c -o src_mpc-path.obj `if test -f 'src/path.c'; then $(CYGPATH_W) 'src/path.c'; else $(CYGPATH_W) '$(srcdir)/src/path.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-path.Tpo $(DEPDIR)/src_mpc-path.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/path.c' object='src_mpc-path.obj' libtool=no @AMDEPBACKSLASH@
+src/test_test_format-format.obj: src/format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -MT src/test_test_format-format.obj -MD -MP -MF src/$(DEPDIR)/test_test_format-format.Tpo -c -o src/test_test_format-format.obj `if test -f 'src/format.c'; then $(CYGPATH_W) 'src/format.c'; else $(CYGPATH_W) '$(srcdir)/src/format.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/test_test_format-format.Tpo src/$(DEPDIR)/test_test_format-format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/format.c' object='src/test_test_format-format.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-path.obj `if test -f 'src/path.c'; then $(CYGPATH_W) 'src/path.c'; else $(CYGPATH_W) '$(srcdir)/src/path.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -c -o src/test_test_format-format.obj `if test -f 'src/format.c'; then $(CYGPATH_W) 'src/format.c'; else $(CYGPATH_W) '$(srcdir)/src/format.c'; fi`
 
-src_mpc-charset.o: src/charset.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-charset.o -MD -MP -MF $(DEPDIR)/src_mpc-charset.Tpo -c -o src_mpc-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-charset.Tpo $(DEPDIR)/src_mpc-charset.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/charset.c' object='src_mpc-charset.o' libtool=no @AMDEPBACKSLASH@
+src/test_test_format-song_format.o: src/song_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -MT src/test_test_format-song_format.o -MD -MP -MF src/$(DEPDIR)/test_test_format-song_format.Tpo -c -o src/test_test_format-song_format.o `test -f 'src/song_format.c' || echo '$(srcdir)/'`src/song_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/test_test_format-song_format.Tpo src/$(DEPDIR)/test_test_format-song_format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/song_format.c' object='src/test_test_format-song_format.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -c -o src/test_test_format-song_format.o `test -f 'src/song_format.c' || echo '$(srcdir)/'`src/song_format.c
 
-src_mpc-charset.obj: src/charset.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src_mpc-charset.obj -MD -MP -MF $(DEPDIR)/src_mpc-charset.Tpo -c -o src_mpc-charset.obj `if test -f 'src/charset.c'; then $(CYGPATH_W) 'src/charset.c'; else $(CYGPATH_W) '$(srcdir)/src/charset.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/src_mpc-charset.Tpo $(DEPDIR)/src_mpc-charset.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/charset.c' object='src_mpc-charset.obj' libtool=no @AMDEPBACKSLASH@
+src/test_test_format-song_format.obj: src/song_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -MT src/test_test_format-song_format.obj -MD -MP -MF src/$(DEPDIR)/test_test_format-song_format.Tpo -c -o src/test_test_format-song_format.obj `if test -f 'src/song_format.c'; then $(CYGPATH_W) 'src/song_format.c'; else $(CYGPATH_W) '$(srcdir)/src/song_format.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/test_test_format-song_format.Tpo src/$(DEPDIR)/test_test_format-song_format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/song_format.c' object='src/test_test_format-song_format.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_mpc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src_mpc-charset.obj `if test -f 'src/charset.c'; then $(CYGPATH_W) 'src/charset.c'; else $(CYGPATH_W) '$(srcdir)/src/charset.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -c -o src/test_test_format-song_format.obj `if test -f 'src/song_format.c'; then $(CYGPATH_W) 'src/song_format.c'; else $(CYGPATH_W) '$(srcdir)/src/song_format.c'; fi`
+
+test/test_test_format-test_format.o: test/test_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -MT test/test_test_format-test_format.o -MD -MP -MF test/$(DEPDIR)/test_test_format-test_format.Tpo -c -o test/test_test_format-test_format.o `test -f 'test/test_format.c' || echo '$(srcdir)/'`test/test_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) test/$(DEPDIR)/test_test_format-test_format.Tpo test/$(DEPDIR)/test_test_format-test_format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test/test_format.c' object='test/test_test_format-test_format.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -c -o test/test_test_format-test_format.o `test -f 'test/test_format.c' || echo '$(srcdir)/'`test/test_format.c
+
+test/test_test_format-test_format.obj: test/test_format.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -MT test/test_test_format-test_format.obj -MD -MP -MF test/$(DEPDIR)/test_test_format-test_format.Tpo -c -o test/test_test_format-test_format.obj `if test -f 'test/test_format.c'; then $(CYGPATH_W) 'test/test_format.c'; else $(CYGPATH_W) '$(srcdir)/test/test_format.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) test/$(DEPDIR)/test_test_format-test_format.Tpo test/$(DEPDIR)/test_test_format-test_format.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test/test_format.c' object='test/test_test_format-test_format.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -c -o test/test_test_format-test_format.obj `if test -f 'test/test_format.c'; then $(CYGPATH_W) 'test/test_format.c'; else $(CYGPATH_W) '$(srcdir)/test/test_format.c'; fi`
+
+src/test_test_format-charset.o: src/charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -MT src/test_test_format-charset.o -MD -MP -MF src/$(DEPDIR)/test_test_format-charset.Tpo -c -o src/test_test_format-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/test_test_format-charset.Tpo src/$(DEPDIR)/test_test_format-charset.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/charset.c' object='src/test_test_format-charset.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -c -o src/test_test_format-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c
+
+src/test_test_format-charset.obj: src/charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -MT src/test_test_format-charset.obj -MD -MP -MF src/$(DEPDIR)/test_test_format-charset.Tpo -c -o src/test_test_format-charset.obj `if test -f 'src/charset.c'; then $(CYGPATH_W) 'src/charset.c'; else $(CYGPATH_W) '$(srcdir)/src/charset.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/test_test_format-charset.Tpo src/$(DEPDIR)/test_test_format-charset.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/charset.c' object='src/test_test_format-charset.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_test_format_CPPFLAGS) $(CPPFLAGS) $(test_test_format_CFLAGS) $(CFLAGS) -c -o src/test_test_format-charset.obj `if test -f 'src/charset.c'; then $(CYGPATH_W) 'src/charset.c'; else $(CYGPATH_W) '$(srcdir)/src/charset.c'; fi`
 install-man1: $(man_MANS)
 	@$(NORMAL_INSTALL)
 	@list1=''; \
@@ -843,6 +1209,169 @@ distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	else \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+test/test_format.log: test/test_format$(EXEEXT)
+	@p='test/test_format$(EXEEXT)'; \
+	b='test/test_format'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
 distdir: $(DISTFILES)
 	$(am__remove_distdir)
 	test -d "$(distdir)" || mkdir "$(distdir)"
@@ -1006,6 +1535,8 @@ distcleancheck: distclean
 	       $(distcleancheck_listfiles) ; \
 	       exit 1; } >&2
 check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-am
 all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) config.h
 installdirs:
@@ -1032,24 +1563,31 @@ install-strip:
 	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
 	fi
 mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
 clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f src/$(DEPDIR)/$(am__dirstamp)
 	-rm -f src/$(am__dirstamp)
+	-rm -f test/$(DEPDIR)/$(am__dirstamp)
+	-rm -f test/$(am__dirstamp)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
+	mostlyclean-am
 
 distclean: distclean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf ./$(DEPDIR)
+	-rm -rf src/$(DEPDIR) test/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-hdr distclean-tags
@@ -1097,7 +1635,7 @@ installcheck-am:
 maintainer-clean: maintainer-clean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -rf ./$(DEPDIR)
+	-rm -rf src/$(DEPDIR) test/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -1117,25 +1655,26 @@ uninstall-am: uninstall-binPROGRAMS uninstall-docDATA uninstall-man
 
 uninstall-man: uninstall-man1
 
-.MAKE: all install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
-	clean-binPROGRAMS clean-cscope clean-generic cscope \
-	cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
-	dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
-	distcheck distclean distclean-compile distclean-generic \
-	distclean-hdr distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-binPROGRAMS install-data \
-	install-data-am install-docDATA install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am 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 pdf pdf-am ps ps-am \
-	tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
-	uninstall-docDATA uninstall-man uninstall-man1
+.MAKE: all check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \
+	check-am clean clean-binPROGRAMS clean-checkPROGRAMS \
+	clean-cscope clean-generic cscope cscopelist-am ctags ctags-am \
+	dist dist-all dist-bzip2 dist-gzip dist-lzip dist-shar \
+	dist-tarZ dist-xz dist-zip distcheck distclean \
+	distclean-compile distclean-generic distclean-hdr \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am \
+	install-docDATA install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am 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 pdf pdf-am ps ps-am recheck tags tags-am \
+	uninstall uninstall-am uninstall-binPROGRAMS uninstall-docDATA \
+	uninstall-man uninstall-man1
 
 sparse-check:
 	for i in $(src_mpc_SOURCES); \
diff --git a/NEWS b/NEWS
index 9e94ccd..20fbb08 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,16 @@
+0.27 (2015/05/30)
+* fix --enable-debug and --enable-werror
+* add unit tests
+* new command: "searchplay" searches and plays songs from the current playlist
+* fix use-after-free bug
+* new command: "searchadd" works like findadd with non-exact matching
+* improved error handling
+* show directories in command "tab"
+* bash completion: escape '&'
+* add %mtime% and %mdate% to --format
+* recognize command by unambiguous prefix
+* "insert" queues new songs when "random" mode is enabled
+
 0.26 (2014/06/03)
 * fix segfault when adding absolute paths
 * "playlist" can show stored playlist
diff --git a/aclocal.m4 b/aclocal.m4
index 223b20f..e3d5ef9 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -318,10 +318,9 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 # configured tree to be moved without reconfiguration.
 
 AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 ])
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
@@ -1368,4 +1367,5 @@ m4_include([m4/ax_append_flag.m4])
 m4_include([m4/ax_append_link_flags.m4])
 m4_include([m4/ax_check_compile_flag.m4])
 m4_include([m4/ax_check_link_flag.m4])
+m4_include([m4/check.m4])
 m4_include([m4/codeset.m4])
diff --git a/configure b/configure
index ff0b90d..c12b2c2 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for mpc 0.26.
+# Generated by GNU Autoconf 2.69 for mpc 0.27.
 #
 # Report bugs to <musicpd-dev-team at lists.sourceforge.net>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='mpc'
 PACKAGE_TARNAME='mpc'
-PACKAGE_VERSION='0.26'
-PACKAGE_STRING='mpc 0.26'
+PACKAGE_VERSION='0.27'
+PACKAGE_STRING='mpc 0.27'
 PACKAGE_BUGREPORT='musicpd-dev-team at lists.sourceforge.net'
 PACKAGE_URL=''
 
@@ -626,6 +626,10 @@ ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
+ENABLE_TEST_FALSE
+ENABLE_TEST_TRUE
+CHECK_LIBS
+CHECK_CFLAGS
 HAVE_ICONV_FALSE
 HAVE_ICONV_TRUE
 ICONV_LIBS
@@ -730,6 +734,8 @@ enable_dependency_tracking
 enable_iconv
 enable_werror
 enable_debug
+enable_test
+with_check
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1285,7 +1291,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures mpc 0.26 to adapt to many kinds of systems.
+\`configure' configures mpc 0.27 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1351,7 +1357,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of mpc 0.26:";;
+     short | recursive ) echo "Configuration of mpc 0.27:";;
    esac
   cat <<\_ACEOF
 
@@ -1368,6 +1374,12 @@ Optional Features:
   --disable-iconv         disable iconv support (default: enable)
   --enable-werror         Treat warnings as errors [default=disabled]
   --enable-debug          Enable debugging [default=disabled]
+  --enable-test           build the test programs (default: disabled)
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-check=PATH       prefix where check is installed default=auto
 
 Some influential environment variables:
   CC          C compiler command
@@ -1454,7 +1466,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-mpc configure 0.26
+mpc configure 0.27
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1823,7 +1835,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by mpc $as_me 0.26, which was
+It was created by mpc $as_me 0.27, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2374,8 +2386,8 @@ test "$program_suffix" != NONE &&
 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
 program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 if test x"${MISSING+set}" != xset; then
   case $am_aux_dir in
@@ -2688,7 +2700,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='mpc'
- VERSION='0.26'
+ VERSION='0.27'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2781,6 +2793,45 @@ END
   fi
 fi
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
 ac_config_headers="$ac_config_headers config.h"
 
 
@@ -5371,7 +5422,9 @@ done
 
 # Check whether --enable-werror was given.
 if test "${enable_werror+set}" = set; then :
-  enableval=$enable_werror; enable_werror=no
+  enableval=$enable_werror;
+else
+  enable_werror=no
 fi
 
 
@@ -5381,7 +5434,9 @@ fi
 
 # Check whether --enable-debug was given.
 if test "${enable_debug+set}" = set; then :
-  enableval=$enable_debug; enable_debug=no
+  enableval=$enable_debug;
+else
+  enable_debug=no
 fi
 
 
@@ -5636,6 +5691,188 @@ done
 
 fi
 
+# Check whether --enable-test was given.
+if test "${enable_test+set}" = set; then :
+  enableval=$enable_test;
+else
+  enable_test=no
+fi
+
+
+if test "x$enable_test" = xyes; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: AM_PATH_CHECK() is deprecated" >&5
+$as_echo "$as_me: WARNING: AM_PATH_CHECK() is deprecated" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: use PKG_CHECK_MODULES([CHECK], [check >= 0.9.4]) instead" >&5
+$as_echo "$as_me: WARNING: use PKG_CHECK_MODULES([CHECK], [check >= 0.9.4]) instead" >&2;}
+
+# Check whether --with-check was given.
+if test "${with_check+set}" = set; then :
+  withval=$with_check;
+fi
+
+
+  min_check_version=0.8.2
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for check - version >= $min_check_version" >&5
+$as_echo_n "checking for check - version >= $min_check_version... " >&6; }
+
+  if test x$with_check = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
+$as_echo "disabled" >&6; }
+    as_fn_error $? "check not found" "$LINENO" 5
+  else
+    if test "x$with_check" != x; then
+      CHECK_CFLAGS="-I$with_check/include"
+      CHECK_LIBS="-L$with_check/lib -lcheck"
+    else
+      CHECK_CFLAGS=""
+      CHECK_LIBS="-lcheck"
+    fi
+
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+
+    CFLAGS="$CFLAGS $CHECK_CFLAGS"
+    LIBS="$CHECK_LIBS $LIBS"
+
+    rm -f conf.check-test
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+#include <check.h>
+
+int main ()
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  system ("touch conf.check-test");
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = strdup("$min_check_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_check_version");
+     return 1;
+   }
+
+  if ((CHECK_MAJOR_VERSION != check_major_version) ||
+      (CHECK_MINOR_VERSION != check_minor_version) ||
+      (CHECK_MICRO_VERSION != check_micro_version))
+    {
+      printf("\n*** The check header file (version %d.%d.%d) does not match\n",
+	     CHECK_MAJOR_VERSION, CHECK_MINOR_VERSION, CHECK_MICRO_VERSION);
+      printf("*** the check library (version %d.%d.%d).\n",
+	     check_major_version, check_minor_version, check_micro_version);
+      return 1;
+    }
+
+  if ((check_major_version > major) ||
+      ((check_major_version == major) && (check_minor_version > minor)) ||
+      ((check_major_version == major) && (check_minor_version == minor) && (check_micro_version >= micro)))
+    {
+      return 0;
+    }
+  else
+    {
+      printf("\n*** An old version of check (%d.%d.%d) was found.\n",
+             check_major_version, check_minor_version, check_micro_version);
+      printf("*** You need a version of check being at least %d.%d.%d.\n", major, minor, micro);
+      printf("***\n");
+      printf("*** If you have already installed a sufficiently new version, this error\n");
+      printf("*** probably means that the wrong copy of the check library and header\n");
+      printf("*** file is being found. Rerun configure with the --with-check=PATH option\n");
+      printf("*** to specify the prefix where the correct version was installed.\n");
+    }
+
+  return 1;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  no_check=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+    CFLAGS="$ac_save_CFLAGS"
+    LIBS="$ac_save_LIBS"
+
+    if test "x$no_check" = x ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      :
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      if test -f conf.check-test ; then
+        :
+      else
+        echo "*** Could not run check test program, checking why..."
+        CFLAGS="$CFLAGS $CHECK_CFLAGS"
+        LIBS="$CHECK_LIBS $LIBS"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <check.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+   echo "*** The test program compiled, but did not run. This usually means"
+        echo "*** that the run-time linker is not finding check. You'll need to set your"
+        echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+        echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+        echo "*** is required on your system"
+	echo "***"
+        echo "*** If you have an old version installed, it is best to remove it, although"
+        echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+else
+   echo "*** The test program failed to compile or link. See the file config.log for"
+        echo "*** the exact error that occured."
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+        CFLAGS="$ac_save_CFLAGS"
+        LIBS="$ac_save_LIBS"
+      fi
+
+      CHECK_CFLAGS=""
+      CHECK_LIBS=""
+
+      rm -f conf.check-test
+      as_fn_error $? "check not found" "$LINENO" 5
+    fi
+
+
+
+
+    rm -f conf.check-test
+
+  fi
+
+fi
+
+ if test "x$enable_test" = xyes; then
+  ENABLE_TEST_TRUE=
+  ENABLE_TEST_FALSE='#'
+else
+  ENABLE_TEST_TRUE='#'
+  ENABLE_TEST_FALSE=
+fi
+
+
 
 
 ac_config_files="$ac_config_files Makefile"
@@ -5777,6 +6014,10 @@ if test -z "${HAVE_ICONV_TRUE}" && test -z "${HAVE_ICONV_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_ICONV\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${ENABLE_TEST_TRUE}" && test -z "${ENABLE_TEST_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_TEST\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -6174,7 +6415,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by mpc $as_me 0.26, which was
+This file was extended by mpc $as_me 0.27, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6240,7 +6481,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-mpc config.status 0.26
+mpc config.status 0.27
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index c56ad40..28a9c5e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,8 +1,9 @@
 AC_PREREQ(2.60)
-AC_INIT(mpc, 0.26, musicpd-dev-team at lists.sourceforge.net)
+AC_INIT(mpc, 0.27, musicpd-dev-team at lists.sourceforge.net)
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_SRCDIR(src/main.c)
-AM_INIT_AUTOMAKE([foreign 1.11 dist-xz silent-rules])
+AM_INIT_AUTOMAKE([foreign 1.11 dist-xz subdir-objects])
+AM_SILENT_RULES
 AC_CONFIG_HEADERS(config.h)
 
 
@@ -145,7 +146,7 @@ dnl
 
 AC_ARG_ENABLE(werror,
 	AS_HELP_STRING([--enable-werror],
-		[Treat warnings as errors @<:@default=disabled@:>@]),
+		[Treat warnings as errors @<:@default=disabled@:>@]),,
 	enable_werror=no)
 
 if test "x$enable_werror" = xyes; then
@@ -154,7 +155,7 @@ fi
 
 AC_ARG_ENABLE(debug,
 	AS_HELP_STRING([--enable-debug],
-		[Enable debugging @<:@default=disabled@:>@]),
+		[Enable debugging @<:@default=disabled@:>@]),,
 	enable_debug=no)
 
 if test "x$enable_debug" = xno; then
@@ -167,6 +168,17 @@ if test "x$enable_debug" = xno; then
 	AX_APPEND_LINK_FLAGS([-Wl,--gc-sections])
 fi
 
+AC_ARG_ENABLE(test,
+	AS_HELP_STRING([--enable-test],
+		[build the test programs (default: disabled)]),,
+	enable_test=no)
+
+if test "x$enable_test" = xyes; then
+	AM_PATH_CHECK(,, [AC_MSG_ERROR([check not found])])
+fi
+
+AM_CONDITIONAL(ENABLE_TEST, test "x$enable_test" = xyes)
+
 
 dnl
 
diff --git a/doc/mpc-completion.bash b/doc/mpc-completion.bash
index e252693..6d0bb1e 100644
--- a/doc/mpc-completion.bash
+++ b/doc/mpc-completion.bash
@@ -7,7 +7,7 @@
 # Something like this should (but doesn't) also work:
 # while read -r line; do printf "%q\n" "$line"; done
 __escape_strings_stdin () {
-	sed "s/\([><()\";\`' ]\)/\\\\\\1/g"
+	sed "s/\([&><()\";\`' ]\)/\\\\\\1/g"
 }
 
 # Read everything past the command as a single word
diff --git a/doc/mpc.1 b/doc/mpc.1
index 4d8cdfb..e0b9078 100644
--- a/doc/mpc.1
+++ b/doc/mpc.1
@@ -47,6 +47,10 @@ Configure the format of song display for status and the playlist.  The metadata
 .br
 %position%     Playlist track number
 .br
+%mtime%        Date and time of last file modification
+.br
+%mdate%        Date of last file modification
+.br
 
 The [] operator is used to group output such that if no metadata delimiters are found or matched between '[' and ']', then none of the characters between '[' and ']' are output.  '&' and '|' are logical operators for and and or.  '#' is used to escape characters.  Some useful examples for format are: "%file%" and "[[%artist% - ]%title%]|[%file%]".
 This command also takes the following defined escape sequences:
@@ -96,6 +100,7 @@ If you specify an absolute path, mpc attempts a connection via Unix Domain Socke
 The port to connect to; if not given, the value of the environment variable MPD_PORT is checked before defaulting to 6600.  This default can be changed at compile-time.
 .br
 .SH COMMANDS
+Commands can be used from the least unambiguous prefix (e.g insert or ins)
 .TP
 .B add <file>
 Adds a song from the music database to the playlist. Can also read input from pipes. Use "mpc ls | mpc add" to add all files to the playlist.
@@ -104,6 +109,7 @@ Adds a song from the music database to the playlist. Can also read input from pi
 The insert command works similarly to
 .B add
 except it adds song(s) after the currently playing one, rather than at the end.
+When random mode is enabled, the new song is queued after the current song.
 .TP
 .B clear
 Empties playlist.
@@ -260,7 +266,7 @@ Send a message to the specified channel.
 .B waitmessage <channel>
 Wait for at least one message on the specified channel.
 .TP
-.B subscribe <channel>>
+.B subscribe <channel>
 Subscribe to the specified channel and continuously receive messages.
 .SH "ENVIRONMENT VARIABLES"
 All environment variables are overridden by any values specified via command line switches.
diff --git a/m4/check.m4 b/m4/check.m4
new file mode 100644
index 0000000..9515ae0
--- /dev/null
+++ b/m4/check.m4
@@ -0,0 +1,132 @@
+dnl AM_PATH_CHECK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for check, and define CHECK_CFLAGS and CHECK_LIBS
+dnl
+
+AC_DEFUN([AM_PATH_CHECK],
+[
+  AC_MSG_WARN([A@&t at M_PATH_CHECK() is deprecated])
+  AC_MSG_WARN([[use P@&t at KG_CHECK_MODULES([CHECK], [check >= 0.9.4]) instead]])
+  AC_ARG_WITH([check],
+  [  --with-check=PATH       prefix where check is installed [default=auto]])
+ 
+  min_check_version=ifelse([$1], ,0.8.2,$1)
+
+  AC_MSG_CHECKING(for check - version >= $min_check_version)
+
+  if test x$with_check = xno; then
+    AC_MSG_RESULT(disabled)
+    ifelse([$3], , AC_MSG_ERROR([disabling check is not supported]), [$3])
+  else
+    if test "x$with_check" != x; then
+      CHECK_CFLAGS="-I$with_check/include"
+      CHECK_LIBS="-L$with_check/lib -lcheck"
+    else
+      CHECK_CFLAGS=""
+      CHECK_LIBS="-lcheck"
+    fi
+
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+
+    CFLAGS="$CFLAGS $CHECK_CFLAGS"
+    LIBS="$CHECK_LIBS $LIBS"
+
+    rm -f conf.check-test
+    AC_COMPILE_IFELSE([AC_LANG_SOURCE([AC_INCLUDES_DEFAULT([])
+#include <check.h>
+
+int main ()
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  system ("touch conf.check-test");
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = strdup("$min_check_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_check_version");
+     return 1;
+   }
+    
+  if ((CHECK_MAJOR_VERSION != check_major_version) ||
+      (CHECK_MINOR_VERSION != check_minor_version) ||
+      (CHECK_MICRO_VERSION != check_micro_version))
+    {
+      printf("\n*** The check header file (version %d.%d.%d) does not match\n",
+	     CHECK_MAJOR_VERSION, CHECK_MINOR_VERSION, CHECK_MICRO_VERSION);
+      printf("*** the check library (version %d.%d.%d).\n",
+	     check_major_version, check_minor_version, check_micro_version);
+      return 1;
+    }
+
+  if ((check_major_version > major) ||
+      ((check_major_version == major) && (check_minor_version > minor)) ||
+      ((check_major_version == major) && (check_minor_version == minor) && (check_micro_version >= micro)))
+    {
+      return 0;
+    }
+  else
+    {
+      printf("\n*** An old version of check (%d.%d.%d) was found.\n",
+             check_major_version, check_minor_version, check_micro_version);
+      printf("*** You need a version of check being at least %d.%d.%d.\n", major, minor, micro);
+      printf("***\n"); 
+      printf("*** If you have already installed a sufficiently new version, this error\n");
+      printf("*** probably means that the wrong copy of the check library and header\n");
+      printf("*** file is being found. Rerun configure with the --with-check=PATH option\n");
+      printf("*** to specify the prefix where the correct version was installed.\n");
+    }
+
+  return 1;
+}
+])],, no_check=yes, [echo $ac_n "cross compiling; assumed OK... $ac_c"])
+
+    CFLAGS="$ac_save_CFLAGS"
+    LIBS="$ac_save_LIBS"
+
+    if test "x$no_check" = x ; then
+      AC_MSG_RESULT(yes)
+      ifelse([$2], , :, [$2])
+    else
+      AC_MSG_RESULT(no)
+      if test -f conf.check-test ; then
+        :
+      else
+        echo "*** Could not run check test program, checking why..."
+        CFLAGS="$CFLAGS $CHECK_CFLAGS"
+        LIBS="$CHECK_LIBS $LIBS"
+        AC_TRY_LINK([
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <check.h>
+], ,  [ echo "*** The test program compiled, but did not run. This usually means"
+        echo "*** that the run-time linker is not finding check. You'll need to set your"
+        echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+        echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+        echo "*** is required on your system"
+	echo "***"
+        echo "*** If you have an old version installed, it is best to remove it, although"
+        echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+      [ echo "*** The test program failed to compile or link. See the file config.log for"
+        echo "*** the exact error that occured." ])
+      
+        CFLAGS="$ac_save_CFLAGS"
+        LIBS="$ac_save_LIBS"
+      fi
+
+      CHECK_CFLAGS=""
+      CHECK_LIBS=""
+
+      rm -f conf.check-test
+      ifelse([$3], , AC_MSG_ERROR([check not found]), [$3])
+    fi
+
+    AC_SUBST(CHECK_CFLAGS)
+    AC_SUBST(CHECK_LIBS)
+
+    rm -f conf.check-test
+
+  fi
+])
diff --git a/src/Compiler.h b/src/Compiler.h
index 9756e1f..df2ac30 100644
--- a/src/Compiler.h
+++ b/src/Compiler.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -20,19 +20,49 @@
 #ifndef COMPILER_H
 #define COMPILER_H
 
-#define GCC_CHECK_VERSION(major, minor) \
-  (defined(__GNUC__) &&                                                 \
-   (__GNUC__ > (major) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))))
+#define GCC_MAKE_VERSION(major, minor, patchlevel) ((major) * 10000 + (minor) * 100 + patchlevel)
 
 #ifdef __GNUC__
-#define GCC_VERSION (__GNUC__ * 10000 \
-                     + __GNUC_MINOR__ * 100 \
-                     + __GNUC_PATCHLEVEL__)
+#define GCC_VERSION GCC_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
 #else
 #define GCC_VERSION 0
 #endif
 
-#if GCC_CHECK_VERSION(4,0)
+/**
+ * Are we building with the specified version of gcc (not clang or any
+ * other compiler) or newer?
+ */
+#define GCC_CHECK_VERSION(major, minor) \
+	(defined(__GNUC__) && !defined(__clang__) && \
+	 GCC_VERSION >= GCC_MAKE_VERSION(major, minor, 0))
+
+/**
+ * Are we building with clang (any version) or at least the specified
+ * gcc version?
+ */
+#define CLANG_OR_GCC_VERSION(major, minor) \
+	(defined(__clang__) || GCC_CHECK_VERSION(major, minor))
+
+/**
+ * Are we building with gcc (not clang or any other compiler) and a
+ * version older than the specified one?
+ */
+#define GCC_OLDER_THAN(major, minor) \
+	(defined(__GNUC__) && !defined(__clang__) && \
+	 GCC_VERSION < GCC_MAKE_VERSION(major, minor, 0))
+
+#ifdef __clang__
+#  define CLANG_VERSION GCC_MAKE_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
+#endif
+
+/**
+ * Are we building with the specified version of clang or newer?
+ */
+#define CLANG_CHECK_VERSION(major, minor) \
+	(defined(__clang__) && \
+	 CLANG_VERSION >= GCC_MAKE_VERSION(major, minor, 0))
+
+#if CLANG_OR_GCC_VERSION(4,0)
 
 /* GCC 4.x */
 
@@ -92,7 +122,7 @@
 
 #endif
 
-#if GCC_CHECK_VERSION(4,3)
+#if CLANG_OR_GCC_VERSION(4,3)
 
 #define gcc_hot __attribute__((hot))
 #define gcc_cold __attribute__((cold))
@@ -104,7 +134,7 @@
 
 #endif /* ! GCC_UNUSED >= 40300 */
 
-#if GCC_CHECK_VERSION(4,6) && !defined(__clang__)
+#if GCC_CHECK_VERSION(4,6)
 #define gcc_flatten __attribute__((flatten))
 #else
 #define gcc_flatten
@@ -113,7 +143,7 @@
 #ifndef __cplusplus
 /* plain C99 has "restrict" */
 #define gcc_restrict restrict
-#elif GCC_CHECK_VERSION(4,0)
+#elif CLANG_OR_GCC_VERSION(4,0)
 /* "__restrict__" is a GCC extension for C++ */
 #define gcc_restrict __restrict__
 #else
@@ -126,12 +156,12 @@
 #if defined(__cplusplus)
 
 /* support for C++11 "override" was added in gcc 4.7 */
-#if !defined(__clang__) && !GCC_CHECK_VERSION(4,7)
+#if GCC_OLDER_THAN(4,7)
 #define override
 #define final
 #endif
 
-#if defined(__clang__) || GCC_CHECK_VERSION(4,8)
+#if CLANG_OR_GCC_VERSION(4,8)
 #define gcc_alignas(T, fallback) alignas(T)
 #else
 #define gcc_alignas(T, fallback) gcc_aligned(fallback)
diff --git a/src/args.c b/src/args.c
index 0b6887d..41cd554 100644
--- a/src/args.c
+++ b/src/args.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -34,7 +34,7 @@
 int
 stdinToArgArray(char ***array)
 {
-	List *list = makeList(NULL);
+	List *list = makeList();
 	char buffer[4096];
 
 	while (fgets(buffer, sizeof(buffer), stdin)) {
@@ -172,7 +172,7 @@ parse_songnum(const char *str, int *ret)
 	char *endptr;
 	int song = strtol(str, &endptr, 10);
 
-	if (str == endptr || (*endptr != ')' && *endptr != '\0') || song < 0)
+	if (str == endptr || (*endptr != ')' && *endptr != '\0') || song < 1)
 		return false;
 
 	*ret = song;
diff --git a/src/args.h b/src/args.h
index 504fc36..608894d 100644
--- a/src/args.h
+++ b/src/args.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/charset.c b/src/charset.c
index 0bd8cf7..2e34e47 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/charset.h b/src/charset.h
index ddb3f17..2eca94b 100644
--- a/src/charset.h
+++ b/src/charset.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/command.c b/src/command.c
index 0af474c..53af95d 100644
--- a/src/command.c
+++ b/src/command.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -30,6 +30,7 @@
 
 #include <mpd/client.h>
 
+#include <assert.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -111,8 +112,7 @@ cmd_current(gcc_unused int argc, gcc_unused char **argv,
 			mpd_song_free(song);
 		}
 
-		if (!mpd_response_finish(conn))
-			printErrorAndExit(conn);
+		my_finishCommand(conn);
 	}
 
 	mpd_status_free(status);
@@ -139,7 +139,8 @@ cmd_cdprev(gcc_unused int argc, gcc_unused char **argv,
 }
 
 int
-cmd_toggle(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *conn)
+cmd_toggle(gcc_unused int argc, gcc_unused char **argv,
+	   struct mpd_connection *conn)
 {
 	struct mpd_status *status = getStatus(conn);
 
@@ -152,7 +153,8 @@ cmd_toggle(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *c
 }
 
 int
-cmd_outputs(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *conn)
+cmd_outputs(gcc_unused int argc, gcc_unused char **argv,
+	    struct mpd_connection *conn)
 {
 	mpd_send_outputs(conn);
 
@@ -170,8 +172,9 @@ cmd_outputs(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *
 
 		mpd_output_free(output);
 	}
-	mpd_response_finish(conn);
-	return( 0 );
+
+	my_finishCommand(conn);
+	return 0;
 }
 
 static unsigned
@@ -200,7 +203,7 @@ match_outputs(struct mpd_connection *conn,
 		mpd_output_free(output);
 	}
 
-	mpd_response_finish(conn);
+	my_finishCommand(conn);
 
 	for (char **n = names; n != names_end; ++n) {
 		fprintf(stderr, "%s: no such output\n", *n);
@@ -307,46 +310,77 @@ cmd_toggle_output(int argc, char **argv, struct mpd_connection *conn)
 
 #endif
 
-int cmd_play ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_play(int argc, char **argv, struct mpd_connection *conn)
 {
-	int song;
+	assert(argc < 2);
 
-	if(0==argc) song = -1;
-	else {
-		for (int i = 0; i < argc - 1; ++i)
-			printf("skipping: %s\n",argv[i]);
-
-		if (!parse_songnum(argv[argc - 1], &song))
-			DIE("error parsing song numbers from: %s\n",
-			    argv[argc - 1]);
+	bool success;
+	if (argc > 0) {
+		const char *string = argv[0];
+		int song;
+		if (!parse_songnum(string, &song))
+			DIE("error parsing song numbers from: %s\n", string);
 
 		song--;
 
-		/* This is necessary, otherwise mpc will output the wrong playlist number */
-		struct mpd_status *status = getStatus(conn);
-		int i = mpd_status_get_queue_length(status);
-		mpd_status_free(status);
-		if(song >= i)
-			DIE("song number greater than playlist length.\n");
+		success = mpd_run_play_pos(conn, song);
+	} else
+		success = mpd_run_play(conn);
+
+	if (!success)
+		printErrorAndExit(conn);
+
+	return 1;
+}
+
+static int
+find_songname_id(struct mpd_connection *conn, const char *s)
+{
+	int res = -1;
+
+	mpd_search_queue_songs(conn, false);
+
+	const char *pattern = charset_to_utf8(s);
+	mpd_search_add_any_tag_constraint(conn, MPD_OPERATOR_DEFAULT,
+					       pattern);
+	mpd_search_commit(conn);
+
+	struct mpd_song *song = mpd_recv_song(conn);
+	if (song != NULL) {
+		res = mpd_song_get_id(song);
+
+		mpd_song_free(song);
 	}
 
-	if (song >= 0)
-		mpd_run_play_pos(conn, song);
-	else
-		mpd_run_play(conn);
+	my_finishCommand(conn);
+
+	return res;
+}
+
+int
+cmd_searchplay(gcc_unused int argc, char **argv, struct mpd_connection *conn)
+{
+	int id = find_songname_id(conn, argv[0]);
+	if (id < 0)
+		DIE("error: playlist contains no song with that name: %s\n",
+		    argv[0]);
 
+	if (!mpd_run_play_id(conn, id))
+		printErrorAndExit(conn);
 	return 1;
 }
 
 int
-cmd_seek(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *conn)
+cmd_seek(gcc_unused int argc, gcc_unused char **argv,
+	 struct mpd_connection *conn)
 {
 	struct mpd_status *status;
 	char * arg = argv[0];
 
 	int seekchange;
 	int total_secs;
-        int rel = 0;
+	int rel = 0;
 
 	status = getStatus(conn);
 
@@ -354,27 +388,31 @@ cmd_seek(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *con
 		DIE("not currently playing\n");
 
 	/* Detect +/- if exists point to the next char */
-        if(*arg == '+') rel = 1;
-        else if(*arg == '-') rel = -1;
+	if (*arg == '+')
+		rel = 1;
+	else if (*arg == '-')
+		rel = -1;
 
-	if(rel != 0) arg++;
+	if (rel != 0)
+		++arg;
 
 	/* If seeking by percent */
-	if( arg[strlen(arg)-1] == '%' ) {
+	if (arg[strlen(arg) - 1] == '%') {
 		/* Remove the % */
-		arg[ strlen(arg) - 1 ] = '\0';
+		arg[strlen(arg) - 1] = '\0';
 
 		/* percent seek, strtod is needed for percent with decimals */
 		char *test;
 		double perc = strtod(arg,&test);
-		if(( *test!='\0' ) || (!rel && (perc<0 || perc>100)) || (rel && perc>abs(100)))
-			DIE("\"%s\" is not an number between 0 and 100\n",arg);
+		if (*test != '\0' || (rel == 0 && (perc < 0 || perc > 100)) ||
+		    (rel && perc > abs(100)))
+			DIE("\"%s\" is not an number between 0 and 100\n", arg);
 
 		seekchange = perc * mpd_status_get_total_time(status) / 100 + 0.5;
 
 	} else { /* If seeking by absolute seek time */
 
-		if( strchr( arg, ':' )) {
+		if (strchr(arg, ':') != NULL) {
 			int hr = 0;
 			int min = 0;
 			int sec = 0;
@@ -383,24 +421,25 @@ cmd_seek(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *con
 			char *sec_ptr = strrchr(arg, ':');
 
 			/* Remove ':' and move the pointer one byte up */
-			* sec_ptr = '\0';
+			*sec_ptr = '\0';
 			++sec_ptr;
 
 			/* If hour is in the argument, else just point to the arg */
-			char *min_ptr;
-			if(( min_ptr = strrchr( arg, ':' ))) {
+			char *min_ptr = strrchr(arg, ':');
+			if (min_ptr != NULL) {
 
 				/* Remove ':' and move the pointer one byte up */
-				* min_ptr = '\0';
+				*min_ptr = '\0';
 				++min_ptr;
 
 				/* If the argument still exists, it's the hour  */
-				if( arg != NULL ) {
+				if (arg != NULL) {
 					char *hr_ptr = arg;
 					char *test;
-					hr = strtol( hr_ptr, &test, 10 );
+					hr = strtol(hr_ptr, &test, 10);
 
-					if( *test != '\0' || ( ! rel && hr < 0 ))
+					if (*test != '\0' ||
+					    (rel == 0 && hr < 0))
 						DIE("\"%s\" is not a positive number\n", sec_ptr);
 				}
 			} else {
@@ -409,60 +448,59 @@ cmd_seek(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *con
 
 			/* Change the pointers to a integer  */
 			char *test;
-			sec = strtol( sec_ptr, &test, 10 );
+			sec = strtol(sec_ptr, &test, 10);
 
-			if( *test != '\0' || ( ! rel && sec < 0 ))
+			if (*test != '\0' || (rel == 0 && sec < 0))
 				DIE("\"%s\" is not a positive number\n", sec_ptr);
 
 			min = strtol( min_ptr, &test, 10 );
 
-			if( *test != '\0' || ( ! rel && min < 0 ))
+			if( *test != '\0' || (rel == 0 && min < 0 ))
 				DIE("\"%s\" is not a positive number\n", min_ptr);
 
 			/* If mins exist, check secs. If hrs exist, check mins  */
-			if( min && strlen(sec_ptr) != 2 )
+			if (min && strlen(sec_ptr) != 2)
 				DIE("\"%s\" is not two digits\n", sec_ptr);
-			else if( hr && strlen(min_ptr) != 2 )
+			else if (hr && strlen(min_ptr) != 2)
 				DIE("\"%s\" is not two digits\n", min_ptr);
 
 			/* Finally, make sure they're not above 60 if higher unit exists */
-			if( min && sec > 60 )
+			if (min && sec > 60)
 				DIE("\"%s\" is greater than 60\n", sec_ptr);
-			else if( hr && min > 60 )
+			else if (hr && min > 60 )
 				DIE("\"%s\" is greater than 60\n", min_ptr);
 
-			total_secs = ( hr * 3600 ) + ( min * 60 ) + sec;
+			total_secs = (hr * 3600) + (min * 60) + sec;
 
 		} else {
 
 			/* absolute seek (in seconds) */
 			char *test;
-			total_secs = strtol( arg, &test, 10 ); /* get the # of seconds */
+			total_secs = strtol(arg, &test, 10); /* get the # of seconds */
 
-			if( *test != '\0' || ( ! rel && total_secs < 0 ))
+			if (*test != '\0' || (rel == 0 && total_secs < 0))
 				DIE("\"%s\" is not a positive number\n", arg);
 		}
+
 		seekchange = total_secs;
 	}
 
 	/* This detects +/- and is necessary due to the parsing of HH:MM:SS numbers*/
 	int seekto;
-	if(rel == 1) {
+	if (rel == 1)
 		seekto = mpd_status_get_elapsed_time(status) + seekchange;
-	} else if (rel == -1) {
+	else if (rel == -1)
 		seekto = mpd_status_get_elapsed_time(status) - seekchange;
-	} else {
+	else
 		seekto = seekchange;
-	}
 
 	if (seekto > (int)mpd_status_get_total_time(status))
 		DIE("Seek amount would seek past the end of the song\n");
 
-	mpd_status_free(status);
-
 	if (!mpd_run_seek_id(conn, mpd_status_get_song_id(status), seekto))
 		printErrorAndExit(conn);
 
+	mpd_status_free(status);
 	return 1;
 }
 
@@ -470,26 +508,27 @@ int
 cmd_move(gcc_unused int argc, char **argv, struct mpd_connection *conn)
 {
 	int from;
-	if(!parse_int(argv[0], &from) || from<=0)
-		DIE("\"%s\" is not a positive integer\n",argv[0]);
+	if (!parse_int(argv[0], &from) || from <= 0)
+		DIE("\"%s\" is not a positive integer\n", argv[0]);
 
 	int to;
-	if(!parse_int(argv[1], &to) || to<=0)
-		DIE("\"%s\" is not a positive integer\n",argv[1]);
+	if (!parse_int(argv[1], &to) || to <= 0)
+		DIE("\"%s\" is not a positive integer\n", argv[1]);
 
 	/* users type in 1-based numbers, mpd uses 0-based */
-	from--;
-	to--;
-
-	mpd_run_move(conn, from, to);
+	--from;
+	--to;
 
+	if (!mpd_run_move(conn, from, to))
+		printErrorAndExit(conn);
 	return 0;
 }
 
-int cmd_listall ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_listall(int argc, char **argv, struct mpd_connection *conn)
 {
 	const char * listall = "";
-	int i=0;
+	int i = 0;
 
 	if (argc > 0)
 		listall = charset_to_utf8(argv[i]);
@@ -517,7 +556,8 @@ int cmd_listall ( int argc, char ** argv, struct mpd_connection *conn )
 	return 0;
 }
 
-int cmd_update ( int argc, char ** argv, struct mpd_connection *conn)
+int
+cmd_update(int argc, char **argv, struct mpd_connection *conn)
 {
 	if (contains_absolute_path(argc, argv) && !path_prepare(conn))
 		printErrorAndExit(conn);
@@ -526,8 +566,9 @@ int cmd_update ( int argc, char ** argv, struct mpd_connection *conn)
 		printErrorAndExit(conn);
 
 	int i = 0;
-	const char * update = "";
-	if(argc > 0) update = charset_to_utf8(argv[i]);
+	const char *update = "";
+	if (argc > 0)
+		update = charset_to_utf8(argv[i]);
 
 	do {
 		char *tmp = strdup(update);
@@ -555,8 +596,7 @@ int cmd_update ( int argc, char ** argv, struct mpd_connection *conn)
 		id = next_id;
 	}
 
-	if (!mpd_response_finish(conn))
-		printErrorAndExit(conn);
+	my_finishCommand(conn);
 
 	while (options.wait) {
 		/* idle until an update finishes */
@@ -603,7 +643,8 @@ ls_entity(int argc, char **argv, struct mpd_connection *conn,
 	return 0;
 }
 
-int cmd_ls ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_ls(int argc, char **argv, struct mpd_connection *conn)
 {
 	for (int i = 0; i < argc; i++)
 		strip_trailing_slash(argv[i]);
@@ -611,12 +652,14 @@ int cmd_ls ( int argc, char ** argv, struct mpd_connection *conn )
 	return ls_entity(argc, argv, conn, MPD_ENTITY_TYPE_UNKNOWN);
 }
 
-int cmd_lsplaylists ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_lsplaylists(int argc, char **argv, struct mpd_connection *conn)
 {
 	return ls_entity(argc, argv, conn, MPD_ENTITY_TYPE_PLAYLIST);
 }
 
-int cmd_load ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_load(int argc, char **argv, struct mpd_connection *conn)
 {
 	if (!mpd_command_list_begin(conn, false))
 		printErrorAndExit(conn);
@@ -625,20 +668,21 @@ int cmd_load ( int argc, char ** argv, struct mpd_connection *conn )
 		printf("loading: %s\n",argv[i]);
 		mpd_send_load(conn, charset_to_utf8(argv[i]));
 	}
+
 	mpd_command_list_end(conn);
 	my_finishCommand(conn);
-
 	return 0;
 }
 
-int cmd_list ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_list(int argc, char **argv, struct mpd_connection *conn)
 {
 	enum mpd_tag_type type = get_search_type(argv[0]);
 	if (type == MPD_TAG_UNKNOWN)
 		return -1;
 
-	argc -= 1;
-	argv += 1;
+	--argc;
+	++argv;
 
 	mpd_search_db_tags(conn, type);
 
@@ -655,16 +699,16 @@ int cmd_list ( int argc, char ** argv, struct mpd_connection *conn )
 	}
 
 	my_finishCommand(conn);
-
 	return 0;
 }
 
-int cmd_volume ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_volume(int argc, char **argv, struct mpd_connection *conn)
 {
-        struct int_value_change ch;
+	struct int_value_change ch;
 
-	if(argc==1) {
-                if(!parse_int_value_change(argv[0], &ch))
+	if (argc == 1) {
+		if (!parse_int_value_change(argv[0], &ch))
 			DIE("\"%s\" is not an integer\n", argv[0]);
 	} else {
 		struct mpd_status *status = getStatus(conn);
@@ -676,7 +720,6 @@ int cmd_volume ( int argc, char ** argv, struct mpd_connection *conn )
 			printf("volume: n/a\n");
 
 		mpd_status_free(status);
-
 		return 0;
 	}
 
@@ -711,7 +754,8 @@ int cmd_volume ( int argc, char ** argv, struct mpd_connection *conn )
 }
 
 int
-cmd_pause(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *conn)
+cmd_pause(gcc_unused int argc, gcc_unused char **argv,
+	  struct mpd_connection *conn)
 {
 	mpd_send_pause(conn, true);
 	my_finishCommand(conn);
@@ -745,41 +789,45 @@ bool_cmd(int argc, char **argv, struct mpd_connection *conn,
 	return 1;
 }
 
-int cmd_repeat(int argc, char ** argv, struct mpd_connection *conn)
+int
+cmd_repeat(int argc, char **argv, struct mpd_connection *conn)
 {
 	return bool_cmd(argc, argv, conn,
 			mpd_status_get_repeat, mpd_run_repeat);
 }
 
-int cmd_random(int argc, char ** argv, struct mpd_connection *conn)
+int
+cmd_random(int argc, char **argv, struct mpd_connection *conn)
 {
 	return bool_cmd(argc, argv, conn,
 			mpd_status_get_random, mpd_run_random);
 }
 
-int cmd_single(int argc, char ** argv, struct mpd_connection *conn)
+int
+cmd_single(int argc, char **argv, struct mpd_connection *conn)
 {
 	return bool_cmd(argc, argv, conn,
 			mpd_status_get_single, mpd_run_single);
 }
 
-int cmd_consume(int argc, char ** argv, struct mpd_connection *conn)
+int
+cmd_consume(int argc, char **argv, struct mpd_connection *conn)
 {
 	return bool_cmd(argc, argv, conn,
 			mpd_status_get_consume, mpd_run_consume);
 }
 
-int cmd_crossfade ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_crossfade(int argc, char **argv, struct mpd_connection *conn)
 {
-	if(argc==1) {
+	if (argc==1) {
 		int seconds;
-                if(!parse_int(argv[0], &seconds) || seconds<0)
-			DIE("\"%s\" is not 0 or positive integer\n",argv[0]);
+		if (!parse_int(argv[0], &seconds) || seconds < 0)
+			DIE("\"%s\" is not 0 or positive integer\n", argv[0]);
 
 		if (!mpd_run_crossfade(conn, seconds))
 			printErrorAndExit(conn);
-	}
-	else {
+	} else {
 		struct mpd_status *status;
 		status = getStatus(conn);
 
@@ -787,53 +835,58 @@ int cmd_crossfade ( int argc, char ** argv, struct mpd_connection *conn )
 
 		mpd_status_free(status);
 	}
+
 	return 0;
 }
 
-int cmd_mixrampdb ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_mixrampdb(int argc, char **argv, struct mpd_connection *conn)
 {
-	if(argc==1) {
+	if (argc == 1) {
 		float db;
-		if(!parse_float(argv[0], &db))
-			DIE("\"%s\" is not a floating point number\n",argv[0]);
+		if (!parse_float(argv[0], &db))
+			DIE("\"%s\" is not a floating point number\n",
+			    argv[0]);
 
 		mpd_run_mixrampdb(conn, db);
-                my_finishCommand(conn);
-	}
-	else {
+		my_finishCommand(conn);
+	} else {
 		struct mpd_status *status = getStatus(conn);
 
 		printf("mixrampdb: %f\n", mpd_status_get_mixrampdb(status));
 
 		mpd_status_free(status);
 	}
+
 	return 0;
 }
 
-int cmd_mixrampdelay ( int argc, char ** argv, struct mpd_connection *conn )
+int
+cmd_mixrampdelay(int argc, char **argv, struct mpd_connection *conn)
 {
-	if(argc==1) {
+	if (argc == 1) {
 		float seconds;
-		if(!parse_float(argv[0], &seconds))
-			DIE("\"%s\" is not a floating point number\n",argv[0]);
+		if (!parse_float(argv[0], &seconds))
+			DIE("\"%s\" is not a floating point number\n",
+			    argv[0]);
 
 		mpd_run_mixrampdelay(conn, seconds);
 		my_finishCommand(conn);
-	}
-	else {
-		struct mpd_status *status;
-		status = getStatus(conn);
+	} else {
+		struct mpd_status *status = getStatus(conn);
 
 		printf("mixrampdelay: %f\n",
 		       mpd_status_get_mixrampdelay(status));
 
 		mpd_status_free(status);
 	}
+
 	return 0;
 }
 
 int
-cmd_version(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *conn)
+cmd_version(gcc_unused int argc, gcc_unused char **argv,
+	    struct mpd_connection *conn)
 {
 	const unsigned *version = mpd_connection_get_server_version(conn);
 
@@ -846,7 +899,8 @@ cmd_version(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *
 	return 0;
 }
 
-static char * DHMS(unsigned long t)
+static char *
+DHMS(unsigned long t)
 {
 	static char buf[32];	/* Ugh */
 
@@ -874,7 +928,8 @@ static char * DHMS(unsigned long t)
 }
 
 int
-cmd_stats(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *conn)
+cmd_stats(gcc_unused int argc, gcc_unused char **argv,
+	  struct mpd_connection *conn)
 {
 	struct mpd_stats *stats = mpd_run_stats(conn);
 	if (stats == NULL)
@@ -897,7 +952,8 @@ cmd_stats(gcc_unused int argc, gcc_unused char **argv, struct mpd_connection *co
 }
 
 int
-cmd_status(gcc_unused  int argc, gcc_unused char **argv, struct mpd_connection *conn)
+cmd_status(gcc_unused int argc, gcc_unused char **argv,
+	   struct mpd_connection *conn)
 {
 	if (options.verbosity >= V_DEFAULT)
 		print_status(conn);
diff --git a/src/command.h b/src/command.h
index c4e713d..302f408 100644
--- a/src/command.h
+++ b/src/command.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -26,6 +26,7 @@ struct mpd_connection;
 int cmd_status(int argc, char **argv, struct mpd_connection *conn);
 int cmd_current(int argc, char **argv, struct mpd_connection *conn);
 int cmd_play(int argc, char **argv, struct mpd_connection *conn);
+int cmd_searchplay(int argc, char **argv, struct mpd_connection *conn);
 int cmd_next(int argc, char **argv, struct mpd_connection *conn);
 int cmd_prev(int argc, char **argv, struct mpd_connection *conn);
 int cmd_pause(int argc, char **argv, struct mpd_connection *conn);
diff --git a/src/format.c b/src/format.c
new file mode 100644
index 0000000..66243c8
--- /dev/null
+++ b/src/format.c
@@ -0,0 +1,259 @@
+/*
+ * music player command (mpc)
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "format.h"
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/**
+ * Reallocate the given string and append the source string.
+ */
+gcc_malloc
+static char *
+string_append(char *dest, const char *src, size_t len)
+{
+	size_t destlen = dest != NULL
+		? strlen(dest)
+		: 0;
+
+	dest = realloc(dest, destlen + len + 1);
+	memcpy(dest + destlen, src, len);
+	dest[destlen + len] = '\0';
+
+	return dest;
+}
+
+/**
+ * Skip the format string until the current group is closed by either
+ * '&', '|' or ']' (supports nesting).
+ */
+gcc_pure
+static const char *
+skip_format(const char *p)
+{
+	unsigned stack = 0;
+
+	while (*p != '\0') {
+		if (*p == '[')
+			stack++;
+		else if (*p == '#' && p[1] != '\0')
+			/* skip escaped stuff */
+			++p;
+		else if (stack > 0) {
+			if (*p == ']')
+				--stack;
+		} else if (*p == '&' || *p == '|' || *p == ']')
+			break;
+
+		++p;
+	}
+
+	return p;
+}
+
+static bool
+is_name_char(char ch)
+{
+	return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') ||
+		(ch >= '0' && ch <= '9') || ch == '_';
+}
+
+static char *
+format_object2(const char *format, const char **last, const void *object,
+	       const char *(*getter)(const void *object, const char *name))
+{
+	char *ret = NULL;
+	const char *p;
+	bool found = false;
+
+	for (p = format; *p != '\0';) {
+		switch (p[0]) {
+		case '|':
+			++p;
+			if (!found) {
+				/* nothing found yet: try the next
+				   section */
+				free(ret);
+				ret = NULL;
+			} else
+				/* already found a value: skip the
+				   next section */
+				p = skip_format(p);
+			break;
+
+		case '&':
+			++p;
+			if (!found)
+				/* nothing found yet, so skip this
+				   section */
+				p = skip_format(p);
+			else
+				/* we found something yet, but it will
+				   only be used if the next section
+				   also found something, so reset the
+				   flag */
+				found = false;
+			break;
+
+		case '[': {
+			char *t = format_object2(p + 1, &p, object, getter);
+			if (t != NULL) {
+				ret = string_append(ret, t, strlen(t));
+				free(t);
+				found = true;
+			}
+		}
+			break;
+
+		case ']':
+			if (last != NULL)
+				*last = p + 1;
+			if (!found) {
+				free(ret);
+				ret = NULL;
+			}
+			return ret;
+
+		case '\\': {
+			/* take care of escape sequences */
+			char ltemp;
+			switch (p[1]) {
+			case 'a':
+				ltemp = '\a';
+				break;
+
+			case 'b':
+				ltemp = '\b';
+				break;
+
+			case 't':
+				ltemp = '\t';
+				break;
+
+			case 'n':
+				ltemp = '\n';
+				break;
+
+			case 'v':
+				ltemp = '\v';
+				break;
+
+			case 'f':
+				ltemp = '\f';
+				break;
+
+			case 'r':
+				ltemp = '\r';
+				break;
+
+			case '[':
+			case ']':
+				ltemp = p[1];
+				break;
+
+			default:
+				/* unknown escape: copy the
+				   backslash */
+				ltemp = p[0];
+				--p;
+				break;
+			}
+
+			ret = string_append(ret, &ltemp, 1);
+			p += 2;
+		}
+			break;
+
+		case '%': {
+			/* find the extent of this format specifier
+			   (stop at \0, ' ', or esc) */
+			const char *end = p + 1;
+			while (is_name_char(*end))
+				++end;
+
+			const size_t length = end - p + 1;
+
+			if (*end != '%') {
+				ret = string_append(ret, p, length - 1);
+				p = end;
+				continue;
+			}
+
+			char name[32];
+			if (length > (int)sizeof(name)) {
+				ret = string_append(ret, p, length);
+				p = end + 1;
+				continue;
+			}
+
+			memcpy(name, p + 1, length - 2);
+			name[length - 2] = 0;
+
+			const char *value = getter(object, name);
+			size_t value_length;
+			if (value != NULL) {
+				if (*value != 0)
+					found = true;
+				value_length = strlen(value);
+			} else {
+				/* unknown variable: copy verbatim
+				   from format string */
+				value = p;
+				value_length = length;
+			}
+
+			ret = string_append(ret, value, value_length);
+
+			/* advance past the specifier */
+			p = end + 1;
+		}
+			break;
+
+		case '#':
+			/* let the escape character escape itself */
+			if (p[1] != '\0') {
+				ret = string_append(ret, p + 1, 1);
+				p += 2;
+				break;
+			}
+
+			/* fall through */
+
+		default:
+			/* pass-through non-escaped portions of the format string */
+			ret = string_append(ret, p, 1);
+			++p;
+		}
+	}
+
+	if (last != NULL)
+		*last = p;
+	return ret;
+}
+
+char *
+format_object(const char *format, const void *object,
+	      const char *(*getter)(const void *object, const char *name))
+{
+	return format_object2(format, NULL, object, getter);
+}
diff --git a/src/path.h b/src/format.h
similarity index 55%
copy from src/path.h
copy to src/format.h
index 6edb9ef..fa3624b 100644
--- a/src/path.h
+++ b/src/format.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,25 +18,34 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPC_PATH_H
-#define MPC_PATH_H
+#ifndef MPC_FORMAT_H
+#define MPC_FORMAT_H
 
 #include "Compiler.h"
 
-#include <stdbool.h>
+struct mpd_song;
 
-struct mpd_connection;
-
-bool
-path_prepare(struct mpd_connection *conn);
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /**
- * Convert an absolute path to one relative to the music directory.
- * That works only if we're connected to MPD via UNIX domain socket
- * and MPD supports the "config" command.
+ * Pretty-print an object into a string using the given format
+ * specification.
+ *
+ * @param format the format string
+ * @param object the object
+ * @param getter a getter function that extracts a value from the object
+ * @return the resulting string to be freed by free(); NULL if
+ * no format string group produced any output
  */
-gcc_pure
-const char *
-to_relative_path(const char *path);
+gcc_malloc
+char *
+format_object(const char *format, const void *object,
+	      const char *(*getter)(const void *object, const char *name));
+
+#ifdef __cplusplus
+}
+#endif
 
 #endif
diff --git a/src/idle.c b/src/idle.c
index e288dec..339cafe 100644
--- a/src/idle.c
+++ b/src/idle.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/idle.h b/src/idle.h
index 25f94f7..3a7cb1a 100644
--- a/src/idle.h
+++ b/src/idle.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/list.c b/src/list.c
index afc0da3..dacd63f 100644
--- a/src/list.c
+++ b/src/list.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -21,79 +21,21 @@
 #include "list.h"
 
 #include <stdlib.h>
-#include <string.h>
 #include <assert.h>
-#include <time.h>
-#include <stdio.h>
 
-static void makeListNodesArray(List * list) {
-	ListNode * node = list->firstNode;
-	long i;
-
-	list->nodesArray = malloc(sizeof(ListNode *)*list->numberOfNodes);
-
-	for(i=0;i<list->numberOfNodes;i++) {
-		list->nodesArray[i] = node;
-		node = node->nextNode;
-	}
-}
-
-static void freeListNodesArray(List * list) {
-	free(list->nodesArray);
-	list->nodesArray = NULL;
-}
-
-List * makeList(ListFreeDataFunc * freeDataFunc) {
+List *makeList(void) {
 	List * list = malloc(sizeof(List));
 
 	assert(list!=NULL);
 
 	list->firstNode = NULL;
 	list->lastNode = NULL;
-	list->freeDataFunc = freeDataFunc;
 	list->numberOfNodes = 0;
-	list->nodesArray = NULL;
 
 	return list;
 }
 
-int insertInList(List * list,char * key,void * data) {
-	ListNode * node;
-
-	assert(list!=NULL);
-	assert(key!=NULL);
-	assert(data!=NULL);
-
-	node = malloc(sizeof(ListNode));
-	assert(node!=NULL);
-
-	if(list->nodesArray) freeListNodesArray(list);
-
-	if(list->firstNode==NULL) {
-		assert(list->lastNode==NULL);
-		list->firstNode = node;
-	}
-	else {
-		assert(list->lastNode!=NULL);
-		assert(list->lastNode->nextNode==NULL);
-		list->lastNode->nextNode = node;
-	}
-	
-	node->key = malloc((strlen(key)+1)*sizeof(char));
-	assert(node->key!=NULL);
-	strcpy(node->key,key);
-	node->data = data;
-	node->nextNode = NULL;
-	node->prevNode = list->lastNode;
-
-	list->lastNode = node;
-
-	list->numberOfNodes++;
-	
-	return 1;
-}
-
-int insertInListWithoutKey(List * list, void * data) {
+void insertInListWithoutKey(List * list, void * data) {
 	ListNode * node;
 
 	assert(list!=NULL);
@@ -101,8 +43,6 @@ int insertInListWithoutKey(List * list, void * data) {
 
 	node = malloc(sizeof(ListNode));
 	assert(node!=NULL);
-	
-	if(list->nodesArray) freeListNodesArray(list);
 
 	if(list->firstNode==NULL) {
 		assert(list->lastNode==NULL);
@@ -114,121 +54,14 @@ int insertInListWithoutKey(List * list, void * data) {
 		list->lastNode->nextNode = node;
 	}
 
-	node->key = NULL;
 	node->data = data;
 	node->nextNode = NULL;
-	node->prevNode = list->lastNode;
 
 	list->lastNode = node;
 
 	list->numberOfNodes++;
-	
-	return 1;
-}
-
-int findInList(List * list,char * key,void ** data) {
-	static long high;
-	static long low;
-	static long cur;
-	static ListNode * tmpNode;
-	static int cmp;
-
-	assert(list!=NULL);
-
-	if(list->nodesArray) {
-		high = list->numberOfNodes-1;
-		low = 0;
-		cur = high;
-
-		while(high>low) {
-			cur = (high+low)/2;
-			tmpNode = list->nodesArray[cur];
-			cmp = strcmp(tmpNode->key,key);
-			if(cmp==0) {
-				(*data) = tmpNode->data;
-				return 1;
-			}
-			else if(cmp>0) high = cur;
-			else {
-				if(low==cur) break;
-				low = cur;
-			}
-		}
-
-		cur = high;
-		if(cur>=0) {
-			tmpNode = list->nodesArray[cur];
-			if(strcmp(tmpNode->key,key)==0) {
-				(*data) = tmpNode->data;
-				return 1;
-			}
-		}
-	}
-	else {
-		tmpNode = list->firstNode;
-	
-		while(tmpNode!=NULL && strcmp(tmpNode->key,key)!=0) {
-			tmpNode = tmpNode->nextNode;
-		}
-	
-		if(tmpNode!=NULL) {
-			(*data) = tmpNode->data;
-			return 1;
-		}
-	}
-
-	return 0;
 }
 
-int deleteFromList(List * list,char * key) {
-	ListNode * tmpNode;
-
-	assert(list!=NULL);
-
-	tmpNode = list->firstNode;
-
-	while(tmpNode!=NULL && strcmp(tmpNode->key,key)!=0) {
-		tmpNode = tmpNode->nextNode;
-	}
-
-	if(tmpNode!=NULL)
-		deleteNodeFromList(list,tmpNode);
-	else
-		return 0;
-
-	return 1;
-}
-
-void deleteNodeFromList(List * list,ListNode * node) {
-	assert(list!=NULL);
-	assert(node!=NULL);
-	
-	if(node->prevNode==NULL) {
-		list->firstNode = node->nextNode;
-	}
-	else {
-		node->prevNode->nextNode = node->nextNode;
-	}
-	if(node->nextNode==NULL) {
-		list->lastNode = node->prevNode;
-	}
-	else {
-		node->nextNode->prevNode = node->prevNode;
-	}
-	if(list->freeDataFunc) {
-		list->freeDataFunc(node->data);
-	}
-	free(node->key);
-	free(node);
-	list->numberOfNodes--;
-
-	if(list->nodesArray) {
-		freeListNodesArray(list);
-		makeListNodesArray(list);
-	}
-
-}
-		
 void freeList(void * list) {
 	ListNode * tmpNode;
 	ListNode * tmpNode2;
@@ -237,42 +70,11 @@ void freeList(void * list) {
 
 	tmpNode = ((List *)list)->firstNode;
 
-	free(((List *)list)->nodesArray);
-
 	while(tmpNode!=NULL) {
 		tmpNode2 = tmpNode->nextNode;
-		free(tmpNode->key);
-		if(((List *)list)->freeDataFunc) {
-			((List *)list)->freeDataFunc(tmpNode->data);
-		}
 		free(tmpNode);
 		tmpNode = tmpNode2;
 	}
 
 	free(list);
 }
-
-void clearList(List * list) {
-	ListNode * tmpNode;
-	ListNode * tmpNode2;
-
-	assert(list!=NULL);
-
-	tmpNode = ((List *)list)->firstNode;
-
-	while(tmpNode!=NULL) {
-		tmpNode2 = tmpNode->nextNode;
-		free(tmpNode->key);
-		if(((List *)list)->freeDataFunc) {
-			((List *)list)->freeDataFunc(tmpNode->data);
-		}
-		free(tmpNode);
-		tmpNode = tmpNode2;
-	}
-
-	if(list->nodesArray) freeListNodesArray(list);
-
-	list->firstNode = NULL;
-	list->lastNode = NULL;
-	list->numberOfNodes = 0;
-}
diff --git a/src/list.h b/src/list.h
index e3c0d28..86fa867 100644
--- a/src/list.h
+++ b/src/list.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -21,23 +21,11 @@
 #ifndef LIST_H
 #define LIST_H
 
-#include <stdlib.h>
-
-/* used to make a list where free() will be used to free data in list */
-#define DEFAULT_FREE_DATA_FUNC	free
-
-/* typedef for function to free data stored in the list nodes */
-typedef void ListFreeDataFunc(void *);
-
 typedef struct _ListNode {
-	/* used to identify node (ie. when using findInList) */
-	char * key;
 	/* data store in node */
 	void * data;
 	/* next node in list */
 	struct _ListNode * nextNode;
-	/* previous node in list */
-	struct _ListNode * prevNode;
 } ListNode;
 
 typedef struct _List {
@@ -45,12 +33,8 @@ typedef struct _List {
 	ListNode * firstNode;
 	/* last node in list */
 	ListNode * lastNode;
-	/* function used to free data stored in nodes of the list */
-	ListFreeDataFunc * freeDataFunc;
 	/* number of nodes */
 	long numberOfNodes;
-	/* array for searching when list is sorted */
-	ListNode ** nodesArray;
 } List;
 
 /* allocates memory for a new list and initializes it
@@ -58,41 +42,13 @@ typedef struct _List {
  *                    DEFAULT_FREE_DATAFUNC to use free()
  * returns pointer to new list if successful, NULL otherwise
  */
-List * makeList(ListFreeDataFunc * freeDataFunc);
-
-/* inserts a node into _list_ with _key_ and _data_
- *  _list_ -> list the data will be inserted in
- *  _key_ -> identifier for node/data to be inserted into list
- *  _data_ -> data to be inserted in list
- * returns 1 if successful, 0 otherwise
- */ 
-int insertInList(List * list,char * key,void * data);
-
-int insertInListWithoutKey(List * list,void * data);
-
-/* deletes the first node in the list with the key _key_
- *  _list_ -> list the node will be deleted from
- *  _key_ -> key used to identify node to delete
- *  returns 1 if node is found and deleted, 0 otherwise
- */
-int deleteFromList(List * list,char * key);
+List *makeList(void);
 
-void deleteNodeFromList(List * list,ListNode * node);
-
-/* finds data in a list based on key
- *  _list_ -> list to search for _key_ in
- * _key_ -> which node is being searched for
- * _data_ -> a pointer to where data will be placed, 
- *	_data_ memory should not by allocated or freed
- * returns 1 if successful, 0 otherwise
- */
-int findInList(List * list, char * key, void ** data);
+void insertInListWithoutKey(List * list,void * data);
 
 /* frees memory malloc'd for list and its nodes
  *  _list_ -> List to be free'd
  */
 void freeList(void * list);
 
-void clearList(List * list);
-
 #endif
diff --git a/src/main.c b/src/main.c
index 7c30ff6..a88e136 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -65,7 +65,7 @@ static struct command {
 	{ "current", 0, 0, 0, cmd_current,
 	  "", "Show the currently playing song"},
 	{"del",         0,   -1,  1,    cmd_del,         "<position>", "Remove a song from the current playlist"},
-	{"play",        0,   -1,  2,    cmd_play,        "[<position>]", "Start playing at <position> (default: 1)"},
+	{"play",        0,   1,   2,    cmd_play,        "[<position>]", "Start playing at <position>"},
 	{"next",        0,   0,   0,    cmd_next,        "", "Play the next song in the current playlist"},
 	{"prev",        0,   0,   0,    cmd_prev,        "", "Play the previous song in the current playlist"},
 	{"pause",       0,   0,   0,    cmd_pause,       "", "Pauses the currently playing song"},
@@ -98,9 +98,10 @@ static struct command {
 	{"single",      0,   1,   0,    cmd_single,      "<on|off>", "Toggle single mode, or specify state"},
 	{"consume",     0,   1,   0,    cmd_consume,     "<on|off>", "Toggle consume mode, or specify state"},
 	{"search",      2,   -1,  0,    cmd_search,      "<type> <query>", "Search for a song"},
+	{"searchadd",   2,   -1,  0,    cmd_searchadd,   "<type> <query>", "Search songs and add them to the current playlist"},
 	{"find",        2,   -1,  0,    cmd_find,        "<type> <query>", "Find a song (exact match)"},
-	{"findadd", 2, -1, 0, cmd_findadd, "<type> <query>",
-	 "Find songs and add them to the current playlist"},
+	{"findadd",     2,   -1,  0,    cmd_findadd,     "<type> <query>", "Find songs and add them to the current playlist"},
+	{"searchplay",  1,   1,   0,    cmd_searchplay,  "<pattern>", "Find and play a song in the current playlist"},
 	{"list",        1,   -1,  0,    cmd_list,        "<type> [<type> <query>]", "Show all tags of <type>"},
 	{"crossfade",   0,   1,   0,    cmd_crossfade,   "[<seconds>]", "Set and display crossfade settings"},
 #if LIBMPDCLIENT_CHECK_VERSION(2,4,0)
@@ -214,11 +215,24 @@ setup_connection(void)
 static struct command *
 find_command(const char *name)
 {
-	for (unsigned i = 0; mpc_table[i].command != NULL; ++i)
-		if (strcmp(name, mpc_table[i].command) == 0)
-			return &mpc_table[i];
+	unsigned n_matches = 0;
+	size_t name_length = strlen(name);
+	struct command *command = NULL;
 
-	return NULL;
+	for (unsigned i = 0; mpc_table[i].command != NULL; ++i) {
+		if (memcmp(name, mpc_table[i].command, name_length) == 0) {
+			command = &mpc_table[i];
+			++n_matches;
+
+			if (command->command[name_length] == 0)
+				/* exact match */
+				return &mpc_table[i];
+		}
+	}
+
+	return n_matches == 1
+		? command
+		: /* ambiguous or nonexistent */ NULL;
 }
 
 /* check arguments to see if they are valid */
diff --git a/src/message.c b/src/message.c
index 1db8a5e..f9d0396 100644
--- a/src/message.c
+++ b/src/message.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -47,9 +47,7 @@ cmd_channels(gcc_unused int argc, gcc_unused char **argv,
 		mpd_return_pair(connection, pair);
 	}
 
-	if (!mpd_response_finish(connection))
-		printErrorAndExit(connection);
-
+	my_finishCommand(connection);
 	return 0;
 }
 
@@ -80,9 +78,7 @@ cmd_waitmessage(gcc_unused int argc, char **argv,
 		mpd_message_free(message);
 	}
 
-	if (!mpd_response_finish(connection))
-		printErrorAndExit(connection);
-
+	my_finishCommand(connection);
 	return 0;
 }
 
@@ -105,8 +101,7 @@ cmd_subscribe(gcc_unused int argc, char **argv,
 			mpd_message_free(message);
 		}
 
-		if (!mpd_response_finish(connection))
-			printErrorAndExit(connection);
+		my_finishCommand(connection);
 	}
 }
 
diff --git a/src/message.h b/src/message.h
index 0c87a1e..075e423 100644
--- a/src/message.h
+++ b/src/message.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/mpc.h b/src/mpc.h
index 36e0d1e..77ad732 100644
--- a/src/mpc.h
+++ b/src/mpc.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/options.c b/src/options.c
index 0be30c1..69fc46a 100644
--- a/src/options.c
+++ b/src/options.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/options.h b/src/options.h
index 9628cf7..45d2de5 100644
--- a/src/options.h
+++ b/src/options.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/password.c b/src/password.c
index a4ed341..603f14e 100644
--- a/src/password.c
+++ b/src/password.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/password.h b/src/password.h
index 8d6df5f..e28125f 100644
--- a/src/password.h
+++ b/src/password.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/path.c b/src/path.c
index 08411b6..15f78bd 100644
--- a/src/path.c
+++ b/src/path.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/path.h b/src/path.h
index 6edb9ef..fa2051f 100644
--- a/src/path.h
+++ b/src/path.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/queue.c b/src/queue.c
index a801c0c..88255d5 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -108,9 +108,8 @@ cmd_crop(gcc_unused int argc, gcc_unused char **argv,
 
 		mpd_status_free(status);
 
-		if (!mpd_command_list_end(conn) || !mpd_response_finish(conn))
-			printErrorAndExit(conn);
-
+		mpd_command_list_end(conn);
+		my_finishCommand(conn);
 		return 0;
 	} else {
 		mpd_status_free(status);
@@ -190,9 +189,8 @@ cmd_del(int argc, char **argv, struct mpd_connection *conn)
 	mpd_status_free(status);
 	free(songsToDel);
 
-	if (!mpd_command_list_end(conn) || !mpd_response_finish(conn))
-		printErrorAndExit(conn);
-
+	mpd_command_list_end(conn);
+	my_finishCommand(conn);
 	return 0;
 }
 
@@ -227,11 +225,39 @@ query_queue_length(struct mpd_connection *conn)
 	return length;
 }
 
+#if LIBMPDCLIENT_CHECK_VERSION(2,8,0)
+
+static void
+queue_range(struct mpd_connection *conn, unsigned start, unsigned end,
+	    int next_id)
+{
+	struct mpd_song *song = next_id >= 0
+		? mpd_run_get_queue_song_id(conn, next_id)
+		: mpd_run_current_song(conn);
+	unsigned prio = 0;
+	if (song != NULL) {
+		prio = mpd_song_get_prio(song);
+		mpd_song_free(song);
+	}
+
+	if (prio < 255)
+		++prio;
+
+	if (!mpd_run_prio_range(conn, prio, start, end))
+		printErrorAndExit(conn);
+}
+
+#endif
+
 int cmd_insert (int argc, char ** argv, struct mpd_connection *conn )
 {
 	struct mpd_status *status = getStatus(conn);
 	const unsigned from = mpd_status_get_queue_length(status);
 	const int cur_pos = mpd_status_get_song_pos(status);
+#if LIBMPDCLIENT_CHECK_VERSION(2,8,0)
+	const int next_id = mpd_status_get_next_song_id(status);
+	const bool random_mode = mpd_status_get_random(status);
+#endif
 	mpd_status_free(status);
 
 	int ret = cmd_add(argc, argv, conn);
@@ -241,9 +267,20 @@ int cmd_insert (int argc, char ** argv, struct mpd_connection *conn )
 	/* check the new queue length to find out how many songs were
 	   appended  */
 	const unsigned end = query_queue_length(conn);
+
+#if LIBMPDCLIENT_CHECK_VERSION(2,8,0)
+	if (random_mode) {
+		queue_range(conn, from, end, next_id);
+		return 0;
+	}
+#endif
+
 	if (end == from)
 		return 0;
 
 	/* move those songs to right after the current one */
-	return mpd_run_move_range(conn, from, end, cur_pos + 1);
+	if (!mpd_run_move_range(conn, from, end, cur_pos + 1))
+		printErrorAndExit(conn);
+
+	return 0;
 }
diff --git a/src/queue.h b/src/queue.h
index bed4868..864e542 100644
--- a/src/queue.h
+++ b/src/queue.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/search.c b/src/search.c
index c928730..26bd985 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -129,7 +129,8 @@ add_constraints(int argc, char ** argv, struct mpd_connection *conn)
 	return true;
 }
 
-static int do_search ( int argc, char ** argv, struct mpd_connection *conn, int exact )
+static int
+do_search(int argc, char ** argv, struct mpd_connection *conn, bool exact)
 {
 	mpd_search_db_songs(conn, exact);
 	if (!add_constraints(argc, argv, conn))
@@ -145,28 +146,41 @@ static int do_search ( int argc, char ** argv, struct mpd_connection *conn, int
 	return 0;
 }
 
+static int
+do_searchadd(int argc, char **argv, struct mpd_connection *conn, bool exact)
+{
+	mpd_search_add_db_songs(conn, exact);
+	if (!add_constraints(argc, argv, conn))
+		return -1;
+
+	if (!mpd_search_commit(conn))
+		printErrorAndExit(conn);
+
+	my_finishCommand(conn);
+	return 0;
+}
+
 int
 cmd_search(int argc, char **argv, struct mpd_connection *conn)
 {
-	return do_search(argc, argv, conn, 0);
+	return do_search(argc, argv, conn, false);
+}
+
+
+int
+cmd_searchadd(int argc, char **argv, struct mpd_connection *conn)
+{
+	return do_searchadd(argc, argv, conn, false);
 }
 
 int
 cmd_find(int argc, char **argv, struct mpd_connection *conn)
 {
-	return do_search(argc, argv, conn, 1);
+	return do_search(argc, argv, conn, true);
 }
 
 int
 cmd_findadd(int argc, char **argv, struct mpd_connection *conn)
 {
-	mpd_search_add_db_songs(conn, true);
-	if (!add_constraints(argc, argv, conn))
-		return -1;
-
-	if (!mpd_search_commit(conn))
-		printErrorAndExit(conn);
-
-	my_finishCommand(conn);
-	return 0;
+	return do_searchadd(argc, argv, conn, true);
 }
diff --git a/src/search.h b/src/search.h
index cbb6675..896fae1 100644
--- a/src/search.h
+++ b/src/search.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -51,6 +51,9 @@ int
 cmd_search(int argc, char **argv, struct mpd_connection *conn);
 
 int
+cmd_searchadd(int argc, char **argv, struct mpd_connection *conn);
+
+int
 cmd_find(int argc, char **argv, struct mpd_connection *conn);
 
 int
diff --git a/src/song_format.c b/src/song_format.c
new file mode 100644
index 0000000..b53a4e3
--- /dev/null
+++ b/src/song_format.c
@@ -0,0 +1,114 @@
+/*
+ * music player command (mpc)
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "song_format.h"
+#include "format.h"
+#include "charset.h"
+
+#include <mpd/client.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+static const char *
+format_mtime(char *buffer, size_t buffer_size,
+	     const struct mpd_song *song, const char *format)
+{
+	time_t t = mpd_song_get_last_modified(song);
+	if (t == 0)
+		return NULL;
+
+	struct tm tm;
+#ifdef WIN32
+	tm = *localtime(&t);
+#else
+	localtime_r(&t, &tm);
+#endif
+
+	strftime(buffer, buffer_size, format, &tm);
+	return buffer;
+}
+
+/**
+ * Extract an attribute from a song object.
+ *
+ * @param song the song object
+ * @param name the attribute name
+ * @return the attribute value; NULL if the attribute name is invalid;
+ * an empty string if the attribute name is valid, but not present in
+ * the song
+ */
+gcc_pure
+static const char *
+song_value(const struct mpd_song *song, const char *name)
+{
+	static char buffer[40];
+	const char *value;
+
+	if (strcmp(name, "file") == 0)
+		value = mpd_song_get_uri(song);
+	else if (strcmp(name, "time") == 0) {
+		unsigned duration = mpd_song_get_duration(song);
+
+		if (duration > 0) {
+			snprintf(buffer, sizeof(buffer), "%u:%02u",
+				 duration / 60, duration % 60);
+			value = buffer;
+		} else
+			value = NULL;
+	} else if (strcmp(name, "position") == 0) {
+		unsigned pos = mpd_song_get_pos(song);
+		snprintf(buffer, sizeof(buffer), "%u", pos+1);
+		value = buffer;
+	} else if (strcmp(name, "id") == 0) {
+		snprintf(buffer, sizeof(buffer), "%u", mpd_song_get_id(song));
+		value = buffer;
+	} else if (strcmp(name, "mtime") == 0) {
+		value = format_mtime(buffer, sizeof(buffer), song, "%c");
+	} else if (strcmp(name, "mdate") == 0) {
+		value = format_mtime(buffer, sizeof(buffer), song, "%x");
+	} else {
+		enum mpd_tag_type tag_type = mpd_tag_name_iparse(name);
+		if (tag_type == MPD_TAG_UNKNOWN)
+			return NULL;
+
+		value = mpd_song_get_tag(song, tag_type, 0);
+	}
+
+	if (value != NULL)
+		value = charset_from_utf8(value);
+	else
+		value = "";
+
+	return value;
+}
+
+static const char *
+song_getter(const void *object, const char *name)
+{
+	return song_value((const struct mpd_song *)object, name);
+}
+
+char *
+format_song(const struct mpd_song *song, const char *format)
+{
+	return format_object(format, song, song_getter);
+}
diff --git a/src/path.h b/src/song_format.h
similarity index 63%
copy from src/path.h
copy to src/song_format.h
index 6edb9ef..cf2e196 100644
--- a/src/path.h
+++ b/src/song_format.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -18,25 +18,25 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPC_PATH_H
-#define MPC_PATH_H
+#ifndef MPC_SONG_FORMAT_H
+#define MPC_SONG_FORMAT_H
 
 #include "Compiler.h"
 
-#include <stdbool.h>
-
-struct mpd_connection;
-
-bool
-path_prepare(struct mpd_connection *conn);
+struct mpd_song;
 
 /**
- * Convert an absolute path to one relative to the music directory.
- * That works only if we're connected to MPD via UNIX domain socket
- * and MPD supports the "config" command.
+ * Pretty-print song metadata into a string using the given format
+ * specification.
+ *
+ * @param song the song object
+ * @param format the format string
+ * @return the resulting string to be freed by free(); NULL if
+ * no format string group produced any output
  */
-gcc_pure
-const char *
-to_relative_path(const char *path);
+gcc_malloc
+char *
+format_song(const struct mpd_song *song,
+	    const char *format);
 
 #endif
diff --git a/src/status.c b/src/status.c
index 18f0a1b..2d79709 100644
--- a/src/status.c
+++ b/src/status.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -120,7 +120,6 @@ print_status(struct mpd_connection *conn)
 
 	mpd_status_free(status);
 
-	if (!mpd_response_finish(conn))
-		printErrorAndExit(conn);
+	my_finishCommand(conn);
 }
 
diff --git a/src/status.h b/src/status.h
index 21f74f7..f225658 100644
--- a/src/status.h
+++ b/src/status.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/sticker.c b/src/sticker.c
index 0c2ccef..3ed1df6 100644
--- a/src/sticker.c
+++ b/src/sticker.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/sticker.h b/src/sticker.h
index beb8716..6f99364 100644
--- a/src/sticker.h
+++ b/src/sticker.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/tab.c b/src/tab.c
index 93ad542..89d8ad3 100644
--- a/src/tab.c
+++ b/src/tab.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -110,13 +110,20 @@ cmd_tab(gcc_unused int argc, char ** argv, struct mpd_connection *conn)
 
 	tab_send_list(prefix, conn);
 
-	struct mpd_song *song;
-	while ((song = mpd_recv_song(conn)) != NULL) {
-		const char *path = mpd_song_get_uri(song);
-		if (memcmp(path, prefix, prefix_length) == 0)
-			printf("%s\n", charset_from_utf8(path));
-
-		mpd_song_free(song);
+	struct mpd_entity *entity;
+	while ((entity = mpd_recv_entity(conn)) != NULL) {
+		const char entitytype = mpd_entity_get_type(entity);
+		if (entitytype == MPD_ENTITY_TYPE_DIRECTORY) {
+			const char *path = mpd_directory_get_path(mpd_entity_get_directory(entity));
+			if (memcmp(path, prefix, prefix_length) == 0)
+				printf("%s/\n", charset_from_utf8(path));
+		} else if (entitytype == MPD_ENTITY_TYPE_SONG) {
+			const char *path = mpd_song_get_uri(mpd_entity_get_song(entity));
+			if (memcmp(path, prefix, prefix_length) == 0)
+				printf("%s\n", charset_from_utf8(path));
+		}
+
+		mpd_entity_free(entity);
 	}
 
 	my_finishCommand(conn);
diff --git a/src/tab.h b/src/tab.h
index a28dee4..d613897 100644
--- a/src/tab.h
+++ b/src/tab.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/src/util.c b/src/util.c
index de0dc60..50fb137 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -19,6 +19,7 @@
  */
 
 #include "util.h"
+#include "song_format.h"
 #include "charset.h"
 #include "list.h"
 #include "options.h"
@@ -26,12 +27,9 @@
 #include <mpd/client.h>
 
 #include <stdio.h>
-#include <string.h>
-#include <strings.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include <assert.h>
-#include <sys/param.h>
 
 void
 printErrorAndExit(struct mpd_connection *conn)
@@ -44,7 +42,7 @@ printErrorAndExit(struct mpd_connection *conn)
 		   rest is either US-ASCII or locale */
 		message = charset_from_utf8(message);
 
-	fprintf(stderr, "error: %s\n", message);
+	fprintf(stderr, "mpd error: %s\n", message);
 	mpd_connection_free(conn);
 	exit(EXIT_FAILURE);
 }
@@ -66,234 +64,10 @@ getStatus(struct mpd_connection *conn)
 	return ret;
 }
 
-static char * appendToString(char * dest, const char * src, int len) {
-	int destlen;
-
-	if(dest == NULL) {
-		dest = malloc(len+1);
-		memset(dest, 0, len+1);
-		destlen = 0;
-	}
-	else {
-		destlen = strlen(dest);
-		dest = realloc(dest, destlen+len+1);
-	}
-
-	memcpy(dest+destlen, src, len);
-	dest[destlen+len] = '\0';
-
-	return dest;
-}
-
-static const char * skipFormatting(const char * p) {
-	int stack = 0;
-		
-	while (*p != '\0') {
-		if(*p == '[') stack++;
-		else if(*p == '#' && p[1] != '\0') {
-			/* skip escaped stuff */
-			++p;
-		}
-		else if(stack) {
-			if(*p == ']') stack--;
-		}
-		else {
-			if(*p == '&' || *p == '|' || *p == ']') {
-				break;
-			}
-		}
-		++p;
-	}
-
-	return p;
-}
-
-static const char *
-song_value(const struct mpd_song *song, const char *name)
-{
-	static char buffer[10];
-	const char *value;
-
-	if (strcmp(name, "file") == 0)
-		value = mpd_song_get_uri(song);
-	else if (strcmp(name, "time") == 0) {
-		unsigned duration = mpd_song_get_duration(song);
-
-		if (duration > 0) {
-			snprintf(buffer, sizeof(buffer), "%d:%02d",
-				 duration / 60, duration % 60);
-			value = buffer;
-		} else
-			value = NULL;
-	} else if (strcmp(name, "position") == 0) {
-	        unsigned pos = mpd_song_get_pos(song);
-		snprintf(buffer, sizeof(buffer), "%d", pos+1);
-		value = buffer;
-	} else if (strcmp(name, "id") == 0) {
-		snprintf(buffer, sizeof(buffer), "%u", mpd_song_get_id(song));
-		value = buffer;
-	} else {
-		enum mpd_tag_type tag_type = mpd_tag_name_iparse(name);
-		if (tag_type == MPD_TAG_UNKNOWN)
-			return NULL;
-
-		value = mpd_song_get_tag(song, tag_type, 0);
-	}
-
-	if (value != NULL)
-		value = charset_from_utf8(value);
-	else
-		value = "";
-
-	return value;
-}
-
-/* this is a little ugly... */
-static char *
-songToFormatedString(const struct mpd_song *song,
-		     const char *format, const char ** last)
-{
-	char * ret = NULL;
-	const char *p;
-	bool hit_escape;
-	bool found = false;
-
-	/* we won't mess up format, we promise... */
-	for (p = format; *p != '\0'; )
-	{
-		if (p[0] == '|') {
-			++p;
-			if(!found) {
-				free(ret);
-				ret = NULL;
-			}
-			else {
-				p = skipFormatting(p);
-			}
-			continue;
-		}
-		
-		if (p[0] == '&') {
-			++p;
-			if(!found) {
-				p = skipFormatting(p);
-			}
-			else {
-				found = false;
-			}
-			continue;
-		}
-		
-		if (p[0] == '[')
-		{
-			char *t = songToFormatedString(song, p+1, &p);
-			if(t != NULL) {
-				ret = appendToString(ret, t, strlen(t));
-				free(t);
-				found = true;
-			}
-			continue;
-		}
-
-		if (p[0] == ']')
-		{
-			if(last) *last = p+1;
-			if (!found) {
-				free(ret);
-				ret = NULL;
-			}
-			return ret;
-		}
-
-		/* take care of escape sequences */
-		hit_escape = false;
-		while (p[0] == '\\')
-		{
-			char ltemp;
-			switch (p[1]) 
-			{
-				case 'a':	ltemp = '\a'; break;
-				case 'b':	ltemp = '\b'; break;
-				case 't':	ltemp = '\t'; break;
-				case 'n':	ltemp = '\n'; break;
-				case 'v':	ltemp = '\v'; break;
-				case 'f':	ltemp = '\f'; break;
-				case 'r':	ltemp = '\r'; break;
-				case '[':	ltemp = '['; break;
-				case ']':	ltemp = ']'; break;
-				default:	ltemp = p[0]; p-=1; break;
-			}
-			ret = appendToString(ret, &ltemp, 1);
-			p+=2;
-			hit_escape = true;
-		}
-
-		if (hit_escape)
-			continue;
-
-		/* pass-through non-escaped portions of the format string */
-		if (p[0] != '#' && p[0] != '%')
-		{
-			ret = appendToString(ret, p, 1);
-			++p;
-			continue;
-		}
-
-		/* let the escape character escape itself */
-		if (p[0] == '#' && p[1] != '\0')
-		{
-			ret = appendToString(ret, p+1, 1);
-			p+=2;
-			continue;
-		}
-
-		/* advance past the esc character */
-
-		/* find the extent of this format specifier (stop at \0, ' ', or esc) */
-		const char *end = p+1;
-		while(*end >= 'a' && *end <= 'z')
-		{
-			end++;
-		}
-
-		const size_t length = end - p + 1;
-
-		if (*end != '%') {
-			ret = appendToString(ret, p, length - 1);
-			p += length - 1;
-			continue;
-		}
-
-		char name[32];
-		if (length > (int)sizeof(name)) {
-			ret = appendToString(ret, p, length);
-			p += length;
-			continue;
-		}
-
-		memcpy(name, p + 1, length - 2);
-		name[length - 2] = 0;
-
-		const char *temp = song_value(song, name);
-		if (temp != NULL) {
-			if (*temp != 0)
-				found = true;
-			ret = appendToString(ret, temp, strlen(temp));
-		} else
-			ret = appendToString(ret, p, length);
-
-		/* advance past the specifier */
-		p += length;
-	}
-
-	if(last) *last = p;
-	return ret;
-}
-
 static void
 print_formatted_song(const struct mpd_song *song, const char * format)
 {
-	char * str = songToFormatedString(song, format, NULL);
+	char * str = format_song(song, format);
 
 	if(str) {
 		printf("%s", str);
diff --git a/src/util.h b/src/util.h
index 4f6a5c3..342bdc8 100644
--- a/src/util.h
+++ b/src/util.h
@@ -1,6 +1,6 @@
 /*
  * music player command (mpc)
- * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -31,8 +31,8 @@ struct mpd_song;
 #define SIMPLE_CMD(funcname, libmpdclient_funcname, ret) \
 int funcname(gcc_unused int argc, gcc_unused char **argv, \
 	     struct mpd_connection *conn) { \
-	libmpdclient_funcname(conn); \
-	my_finishCommand(conn); \
+	if (!libmpdclient_funcname(conn)) \
+		printErrorAndExit(conn); \
 	return ret; \
 }
 
diff --git a/test-driver b/test-driver
new file mode 100755
index 0000000..d306056
--- /dev/null
+++ b/test-driver
@@ -0,0 +1,139 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+#
+# 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, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='' # Red.
+  grn='' # Green.
+  lgn='' # Light green.
+  blu='' # Blue.
+  mgn='' # Magenta.
+  std=''     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  estatus=1
+fi
+
+case $estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/test/test_format.c b/test/test_format.c
new file mode 100644
index 0000000..38495dd
--- /dev/null
+++ b/test/test_format.c
@@ -0,0 +1,152 @@
+#include "song_format.h"
+
+#include <mpd/client.h>
+
+#include <check.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+static void
+feed_song(struct mpd_song *song, const char *name, const char *value)
+{
+	const struct mpd_pair pair = { name, value };
+	mpd_song_feed(song, &pair);
+}
+
+static struct mpd_song *
+construct_song(const char *file, ...)
+{
+	const struct mpd_pair pair = { "file", file };
+	struct mpd_song *song = mpd_song_begin(&pair);
+	assert(song != NULL);
+
+	va_list ap;
+	va_start(ap, file);
+	const char *name;
+	while ((name = va_arg(ap, const char *)) != NULL) {
+		const char *value = va_arg(ap, const char *);
+		assert(value != NULL);
+		feed_song(song, name, value);
+	}
+
+	return song;
+}
+
+static const char *const default_file = "foo.ogg";
+static const char *const default_artist = "Foo";
+static const char *const default_title = "Bar";
+static const char *const default_format =
+	"[%name%: &[%artist% - ]%title%]|%name%|[%artist% - ]%title%|%file%";
+
+static struct mpd_song *
+construct_default_song(void)
+{
+	return construct_song(default_file,
+			      "Artist", default_artist,
+			      "Title", default_title,
+			      NULL);
+}
+
+static void
+assert_format(const struct mpd_song *song, const char *format,
+	      const char *expected)
+{
+	char *p = format_song(song, format);
+	if (expected == NULL)
+		ck_assert_ptr_eq(p, NULL);
+	else
+		ck_assert_str_eq(p, expected);
+	free(p);
+}
+
+START_TEST(test_empty)
+{
+	struct mpd_song *song = construct_song("foo.ogg", NULL);
+	assert_format(song, "", NULL);
+	mpd_song_free(song);
+}
+END_TEST
+
+START_TEST(test_basic)
+{
+	struct mpd_song *song = construct_default_song();
+	assert_format(song, "%file%", default_file);
+	assert_format(song, "%artist%", default_artist);
+	assert_format(song, "%title%", default_title);
+	assert_format(song, "%albumartist%", "");
+	mpd_song_free(song);
+}
+END_TEST
+
+START_TEST(test_group)
+{
+	struct mpd_song *song = construct_default_song();
+	assert_format(song, "artist=['%artist%']", "artist='Foo'");
+	assert_format(song, "albumartist=['%albumartist%']", "albumartist=");
+	mpd_song_free(song);
+}
+END_TEST
+
+START_TEST(test_fallback)
+{
+	struct mpd_song *song = construct_default_song();
+	assert_format(song, "%artist%|%albumartist%", default_artist);
+	assert_format(song, "%albumartist%|%artist%", default_artist);
+	mpd_song_free(song);
+}
+END_TEST
+
+START_TEST(test_default)
+{
+	struct mpd_song *song = construct_song(default_file, NULL);
+	assert_format(song, default_format, default_file);
+
+	feed_song(song, "Name", "abc");
+	assert_format(song, default_format, "abc");
+
+	feed_song(song, "Title", default_title);
+	assert_format(song, default_format, "abc: Bar");
+
+	feed_song(song, "Artist", default_artist);
+	assert_format(song, default_format, "abc: Foo - Bar");
+
+	mpd_song_free(song);
+}
+END_TEST
+
+START_TEST(test_escape)
+{
+	struct mpd_song *song = construct_default_song();
+	assert_format(song, "\\a\\b\\t\\n\\v\\f\\r\\[\\]", "\a\b\t\n\v\f\r[]");
+	assert_format(song, "###%#[#]#|#&", "#%[]|&");
+	mpd_song_free(song);
+}
+END_TEST
+
+static Suite *
+create_suite(void)
+{
+	Suite *s = suite_create("format");
+	TCase *tc_core = tcase_create("Core");
+	tcase_add_test(tc_core, test_empty);
+	tcase_add_test(tc_core, test_basic);
+	tcase_add_test(tc_core, test_group);
+	tcase_add_test(tc_core, test_fallback);
+	tcase_add_test(tc_core, test_default);
+	tcase_add_test(tc_core, test_escape);
+	suite_add_tcase(s, tc_core);
+	return s;
+}
+
+int
+main(void)
+{
+	Suite *s = create_suite();
+	SRunner *sr = srunner_create(s);
+	srunner_run_all(sr, CK_NORMAL);
+	int number_failed = srunner_ntests_failed(sr);
+	srunner_free(sr);
+	return number_failed == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mpd/pkg-mpc.git



More information about the Pkg-mpd-commits mailing list