浏览代码

add forked-daapd server and all deps

Waldemar Brodkorb 13 年之前
父节点
当前提交
8732b26738

+ 25 - 0
package/confuse/Makefile

@@ -0,0 +1,25 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${TOPDIR}/rules.mk
+
+PKG_NAME:=		confuse
+PKG_VERSION:=		2.7
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		45932fdeeccbb9ef4228f1c1a25e9c8f
+PKG_DESCR:=		a configuration file parser library
+PKG_SECTION:=		libs
+PKG_URL:=		http://www.nongnu.org/confuse/
+PKG_SITES:=		http://savannah.nongnu.org/download/confuse/
+
+PKG_SUBPKGS:=		LIBCONFUSE
+
+include ${TOPDIR}/mk/package.mk
+
+$(eval $(call PKG_template,LIBCONFUSE,libconfuse,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+libconfuse-install:
+	${INSTALL_DIR} ${IDIR_LIBCONFUSE}/usr/lib
+	${CP} ${WRKINST}/usr/lib/libconfuse.so* ${IDIR_LIBCONFUSE}/usr/lib
+
+include ${TOPDIR}/mk/pkg-bottom.mk

+ 36 - 0
package/forked-daapd/Makefile

@@ -0,0 +1,36 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=		forked-daapd
+PKG_VERSION:=		0.16
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		cc35619babefea35db9ee22e6f1d036b
+PKG_DESCR:=		DAAPD server
+PKG_SECTION:=		multimedia
+PKG_DEPENDS:=		libunistring zlib libconfuse sqlite ffmpeg libgcrypt
+PKG_DEPENDS+=		libavahi libmxml libevent libavl libantlr3c alsa-lib
+PKG_DEPENDS+=		libsqlite libintl dbus
+PKG_BUILDDEP:=		libunistring zlib confuse avahi sqlite ffmpeg dbus
+PKG_BUILDDEP+=		mxml libevent libavl libantlr3c alsa-lib libgcrypt
+PKG_SITES:=		http://alioth.debian.org/~jblache/forked-daapd/
+
+PKG_CFLINE_FORKED_DAAPD:=	select ADK_KERNEL_INOTIFY_USER
+
+include $(TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,FORKED_DAAPD,forked-daapd,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+forked-daapd-install:
+	$(INSTALL_DIR) $(IDIR_FORKED_DAAPD)/etc
+	$(CP) ./files/forked-daapd.conf \
+		$(IDIR_FORKED_DAAPD)/etc
+	$(INSTALL_DIR) $(IDIR_FORKED_DAAPD)/usr/lib/forked-daapd
+	$(CP) $(WRKINST)/usr/lib/forked-daapd/*.so \
+		$(IDIR_FORKED_DAAPD)/usr/lib/forked-daapd
+	$(INSTALL_DIR) $(IDIR_FORKED_DAAPD)/usr/sbin
+	$(INSTALL_BIN) $(WRKINST)/usr/sbin/forked-daapd \
+		$(IDIR_FORKED_DAAPD)/usr/sbin
+
+include ${TOPDIR}/mk/pkg-bottom.mk

+ 54 - 0
package/forked-daapd/files/forked-daapd.conf

@@ -0,0 +1,54 @@
+
+general {
+	# Username
+	uid = "daapd"
+	logfile = "/var/log/forked-daapd.log"
+	# Database location
+	db_path = "/srv/music/.forked-daapd/songs3.db"
+	# Available levels: fatal, log, warning, info, debug, spam
+	loglevel = log
+	# Admin password for the non-existent web interface
+	admin_password = "unused"
+	# Enable/disable IPv6
+	ipv6 = no
+}
+
+# Library configuration
+library {
+	# Name of the library as displayed by the clients
+	# %h: hostname, %v: version
+	name = "My Music on %h"
+	# TCP port to listen on. Default port is 3689 (daap)
+	port = 3689
+	# Password for the library. Optional.
+#	password = ""
+
+	# Directories to index
+	directories = { "/srv/music" }
+	# Directories containing compilations
+	# Matches anywhere in the path (not a regexp, though)
+#	compilations = { "/compilations/" }
+
+	# Should iTunes metadata override ours?
+#	itunes_overrides = true
+
+	# Formats: mp4a, mp4v, mpeg, alac, flac, mpc, ogg, wma, wmal, wmav, aif, wav
+	# Formats that should never be transcoded
+#	no_transcode = { "alac", "mp4a" }
+	# Formats that should always be transcoded
+#	force_transcode = { "ogg", "flac" }
+}
+
+# Local audio output
+audio {
+	# AirTunes name - used in the speaker list in Remote
+	nickname = "Computer"
+	# Audio device name for local audio output
+#	card = "default"
+}
+
+# Airport Express device
+#apex "ApEx" {
+	# AirTunes password
+#	password = "s1kr3t"
+#}

+ 28 - 0
package/forked-daapd/files/forked-daapd.init

@@ -0,0 +1,28 @@
+#!/bin/sh
+#PKG forked-daapd
+#INIT 85
+
+. /etc/rc.conf
+
+case $1 in
+autostop) ;;
+autostart)
+	test x"${forked_daapd:-NO}" = x"NO" && exit 0
+	exec sh $0 start
+	;;
+start)
+	/usr/sbin/forked-daapd
+	;;
+stop)
+	kill $(pgrep -f /usr/sbin/forked-daapd)
+	;;
+restart)
+	sh $0 stop
+	sh $0 start
+	;;
+*)
+	echo "Usage: $0 {start | stop | restart}"
+	exit 1
+	;;
+esac
+exit $?

+ 7 - 0
package/forked-daapd/files/forked-daapd.postinst

@@ -0,0 +1,7 @@
+#!/bin/sh
+. $IPKG_INSTROOT/etc/functions.sh
+gid=$(get_next_gid)
+add_group daapd $gid
+add_user daapd $(get_next_uid) $gid
+add_rcconf forked_daapd forked_daapd NO
+

+ 10 - 0
package/forked-daapd/patches/patch-config_h_in

@@ -0,0 +1,10 @@
+--- forked-daapd-0.16.orig/config.h.in	2011-04-30 11:43:23.000000000 +0200
++++ forked-daapd-0.16/config.h.in	2011-05-10 14:39:41.000000000 +0200
+@@ -1,5 +1,7 @@
+ /* config.h.in.  Generated from configure.in by autoheader.  */
+ 
++#define pipe2(a,b) pipe(a)
++
+ /* Define to 1 if you have the <dirent.h> header file. */
+ #undef HAVE_DIRENT_H
+ 

+ 24 - 0
package/libantlr3c/Makefile

@@ -0,0 +1,24 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${TOPDIR}/rules.mk
+
+PKG_NAME:=		libantlr3c
+PKG_VERSION:=		3.2
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		674646e1d1bf5c6015435480cead725a
+PKG_DESCR:=		ANother Tool for Language Recognition
+PKG_SECTION:=		libs
+PKG_SITES:=		http://www.antlr.org/download/C/
+
+include ${TOPDIR}/mk/package.mk
+
+$(eval $(call PKG_template,LIBANTLR3C,libantlr3c,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+CONFIGURE_ENV+=		OPTIMFLAGS="$(TARGET_CFLAGS)"
+
+libantlr3c-install:
+	${INSTALL_DIR} ${IDIR_LIBANTLR3C}/usr/lib
+	${CP} ${WRKINST}/usr/lib/libantlr3c.so* ${IDIR_LIBANTLR3C}/usr/lib
+
+include ${TOPDIR}/mk/pkg-bottom.mk

+ 11 - 0
package/libantlr3c/patches/patch-antlr3config_h

@@ -0,0 +1,11 @@
+--- libantlr3c-3.2.orig/antlr3config.h	2009-09-23 22:50:45.000000000 +0200
++++ libantlr3c-3.2/antlr3config.h	2011-05-10 14:06:43.000000000 +0200
+@@ -5,7 +5,7 @@
+ /* #undef ANTLR3_NODEBUGGER */
+ 
+ /* Define if 64 bit mode required */
+-#define ANTLR3_USE_64BIT 1
++/* #undef ANTLR3_USE_64BIT */
+ 
+ /* Define to 1 if you have the `accept' function. */
+ #define HAVE_ACCEPT 1

+ 20 - 0
package/libantlr3c/patches/patch-configure

@@ -0,0 +1,20 @@
+--- libantlr3c-3.2.orig/configure	2009-12-11 23:55:07.000000000 +0100
++++ libantlr3c-3.2/configure	2011-05-10 14:08:20.000000000 +0200
+@@ -19533,7 +19533,7 @@ sparc*-*solaris*)
+ *)
+  CPPCMNTFLAGS=
+  CCFLAGS64=
+- OPTIMFLAGS="-O"
++ OPTIMFLAGS=""
+  if test x"$enable_debuginfo" = xyes; then
+   DEBUGFLAGS='-g'
+  fi
+@@ -19543,7 +19543,7 @@ esac
+  ;;
+ esac
+ 
+-CFLAGS="$CCFLAGS64 $CPPCMNTFLAGS $OPTIMFLAGS $DEBUGFLAGS $WARNFLAGS"
++CFLAGS="$CFLAGS $CCFLAGS64 $CPPCMNTFLAGS $OPTIMFLAGS $DEBUGFLAGS $WARNFLAGS"
+ { $as_echo "$as_me:$LINENO: result: $CFLAGS" >&5
+ $as_echo "$CFLAGS" >&6; }
+ 

+ 28 - 0
package/libavl/Makefile

@@ -0,0 +1,28 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${TOPDIR}/rules.mk
+
+PKG_NAME:=		libavl
+PKG_VERSION:=		0.3.5
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		882c68ea7f71876ca110f3b84d7ab12d
+PKG_DESCR:=		AVL library
+PKG_SECTION:=		libs
+PKG_SITES:=		http://libavl.sourcearchive.com/downloads/0.3.5/
+
+DISTFILES:=		$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
+WRKDIST=		$(WRKDIR)/avl-$(PKG_VERSION)
+
+include ${TOPDIR}/mk/package.mk
+
+$(eval $(call PKG_template,LIBAVL,libavl,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+MAKE_FILE:=		GNUmakefile
+CONFIG_STYLE:=		manual
+
+libavl-install:
+	${INSTALL_DIR} ${IDIR_LIBAVL}/usr/lib
+	${CP} ${WRKINST}/usr/lib/libavl.so* ${IDIR_LIBAVL}/usr/lib
+
+include ${TOPDIR}/mk/pkg-bottom.mk

+ 28 - 0
package/libavl/patches/patch-GNUmakefile

@@ -0,0 +1,28 @@
+--- avl-0.3.5.orig/GNUmakefile	2002-11-15 19:57:48.000000000 +0100
++++ avl-0.3.5/GNUmakefile	2011-05-10 13:52:58.000000000 +0200
+@@ -15,7 +15,7 @@ CFLAGS ?= -O2 -fomit-frame-pointer -pipe
+ #CFLAGS = -g -pg -a -pipe -march=i686 -Wall
+ #LDFLAGS = -s
+ 
+-prefix ?= /usr/local
++prefix ?= /usr
+ libdir ?= $(prefix)/lib
+ includedir ?= $(prefix)/include
+ includedir ?= /usr/include
+@@ -41,13 +41,13 @@ clean:
+ 
+ install: all
+ 	$(INSTALL) -d $(DESTDIR)$(libdir)
++	$(INSTALL) -d $(DESTDIR)$(includedir)
+ 	$(INSTALL) avl.h $(DESTDIR)$(includedir)
+-	$(INSTALL) $(LIBRARIES) $(DESTDIR)$(libdir)
+-	for i in $(LIBRARIES); do\
++	$(INSTALL) $(LIBRARY) $(DESTDIR)$(libdir)
++	for i in $(LIBRARY); do\
+ 		$(LN) -sf $$i $(DESTDIR)$(libdir)/$${i%.*};\
+ 		$(LN) -sf $${i%.*} $(DESTDIR)$(libdir)/$${i%.*.*};\
+ 	done
+-	-$(LDCONFIG)
+ 
+ .PHONY: clean install all
+ .PRECIOUS: %.h %.c

+ 26 - 0
package/libavl/patches/patch-GNUmakefile.orig

@@ -0,0 +1,26 @@
+--- avl-0.3.5.orig/GNUmakefile	2002-11-15 19:57:48.000000000 +0100
++++ avl-0.3.5/GNUmakefile	2011-05-10 13:51:44.000000000 +0200
+@@ -15,7 +15,7 @@ CFLAGS ?= -O2 -fomit-frame-pointer -pipe
+ #CFLAGS = -g -pg -a -pipe -march=i686 -Wall
+ #LDFLAGS = -s
+ 
+-prefix ?= /usr/local
++prefix ?= /usr
+ libdir ?= $(prefix)/lib
+ includedir ?= $(prefix)/include
+ includedir ?= /usr/include
+@@ -41,13 +41,13 @@ clean:
+ 
+ install: all
+ 	$(INSTALL) -d $(DESTDIR)$(libdir)
++	$(INSTALL) -d $(DESTDIR)$(includedir)
+ 	$(INSTALL) avl.h $(DESTDIR)$(includedir)
+ 	$(INSTALL) $(LIBRARIES) $(DESTDIR)$(libdir)
+ 	for i in $(LIBRARIES); do\
+ 		$(LN) -sf $$i $(DESTDIR)$(libdir)/$${i%.*};\
+ 		$(LN) -sf $${i%.*} $(DESTDIR)$(libdir)/$${i%.*.*};\
+ 	done
+-	-$(LDCONFIG)
+ 
+ .PHONY: clean install all
+ .PRECIOUS: %.h %.c

+ 23 - 0
package/libunistring/Makefile

@@ -0,0 +1,23 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${TOPDIR}/rules.mk
+
+PKG_NAME:=		libunistring
+PKG_VERSION:=		0.9.3
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		db8eca3b64163abadf8c40e5cecc261f
+PKG_DESCR:=		functions for manipulating Unicode strings
+PKG_SECTION:=		libs
+PKG_URL:=		http://www.gnu.org/software/libunistring/
+PKG_SITES:=		${MASTER_SITE_GNU:=libunistring/}
+
+include ${TOPDIR}/mk/package.mk
+
+$(eval $(call PKG_template,LIBUNISTRING,libunistring,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+libunistring-install:
+	${INSTALL_DIR} ${IDIR_LIBUNISTRING}/usr/lib
+	${CP} ${WRKINST}/usr/lib/libunistring.so* ${IDIR_LIBUNISTRING}/usr/lib
+
+include ${TOPDIR}/mk/pkg-bottom.mk

+ 27 - 0
package/mxml/Makefile

@@ -0,0 +1,27 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${TOPDIR}/rules.mk
+
+PKG_NAME:=		mxml
+PKG_VERSION:=		2.6
+PKG_RELEASE:=		1
+PKG_MD5SUM:=		68977789ae64985dddbd1a1a1652642e
+PKG_DESCR:=		lightweight XML library
+PKG_SECTION:=		libs
+PKG_URL:=		http://www.minixml.org/
+PKG_SITES:=		http://ftp.easysw.com/pub/mxml/2.6/
+
+PKG_SUBPKGS:=		LIBMXML
+
+include ${TOPDIR}/mk/package.mk
+
+$(eval $(call PKG_template,LIBMXML,libmxml,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+FAKE_FLAGS+=		BUILDROOT=${WRKINST}
+
+libmxml-install:
+	${INSTALL_DIR} ${IDIR_LIBMXML}/usr/lib
+	${CP} ${WRKINST}/usr/lib/libmxml.so* ${IDIR_LIBMXML}/usr/lib
+
+include ${TOPDIR}/mk/pkg-bottom.mk

+ 103 - 0
package/mxml/patches/patch-Makefile_in

@@ -0,0 +1,103 @@
+--- mxml-2.6.orig/Makefile.in	2008-12-06 05:20:38.000000000 +0100
++++ mxml-2.6/Makefile.in	2011-05-10 13:06:25.000000000 +0200
+@@ -88,7 +88,7 @@ PUBLIBOBJS	=	mxml-attr.o mxml-entity.o m
+ 			mxml-node.o mxml-search.o mxml-set.o
+ LIBOBJS		=	$(PUBLIBOBJS) mxml-private.o mxml-string.o
+ OBJS		=	mxmldoc.o testmxml.o $(LIBOBJS)
+-TARGETS		=	$(LIBMXML) mxmldoc testmxml mxml.xml doc/mxml.man
++TARGETS		=	$(LIBMXML)
+ 
+ 
+ #
+@@ -133,21 +133,21 @@ clang:
+ # Install everything...
+ #
+ 
+-install:	$(TARGETS) install-$(LIBMXML) install-libmxml.a
++install:	$(TARGETS) install-$(LIBMXML)
+ 	$(INSTALL_DIR) $(BUILDROOT)$(bindir)
+-	$(INSTALL_BIN) mxmldoc $(BUILDROOT)$(bindir) 
+-	$(INSTALL_DIR) $(BUILDROOT)$(docdir)
+-	for file in $(DOCFILES); do \
+-		$(INSTALL_MAN) $$file $(BUILDROOT)$(docdir); \
+-	done
++	#$(INSTALL_BIN) mxmldoc $(BUILDROOT)$(bindir) 
++	#$(INSTALL_DIR) $(BUILDROOT)$(docdir)
++	#for file in $(DOCFILES); do \
++	#	$(INSTALL_MAN) $$file $(BUILDROOT)$(docdir); \
++	#done
+ 	$(INSTALL_DIR) $(BUILDROOT)$(includedir)
+ 	$(INSTALL_DATA) mxml.h $(BUILDROOT)$(includedir)
+ 	$(INSTALL_DIR) $(BUILDROOT)$(libdir)/pkgconfig
+ 	$(INSTALL_DATA) mxml.pc $(BUILDROOT)$(libdir)/pkgconfig
+-	$(INSTALL_DIR) $(BUILDROOT)$(mandir)/man1
+-	$(INSTALL_MAN) doc/mxmldoc.man $(BUILDROOT)$(mandir)/man1/mxmldoc.1
+-	$(INSTALL_DIR) $(BUILDROOT)$(mandir)/man3
+-	$(INSTALL_MAN) doc/mxml.man $(BUILDROOT)$(mandir)/man3/mxml.3
++	#$(INSTALL_DIR) $(BUILDROOT)$(mandir)/man1
++	#$(INSTALL_MAN) doc/mxmldoc.man $(BUILDROOT)$(mandir)/man1/mxmldoc.1
++	#$(INSTALL_DIR) $(BUILDROOT)$(mandir)/man3
++	#$(INSTALL_MAN) doc/mxml.man $(BUILDROOT)$(mandir)/man3/mxml.3
+ 
+ install-libmxml.a:
+ 	$(INSTALL_DIR) $(BUILDROOT)$(libdir)
+@@ -294,7 +294,7 @@ mxmldoc:	$(LIBMXML) mxmldoc.o
+ 	$(CC) -L. $(LDFLAGS) -o $@ mxmldoc.o -lmxml $(LIBS)
+ 
+ mxmldoc-static:	libmxml.a mxmldoc.o
+-	$(CC) $(LDFLAGS) -o $@ mxmldoc.o libmxml.a $(LIBS)
++	$(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ mxmldoc.o libmxml.a $(LIBS)
+ 
+ mxmldoc.o:	mxml.h
+ 
+@@ -304,28 +304,7 @@ mxmldoc.o:	mxml.h
+ #
+ 
+ testmxml:	libmxml.a testmxml.o
+-	$(CC) $(LDFLAGS) -o $@ testmxml.o libmxml.a $(LIBS)
+-	@echo Testing library...
+-	./testmxml test.xml >temp1.xml 2>temp1s.xml
+-	./testmxml temp1.xml >temp2.xml 2>temp2s.xml
+-	@if cmp temp1.xml temp2.xml; then \
+-		echo Stdio file test passed!; \
+-		$(RM) temp2.xml temp2s.xml; \
+-	else \
+-		echo Stdio file test failed!; \
+-	fi
+-	@if cmp temp1.xml temp1s.xml; then \
+-		echo String test passed!; \
+-		$(RM) temp1.xml temp1s.xml; \
+-	else \
+-		echo String test failed!; \
+-	fi
+-	@if cmp test.xml test.xmlfd; then \
+-		echo File descriptor test passed!; \
+-		$(RM) test.xmlfd; \
+-	else \
+-		echo File descriptor test failed!; \
+-	fi
++	$(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ testmxml.o libmxml.a $(LIBS)
+ 
+ testmxml.o:	mxml.h
+ 
+@@ -336,19 +315,7 @@ testmxml.o:	mxml.h
+ 
+ mxml.xml:	mxmldoc-static mxml.h $(PUBLIBOBJS:.o=.c)
+ 	$(RM) mxml.xml
+-	./mxmldoc-static --header doc/reference.heading mxml.xml mxml.h $(PUBLIBOBJS:.o=.c) >doc/reference.html
+-	if test "x`uname`" = xDarwin; then \
+-		./mxmldoc-static --docset org.minixml.docset \
+-			--docversion @VERSION@ --feedname minixml.org \
+-			--feedurl http://www.minixml.org/org.minixml.atom \
+-			--header doc/docset.header --intro doc/docset.intro \
+-			--css doc/docset.css --title "Mini-XML API Reference" \
+-			mxml.xml || exit 1; \
+-		/Developer/usr/bin/docsetutil package --output org.minixml.xar \
+-			--atom org.minixml.atom \
+-			--download-url http://www.minixml.org/org.minixml.xar \
+-			org.minixml.docset || exit 1; \
+-	fi
++	#./mxmldoc-static --header doc/reference.heading mxml.xml mxml.h $(PUBLIBOBJS:.o=.c) >doc/reference.html
+ 
+ valgrind:	mxmldoc-static
+ 	$(RM) valgrind.xml

+ 91 - 0
package/mxml/patches/patch-Makefile_in.orig

@@ -0,0 +1,91 @@
+--- mxml-2.6.orig/Makefile.in	2008-12-06 05:20:38.000000000 +0100
++++ mxml-2.6/Makefile.in	2011-05-10 13:05:50.000000000 +0200
+@@ -88,7 +88,7 @@ PUBLIBOBJS	=	mxml-attr.o mxml-entity.o m
+ 			mxml-node.o mxml-search.o mxml-set.o
+ LIBOBJS		=	$(PUBLIBOBJS) mxml-private.o mxml-string.o
+ OBJS		=	mxmldoc.o testmxml.o $(LIBOBJS)
+-TARGETS		=	$(LIBMXML) mxmldoc testmxml mxml.xml doc/mxml.man
++TARGETS		=	$(LIBMXML)
+ 
+ 
+ #
+@@ -133,13 +133,13 @@ clang:
+ # Install everything...
+ #
+ 
+-install:	$(TARGETS) install-$(LIBMXML) install-libmxml.a
++install:	$(TARGETS) install-$(LIBMXML)
+ 	$(INSTALL_DIR) $(BUILDROOT)$(bindir)
+-	$(INSTALL_BIN) mxmldoc $(BUILDROOT)$(bindir) 
+-	$(INSTALL_DIR) $(BUILDROOT)$(docdir)
+-	for file in $(DOCFILES); do \
+-		$(INSTALL_MAN) $$file $(BUILDROOT)$(docdir); \
+-	done
++	#$(INSTALL_BIN) mxmldoc $(BUILDROOT)$(bindir) 
++	#$(INSTALL_DIR) $(BUILDROOT)$(docdir)
++	#for file in $(DOCFILES); do \
++	#	$(INSTALL_MAN) $$file $(BUILDROOT)$(docdir); \
++	#done
+ 	$(INSTALL_DIR) $(BUILDROOT)$(includedir)
+ 	$(INSTALL_DATA) mxml.h $(BUILDROOT)$(includedir)
+ 	$(INSTALL_DIR) $(BUILDROOT)$(libdir)/pkgconfig
+@@ -294,7 +294,7 @@ mxmldoc:	$(LIBMXML) mxmldoc.o
+ 	$(CC) -L. $(LDFLAGS) -o $@ mxmldoc.o -lmxml $(LIBS)
+ 
+ mxmldoc-static:	libmxml.a mxmldoc.o
+-	$(CC) $(LDFLAGS) -o $@ mxmldoc.o libmxml.a $(LIBS)
++	$(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ mxmldoc.o libmxml.a $(LIBS)
+ 
+ mxmldoc.o:	mxml.h
+ 
+@@ -304,28 +304,7 @@ mxmldoc.o:	mxml.h
+ #
+ 
+ testmxml:	libmxml.a testmxml.o
+-	$(CC) $(LDFLAGS) -o $@ testmxml.o libmxml.a $(LIBS)
+-	@echo Testing library...
+-	./testmxml test.xml >temp1.xml 2>temp1s.xml
+-	./testmxml temp1.xml >temp2.xml 2>temp2s.xml
+-	@if cmp temp1.xml temp2.xml; then \
+-		echo Stdio file test passed!; \
+-		$(RM) temp2.xml temp2s.xml; \
+-	else \
+-		echo Stdio file test failed!; \
+-	fi
+-	@if cmp temp1.xml temp1s.xml; then \
+-		echo String test passed!; \
+-		$(RM) temp1.xml temp1s.xml; \
+-	else \
+-		echo String test failed!; \
+-	fi
+-	@if cmp test.xml test.xmlfd; then \
+-		echo File descriptor test passed!; \
+-		$(RM) test.xmlfd; \
+-	else \
+-		echo File descriptor test failed!; \
+-	fi
++	$(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ testmxml.o libmxml.a $(LIBS)
+ 
+ testmxml.o:	mxml.h
+ 
+@@ -336,19 +315,7 @@ testmxml.o:	mxml.h
+ 
+ mxml.xml:	mxmldoc-static mxml.h $(PUBLIBOBJS:.o=.c)
+ 	$(RM) mxml.xml
+-	./mxmldoc-static --header doc/reference.heading mxml.xml mxml.h $(PUBLIBOBJS:.o=.c) >doc/reference.html
+-	if test "x`uname`" = xDarwin; then \
+-		./mxmldoc-static --docset org.minixml.docset \
+-			--docversion @VERSION@ --feedname minixml.org \
+-			--feedurl http://www.minixml.org/org.minixml.atom \
+-			--header doc/docset.header --intro doc/docset.intro \
+-			--css doc/docset.css --title "Mini-XML API Reference" \
+-			mxml.xml || exit 1; \
+-		/Developer/usr/bin/docsetutil package --output org.minixml.xar \
+-			--atom org.minixml.atom \
+-			--download-url http://www.minixml.org/org.minixml.xar \
+-			org.minixml.docset || exit 1; \
+-	fi
++	#./mxmldoc-static --header doc/reference.heading mxml.xml mxml.h $(PUBLIBOBJS:.o=.c) >doc/reference.html
+ 
+ valgrind:	mxmldoc-static
+ 	$(RM) valgrind.xml

+ 30 - 0
package/mxml/patches/patch-configure

@@ -0,0 +1,30 @@
+--- mxml-2.6.orig/configure	2009-04-18 19:05:52.000000000 +0200
++++ mxml-2.6/configure	2011-05-10 12:55:05.000000000 +0200
+@@ -1778,8 +1778,8 @@ else
+ fi
+ 
+ 
+-uname=`uname`
+-uversion=`uname -r | sed -e '1,$s/[^0-9]//g'`
++uname=Linux
++uversion=2.6
+ if test x$uname = xIRIX64; then
+ 	uname="IRIX"
+ fi
+@@ -3479,15 +3479,7 @@ fi
+ 
+ 
+ 
+-case "$uname" in
+-        Darwin* | *BSD*)
+-                ARFLAGS="-rcv"
+-                ;;
+-        *)
+-                ARFLAGS="crvs"
+-                ;;
+-esac
+-
++ARFLAGS="crvs"
+ 
+ 
+ 

+ 1638 - 0
package/mxml/patches/patch-doc_reference_html

@@ -0,0 +1,1638 @@
+--- mxml-2.6.orig/doc/reference.html	2009-03-19 06:38:52.000000000 +0100
++++ mxml-2.6/doc/reference.html	2011-05-10 12:57:21.000000000 +0200
+@@ -1,1635 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+-<html>
+-<head>
+-<title>Documentation</title>
+-<meta name="creator" content="Mini-XML v2.6">
+-<style type="text/css"><!--
+-body, p, h1, h2, h3, h4 {
+-  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+-}
+-div.body h1 {
+-  font-size: 250%;
+-  font-weight: bold;
+-  margin: 0;
+-}
+-div.body h2 {
+-  font-size: 250%;
+-  margin-top: 1.5em;
+-}
+-div.body h3 {
+-  font-size: 150%;
+-  margin-bottom: 0.5em;
+-  margin-top: 1.5em;
+-}
+-div.body h4 {
+-  font-size: 110%;
+-  margin-bottom: 0.5em;
+-  margin-top: 1.5em;
+-}
+-div.body h5 {
+-  font-size: 100%;
+-  margin-bottom: 0.5em;
+-  margin-top: 1.5em;
+-}
+-div.contents {
+-  background: #e8e8e8;
+-  border: solid thin black;
+-  padding: 10px;
+-}
+-div.contents h1 {
+-  font-size: 110%;
+-}
+-div.contents h2 {
+-  font-size: 100%;
+-}
+-div.contents ul.contents {
+-  font-size: 80%;
+-}
+-.class {
+-  border-bottom: solid 2px gray;
+-}
+-.constants {
+-}
+-.description {
+-  margin-top: 0.5em;
+-}
+-.discussion {
+-}
+-.enumeration {
+-  border-bottom: solid 2px gray;
+-}
+-.function {
+-  border-bottom: solid 2px gray;
+-  margin-bottom: 0;
+-}
+-.members {
+-}
+-.method {
+-}
+-.parameters {
+-}
+-.returnvalue {
+-}
+-.struct {
+-  border-bottom: solid 2px gray;
+-}
+-.typedef {
+-  border-bottom: solid 2px gray;
+-}
+-.union {
+-  border-bottom: solid 2px gray;
+-}
+-.variable {
+-}
+-code, p.code, pre, ul.code li {
+-  font-family: monaco, courier, monospace;
+-  font-size: 90%;
+-}
+-a:link, a:visited {
+-  text-decoration: none;
+-}
+-span.info {
+-  background: black;
+-  border: solid thin black;
+-  color: white;
+-  font-size: 80%;
+-  font-style: italic;
+-  font-weight: bold;
+-  white-space: nowrap;
+-}
+-h3 span.info, h4 span.info {
+-  float: right;
+-  font-size: 100%;
+-}
+-ul.code, ul.contents, ul.subcontents {
+-  list-style-type: none;
+-  margin: 0;
+-  padding-left: 0;
+-}
+-ul.code li {
+-  margin: 0;
+-}
+-ul.contents > li {
+-  margin-top: 1em;
+-}
+-ul.contents li ul.code, ul.contents li ul.subcontents {
+-  padding-left: 2em;
+-}
+-div.body dl {
+-  margin-top: 0;
+-}
+-div.body dt {
+-  font-style: italic;
+-  margin-top: 0;
+-}
+-div.body dd {
+-  margin-bottom: 0.5em;
+-}
+-h1.title {
+-}
+-h2.title {
+-  border-bottom: solid 2px black;
+-}
+-h3.title {
+-  border-bottom: solid 2px black;
+-}
+---></style>
+-</head>
+-<body>
+-<div class='body'>
+-<h1 align='right'><a name='REFERENCE'><img src="C.gif" align="right"
+-hspace="10" width="100" height="100" alt="C"></a>Library
+-Reference</h1>
+-
+-<h2 class="title">Contents</h2>
+-<ul class="contents">
+-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+-<li><a href="#mxmlAdd" title="Add a node to a tree.">mxmlAdd</a></li>
+-<li><a href="#mxmlDelete" title="Delete a node and all of its children.">mxmlDelete</a></li>
+-<li><a href="#mxmlElementDeleteAttr" title="Delete an attribute.">mxmlElementDeleteAttr</a></li>
+-<li><a href="#mxmlElementGetAttr" title="Get an attribute.">mxmlElementGetAttr</a></li>
+-<li><a href="#mxmlElementSetAttr" title="Set an attribute.">mxmlElementSetAttr</a></li>
+-<li><a href="#mxmlElementSetAttrf" title="Set an attribute with a formatted value.">mxmlElementSetAttrf</a></li>
+-<li><a href="#mxmlEntityAddCallback" title="Add a callback to convert entities to Unicode.">mxmlEntityAddCallback</a></li>
+-<li><a href="#mxmlEntityGetName" title="Get the name that corresponds to the character value.">mxmlEntityGetName</a></li>
+-<li><a href="#mxmlEntityGetValue" title="Get the character corresponding to a named entity.">mxmlEntityGetValue</a></li>
+-<li><a href="#mxmlEntityRemoveCallback" title="Remove a callback.">mxmlEntityRemoveCallback</a></li>
+-<li><a href="#mxmlFindElement" title="Find the named element.">mxmlFindElement</a></li>
+-<li><a href="#mxmlIndexDelete" title="Delete an index.">mxmlIndexDelete</a></li>
+-<li><a href="#mxmlIndexEnum" title="Return the next node in the index.">mxmlIndexEnum</a></li>
+-<li><a href="#mxmlIndexFind" title="Find the next matching node.">mxmlIndexFind</a></li>
+-<li><a href="#mxmlIndexNew" title="Create a new index.">mxmlIndexNew</a></li>
+-<li><a href="#mxmlIndexReset" title="Reset the enumeration/find pointer in the index and
+-return the first node in the index.">mxmlIndexReset</a></li>
+-<li><a href="#mxmlLoadFd" title="Load a file descriptor into an XML node tree.">mxmlLoadFd</a></li>
+-<li><a href="#mxmlLoadFile" title="Load a file into an XML node tree.">mxmlLoadFile</a></li>
+-<li><a href="#mxmlLoadString" title="Load a string into an XML node tree.">mxmlLoadString</a></li>
+-<li><a href="#mxmlNewCDATA" title="Create a new CDATA node.">mxmlNewCDATA</a></li>
+-<li><a href="#mxmlNewCustom" title="Create a new custom data node.">mxmlNewCustom</a></li>
+-<li><a href="#mxmlNewElement" title="Create a new element node.">mxmlNewElement</a></li>
+-<li><a href="#mxmlNewInteger" title="Create a new integer node.">mxmlNewInteger</a></li>
+-<li><a href="#mxmlNewOpaque" title="Create a new opaque string.">mxmlNewOpaque</a></li>
+-<li><a href="#mxmlNewReal" title="Create a new real number node.">mxmlNewReal</a></li>
+-<li><a href="#mxmlNewText" title="Create a new text fragment node.">mxmlNewText</a></li>
+-<li><a href="#mxmlNewTextf" title="Create a new formatted text fragment node.">mxmlNewTextf</a></li>
+-<li><a href="#mxmlNewXML" title="Create a new XML document tree.">mxmlNewXML</a></li>
+-<li><a href="#mxmlRelease" title="Release a node.">mxmlRelease</a></li>
+-<li><a href="#mxmlRemove" title="Remove a node from its parent.">mxmlRemove</a></li>
+-<li><a href="#mxmlRetain" title="Retain a node.">mxmlRetain</a></li>
+-<li><a href="#mxmlSAXLoadFd" title="Load a file descriptor into an XML node tree
+-using a SAX callback.">mxmlSAXLoadFd</a></li>
+-<li><a href="#mxmlSAXLoadFile" title="Load a file into an XML node tree
+-using a SAX callback.">mxmlSAXLoadFile</a></li>
+-<li><a href="#mxmlSAXLoadString" title="Load a string into an XML node tree
+-using a SAX callback.">mxmlSAXLoadString</a></li>
+-<li><a href="#mxmlSaveAllocString" title="Save an XML node tree to an allocated string.">mxmlSaveAllocString</a></li>
+-<li><a href="#mxmlSaveFd" title="Save an XML tree to a file descriptor.">mxmlSaveFd</a></li>
+-<li><a href="#mxmlSaveFile" title="Save an XML tree to a file.">mxmlSaveFile</a></li>
+-<li><a href="#mxmlSaveString" title="Save an XML node tree to a string.">mxmlSaveString</a></li>
+-<li><a href="#mxmlSetCDATA" title="Set the element name of a CDATA node.">mxmlSetCDATA</a></li>
+-<li><a href="#mxmlSetCustom" title="Set the data and destructor of a custom data node.">mxmlSetCustom</a></li>
+-<li><a href="#mxmlSetCustomHandlers" title="Set the handling functions for custom data.">mxmlSetCustomHandlers</a></li>
+-<li><a href="#mxmlSetElement" title="Set the name of an element node.">mxmlSetElement</a></li>
+-<li><a href="#mxmlSetErrorCallback" title="Set the error message callback.">mxmlSetErrorCallback</a></li>
+-<li><a href="#mxmlSetInteger" title="Set the value of an integer node.">mxmlSetInteger</a></li>
+-<li><a href="#mxmlSetOpaque" title="Set the value of an opaque node.">mxmlSetOpaque</a></li>
+-<li><a href="#mxmlSetReal" title="Set the value of a real number node.">mxmlSetReal</a></li>
+-<li><a href="#mxmlSetText" title="Set the value of a text node.">mxmlSetText</a></li>
+-<li><a href="#mxmlSetTextf" title="Set the value of a text node to a formatted string.">mxmlSetTextf</a></li>
+-<li><a href="#mxmlSetWrapMargin" title="Set the the wrap margin when saving XML data.">mxmlSetWrapMargin</a></li>
+-<li><a href="#mxmlWalkNext" title="Walk to the next logical node in the tree.">mxmlWalkNext</a></li>
+-<li><a href="#mxmlWalkPrev" title="Walk to the previous logical node in the tree.">mxmlWalkPrev</a></li>
+-</ul></li>
+-<li><a href="#TYPES">Data Types</a><ul class="code">
+-	<li><a href="#mxml_attr_t" title="An XML element attribute value.">mxml_attr_t</a></li>
+-	<li><a href="#mxml_custom_destroy_cb_t" title="Custom data destructor">mxml_custom_destroy_cb_t</a></li>
+-	<li><a href="#mxml_custom_load_cb_t" title="Custom data load callback function">mxml_custom_load_cb_t</a></li>
+-	<li><a href="#mxml_custom_save_cb_t" title="Custom data save callback function">mxml_custom_save_cb_t</a></li>
+-	<li><a href="#mxml_custom_t" title="An XML custom value. ">mxml_custom_t</a></li>
+-	<li><a href="#mxml_element_t" title="An XML element value.">mxml_element_t</a></li>
+-	<li><a href="#mxml_entity_cb_t" title="Entity callback function">mxml_entity_cb_t</a></li>
+-	<li><a href="#mxml_error_cb_t" title="Error callback function">mxml_error_cb_t</a></li>
+-	<li><a href="#mxml_index_t" title="An XML node index.">mxml_index_t</a></li>
+-	<li><a href="#mxml_load_cb_t" title="Load callback function">mxml_load_cb_t</a></li>
+-	<li><a href="#mxml_node_t" title="An XML node.">mxml_node_t</a></li>
+-	<li><a href="#mxml_save_cb_t" title="Save callback function">mxml_save_cb_t</a></li>
+-	<li><a href="#mxml_sax_cb_t" title="SAX callback function">mxml_sax_cb_t</a></li>
+-	<li><a href="#mxml_sax_event_t" title="SAX event type.">mxml_sax_event_t</a></li>
+-	<li><a href="#mxml_text_t" title="An XML text value.">mxml_text_t</a></li>
+-	<li><a href="#mxml_type_t" title="The XML node type.">mxml_type_t</a></li>
+-	<li><a href="#mxml_value_t" title="An XML node value.">mxml_value_t</a></li>
+-</ul></li>
+-<li><a href="#STRUCTURES">Structures</a><ul class="code">
+-	<li><a href="#mxml_attr_s" title="An XML element attribute value.">mxml_attr_s</a></li>
+-	<li><a href="#mxml_custom_s" title="An XML custom value. ">mxml_custom_s</a></li>
+-	<li><a href="#mxml_element_s" title="An XML element value.">mxml_element_s</a></li>
+-	<li><a href="#mxml_index_s" title="An XML node index.">mxml_index_s</a></li>
+-	<li><a href="#mxml_node_s" title="An XML node.">mxml_node_s</a></li>
+-	<li><a href="#mxml_text_s" title="An XML text value.">mxml_text_s</a></li>
+-</ul></li>
+-<li><a href="#UNIONS">Unions</a><ul class="code">
+-	<li><a href="#mxml_value_u" title="An XML node value.">mxml_value_u</a></li>
+-</ul></li>
+-<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
+-	<li><a href="#mxml_sax_event_e" title="SAX event type.">mxml_sax_event_e</a></li>
+-	<li><a href="#mxml_type_e" title="The XML node type.">mxml_type_e</a></li>
+-</ul></li>
+-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+-<h3 class="function"><a name="mxmlAdd">mxmlAdd</a></h3>
+-<p class="description">Add a node to a tree.</p>
+-<p class="code">
+-void mxmlAdd (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int where,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *child,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node</dd>
+-<dt>where</dt>
+-<dd class="description">Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER</dd>
+-<dt>child</dt>
+-<dd class="description">Child node for where or MXML_ADD_TO_PARENT</dd>
+-<dt>node</dt>
+-<dd class="description">Node to add</dd>
+-</dl>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">Adds the specified node to the parent. If the child argument is not
+-NULL, puts the new node before or after the specified child depending
+-on the value of the where argument. If the child argument is NULL,
+-puts the new node at the beginning of the child list (MXML_ADD_BEFORE)
+-or at the end of the child list (MXML_ADD_AFTER). The constant
+-MXML_ADD_TO_PARENT can be used to specify a NULL child pointer.</p>
+-<h3 class="function"><a name="mxmlDelete">mxmlDelete</a></h3>
+-<p class="description">Delete a node and all of its children.</p>
+-<p class="code">
+-void mxmlDelete (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to delete</dd>
+-</dl>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">If the specified node has a parent, this function first removes the
+-node from its parent using the mxmlRemove() function.</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.4&nbsp;</span><a name="mxmlElementDeleteAttr">mxmlElementDeleteAttr</a></h3>
+-<p class="description">Delete an attribute.</p>
+-<p class="code">
+-void mxmlElementDeleteAttr (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Element</dd>
+-<dt>name</dt>
+-<dd class="description">Attribute name</dd>
+-</dl>
+-<h3 class="function"><a name="mxmlElementGetAttr">mxmlElementGetAttr</a></h3>
+-<p class="description">Get an attribute.</p>
+-<p class="code">
+-const char *mxmlElementGetAttr (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Element node</dd>
+-<dt>name</dt>
+-<dd class="description">Name of attribute</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Attribute value or NULL</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">This function returns NULL if the node is not an element or the
+-named attribute does not exist.</p>
+-<h3 class="function"><a name="mxmlElementSetAttr">mxmlElementSetAttr</a></h3>
+-<p class="description">Set an attribute.</p>
+-<p class="code">
+-void mxmlElementSetAttr (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Element node</dd>
+-<dt>name</dt>
+-<dd class="description">Name of attribute</dd>
+-<dt>value</dt>
+-<dd class="description">Attribute value</dd>
+-</dl>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">If the named attribute already exists, the value of the attribute
+-is replaced by the new string value. The string value is copied
+-into the element node. This function does nothing if the node is
+-not an element.</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlElementSetAttrf">mxmlElementSetAttrf</a></h3>
+-<p class="description">Set an attribute with a formatted value.</p>
+-<p class="code">
+-void mxmlElementSetAttrf (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;...<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Element node</dd>
+-<dt>name</dt>
+-<dd class="description">Name of attribute</dd>
+-<dt>format</dt>
+-<dd class="description">Printf-style attribute value</dd>
+-<dt>...</dt>
+-<dd class="description">Additional arguments as needed</dd>
+-</dl>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">If the named attribute already exists, the value of the attribute
+-is replaced by the new formatted string. The formatted string value is
+-copied into the element node. This function does nothing if the node
+-is not an element.
+-
+-</p>
+-<h3 class="function"><a name="mxmlEntityAddCallback">mxmlEntityAddCallback</a></h3>
+-<p class="description">Add a callback to convert entities to Unicode.</p>
+-<p class="code">
+-int mxmlEntityAddCallback (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_entity_cb_t">mxml_entity_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>cb</dt>
+-<dd class="description">Callback function to add</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h3 class="function"><a name="mxmlEntityGetName">mxmlEntityGetName</a></h3>
+-<p class="description">Get the name that corresponds to the character value.</p>
+-<p class="code">
+-const char *mxmlEntityGetName (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int val<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>val</dt>
+-<dd class="description">Character value</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Entity name or NULL</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">If val does not need to be represented by a named entity, NULL is returned.</p>
+-<h3 class="function"><a name="mxmlEntityGetValue">mxmlEntityGetValue</a></h3>
+-<p class="description">Get the character corresponding to a named entity.</p>
+-<p class="code">
+-int mxmlEntityGetValue (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>name</dt>
+-<dd class="description">Entity name</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Character value or -1 on error</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The entity name can also be a numeric constant. -1 is returned if the
+-name is not known.</p>
+-<h3 class="function"><a name="mxmlEntityRemoveCallback">mxmlEntityRemoveCallback</a></h3>
+-<p class="description">Remove a callback.</p>
+-<p class="code">
+-void mxmlEntityRemoveCallback (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_entity_cb_t">mxml_entity_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>cb</dt>
+-<dd class="description">Callback function to remove</dd>
+-</dl>
+-<h3 class="function"><a name="mxmlFindElement">mxmlFindElement</a></h3>
+-<p class="description">Find the named element.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlFindElement (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *attr,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *value,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int descend<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Current node</dd>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>name</dt>
+-<dd class="description">Element name or NULL for any</dd>
+-<dt>attr</dt>
+-<dd class="description">Attribute name, or NULL for none</dd>
+-<dt>value</dt>
+-<dd class="description">Attribute value, or NULL for any</dd>
+-<dt>descend</dt>
+-<dd class="description">Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Element node or NULL</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The search is constrained by the name, attribute name, and value; any
+-NULL names or values are treated as wildcards, so different kinds of
+-searches can be implemented by looking for all elements of a given name
+-or all elements with a specific attribute. The descend argument determines
+-whether the search descends into child nodes; normally you will use
+-MXML_DESCEND_FIRST for the initial search and MXML_NO_DESCEND to find
+-additional direct descendents of the node. The top node argument
+-constrains the search to a particular node's children.</p>
+-<h3 class="function"><a name="mxmlIndexDelete">mxmlIndexDelete</a></h3>
+-<p class="description">Delete an index.</p>
+-<p class="code">
+-void mxmlIndexDelete (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_index_t">mxml_index_t</a> *ind<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>ind</dt>
+-<dd class="description">Index to delete</dd>
+-</dl>
+-<h3 class="function"><a name="mxmlIndexEnum">mxmlIndexEnum</a></h3>
+-<p class="description">Return the next node in the index.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlIndexEnum (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_index_t">mxml_index_t</a> *ind<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>ind</dt>
+-<dd class="description">Index to enumerate</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Next node or NULL if there is none</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">Nodes are returned in the sorted order of the index.</p>
+-<h3 class="function"><a name="mxmlIndexFind">mxmlIndexFind</a></h3>
+-<p class="description">Find the next matching node.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlIndexFind (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_index_t">mxml_index_t</a> *ind,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *element,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>ind</dt>
+-<dd class="description">Index to search</dd>
+-<dt>element</dt>
+-<dd class="description">Element name to find, if any</dd>
+-<dt>value</dt>
+-<dd class="description">Attribute value, if any</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Node or NULL if none found</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">You should call mxmlIndexReset() prior to using this function for
+-the first time with a particular set of &quot;element&quot; and &quot;value&quot;
+-strings. Passing NULL for both &quot;element&quot; and &quot;value&quot; is equivalent
+-to calling mxmlIndexEnum().</p>
+-<h3 class="function"><a name="mxmlIndexNew">mxmlIndexNew</a></h3>
+-<p class="description">Create a new index.</p>
+-<p class="code">
+-<a href="#mxml_index_t">mxml_index_t</a> *mxmlIndexNew (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *element,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *attr<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">XML node tree</dd>
+-<dt>element</dt>
+-<dd class="description">Element to index or NULL for all</dd>
+-<dt>attr</dt>
+-<dd class="description">Attribute to index or NULL for none</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New index</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The index will contain all nodes that contain the named element and/or
+-attribute. If both &quot;element&quot; and &quot;attr&quot; are NULL, then the index will
+-contain a sorted list of the elements in the node tree.  Nodes are
+-sorted by element name and optionally by attribute value if the &quot;attr&quot;
+-argument is not NULL.</p>
+-<h3 class="function"><a name="mxmlIndexReset">mxmlIndexReset</a></h3>
+-<p class="description">Reset the enumeration/find pointer in the index and
+-return the first node in the index.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlIndexReset (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_index_t">mxml_index_t</a> *ind<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>ind</dt>
+-<dd class="description">Index to reset</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">First node or NULL if there is none</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">This function should be called prior to using mxmlIndexEnum() or
+-mxmlIndexFind() for the first time.</p>
+-<h3 class="function"><a name="mxmlLoadFd">mxmlLoadFd</a></h3>
+-<p class="description">Load a file descriptor into an XML node tree.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlLoadFd (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_load_cb_t">mxml_load_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>fd</dt>
+-<dd class="description">File descriptor to read from</dd>
+-<dt>cb</dt>
+-<dd class="description">Callback function or MXML_NO_CALLBACK</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">First node or NULL if the file could not be read.</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The nodes in the specified file are added to the specified top node.
+-If no top node is provided, the XML file MUST be well-formed with a
+-single parent node like &lt;?xml&gt; for the entire file. The callback
+-function returns the value type that should be used for child nodes.
+-If MXML_NO_CALLBACK is specified then all child nodes will be either
+-MXML_ELEMENT or MXML_TEXT nodes.<br>
+-<br>
+-The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
+-MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
+-child nodes of the specified type.</p>
+-<h3 class="function"><a name="mxmlLoadFile">mxmlLoadFile</a></h3>
+-<p class="description">Load a file into an XML node tree.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlLoadFile (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_load_cb_t">mxml_load_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>fp</dt>
+-<dd class="description">File to read from</dd>
+-<dt>cb</dt>
+-<dd class="description">Callback function or MXML_NO_CALLBACK</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">First node or NULL if the file could not be read.</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The nodes in the specified file are added to the specified top node.
+-If no top node is provided, the XML file MUST be well-formed with a
+-single parent node like &lt;?xml&gt; for the entire file. The callback
+-function returns the value type that should be used for child nodes.
+-If MXML_NO_CALLBACK is specified then all child nodes will be either
+-MXML_ELEMENT or MXML_TEXT nodes.<br>
+-<br>
+-The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
+-MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
+-child nodes of the specified type.</p>
+-<h3 class="function"><a name="mxmlLoadString">mxmlLoadString</a></h3>
+-<p class="description">Load a string into an XML node tree.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlLoadString (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *s,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_load_cb_t">mxml_load_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>s</dt>
+-<dd class="description">String to load</dd>
+-<dt>cb</dt>
+-<dd class="description">Callback function or MXML_NO_CALLBACK</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">First node or NULL if the string has errors.</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The nodes in the specified string are added to the specified top node.
+-If no top node is provided, the XML string MUST be well-formed with a
+-single parent node like &lt;?xml&gt; for the entire string. The callback
+-function returns the value type that should be used for child nodes.
+-If MXML_NO_CALLBACK is specified then all child nodes will be either
+-MXML_ELEMENT or MXML_TEXT nodes.<br>
+-<br>
+-The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
+-MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
+-child nodes of the specified type.</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlNewCDATA">mxmlNewCDATA</a></h3>
+-<p class="description">Create a new CDATA node.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewCDATA (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *data<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node or MXML_NO_PARENT</dd>
+-<dt>data</dt>
+-<dd class="description">Data string</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The new CDATA node is added to the end of the specified parent's child
+-list. The constant MXML_NO_PARENT can be used to specify that the new
+-CDATA node has no parent. The data string must be nul-terminated and
+-is copied into the new node. CDATA nodes use the MXML_ELEMENT type.
+-
+-</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.1&nbsp;</span><a name="mxmlNewCustom">mxmlNewCustom</a></h3>
+-<p class="description">Create a new custom data node.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewCustom (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;void *data,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_custom_destroy_cb_t">mxml_custom_destroy_cb_t</a> destroy<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node or MXML_NO_PARENT</dd>
+-<dt>data</dt>
+-<dd class="description">Pointer to data</dd>
+-<dt>destroy</dt>
+-<dd class="description">Function to destroy data</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The new custom node is added to the end of the specified parent's child
+-list. The constant MXML_NO_PARENT can be used to specify that the new
+-element node has no parent. NULL can be passed when the data in the
+-node is not dynamically allocated or is separately managed.
+-
+-</p>
+-<h3 class="function"><a name="mxmlNewElement">mxmlNewElement</a></h3>
+-<p class="description">Create a new element node.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewElement (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node or MXML_NO_PARENT</dd>
+-<dt>name</dt>
+-<dd class="description">Name of element</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The new element node is added to the end of the specified parent's child
+-list. The constant MXML_NO_PARENT can be used to specify that the new
+-element node has no parent.</p>
+-<h3 class="function"><a name="mxmlNewInteger">mxmlNewInteger</a></h3>
+-<p class="description">Create a new integer node.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewInteger (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int integer<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node or MXML_NO_PARENT</dd>
+-<dt>integer</dt>
+-<dd class="description">Integer value</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The new integer node is added to the end of the specified parent's child
+-list. The constant MXML_NO_PARENT can be used to specify that the new
+-integer node has no parent.</p>
+-<h3 class="function"><a name="mxmlNewOpaque">mxmlNewOpaque</a></h3>
+-<p class="description">Create a new opaque string.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewOpaque (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *opaque<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node or MXML_NO_PARENT</dd>
+-<dt>opaque</dt>
+-<dd class="description">Opaque string</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The new opaque node is added to the end of the specified parent's child
+-list. The constant MXML_NO_PARENT can be used to specify that the new
+-opaque node has no parent. The opaque string must be nul-terminated and
+-is copied into the new node.</p>
+-<h3 class="function"><a name="mxmlNewReal">mxmlNewReal</a></h3>
+-<p class="description">Create a new real number node.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewReal (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;double real<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node or MXML_NO_PARENT</dd>
+-<dt>real</dt>
+-<dd class="description">Real number value</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The new real number node is added to the end of the specified parent's
+-child list. The constant MXML_NO_PARENT can be used to specify that
+-the new real number node has no parent.</p>
+-<h3 class="function"><a name="mxmlNewText">mxmlNewText</a></h3>
+-<p class="description">Create a new text fragment node.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewText (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int whitespace,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *string<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node or MXML_NO_PARENT</dd>
+-<dt>whitespace</dt>
+-<dd class="description">1 = leading whitespace, 0 = no whitespace</dd>
+-<dt>string</dt>
+-<dd class="description">String</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The new text node is added to the end of the specified parent's child
+-list. The constant MXML_NO_PARENT can be used to specify that the new
+-text node has no parent. The whitespace parameter is used to specify
+-whether leading whitespace is present before the node. The text
+-string must be nul-terminated and is copied into the new node.</p>
+-<h3 class="function"><a name="mxmlNewTextf">mxmlNewTextf</a></h3>
+-<p class="description">Create a new formatted text fragment node.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewTextf (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int whitespace,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;...<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>parent</dt>
+-<dd class="description">Parent node or MXML_NO_PARENT</dd>
+-<dt>whitespace</dt>
+-<dd class="description">1 = leading whitespace, 0 = no whitespace</dd>
+-<dt>format</dt>
+-<dd class="description">Printf-style frmat string</dd>
+-<dt>...</dt>
+-<dd class="description">Additional args as needed</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The new text node is added to the end of the specified parent's child
+-list. The constant MXML_NO_PARENT can be used to specify that the new
+-text node has no parent. The whitespace parameter is used to specify
+-whether leading whitespace is present before the node. The format
+-string must be nul-terminated and is formatted into the new node.</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlNewXML">mxmlNewXML</a></h3>
+-<p class="description">Create a new XML document tree.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlNewXML (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *version<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>version</dt>
+-<dd class="description">Version number to use</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New ?xml node</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The &quot;version&quot; argument specifies the version number to put in the
+-?xml element node. If NULL, version 1.0 is assumed.
+-
+-</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlRelease">mxmlRelease</a></h3>
+-<p class="description">Release a node.</p>
+-<p class="code">
+-int mxmlRelease (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New reference count</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">When the reference count reaches zero, the node (and any children)
+-is deleted via mxmlDelete().
+-
+-</p>
+-<h3 class="function"><a name="mxmlRemove">mxmlRemove</a></h3>
+-<p class="description">Remove a node from its parent.</p>
+-<p class="code">
+-void mxmlRemove (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to remove</dd>
+-</dl>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">Does not free memory used by the node - use mxmlDelete() for that.
+-This function does nothing if the node has no parent.</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlRetain">mxmlRetain</a></h3>
+-<p class="description">Retain a node.</p>
+-<p class="code">
+-int mxmlRetain (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">New reference count</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlSAXLoadFd">mxmlSAXLoadFd</a></h3>
+-<p class="description">Load a file descriptor into an XML node tree
+-using a SAX callback.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlSAXLoadFd (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_load_cb_t">mxml_load_cb_t</a> cb,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_sax_cb_t">mxml_sax_cb_t</a> sax_cb,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;void *sax_data<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>fd</dt>
+-<dd class="description">File descriptor to read from</dd>
+-<dt>cb</dt>
+-<dd class="description">Callback function or MXML_NO_CALLBACK</dd>
+-<dt>sax_cb</dt>
+-<dd class="description">SAX callback or MXML_NO_CALLBACK</dd>
+-<dt>sax_data</dt>
+-<dd class="description">SAX user data</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">First node or NULL if the file could not be read.</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The nodes in the specified file are added to the specified top node.
+-If no top node is provided, the XML file MUST be well-formed with a
+-single parent node like &lt;?xml&gt; for the entire file. The callback
+-function returns the value type that should be used for child nodes.
+-If MXML_NO_CALLBACK is specified then all child nodes will be either
+-MXML_ELEMENT or MXML_TEXT nodes.<br>
+-<br>
+-The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
+-MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
+-child nodes of the specified type.<br>
+-<br>
+-The SAX callback must call mxmlRetain() for any nodes that need to
+-be kept for later use. Otherwise, nodes are deleted when the parent
+-node is closed or after each data, comment, CDATA, or directive node.
+-
+-</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlSAXLoadFile">mxmlSAXLoadFile</a></h3>
+-<p class="description">Load a file into an XML node tree
+-using a SAX callback.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlSAXLoadFile (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_load_cb_t">mxml_load_cb_t</a> cb,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_sax_cb_t">mxml_sax_cb_t</a> sax_cb,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;void *sax_data<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>fp</dt>
+-<dd class="description">File to read from</dd>
+-<dt>cb</dt>
+-<dd class="description">Callback function or MXML_NO_CALLBACK</dd>
+-<dt>sax_cb</dt>
+-<dd class="description">SAX callback or MXML_NO_CALLBACK</dd>
+-<dt>sax_data</dt>
+-<dd class="description">SAX user data</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">First node or NULL if the file could not be read.</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The nodes in the specified file are added to the specified top node.
+-If no top node is provided, the XML file MUST be well-formed with a
+-single parent node like &lt;?xml&gt; for the entire file. The callback
+-function returns the value type that should be used for child nodes.
+-If MXML_NO_CALLBACK is specified then all child nodes will be either
+-MXML_ELEMENT or MXML_TEXT nodes.<br>
+-<br>
+-The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
+-MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
+-child nodes of the specified type.<br>
+-<br>
+-The SAX callback must call mxmlRetain() for any nodes that need to
+-be kept for later use. Otherwise, nodes are deleted when the parent
+-node is closed or after each data, comment, CDATA, or directive node.
+-
+-</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlSAXLoadString">mxmlSAXLoadString</a></h3>
+-<p class="description">Load a string into an XML node tree
+-using a SAX callback.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlSAXLoadString (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *s,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_load_cb_t">mxml_load_cb_t</a> cb,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_sax_cb_t">mxml_sax_cb_t</a> sax_cb,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;void *sax_data<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>s</dt>
+-<dd class="description">String to load</dd>
+-<dt>cb</dt>
+-<dd class="description">Callback function or MXML_NO_CALLBACK</dd>
+-<dt>sax_cb</dt>
+-<dd class="description">SAX callback or MXML_NO_CALLBACK</dd>
+-<dt>sax_data</dt>
+-<dd class="description">SAX user data</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">First node or NULL if the string has errors.</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The nodes in the specified string are added to the specified top node.
+-If no top node is provided, the XML string MUST be well-formed with a
+-single parent node like &lt;?xml&gt; for the entire string. The callback
+-function returns the value type that should be used for child nodes.
+-If MXML_NO_CALLBACK is specified then all child nodes will be either
+-MXML_ELEMENT or MXML_TEXT nodes.<br>
+-<br>
+-The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
+-MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
+-child nodes of the specified type.<br>
+-<br>
+-The SAX callback must call mxmlRetain() for any nodes that need to
+-be kept for later use. Otherwise, nodes are deleted when the parent
+-node is closed or after each data, comment, CDATA, or directive node.
+-
+-</p>
+-<h3 class="function"><a name="mxmlSaveAllocString">mxmlSaveAllocString</a></h3>
+-<p class="description">Save an XML node tree to an allocated string.</p>
+-<p class="code">
+-char *mxmlSaveAllocString (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_save_cb_t">mxml_save_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to write</dd>
+-<dt>cb</dt>
+-<dd class="description">Whitespace callback or MXML_NO_CALLBACK</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Allocated string or NULL</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">This function returns a pointer to a string containing the textual
+-representation of the XML node tree.  The string should be freed
+-using the free() function when you are done with it.  NULL is returned
+-if the node would produce an empty string or if the string cannot be
+-allocated.<br>
+-<br>
+-The callback argument specifies a function that returns a whitespace
+-string or NULL before and after each element. If MXML_NO_CALLBACK
+-is specified, whitespace will only be added before MXML_TEXT nodes
+-with leading whitespace and before attribute names inside opening
+-element tags.</p>
+-<h3 class="function"><a name="mxmlSaveFd">mxmlSaveFd</a></h3>
+-<p class="description">Save an XML tree to a file descriptor.</p>
+-<p class="code">
+-int mxmlSaveFd (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_save_cb_t">mxml_save_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to write</dd>
+-<dt>fd</dt>
+-<dd class="description">File descriptor to write to</dd>
+-<dt>cb</dt>
+-<dd class="description">Whitespace callback or MXML_NO_CALLBACK</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on error.</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The callback argument specifies a function that returns a whitespace
+-string or NULL before and after each element. If MXML_NO_CALLBACK
+-is specified, whitespace will only be added before MXML_TEXT nodes
+-with leading whitespace and before attribute names inside opening
+-element tags.</p>
+-<h3 class="function"><a name="mxmlSaveFile">mxmlSaveFile</a></h3>
+-<p class="description">Save an XML tree to a file.</p>
+-<p class="code">
+-int mxmlSaveFile (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_save_cb_t">mxml_save_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to write</dd>
+-<dt>fp</dt>
+-<dd class="description">File to write to</dd>
+-<dt>cb</dt>
+-<dd class="description">Whitespace callback or MXML_NO_CALLBACK</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on error.</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The callback argument specifies a function that returns a whitespace
+-string or NULL before and after each element. If MXML_NO_CALLBACK
+-is specified, whitespace will only be added before MXML_TEXT nodes
+-with leading whitespace and before attribute names inside opening
+-element tags.</p>
+-<h3 class="function"><a name="mxmlSaveString">mxmlSaveString</a></h3>
+-<p class="description">Save an XML node tree to a string.</p>
+-<p class="code">
+-int mxmlSaveString (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int bufsize,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_save_cb_t">mxml_save_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to write</dd>
+-<dt>buffer</dt>
+-<dd class="description">String buffer</dd>
+-<dt>bufsize</dt>
+-<dd class="description">Size of string buffer</dd>
+-<dt>cb</dt>
+-<dd class="description">Whitespace callback or MXML_NO_CALLBACK</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Size of string</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">This function returns the total number of bytes that would be
+-required for the string but only copies (bufsize - 1) characters
+-into the specified buffer.<br>
+-<br>
+-The callback argument specifies a function that returns a whitespace
+-string or NULL before and after each element. If MXML_NO_CALLBACK
+-is specified, whitespace will only be added before MXML_TEXT nodes
+-with leading whitespace and before attribute names inside opening
+-element tags.</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlSetCDATA">mxmlSetCDATA</a></h3>
+-<p class="description">Set the element name of a CDATA node.</p>
+-<p class="code">
+-int mxmlSetCDATA (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *data<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to set</dd>
+-<dt>data</dt>
+-<dd class="description">New data string</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The node is not changed if it is not a CDATA element node.
+-
+-</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.1&nbsp;</span><a name="mxmlSetCustom">mxmlSetCustom</a></h3>
+-<p class="description">Set the data and destructor of a custom data node.</p>
+-<p class="code">
+-int mxmlSetCustom (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;void *data,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_custom_destroy_cb_t">mxml_custom_destroy_cb_t</a> destroy<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to set</dd>
+-<dt>data</dt>
+-<dd class="description">New data pointer</dd>
+-<dt>destroy</dt>
+-<dd class="description">New destructor function</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The node is not changed if it is not a custom node.
+-
+-</p>
+-<h3 class="function"><a name="mxmlSetCustomHandlers">mxmlSetCustomHandlers</a></h3>
+-<p class="description">Set the handling functions for custom data.</p>
+-<p class="code">
+-void mxmlSetCustomHandlers (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_custom_load_cb_t">mxml_custom_load_cb_t</a> load,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_custom_save_cb_t">mxml_custom_save_cb_t</a> save<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>load</dt>
+-<dd class="description">Load function</dd>
+-<dt>save</dt>
+-<dd class="description">Save function</dd>
+-</dl>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The load function accepts a node pointer and a data string and must
+-return 0 on success and non-zero on error.<br>
+-<br>
+-The save function accepts a node pointer and must return a malloc'd
+-string on success and NULL on error.</p>
+-<h3 class="function"><a name="mxmlSetElement">mxmlSetElement</a></h3>
+-<p class="description">Set the name of an element node.</p>
+-<p class="code">
+-int mxmlSetElement (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to set</dd>
+-<dt>name</dt>
+-<dd class="description">New name string</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The node is not changed if it is not an element node.</p>
+-<h3 class="function"><a name="mxmlSetErrorCallback">mxmlSetErrorCallback</a></h3>
+-<p class="description">Set the error message callback.</p>
+-<p class="code">
+-void mxmlSetErrorCallback (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_error_cb_t">mxml_error_cb_t</a> cb<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>cb</dt>
+-<dd class="description">Error callback function</dd>
+-</dl>
+-<h3 class="function"><a name="mxmlSetInteger">mxmlSetInteger</a></h3>
+-<p class="description">Set the value of an integer node.</p>
+-<p class="code">
+-int mxmlSetInteger (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int integer<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to set</dd>
+-<dt>integer</dt>
+-<dd class="description">Integer value</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The node is not changed if it is not an integer node.</p>
+-<h3 class="function"><a name="mxmlSetOpaque">mxmlSetOpaque</a></h3>
+-<p class="description">Set the value of an opaque node.</p>
+-<p class="code">
+-int mxmlSetOpaque (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *opaque<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to set</dd>
+-<dt>opaque</dt>
+-<dd class="description">Opaque string</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The node is not changed if it is not an opaque node.</p>
+-<h3 class="function"><a name="mxmlSetReal">mxmlSetReal</a></h3>
+-<p class="description">Set the value of a real number node.</p>
+-<p class="code">
+-int mxmlSetReal (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;double real<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to set</dd>
+-<dt>real</dt>
+-<dd class="description">Real number value</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The node is not changed if it is not a real number node.</p>
+-<h3 class="function"><a name="mxmlSetText">mxmlSetText</a></h3>
+-<p class="description">Set the value of a text node.</p>
+-<p class="code">
+-int mxmlSetText (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int whitespace,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *string<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to set</dd>
+-<dt>whitespace</dt>
+-<dd class="description">1 = leading whitespace, 0 = no whitespace</dd>
+-<dt>string</dt>
+-<dd class="description">String</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The node is not changed if it is not a text node.</p>
+-<h3 class="function"><a name="mxmlSetTextf">mxmlSetTextf</a></h3>
+-<p class="description">Set the value of a text node to a formatted string.</p>
+-<p class="code">
+-int mxmlSetTextf (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int whitespace,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;...<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Node to set</dd>
+-<dt>whitespace</dt>
+-<dd class="description">1 = leading whitespace, 0 = no whitespace</dd>
+-<dt>format</dt>
+-<dd class="description">Printf-style format string</dd>
+-<dt>...</dt>
+-<dd class="description">Additional arguments as needed</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">0 on success, -1 on failure</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The node is not changed if it is not a text node.</p>
+-<h3 class="function"><span class="info">&nbsp;Mini-XML 2.3&nbsp;</span><a name="mxmlSetWrapMargin">mxmlSetWrapMargin</a></h3>
+-<p class="description">Set the the wrap margin when saving XML data.</p>
+-<p class="code">
+-void mxmlSetWrapMargin (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int column<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>column</dt>
+-<dd class="description">Column for wrapping, 0 to disable wrapping</dd>
+-</dl>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">Wrapping is disabled when &quot;column&quot; is 0.
+-
+-</p>
+-<h3 class="function"><a name="mxmlWalkNext">mxmlWalkNext</a></h3>
+-<p class="description">Walk to the next logical node in the tree.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlWalkNext (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int descend<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Current node</dd>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>descend</dt>
+-<dd class="description">Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Next node or NULL</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The descend argument controls whether the first child is considered
+-to be the next node. The top node argument constrains the walk to
+-the node's children.</p>
+-<h3 class="function"><a name="mxmlWalkPrev">mxmlWalkPrev</a></h3>
+-<p class="description">Walk to the previous logical node in the tree.</p>
+-<p class="code">
+-<a href="#mxml_node_t">mxml_node_t</a> *mxmlWalkPrev (<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int descend<br>
+-);</p>
+-<h4 class="parameters">Parameters</h4>
+-<dl>
+-<dt>node</dt>
+-<dd class="description">Current node</dd>
+-<dt>top</dt>
+-<dd class="description">Top node</dd>
+-<dt>descend</dt>
+-<dd class="description">Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</dd>
+-</dl>
+-<h4 class="returnvalue">Return Value</h4>
+-<p class="description">Previous node or NULL</p>
+-<h4 class="discussion">Discussion</h4>
+-<p class="discussion">The descend argument controls whether the previous node's last child
+-is considered to be the previous node. The top node argument constrains
+-the walk to the node's children.</p>
+-<h2 class="title"><a name="TYPES">Data Types</a></h2>
+-<h3 class="typedef"><a name="mxml_attr_t">mxml_attr_t</a></h3>
+-<p class="description">An XML element attribute value.</p>
+-<p class="code">
+-typedef struct <a href="#mxml_attr_s">mxml_attr_s</a> mxml_attr_t;
+-</p>
+-<h3 class="typedef"><a name="mxml_custom_destroy_cb_t">mxml_custom_destroy_cb_t</a></h3>
+-<p class="description">Custom data destructor</p>
+-<p class="code">
+-typedef void (*mxml_custom_destroy_cb_t)(void *);
+-</p>
+-<h3 class="typedef"><a name="mxml_custom_load_cb_t">mxml_custom_load_cb_t</a></h3>
+-<p class="description">Custom data load callback function</p>
+-<p class="code">
+-typedef int (*mxml_custom_load_cb_t)(<a href="#mxml_node_t">mxml_node_t</a> *, const char *);
+-</p>
+-<h3 class="typedef"><a name="mxml_custom_save_cb_t">mxml_custom_save_cb_t</a></h3>
+-<p class="description">Custom data save callback function</p>
+-<p class="code">
+-typedef char *(*mxml_custom_save_cb_t)(<a href="#mxml_node_t">mxml_node_t</a> *);
+-</p>
+-<h3 class="typedef"><span class="info">&nbsp;Mini-XML 2.1&nbsp;</span><a name="mxml_custom_t">mxml_custom_t</a></h3>
+-<p class="description">An XML custom value. </p>
+-<p class="code">
+-typedef struct <a href="#mxml_custom_s">mxml_custom_s</a> mxml_custom_t;
+-</p>
+-<h3 class="typedef"><a name="mxml_element_t">mxml_element_t</a></h3>
+-<p class="description">An XML element value.</p>
+-<p class="code">
+-typedef struct <a href="#mxml_element_s">mxml_element_s</a> mxml_element_t;
+-</p>
+-<h3 class="typedef"><a name="mxml_entity_cb_t">mxml_entity_cb_t</a></h3>
+-<p class="description">Entity callback function</p>
+-<p class="code">
+-typedef int (*mxml_entity_cb_t)(const char *);
+-</p>
+-<h3 class="typedef"><a name="mxml_error_cb_t">mxml_error_cb_t</a></h3>
+-<p class="description">Error callback function</p>
+-<p class="code">
+-typedef void (*mxml_error_cb_t)(const char *);
+-</p>
+-<h3 class="typedef"><a name="mxml_index_t">mxml_index_t</a></h3>
+-<p class="description">An XML node index.</p>
+-<p class="code">
+-typedef struct <a href="#mxml_index_s">mxml_index_s</a> mxml_index_t;
+-</p>
+-<h3 class="typedef"><a name="mxml_load_cb_t">mxml_load_cb_t</a></h3>
+-<p class="description">Load callback function</p>
+-<p class="code">
+-typedef <a href="#mxml_type_t">mxml_type_t</a> (*mxml_load_cb_t)(<a href="#mxml_node_t">mxml_node_t</a> *);
+-</p>
+-<h3 class="typedef"><a name="mxml_node_t">mxml_node_t</a></h3>
+-<p class="description">An XML node.</p>
+-<p class="code">
+-typedef struct <a href="#mxml_node_s">mxml_node_s</a> mxml_node_t;
+-</p>
+-<h3 class="typedef"><a name="mxml_save_cb_t">mxml_save_cb_t</a></h3>
+-<p class="description">Save callback function</p>
+-<p class="code">
+-typedef const char *(*mxml_save_cb_t)(<a href="#mxml_node_t">mxml_node_t</a> *, int);
+-</p>
+-<h3 class="typedef"><a name="mxml_sax_cb_t">mxml_sax_cb_t</a></h3>
+-<p class="description">SAX callback function</p>
+-<p class="code">
+-typedef void (*mxml_sax_cb_t)(<a href="#mxml_node_t">mxml_node_t</a> *, mxml_sax_event_t, void *);
+-</p>
+-<h3 class="typedef"><a name="mxml_sax_event_t">mxml_sax_event_t</a></h3>
+-<p class="description">SAX event type.</p>
+-<p class="code">
+-typedef enum <a href="#mxml_sax_event_e">mxml_sax_event_e</a> mxml_sax_event_t;
+-</p>
+-<h3 class="typedef"><a name="mxml_text_t">mxml_text_t</a></h3>
+-<p class="description">An XML text value.</p>
+-<p class="code">
+-typedef struct <a href="#mxml_text_s">mxml_text_s</a> mxml_text_t;
+-</p>
+-<h3 class="typedef"><a name="mxml_type_t">mxml_type_t</a></h3>
+-<p class="description">The XML node type.</p>
+-<p class="code">
+-typedef enum <a href="#mxml_type_e">mxml_type_e</a> mxml_type_t;
+-</p>
+-<h3 class="typedef"><a name="mxml_value_t">mxml_value_t</a></h3>
+-<p class="description">An XML node value.</p>
+-<p class="code">
+-typedef union <a href="#mxml_value_u">mxml_value_u</a> mxml_value_t;
+-</p>
+-<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
+-<h3 class="struct"><a name="mxml_attr_s">mxml_attr_s</a></h3>
+-<p class="description">An XML element attribute value.</p>
+-<p class="code">struct mxml_attr_s {<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;char *name;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;char *value;<br>
+-};</p>
+-<h4 class="members">Members</h4>
+-<dl>
+-<dt>name </dt>
+-<dd class="description">Attribute name</dd>
+-<dt>value </dt>
+-<dd class="description">Attribute value</dd>
+-</dl>
+-<h3 class="struct"><span class="info">&nbsp;Mini-XML 2.1&nbsp;</span><a name="mxml_custom_s">mxml_custom_s</a></h3>
+-<p class="description">An XML custom value. </p>
+-<p class="code">struct mxml_custom_s {<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;void *data;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_custom_destroy_cb_t">mxml_custom_destroy_cb_t</a> destroy;<br>
+-};</p>
+-<h4 class="members">Members</h4>
+-<dl>
+-<dt>data </dt>
+-<dd class="description">Pointer to (allocated) custom data</dd>
+-<dt>destroy </dt>
+-<dd class="description">Pointer to destructor function</dd>
+-</dl>
+-<h3 class="struct"><a name="mxml_element_s">mxml_element_s</a></h3>
+-<p class="description">An XML element value.</p>
+-<p class="code">struct mxml_element_s {<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_attr_t">mxml_attr_t</a> *attrs;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;char *name;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int num_attrs;<br>
+-};</p>
+-<h4 class="members">Members</h4>
+-<dl>
+-<dt>attrs </dt>
+-<dd class="description">Attributes</dd>
+-<dt>name </dt>
+-<dd class="description">Name of element</dd>
+-<dt>num_attrs </dt>
+-<dd class="description">Number of attributes</dd>
+-</dl>
+-<h3 class="struct"><a name="mxml_index_s">mxml_index_s</a></h3>
+-<p class="description">An XML node index.</p>
+-<p class="code">struct mxml_index_s {<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int alloc_nodes;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;char *attr;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int cur_node;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_node_t">mxml_node_t</a> **nodes;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int num_nodes;<br>
+-};</p>
+-<h4 class="members">Members</h4>
+-<dl>
+-<dt>alloc_nodes </dt>
+-<dd class="description">Allocated nodes in index</dd>
+-<dt>attr </dt>
+-<dd class="description">Attribute used for indexing or NULL</dd>
+-<dt>cur_node </dt>
+-<dd class="description">Current node</dd>
+-<dt>nodes </dt>
+-<dd class="description">Node array</dd>
+-<dt>num_nodes </dt>
+-<dd class="description">Number of nodes in index</dd>
+-</dl>
+-<h3 class="struct"><a name="mxml_node_s">mxml_node_s</a></h3>
+-<p class="description">An XML node.</p>
+-<p class="code">struct mxml_node_s {<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#mxml_node_s">mxml_node_s</a> *child;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#mxml_node_s">mxml_node_s</a> *last_child;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#mxml_node_s">mxml_node_s</a> *next;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#mxml_node_s">mxml_node_s</a> *parent;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#mxml_node_s">mxml_node_s</a> *prev;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int ref_count;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_type_t">mxml_type_t</a> type;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_value_t">mxml_value_t</a> value;<br>
+-};</p>
+-<h4 class="members">Members</h4>
+-<dl>
+-<dt>child </dt>
+-<dd class="description">First child node</dd>
+-<dt>last_child </dt>
+-<dd class="description">Last child node</dd>
+-<dt>next </dt>
+-<dd class="description">Next node under same parent</dd>
+-<dt>parent </dt>
+-<dd class="description">Parent node</dd>
+-<dt>prev </dt>
+-<dd class="description">Previous node under same parent</dd>
+-<dt>ref_count </dt>
+-<dd class="description">Use count</dd>
+-<dt>type </dt>
+-<dd class="description">Node type</dd>
+-<dt>user_data </dt>
+-<dd class="description">User data</dd>
+-<dt>value </dt>
+-<dd class="description">Node value</dd>
+-</dl>
+-<h3 class="struct"><a name="mxml_text_s">mxml_text_s</a></h3>
+-<p class="description">An XML text value.</p>
+-<p class="code">struct mxml_text_s {<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;char *string;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int whitespace;<br>
+-};</p>
+-<h4 class="members">Members</h4>
+-<dl>
+-<dt>string </dt>
+-<dd class="description">Fragment string</dd>
+-<dt>whitespace </dt>
+-<dd class="description">Leading whitespace?</dd>
+-</dl>
+-<h2 class="title"><a name="UNIONS">Unions</a></h2>
+-<h3 class="union"><a name="mxml_value_u">mxml_value_u</a></h3>
+-<p class="description">An XML node value.</p>
+-<p class="code">union mxml_value_u {<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_custom_t">mxml_custom_t</a> custom;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_element_t">mxml_element_t</a> element;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;int integer;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;char *opaque;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;double real;<br>
+-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mxml_text_t">mxml_text_t</a> text;<br>
+-};</p>
+-<h4 class="members">Members</h4>
+-<dl>
+-<dt>custom <span class="info">&nbsp;Mini-XML 2.1&nbsp;</span></dt>
+-<dd class="description">Custom data </dd>
+-<dt>element </dt>
+-<dd class="description">Element</dd>
+-<dt>integer </dt>
+-<dd class="description">Integer number</dd>
+-<dt>opaque </dt>
+-<dd class="description">Opaque string</dd>
+-<dt>real </dt>
+-<dd class="description">Real number</dd>
+-<dt>text </dt>
+-<dd class="description">Text fragment</dd>
+-</dl>
+-<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
+-<h3 class="enumeration"><a name="mxml_sax_event_e">mxml_sax_event_e</a></h3>
+-<p class="description">SAX event type.</p>
+-<h4 class="constants">Constants</h4>
+-<dl>
+-<dt>MXML_SAX_CDATA </dt>
+-<dd class="description">CDATA node</dd>
+-<dt>MXML_SAX_COMMENT </dt>
+-<dd class="description">Comment node</dd>
+-<dt>MXML_SAX_DATA </dt>
+-<dd class="description">Data node</dd>
+-<dt>MXML_SAX_DIRECTIVE </dt>
+-<dd class="description">Processing directive node</dd>
+-<dt>MXML_SAX_ELEMENT_CLOSE </dt>
+-<dd class="description">Element closed</dd>
+-<dt>MXML_SAX_ELEMENT_OPEN </dt>
+-<dd class="description">Element opened</dd>
+-</dl>
+-<h3 class="enumeration"><a name="mxml_type_e">mxml_type_e</a></h3>
+-<p class="description">The XML node type.</p>
+-<h4 class="constants">Constants</h4>
+-<dl>
+-<dt>MXML_CUSTOM <span class="info">&nbsp;Mini-XML 2.1&nbsp;</span></dt>
+-<dd class="description">Custom data </dd>
+-<dt>MXML_ELEMENT </dt>
+-<dd class="description">XML element with attributes</dd>
+-<dt>MXML_IGNORE <span class="info">&nbsp;Mini-XML 2.3&nbsp;</span></dt>
+-<dd class="description">Ignore/throw away node </dd>
+-<dt>MXML_INTEGER </dt>
+-<dd class="description">Integer value</dd>
+-<dt>MXML_OPAQUE </dt>
+-<dd class="description">Opaque string</dd>
+-<dt>MXML_REAL </dt>
+-<dd class="description">Real value</dd>
+-<dt>MXML_TEXT </dt>
+-<dd class="description">Text fragment</dd>
+-</dl>
+-</div>
+-</body>
+-</html>

+ 11 - 0
package/mxml/patches/patch-mxmldoc_c

@@ -0,0 +1,11 @@
+--- mxml-2.6.orig/mxmldoc.c	2009-05-05 15:38:00.000000000 +0200
++++ mxml-2.6/mxmldoc.c	2011-05-10 12:52:35.000000000 +0200
+@@ -57,7 +57,7 @@
+ #ifndef WIN32
+ #  include <dirent.h>
+ #  include <unistd.h>
+-#  include <spawn.h>
++//#  include <spawn.h>
+ #  include <sys/wait.h>
+ extern char **environ;
+ #endif /* !WIN32 */