summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dev-libs/ELFIO/ELFIO-1.0.3.ebuild30
-rw-r--r--dev-libs/ELFIO/Manifest8
-rw-r--r--dev-libs/ELFIO/files/digest-ELFIO-1.0.33
-rw-r--r--dev-libs/xmlrpc-epi/Manifest28
-rw-r--r--dev-libs/xmlrpc-epi/files/digest-xmlrpc-epi-0.513
-rw-r--r--dev-libs/xmlrpc-epi/files/remove_expat_xmlrpc-epi-0.51.diff14499
-rw-r--r--dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-64bit-fixes.patch93
-rw-r--r--dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-expat.patch83
-rw-r--r--dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-gcc4.patch11
-rw-r--r--dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-secondlife.patch12
-rw-r--r--dev-libs/xmlrpc-epi/xmlrpc-epi-0.51.ebuild31
-rw-r--r--games-simulation/secondlife-bin/Manifest16
-rw-r--r--games-simulation/secondlife-bin/files/digest-secondlife-bin-1.13.3.23
-rw-r--r--games-simulation/secondlife-bin/files/digest-secondlife-bin-1.13.4.595583
-rw-r--r--games-simulation/secondlife-bin/secondlife-bin-1.13.3.2.ebuild89
-rw-r--r--games-simulation/secondlife-bin/secondlife-bin-1.13.4.59558.ebuild91
-rw-r--r--games-simulation/secondlife/Manifest25
-rw-r--r--games-simulation/secondlife/files/digest-secondlife-1.13.3.595586
-rw-r--r--games-simulation/secondlife/files/opensecondlife-svn41.patch28
-rw-r--r--games-simulation/secondlife/files/secondlife-1.13.3.2-llimagej2coj_debug.patch121
-rw-r--r--games-simulation/secondlife/files/secondlife-1.13.3.59315-no_fmod.patch21
-rw-r--r--games-simulation/secondlife/files/secondlife-1.13.3.59558-gentoo.patch211
-rw-r--r--games-simulation/secondlife/secondlife-1.13.3.59558.ebuild131
-rw-r--r--media-libs/openjpeg/Manifest20
-rw-r--r--media-libs/openjpeg/files/OPJ_limit_tags_for_decode_UPDATED.patch3765
-rw-r--r--media-libs/openjpeg/files/digest-openjpeg-1.1.13
-rw-r--r--media-libs/openjpeg/files/openjpeg-1.1.1-gentoo.patch20
-rw-r--r--media-libs/openjpeg/openjpeg-1.1.1.ebuild38
28 files changed, 19392 insertions, 0 deletions
diff --git a/dev-libs/ELFIO/ELFIO-1.0.3.ebuild b/dev-libs/ELFIO/ELFIO-1.0.3.ebuild
new file mode 100644
index 0000000..0edbfeb
--- /dev/null
+++ b/dev-libs/ELFIO/ELFIO-1.0.3.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+inherit flag-o-matic toolchain-funcs
+
+DESCRIPTION="ELF (Executable and Linkable Format) reader and producer implemented as a C++ library."
+HOMEPAGE="http://elfio.sourceforge.net/"
+SRC_URI="mirror://sourceforge/elfio/${P}.tar.gz"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~mips ~sparc ~x86"
+IUSE=""
+
+src_compile() {
+ append-flags -fPIC
+ econf || die "econf failed"
+ emake || die "emake failed"
+
+ # for secondlife
+ cd ELFIO && $(tc-getCC) -shared *.o -o libelfio.so || die
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die "install failed"
+ dolib.so ELFIO/libelfio.so || die
+
+ dodoc AUTHORS NEWS README
+}
diff --git a/dev-libs/ELFIO/Manifest b/dev-libs/ELFIO/Manifest
new file mode 100644
index 0000000..d932f83
--- /dev/null
+++ b/dev-libs/ELFIO/Manifest
@@ -0,0 +1,8 @@
+DIST ELFIO-1.0.3.tar.gz 308560 RMD160 f89212b30df5ede1339aca0f66f4e40b36d083ca SHA1 1339541932653a29ef937210e7ae283d33462ec5 SHA256 e8cdd3895c4f6e5ed2422a2151e7940f9085a1c10d1f0508ed03b1c4860bcada
+EBUILD ELFIO-1.0.3.ebuild 734 RMD160 2acdd641a1d05764cb3a6ce3b4ad1fabc30660db SHA1 470c853548c1e1346a4374e1fbb8a471f5ee74fe SHA256 39d141d7ca1e72440ccf85df3e0cc3fca87ac782eb131f7503a7a8af02a9dcd7
+MD5 6ff7b6fd275efb641cbcd84027aebbf7 ELFIO-1.0.3.ebuild 734
+RMD160 2acdd641a1d05764cb3a6ce3b4ad1fabc30660db ELFIO-1.0.3.ebuild 734
+SHA256 39d141d7ca1e72440ccf85df3e0cc3fca87ac782eb131f7503a7a8af02a9dcd7 ELFIO-1.0.3.ebuild 734
+MD5 596e1cfa4b31cd034210677307e67210 files/digest-ELFIO-1.0.3 235
+RMD160 fd808ad68224b17092591f9aaf4a0f70d33ec942 files/digest-ELFIO-1.0.3 235
+SHA256 cec4da390170d5a59c1c2c3cf4751ea6f10499f2006b92e0809f507767d601f2 files/digest-ELFIO-1.0.3 235
diff --git a/dev-libs/ELFIO/files/digest-ELFIO-1.0.3 b/dev-libs/ELFIO/files/digest-ELFIO-1.0.3
new file mode 100644
index 0000000..1f72a89
--- /dev/null
+++ b/dev-libs/ELFIO/files/digest-ELFIO-1.0.3
@@ -0,0 +1,3 @@
+MD5 fd6fca12c7b43f6c01d30b23d22aaefe ELFIO-1.0.3.tar.gz 308560
+RMD160 f89212b30df5ede1339aca0f66f4e40b36d083ca ELFIO-1.0.3.tar.gz 308560
+SHA256 e8cdd3895c4f6e5ed2422a2151e7940f9085a1c10d1f0508ed03b1c4860bcada ELFIO-1.0.3.tar.gz 308560
diff --git a/dev-libs/xmlrpc-epi/Manifest b/dev-libs/xmlrpc-epi/Manifest
new file mode 100644
index 0000000..1554484
--- /dev/null
+++ b/dev-libs/xmlrpc-epi/Manifest
@@ -0,0 +1,28 @@
+AUX remove_expat_xmlrpc-epi-0.51.diff 423619 RMD160 bb48769b57660d1c5694b978007f29fd615c755e SHA1 8c944948b6da78890da82288acce45ec8b98ef7e SHA256 70472b98a3b9fc4f7e4388cd70f3425b0d329948d516051cde62f02085a0fac7
+MD5 b06ce8a53a8617d509cc992b61cafdef files/remove_expat_xmlrpc-epi-0.51.diff 423619
+RMD160 bb48769b57660d1c5694b978007f29fd615c755e files/remove_expat_xmlrpc-epi-0.51.diff 423619
+SHA256 70472b98a3b9fc4f7e4388cd70f3425b0d329948d516051cde62f02085a0fac7 files/remove_expat_xmlrpc-epi-0.51.diff 423619
+AUX xmlrpc-epi-0.51-64bit-fixes.patch 3457 RMD160 6da25f27c64c9838766113c3914d0a141bc9401d SHA1 63a86e1e1e3cb6fa6cc7ee45dfa9ba836de1af0d SHA256 17b9f345cf0d5c4d8d601a1586e8d559daaa4c409e36699bbf7e63022c4e7783
+MD5 50e267b3dcf40e9860eb1b05fa770bc7 files/xmlrpc-epi-0.51-64bit-fixes.patch 3457
+RMD160 6da25f27c64c9838766113c3914d0a141bc9401d files/xmlrpc-epi-0.51-64bit-fixes.patch 3457
+SHA256 17b9f345cf0d5c4d8d601a1586e8d559daaa4c409e36699bbf7e63022c4e7783 files/xmlrpc-epi-0.51-64bit-fixes.patch 3457
+AUX xmlrpc-epi-0.51-expat.patch 2935 RMD160 6fccc4d8cfb372811e58e3df31667d41753e5df0 SHA1 e0be6e9f0dffe044f09024fd0e562e6c7027554c SHA256 36b1d156c34d25f446c4b14b779795c7544538e63f762de8bc8d2eb5e2abe168
+MD5 8b9efab174a958269f7bc754943ab232 files/xmlrpc-epi-0.51-expat.patch 2935
+RMD160 6fccc4d8cfb372811e58e3df31667d41753e5df0 files/xmlrpc-epi-0.51-expat.patch 2935
+SHA256 36b1d156c34d25f446c4b14b779795c7544538e63f762de8bc8d2eb5e2abe168 files/xmlrpc-epi-0.51-expat.patch 2935
+AUX xmlrpc-epi-0.51-gcc4.patch 413 RMD160 abf7cf13e58ad056b50368f7f0cf6b9f72ee9ea4 SHA1 46f4950075fcb5e3f0e6a762a89edf35d2c13570 SHA256 b6c6c90382863a3915aad277b9bcec1521eed17f478334324e19648f31520e4b
+MD5 2c30e81d3bc50b4879ff263bf119f715 files/xmlrpc-epi-0.51-gcc4.patch 413
+RMD160 abf7cf13e58ad056b50368f7f0cf6b9f72ee9ea4 files/xmlrpc-epi-0.51-gcc4.patch 413
+SHA256 b6c6c90382863a3915aad277b9bcec1521eed17f478334324e19648f31520e4b files/xmlrpc-epi-0.51-gcc4.patch 413
+AUX xmlrpc-epi-0.51-secondlife.patch 364 RMD160 6c6ccab1174bbc4f9547c210b2584e6e6b484852 SHA1 b1a5d407dcde8a8a4ac08486e72bdc3ffd06e8f7 SHA256 7d7b77622b3656d0463d9a54bf4fc3244c22013ef664f160ec1729714f4533fa
+MD5 748958d5afa4de930e9614e510b801b0 files/xmlrpc-epi-0.51-secondlife.patch 364
+RMD160 6c6ccab1174bbc4f9547c210b2584e6e6b484852 files/xmlrpc-epi-0.51-secondlife.patch 364
+SHA256 7d7b77622b3656d0463d9a54bf4fc3244c22013ef664f160ec1729714f4533fa files/xmlrpc-epi-0.51-secondlife.patch 364
+DIST xmlrpc-epi-0.51.tar.gz 458208 RMD160 c505ee80460cbf521cdee8895a02273d5a773e8e SHA1 dc986663a1d996844dacd8787bee427a03a0c01b SHA256 ec9e54e72e70b38d515d6fc69b4d591ed6018b65d9409965dfacdcd1f59d13b3
+EBUILD xmlrpc-epi-0.51.ebuild 642 RMD160 c2f0ac2f258a9805fd03f12ab7e3e0dcd7546ce2 SHA1 b712edf37ac354ac6d6190cc7648e7f81b3c6558 SHA256 46d765b22e1868cb6568444ec0d2232f56f2d309c8187d1a1df24771dc1e9adb
+MD5 843b21ed19bc8689c45bdc49c2689b10 xmlrpc-epi-0.51.ebuild 642
+RMD160 c2f0ac2f258a9805fd03f12ab7e3e0dcd7546ce2 xmlrpc-epi-0.51.ebuild 642
+SHA256 46d765b22e1868cb6568444ec0d2232f56f2d309c8187d1a1df24771dc1e9adb xmlrpc-epi-0.51.ebuild 642
+MD5 7e895aeb0774b7ac737625938d136675 files/digest-xmlrpc-epi-0.51 247
+RMD160 6b2d900894895aecd0a778ffdcc031b16e848711 files/digest-xmlrpc-epi-0.51 247
+SHA256 ebee13b1a57eb81ca648b0b7f40674adb2867ee90b6f3e75b37e97928fe2279e files/digest-xmlrpc-epi-0.51 247
diff --git a/dev-libs/xmlrpc-epi/files/digest-xmlrpc-epi-0.51 b/dev-libs/xmlrpc-epi/files/digest-xmlrpc-epi-0.51
new file mode 100644
index 0000000..a84756d
--- /dev/null
+++ b/dev-libs/xmlrpc-epi/files/digest-xmlrpc-epi-0.51
@@ -0,0 +1,3 @@
+MD5 51c5f062365f82ff1c26c2763e7f0654 xmlrpc-epi-0.51.tar.gz 458208
+RMD160 c505ee80460cbf521cdee8895a02273d5a773e8e xmlrpc-epi-0.51.tar.gz 458208
+SHA256 ec9e54e72e70b38d515d6fc69b4d591ed6018b65d9409965dfacdcd1f59d13b3 xmlrpc-epi-0.51.tar.gz 458208
diff --git a/dev-libs/xmlrpc-epi/files/remove_expat_xmlrpc-epi-0.51.diff b/dev-libs/xmlrpc-epi/files/remove_expat_xmlrpc-epi-0.51.diff
new file mode 100644
index 0000000..a7d2075
--- /dev/null
+++ b/dev-libs/xmlrpc-epi/files/remove_expat_xmlrpc-epi-0.51.diff
@@ -0,0 +1,14499 @@
+diff -u -r -N original/xmlrpc-epi-0.51/Makefile.in dump_expat/xmlrpc-epi-0.51/Makefile.in
+--- original/xmlrpc-epi-0.51/Makefile.in 2002-06-23 18:48:29.000000000 -0500
++++ dump_expat/xmlrpc-epi-0.51/Makefile.in 2007-02-01 23:12:50.000000000 -0600
+@@ -77,7 +77,7 @@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+
+-SUBDIRS = expat src sample
++SUBDIRS = src sample
+
+ CHANGE_LOG_GEN_BIN = scripts/cvs2cl.pl
+ CHANGE_LOG_GEN_FLAGS = -t -r -b --accum -I ChangeLog --gmt --prune
+diff -u -r -N original/xmlrpc-epi-0.51/configure dump_expat/xmlrpc-epi-0.51/configure
+--- original/xmlrpc-epi-0.51/configure 2002-06-23 18:48:29.000000000 -0500
++++ dump_expat/xmlrpc-epi-0.51/configure 2007-02-01 22:43:31.000000000 -0600
+@@ -8541,7 +8541,7 @@
+ fi
+ done
+
+-ac_config_files="$ac_config_files src/Makefile Makefile sample/Makefile expat/Makefile expat/xmltok/Makefile expat/xmlparse/Makefile"
++ac_config_files="$ac_config_files src/Makefile Makefile sample/Makefile"
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+@@ -8876,9 +8876,6 @@
+ "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "sample/Makefile" ) CONFIG_FILES="$CONFIG_FILES sample/Makefile" ;;
+- "expat/Makefile" ) CONFIG_FILES="$CONFIG_FILES expat/Makefile" ;;
+- "expat/xmltok/Makefile" ) CONFIG_FILES="$CONFIG_FILES expat/xmltok/Makefile" ;;
+- "expat/xmlparse/Makefile" ) CONFIG_FILES="$CONFIG_FILES expat/xmlparse/Makefile" ;;
+ *) { { echo "$as_me:8882: error: invalid argument: $ac_config_target" >&5
+ echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+diff -u -r -N original/xmlrpc-epi-0.51/expat/.cvsignore dump_expat/xmlrpc-epi-0.51/expat/.cvsignore
+--- original/xmlrpc-epi-0.51/expat/.cvsignore 2001-03-19 21:28:32.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/.cvsignore 1969-12-31 18:00:00.000000000 -0600
+@@ -1 +0,0 @@
+-Makefile
+diff -u -r -N original/xmlrpc-epi-0.51/expat/Makefile.am dump_expat/xmlrpc-epi-0.51/expat/Makefile.am
+--- original/xmlrpc-epi-0.51/expat/Makefile.am 2001-03-19 21:28:32.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/Makefile.am 1969-12-31 18:00:00.000000000 -0600
+@@ -1,2 +0,0 @@
+-SUBDIRS = xmltok xmlparse
+-
+diff -u -r -N original/xmlrpc-epi-0.51/expat/Makefile.in dump_expat/xmlrpc-epi-0.51/expat/Makefile.in
+--- original/xmlrpc-epi-0.51/expat/Makefile.in 2002-06-23 18:48:29.000000000 -0500
++++ dump_expat/xmlrpc-epi-0.51/expat/Makefile.in 1969-12-31 18:00:00.000000000 -0600
+@@ -1,291 +0,0 @@
+-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+-
+-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+-# This Makefile.in is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+-# PARTICULAR PURPOSE.
+-
+-
+-SHELL = @SHELL@
+-
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+-VPATH = @srcdir@
+-prefix = @prefix@
+-exec_prefix = @exec_prefix@
+-
+-bindir = @bindir@
+-sbindir = @sbindir@
+-libexecdir = @libexecdir@
+-datadir = @datadir@
+-sysconfdir = @sysconfdir@
+-sharedstatedir = @sharedstatedir@
+-localstatedir = @localstatedir@
+-libdir = @libdir@
+-infodir = @infodir@
+-mandir = @mandir@
+-includedir = @includedir@
+-oldincludedir = /usr/include
+-
+-DESTDIR =
+-
+-pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+-pkgincludedir = $(includedir)/@PACKAGE@
+-
+-top_builddir = ..
+-
+-ACLOCAL = @ACLOCAL@
+-AUTOCONF = @AUTOCONF@
+-AUTOMAKE = @AUTOMAKE@
+-AUTOHEADER = @AUTOHEADER@
+-
+-INSTALL = @INSTALL@
+-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+-INSTALL_DATA = @INSTALL_DATA@
+-INSTALL_SCRIPT = @INSTALL_SCRIPT@
+-transform = @program_transform_name@
+-
+-NORMAL_INSTALL = :
+-PRE_INSTALL = :
+-POST_INSTALL = :
+-NORMAL_UNINSTALL = :
+-PRE_UNINSTALL = :
+-POST_UNINSTALL = :
+-host_alias = @host_alias@
+-host_triplet = @host@
+-AS = @AS@
+-AWK = @AWK@
+-CC = @CC@
+-CPP = @CPP@
+-CXX = @CXX@
+-DLLTOOL = @DLLTOOL@
+-ECHO = @ECHO@
+-EXEEXT = @EXEEXT@
+-LIBTOOL = @LIBTOOL@
+-LN_S = @LN_S@
+-MAKEINFO = @MAKEINFO@
+-OBJDUMP = @OBJDUMP@
+-OBJEXT = @OBJEXT@
+-PACKAGE = @PACKAGE@
+-RANLIB = @RANLIB@
+-STRIP = @STRIP@
+-VERSION = @VERSION@
+-
+-SUBDIRS = xmltok xmlparse
+-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+-CONFIG_CLEAN_FILES =
+-DIST_COMMON = Makefile.am Makefile.in
+-
+-
+-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+-
+-TAR = gtar
+-GZIP_ENV = --best
+-all: all-redirect
+-.SUFFIXES:
+-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+- cd $(top_srcdir) && $(AUTOMAKE) --gnu expat/Makefile
+-
+-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+- cd $(top_builddir) \
+- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+-
+-
+-# This directory's subdirectories are mostly independent; you can cd
+-# into them and run `make' without going through this Makefile.
+-# To change the values of `make' variables: instead of editing Makefiles,
+-# (1) if the variable is set in `config.status', edit `config.status'
+-# (which will cause the Makefiles to be regenerated when you run `make');
+-# (2) otherwise, pass the desired values on the `make' command line.
+-
+-@SET_MAKE@
+-
+-all-recursive install-data-recursive install-exec-recursive \
+-installdirs-recursive install-recursive uninstall-recursive \
+-check-recursive installcheck-recursive info-recursive dvi-recursive:
+- @set fnord $(MAKEFLAGS); amf=$$2; \
+- dot_seen=no; \
+- target=`echo $@ | sed s/-recursive//`; \
+- list='$(SUBDIRS)'; for subdir in $$list; do \
+- echo "Making $$target in $$subdir"; \
+- if test "$$subdir" = "."; then \
+- dot_seen=yes; \
+- local_target="$$target-am"; \
+- else \
+- local_target="$$target"; \
+- fi; \
+- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+- done; \
+- if test "$$dot_seen" = "no"; then \
+- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+- fi; test -z "$$fail"
+-
+-mostlyclean-recursive clean-recursive distclean-recursive \
+-maintainer-clean-recursive:
+- @set fnord $(MAKEFLAGS); amf=$$2; \
+- dot_seen=no; \
+- rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+- rev="$$subdir $$rev"; \
+- test "$$subdir" != "." || dot_seen=yes; \
+- done; \
+- test "$$dot_seen" = "no" && rev=". $$rev"; \
+- target=`echo $@ | sed s/-recursive//`; \
+- for subdir in $$rev; do \
+- echo "Making $$target in $$subdir"; \
+- if test "$$subdir" = "."; then \
+- local_target="$$target-am"; \
+- else \
+- local_target="$$target"; \
+- fi; \
+- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+- done && test -z "$$fail"
+-tags-recursive:
+- list='$(SUBDIRS)'; for subdir in $$list; do \
+- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+- done
+-
+-tags: TAGS
+-
+-ID: $(HEADERS) $(SOURCES) $(LISP)
+- list='$(SOURCES) $(HEADERS)'; \
+- unique=`for i in $$list; do echo $$i; done | \
+- awk ' { files[$$0] = 1; } \
+- END { for (i in files) print i; }'`; \
+- here=`pwd` && cd $(srcdir) \
+- && mkid -f$$here/ID $$unique $(LISP)
+-
+-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+- tags=; \
+- here=`pwd`; \
+- list='$(SUBDIRS)'; for subdir in $$list; do \
+- if test "$$subdir" = .; then :; else \
+- test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+- fi; \
+- done; \
+- list='$(SOURCES) $(HEADERS)'; \
+- unique=`for i in $$list; do echo $$i; done | \
+- awk ' { files[$$0] = 1; } \
+- END { for (i in files) print i; }'`; \
+- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+-
+-mostlyclean-tags:
+-
+-clean-tags:
+-
+-distclean-tags:
+- -rm -f TAGS ID
+-
+-maintainer-clean-tags:
+-
+-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+-
+-subdir = expat
+-
+-distdir: $(DISTFILES)
+- here=`cd $(top_builddir) && pwd`; \
+- top_distdir=`cd $(top_distdir) && pwd`; \
+- distdir=`cd $(distdir) && pwd`; \
+- cd $(top_srcdir) \
+- && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu expat/Makefile
+- @for file in $(DISTFILES); do \
+- d=$(srcdir); \
+- if test -d $$d/$$file; then \
+- cp -pr $$d/$$file $(distdir)/$$file; \
+- else \
+- test -f $(distdir)/$$file \
+- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+- || cp -p $$d/$$file $(distdir)/$$file || :; \
+- fi; \
+- done
+- for subdir in $(SUBDIRS); do \
+- if test "$$subdir" = .; then :; else \
+- test -d $(distdir)/$$subdir \
+- || mkdir $(distdir)/$$subdir \
+- || exit 1; \
+- chmod 777 $(distdir)/$$subdir; \
+- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
+- || exit 1; \
+- fi; \
+- done
+-info-am:
+-info: info-recursive
+-dvi-am:
+-dvi: dvi-recursive
+-check-am: all-am
+-check: check-recursive
+-installcheck-am:
+-installcheck: installcheck-recursive
+-install-exec-am:
+-install-exec: install-exec-recursive
+-
+-install-data-am:
+-install-data: install-data-recursive
+-
+-install-am: all-am
+- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+-install: install-recursive
+-uninstall-am:
+-uninstall: uninstall-recursive
+-all-am: Makefile
+-all-redirect: all-recursive
+-install-strip:
+- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+-installdirs: installdirs-recursive
+-installdirs-am:
+-
+-
+-mostlyclean-generic:
+-
+-clean-generic:
+-
+-distclean-generic:
+- -rm -f Makefile $(CONFIG_CLEAN_FILES)
+- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+-
+-maintainer-clean-generic:
+-mostlyclean-am: mostlyclean-tags mostlyclean-generic
+-
+-mostlyclean: mostlyclean-recursive
+-
+-clean-am: clean-tags clean-generic mostlyclean-am
+-
+-clean: clean-recursive
+-
+-distclean-am: distclean-tags distclean-generic clean-am
+- -rm -f libtool
+-
+-distclean: distclean-recursive
+-
+-maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \
+- distclean-am
+- @echo "This command is intended for maintainers to use;"
+- @echo "it deletes files that may require special tools to rebuild."
+-
+-maintainer-clean: maintainer-clean-recursive
+-
+-.PHONY: install-data-recursive uninstall-data-recursive \
+-install-exec-recursive uninstall-exec-recursive installdirs-recursive \
+-uninstalldirs-recursive all-recursive check-recursive \
+-installcheck-recursive info-recursive dvi-recursive \
+-mostlyclean-recursive distclean-recursive clean-recursive \
+-maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+-install-exec install-data-am install-data install-am install \
+-uninstall-am uninstall all-redirect all-am all installdirs-am \
+-installdirs mostlyclean-generic distclean-generic clean-generic \
+-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+-
+-
+-# Tell versions [3.59,3.63) of GNU make to not export all variables.
+-# Otherwise a system limit (for SysV at least) may be exceeded.
+-.NOEXPORT:
+Binary files original/xmlrpc-epi-0.51/expat/bin/xmlparse.dll and dump_expat/xmlrpc-epi-0.51/expat/bin/xmlparse.dll differ
+Binary files original/xmlrpc-epi-0.51/expat/bin/xmltok.dll and dump_expat/xmlrpc-epi-0.51/expat/bin/xmltok.dll differ
+diff -u -r -N original/xmlrpc-epi-0.51/expat/expat.dsw dump_expat/xmlrpc-epi-0.51/expat/expat.dsw
+--- original/xmlrpc-epi-0.51/expat/expat.dsw 2001-03-19 21:28:32.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/expat.dsw 1969-12-31 18:00:00.000000000 -0600
+@@ -1,71 +0,0 @@
+-Microsoft Developer Studio Workspace File, Format Version 6.00
+-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+-
+-###############################################################################
+-
+-Project: "gennmtab"=".\gennmtab\gennmtab.dsp" - Package Owner=<4>
+-
+-Package=<5>
+-{{{
+-}}}
+-
+-Package=<4>
+-{{{
+-}}}
+-
+-###############################################################################
+-
+-Project: "xmlparse"=".\xmlparse\xmlparse.dsp" - Package Owner=<4>
+-
+-Package=<5>
+-{{{
+-}}}
+-
+-Package=<4>
+-{{{
+- Begin Project Dependency
+- Project_Dep_Name xmltok
+- End Project Dependency
+-}}}
+-
+-###############################################################################
+-
+-Project: "xmltok"=".\xmltok\xmltok.dsp" - Package Owner=<4>
+-
+-Package=<5>
+-{{{
+-}}}
+-
+-Package=<4>
+-{{{
+-}}}
+-
+-###############################################################################
+-
+-Project: "xmlwf"=".\xmlwf\xmlwf.dsp" - Package Owner=<4>
+-
+-Package=<5>
+-{{{
+-}}}
+-
+-Package=<4>
+-{{{
+- Begin Project Dependency
+- Project_Dep_Name xmlparse
+- End Project Dependency
+-}}}
+-
+-###############################################################################
+-
+-Global:
+-
+-Package=<5>
+-{{{
+-}}}
+-
+-Package=<3>
+-{{{
+-}}}
+-
+-###############################################################################
+-
+diff -u -r -N original/xmlrpc-epi-0.51/expat/expat.html dump_expat/xmlrpc-epi-0.51/expat/expat.html
+--- original/xmlrpc-epi-0.51/expat/expat.html 2001-03-19 21:28:32.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/expat.html 1969-12-31 18:00:00.000000000 -0600
+@@ -1,73 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+-"http://www.w3.org/TR/REC-html40/loose.dtd">
+-
+-<HTML>
+-
+-<TITLE>expat</TITLE>
+-
+-<BODY>
+-
+-<H1>expat - XML Parser Toolkit</H1>
+-
+-<H3>Version 1.1</H3>
+-
+-<P>Copyright (c) 1998, 1999 James Clark. Expat is subject to the <A
+-HREF="http://www.mozilla.org/NPL/NPL-1_1Final.html">Mozilla Public
+-License Version 1.1</A>. Alternatively you may use expat under the <A
+-href="http://www.gnu.org/copyleft/gpl.html">GNU General Public
+-License</A> instead. Please contact me if you wish to negotiate an
+-alternative license.</P>
+-
+-<P>Expat is an <A
+-HREF="http://www.w3.org/TR/1998/REC-xml-19980210">XML 1.0</A> parser
+-written in C. It aims to be fully conforming. It is currently not a
+-validating XML processor. The current production version of expat can
+-be downloaded from <A href = "ftp://ftp.jclark.com/pub/xml/expat.zip"
+->ftp://ftp.jclark.com/pub/xml/expat.zip</A>.</P>
+-
+-<P>The directory <SAMP>xmltok</SAMP> contains a low-level library for
+-tokenizing XML. The interface is documented in
+-<SAMP>xmltok/xmltok.h</SAMP>.</P>
+-
+-<P>The directory <SAMP>xmlparse</SAMP> contains an XML parser library
+-which is built on top of the <SAMP>xmltok</SAMP> library. The
+-interface is documented in <SAMP>xmlparse/xmlparse.h</SAMP>. The
+-directory <SAMP>sample</SAMP> contains a simple example program using
+-this interface; <SAMP>sample/build.bat</SAMP> is a batch file to build
+-the example using Visual C++.</P>
+-
+-<P>The directory <SAMP>xmlwf</SAMP> contains the <SAMP>xmlwf</SAMP>
+-application, which uses the <SAMP>xmlparse</SAMP> library. The
+-arguments to <SAMP>xmlwf</SAMP> are one or more files which are each
+-to be checked for well-formedness. An option <SAMP>-d
+-<VAR>dir</VAR></SAMP> can be specified; for each well-formed input
+-file the corresponding <A
+-href="http://www.jclark.com/xml/canonxml.html">canonical XML</A> will
+-be written to <SAMP>dir/<VAR>f</VAR></SAMP>, where
+-<SAMP><VAR>f</VAR></SAMP> is the filename (without any path) of the
+-input file. A <CODE>-x</CODE> option will cause references to
+-external general entities to be processed. A <CODE>-s</CODE> option
+-will make documents that are not standalone cause an error (a document
+-is considered standalone if either it is intrinsically standalone
+-because it has no external subset and no references to parameter
+-entities in the internal subset or it is declared as standalone in the
+-XML declaration).</P>
+-
+-<P>The <SAMP>bin</SAMP> directory contains Win32 executables. The
+-<SAMP>lib</SAMP> directory contains Win32 import libraries.</P>
+-
+-<P>Answers to some frequently asked questions about expat can be found
+-in the <A HREF="http://www.jclark.com/xml/expatfaq.html">expat
+-FAQ</A>.</P>
+-
+-<P></P>
+-
+-<ADDRESS>
+-
+-<A HREF="mailto:jjc@jclark.com">James Clark</A>
+-
+-</ADDRESS>
+-
+-</BODY>
+-
+-</HTML>
+diff -u -r -N original/xmlrpc-epi-0.51/expat/expat.mak dump_expat/xmlrpc-epi-0.51/expat/expat.mak
+--- original/xmlrpc-epi-0.51/expat/expat.mak 2001-03-19 21:28:32.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/expat.mak 1969-12-31 18:00:00.000000000 -0600
+@@ -1,1071 +0,0 @@
+-# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20
+-# ** DO NOT EDIT **
+-
+-# TARGTYPE "Win32 (x86) Console Application" 0x0103
+-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+-
+-!IF "$(CFG)" == ""
+-CFG=xmltok - Win32 Debug
+-!MESSAGE No configuration specified. Defaulting to xmltok - Win32 Debug.
+-!ENDIF
+-
+-!IF "$(CFG)" != "xmlwf - Win32 Release" && "$(CFG)" != "xmlwf - Win32 Debug" &&\
+- "$(CFG)" != "gennmtab - Win32 Release" && "$(CFG)" != "gennmtab - Win32 Debug"\
+- && "$(CFG)" != "xmlparse - Win32 Release" && "$(CFG)" !=\
+- "xmlparse - Win32 Debug" && "$(CFG)" != "xmltok - Win32 Release" && "$(CFG)" !=\
+- "xmltok - Win32 Debug"
+-!MESSAGE Invalid configuration "$(CFG)" specified.
+-!MESSAGE You can specify a configuration when running NMAKE on this makefile
+-!MESSAGE by defining the macro CFG on the command line. For example:
+-!MESSAGE
+-!MESSAGE NMAKE /f "expat.mak" CFG="xmltok - Win32 Debug"
+-!MESSAGE
+-!MESSAGE Possible choices for configuration are:
+-!MESSAGE
+-!MESSAGE "xmlwf - Win32 Release" (based on "Win32 (x86) Console Application")
+-!MESSAGE "xmlwf - Win32 Debug" (based on "Win32 (x86) Console Application")
+-!MESSAGE "gennmtab - Win32 Release" (based on\
+- "Win32 (x86) Console Application")
+-!MESSAGE "gennmtab - Win32 Debug" (based on "Win32 (x86) Console Application")
+-!MESSAGE "xmlparse - Win32 Release" (based on\
+- "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE "xmlparse - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE "xmltok - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE "xmltok - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE
+-!ERROR An invalid configuration is specified.
+-!ENDIF
+-
+-!IF "$(OS)" == "Windows_NT"
+-NULL=
+-!ELSE
+-NULL=nul
+-!ENDIF
+-################################################################################
+-# Begin Project
+-# PROP Target_Last_Scanned "xmltok - Win32 Debug"
+-
+-!IF "$(CFG)" == "xmlwf - Win32 Release"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir "xmlwf\Release"
+-# PROP BASE Intermediate_Dir "xmlwf\Release"
+-# PROP BASE Target_Dir "xmlwf"
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir "xmlwf\Release"
+-# PROP Intermediate_Dir "xmlwf\Release"
+-# PROP Target_Dir "xmlwf"
+-OUTDIR=.\xmlwf\Release
+-INTDIR=.\xmlwf\Release
+-
+-ALL : "xmlparse - Win32 Release" ".\bin\xmlwf.exe"
+-
+-CLEAN :
+- -@erase "$(INTDIR)\codepage.obj"
+- -@erase "$(INTDIR)\win32filemap.obj"
+- -@erase "$(INTDIR)\xmlwf.obj"
+- -@erase ".\bin\xmlwf.exe"
+-
+-"$(OUTDIR)" :
+- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+-
+-CPP=cl.exe
+-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+-# ADD CPP /nologo /W3 /GX /O2 /I "." /I "xmlparse" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /c
+-CPP_PROJ=/nologo /ML /W3 /GX /O2 /I "." /I "xmlparse" /D "NDEBUG" /D "WIN32" /D\
+- "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D\
+- XMLPARSEAPI=__declspec(dllimport) /Fp"$(INTDIR)/xmlwf.pch" /YX /Fo"$(INTDIR)/"\
+- /c
+-CPP_OBJS=.\xmlwf\Release/
+-CPP_SBRS=.\.
+-
+-.c{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.c{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-RSC=rc.exe
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-BSC32_FLAGS=/nologo /o"$(OUTDIR)/xmlwf.bsc"
+-BSC32_SBRS= \
+-
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+-# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"bin/xmlwf.exe"
+-LINK32_FLAGS=setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib\
+- comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
+- odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\
+- /pdb:"$(OUTDIR)/xmlwf.pdb" /machine:I386 /out:"bin/xmlwf.exe"
+-LINK32_OBJS= \
+- "$(INTDIR)\codepage.obj" \
+- "$(INTDIR)\win32filemap.obj" \
+- "$(INTDIR)\xmlwf.obj" \
+- ".\xmlparse\Release\xmlparse.lib"
+-
+-".\bin\xmlwf.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+- $(LINK32) @<<
+- $(LINK32_FLAGS) $(LINK32_OBJS)
+-<<
+-
+-!ELSEIF "$(CFG)" == "xmlwf - Win32 Debug"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 1
+-# PROP BASE Output_Dir "xmlwf\Debug"
+-# PROP BASE Intermediate_Dir "xmlwf\Debug"
+-# PROP BASE Target_Dir "xmlwf"
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 1
+-# PROP Output_Dir "xmlwf\Debug"
+-# PROP Intermediate_Dir "xmlwf\Debug"
+-# PROP Target_Dir "xmlwf"
+-OUTDIR=.\xmlwf\Debug
+-INTDIR=.\xmlwf\Debug
+-
+-ALL : "xmlparse - Win32 Debug" ".\dbgbin\xmlwf.exe"
+-
+-CLEAN :
+- -@erase "$(INTDIR)\codepage.obj"
+- -@erase "$(INTDIR)\vc40.idb"
+- -@erase "$(INTDIR)\vc40.pdb"
+- -@erase "$(INTDIR)\win32filemap.obj"
+- -@erase "$(INTDIR)\xmlwf.obj"
+- -@erase "$(OUTDIR)\xmlwf.pdb"
+- -@erase ".\dbgbin\xmlwf.exe"
+- -@erase ".\dbgbin\xmlwf.ilk"
+-
+-"$(OUTDIR)" :
+- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+-
+-CPP=cl.exe
+-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /I "xmlparse" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /c
+-CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /I "xmlparse" /D "_DEBUG" /D\
+- "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D\
+- XMLPARSEAPI=__declspec(dllimport) /Fp"$(INTDIR)/xmlwf.pch" /YX /Fo"$(INTDIR)/"\
+- /Fd"$(INTDIR)/" /c
+-CPP_OBJS=.\xmlwf\Debug/
+-CPP_SBRS=.\.
+-
+-.c{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.c{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-RSC=rc.exe
+-# ADD BASE RSC /l 0x809 /d "_DEBUG"
+-# ADD RSC /l 0x809 /d "_DEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-BSC32_FLAGS=/nologo /o"$(OUTDIR)/xmlwf.bsc"
+-BSC32_SBRS= \
+-
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+-# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"dbgbin/xmlwf.exe"
+-LINK32_FLAGS=setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib\
+- comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
+- odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes\
+- /pdb:"$(OUTDIR)/xmlwf.pdb" /debug /machine:I386 /out:"dbgbin/xmlwf.exe"
+-LINK32_OBJS= \
+- "$(INTDIR)\codepage.obj" \
+- "$(INTDIR)\win32filemap.obj" \
+- "$(INTDIR)\xmlwf.obj" \
+- ".\xmlparse\Debug\xmlparse.lib"
+-
+-".\dbgbin\xmlwf.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+- $(LINK32) @<<
+- $(LINK32_FLAGS) $(LINK32_OBJS)
+-<<
+-
+-!ELSEIF "$(CFG)" == "gennmtab - Win32 Release"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir "gennmtab\Release"
+-# PROP BASE Intermediate_Dir "gennmtab\Release"
+-# PROP BASE Target_Dir "gennmtab"
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir "gennmtab\Release"
+-# PROP Intermediate_Dir "gennmtab\Release"
+-# PROP Target_Dir "gennmtab"
+-OUTDIR=.\gennmtab\Release
+-INTDIR=.\gennmtab\Release
+-
+-ALL : "$(OUTDIR)\gennmtab.exe"
+-
+-CLEAN :
+- -@erase "$(INTDIR)\gennmtab.obj"
+- -@erase "$(OUTDIR)\gennmtab.exe"
+-
+-"$(OUTDIR)" :
+- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+-
+-CPP=cl.exe
+-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+-# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+-CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\
+- /Fp"$(INTDIR)/gennmtab.pch" /YX /Fo"$(INTDIR)/" /c
+-CPP_OBJS=.\gennmtab\Release/
+-CPP_SBRS=.\.
+-
+-.c{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.c{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-RSC=rc.exe
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-BSC32_FLAGS=/nologo /o"$(OUTDIR)/gennmtab.bsc"
+-BSC32_SBRS= \
+-
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+- advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
+- odbccp32.lib /nologo /subsystem:console /incremental:no\
+- /pdb:"$(OUTDIR)/gennmtab.pdb" /machine:I386 /out:"$(OUTDIR)/gennmtab.exe"
+-LINK32_OBJS= \
+- "$(INTDIR)\gennmtab.obj"
+-
+-"$(OUTDIR)\gennmtab.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+- $(LINK32) @<<
+- $(LINK32_FLAGS) $(LINK32_OBJS)
+-<<
+-
+-!ELSEIF "$(CFG)" == "gennmtab - Win32 Debug"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 1
+-# PROP BASE Output_Dir "gennmtab\Debug"
+-# PROP BASE Intermediate_Dir "gennmtab\Debug"
+-# PROP BASE Target_Dir "gennmtab"
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 1
+-# PROP Output_Dir "gennmtab\Debug"
+-# PROP Intermediate_Dir "gennmtab\Debug"
+-# PROP Target_Dir "gennmtab"
+-OUTDIR=.\gennmtab\Debug
+-INTDIR=.\gennmtab\Debug
+-
+-ALL : "$(OUTDIR)\gennmtab.exe"
+-
+-CLEAN :
+- -@erase "$(INTDIR)\gennmtab.obj"
+- -@erase "$(INTDIR)\vc40.idb"
+- -@erase "$(INTDIR)\vc40.pdb"
+- -@erase "$(OUTDIR)\gennmtab.exe"
+- -@erase "$(OUTDIR)\gennmtab.ilk"
+- -@erase "$(OUTDIR)\gennmtab.pdb"
+-
+-"$(OUTDIR)" :
+- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+-
+-CPP=cl.exe
+-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+-CPP_PROJ=/nologo /MLd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE"\
+- /Fp"$(INTDIR)/gennmtab.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
+-CPP_OBJS=.\gennmtab\Debug/
+-CPP_SBRS=.\.
+-
+-.c{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.c{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-RSC=rc.exe
+-# ADD BASE RSC /l 0x809 /d "_DEBUG"
+-# ADD RSC /l 0x809 /d "_DEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-BSC32_FLAGS=/nologo /o"$(OUTDIR)/gennmtab.bsc"
+-BSC32_SBRS= \
+-
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+- advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
+- odbccp32.lib /nologo /subsystem:console /incremental:yes\
+- /pdb:"$(OUTDIR)/gennmtab.pdb" /debug /machine:I386\
+- /out:"$(OUTDIR)/gennmtab.exe"
+-LINK32_OBJS= \
+- "$(INTDIR)\gennmtab.obj"
+-
+-"$(OUTDIR)\gennmtab.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+- $(LINK32) @<<
+- $(LINK32_FLAGS) $(LINK32_OBJS)
+-<<
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir "xmlparse\Release"
+-# PROP BASE Intermediate_Dir "xmlparse\Release"
+-# PROP BASE Target_Dir "xmlparse"
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir "xmlparse\Release"
+-# PROP Intermediate_Dir "xmlparse\Release"
+-# PROP Target_Dir "xmlparse"
+-OUTDIR=.\xmlparse\Release
+-INTDIR=.\xmlparse\Release
+-
+-ALL : "xmltok - Win32 Release" ".\bin\xmlparse.dll"
+-
+-CLEAN :
+- -@erase "$(INTDIR)\hashtable.obj"
+- -@erase "$(INTDIR)\xmlparse.obj"
+- -@erase "$(OUTDIR)\xmlparse.exp"
+- -@erase "$(OUTDIR)\xmlparse.lib"
+- -@erase ".\bin\xmlparse.dll"
+-
+-"$(OUTDIR)" :
+- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+-
+-CPP=cl.exe
+-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+-# ADD CPP /nologo /W3 /GX /O2 /I "xmltok" /I "xmlwf" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllexport) /YX /c
+-CPP_PROJ=/nologo /ML /W3 /GX /O2 /I "xmltok" /I "xmlwf" /D "NDEBUG" /D "WIN32"\
+- /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllimport) /D\
+- XMLPARSEAPI=__declspec(dllexport) /Fp"$(INTDIR)/xmlparse.pch" /YX\
+- /Fo"$(INTDIR)/" /c
+-CPP_OBJS=.\xmlparse\Release/
+-CPP_SBRS=.\.
+-
+-.c{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.c{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-MTL=mktyplib.exe
+-# ADD BASE MTL /nologo /D "NDEBUG" /win32
+-# ADD MTL /nologo /D "NDEBUG" /win32
+-MTL_PROJ=/nologo /D "NDEBUG" /win32
+-RSC=rc.exe
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-BSC32_FLAGS=/nologo /o"$(OUTDIR)/xmlparse.bsc"
+-BSC32_SBRS= \
+-
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20000000 /subsystem:windows /dll /machine:I386 /out:"bin/xmlparse.dll"
+-# SUBTRACT LINK32 /profile
+-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+- advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
+- odbccp32.lib /nologo /base:0x20000000 /subsystem:windows /dll /incremental:no\
+- /pdb:"$(OUTDIR)/xmlparse.pdb" /machine:I386 /out:"bin/xmlparse.dll"\
+- /implib:"$(OUTDIR)/xmlparse.lib"
+-LINK32_OBJS= \
+- "$(INTDIR)\hashtable.obj" \
+- "$(INTDIR)\xmlparse.obj" \
+- ".\xmltok\Release\xmltok.lib"
+-
+-".\bin\xmlparse.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+- $(LINK32) @<<
+- $(LINK32_FLAGS) $(LINK32_OBJS)
+-<<
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 1
+-# PROP BASE Output_Dir "xmlparse\Debug"
+-# PROP BASE Intermediate_Dir "xmlparse\Debug"
+-# PROP BASE Target_Dir "xmlparse"
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 1
+-# PROP Output_Dir "xmlparse\Debug"
+-# PROP Intermediate_Dir "xmlparse\Debug"
+-# PROP Target_Dir "xmlparse"
+-OUTDIR=.\xmlparse\Debug
+-INTDIR=.\xmlparse\Debug
+-
+-ALL : "xmltok - Win32 Debug" ".\dbgbin\xmlparse.dll"
+-
+-CLEAN :
+- -@erase "$(INTDIR)\hashtable.obj"
+- -@erase "$(INTDIR)\vc40.idb"
+- -@erase "$(INTDIR)\vc40.pdb"
+- -@erase "$(INTDIR)\xmlparse.obj"
+- -@erase "$(OUTDIR)\xmlparse.exp"
+- -@erase "$(OUTDIR)\xmlparse.lib"
+- -@erase "$(OUTDIR)\xmlparse.pdb"
+- -@erase ".\dbgbin\xmlparse.dll"
+- -@erase ".\dbgbin\xmlparse.ilk"
+-
+-"$(OUTDIR)" :
+- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+-
+-CPP=cl.exe
+-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "xmltok" /I "xmlwf" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllexport) /YX /c
+-CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "xmltok" /I "xmlwf" /D "_DEBUG" /D\
+- "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllimport) /D\
+- XMLPARSEAPI=__declspec(dllexport) /Fp"$(INTDIR)/xmlparse.pch" /YX\
+- /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
+-CPP_OBJS=.\xmlparse\Debug/
+-CPP_SBRS=.\.
+-
+-.c{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.c{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-MTL=mktyplib.exe
+-# ADD BASE MTL /nologo /D "_DEBUG" /win32
+-# ADD MTL /nologo /D "_DEBUG" /win32
+-MTL_PROJ=/nologo /D "_DEBUG" /win32
+-RSC=rc.exe
+-# ADD BASE RSC /l 0x809 /d "_DEBUG"
+-# ADD RSC /l 0x809 /d "_DEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-BSC32_FLAGS=/nologo /o"$(OUTDIR)/xmlparse.bsc"
+-BSC32_SBRS= \
+-
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:0x20000000 /subsystem:windows /dll /debug /machine:I386 /out:"dbgbin/xmlparse.dll"
+-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+- advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
+- odbccp32.lib /nologo /base:0x20000000 /subsystem:windows /dll /incremental:yes\
+- /pdb:"$(OUTDIR)/xmlparse.pdb" /debug /machine:I386 /out:"dbgbin/xmlparse.dll"\
+- /implib:"$(OUTDIR)/xmlparse.lib"
+-LINK32_OBJS= \
+- "$(INTDIR)\hashtable.obj" \
+- "$(INTDIR)\xmlparse.obj" \
+- ".\xmltok\Debug\xmltok.lib"
+-
+-".\dbgbin\xmlparse.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+- $(LINK32) @<<
+- $(LINK32_FLAGS) $(LINK32_OBJS)
+-<<
+-
+-!ELSEIF "$(CFG)" == "xmltok - Win32 Release"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir "xmltok\Release"
+-# PROP BASE Intermediate_Dir "xmltok\Release"
+-# PROP BASE Target_Dir "xmltok"
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir "xmltok\Release"
+-# PROP Intermediate_Dir "xmltok\Release"
+-# PROP Target_Dir "xmltok"
+-OUTDIR=.\xmltok\Release
+-INTDIR=.\xmltok\Release
+-
+-ALL : ".\bin\xmltok.dll"
+-
+-CLEAN :
+- -@erase "$(INTDIR)\dllmain.obj"
+- -@erase "$(INTDIR)\xmlrole.obj"
+- -@erase "$(INTDIR)\xmltok.obj"
+- -@erase "$(OUTDIR)\xmltok.exp"
+- -@erase "$(OUTDIR)\xmltok.lib"
+- -@erase ".\bin\xmltok.dll"
+-
+-"$(OUTDIR)" :
+- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+-
+-CPP=cl.exe
+-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+-# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllexport) /YX /c
+-CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D\
+- XMLTOKAPI=__declspec(dllexport) /Fp"$(INTDIR)/xmltok.pch" /YX /Fo"$(INTDIR)/"\
+- /c
+-CPP_OBJS=.\xmltok\Release/
+-CPP_SBRS=.\.
+-
+-.c{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.c{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-MTL=mktyplib.exe
+-# ADD BASE MTL /nologo /D "NDEBUG" /win32
+-# ADD MTL /nologo /D "NDEBUG" /win32
+-MTL_PROJ=/nologo /D "NDEBUG" /win32
+-RSC=rc.exe
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-BSC32_FLAGS=/nologo /o"$(OUTDIR)/xmltok.bsc"
+-BSC32_SBRS= \
+-
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"DllMain" /subsystem:windows /dll /machine:I386 /out:"bin/xmltok.dll"
+-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+- advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
+- odbccp32.lib /nologo /entry:"DllMain" /subsystem:windows /dll /incremental:no\
+- /pdb:"$(OUTDIR)/xmltok.pdb" /machine:I386 /out:"bin/xmltok.dll"\
+- /implib:"$(OUTDIR)/xmltok.lib"
+-LINK32_OBJS= \
+- "$(INTDIR)\dllmain.obj" \
+- "$(INTDIR)\xmlrole.obj" \
+- "$(INTDIR)\xmltok.obj"
+-
+-".\bin\xmltok.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+- $(LINK32) @<<
+- $(LINK32_FLAGS) $(LINK32_OBJS)
+-<<
+-
+-!ELSEIF "$(CFG)" == "xmltok - Win32 Debug"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 1
+-# PROP BASE Output_Dir "xmltok\Debug"
+-# PROP BASE Intermediate_Dir "xmltok\Debug"
+-# PROP BASE Target_Dir "xmltok"
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 1
+-# PROP Output_Dir "xmltok\Debug"
+-# PROP Intermediate_Dir "xmltok\Debug"
+-# PROP Target_Dir "xmltok"
+-OUTDIR=.\xmltok\Debug
+-INTDIR=.\xmltok\Debug
+-
+-ALL : ".\dbgbin\xmltok.dll"
+-
+-CLEAN :
+- -@erase "$(INTDIR)\dllmain.obj"
+- -@erase "$(INTDIR)\vc40.idb"
+- -@erase "$(INTDIR)\vc40.pdb"
+- -@erase "$(INTDIR)\xmlrole.obj"
+- -@erase "$(INTDIR)\xmltok.obj"
+- -@erase "$(OUTDIR)\xmltok.exp"
+- -@erase "$(OUTDIR)\xmltok.lib"
+- -@erase "$(OUTDIR)\xmltok.pdb"
+- -@erase ".\dbgbin\xmltok.dll"
+- -@erase ".\dbgbin\xmltok.ilk"
+-
+-"$(OUTDIR)" :
+- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+-
+-CPP=cl.exe
+-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllexport) /YX /c
+-CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS"\
+- /D XMLTOKAPI=__declspec(dllexport) /Fp"$(INTDIR)/xmltok.pch" /YX\
+- /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
+-CPP_OBJS=.\xmltok\Debug/
+-CPP_SBRS=.\.
+-
+-.c{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_OBJS)}.obj:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.c{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cpp{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-.cxx{$(CPP_SBRS)}.sbr:
+- $(CPP) $(CPP_PROJ) $<
+-
+-MTL=mktyplib.exe
+-# ADD BASE MTL /nologo /D "_DEBUG" /win32
+-# ADD MTL /nologo /D "_DEBUG" /win32
+-MTL_PROJ=/nologo /D "_DEBUG" /win32
+-RSC=rc.exe
+-# ADD BASE RSC /l 0x809 /d "_DEBUG"
+-# ADD RSC /l 0x809 /d "_DEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-BSC32_FLAGS=/nologo /o"$(OUTDIR)/xmltok.bsc"
+-BSC32_SBRS= \
+-
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"dbgbin/xmltok.dll"
+-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+- advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
+- odbccp32.lib /nologo /subsystem:windows /dll /incremental:yes\
+- /pdb:"$(OUTDIR)/xmltok.pdb" /debug /machine:I386 /out:"dbgbin/xmltok.dll"\
+- /implib:"$(OUTDIR)/xmltok.lib"
+-LINK32_OBJS= \
+- "$(INTDIR)\dllmain.obj" \
+- "$(INTDIR)\xmlrole.obj" \
+- "$(INTDIR)\xmltok.obj"
+-
+-".\dbgbin\xmltok.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+- $(LINK32) @<<
+- $(LINK32_FLAGS) $(LINK32_OBJS)
+-<<
+-
+-!ENDIF
+-
+-################################################################################
+-# Begin Target
+-
+-# Name "xmlwf - Win32 Release"
+-# Name "xmlwf - Win32 Debug"
+-
+-!IF "$(CFG)" == "xmlwf - Win32 Release"
+-
+-!ELSEIF "$(CFG)" == "xmlwf - Win32 Debug"
+-
+-!ENDIF
+-
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmlwf\xmlwf.c
+-DEP_CPP_XMLWF=\
+- ".\xmlparse\xmlparse.h"\
+- ".\xmlwf\codepage.h"\
+- ".\xmlwf\filemap.h"\
+-
+-
+-"$(INTDIR)\xmlwf.obj" : $(SOURCE) $(DEP_CPP_XMLWF) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-# End Source File
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmlwf\win32filemap.c
+-DEP_CPP_WIN32=\
+- ".\xmlwf\filemap.h"\
+-
+-
+-"$(INTDIR)\win32filemap.obj" : $(SOURCE) $(DEP_CPP_WIN32) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-# End Source File
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmlwf\unixfilemap.c
+-DEP_CPP_UNIXF=\
+- ".\xmlwf\filemap.h"\
+- {$(INCLUDE)}"\sys\stat.h"\
+- {$(INCLUDE)}"\sys\TYPES.H"\
+-
+-# PROP Exclude_From_Build 1
+-# End Source File
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmlwf\readfilemap.c
+-DEP_CPP_READF=\
+- {$(INCLUDE)}"\sys\stat.h"\
+- {$(INCLUDE)}"\sys\TYPES.H"\
+-
+-# PROP Exclude_From_Build 1
+-# End Source File
+-################################################################################
+-# Begin Project Dependency
+-
+-# Project_Dep_Name "xmlparse"
+-
+-!IF "$(CFG)" == "xmlwf - Win32 Release"
+-
+-"xmlparse - Win32 Release" :
+- $(MAKE) /$(MAKEFLAGS) /F ".\expat.mak" CFG="xmlparse - Win32 Release"
+-
+-!ELSEIF "$(CFG)" == "xmlwf - Win32 Debug"
+-
+-"xmlparse - Win32 Debug" :
+- $(MAKE) /$(MAKEFLAGS) /F ".\expat.mak" CFG="xmlparse - Win32 Debug"
+-
+-!ENDIF
+-
+-# End Project Dependency
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmlwf\codepage.c
+-DEP_CPP_CODEP=\
+- ".\xmlwf\codepage.h"\
+-
+-
+-"$(INTDIR)\codepage.obj" : $(SOURCE) $(DEP_CPP_CODEP) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-# End Source File
+-# End Target
+-################################################################################
+-# Begin Target
+-
+-# Name "gennmtab - Win32 Release"
+-# Name "gennmtab - Win32 Debug"
+-
+-!IF "$(CFG)" == "gennmtab - Win32 Release"
+-
+-!ELSEIF "$(CFG)" == "gennmtab - Win32 Debug"
+-
+-!ENDIF
+-
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\gennmtab\gennmtab.c
+-
+-"$(INTDIR)\gennmtab.obj" : $(SOURCE) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-# End Source File
+-# End Target
+-################################################################################
+-# Begin Target
+-
+-# Name "xmlparse - Win32 Release"
+-# Name "xmlparse - Win32 Debug"
+-
+-!IF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-!ENDIF
+-
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmlparse\xmlparse.c
+-
+-!IF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-DEP_CPP_XMLPA=\
+- ".\xmlparse\hashtable.h"\
+- ".\xmlparse\xmlparse.h"\
+- ".\xmltok\xmldef.h"\
+- ".\xmltok\xmlrole.h"\
+- ".\xmltok\xmltok.h"\
+-
+-NODEP_CPP_XMLPA=\
+- ".\xmltok\nspr.h"\
+-
+-
+-"$(INTDIR)\xmlparse.obj" : $(SOURCE) $(DEP_CPP_XMLPA) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-DEP_CPP_XMLPA=\
+- ".\xmlparse\hashtable.h"\
+- ".\xmlparse\xmlparse.h"\
+- ".\xmltok\xmldef.h"\
+- ".\xmltok\xmlrole.h"\
+- ".\xmltok\xmltok.h"\
+-
+-NODEP_CPP_XMLPA=\
+- ".\xmltok\nspr.h"\
+-
+-
+-"$(INTDIR)\xmlparse.obj" : $(SOURCE) $(DEP_CPP_XMLPA) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ENDIF
+-
+-# End Source File
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmlparse\hashtable.c
+-
+-!IF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-DEP_CPP_HASHT=\
+- ".\xmlparse\hashtable.h"\
+- ".\xmltok\xmldef.h"\
+-
+-NODEP_CPP_HASHT=\
+- ".\xmltok\nspr.h"\
+-
+-
+-"$(INTDIR)\hashtable.obj" : $(SOURCE) $(DEP_CPP_HASHT) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-DEP_CPP_HASHT=\
+- ".\xmlparse\hashtable.h"\
+- ".\xmltok\xmldef.h"\
+-
+-NODEP_CPP_HASHT=\
+- ".\xmltok\nspr.h"\
+-
+-
+-"$(INTDIR)\hashtable.obj" : $(SOURCE) $(DEP_CPP_HASHT) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ENDIF
+-
+-# End Source File
+-################################################################################
+-# Begin Project Dependency
+-
+-# Project_Dep_Name "xmltok"
+-
+-!IF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-"xmltok - Win32 Release" :
+- $(MAKE) /$(MAKEFLAGS) /F ".\expat.mak" CFG="xmltok - Win32 Release"
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-"xmltok - Win32 Debug" :
+- $(MAKE) /$(MAKEFLAGS) /F ".\expat.mak" CFG="xmltok - Win32 Debug"
+-
+-!ENDIF
+-
+-# End Project Dependency
+-# End Target
+-################################################################################
+-# Begin Target
+-
+-# Name "xmltok - Win32 Release"
+-# Name "xmltok - Win32 Debug"
+-
+-!IF "$(CFG)" == "xmltok - Win32 Release"
+-
+-!ELSEIF "$(CFG)" == "xmltok - Win32 Debug"
+-
+-!ENDIF
+-
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmltok\xmlrole.c
+-
+-!IF "$(CFG)" == "xmltok - Win32 Release"
+-
+-DEP_CPP_XMLRO=\
+- ".\xmltok\xmldef.h"\
+- ".\xmltok\xmlrole.h"\
+- ".\xmltok\xmltok.h"\
+-
+-NODEP_CPP_XMLRO=\
+- ".\xmltok\nspr.h"\
+-
+-
+-"$(INTDIR)\xmlrole.obj" : $(SOURCE) $(DEP_CPP_XMLRO) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ELSEIF "$(CFG)" == "xmltok - Win32 Debug"
+-
+-DEP_CPP_XMLRO=\
+- ".\xmltok\xmldef.h"\
+- ".\xmltok\xmlrole.h"\
+- ".\xmltok\xmltok.h"\
+-
+-NODEP_CPP_XMLRO=\
+- ".\xmltok\nspr.h"\
+-
+-
+-"$(INTDIR)\xmlrole.obj" : $(SOURCE) $(DEP_CPP_XMLRO) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ENDIF
+-
+-# End Source File
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmltok\xmltok.c
+-
+-!IF "$(CFG)" == "xmltok - Win32 Release"
+-
+-DEP_CPP_XMLTO=\
+- ".\xmltok\asciitab.h"\
+- ".\xmltok\iasciitab.h"\
+- ".\xmltok\latin1tab.h"\
+- ".\xmltok\nametab.h"\
+- ".\xmltok\utf8tab.h"\
+- ".\xmltok\xmldef.h"\
+- ".\xmltok\xmltok.h"\
+- ".\xmltok\xmltok_impl.c"\
+- ".\xmltok\xmltok_impl.h"\
+-
+-NODEP_CPP_XMLTO=\
+- ".\xmltok\nspr.h"\
+-
+-
+-"$(INTDIR)\xmltok.obj" : $(SOURCE) $(DEP_CPP_XMLTO) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ELSEIF "$(CFG)" == "xmltok - Win32 Debug"
+-
+-DEP_CPP_XMLTO=\
+- ".\xmltok\asciitab.h"\
+- ".\xmltok\iasciitab.h"\
+- ".\xmltok\latin1tab.h"\
+- ".\xmltok\nametab.h"\
+- ".\xmltok\utf8tab.h"\
+- ".\xmltok\xmldef.h"\
+- ".\xmltok\xmltok.h"\
+- ".\xmltok\xmltok_impl.c"\
+- ".\xmltok\xmltok_impl.h"\
+-
+-NODEP_CPP_XMLTO=\
+- ".\xmltok\nspr.h"\
+-
+-
+-"$(INTDIR)\xmltok.obj" : $(SOURCE) $(DEP_CPP_XMLTO) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ENDIF
+-
+-# End Source File
+-################################################################################
+-# Begin Source File
+-
+-SOURCE=.\xmltok\dllmain.c
+-
+-!IF "$(CFG)" == "xmltok - Win32 Release"
+-
+-
+-"$(INTDIR)\dllmain.obj" : $(SOURCE) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ELSEIF "$(CFG)" == "xmltok - Win32 Debug"
+-
+-
+-"$(INTDIR)\dllmain.obj" : $(SOURCE) "$(INTDIR)"
+- $(CPP) $(CPP_PROJ) $(SOURCE)
+-
+-
+-!ENDIF
+-
+-# End Source File
+-# End Target
+-# End Project
+-################################################################################
+Binary files original/xmlrpc-epi-0.51/expat/gennmtab/gennmtab and dump_expat/xmlrpc-epi-0.51/expat/gennmtab/gennmtab differ
+diff -u -r -N original/xmlrpc-epi-0.51/expat/gennmtab/gennmtab.c dump_expat/xmlrpc-epi-0.51/expat/gennmtab/gennmtab.c
+--- original/xmlrpc-epi-0.51/expat/gennmtab/gennmtab.c 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/gennmtab/gennmtab.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,452 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include <string.h>
+-#include <stdio.h>
+-#include <stddef.h>
+-
+-struct range {
+- int start;
+- int end;
+-};
+-
+-struct range nmstrt[] = {
+- { '_' },
+- { ':' },
+- /* BaseChar */
+- { 0x0041, 0x005a },
+- { 0x0061, 0x007a },
+- { 0x00c0, 0x00d6 },
+- { 0x00d8, 0x00f6 },
+- { 0x00f8, 0x00ff },
+- { 0x0100, 0x0131 },
+- { 0x0134, 0x013e },
+- { 0x0141, 0x0148 },
+- { 0x014a, 0x017e },
+- { 0x0180, 0x01c3 },
+- { 0x01cd, 0x01f0 },
+- { 0x01f4, 0x01f5 },
+- { 0x01fa, 0x0217 },
+- { 0x0250, 0x02a8 },
+- { 0x02bb, 0x02c1 },
+- { 0x0386 },
+- { 0x0388, 0x038a },
+- { 0x038c },
+- { 0x038e, 0x03a1 },
+- { 0x03a3, 0x03ce },
+- { 0x03d0, 0x03d6 },
+- { 0x03da },
+- { 0x03dc },
+- { 0x03de },
+- { 0x03e0 },
+- { 0x03e2, 0x03f3 },
+- { 0x0401, 0x040c },
+- { 0x040e, 0x044f },
+- { 0x0451, 0x045c },
+- { 0x045e, 0x0481 },
+- { 0x0490, 0x04c4 },
+- { 0x04c7, 0x04c8 },
+- { 0x04cb, 0x04cc },
+- { 0x04d0, 0x04eb },
+- { 0x04ee, 0x04f5 },
+- { 0x04f8, 0x04f9 },
+- { 0x0531, 0x0556 },
+- { 0x0559 },
+- { 0x0561, 0x0586 },
+- { 0x05d0, 0x05ea },
+- { 0x05f0, 0x05f2 },
+- { 0x0621, 0x063a },
+- { 0x0641, 0x064a },
+- { 0x0671, 0x06b7 },
+- { 0x06ba, 0x06be },
+- { 0x06c0, 0x06ce },
+- { 0x06d0, 0x06d3 },
+- { 0x06d5 },
+- { 0x06e5, 0x06e6 },
+- { 0x0905, 0x0939 },
+- { 0x093d },
+- { 0x0958, 0x0961 },
+- { 0x0985, 0x098c },
+- { 0x098f, 0x0990 },
+- { 0x0993, 0x09a8 },
+- { 0x09aa, 0x09b0 },
+- { 0x09b2 },
+- { 0x09b6, 0x09b9 },
+- { 0x09dc, 0x09dd },
+- { 0x09df, 0x09e1 },
+- { 0x09f0, 0x09f1 },
+- { 0x0a05, 0x0a0a },
+- { 0x0a0f, 0x0a10 },
+- { 0x0a13, 0x0a28 },
+- { 0x0a2a, 0x0a30 },
+- { 0x0a32, 0x0a33 },
+- { 0x0a35, 0x0a36 },
+- { 0x0a38, 0x0a39 },
+- { 0x0a59, 0x0a5c },
+- { 0x0a5e },
+- { 0x0a72, 0x0a74 },
+- { 0x0a85, 0x0a8b },
+- { 0x0a8d },
+- { 0x0a8f, 0x0a91 },
+- { 0x0a93, 0x0aa8 },
+- { 0x0aaa, 0x0ab0 },
+- { 0x0ab2, 0x0ab3 },
+- { 0x0ab5, 0x0ab9 },
+- { 0x0abd },
+- { 0x0ae0 },
+- { 0x0b05, 0x0b0c },
+- { 0x0b0f, 0x0b10 },
+- { 0x0b13, 0x0b28 },
+- { 0x0b2a, 0x0b30 },
+- { 0x0b32, 0x0b33 },
+- { 0x0b36, 0x0b39 },
+- { 0x0b3d },
+- { 0x0b5c, 0x0b5d },
+- { 0x0b5f, 0x0b61 },
+- { 0x0b85, 0x0b8a },
+- { 0x0b8e, 0x0b90 },
+- { 0x0b92, 0x0b95 },
+- { 0x0b99, 0x0b9a },
+- { 0x0b9c },
+- { 0x0b9e, 0x0b9f },
+- { 0x0ba3, 0x0ba4 },
+- { 0x0ba8, 0x0baa },
+- { 0x0bae, 0x0bb5 },
+- { 0x0bb7, 0x0bb9 },
+- { 0x0c05, 0x0c0c },
+- { 0x0c0e, 0x0c10 },
+- { 0x0c12, 0x0c28 },
+- { 0x0c2a, 0x0c33 },
+- { 0x0c35, 0x0c39 },
+- { 0x0c60, 0x0c61 },
+- { 0x0c85, 0x0c8c },
+- { 0x0c8e, 0x0c90 },
+- { 0x0c92, 0x0ca8 },
+- { 0x0caa, 0x0cb3 },
+- { 0x0cb5, 0x0cb9 },
+- { 0x0cde },
+- { 0x0ce0, 0x0ce1 },
+- { 0x0d05, 0x0d0c },
+- { 0x0d0e, 0x0d10 },
+- { 0x0d12, 0x0d28 },
+- { 0x0d2a, 0x0d39 },
+- { 0x0d60, 0x0d61 },
+- { 0x0e01, 0x0e2e },
+- { 0x0e30 },
+- { 0x0e32, 0x0e33 },
+- { 0x0e40, 0x0e45 },
+- { 0x0e81, 0x0e82 },
+- { 0x0e84 },
+- { 0x0e87, 0x0e88 },
+- { 0x0e8a },
+- { 0x0e8d },
+- { 0x0e94, 0x0e97 },
+- { 0x0e99, 0x0e9f },
+- { 0x0ea1, 0x0ea3 },
+- { 0x0ea5 },
+- { 0x0ea7 },
+- { 0x0eaa, 0x0eab },
+- { 0x0ead, 0x0eae },
+- { 0x0eb0 },
+- { 0x0eb2, 0x0eb3 },
+- { 0x0ebd },
+- { 0x0ec0, 0x0ec4 },
+- { 0x0f40, 0x0f47 },
+- { 0x0f49, 0x0f69 },
+- { 0x10a0, 0x10c5 },
+- { 0x10d0, 0x10f6 },
+- { 0x1100 },
+- { 0x1102, 0x1103 },
+- { 0x1105, 0x1107 },
+- { 0x1109 },
+- { 0x110b, 0x110c },
+- { 0x110e, 0x1112 },
+- { 0x113c },
+- { 0x113e },
+- { 0x1140 },
+- { 0x114c },
+- { 0x114e },
+- { 0x1150 },
+- { 0x1154, 0x1155 },
+- { 0x1159 },
+- { 0x115f, 0x1161 },
+- { 0x1163 },
+- { 0x1165 },
+- { 0x1167 },
+- { 0x1169 },
+- { 0x116d, 0x116e },
+- { 0x1172, 0x1173 },
+- { 0x1175 },
+- { 0x119e },
+- { 0x11a8 },
+- { 0x11ab },
+- { 0x11ae, 0x11af },
+- { 0x11b7, 0x11b8 },
+- { 0x11ba },
+- { 0x11bc, 0x11c2 },
+- { 0x11eb },
+- { 0x11f0 },
+- { 0x11f9 },
+- { 0x1e00, 0x1e9b },
+- { 0x1ea0, 0x1ef9 },
+- { 0x1f00, 0x1f15 },
+- { 0x1f18, 0x1f1d },
+- { 0x1f20, 0x1f45 },
+- { 0x1f48, 0x1f4d },
+- { 0x1f50, 0x1f57 },
+- { 0x1f59 },
+- { 0x1f5b },
+- { 0x1f5d },
+- { 0x1f5f, 0x1f7d },
+- { 0x1f80, 0x1fb4 },
+- { 0x1fb6, 0x1fbc },
+- { 0x1fbe },
+- { 0x1fc2, 0x1fc4 },
+- { 0x1fc6, 0x1fcc },
+- { 0x1fd0, 0x1fd3 },
+- { 0x1fd6, 0x1fdb },
+- { 0x1fe0, 0x1fec },
+- { 0x1ff2, 0x1ff4 },
+- { 0x1ff6, 0x1ffc },
+- { 0x2126 },
+- { 0x212a, 0x212b },
+- { 0x212e },
+- { 0x2180, 0x2182 },
+- { 0x3041, 0x3094 },
+- { 0x30a1, 0x30fa },
+- { 0x3105, 0x312c },
+- { 0xac00, 0xd7a3 },
+- /* Ideographic */
+- { 0x4e00, 0x9fa5 },
+- { 0x3007 },
+- { 0x3021, 0x3029 },
+-};
+-
+-/* name chars that are not name start chars */
+-struct range name[] = {
+- { '.' },
+- { '-' },
+- /* CombiningChar */
+- { 0x0300, 0x0345 },
+- { 0x0360, 0x0361 },
+- { 0x0483, 0x0486 },
+- { 0x0591, 0x05a1 },
+- { 0x05a3, 0x05b9 },
+- { 0x05bb, 0x05bd },
+- { 0x05bf },
+- { 0x05c1, 0x05c2 },
+- { 0x05c4 },
+- { 0x064b, 0x0652 },
+- { 0x0670 },
+- { 0x06d6, 0x06dc },
+- { 0x06dd, 0x06df },
+- { 0x06e0, 0x06e4 },
+- { 0x06e7, 0x06e8 },
+- { 0x06ea, 0x06ed },
+- { 0x0901, 0x0903 },
+- { 0x093c },
+- { 0x093e, 0x094c },
+- { 0x094d },
+- { 0x0951, 0x0954 },
+- { 0x0962, 0x0963 },
+- { 0x0981, 0x0983 },
+- { 0x09bc },
+- { 0x09be },
+- { 0x09bf },
+- { 0x09c0, 0x09c4 },
+- { 0x09c7, 0x09c8 },
+- { 0x09cb, 0x09cd },
+- { 0x09d7 },
+- { 0x09e2, 0x09e3 },
+- { 0x0a02 },
+- { 0x0a3c },
+- { 0x0a3e },
+- { 0x0a3f },
+- { 0x0a40, 0x0a42 },
+- { 0x0a47, 0x0a48 },
+- { 0x0a4b, 0x0a4d },
+- { 0x0a70, 0x0a71 },
+- { 0x0a81, 0x0a83 },
+- { 0x0abc },
+- { 0x0abe, 0x0ac5 },
+- { 0x0ac7, 0x0ac9 },
+- { 0x0acb, 0x0acd },
+- { 0x0b01, 0x0b03 },
+- { 0x0b3c },
+- { 0x0b3e, 0x0b43 },
+- { 0x0b47, 0x0b48 },
+- { 0x0b4b, 0x0b4d },
+- { 0x0b56, 0x0b57 },
+- { 0x0b82, 0x0b83 },
+- { 0x0bbe, 0x0bc2 },
+- { 0x0bc6, 0x0bc8 },
+- { 0x0bca, 0x0bcd },
+- { 0x0bd7 },
+- { 0x0c01, 0x0c03 },
+- { 0x0c3e, 0x0c44 },
+- { 0x0c46, 0x0c48 },
+- { 0x0c4a, 0x0c4d },
+- { 0x0c55, 0x0c56 },
+- { 0x0c82, 0x0c83 },
+- { 0x0cbe, 0x0cc4 },
+- { 0x0cc6, 0x0cc8 },
+- { 0x0cca, 0x0ccd },
+- { 0x0cd5, 0x0cd6 },
+- { 0x0d02, 0x0d03 },
+- { 0x0d3e, 0x0d43 },
+- { 0x0d46, 0x0d48 },
+- { 0x0d4a, 0x0d4d },
+- { 0x0d57 },
+- { 0x0e31 },
+- { 0x0e34, 0x0e3a },
+- { 0x0e47, 0x0e4e },
+- { 0x0eb1 },
+- { 0x0eb4, 0x0eb9 },
+- { 0x0ebb, 0x0ebc },
+- { 0x0ec8, 0x0ecd },
+- { 0x0f18, 0x0f19 },
+- { 0x0f35 },
+- { 0x0f37 },
+- { 0x0f39 },
+- { 0x0f3e },
+- { 0x0f3f },
+- { 0x0f71, 0x0f84 },
+- { 0x0f86, 0x0f8b },
+- { 0x0f90, 0x0f95 },
+- { 0x0f97 },
+- { 0x0f99, 0x0fad },
+- { 0x0fb1, 0x0fb7 },
+- { 0x0fb9 },
+- { 0x20d0, 0x20dc },
+- { 0x20e1 },
+- { 0x302a, 0x302f },
+- { 0x3099 },
+- { 0x309a },
+- /* Digit */
+- { 0x0030, 0x0039 },
+- { 0x0660, 0x0669 },
+- { 0x06f0, 0x06f9 },
+- { 0x0966, 0x096f },
+- { 0x09e6, 0x09ef },
+- { 0x0a66, 0x0a6f },
+- { 0x0ae6, 0x0aef },
+- { 0x0b66, 0x0b6f },
+- { 0x0be7, 0x0bef },
+- { 0x0c66, 0x0c6f },
+- { 0x0ce6, 0x0cef },
+- { 0x0d66, 0x0d6f },
+- { 0x0e50, 0x0e59 },
+- { 0x0ed0, 0x0ed9 },
+- { 0x0f20, 0x0f29 },
+- /* Extender */
+- { 0xb7 },
+- { 0x02d0 },
+- { 0x02d1 },
+- { 0x0387 },
+- { 0x0640 },
+- { 0x0e46 },
+- { 0x0ec6 },
+- { 0x3005 },
+- { 0x3031, 0x3035 },
+- { 0x309d, 0x309e },
+- { 0x30fc, 0x30fe },
+-};
+-
+-void setTab(char *tab, struct range *ranges, size_t nRanges)
+-{
+- size_t i;
+- int j;
+- for (i = 0; i < nRanges; i++) {
+- if (ranges[i].end) {
+- for (j = ranges[i].start; j <= ranges[i].end; j++)
+- tab[j] = 1;
+- }
+- else
+- tab[ranges[i].start] = 1;
+- }
+-}
+-
+-void printTabs(char *tab)
+-{
+- int nBitmaps = 2;
+- int i, j, k;
+- unsigned char pageIndex[512];
+-
+- printf(
+-"static const unsigned namingBitmap[] = {\n\
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,\n\
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,\n\
+-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\n\
+-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\n");
+- for (i = 0; i < 512; i++) {
+- int kind = tab[i*256];
+- for (j = 1; j < 256; j++)
+- if (tab[i*256 +j] != kind) {
+- kind = -1;
+- break;
+- }
+- if (i >= 256 && memcmp(tab + (i - 256)*256, tab + i*256, 256) == 0)
+- pageIndex[i] = pageIndex[i - 256];
+- else if (kind == -1) {
+- pageIndex[i] = nBitmaps++;
+- for (j = 0; j < 8; j++) {
+- unsigned val = 0;
+- for (k = 0; k < 32; k++) {
+- if (tab[i*256 + j*32 +k])
+- val |= (1 << k);
+- }
+- printf("0x%08X,", val);
+- putchar((((j + 1) & 3) == 0) ? '\n' : ' ');
+- }
+- }
+- else
+- pageIndex[i] = kind;
+- }
+- printf("};\n");
+- printf("static const unsigned char nmstrtPages[] = {\n");
+- for (i = 0; i < 512; i++) {
+- if (i == 256)
+- printf("};\nstatic const unsigned char namePages[] = {\n");
+- printf("0x%02X,", pageIndex[i]);
+- putchar((((i + 1) & 7) == 0) ? '\n' : ' ');
+- }
+- printf("};\n");
+-}
+-
+-int main()
+-{
+- char tab[2*65536];
+- memset(tab, 0, 65536);
+- setTab(tab, nmstrt, sizeof(nmstrt)/sizeof(nmstrt[0]));
+- memcpy(tab + 65536, tab, 65536);
+- setTab(tab + 65536, name, sizeof(name)/sizeof(name[0]));
+- printTabs(tab);
+- return 0;
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/gennmtab/gennmtab.dsp dump_expat/xmlrpc-epi-0.51/expat/gennmtab/gennmtab.dsp
+--- original/xmlrpc-epi-0.51/expat/gennmtab/gennmtab.dsp 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/gennmtab/gennmtab.dsp 1969-12-31 18:00:00.000000000 -0600
+@@ -1,101 +0,0 @@
+-# Microsoft Developer Studio Project File - Name="gennmtab" - Package Owner=<4>
+-# Microsoft Developer Studio Generated Build File, Format Version 6.00
+-# ** DO NOT EDIT **
+-
+-# TARGTYPE "Win32 (x86) Console Application" 0x0103
+-
+-CFG=gennmtab - Win32 Release
+-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+-!MESSAGE use the Export Makefile command and run
+-!MESSAGE
+-!MESSAGE NMAKE /f "gennmtab.mak".
+-!MESSAGE
+-!MESSAGE You can specify a configuration when running NMAKE
+-!MESSAGE by defining the macro CFG on the command line. For example:
+-!MESSAGE
+-!MESSAGE NMAKE /f "gennmtab.mak" CFG="gennmtab - Win32 Release"
+-!MESSAGE
+-!MESSAGE Possible choices for configuration are:
+-!MESSAGE
+-!MESSAGE "gennmtab - Win32 Release" (based on "Win32 (x86) Console Application")
+-!MESSAGE "gennmtab - Win32 Debug" (based on "Win32 (x86) Console Application")
+-!MESSAGE
+-
+-# Begin Project
+-# PROP AllowPerConfigDependencies 0
+-# PROP Scc_ProjName ""
+-# PROP Scc_LocalPath ""
+-CPP=cl.exe
+-RSC=rc.exe
+-
+-!IF "$(CFG)" == "gennmtab - Win32 Release"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir ".\Release"
+-# PROP BASE Intermediate_Dir ".\Release"
+-# PROP BASE Target_Dir "."
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir ".\Release"
+-# PROP Intermediate_Dir ".\Release"
+-# PROP Target_Dir "."
+-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+-# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /FD /c
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+-
+-!ELSEIF "$(CFG)" == "gennmtab - Win32 Debug"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 1
+-# PROP BASE Output_Dir ".\Debug"
+-# PROP BASE Intermediate_Dir ".\Debug"
+-# PROP BASE Target_Dir "."
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 1
+-# PROP Output_Dir ".\Debug"
+-# PROP Intermediate_Dir ".\Debug"
+-# PROP Ignore_Export_Lib 0
+-# PROP Target_Dir "."
+-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /FD /c
+-# ADD BASE RSC /l 0x809 /d "_DEBUG"
+-# ADD RSC /l 0x809 /d "_DEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+-
+-!ENDIF
+-
+-# Begin Target
+-
+-# Name "gennmtab - Win32 Release"
+-# Name "gennmtab - Win32 Debug"
+-# Begin Group "Source Files"
+-
+-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90"
+-# Begin Source File
+-
+-SOURCE=.\gennmtab.c
+-# End Source File
+-# End Group
+-# Begin Group "Header Files"
+-
+-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
+-# End Group
+-# Begin Group "Resource Files"
+-
+-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+-# End Group
+-# End Target
+-# End Project
+Binary files original/xmlrpc-epi-0.51/expat/lib/xmlparse.lib and dump_expat/xmlrpc-epi-0.51/expat/lib/xmlparse.lib differ
+Binary files original/xmlrpc-epi-0.51/expat/lib/xmltok.lib and dump_expat/xmlrpc-epi-0.51/expat/lib/xmltok.lib differ
+diff -u -r -N original/xmlrpc-epi-0.51/expat/sample/.cvsignore dump_expat/xmlrpc-epi-0.51/expat/sample/.cvsignore
+--- original/xmlrpc-epi-0.51/expat/sample/.cvsignore 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/sample/.cvsignore 1969-12-31 18:00:00.000000000 -0600
+@@ -1 +0,0 @@
+-.libs
+diff -u -r -N original/xmlrpc-epi-0.51/expat/sample/build.bat dump_expat/xmlrpc-epi-0.51/expat/sample/build.bat
+--- original/xmlrpc-epi-0.51/expat/sample/build.bat 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/sample/build.bat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,4 +0,0 @@
+-@echo off
+-set LIB=..\xmlparse\Release;..\lib;%LIB%
+-cl /nologo /DXMLTOKAPI=__declspec(dllimport) /DXMLPARSEAPI=__declspec(dllimport) /I..\xmlparse /Fe..\bin\elements elements.c xmlparse.lib
+-@echo Run it using: ..\bin\elements ^<..\expat.html
+diff -u -r -N original/xmlrpc-epi-0.51/expat/sample/elements.c dump_expat/xmlrpc-epi-0.51/expat/sample/elements.c
+--- original/xmlrpc-epi-0.51/expat/sample/elements.c 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/sample/elements.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,46 +0,0 @@
+-/* This is simple demonstration of how to use expat. This program
+-reads an XML document from standard input and writes a line with the
+-name of each element to standard output indenting child elements by
+-one tab stop more than their parent element. */
+-
+-#include <stdio.h>
+-#include "xmlparse.h"
+-
+-void startElement(void *userData, const char *name, const char **atts)
+-{
+- int i;
+- int *depthPtr = userData;
+- for (i = 0; i < *depthPtr; i++)
+- putchar('\t');
+- puts(name);
+- *depthPtr += 1;
+-}
+-
+-void endElement(void *userData, const char *name)
+-{
+- int *depthPtr = userData;
+- *depthPtr -= 1;
+-}
+-
+-int main()
+-{
+- char buf[BUFSIZ];
+- XML_Parser parser = XML_ParserCreate(NULL);
+- int done;
+- int depth = 0;
+- XML_SetUserData(parser, &depth);
+- XML_SetElementHandler(parser, startElement, endElement);
+- do {
+- size_t len = fread(buf, 1, sizeof(buf), stdin);
+- done = len < sizeof(buf);
+- if (!XML_Parse(parser, buf, len, done)) {
+- fprintf(stderr,
+- "%s at line %d\n",
+- XML_ErrorString(XML_GetErrorCode(parser)),
+- XML_GetCurrentLineNumber(parser));
+- return 1;
+- }
+- } while (!done);
+- XML_ParserFree(parser);
+- return 0;
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlparse/.cvsignore dump_expat/xmlrpc-epi-0.51/expat/xmlparse/.cvsignore
+--- original/xmlrpc-epi-0.51/expat/xmlparse/.cvsignore 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlparse/.cvsignore 1969-12-31 18:00:00.000000000 -0600
+@@ -1,6 +0,0 @@
+-Makefile
+-.deps
+-xmlparse.lo
+-hashtable.lo
+-.libs
+-libexpat_parse.la
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlparse/Makefile.am dump_expat/xmlrpc-epi-0.51/expat/xmlparse/Makefile.am
+--- original/xmlrpc-epi-0.51/expat/xmlparse/Makefile.am 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlparse/Makefile.am 1969-12-31 18:00:00.000000000 -0600
+@@ -1,7 +0,0 @@
+-noinst_LTLIBRARIES = libexpat_parse.la
+-libexpat_parse_la_SOURCES = xmlparse.c hashtable.c
+-
+-INCLUDES = -I../xmltok
+-
+-include_HEADERS= \
+- xmlparse.h
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlparse/Makefile.in dump_expat/xmlrpc-epi-0.51/expat/xmlparse/Makefile.in
+--- original/xmlrpc-epi-0.51/expat/xmlparse/Makefile.in 2002-06-23 18:48:29.000000000 -0500
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlparse/Makefile.in 1969-12-31 18:00:00.000000000 -0600
+@@ -1,354 +0,0 @@
+-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+-
+-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+-# This Makefile.in is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+-# PARTICULAR PURPOSE.
+-
+-
+-SHELL = @SHELL@
+-
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+-VPATH = @srcdir@
+-prefix = @prefix@
+-exec_prefix = @exec_prefix@
+-
+-bindir = @bindir@
+-sbindir = @sbindir@
+-libexecdir = @libexecdir@
+-datadir = @datadir@
+-sysconfdir = @sysconfdir@
+-sharedstatedir = @sharedstatedir@
+-localstatedir = @localstatedir@
+-libdir = @libdir@
+-infodir = @infodir@
+-mandir = @mandir@
+-includedir = @includedir@
+-oldincludedir = /usr/include
+-
+-DESTDIR =
+-
+-pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+-pkgincludedir = $(includedir)/@PACKAGE@
+-
+-top_builddir = ../..
+-
+-ACLOCAL = @ACLOCAL@
+-AUTOCONF = @AUTOCONF@
+-AUTOMAKE = @AUTOMAKE@
+-AUTOHEADER = @AUTOHEADER@
+-
+-INSTALL = @INSTALL@
+-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+-INSTALL_DATA = @INSTALL_DATA@
+-INSTALL_SCRIPT = @INSTALL_SCRIPT@
+-transform = @program_transform_name@
+-
+-NORMAL_INSTALL = :
+-PRE_INSTALL = :
+-POST_INSTALL = :
+-NORMAL_UNINSTALL = :
+-PRE_UNINSTALL = :
+-POST_UNINSTALL = :
+-host_alias = @host_alias@
+-host_triplet = @host@
+-AS = @AS@
+-AWK = @AWK@
+-CC = @CC@
+-CPP = @CPP@
+-CXX = @CXX@
+-DLLTOOL = @DLLTOOL@
+-ECHO = @ECHO@
+-EXEEXT = @EXEEXT@
+-LIBTOOL = @LIBTOOL@
+-LN_S = @LN_S@
+-MAKEINFO = @MAKEINFO@
+-OBJDUMP = @OBJDUMP@
+-OBJEXT = @OBJEXT@
+-PACKAGE = @PACKAGE@
+-RANLIB = @RANLIB@
+-STRIP = @STRIP@
+-VERSION = @VERSION@
+-
+-noinst_LTLIBRARIES = libexpat_parse.la
+-libexpat_parse_la_SOURCES = xmlparse.c hashtable.c
+-
+-INCLUDES = -I../xmltok
+-
+-include_HEADERS = xmlparse.h
+-
+-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+-CONFIG_CLEAN_FILES =
+-LTLIBRARIES = $(noinst_LTLIBRARIES)
+-
+-
+-DEFS = @DEFS@ -I. -I$(srcdir)
+-CPPFLAGS = @CPPFLAGS@
+-LDFLAGS = @LDFLAGS@
+-LIBS = @LIBS@
+-libexpat_parse_la_LDFLAGS =
+-libexpat_parse_la_LIBADD =
+-libexpat_parse_la_OBJECTS = xmlparse.lo hashtable.lo
+-CFLAGS = @CFLAGS@
+-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-CCLD = $(CC)
+-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+-HEADERS = $(include_HEADERS)
+-
+-DIST_COMMON = Makefile.am Makefile.in
+-
+-
+-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+-
+-TAR = gtar
+-GZIP_ENV = --best
+-DEP_FILES = .deps/hashtable.P .deps/xmlparse.P
+-SOURCES = $(libexpat_parse_la_SOURCES)
+-OBJECTS = $(libexpat_parse_la_OBJECTS)
+-
+-all: all-redirect
+-.SUFFIXES:
+-.SUFFIXES: .S .c .lo .o .obj .s
+-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+- cd $(top_srcdir) && $(AUTOMAKE) --gnu expat/xmlparse/Makefile
+-
+-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+- cd $(top_builddir) \
+- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+-
+-
+-mostlyclean-noinstLTLIBRARIES:
+-
+-clean-noinstLTLIBRARIES:
+- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+-
+-distclean-noinstLTLIBRARIES:
+-
+-maintainer-clean-noinstLTLIBRARIES:
+-
+-# FIXME: We should only use cygpath when building on Windows,
+-# and only if it is available.
+-.c.obj:
+- $(COMPILE) -c `cygpath -w $<`
+-
+-.s.o:
+- $(COMPILE) -c $<
+-
+-.S.o:
+- $(COMPILE) -c $<
+-
+-mostlyclean-compile:
+- -rm -f *.o core *.core
+- -rm -f *.$(OBJEXT)
+-
+-clean-compile:
+-
+-distclean-compile:
+- -rm -f *.tab.c
+-
+-maintainer-clean-compile:
+-
+-.s.lo:
+- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+-
+-.S.lo:
+- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+-
+-mostlyclean-libtool:
+- -rm -f *.lo
+-
+-clean-libtool:
+- -rm -rf .libs _libs
+-
+-distclean-libtool:
+-
+-maintainer-clean-libtool:
+-
+-libexpat_parse.la: $(libexpat_parse_la_OBJECTS) $(libexpat_parse_la_DEPENDENCIES)
+- $(LINK) $(libexpat_parse_la_LDFLAGS) $(libexpat_parse_la_OBJECTS) $(libexpat_parse_la_LIBADD) $(LIBS)
+-
+-install-includeHEADERS: $(include_HEADERS)
+- @$(NORMAL_INSTALL)
+- $(mkinstalldirs) $(DESTDIR)$(includedir)
+- @list='$(include_HEADERS)'; for p in $$list; do \
+- if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
+- echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p"; \
+- $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p; \
+- done
+-
+-uninstall-includeHEADERS:
+- @$(NORMAL_UNINSTALL)
+- list='$(include_HEADERS)'; for p in $$list; do \
+- rm -f $(DESTDIR)$(includedir)/$$p; \
+- done
+-
+-tags: TAGS
+-
+-ID: $(HEADERS) $(SOURCES) $(LISP)
+- list='$(SOURCES) $(HEADERS)'; \
+- unique=`for i in $$list; do echo $$i; done | \
+- awk ' { files[$$0] = 1; } \
+- END { for (i in files) print i; }'`; \
+- here=`pwd` && cd $(srcdir) \
+- && mkid -f$$here/ID $$unique $(LISP)
+-
+-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+- tags=; \
+- here=`pwd`; \
+- list='$(SOURCES) $(HEADERS)'; \
+- unique=`for i in $$list; do echo $$i; done | \
+- awk ' { files[$$0] = 1; } \
+- END { for (i in files) print i; }'`; \
+- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+-
+-mostlyclean-tags:
+-
+-clean-tags:
+-
+-distclean-tags:
+- -rm -f TAGS ID
+-
+-maintainer-clean-tags:
+-
+-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+-
+-subdir = expat/xmlparse
+-
+-distdir: $(DISTFILES)
+- here=`cd $(top_builddir) && pwd`; \
+- top_distdir=`cd $(top_distdir) && pwd`; \
+- distdir=`cd $(distdir) && pwd`; \
+- cd $(top_srcdir) \
+- && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu expat/xmlparse/Makefile
+- @for file in $(DISTFILES); do \
+- d=$(srcdir); \
+- if test -d $$d/$$file; then \
+- cp -pr $$d/$$file $(distdir)/$$file; \
+- else \
+- test -f $(distdir)/$$file \
+- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+- || cp -p $$d/$$file $(distdir)/$$file || :; \
+- fi; \
+- done
+-
+-DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+-
+--include $(DEP_FILES)
+-
+-mostlyclean-depend:
+-
+-clean-depend:
+-
+-distclean-depend:
+- -rm -rf .deps
+-
+-maintainer-clean-depend:
+-
+-%.o: %.c
+- @echo '$(COMPILE) -c $<'; \
+- $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+- @-cp .deps/$(*F).pp .deps/$(*F).P; \
+- tr ' ' '\012' < .deps/$(*F).pp \
+- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+- >> .deps/$(*F).P; \
+- rm .deps/$(*F).pp
+-
+-%.lo: %.c
+- @echo '$(LTCOMPILE) -c $<'; \
+- $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+- @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
+- < .deps/$(*F).pp > .deps/$(*F).P; \
+- tr ' ' '\012' < .deps/$(*F).pp \
+- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+- >> .deps/$(*F).P; \
+- rm -f .deps/$(*F).pp
+-info-am:
+-info: info-am
+-dvi-am:
+-dvi: dvi-am
+-check-am: all-am
+-check: check-am
+-installcheck-am:
+-installcheck: installcheck-am
+-install-exec-am:
+-install-exec: install-exec-am
+-
+-install-data-am: install-includeHEADERS
+-install-data: install-data-am
+-
+-install-am: all-am
+- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+-install: install-am
+-uninstall-am: uninstall-includeHEADERS
+-uninstall: uninstall-am
+-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+-all-redirect: all-am
+-install-strip:
+- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+-installdirs:
+- $(mkinstalldirs) $(DESTDIR)$(includedir)
+-
+-
+-mostlyclean-generic:
+-
+-clean-generic:
+-
+-distclean-generic:
+- -rm -f Makefile $(CONFIG_CLEAN_FILES)
+- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+-
+-maintainer-clean-generic:
+-mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
+- mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
+- mostlyclean-generic
+-
+-mostlyclean: mostlyclean-am
+-
+-clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \
+- clean-tags clean-depend clean-generic mostlyclean-am
+-
+-clean: clean-am
+-
+-distclean-am: distclean-noinstLTLIBRARIES distclean-compile \
+- distclean-libtool distclean-tags distclean-depend \
+- distclean-generic clean-am
+- -rm -f libtool
+-
+-distclean: distclean-am
+-
+-maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \
+- maintainer-clean-compile maintainer-clean-libtool \
+- maintainer-clean-tags maintainer-clean-depend \
+- maintainer-clean-generic distclean-am
+- @echo "This command is intended for maintainers to use;"
+- @echo "it deletes files that may require special tools to rebuild."
+-
+-maintainer-clean: maintainer-clean-am
+-
+-.PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
+-clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \
+-mostlyclean-compile distclean-compile clean-compile \
+-maintainer-clean-compile mostlyclean-libtool distclean-libtool \
+-clean-libtool maintainer-clean-libtool uninstall-includeHEADERS \
+-install-includeHEADERS tags mostlyclean-tags distclean-tags clean-tags \
+-maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
+-clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
+-check-am installcheck-am installcheck install-exec-am install-exec \
+-install-data-am install-data install-am install uninstall-am uninstall \
+-all-redirect all-am all installdirs mostlyclean-generic \
+-distclean-generic clean-generic maintainer-clean-generic clean \
+-mostlyclean distclean maintainer-clean
+-
+-
+-# Tell versions [3.59,3.63) of GNU make to not export all variables.
+-# Otherwise a system limit (for SysV at least) may be exceeded.
+-.NOEXPORT:
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlparse/hashtable.c dump_expat/xmlrpc-epi-0.51/expat/xmlparse/hashtable.c
+--- original/xmlrpc-epi-0.51/expat/xmlparse/hashtable.c 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlparse/hashtable.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,152 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-csompliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include "xmldef.h"
+-
+-#ifdef XML_UNICODE_WCHAR_T
+-#ifndef XML_UNICODE
+-#define XML_UNICODE
+-#endif
+-#endif
+-
+-#include "hashtable.h"
+-
+-#define INIT_SIZE 64
+-
+-static
+-int keyeq(KEY s1, KEY s2)
+-{
+- for (; *s1 == *s2; s1++, s2++)
+- if (*s1 == 0)
+- return 1;
+- return 0;
+-}
+-
+-static
+-unsigned long hash(KEY s)
+-{
+- unsigned long h = 0;
+- while (*s)
+- h = (h << 5) + h + (unsigned char)*s++;
+- return h;
+-}
+-
+-NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize)
+-{
+- size_t i;
+- if (table->size == 0) {
+- if (!createSize)
+- return 0;
+- table->v = calloc(INIT_SIZE, sizeof(NAMED *));
+- if (!table->v)
+- return 0;
+- table->size = INIT_SIZE;
+- table->usedLim = INIT_SIZE / 2;
+- i = hash(name) & (table->size - 1);
+- }
+- else {
+- unsigned long h = hash(name);
+- for (i = h & (table->size - 1);
+- table->v[i];
+- i == 0 ? i = table->size - 1 : --i) {
+- if (keyeq(name, table->v[i]->name))
+- return table->v[i];
+- }
+- if (!createSize)
+- return 0;
+- if (table->used == table->usedLim) {
+- /* check for overflow */
+- size_t newSize = table->size * 2;
+- NAMED **newV = calloc(newSize, sizeof(NAMED *));
+- if (!newV)
+- return 0;
+- for (i = 0; i < table->size; i++)
+- if (table->v[i]) {
+- size_t j;
+- for (j = hash(table->v[i]->name) & (newSize - 1);
+- newV[j];
+- j == 0 ? j = newSize - 1 : --j)
+- ;
+- newV[j] = table->v[i];
+- }
+- free(table->v);
+- table->v = newV;
+- table->size = newSize;
+- table->usedLim = newSize/2;
+- for (i = h & (table->size - 1);
+- table->v[i];
+- i == 0 ? i = table->size - 1 : --i)
+- ;
+- }
+- }
+- table->v[i] = calloc(1, createSize);
+- if (!table->v[i])
+- return 0;
+- table->v[i]->name = name;
+- (table->used)++;
+- return table->v[i];
+-}
+-
+-void hashTableDestroy(HASH_TABLE *table)
+-{
+- size_t i;
+- for (i = 0; i < table->size; i++) {
+- NAMED *p = table->v[i];
+- if (p)
+- free(p);
+- }
+- if (table->v)
+- free(table->v);
+-}
+-
+-void hashTableInit(HASH_TABLE *p)
+-{
+- p->size = 0;
+- p->usedLim = 0;
+- p->used = 0;
+- p->v = 0;
+-}
+-
+-void hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table)
+-{
+- iter->p = table->v;
+- iter->end = iter->p + table->size;
+-}
+-
+-NAMED *hashTableIterNext(HASH_TABLE_ITER *iter)
+-{
+- while (iter->p != iter->end) {
+- NAMED *tem = *(iter->p)++;
+- if (tem)
+- return tem;
+- }
+- return 0;
+-}
+-
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlparse/hashtable.h dump_expat/xmlrpc-epi-0.51/expat/xmlparse/hashtable.h
+--- original/xmlrpc-epi-0.51/expat/xmlparse/hashtable.h 2001-03-19 21:28:33.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlparse/hashtable.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,69 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-
+-#include <stddef.h>
+-
+-#ifdef XML_UNICODE
+-
+-#ifdef XML_UNICODE_WCHAR_T
+-typedef const wchar_t *KEY;
+-#else /* not XML_UNICODE_WCHAR_T */
+-typedef const unsigned short *KEY;
+-#endif /* not XML_UNICODE_WCHAR_T */
+-
+-#else /* not XML_UNICODE */
+-
+-typedef const char *KEY;
+-
+-#endif /* not XML_UNICODE */
+-
+-typedef struct {
+- KEY name;
+-} NAMED;
+-
+-typedef struct {
+- NAMED **v;
+- size_t size;
+- size_t used;
+- size_t usedLim;
+-} HASH_TABLE;
+-
+-NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize);
+-void hashTableInit(HASH_TABLE *);
+-void hashTableDestroy(HASH_TABLE *);
+-
+-typedef struct {
+- NAMED **p;
+- NAMED **end;
+-} HASH_TABLE_ITER;
+-
+-void hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *);
+-NAMED *hashTableIterNext(HASH_TABLE_ITER *);
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.c dump_expat/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.c
+--- original/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,3254 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include "xmldef.h"
+-#include "xmlparse.h"
+-
+-#ifdef XML_UNICODE
+-#define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX
+-#define XmlConvert XmlUtf16Convert
+-#define XmlGetInternalEncoding XmlGetUtf16InternalEncoding
+-#define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS
+-#define XmlEncode XmlUtf16Encode
+-#define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((unsigned long)s) & 1))
+-typedef unsigned short ICHAR;
+-#else
+-#define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX
+-#define XmlConvert XmlUtf8Convert
+-#define XmlGetInternalEncoding XmlGetUtf8InternalEncoding
+-#define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS
+-#define XmlEncode XmlUtf8Encode
+-#define MUST_CONVERT(enc, s) (!(enc)->isUtf8)
+-typedef char ICHAR;
+-#endif
+-
+-
+-#ifndef XML_NS
+-
+-#define XmlInitEncodingNS XmlInitEncoding
+-#define XmlInitUnknownEncodingNS XmlInitUnknownEncoding
+-#undef XmlGetInternalEncodingNS
+-#define XmlGetInternalEncodingNS XmlGetInternalEncoding
+-#define XmlParseXmlDeclNS XmlParseXmlDecl
+-
+-#endif
+-
+-
+-#ifdef XML_UNICODE_WCHAR_T
+-#define XML_T(x) L ## x
+-#else
+-#define XML_T(x) x
+-#endif
+-
+-/* Round up n to be a multiple of sz, where sz is a power of 2. */
+-#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1))
+-
+-#include "xmltok.h"
+-#include "xmlrole.h"
+-#include "hashtable.h"
+-
+-#define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */
+-#define INIT_DATA_BUF_SIZE 1024
+-#define INIT_ATTS_SIZE 16
+-#define INIT_BLOCK_SIZE 1024
+-#define INIT_BUFFER_SIZE 1024
+-
+-#define EXPAND_SPARE 24
+-
+-typedef struct binding {
+- struct prefix *prefix;
+- struct binding *nextTagBinding;
+- struct binding *prevPrefixBinding;
+- const struct attribute_id *attId;
+- XML_Char *uri;
+- int uriLen;
+- int uriAlloc;
+-} BINDING;
+-
+-typedef struct prefix {
+- const XML_Char *name;
+- BINDING *binding;
+-} PREFIX;
+-
+-typedef struct {
+- const XML_Char *str;
+- const XML_Char *localPart;
+- int uriLen;
+-} TAG_NAME;
+-
+-typedef struct tag {
+- struct tag *parent;
+- const char *rawName;
+- int rawNameLength;
+- TAG_NAME name;
+- char *buf;
+- char *bufEnd;
+- BINDING *bindings;
+-} TAG;
+-
+-typedef struct {
+- const XML_Char *name;
+- const XML_Char *textPtr;
+- int textLen;
+- const XML_Char *systemId;
+- const XML_Char *base;
+- const XML_Char *publicId;
+- const XML_Char *notation;
+- char open;
+-} ENTITY;
+-
+-typedef struct block {
+- struct block *next;
+- int size;
+- XML_Char s[1];
+-} BLOCK;
+-
+-typedef struct {
+- BLOCK *blocks;
+- BLOCK *freeBlocks;
+- const XML_Char *end;
+- XML_Char *ptr;
+- XML_Char *start;
+-} STRING_POOL;
+-
+-/* The XML_Char before the name is used to determine whether
+-an attribute has been specified. */
+-typedef struct attribute_id {
+- XML_Char *name;
+- PREFIX *prefix;
+- char maybeTokenized;
+- char xmlns;
+-} ATTRIBUTE_ID;
+-
+-typedef struct {
+- const ATTRIBUTE_ID *id;
+- char isCdata;
+- const XML_Char *value;
+-} DEFAULT_ATTRIBUTE;
+-
+-typedef struct {
+- const XML_Char *name;
+- PREFIX *prefix;
+- int nDefaultAtts;
+- int allocDefaultAtts;
+- DEFAULT_ATTRIBUTE *defaultAtts;
+-} ELEMENT_TYPE;
+-
+-typedef struct {
+- HASH_TABLE generalEntities;
+- HASH_TABLE elementTypes;
+- HASH_TABLE attributeIds;
+- HASH_TABLE prefixes;
+- STRING_POOL pool;
+- int complete;
+- int standalone;
+- const XML_Char *base;
+- PREFIX defaultPrefix;
+-} DTD;
+-
+-typedef struct open_internal_entity {
+- const char *internalEventPtr;
+- const char *internalEventEndPtr;
+- struct open_internal_entity *next;
+- ENTITY *entity;
+-} OPEN_INTERNAL_ENTITY;
+-
+-typedef enum XML_Error Processor(XML_Parser parser,
+- const char *start,
+- const char *end,
+- const char **endPtr);
+-
+-static Processor prologProcessor;
+-static Processor prologInitProcessor;
+-static Processor contentProcessor;
+-static Processor cdataSectionProcessor;
+-static Processor epilogProcessor;
+-static Processor errorProcessor;
+-static Processor externalEntityInitProcessor;
+-static Processor externalEntityInitProcessor2;
+-static Processor externalEntityInitProcessor3;
+-static Processor externalEntityContentProcessor;
+-
+-static enum XML_Error
+-handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName);
+-static enum XML_Error
+-processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *, const char *);
+-static enum XML_Error
+-initializeEncoding(XML_Parser parser);
+-static enum XML_Error
+-doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
+- const char *start, const char *end, const char **endPtr);
+-static enum XML_Error
+-doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr);
+-static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, const char *s,
+- TAG_NAME *tagNamePtr, BINDING **bindingsPtr);
+-static
+-int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr);
+-static int
+-defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, int isCdata, const XML_Char *dfltValue);
+-static enum XML_Error
+-storeAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *,
+- STRING_POOL *);
+-static enum XML_Error
+-appendAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *,
+- STRING_POOL *);
+-static ATTRIBUTE_ID *
+-getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
+-static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *);
+-static enum XML_Error
+-storeEntityValue(XML_Parser parser, const char *start, const char *end);
+-static int
+-reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
+-static int
+-reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
+-static void
+-reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, const char *end);
+-
+-static const XML_Char *getContext(XML_Parser parser);
+-static int setContext(XML_Parser parser, const XML_Char *context);
+-static void normalizePublicId(XML_Char *s);
+-static int dtdInit(DTD *);
+-static void dtdDestroy(DTD *);
+-static int dtdCopy(DTD *newDtd, const DTD *oldDtd);
+-static void poolInit(STRING_POOL *);
+-static void poolClear(STRING_POOL *);
+-static void poolDestroy(STRING_POOL *);
+-static XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc,
+- const char *ptr, const char *end);
+-static XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc,
+- const char *ptr, const char *end);
+-static int poolGrow(STRING_POOL *pool);
+-static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s);
+-static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n);
+-
+-#define poolStart(pool) ((pool)->start)
+-#define poolEnd(pool) ((pool)->ptr)
+-#define poolLength(pool) ((pool)->ptr - (pool)->start)
+-#define poolChop(pool) ((void)--(pool->ptr))
+-#define poolLastChar(pool) (((pool)->ptr)[-1])
+-#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
+-#define poolFinish(pool) ((pool)->start = (pool)->ptr)
+-#define poolAppendChar(pool, c) \
+- (((pool)->ptr == (pool)->end && !poolGrow(pool)) \
+- ? 0 \
+- : ((*((pool)->ptr)++ = c), 1))
+-
+-typedef struct {
+- /* The first member must be userData so that the XML_GetUserData macro works. */
+- void *m_userData;
+- void *m_handlerArg;
+- char *m_buffer;
+- /* first character to be parsed */
+- const char *m_bufferPtr;
+- /* past last character to be parsed */
+- char *m_bufferEnd;
+- /* allocated end of buffer */
+- const char *m_bufferLim;
+- long m_parseEndByteIndex;
+- const char *m_parseEndPtr;
+- XML_Char *m_dataBuf;
+- XML_Char *m_dataBufEnd;
+- XML_StartElementHandler m_startElementHandler;
+- XML_EndElementHandler m_endElementHandler;
+- XML_CharacterDataHandler m_characterDataHandler;
+- XML_ProcessingInstructionHandler m_processingInstructionHandler;
+- XML_CommentHandler m_commentHandler;
+- XML_StartCdataSectionHandler m_startCdataSectionHandler;
+- XML_EndCdataSectionHandler m_endCdataSectionHandler;
+- XML_DefaultHandler m_defaultHandler;
+- XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler;
+- XML_NotationDeclHandler m_notationDeclHandler;
+- XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler;
+- XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler;
+- XML_NotStandaloneHandler m_notStandaloneHandler;
+- XML_ExternalEntityRefHandler m_externalEntityRefHandler;
+- void *m_externalEntityRefHandlerArg;
+- XML_UnknownEncodingHandler m_unknownEncodingHandler;
+- const ENCODING *m_encoding;
+- INIT_ENCODING m_initEncoding;
+- const XML_Char *m_protocolEncodingName;
+- int m_ns;
+- void *m_unknownEncodingMem;
+- void *m_unknownEncodingData;
+- void *m_unknownEncodingHandlerData;
+- void (*m_unknownEncodingRelease)(void *);
+- PROLOG_STATE m_prologState;
+- Processor *m_processor;
+- enum XML_Error m_errorCode;
+- const char *m_eventPtr;
+- const char *m_eventEndPtr;
+- const char *m_positionPtr;
+- OPEN_INTERNAL_ENTITY *m_openInternalEntities;
+- int m_defaultExpandInternalEntities;
+- int m_tagLevel;
+- ENTITY *m_declEntity;
+- const XML_Char *m_declNotationName;
+- const XML_Char *m_declNotationPublicId;
+- ELEMENT_TYPE *m_declElementType;
+- ATTRIBUTE_ID *m_declAttributeId;
+- char m_declAttributeIsCdata;
+- DTD m_dtd;
+- TAG *m_tagStack;
+- TAG *m_freeTagList;
+- BINDING *m_inheritedBindings;
+- BINDING *m_freeBindingList;
+- int m_attsSize;
+- int m_nSpecifiedAtts;
+- ATTRIBUTE *m_atts;
+- POSITION m_position;
+- STRING_POOL m_tempPool;
+- STRING_POOL m_temp2Pool;
+- char *m_groupConnector;
+- unsigned m_groupSize;
+- int m_hadExternalDoctype;
+- XML_Char m_namespaceSeparator;
+-} Parser;
+-
+-#define userData (((Parser *)parser)->m_userData)
+-#define handlerArg (((Parser *)parser)->m_handlerArg)
+-#define startElementHandler (((Parser *)parser)->m_startElementHandler)
+-#define endElementHandler (((Parser *)parser)->m_endElementHandler)
+-#define characterDataHandler (((Parser *)parser)->m_characterDataHandler)
+-#define processingInstructionHandler (((Parser *)parser)->m_processingInstructionHandler)
+-#define commentHandler (((Parser *)parser)->m_commentHandler)
+-#define startCdataSectionHandler (((Parser *)parser)->m_startCdataSectionHandler)
+-#define endCdataSectionHandler (((Parser *)parser)->m_endCdataSectionHandler)
+-#define defaultHandler (((Parser *)parser)->m_defaultHandler)
+-#define unparsedEntityDeclHandler (((Parser *)parser)->m_unparsedEntityDeclHandler)
+-#define notationDeclHandler (((Parser *)parser)->m_notationDeclHandler)
+-#define startNamespaceDeclHandler (((Parser *)parser)->m_startNamespaceDeclHandler)
+-#define endNamespaceDeclHandler (((Parser *)parser)->m_endNamespaceDeclHandler)
+-#define notStandaloneHandler (((Parser *)parser)->m_notStandaloneHandler)
+-#define externalEntityRefHandler (((Parser *)parser)->m_externalEntityRefHandler)
+-#define externalEntityRefHandlerArg (((Parser *)parser)->m_externalEntityRefHandlerArg)
+-#define unknownEncodingHandler (((Parser *)parser)->m_unknownEncodingHandler)
+-#define encoding (((Parser *)parser)->m_encoding)
+-#define initEncoding (((Parser *)parser)->m_initEncoding)
+-#define unknownEncodingMem (((Parser *)parser)->m_unknownEncodingMem)
+-#define unknownEncodingData (((Parser *)parser)->m_unknownEncodingData)
+-#define unknownEncodingHandlerData \
+- (((Parser *)parser)->m_unknownEncodingHandlerData)
+-#define unknownEncodingRelease (((Parser *)parser)->m_unknownEncodingRelease)
+-#define protocolEncodingName (((Parser *)parser)->m_protocolEncodingName)
+-#define ns (((Parser *)parser)->m_ns)
+-#define prologState (((Parser *)parser)->m_prologState)
+-#define processor (((Parser *)parser)->m_processor)
+-#define errorCode (((Parser *)parser)->m_errorCode)
+-#define eventPtr (((Parser *)parser)->m_eventPtr)
+-#define eventEndPtr (((Parser *)parser)->m_eventEndPtr)
+-#define positionPtr (((Parser *)parser)->m_positionPtr)
+-#define position (((Parser *)parser)->m_position)
+-#define openInternalEntities (((Parser *)parser)->m_openInternalEntities)
+-#define defaultExpandInternalEntities (((Parser *)parser)->m_defaultExpandInternalEntities)
+-#define tagLevel (((Parser *)parser)->m_tagLevel)
+-#define buffer (((Parser *)parser)->m_buffer)
+-#define bufferPtr (((Parser *)parser)->m_bufferPtr)
+-#define bufferEnd (((Parser *)parser)->m_bufferEnd)
+-#define parseEndByteIndex (((Parser *)parser)->m_parseEndByteIndex)
+-#define parseEndPtr (((Parser *)parser)->m_parseEndPtr)
+-#define bufferLim (((Parser *)parser)->m_bufferLim)
+-#define dataBuf (((Parser *)parser)->m_dataBuf)
+-#define dataBufEnd (((Parser *)parser)->m_dataBufEnd)
+-#define dtd (((Parser *)parser)->m_dtd)
+-#define declEntity (((Parser *)parser)->m_declEntity)
+-#define declNotationName (((Parser *)parser)->m_declNotationName)
+-#define declNotationPublicId (((Parser *)parser)->m_declNotationPublicId)
+-#define declElementType (((Parser *)parser)->m_declElementType)
+-#define declAttributeId (((Parser *)parser)->m_declAttributeId)
+-#define declAttributeIsCdata (((Parser *)parser)->m_declAttributeIsCdata)
+-#define freeTagList (((Parser *)parser)->m_freeTagList)
+-#define freeBindingList (((Parser *)parser)->m_freeBindingList)
+-#define inheritedBindings (((Parser *)parser)->m_inheritedBindings)
+-#define tagStack (((Parser *)parser)->m_tagStack)
+-#define atts (((Parser *)parser)->m_atts)
+-#define attsSize (((Parser *)parser)->m_attsSize)
+-#define nSpecifiedAtts (((Parser *)parser)->m_nSpecifiedAtts)
+-#define tempPool (((Parser *)parser)->m_tempPool)
+-#define temp2Pool (((Parser *)parser)->m_temp2Pool)
+-#define groupConnector (((Parser *)parser)->m_groupConnector)
+-#define groupSize (((Parser *)parser)->m_groupSize)
+-#define hadExternalDoctype (((Parser *)parser)->m_hadExternalDoctype)
+-#define namespaceSeparator (((Parser *)parser)->m_namespaceSeparator)
+-
+-#ifdef _MSC_VER
+-#ifdef _DEBUG
+-Parser *asParser(XML_Parser parser)
+-{
+- return parser;
+-}
+-#endif
+-#endif
+-
+-XML_Parser XML_ParserCreate(const XML_Char *encodingName)
+-{
+- XML_Parser parser = malloc(sizeof(Parser));
+- if (!parser)
+- return parser;
+- processor = prologInitProcessor;
+- XmlPrologStateInit(&prologState);
+- userData = 0;
+- handlerArg = 0;
+- startElementHandler = 0;
+- endElementHandler = 0;
+- characterDataHandler = 0;
+- processingInstructionHandler = 0;
+- commentHandler = 0;
+- startCdataSectionHandler = 0;
+- endCdataSectionHandler = 0;
+- defaultHandler = 0;
+- unparsedEntityDeclHandler = 0;
+- notationDeclHandler = 0;
+- startNamespaceDeclHandler = 0;
+- endNamespaceDeclHandler = 0;
+- notStandaloneHandler = 0;
+- externalEntityRefHandler = 0;
+- externalEntityRefHandlerArg = parser;
+- unknownEncodingHandler = 0;
+- buffer = 0;
+- bufferPtr = 0;
+- bufferEnd = 0;
+- parseEndByteIndex = 0;
+- parseEndPtr = 0;
+- bufferLim = 0;
+- declElementType = 0;
+- declAttributeId = 0;
+- declEntity = 0;
+- declNotationName = 0;
+- declNotationPublicId = 0;
+- memset(&position, 0, sizeof(POSITION));
+- errorCode = XML_ERROR_NONE;
+- eventPtr = 0;
+- eventEndPtr = 0;
+- positionPtr = 0;
+- openInternalEntities = 0;
+- tagLevel = 0;
+- tagStack = 0;
+- freeTagList = 0;
+- freeBindingList = 0;
+- inheritedBindings = 0;
+- attsSize = INIT_ATTS_SIZE;
+- atts = malloc(attsSize * sizeof(ATTRIBUTE));
+- nSpecifiedAtts = 0;
+- dataBuf = malloc(INIT_DATA_BUF_SIZE * sizeof(XML_Char));
+- groupSize = 0;
+- groupConnector = 0;
+- hadExternalDoctype = 0;
+- unknownEncodingMem = 0;
+- unknownEncodingRelease = 0;
+- unknownEncodingData = 0;
+- unknownEncodingHandlerData = 0;
+- namespaceSeparator = '!';
+- ns = 0;
+- poolInit(&tempPool);
+- poolInit(&temp2Pool);
+- protocolEncodingName = encodingName ? poolCopyString(&tempPool, encodingName) : 0;
+- if (!dtdInit(&dtd) || !atts || !dataBuf
+- || (encodingName && !protocolEncodingName)) {
+- XML_ParserFree(parser);
+- return 0;
+- }
+- dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE;
+- XmlInitEncoding(&initEncoding, &encoding, 0);
+- return parser;
+-}
+-
+-XML_Parser XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep)
+-{
+- static
+- const XML_Char implicitContext[] = {
+- XML_T('x'), XML_T('m'), XML_T('l'), XML_T('='),
+- XML_T('h'), XML_T('t'), XML_T('t'), XML_T('p'), XML_T(':'),
+- XML_T('/'), XML_T('/'), XML_T('w'), XML_T('w'), XML_T('w'),
+- XML_T('.'), XML_T('w'), XML_T('3'),
+- XML_T('.'), XML_T('o'), XML_T('r'), XML_T('g'),
+- XML_T('/'), XML_T('X'), XML_T('M'), XML_T('L'),
+- XML_T('/'), XML_T('1'), XML_T('9'), XML_T('9'), XML_T('8'),
+- XML_T('/'), XML_T('n'), XML_T('a'), XML_T('m'), XML_T('e'),
+- XML_T('s'), XML_T('p'), XML_T('a'), XML_T('c'), XML_T('e'),
+- XML_T('\0')
+- };
+-
+- XML_Parser parser = XML_ParserCreate(encodingName);
+- if (parser) {
+- XmlInitEncodingNS(&initEncoding, &encoding, 0);
+- ns = 1;
+- namespaceSeparator = nsSep;
+- }
+- if (!setContext(parser, implicitContext)) {
+- XML_ParserFree(parser);
+- return 0;
+- }
+- return parser;
+-}
+-
+-int XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName)
+-{
+- if (!encodingName)
+- protocolEncodingName = 0;
+- else {
+- protocolEncodingName = poolCopyString(&tempPool, encodingName);
+- if (!protocolEncodingName)
+- return 0;
+- }
+- return 1;
+-}
+-
+-XML_Parser XML_ExternalEntityParserCreate(XML_Parser oldParser,
+- const XML_Char *context,
+- const XML_Char *encodingName)
+-{
+- XML_Parser parser = oldParser;
+- DTD *oldDtd = &dtd;
+- XML_StartElementHandler oldStartElementHandler = startElementHandler;
+- XML_EndElementHandler oldEndElementHandler = endElementHandler;
+- XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler;
+- XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler;
+- XML_CommentHandler oldCommentHandler = commentHandler;
+- XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler;
+- XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler;
+- XML_DefaultHandler oldDefaultHandler = defaultHandler;
+- XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler;
+- XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler;
+- XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler;
+- XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler;
+- XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler;
+- void *oldUserData = userData;
+- void *oldHandlerArg = handlerArg;
+- int oldDefaultExpandInternalEntities = defaultExpandInternalEntities;
+- void *oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg;
+-
+- parser = (ns
+- ? XML_ParserCreateNS(encodingName, namespaceSeparator)
+- : XML_ParserCreate(encodingName));
+- if (!parser)
+- return 0;
+- startElementHandler = oldStartElementHandler;
+- endElementHandler = oldEndElementHandler;
+- characterDataHandler = oldCharacterDataHandler;
+- processingInstructionHandler = oldProcessingInstructionHandler;
+- commentHandler = oldCommentHandler;
+- startCdataSectionHandler = oldStartCdataSectionHandler;
+- endCdataSectionHandler = oldEndCdataSectionHandler;
+- defaultHandler = oldDefaultHandler;
+- startNamespaceDeclHandler = oldStartNamespaceDeclHandler;
+- endNamespaceDeclHandler = oldEndNamespaceDeclHandler;
+- notStandaloneHandler = oldNotStandaloneHandler;
+- externalEntityRefHandler = oldExternalEntityRefHandler;
+- unknownEncodingHandler = oldUnknownEncodingHandler;
+- userData = oldUserData;
+- if (oldUserData == oldHandlerArg)
+- handlerArg = userData;
+- else
+- handlerArg = parser;
+- if (oldExternalEntityRefHandlerArg != oldParser)
+- externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg;
+- defaultExpandInternalEntities = oldDefaultExpandInternalEntities;
+- if (!dtdCopy(&dtd, oldDtd) || !setContext(parser, context)) {
+- XML_ParserFree(parser);
+- return 0;
+- }
+- processor = externalEntityInitProcessor;
+- return parser;
+-}
+-
+-static
+-void destroyBindings(BINDING *bindings)
+-{
+- for (;;) {
+- BINDING *b = bindings;
+- if (!b)
+- break;
+- bindings = b->nextTagBinding;
+- free(b->uri);
+- free(b);
+- }
+-}
+-
+-void XML_ParserFree(XML_Parser parser)
+-{
+- for (;;) {
+- TAG *p;
+- if (tagStack == 0) {
+- if (freeTagList == 0)
+- break;
+- tagStack = freeTagList;
+- freeTagList = 0;
+- }
+- p = tagStack;
+- tagStack = tagStack->parent;
+- free(p->buf);
+- destroyBindings(p->bindings);
+- free(p);
+- }
+- destroyBindings(freeBindingList);
+- destroyBindings(inheritedBindings);
+- poolDestroy(&tempPool);
+- poolDestroy(&temp2Pool);
+- dtdDestroy(&dtd);
+- free((void *)atts);
+- if (groupConnector)
+- free(groupConnector);
+- if (buffer)
+- free(buffer);
+- if (dataBuf)
+- free(dataBuf);
+- if (unknownEncodingMem)
+- free(unknownEncodingMem);
+- if (unknownEncodingRelease)
+- unknownEncodingRelease(unknownEncodingData);
+- free(parser);
+-}
+-
+-void XML_UseParserAsHandlerArg(XML_Parser parser)
+-{
+- handlerArg = parser;
+-}
+-
+-void XML_SetUserData(XML_Parser parser, void *p)
+-{
+- if (handlerArg == userData)
+- handlerArg = userData = p;
+- else
+- userData = p;
+-}
+-
+-int XML_SetBase(XML_Parser parser, const XML_Char *p)
+-{
+- if (p) {
+- p = poolCopyString(&dtd.pool, p);
+- if (!p)
+- return 0;
+- dtd.base = p;
+- }
+- else
+- dtd.base = 0;
+- return 1;
+-}
+-
+-const XML_Char *XML_GetBase(XML_Parser parser)
+-{
+- return dtd.base;
+-}
+-
+-int XML_GetSpecifiedAttributeCount(XML_Parser parser)
+-{
+- return nSpecifiedAtts;
+-}
+-
+-void XML_SetElementHandler(XML_Parser parser,
+- XML_StartElementHandler start,
+- XML_EndElementHandler end)
+-{
+- startElementHandler = start;
+- endElementHandler = end;
+-}
+-
+-void XML_SetCharacterDataHandler(XML_Parser parser,
+- XML_CharacterDataHandler handler)
+-{
+- characterDataHandler = handler;
+-}
+-
+-void XML_SetProcessingInstructionHandler(XML_Parser parser,
+- XML_ProcessingInstructionHandler handler)
+-{
+- processingInstructionHandler = handler;
+-}
+-
+-void XML_SetCommentHandler(XML_Parser parser,
+- XML_CommentHandler handler)
+-{
+- commentHandler = handler;
+-}
+-
+-void XML_SetCdataSectionHandler(XML_Parser parser,
+- XML_StartCdataSectionHandler start,
+- XML_EndCdataSectionHandler end)
+-{
+- startCdataSectionHandler = start;
+- endCdataSectionHandler = end;
+-}
+-
+-void XML_SetDefaultHandler(XML_Parser parser,
+- XML_DefaultHandler handler)
+-{
+- defaultHandler = handler;
+- defaultExpandInternalEntities = 0;
+-}
+-
+-void XML_SetDefaultHandlerExpand(XML_Parser parser,
+- XML_DefaultHandler handler)
+-{
+- defaultHandler = handler;
+- defaultExpandInternalEntities = 1;
+-}
+-
+-void XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
+- XML_UnparsedEntityDeclHandler handler)
+-{
+- unparsedEntityDeclHandler = handler;
+-}
+-
+-void XML_SetNotationDeclHandler(XML_Parser parser,
+- XML_NotationDeclHandler handler)
+-{
+- notationDeclHandler = handler;
+-}
+-
+-void XML_SetNamespaceDeclHandler(XML_Parser parser,
+- XML_StartNamespaceDeclHandler start,
+- XML_EndNamespaceDeclHandler end)
+-{
+- startNamespaceDeclHandler = start;
+- endNamespaceDeclHandler = end;
+-}
+-
+-void XML_SetNotStandaloneHandler(XML_Parser parser,
+- XML_NotStandaloneHandler handler)
+-{
+- notStandaloneHandler = handler;
+-}
+-
+-void XML_SetExternalEntityRefHandler(XML_Parser parser,
+- XML_ExternalEntityRefHandler handler)
+-{
+- externalEntityRefHandler = handler;
+-}
+-
+-void XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg)
+-{
+- if (arg)
+- externalEntityRefHandlerArg = arg;
+- else
+- externalEntityRefHandlerArg = parser;
+-}
+-
+-void XML_SetUnknownEncodingHandler(XML_Parser parser,
+- XML_UnknownEncodingHandler handler,
+- void *data)
+-{
+- unknownEncodingHandler = handler;
+- unknownEncodingHandlerData = data;
+-}
+-
+-int XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
+-{
+- if (len == 0) {
+- if (!isFinal)
+- return 1;
+- positionPtr = bufferPtr;
+- errorCode = processor(parser, bufferPtr, parseEndPtr = bufferEnd, 0);
+- if (errorCode == XML_ERROR_NONE)
+- return 1;
+- eventEndPtr = eventPtr;
+- return 0;
+- }
+- else if (bufferPtr == bufferEnd) {
+- const char *end;
+- int nLeftOver;
+- parseEndByteIndex += len;
+- positionPtr = s;
+- if (isFinal) {
+- errorCode = processor(parser, s, parseEndPtr = s + len, 0);
+- if (errorCode == XML_ERROR_NONE)
+- return 1;
+- eventEndPtr = eventPtr;
+- return 0;
+- }
+- errorCode = processor(parser, s, parseEndPtr = s + len, &end);
+- if (errorCode != XML_ERROR_NONE) {
+- eventEndPtr = eventPtr;
+- return 0;
+- }
+- XmlUpdatePosition(encoding, positionPtr, end, &position);
+- nLeftOver = s + len - end;
+- if (nLeftOver) {
+- if (buffer == 0 || nLeftOver > bufferLim - buffer) {
+- /* FIXME avoid integer overflow */
+- buffer = buffer == 0 ? malloc(len * 2) : realloc(buffer, len * 2);
+- if (!buffer) {
+- errorCode = XML_ERROR_NO_MEMORY;
+- eventPtr = eventEndPtr = 0;
+- return 0;
+- }
+- bufferLim = buffer + len * 2;
+- }
+- memcpy(buffer, end, nLeftOver);
+- bufferPtr = buffer;
+- bufferEnd = buffer + nLeftOver;
+- }
+- return 1;
+- }
+- else {
+- memcpy(XML_GetBuffer(parser, len), s, len);
+- return XML_ParseBuffer(parser, len, isFinal);
+- }
+-}
+-
+-int XML_ParseBuffer(XML_Parser parser, int len, int isFinal)
+-{
+- const char *start = bufferPtr;
+- positionPtr = start;
+- bufferEnd += len;
+- parseEndByteIndex += len;
+- errorCode = processor(parser, start, parseEndPtr = bufferEnd,
+- isFinal ? (const char **)0 : &bufferPtr);
+- if (errorCode == XML_ERROR_NONE) {
+- if (!isFinal)
+- XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);
+- return 1;
+- }
+- else {
+- eventEndPtr = eventPtr;
+- return 0;
+- }
+-}
+-
+-void *XML_GetBuffer(XML_Parser parser, int len)
+-{
+- if (len > bufferLim - bufferEnd) {
+- /* FIXME avoid integer overflow */
+- int neededSize = len + (bufferEnd - bufferPtr);
+- if (neededSize <= bufferLim - buffer) {
+- memmove(buffer, bufferPtr, bufferEnd - bufferPtr);
+- bufferEnd = buffer + (bufferEnd - bufferPtr);
+- bufferPtr = buffer;
+- }
+- else {
+- char *newBuf;
+- int bufferSize = bufferLim - bufferPtr;
+- if (bufferSize == 0)
+- bufferSize = INIT_BUFFER_SIZE;
+- do {
+- bufferSize *= 2;
+- } while (bufferSize < neededSize);
+- newBuf = malloc(bufferSize);
+- if (newBuf == 0) {
+- errorCode = XML_ERROR_NO_MEMORY;
+- return 0;
+- }
+- bufferLim = newBuf + bufferSize;
+- if (bufferPtr) {
+- memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr);
+- free(buffer);
+- }
+- bufferEnd = newBuf + (bufferEnd - bufferPtr);
+- bufferPtr = buffer = newBuf;
+- }
+- }
+- return bufferEnd;
+-}
+-
+-enum XML_Error XML_GetErrorCode(XML_Parser parser)
+-{
+- return errorCode;
+-}
+-
+-long XML_GetCurrentByteIndex(XML_Parser parser)
+-{
+- if (eventPtr)
+- return parseEndByteIndex - (parseEndPtr - eventPtr);
+- return -1;
+-}
+-
+-int XML_GetCurrentByteCount(XML_Parser parser)
+-{
+- if (eventEndPtr && eventPtr)
+- return eventEndPtr - eventPtr;
+- return 0;
+-}
+-
+-int XML_GetCurrentLineNumber(XML_Parser parser)
+-{
+- if (eventPtr) {
+- XmlUpdatePosition(encoding, positionPtr, eventPtr, &position);
+- positionPtr = eventPtr;
+- }
+- return position.lineNumber + 1;
+-}
+-
+-int XML_GetCurrentColumnNumber(XML_Parser parser)
+-{
+- if (eventPtr) {
+- XmlUpdatePosition(encoding, positionPtr, eventPtr, &position);
+- positionPtr = eventPtr;
+- }
+- return position.columnNumber;
+-}
+-
+-void XML_DefaultCurrent(XML_Parser parser)
+-{
+- if (defaultHandler) {
+- if (openInternalEntities)
+- reportDefault(parser,
+- ns ? XmlGetInternalEncodingNS() : XmlGetInternalEncoding(),
+- openInternalEntities->internalEventPtr,
+- openInternalEntities->internalEventEndPtr);
+- else
+- reportDefault(parser, encoding, eventPtr, eventEndPtr);
+- }
+-}
+-
+-const XML_LChar *XML_ErrorString(int code)
+-{
+- static const XML_LChar *message[] = {
+- 0,
+- XML_T("out of memory"),
+- XML_T("syntax error"),
+- XML_T("no element found"),
+- XML_T("not well-formed"),
+- XML_T("unclosed token"),
+- XML_T("unclosed token"),
+- XML_T("mismatched tag"),
+- XML_T("duplicate attribute"),
+- XML_T("junk after document element"),
+- XML_T("illegal parameter entity reference"),
+- XML_T("undefined entity"),
+- XML_T("recursive entity reference"),
+- XML_T("asynchronous entity"),
+- XML_T("reference to invalid character number"),
+- XML_T("reference to binary entity"),
+- XML_T("reference to external entity in attribute"),
+- XML_T("xml processing instruction not at start of external entity"),
+- XML_T("unknown encoding"),
+- XML_T("encoding specified in XML declaration is incorrect"),
+- XML_T("unclosed CDATA section"),
+- XML_T("error in processing external entity reference"),
+- XML_T("document is not standalone")
+- };
+- if (code > 0 && code < sizeof(message)/sizeof(message[0]))
+- return message[code];
+- return 0;
+-}
+-
+-static
+-enum XML_Error contentProcessor(XML_Parser parser,
+- const char *start,
+- const char *end,
+- const char **endPtr)
+-{
+- return doContent(parser, 0, encoding, start, end, endPtr);
+-}
+-
+-static
+-enum XML_Error externalEntityInitProcessor(XML_Parser parser,
+- const char *start,
+- const char *end,
+- const char **endPtr)
+-{
+- enum XML_Error result = initializeEncoding(parser);
+- if (result != XML_ERROR_NONE)
+- return result;
+- processor = externalEntityInitProcessor2;
+- return externalEntityInitProcessor2(parser, start, end, endPtr);
+-}
+-
+-static
+-enum XML_Error externalEntityInitProcessor2(XML_Parser parser,
+- const char *start,
+- const char *end,
+- const char **endPtr)
+-{
+- const char *next;
+- int tok = XmlContentTok(encoding, start, end, &next);
+- switch (tok) {
+- case XML_TOK_BOM:
+- start = next;
+- break;
+- case XML_TOK_PARTIAL:
+- if (endPtr) {
+- *endPtr = start;
+- return XML_ERROR_NONE;
+- }
+- eventPtr = start;
+- return XML_ERROR_UNCLOSED_TOKEN;
+- case XML_TOK_PARTIAL_CHAR:
+- if (endPtr) {
+- *endPtr = start;
+- return XML_ERROR_NONE;
+- }
+- eventPtr = start;
+- return XML_ERROR_PARTIAL_CHAR;
+- }
+- processor = externalEntityInitProcessor3;
+- return externalEntityInitProcessor3(parser, start, end, endPtr);
+-}
+-
+-static
+-enum XML_Error externalEntityInitProcessor3(XML_Parser parser,
+- const char *start,
+- const char *end,
+- const char **endPtr)
+-{
+- const char *next;
+- int tok = XmlContentTok(encoding, start, end, &next);
+- switch (tok) {
+- case XML_TOK_XML_DECL:
+- {
+- enum XML_Error result = processXmlDecl(parser, 1, start, next);
+- if (result != XML_ERROR_NONE)
+- return result;
+- start = next;
+- }
+- break;
+- case XML_TOK_PARTIAL:
+- if (endPtr) {
+- *endPtr = start;
+- return XML_ERROR_NONE;
+- }
+- eventPtr = start;
+- return XML_ERROR_UNCLOSED_TOKEN;
+- case XML_TOK_PARTIAL_CHAR:
+- if (endPtr) {
+- *endPtr = start;
+- return XML_ERROR_NONE;
+- }
+- eventPtr = start;
+- return XML_ERROR_PARTIAL_CHAR;
+- }
+- processor = externalEntityContentProcessor;
+- tagLevel = 1;
+- return doContent(parser, 1, encoding, start, end, endPtr);
+-}
+-
+-static
+-enum XML_Error externalEntityContentProcessor(XML_Parser parser,
+- const char *start,
+- const char *end,
+- const char **endPtr)
+-{
+- return doContent(parser, 1, encoding, start, end, endPtr);
+-}
+-
+-static enum XML_Error
+-doContent(XML_Parser parser,
+- int startTagLevel,
+- const ENCODING *enc,
+- const char *s,
+- const char *end,
+- const char **nextPtr)
+-{
+- const ENCODING *internalEnc = ns ? XmlGetInternalEncodingNS() : XmlGetInternalEncoding();
+- const char **eventPP;
+- const char **eventEndPP;
+- if (enc == encoding) {
+- eventPP = &eventPtr;
+- eventEndPP = &eventEndPtr;
+- }
+- else {
+- eventPP = &(openInternalEntities->internalEventPtr);
+- eventEndPP = &(openInternalEntities->internalEventEndPtr);
+- }
+- *eventPP = s;
+- for (;;) {
+- const char *next = s; /* XmlContentTok doesn't always set the last arg */
+- int tok = XmlContentTok(enc, s, end, &next);
+- *eventEndPP = next;
+- switch (tok) {
+- case XML_TOK_TRAILING_CR:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- *eventEndPP = end;
+- if (characterDataHandler) {
+- XML_Char c = 0xA;
+- characterDataHandler(handlerArg, &c, 1);
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, end);
+- if (startTagLevel == 0)
+- return XML_ERROR_NO_ELEMENTS;
+- if (tagLevel != startTagLevel)
+- return XML_ERROR_ASYNC_ENTITY;
+- return XML_ERROR_NONE;
+- case XML_TOK_NONE:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- if (startTagLevel > 0) {
+- if (tagLevel != startTagLevel)
+- return XML_ERROR_ASYNC_ENTITY;
+- return XML_ERROR_NONE;
+- }
+- return XML_ERROR_NO_ELEMENTS;
+- case XML_TOK_INVALID:
+- *eventPP = next;
+- return XML_ERROR_INVALID_TOKEN;
+- case XML_TOK_PARTIAL:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- return XML_ERROR_UNCLOSED_TOKEN;
+- case XML_TOK_PARTIAL_CHAR:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- return XML_ERROR_PARTIAL_CHAR;
+- case XML_TOK_ENTITY_REF:
+- {
+- const XML_Char *name;
+- ENTITY *entity;
+- XML_Char ch = XmlPredefinedEntityName(enc,
+- s + enc->minBytesPerChar,
+- next - enc->minBytesPerChar);
+- if (ch) {
+- if (characterDataHandler)
+- characterDataHandler(handlerArg, &ch, 1);
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- break;
+- }
+- name = poolStoreString(&dtd.pool, enc,
+- s + enc->minBytesPerChar,
+- next - enc->minBytesPerChar);
+- if (!name)
+- return XML_ERROR_NO_MEMORY;
+- entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0);
+- poolDiscard(&dtd.pool);
+- if (!entity) {
+- if (dtd.complete || dtd.standalone)
+- return XML_ERROR_UNDEFINED_ENTITY;
+- if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- break;
+- }
+- if (entity->open)
+- return XML_ERROR_RECURSIVE_ENTITY_REF;
+- if (entity->notation)
+- return XML_ERROR_BINARY_ENTITY_REF;
+- if (entity) {
+- if (entity->textPtr) {
+- enum XML_Error result;
+- OPEN_INTERNAL_ENTITY openEntity;
+- if (defaultHandler && !defaultExpandInternalEntities) {
+- reportDefault(parser, enc, s, next);
+- break;
+- }
+- entity->open = 1;
+- openEntity.next = openInternalEntities;
+- openInternalEntities = &openEntity;
+- openEntity.entity = entity;
+- openEntity.internalEventPtr = 0;
+- openEntity.internalEventEndPtr = 0;
+- result = doContent(parser,
+- tagLevel,
+- internalEnc,
+- (char *)entity->textPtr,
+- (char *)(entity->textPtr + entity->textLen),
+- 0);
+- entity->open = 0;
+- openInternalEntities = openEntity.next;
+- if (result)
+- return result;
+- }
+- else if (externalEntityRefHandler) {
+- const XML_Char *context;
+- entity->open = 1;
+- context = getContext(parser);
+- entity->open = 0;
+- if (!context)
+- return XML_ERROR_NO_MEMORY;
+- if (!externalEntityRefHandler(externalEntityRefHandlerArg,
+- context,
+- dtd.base,
+- entity->systemId,
+- entity->publicId))
+- return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
+- poolDiscard(&tempPool);
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- }
+- break;
+- }
+- case XML_TOK_START_TAG_WITH_ATTS:
+- if (!startElementHandler) {
+- enum XML_Error result = storeAtts(parser, enc, s, 0, 0);
+- if (result)
+- return result;
+- }
+- /* fall through */
+- case XML_TOK_START_TAG_NO_ATTS:
+- {
+- TAG *tag;
+- if (freeTagList) {
+- tag = freeTagList;
+- freeTagList = freeTagList->parent;
+- }
+- else {
+- tag = malloc(sizeof(TAG));
+- if (!tag)
+- return XML_ERROR_NO_MEMORY;
+- tag->buf = malloc(INIT_TAG_BUF_SIZE);
+- if (!tag->buf)
+- return XML_ERROR_NO_MEMORY;
+- tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE;
+- }
+- tag->bindings = 0;
+- tag->parent = tagStack;
+- tagStack = tag;
+- tag->name.localPart = 0;
+- tag->rawName = s + enc->minBytesPerChar;
+- tag->rawNameLength = XmlNameLength(enc, tag->rawName);
+- if (nextPtr) {
+- /* Need to guarantee that:
+- tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)) <= tag->bufEnd - sizeof(XML_Char) */
+- if (tag->rawNameLength + (int)(sizeof(XML_Char) - 1) + (int)sizeof(XML_Char) > tag->bufEnd - tag->buf) {
+- int bufSize = tag->rawNameLength * 4;
+- bufSize = ROUND_UP(bufSize, sizeof(XML_Char));
+- tag->buf = realloc(tag->buf, bufSize);
+- if (!tag->buf)
+- return XML_ERROR_NO_MEMORY;
+- tag->bufEnd = tag->buf + bufSize;
+- }
+- memcpy(tag->buf, tag->rawName, tag->rawNameLength);
+- tag->rawName = tag->buf;
+- }
+- ++tagLevel;
+- if (startElementHandler) {
+- enum XML_Error result;
+- XML_Char *toPtr;
+- for (;;) {
+- const char *rawNameEnd = tag->rawName + tag->rawNameLength;
+- const char *fromPtr = tag->rawName;
+- int bufSize;
+- if (nextPtr)
+- toPtr = (XML_Char *)(tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)));
+- else
+- toPtr = (XML_Char *)tag->buf;
+- tag->name.str = toPtr;
+- XmlConvert(enc,
+- &fromPtr, rawNameEnd,
+- (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1);
+- if (fromPtr == rawNameEnd)
+- break;
+- bufSize = (tag->bufEnd - tag->buf) << 1;
+- tag->buf = realloc(tag->buf, bufSize);
+- if (!tag->buf)
+- return XML_ERROR_NO_MEMORY;
+- tag->bufEnd = tag->buf + bufSize;
+- if (nextPtr)
+- tag->rawName = tag->buf;
+- }
+- *toPtr = XML_T('\0');
+- result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings));
+- if (result)
+- return result;
+- startElementHandler(handlerArg, tag->name.str, (const XML_Char **)atts);
+- poolClear(&tempPool);
+- }
+- else {
+- tag->name.str = 0;
+- if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- }
+- break;
+- }
+- case XML_TOK_EMPTY_ELEMENT_WITH_ATTS:
+- if (!startElementHandler) {
+- enum XML_Error result = storeAtts(parser, enc, s, 0, 0);
+- if (result)
+- return result;
+- }
+- /* fall through */
+- case XML_TOK_EMPTY_ELEMENT_NO_ATTS:
+- if (startElementHandler || endElementHandler) {
+- const char *rawName = s + enc->minBytesPerChar;
+- enum XML_Error result;
+- BINDING *bindings = 0;
+- TAG_NAME name;
+- name.str = poolStoreString(&tempPool, enc, rawName,
+- rawName + XmlNameLength(enc, rawName));
+- if (!name.str)
+- return XML_ERROR_NO_MEMORY;
+- poolFinish(&tempPool);
+- result = storeAtts(parser, enc, s, &name, &bindings);
+- if (result)
+- return result;
+- poolFinish(&tempPool);
+- if (startElementHandler)
+- startElementHandler(handlerArg, name.str, (const XML_Char **)atts);
+- if (endElementHandler) {
+- if (startElementHandler)
+- *eventPP = *eventEndPP;
+- endElementHandler(handlerArg, name.str);
+- }
+- poolClear(&tempPool);
+- while (bindings) {
+- BINDING *b = bindings;
+- if (endNamespaceDeclHandler)
+- endNamespaceDeclHandler(handlerArg, b->prefix->name);
+- bindings = bindings->nextTagBinding;
+- b->nextTagBinding = freeBindingList;
+- freeBindingList = b;
+- b->prefix->binding = b->prevPrefixBinding;
+- }
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- if (tagLevel == 0)
+- return epilogProcessor(parser, next, end, nextPtr);
+- break;
+- case XML_TOK_END_TAG:
+- if (tagLevel == startTagLevel)
+- return XML_ERROR_ASYNC_ENTITY;
+- else {
+- int len;
+- const char *rawName;
+- TAG *tag = tagStack;
+- tagStack = tag->parent;
+- tag->parent = freeTagList;
+- freeTagList = tag;
+- rawName = s + enc->minBytesPerChar*2;
+- len = XmlNameLength(enc, rawName);
+- if (len != tag->rawNameLength
+- || memcmp(tag->rawName, rawName, len) != 0) {
+- *eventPP = rawName;
+- return XML_ERROR_TAG_MISMATCH;
+- }
+- --tagLevel;
+- if (endElementHandler && tag->name.str) {
+- if (tag->name.localPart) {
+- XML_Char *to = (XML_Char *)tag->name.str + tag->name.uriLen;
+- const XML_Char *from = tag->name.localPart;
+- while ((*to++ = *from++) != 0)
+- ;
+- }
+- endElementHandler(handlerArg, tag->name.str);
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- while (tag->bindings) {
+- BINDING *b = tag->bindings;
+- if (endNamespaceDeclHandler)
+- endNamespaceDeclHandler(handlerArg, b->prefix->name);
+- tag->bindings = tag->bindings->nextTagBinding;
+- b->nextTagBinding = freeBindingList;
+- freeBindingList = b;
+- b->prefix->binding = b->prevPrefixBinding;
+- }
+- if (tagLevel == 0)
+- return epilogProcessor(parser, next, end, nextPtr);
+- }
+- break;
+- case XML_TOK_CHAR_REF:
+- {
+- int n = XmlCharRefNumber(enc, s);
+- if (n < 0)
+- return XML_ERROR_BAD_CHAR_REF;
+- if (characterDataHandler) {
+- XML_Char buf[XML_ENCODE_MAX];
+- characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf));
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- }
+- break;
+- case XML_TOK_XML_DECL:
+- return XML_ERROR_MISPLACED_XML_PI;
+- case XML_TOK_DATA_NEWLINE:
+- if (characterDataHandler) {
+- XML_Char c = 0xA;
+- characterDataHandler(handlerArg, &c, 1);
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- break;
+- case XML_TOK_CDATA_SECT_OPEN:
+- {
+- enum XML_Error result;
+- if (startCdataSectionHandler)
+- startCdataSectionHandler(handlerArg);
+-#if 0
+- /* Suppose you doing a transformation on a document that involves
+- changing only the character data. You set up a defaultHandler
+- and a characterDataHandler. The defaultHandler simply copies
+- characters through. The characterDataHandler does the transformation
+- and writes the characters out escaping them as necessary. This case
+- will fail to work if we leave out the following two lines (because &
+- and < inside CDATA sections will be incorrectly escaped).
+-
+- However, now we have a start/endCdataSectionHandler, so it seems
+- easier to let the user deal with this. */
+-
+- else if (characterDataHandler)
+- characterDataHandler(handlerArg, dataBuf, 0);
+-#endif
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- result = doCdataSection(parser, enc, &next, end, nextPtr);
+- if (!next) {
+- processor = cdataSectionProcessor;
+- return result;
+- }
+- }
+- break;
+- case XML_TOK_TRAILING_RSQB:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- if (characterDataHandler) {
+- if (MUST_CONVERT(enc, s)) {
+- ICHAR *dataPtr = (ICHAR *)dataBuf;
+- XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd);
+- characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf);
+- }
+- else
+- characterDataHandler(handlerArg,
+- (XML_Char *)s,
+- (XML_Char *)end - (XML_Char *)s);
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, end);
+- if (startTagLevel == 0) {
+- *eventPP = end;
+- return XML_ERROR_NO_ELEMENTS;
+- }
+- if (tagLevel != startTagLevel) {
+- *eventPP = end;
+- return XML_ERROR_ASYNC_ENTITY;
+- }
+- return XML_ERROR_NONE;
+- case XML_TOK_DATA_CHARS:
+- if (characterDataHandler) {
+- if (MUST_CONVERT(enc, s)) {
+- for (;;) {
+- ICHAR *dataPtr = (ICHAR *)dataBuf;
+- XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
+- *eventEndPP = s;
+- characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf);
+- if (s == next)
+- break;
+- *eventPP = s;
+- }
+- }
+- else
+- characterDataHandler(handlerArg,
+- (XML_Char *)s,
+- (XML_Char *)next - (XML_Char *)s);
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- break;
+- case XML_TOK_PI:
+- if (!reportProcessingInstruction(parser, enc, s, next))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- case XML_TOK_COMMENT:
+- if (!reportComment(parser, enc, s, next))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- default:
+- if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- break;
+- }
+- *eventPP = s = next;
+- }
+- /* not reached */
+-}
+-
+-/* If tagNamePtr is non-null, build a real list of attributes,
+-otherwise just check the attributes for well-formedness. */
+-
+-static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc,
+- const char *s, TAG_NAME *tagNamePtr,
+- BINDING **bindingsPtr)
+-{
+- ELEMENT_TYPE *elementType = 0;
+- int nDefaultAtts = 0;
+- const XML_Char **appAtts;
+- int attIndex = 0;
+- int i;
+- int n;
+- int nPrefixes = 0;
+- BINDING *binding;
+- const XML_Char *localPart;
+-
+- if (tagNamePtr) {
+- elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str, 0);
+- if (!elementType) {
+- tagNamePtr->str = poolCopyString(&dtd.pool, tagNamePtr->str);
+- if (!tagNamePtr->str)
+- return XML_ERROR_NO_MEMORY;
+- elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str, sizeof(ELEMENT_TYPE));
+- if (!elementType)
+- return XML_ERROR_NO_MEMORY;
+- if (ns && !setElementTypePrefix(parser, elementType))
+- return XML_ERROR_NO_MEMORY;
+- }
+- nDefaultAtts = elementType->nDefaultAtts;
+- }
+- n = XmlGetAttributes(enc, s, attsSize, atts);
+- if (n + nDefaultAtts > attsSize) {
+- int oldAttsSize = attsSize;
+- attsSize = n + nDefaultAtts + INIT_ATTS_SIZE;
+- atts = realloc((void *)atts, attsSize * sizeof(ATTRIBUTE));
+- if (!atts)
+- return XML_ERROR_NO_MEMORY;
+- if (n > oldAttsSize)
+- XmlGetAttributes(enc, s, n, atts);
+- }
+- appAtts = (const XML_Char **)atts;
+- for (i = 0; i < n; i++) {
+- ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name,
+- atts[i].name
+- + XmlNameLength(enc, atts[i].name));
+- if (!attId)
+- return XML_ERROR_NO_MEMORY;
+- if ((attId->name)[-1]) {
+- if (enc == encoding)
+- eventPtr = atts[i].name;
+- return XML_ERROR_DUPLICATE_ATTRIBUTE;
+- }
+- (attId->name)[-1] = 1;
+- appAtts[attIndex++] = attId->name;
+- if (!atts[i].normalized) {
+- enum XML_Error result;
+- int isCdata = 1;
+-
+- if (attId->maybeTokenized) {
+- int j;
+- for (j = 0; j < nDefaultAtts; j++) {
+- if (attId == elementType->defaultAtts[j].id) {
+- isCdata = elementType->defaultAtts[j].isCdata;
+- break;
+- }
+- }
+- }
+-
+- result = storeAttributeValue(parser, enc, isCdata,
+- atts[i].valuePtr, atts[i].valueEnd,
+- &tempPool);
+- if (result)
+- return result;
+- if (tagNamePtr) {
+- appAtts[attIndex] = poolStart(&tempPool);
+- poolFinish(&tempPool);
+- }
+- else
+- poolDiscard(&tempPool);
+- }
+- else if (tagNamePtr) {
+- appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, atts[i].valueEnd);
+- if (appAtts[attIndex] == 0)
+- return XML_ERROR_NO_MEMORY;
+- poolFinish(&tempPool);
+- }
+- if (attId->prefix && tagNamePtr) {
+- if (attId->xmlns) {
+- if (!addBinding(parser, attId->prefix, attId, appAtts[attIndex], bindingsPtr))
+- return XML_ERROR_NO_MEMORY;
+- --attIndex;
+- }
+- else {
+- attIndex++;
+- nPrefixes++;
+- (attId->name)[-1] = 2;
+- }
+- }
+- else
+- attIndex++;
+- }
+- nSpecifiedAtts = attIndex;
+- if (tagNamePtr) {
+- int j;
+- for (j = 0; j < nDefaultAtts; j++) {
+- const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + j;
+- if (!(da->id->name)[-1] && da->value) {
+- if (da->id->prefix) {
+- if (da->id->xmlns) {
+- if (!addBinding(parser, da->id->prefix, da->id, da->value, bindingsPtr))
+- return XML_ERROR_NO_MEMORY;
+- }
+- else {
+- (da->id->name)[-1] = 2;
+- nPrefixes++;
+- appAtts[attIndex++] = da->id->name;
+- appAtts[attIndex++] = da->value;
+- }
+- }
+- else {
+- (da->id->name)[-1] = 1;
+- appAtts[attIndex++] = da->id->name;
+- appAtts[attIndex++] = da->value;
+- }
+- }
+- }
+- appAtts[attIndex] = 0;
+- }
+- i = 0;
+- if (nPrefixes) {
+- for (; i < attIndex; i += 2) {
+- if (appAtts[i][-1] == 2) {
+- ATTRIBUTE_ID *id;
+- ((XML_Char *)(appAtts[i]))[-1] = 0;
+- id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, appAtts[i], 0);
+- if (id->prefix->binding) {
+- int j;
+- const BINDING *b = id->prefix->binding;
+- const XML_Char *s = appAtts[i];
+- for (j = 0; j < b->uriLen; j++) {
+- if (!poolAppendChar(&tempPool, b->uri[j]))
+- return XML_ERROR_NO_MEMORY;
+- }
+- while (*s++ != ':')
+- ;
+- do {
+- if (!poolAppendChar(&tempPool, *s))
+- return XML_ERROR_NO_MEMORY;
+- } while (*s++);
+- appAtts[i] = poolStart(&tempPool);
+- poolFinish(&tempPool);
+- }
+- if (!--nPrefixes)
+- break;
+- }
+- else
+- ((XML_Char *)(appAtts[i]))[-1] = 0;
+- }
+- }
+- for (; i < attIndex; i += 2)
+- ((XML_Char *)(appAtts[i]))[-1] = 0;
+- if (!tagNamePtr)
+- return XML_ERROR_NONE;
+- for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding)
+- binding->attId->name[-1] = 0;
+- if (elementType->prefix) {
+- binding = elementType->prefix->binding;
+- if (!binding)
+- return XML_ERROR_NONE;
+- localPart = tagNamePtr->str;
+- while (*localPart++ != XML_T(':'))
+- ;
+- }
+- else if (dtd.defaultPrefix.binding) {
+- binding = dtd.defaultPrefix.binding;
+- localPart = tagNamePtr->str;
+- }
+- else
+- return XML_ERROR_NONE;
+- tagNamePtr->localPart = localPart;
+- tagNamePtr->uriLen = binding->uriLen;
+- i = binding->uriLen;
+- do {
+- if (i == binding->uriAlloc) {
+- binding->uri = realloc(binding->uri, binding->uriAlloc *= 2);
+- if (!binding->uri)
+- return XML_ERROR_NO_MEMORY;
+- }
+- binding->uri[i++] = *localPart;
+- } while (*localPart++);
+- tagNamePtr->str = binding->uri;
+- return XML_ERROR_NONE;
+-}
+-
+-static
+-int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr)
+-{
+- BINDING *b;
+- int len;
+- for (len = 0; uri[len]; len++)
+- ;
+- if (namespaceSeparator)
+- len++;
+- if (freeBindingList) {
+- b = freeBindingList;
+- if (len > b->uriAlloc) {
+- b->uri = realloc(b->uri, len + EXPAND_SPARE);
+- if (!b->uri)
+- return 0;
+- b->uriAlloc = len + EXPAND_SPARE;
+- }
+- freeBindingList = b->nextTagBinding;
+- }
+- else {
+- b = malloc(sizeof(BINDING));
+- if (!b)
+- return 0;
+- b->uri = malloc(sizeof(XML_Char) * len + EXPAND_SPARE);
+- if (!b->uri) {
+- free(b);
+- return 0;
+- }
+- b->uriAlloc = len;
+- }
+- b->uriLen = len;
+- memcpy(b->uri, uri, len * sizeof(XML_Char));
+- if (namespaceSeparator)
+- b->uri[len - 1] = namespaceSeparator;
+- b->prefix = prefix;
+- b->attId = attId;
+- b->prevPrefixBinding = prefix->binding;
+- if (*uri == XML_T('\0') && prefix == &dtd.defaultPrefix)
+- prefix->binding = 0;
+- else
+- prefix->binding = b;
+- b->nextTagBinding = *bindingsPtr;
+- *bindingsPtr = b;
+- if (startNamespaceDeclHandler)
+- startNamespaceDeclHandler(handlerArg, prefix->name,
+- prefix->binding ? uri : 0);
+- return 1;
+-}
+-
+-/* The idea here is to avoid using stack for each CDATA section when
+-the whole file is parsed with one call. */
+-
+-static
+-enum XML_Error cdataSectionProcessor(XML_Parser parser,
+- const char *start,
+- const char *end,
+- const char **endPtr)
+-{
+- enum XML_Error result = doCdataSection(parser, encoding, &start, end, endPtr);
+- if (start) {
+- processor = contentProcessor;
+- return contentProcessor(parser, start, end, endPtr);
+- }
+- return result;
+-}
+-
+-/* startPtr gets set to non-null is the section is closed, and to null if
+-the section is not yet closed. */
+-
+-static
+-enum XML_Error doCdataSection(XML_Parser parser,
+- const ENCODING *enc,
+- const char **startPtr,
+- const char *end,
+- const char **nextPtr)
+-{
+- const char *s = *startPtr;
+- const char **eventPP;
+- const char **eventEndPP;
+- if (enc == encoding) {
+- eventPP = &eventPtr;
+- *eventPP = s;
+- eventEndPP = &eventEndPtr;
+- }
+- else {
+- eventPP = &(openInternalEntities->internalEventPtr);
+- eventEndPP = &(openInternalEntities->internalEventEndPtr);
+- }
+- *eventPP = s;
+- *startPtr = 0;
+- for (;;) {
+- const char *next;
+- int tok = XmlCdataSectionTok(enc, s, end, &next);
+- *eventEndPP = next;
+- switch (tok) {
+- case XML_TOK_CDATA_SECT_CLOSE:
+- if (endCdataSectionHandler)
+- endCdataSectionHandler(handlerArg);
+-#if 0
+- /* see comment under XML_TOK_CDATA_SECT_OPEN */
+- else if (characterDataHandler)
+- characterDataHandler(handlerArg, dataBuf, 0);
+-#endif
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- *startPtr = next;
+- return XML_ERROR_NONE;
+- case XML_TOK_DATA_NEWLINE:
+- if (characterDataHandler) {
+- XML_Char c = 0xA;
+- characterDataHandler(handlerArg, &c, 1);
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- break;
+- case XML_TOK_DATA_CHARS:
+- if (characterDataHandler) {
+- if (MUST_CONVERT(enc, s)) {
+- for (;;) {
+- ICHAR *dataPtr = (ICHAR *)dataBuf;
+- XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
+- *eventEndPP = next;
+- characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf);
+- if (s == next)
+- break;
+- *eventPP = s;
+- }
+- }
+- else
+- characterDataHandler(handlerArg,
+- (XML_Char *)s,
+- (XML_Char *)next - (XML_Char *)s);
+- }
+- else if (defaultHandler)
+- reportDefault(parser, enc, s, next);
+- break;
+- case XML_TOK_INVALID:
+- *eventPP = next;
+- return XML_ERROR_INVALID_TOKEN;
+- case XML_TOK_PARTIAL_CHAR:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- return XML_ERROR_PARTIAL_CHAR;
+- case XML_TOK_PARTIAL:
+- case XML_TOK_NONE:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- return XML_ERROR_UNCLOSED_CDATA_SECTION;
+- default:
+- abort();
+- }
+- *eventPP = s = next;
+- }
+- /* not reached */
+-}
+-
+-static enum XML_Error
+-initializeEncoding(XML_Parser parser)
+-{
+- const char *s;
+-#ifdef XML_UNICODE
+- char encodingBuf[128];
+- if (!protocolEncodingName)
+- s = 0;
+- else {
+- int i;
+- for (i = 0; protocolEncodingName[i]; i++) {
+- if (i == sizeof(encodingBuf) - 1
+- || protocolEncodingName[i] >= 0x80
+- || protocolEncodingName[i] < 0) {
+- encodingBuf[0] = '\0';
+- break;
+- }
+- encodingBuf[i] = (char)protocolEncodingName[i];
+- }
+- encodingBuf[i] = '\0';
+- s = encodingBuf;
+- }
+-#else
+- s = protocolEncodingName;
+-#endif
+- if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s))
+- return XML_ERROR_NONE;
+- return handleUnknownEncoding(parser, protocolEncodingName);
+-}
+-
+-static enum XML_Error
+-processXmlDecl(XML_Parser parser, int isGeneralTextEntity,
+- const char *s, const char *next)
+-{
+- const char *encodingName = 0;
+- const ENCODING *newEncoding = 0;
+- const char *version;
+- int standalone = -1;
+- if (!(ns
+- ? XmlParseXmlDeclNS
+- : XmlParseXmlDecl)(isGeneralTextEntity,
+- encoding,
+- s,
+- next,
+- &eventPtr,
+- &version,
+- &encodingName,
+- &newEncoding,
+- &standalone))
+- return XML_ERROR_SYNTAX;
+- if (!isGeneralTextEntity && standalone == 1)
+- dtd.standalone = 1;
+- if (defaultHandler)
+- reportDefault(parser, encoding, s, next);
+- if (!protocolEncodingName) {
+- if (newEncoding) {
+- if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) {
+- eventPtr = encodingName;
+- return XML_ERROR_INCORRECT_ENCODING;
+- }
+- encoding = newEncoding;
+- }
+- else if (encodingName) {
+- enum XML_Error result;
+- const XML_Char *s = poolStoreString(&tempPool,
+- encoding,
+- encodingName,
+- encodingName
+- + XmlNameLength(encoding, encodingName));
+- if (!s)
+- return XML_ERROR_NO_MEMORY;
+- result = handleUnknownEncoding(parser, s);
+- poolDiscard(&tempPool);
+- if (result == XML_ERROR_UNKNOWN_ENCODING)
+- eventPtr = encodingName;
+- return result;
+- }
+- }
+- return XML_ERROR_NONE;
+-}
+-
+-static enum XML_Error
+-handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName)
+-{
+- if (unknownEncodingHandler) {
+- XML_Encoding info;
+- int i;
+- for (i = 0; i < 256; i++)
+- info.map[i] = -1;
+- info.convert = 0;
+- info.data = 0;
+- info.release = 0;
+- if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, &info)) {
+- ENCODING *enc;
+- unknownEncodingMem = malloc(XmlSizeOfUnknownEncoding());
+- if (!unknownEncodingMem) {
+- if (info.release)
+- info.release(info.data);
+- return XML_ERROR_NO_MEMORY;
+- }
+- enc = (ns
+- ? XmlInitUnknownEncodingNS
+- : XmlInitUnknownEncoding)(unknownEncodingMem,
+- info.map,
+- info.convert,
+- info.data);
+- if (enc) {
+- unknownEncodingData = info.data;
+- unknownEncodingRelease = info.release;
+- encoding = enc;
+- return XML_ERROR_NONE;
+- }
+- }
+- if (info.release)
+- info.release(info.data);
+- }
+- return XML_ERROR_UNKNOWN_ENCODING;
+-}
+-
+-static enum XML_Error
+-prologInitProcessor(XML_Parser parser,
+- const char *s,
+- const char *end,
+- const char **nextPtr)
+-{
+- enum XML_Error result = initializeEncoding(parser);
+- if (result != XML_ERROR_NONE)
+- return result;
+- processor = prologProcessor;
+- return prologProcessor(parser, s, end, nextPtr);
+-}
+-
+-static enum XML_Error
+-prologProcessor(XML_Parser parser,
+- const char *s,
+- const char *end,
+- const char **nextPtr)
+-{
+- for (;;) {
+- const char *next;
+- int tok = XmlPrologTok(encoding, s, end, &next);
+- if (tok <= 0) {
+- if (nextPtr != 0 && tok != XML_TOK_INVALID) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- switch (tok) {
+- case XML_TOK_INVALID:
+- eventPtr = next;
+- return XML_ERROR_INVALID_TOKEN;
+- case XML_TOK_NONE:
+- return XML_ERROR_NO_ELEMENTS;
+- case XML_TOK_PARTIAL:
+- return XML_ERROR_UNCLOSED_TOKEN;
+- case XML_TOK_PARTIAL_CHAR:
+- return XML_ERROR_PARTIAL_CHAR;
+- case XML_TOK_TRAILING_CR:
+- eventPtr = s + encoding->minBytesPerChar;
+- return XML_ERROR_NO_ELEMENTS;
+- default:
+- abort();
+- }
+- }
+- switch (XmlTokenRole(&prologState, tok, s, next, encoding)) {
+- case XML_ROLE_XML_DECL:
+- {
+- enum XML_Error result = processXmlDecl(parser, 0, s, next);
+- if (result != XML_ERROR_NONE)
+- return result;
+- }
+- break;
+- case XML_ROLE_DOCTYPE_SYSTEM_ID:
+- if (!dtd.standalone
+- && notStandaloneHandler
+- && !notStandaloneHandler(handlerArg))
+- return XML_ERROR_NOT_STANDALONE;
+- hadExternalDoctype = 1;
+- break;
+- case XML_ROLE_DOCTYPE_PUBLIC_ID:
+- case XML_ROLE_ENTITY_PUBLIC_ID:
+- if (!XmlIsPublicId(encoding, s, next, &eventPtr))
+- return XML_ERROR_SYNTAX;
+- if (declEntity) {
+- XML_Char *tem = poolStoreString(&dtd.pool,
+- encoding,
+- s + encoding->minBytesPerChar,
+- next - encoding->minBytesPerChar);
+- if (!tem)
+- return XML_ERROR_NO_MEMORY;
+- normalizePublicId(tem);
+- declEntity->publicId = tem;
+- poolFinish(&dtd.pool);
+- }
+- break;
+- case XML_ROLE_INSTANCE_START:
+- processor = contentProcessor;
+- if (hadExternalDoctype)
+- dtd.complete = 0;
+- return contentProcessor(parser, s, end, nextPtr);
+- case XML_ROLE_ATTLIST_ELEMENT_NAME:
+- {
+- const XML_Char *name = poolStoreString(&dtd.pool, encoding, s, next);
+- if (!name)
+- return XML_ERROR_NO_MEMORY;
+- declElementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, name, sizeof(ELEMENT_TYPE));
+- if (!declElementType)
+- return XML_ERROR_NO_MEMORY;
+- if (declElementType->name != name)
+- poolDiscard(&dtd.pool);
+- else {
+- poolFinish(&dtd.pool);
+- if (!setElementTypePrefix(parser, declElementType))
+- return XML_ERROR_NO_MEMORY;
+- }
+- break;
+- }
+- case XML_ROLE_ATTRIBUTE_NAME:
+- declAttributeId = getAttributeId(parser, encoding, s, next);
+- if (!declAttributeId)
+- return XML_ERROR_NO_MEMORY;
+- declAttributeIsCdata = 0;
+- break;
+- case XML_ROLE_ATTRIBUTE_TYPE_CDATA:
+- declAttributeIsCdata = 1;
+- break;
+- case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE:
+- case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE:
+- if (dtd.complete
+- && !defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, 0))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE:
+- case XML_ROLE_FIXED_ATTRIBUTE_VALUE:
+- {
+- const XML_Char *attVal;
+- enum XML_Error result
+- = storeAttributeValue(parser, encoding, declAttributeIsCdata,
+- s + encoding->minBytesPerChar,
+- next - encoding->minBytesPerChar,
+- &dtd.pool);
+- if (result)
+- return result;
+- attVal = poolStart(&dtd.pool);
+- poolFinish(&dtd.pool);
+- if (dtd.complete
+- && !defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, attVal))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- }
+- case XML_ROLE_ENTITY_VALUE:
+- {
+- enum XML_Error result = storeEntityValue(parser, s, next);
+- if (result != XML_ERROR_NONE)
+- return result;
+- }
+- break;
+- case XML_ROLE_ENTITY_SYSTEM_ID:
+- if (declEntity) {
+- declEntity->systemId = poolStoreString(&dtd.pool, encoding,
+- s + encoding->minBytesPerChar,
+- next - encoding->minBytesPerChar);
+- if (!declEntity->systemId)
+- return XML_ERROR_NO_MEMORY;
+- declEntity->base = dtd.base;
+- poolFinish(&dtd.pool);
+- }
+- break;
+- case XML_ROLE_ENTITY_NOTATION_NAME:
+- if (declEntity) {
+- declEntity->notation = poolStoreString(&dtd.pool, encoding, s, next);
+- if (!declEntity->notation)
+- return XML_ERROR_NO_MEMORY;
+- poolFinish(&dtd.pool);
+- if (unparsedEntityDeclHandler) {
+- eventPtr = eventEndPtr = s;
+- unparsedEntityDeclHandler(handlerArg,
+- declEntity->name,
+- declEntity->base,
+- declEntity->systemId,
+- declEntity->publicId,
+- declEntity->notation);
+- }
+-
+- }
+- break;
+- case XML_ROLE_GENERAL_ENTITY_NAME:
+- {
+- const XML_Char *name;
+- if (XmlPredefinedEntityName(encoding, s, next)) {
+- declEntity = 0;
+- break;
+- }
+- name = poolStoreString(&dtd.pool, encoding, s, next);
+- if (!name)
+- return XML_ERROR_NO_MEMORY;
+- if (dtd.complete) {
+- declEntity = (ENTITY *)lookup(&dtd.generalEntities, name, sizeof(ENTITY));
+- if (!declEntity)
+- return XML_ERROR_NO_MEMORY;
+- if (declEntity->name != name) {
+- poolDiscard(&dtd.pool);
+- declEntity = 0;
+- }
+- else
+- poolFinish(&dtd.pool);
+- }
+- else {
+- poolDiscard(&dtd.pool);
+- declEntity = 0;
+- }
+- }
+- break;
+- case XML_ROLE_PARAM_ENTITY_NAME:
+- declEntity = 0;
+- break;
+- case XML_ROLE_NOTATION_NAME:
+- declNotationPublicId = 0;
+- declNotationName = 0;
+- if (notationDeclHandler) {
+- declNotationName = poolStoreString(&tempPool, encoding, s, next);
+- if (!declNotationName)
+- return XML_ERROR_NO_MEMORY;
+- poolFinish(&tempPool);
+- }
+- break;
+- case XML_ROLE_NOTATION_PUBLIC_ID:
+- if (!XmlIsPublicId(encoding, s, next, &eventPtr))
+- return XML_ERROR_SYNTAX;
+- if (declNotationName) {
+- XML_Char *tem = poolStoreString(&tempPool,
+- encoding,
+- s + encoding->minBytesPerChar,
+- next - encoding->minBytesPerChar);
+- if (!tem)
+- return XML_ERROR_NO_MEMORY;
+- normalizePublicId(tem);
+- declNotationPublicId = tem;
+- poolFinish(&tempPool);
+- }
+- break;
+- case XML_ROLE_NOTATION_SYSTEM_ID:
+- if (declNotationName && notationDeclHandler) {
+- const XML_Char *systemId
+- = poolStoreString(&tempPool, encoding,
+- s + encoding->minBytesPerChar,
+- next - encoding->minBytesPerChar);
+- if (!systemId)
+- return XML_ERROR_NO_MEMORY;
+- eventPtr = eventEndPtr = s;
+- notationDeclHandler(handlerArg,
+- declNotationName,
+- dtd.base,
+- systemId,
+- declNotationPublicId);
+- }
+- poolClear(&tempPool);
+- break;
+- case XML_ROLE_NOTATION_NO_SYSTEM_ID:
+- if (declNotationPublicId && notationDeclHandler) {
+- eventPtr = eventEndPtr = s;
+- notationDeclHandler(handlerArg,
+- declNotationName,
+- dtd.base,
+- 0,
+- declNotationPublicId);
+- }
+- poolClear(&tempPool);
+- break;
+- case XML_ROLE_ERROR:
+- eventPtr = s;
+- switch (tok) {
+- case XML_TOK_PARAM_ENTITY_REF:
+- return XML_ERROR_PARAM_ENTITY_REF;
+- case XML_TOK_XML_DECL:
+- return XML_ERROR_MISPLACED_XML_PI;
+- default:
+- return XML_ERROR_SYNTAX;
+- }
+- case XML_ROLE_GROUP_OPEN:
+- if (prologState.level >= groupSize) {
+- if (groupSize)
+- groupConnector = realloc(groupConnector, groupSize *= 2);
+- else
+- groupConnector = malloc(groupSize = 32);
+- if (!groupConnector)
+- return XML_ERROR_NO_MEMORY;
+- }
+- groupConnector[prologState.level] = 0;
+- break;
+- case XML_ROLE_GROUP_SEQUENCE:
+- if (groupConnector[prologState.level] == '|') {
+- eventPtr = s;
+- return XML_ERROR_SYNTAX;
+- }
+- groupConnector[prologState.level] = ',';
+- break;
+- case XML_ROLE_GROUP_CHOICE:
+- if (groupConnector[prologState.level] == ',') {
+- eventPtr = s;
+- return XML_ERROR_SYNTAX;
+- }
+- groupConnector[prologState.level] = '|';
+- break;
+- case XML_ROLE_PARAM_ENTITY_REF:
+- if (!dtd.standalone
+- && notStandaloneHandler
+- && !notStandaloneHandler(handlerArg))
+- return XML_ERROR_NOT_STANDALONE;
+- dtd.complete = 0;
+- break;
+- case XML_ROLE_NONE:
+- switch (tok) {
+- case XML_TOK_PI:
+- eventPtr = s;
+- eventEndPtr = next;
+- if (!reportProcessingInstruction(parser, encoding, s, next))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- case XML_TOK_COMMENT:
+- eventPtr = s;
+- eventEndPtr = next;
+- if (!reportComment(parser, encoding, s, next))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- }
+- break;
+- }
+- if (defaultHandler) {
+- switch (tok) {
+- case XML_TOK_PI:
+- case XML_TOK_COMMENT:
+- case XML_TOK_BOM:
+- case XML_TOK_XML_DECL:
+- break;
+- default:
+- eventPtr = s;
+- eventEndPtr = next;
+- reportDefault(parser, encoding, s, next);
+- }
+- }
+- s = next;
+- }
+- /* not reached */
+-}
+-
+-static
+-enum XML_Error epilogProcessor(XML_Parser parser,
+- const char *s,
+- const char *end,
+- const char **nextPtr)
+-{
+- processor = epilogProcessor;
+- eventPtr = s;
+- for (;;) {
+- const char *next;
+- int tok = XmlPrologTok(encoding, s, end, &next);
+- eventEndPtr = next;
+- switch (tok) {
+- case XML_TOK_TRAILING_CR:
+- if (defaultHandler) {
+- eventEndPtr = end;
+- reportDefault(parser, encoding, s, end);
+- }
+- /* fall through */
+- case XML_TOK_NONE:
+- if (nextPtr)
+- *nextPtr = end;
+- return XML_ERROR_NONE;
+- case XML_TOK_PROLOG_S:
+- if (defaultHandler)
+- reportDefault(parser, encoding, s, next);
+- break;
+- case XML_TOK_PI:
+- if (!reportProcessingInstruction(parser, encoding, s, next))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- case XML_TOK_COMMENT:
+- if (!reportComment(parser, encoding, s, next))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- case XML_TOK_INVALID:
+- eventPtr = next;
+- return XML_ERROR_INVALID_TOKEN;
+- case XML_TOK_PARTIAL:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- return XML_ERROR_UNCLOSED_TOKEN;
+- case XML_TOK_PARTIAL_CHAR:
+- if (nextPtr) {
+- *nextPtr = s;
+- return XML_ERROR_NONE;
+- }
+- return XML_ERROR_PARTIAL_CHAR;
+- default:
+- return XML_ERROR_JUNK_AFTER_DOC_ELEMENT;
+- }
+- eventPtr = s = next;
+- }
+-}
+-
+-static
+-enum XML_Error errorProcessor(XML_Parser parser,
+- const char *s,
+- const char *end,
+- const char **nextPtr)
+-{
+- return errorCode;
+-}
+-
+-static enum XML_Error
+-storeAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata,
+- const char *ptr, const char *end,
+- STRING_POOL *pool)
+-{
+- enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, end, pool);
+- if (result)
+- return result;
+- if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20)
+- poolChop(pool);
+- if (!poolAppendChar(pool, XML_T('\0')))
+- return XML_ERROR_NO_MEMORY;
+- return XML_ERROR_NONE;
+-}
+-
+-static enum XML_Error
+-appendAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata,
+- const char *ptr, const char *end,
+- STRING_POOL *pool)
+-{
+- const ENCODING *internalEnc = ns ? XmlGetInternalEncodingNS() : XmlGetInternalEncoding();
+- for (;;) {
+- const char *next;
+- int tok = XmlAttributeValueTok(enc, ptr, end, &next);
+- switch (tok) {
+- case XML_TOK_NONE:
+- return XML_ERROR_NONE;
+- case XML_TOK_INVALID:
+- if (enc == encoding)
+- eventPtr = next;
+- return XML_ERROR_INVALID_TOKEN;
+- case XML_TOK_PARTIAL:
+- if (enc == encoding)
+- eventPtr = ptr;
+- return XML_ERROR_INVALID_TOKEN;
+- case XML_TOK_CHAR_REF:
+- {
+- XML_Char buf[XML_ENCODE_MAX];
+- int i;
+- int n = XmlCharRefNumber(enc, ptr);
+- if (n < 0) {
+- if (enc == encoding)
+- eventPtr = ptr;
+- return XML_ERROR_BAD_CHAR_REF;
+- }
+- if (!isCdata
+- && n == 0x20 /* space */
+- && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
+- break;
+- n = XmlEncode(n, (ICHAR *)buf);
+- if (!n) {
+- if (enc == encoding)
+- eventPtr = ptr;
+- return XML_ERROR_BAD_CHAR_REF;
+- }
+- for (i = 0; i < n; i++) {
+- if (!poolAppendChar(pool, buf[i]))
+- return XML_ERROR_NO_MEMORY;
+- }
+- }
+- break;
+- case XML_TOK_DATA_CHARS:
+- if (!poolAppend(pool, enc, ptr, next))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- break;
+- case XML_TOK_TRAILING_CR:
+- next = ptr + enc->minBytesPerChar;
+- /* fall through */
+- case XML_TOK_ATTRIBUTE_VALUE_S:
+- case XML_TOK_DATA_NEWLINE:
+- if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
+- break;
+- if (!poolAppendChar(pool, 0x20))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- case XML_TOK_ENTITY_REF:
+- {
+- const XML_Char *name;
+- ENTITY *entity;
+- XML_Char ch = XmlPredefinedEntityName(enc,
+- ptr + enc->minBytesPerChar,
+- next - enc->minBytesPerChar);
+- if (ch) {
+- if (!poolAppendChar(pool, ch))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- }
+- name = poolStoreString(&temp2Pool, enc,
+- ptr + enc->minBytesPerChar,
+- next - enc->minBytesPerChar);
+- if (!name)
+- return XML_ERROR_NO_MEMORY;
+- entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0);
+- poolDiscard(&temp2Pool);
+- if (!entity) {
+- if (dtd.complete) {
+- if (enc == encoding)
+- eventPtr = ptr;
+- return XML_ERROR_UNDEFINED_ENTITY;
+- }
+- }
+- else if (entity->open) {
+- if (enc == encoding)
+- eventPtr = ptr;
+- return XML_ERROR_RECURSIVE_ENTITY_REF;
+- }
+- else if (entity->notation) {
+- if (enc == encoding)
+- eventPtr = ptr;
+- return XML_ERROR_BINARY_ENTITY_REF;
+- }
+- else if (!entity->textPtr) {
+- if (enc == encoding)
+- eventPtr = ptr;
+- return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF;
+- }
+- else {
+- enum XML_Error result;
+- const XML_Char *textEnd = entity->textPtr + entity->textLen;
+- entity->open = 1;
+- result = appendAttributeValue(parser, internalEnc, isCdata, (char *)entity->textPtr, (char *)textEnd, pool);
+- entity->open = 0;
+- if (result)
+- return result;
+- }
+- }
+- break;
+- default:
+- abort();
+- }
+- ptr = next;
+- }
+- /* not reached */
+-}
+-
+-static
+-enum XML_Error storeEntityValue(XML_Parser parser,
+- const char *entityTextPtr,
+- const char *entityTextEnd)
+-{
+- const ENCODING *internalEnc = ns ? XmlGetInternalEncodingNS() : XmlGetInternalEncoding();
+- STRING_POOL *pool = &(dtd.pool);
+- entityTextPtr += encoding->minBytesPerChar;
+- entityTextEnd -= encoding->minBytesPerChar;
+- for (;;) {
+- const char *next;
+- int tok = XmlEntityValueTok(encoding, entityTextPtr, entityTextEnd, &next);
+- switch (tok) {
+- case XML_TOK_PARAM_ENTITY_REF:
+- eventPtr = entityTextPtr;
+- return XML_ERROR_SYNTAX;
+- case XML_TOK_NONE:
+- if (declEntity) {
+- declEntity->textPtr = pool->start;
+- declEntity->textLen = pool->ptr - pool->start;
+- poolFinish(pool);
+- }
+- else
+- poolDiscard(pool);
+- return XML_ERROR_NONE;
+- case XML_TOK_ENTITY_REF:
+- case XML_TOK_DATA_CHARS:
+- if (!poolAppend(pool, encoding, entityTextPtr, next))
+- return XML_ERROR_NO_MEMORY;
+- break;
+- case XML_TOK_TRAILING_CR:
+- next = entityTextPtr + encoding->minBytesPerChar;
+- /* fall through */
+- case XML_TOK_DATA_NEWLINE:
+- if (pool->end == pool->ptr && !poolGrow(pool))
+- return XML_ERROR_NO_MEMORY;
+- *(pool->ptr)++ = 0xA;
+- break;
+- case XML_TOK_CHAR_REF:
+- {
+- XML_Char buf[XML_ENCODE_MAX];
+- int i;
+- int n = XmlCharRefNumber(encoding, entityTextPtr);
+- if (n < 0) {
+- eventPtr = entityTextPtr;
+- return XML_ERROR_BAD_CHAR_REF;
+- }
+- n = XmlEncode(n, (ICHAR *)buf);
+- if (!n) {
+- eventPtr = entityTextPtr;
+- return XML_ERROR_BAD_CHAR_REF;
+- }
+- for (i = 0; i < n; i++) {
+- if (pool->end == pool->ptr && !poolGrow(pool))
+- return XML_ERROR_NO_MEMORY;
+- *(pool->ptr)++ = buf[i];
+- }
+- }
+- break;
+- case XML_TOK_PARTIAL:
+- eventPtr = entityTextPtr;
+- return XML_ERROR_INVALID_TOKEN;
+- case XML_TOK_INVALID:
+- eventPtr = next;
+- return XML_ERROR_INVALID_TOKEN;
+- default:
+- abort();
+- }
+- entityTextPtr = next;
+- }
+- /* not reached */
+-}
+-
+-static void
+-normalizeLines(XML_Char *s)
+-{
+- XML_Char *p;
+- for (;; s++) {
+- if (*s == XML_T('\0'))
+- return;
+- if (*s == 0xD)
+- break;
+- }
+- p = s;
+- do {
+- if (*s == 0xD) {
+- *p++ = 0xA;
+- if (*++s == 0xA)
+- s++;
+- }
+- else
+- *p++ = *s++;
+- } while (*s);
+- *p = XML_T('\0');
+-}
+-
+-static int
+-reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
+-{
+- const XML_Char *target;
+- XML_Char *data;
+- const char *tem;
+- if (!processingInstructionHandler) {
+- if (defaultHandler)
+- reportDefault(parser, enc, start, end);
+- return 1;
+- }
+- start += enc->minBytesPerChar * 2;
+- tem = start + XmlNameLength(enc, start);
+- target = poolStoreString(&tempPool, enc, start, tem);
+- if (!target)
+- return 0;
+- poolFinish(&tempPool);
+- data = poolStoreString(&tempPool, enc,
+- XmlSkipS(enc, tem),
+- end - enc->minBytesPerChar*2);
+- if (!data)
+- return 0;
+- normalizeLines(data);
+- processingInstructionHandler(handlerArg, target, data);
+- poolClear(&tempPool);
+- return 1;
+-}
+-
+-static int
+-reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
+-{
+- XML_Char *data;
+- if (!commentHandler) {
+- if (defaultHandler)
+- reportDefault(parser, enc, start, end);
+- return 1;
+- }
+- data = poolStoreString(&tempPool,
+- enc,
+- start + enc->minBytesPerChar * 4,
+- end - enc->minBytesPerChar * 3);
+- if (!data)
+- return 0;
+- normalizeLines(data);
+- commentHandler(handlerArg, data);
+- poolClear(&tempPool);
+- return 1;
+-}
+-
+-static void
+-reportDefault(XML_Parser parser, const ENCODING *enc, const char *s, const char *end)
+-{
+- if (MUST_CONVERT(enc, s)) {
+- const char **eventPP;
+- const char **eventEndPP;
+- if (enc == encoding) {
+- eventPP = &eventPtr;
+- eventEndPP = &eventEndPtr;
+- }
+- else {
+- eventPP = &(openInternalEntities->internalEventPtr);
+- eventEndPP = &(openInternalEntities->internalEventEndPtr);
+- }
+- do {
+- ICHAR *dataPtr = (ICHAR *)dataBuf;
+- XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd);
+- *eventEndPP = s;
+- defaultHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf);
+- *eventPP = s;
+- } while (s != end);
+- }
+- else
+- defaultHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s);
+-}
+-
+-
+-static int
+-defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, int isCdata, const XML_Char *value)
+-{
+- DEFAULT_ATTRIBUTE *att;
+- if (type->nDefaultAtts == type->allocDefaultAtts) {
+- if (type->allocDefaultAtts == 0) {
+- type->allocDefaultAtts = 8;
+- type->defaultAtts = malloc(type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE));
+- }
+- else {
+- type->allocDefaultAtts *= 2;
+- type->defaultAtts = realloc(type->defaultAtts,
+- type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE));
+- }
+- if (!type->defaultAtts)
+- return 0;
+- }
+- att = type->defaultAtts + type->nDefaultAtts;
+- att->id = attId;
+- att->value = value;
+- att->isCdata = isCdata;
+- if (!isCdata)
+- attId->maybeTokenized = 1;
+- type->nDefaultAtts += 1;
+- return 1;
+-}
+-
+-static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType)
+-{
+- const XML_Char *name;
+- for (name = elementType->name; *name; name++) {
+- if (*name == XML_T(':')) {
+- PREFIX *prefix;
+- const XML_Char *s;
+- for (s = elementType->name; s != name; s++) {
+- if (!poolAppendChar(&dtd.pool, *s))
+- return 0;
+- }
+- if (!poolAppendChar(&dtd.pool, XML_T('\0')))
+- return 0;
+- prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX));
+- if (!prefix)
+- return 0;
+- if (prefix->name == poolStart(&dtd.pool))
+- poolFinish(&dtd.pool);
+- else
+- poolDiscard(&dtd.pool);
+- elementType->prefix = prefix;
+-
+- }
+- }
+- return 1;
+-}
+-
+-static ATTRIBUTE_ID *
+-getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
+-{
+- ATTRIBUTE_ID *id;
+- const XML_Char *name;
+- if (!poolAppendChar(&dtd.pool, XML_T('\0')))
+- return 0;
+- name = poolStoreString(&dtd.pool, enc, start, end);
+- if (!name)
+- return 0;
+- ++name;
+- id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, name, sizeof(ATTRIBUTE_ID));
+- if (!id)
+- return 0;
+- if (id->name != name)
+- poolDiscard(&dtd.pool);
+- else {
+- poolFinish(&dtd.pool);
+- if (!ns)
+- ;
+- else if (name[0] == 'x'
+- && name[1] == 'm'
+- && name[2] == 'l'
+- && name[3] == 'n'
+- && name[4] == 's'
+- && (name[5] == XML_T('\0') || name[5] == XML_T(':'))) {
+- if (name[5] == '\0')
+- id->prefix = &dtd.defaultPrefix;
+- else
+- id->prefix = (PREFIX *)lookup(&dtd.prefixes, name + 6, sizeof(PREFIX));
+- id->xmlns = 1;
+- }
+- else {
+- int i;
+- for (i = 0; name[i]; i++) {
+- if (name[i] == XML_T(':')) {
+- int j;
+- for (j = 0; j < i; j++) {
+- if (!poolAppendChar(&dtd.pool, name[j]))
+- return 0;
+- }
+- if (!poolAppendChar(&dtd.pool, XML_T('\0')))
+- return 0;
+- id->prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX));
+- if (id->prefix->name == poolStart(&dtd.pool))
+- poolFinish(&dtd.pool);
+- else
+- poolDiscard(&dtd.pool);
+- break;
+- }
+- }
+- }
+- }
+- return id;
+-}
+-
+-#define CONTEXT_SEP XML_T('\f')
+-
+-static
+-const XML_Char *getContext(XML_Parser parser)
+-{
+- HASH_TABLE_ITER iter;
+- int needSep = 0;
+-
+- if (dtd.defaultPrefix.binding) {
+- int i;
+- int len;
+- if (!poolAppendChar(&tempPool, XML_T('=')))
+- return 0;
+- len = dtd.defaultPrefix.binding->uriLen;
+- if (namespaceSeparator != XML_T('\0'))
+- len--;
+- for (i = 0; i < len; i++)
+- if (!poolAppendChar(&tempPool, dtd.defaultPrefix.binding->uri[i]))
+- return 0;
+- needSep = 1;
+- }
+-
+- hashTableIterInit(&iter, &(dtd.prefixes));
+- for (;;) {
+- int i;
+- int len;
+- const XML_Char *s;
+- PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter);
+- if (!prefix)
+- break;
+- if (!prefix->binding)
+- continue;
+- if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP))
+- return 0;
+- for (s = prefix->name; *s; s++)
+- if (!poolAppendChar(&tempPool, *s))
+- return 0;
+- if (!poolAppendChar(&tempPool, XML_T('=')))
+- return 0;
+- len = prefix->binding->uriLen;
+- if (namespaceSeparator != XML_T('\0'))
+- len--;
+- for (i = 0; i < len; i++)
+- if (!poolAppendChar(&tempPool, prefix->binding->uri[i]))
+- return 0;
+- needSep = 1;
+- }
+-
+-
+- hashTableIterInit(&iter, &(dtd.generalEntities));
+- for (;;) {
+- const XML_Char *s;
+- ENTITY *e = (ENTITY *)hashTableIterNext(&iter);
+- if (!e)
+- break;
+- if (!e->open)
+- continue;
+- if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP))
+- return 0;
+- for (s = e->name; *s; s++)
+- if (!poolAppendChar(&tempPool, *s))
+- return 0;
+- needSep = 1;
+- }
+-
+- if (!poolAppendChar(&tempPool, XML_T('\0')))
+- return 0;
+- return tempPool.start;
+-}
+-
+-static
+-int setContext(XML_Parser parser, const XML_Char *context)
+-{
+- const XML_Char *s = context;
+-
+- while (*context != XML_T('\0')) {
+- if (*s == CONTEXT_SEP || *s == XML_T('\0')) {
+- ENTITY *e;
+- if (!poolAppendChar(&tempPool, XML_T('\0')))
+- return 0;
+- e = (ENTITY *)lookup(&dtd.generalEntities, poolStart(&tempPool), 0);
+- if (e)
+- e->open = 1;
+- if (*s != XML_T('\0'))
+- s++;
+- context = s;
+- poolDiscard(&tempPool);
+- }
+- else if (*s == '=') {
+- PREFIX *prefix;
+- if (poolLength(&tempPool) == 0)
+- prefix = &dtd.defaultPrefix;
+- else {
+- if (!poolAppendChar(&tempPool, XML_T('\0')))
+- return 0;
+- prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&tempPool), sizeof(PREFIX));
+- if (!prefix)
+- return 0;
+- if (prefix->name == poolStart(&tempPool))
+- poolFinish(&tempPool);
+- else
+- poolDiscard(&tempPool);
+- }
+- for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0'); context++)
+- if (!poolAppendChar(&tempPool, *context))
+- return 0;
+- if (!poolAppendChar(&tempPool, XML_T('\0')))
+- return 0;
+- if (!addBinding(parser, prefix, 0, poolStart(&tempPool), &inheritedBindings))
+- return 0;
+- poolDiscard(&tempPool);
+- if (*context != XML_T('\0'))
+- ++context;
+- s = context;
+- }
+- else {
+- if (!poolAppendChar(&tempPool, *s))
+- return 0;
+- s++;
+- }
+- }
+- return 1;
+-}
+-
+-
+-static
+-void normalizePublicId(XML_Char *publicId)
+-{
+- XML_Char *p = publicId;
+- XML_Char *s;
+- for (s = publicId; *s; s++) {
+- switch (*s) {
+- case 0x20:
+- case 0xD:
+- case 0xA:
+- if (p != publicId && p[-1] != 0x20)
+- *p++ = 0x20;
+- break;
+- default:
+- *p++ = *s;
+- }
+- }
+- if (p != publicId && p[-1] == 0x20)
+- --p;
+- *p = XML_T('\0');
+-}
+-
+-static int dtdInit(DTD *p)
+-{
+- poolInit(&(p->pool));
+- hashTableInit(&(p->generalEntities));
+- hashTableInit(&(p->elementTypes));
+- hashTableInit(&(p->attributeIds));
+- hashTableInit(&(p->prefixes));
+- p->complete = 1;
+- p->standalone = 0;
+- p->base = 0;
+- p->defaultPrefix.name = 0;
+- p->defaultPrefix.binding = 0;
+- return 1;
+-}
+-
+-static void dtdDestroy(DTD *p)
+-{
+- HASH_TABLE_ITER iter;
+- hashTableIterInit(&iter, &(p->elementTypes));
+- for (;;) {
+- ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter);
+- if (!e)
+- break;
+- if (e->allocDefaultAtts != 0)
+- free(e->defaultAtts);
+- }
+- hashTableDestroy(&(p->generalEntities));
+- hashTableDestroy(&(p->elementTypes));
+- hashTableDestroy(&(p->attributeIds));
+- hashTableDestroy(&(p->prefixes));
+- poolDestroy(&(p->pool));
+-}
+-
+-/* Do a deep copy of the DTD. Return 0 for out of memory; non-zero otherwise.
+-The new DTD has already been initialized. */
+-
+-static int dtdCopy(DTD *newDtd, const DTD *oldDtd)
+-{
+- HASH_TABLE_ITER iter;
+-
+- if (oldDtd->base) {
+- const XML_Char *tem = poolCopyString(&(newDtd->pool), oldDtd->base);
+- if (!tem)
+- return 0;
+- newDtd->base = tem;
+- }
+-
+- /* Copy the prefix table. */
+-
+- hashTableIterInit(&iter, &(oldDtd->prefixes));
+- for (;;) {
+- const XML_Char *name;
+- const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter);
+- if (!oldP)
+- break;
+- name = poolCopyString(&(newDtd->pool), oldP->name);
+- if (!name)
+- return 0;
+- if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX)))
+- return 0;
+- }
+-
+- hashTableIterInit(&iter, &(oldDtd->attributeIds));
+-
+- /* Copy the attribute id table. */
+-
+- for (;;) {
+- ATTRIBUTE_ID *newA;
+- const XML_Char *name;
+- const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter);
+-
+- if (!oldA)
+- break;
+- /* Remember to allocate the scratch byte before the name. */
+- if (!poolAppendChar(&(newDtd->pool), XML_T('\0')))
+- return 0;
+- name = poolCopyString(&(newDtd->pool), oldA->name);
+- if (!name)
+- return 0;
+- ++name;
+- newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name, sizeof(ATTRIBUTE_ID));
+- if (!newA)
+- return 0;
+- newA->maybeTokenized = oldA->maybeTokenized;
+- if (oldA->prefix) {
+- newA->xmlns = oldA->xmlns;
+- if (oldA->prefix == &oldDtd->defaultPrefix)
+- newA->prefix = &newDtd->defaultPrefix;
+- else
+- newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldA->prefix->name, 0);
+- }
+- }
+-
+- /* Copy the element type table. */
+-
+- hashTableIterInit(&iter, &(oldDtd->elementTypes));
+-
+- for (;;) {
+- int i;
+- ELEMENT_TYPE *newE;
+- const XML_Char *name;
+- const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter);
+- if (!oldE)
+- break;
+- name = poolCopyString(&(newDtd->pool), oldE->name);
+- if (!name)
+- return 0;
+- newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name, sizeof(ELEMENT_TYPE));
+- if (!newE)
+- return 0;
+- if (oldE->nDefaultAtts) {
+- newE->defaultAtts = (DEFAULT_ATTRIBUTE *)malloc(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE));
+- if (!newE->defaultAtts)
+- return 0;
+- }
+- newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts;
+- if (oldE->prefix)
+- newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldE->prefix->name, 0);
+- for (i = 0; i < newE->nDefaultAtts; i++) {
+- newE->defaultAtts[i].id = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0);
+- newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata;
+- if (oldE->defaultAtts[i].value) {
+- newE->defaultAtts[i].value = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value);
+- if (!newE->defaultAtts[i].value)
+- return 0;
+- }
+- else
+- newE->defaultAtts[i].value = 0;
+- }
+- }
+-
+- /* Copy the entity table. */
+-
+- hashTableIterInit(&iter, &(oldDtd->generalEntities));
+-
+- for (;;) {
+- ENTITY *newE;
+- const XML_Char *name;
+- const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter);
+- if (!oldE)
+- break;
+- name = poolCopyString(&(newDtd->pool), oldE->name);
+- if (!name)
+- return 0;
+- newE = (ENTITY *)lookup(&(newDtd->generalEntities), name, sizeof(ENTITY));
+- if (!newE)
+- return 0;
+- if (oldE->systemId) {
+- const XML_Char *tem = poolCopyString(&(newDtd->pool), oldE->systemId);
+- if (!tem)
+- return 0;
+- newE->systemId = tem;
+- if (oldE->base) {
+- if (oldE->base == oldDtd->base)
+- newE->base = newDtd->base;
+- tem = poolCopyString(&(newDtd->pool), oldE->base);
+- if (!tem)
+- return 0;
+- newE->base = tem;
+- }
+- }
+- else {
+- const XML_Char *tem = poolCopyStringN(&(newDtd->pool), oldE->textPtr, oldE->textLen);
+- if (!tem)
+- return 0;
+- newE->textPtr = tem;
+- newE->textLen = oldE->textLen;
+- }
+- if (oldE->notation) {
+- const XML_Char *tem = poolCopyString(&(newDtd->pool), oldE->notation);
+- if (!tem)
+- return 0;
+- newE->notation = tem;
+- }
+- }
+-
+- newDtd->complete = oldDtd->complete;
+- newDtd->standalone = oldDtd->standalone;
+- return 1;
+-}
+-
+-static
+-void poolInit(STRING_POOL *pool)
+-{
+- pool->blocks = 0;
+- pool->freeBlocks = 0;
+- pool->start = 0;
+- pool->ptr = 0;
+- pool->end = 0;
+-}
+-
+-static
+-void poolClear(STRING_POOL *pool)
+-{
+- if (!pool->freeBlocks)
+- pool->freeBlocks = pool->blocks;
+- else {
+- BLOCK *p = pool->blocks;
+- while (p) {
+- BLOCK *tem = p->next;
+- p->next = pool->freeBlocks;
+- pool->freeBlocks = p;
+- p = tem;
+- }
+- }
+- pool->blocks = 0;
+- pool->start = 0;
+- pool->ptr = 0;
+- pool->end = 0;
+-}
+-
+-static
+-void poolDestroy(STRING_POOL *pool)
+-{
+- BLOCK *p = pool->blocks;
+- while (p) {
+- BLOCK *tem = p->next;
+- free(p);
+- p = tem;
+- }
+- pool->blocks = 0;
+- p = pool->freeBlocks;
+- while (p) {
+- BLOCK *tem = p->next;
+- free(p);
+- p = tem;
+- }
+- pool->freeBlocks = 0;
+- pool->ptr = 0;
+- pool->start = 0;
+- pool->end = 0;
+-}
+-
+-static
+-XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc,
+- const char *ptr, const char *end)
+-{
+- if (!pool->ptr && !poolGrow(pool))
+- return 0;
+- for (;;) {
+- XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end);
+- if (ptr == end)
+- break;
+- if (!poolGrow(pool))
+- return 0;
+- }
+- return pool->start;
+-}
+-
+-static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s)
+-{
+- do {
+- if (!poolAppendChar(pool, *s))
+- return 0;
+- } while (*s++);
+- s = pool->start;
+- poolFinish(pool);
+- return s;
+-}
+-
+-static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n)
+-{
+- if (!pool->ptr && !poolGrow(pool))
+- return 0;
+- for (; n > 0; --n, s++) {
+- if (!poolAppendChar(pool, *s))
+- return 0;
+-
+- }
+- s = pool->start;
+- poolFinish(pool);
+- return s;
+-}
+-
+-static
+-XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc,
+- const char *ptr, const char *end)
+-{
+- if (!poolAppend(pool, enc, ptr, end))
+- return 0;
+- if (pool->ptr == pool->end && !poolGrow(pool))
+- return 0;
+- *(pool->ptr)++ = 0;
+- return pool->start;
+-}
+-
+-static
+-int poolGrow(STRING_POOL *pool)
+-{
+- if (pool->freeBlocks) {
+- if (pool->start == 0) {
+- pool->blocks = pool->freeBlocks;
+- pool->freeBlocks = pool->freeBlocks->next;
+- pool->blocks->next = 0;
+- pool->start = pool->blocks->s;
+- pool->end = pool->start + pool->blocks->size;
+- pool->ptr = pool->start;
+- return 1;
+- }
+- if (pool->end - pool->start < pool->freeBlocks->size) {
+- BLOCK *tem = pool->freeBlocks->next;
+- pool->freeBlocks->next = pool->blocks;
+- pool->blocks = pool->freeBlocks;
+- pool->freeBlocks = tem;
+- memcpy(pool->blocks->s, pool->start, (pool->end - pool->start) * sizeof(XML_Char));
+- pool->ptr = pool->blocks->s + (pool->ptr - pool->start);
+- pool->start = pool->blocks->s;
+- pool->end = pool->start + pool->blocks->size;
+- return 1;
+- }
+- }
+- if (pool->blocks && pool->start == pool->blocks->s) {
+- int blockSize = (pool->end - pool->start)*2;
+- pool->blocks = realloc(pool->blocks, offsetof(BLOCK, s) + blockSize * sizeof(XML_Char));
+- if (!pool->blocks)
+- return 0;
+- pool->blocks->size = blockSize;
+- pool->ptr = pool->blocks->s + (pool->ptr - pool->start);
+- pool->start = pool->blocks->s;
+- pool->end = pool->start + blockSize;
+- }
+- else {
+- BLOCK *tem;
+- int blockSize = pool->end - pool->start;
+- if (blockSize < INIT_BLOCK_SIZE)
+- blockSize = INIT_BLOCK_SIZE;
+- else
+- blockSize *= 2;
+- tem = malloc(offsetof(BLOCK, s) + blockSize * sizeof(XML_Char));
+- if (!tem)
+- return 0;
+- tem->size = blockSize;
+- tem->next = pool->blocks;
+- pool->blocks = tem;
+- memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char));
+- pool->ptr = tem->s + (pool->ptr - pool->start);
+- pool->start = tem->s;
+- pool->end = tem->s + blockSize;
+- }
+- return 1;
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.dsp dump_expat/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.dsp
+--- original/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.dsp 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.dsp 1969-12-31 18:00:00.000000000 -0600
+@@ -1,202 +0,0 @@
+-# Microsoft Developer Studio Project File - Name="xmlparse" - Package Owner=<4>
+-# Microsoft Developer Studio Generated Build File, Format Version 6.00
+-# ** DO NOT EDIT **
+-
+-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+-
+-CFG=xmlparse - Win32 Release
+-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+-!MESSAGE use the Export Makefile command and run
+-!MESSAGE
+-!MESSAGE NMAKE /f "xmlparse.mak".
+-!MESSAGE
+-!MESSAGE You can specify a configuration when running NMAKE
+-!MESSAGE by defining the macro CFG on the command line. For example:
+-!MESSAGE
+-!MESSAGE NMAKE /f "xmlparse.mak" CFG="xmlparse - Win32 Release"
+-!MESSAGE
+-!MESSAGE Possible choices for configuration are:
+-!MESSAGE
+-!MESSAGE "xmlparse - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE "xmlparse - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE "xmlparse - Win32 MinSize" (based on "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE
+-
+-# Begin Project
+-# PROP AllowPerConfigDependencies 0
+-# PROP Scc_ProjName ""
+-# PROP Scc_LocalPath ""
+-CPP=cl.exe
+-MTL=midl.exe
+-RSC=rc.exe
+-
+-!IF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir ".\Release"
+-# PROP BASE Intermediate_Dir ".\Release"
+-# PROP BASE Target_Dir "."
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir ".\Release"
+-# PROP Intermediate_Dir ".\Release"
+-# PROP Ignore_Export_Lib 0
+-# PROP Target_Dir "."
+-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+-# ADD CPP /nologo /W3 /GX /O2 /I "..\xmltok" /I "..\xmlwf" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllexport) /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "XML_NS" /YX /FD /c
+-# ADD BASE MTL /nologo /D "NDEBUG" /win32
+-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20000000" /subsystem:windows /dll /machine:I386 /out:"..\bin\xmlparse.dll" /link50compat
+-# SUBTRACT LINK32 /pdb:none
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 1
+-# PROP BASE Output_Dir ".\Debug"
+-# PROP BASE Intermediate_Dir ".\Debug"
+-# PROP BASE Target_Dir "."
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 1
+-# PROP Output_Dir ".\Debug"
+-# PROP Intermediate_Dir ".\Debug"
+-# PROP Ignore_Export_Lib 0
+-# PROP Target_Dir "."
+-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\xmltok" /I "..\xmlwf" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllexport) /YX /FD /c
+-# ADD BASE MTL /nologo /D "_DEBUG" /win32
+-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+-# ADD BASE RSC /l 0x809 /d "_DEBUG"
+-# ADD RSC /l 0x809 /d "_DEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20000000" /subsystem:windows /dll /debug /machine:I386 /out:"..\dbgbin\xmlparse.dll"
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 MinSize"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir "MinSize"
+-# PROP BASE Intermediate_Dir "MinSize"
+-# PROP BASE Ignore_Export_Lib 0
+-# PROP BASE Target_Dir ""
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir "MinSize"
+-# PROP Intermediate_Dir "MinSize"
+-# PROP Ignore_Export_Lib 0
+-# PROP Target_Dir ""
+-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\xmltok" /I "..\xmlwf" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllexport) /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "XML_NS" /YX /FD /c
+-# ADD CPP /nologo /W3 /GX /O1 /I "..\xmltok" /I "..\xmlwf" /D "XML_MIN_SIZE" /D "XML_WINLIB" /D XMLPARSEAPI=__declspec(dllexport) /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c
+-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20000000" /subsystem:windows /dll /machine:I386 /out:"..\bin\xmlparse.dll"
+-# SUBTRACT BASE LINK32 /profile
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x20000000" /entry:"DllMain" /subsystem:windows /dll /machine:I386 /out:"..\bin\xmlparse.dll"
+-# SUBTRACT LINK32 /profile /nodefaultlib
+-
+-!ENDIF
+-
+-# Begin Target
+-
+-# Name "xmlparse - Win32 Release"
+-# Name "xmlparse - Win32 Debug"
+-# Name "xmlparse - Win32 MinSize"
+-# Begin Group "Source Files"
+-
+-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90"
+-# Begin Source File
+-
+-SOURCE=..\xmltok\dllmain.c
+-
+-!IF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-# PROP Exclude_From_Build 1
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-# PROP Exclude_From_Build 1
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 MinSize"
+-
+-!ENDIF
+-
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\hashtable.c
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmlparse.c
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=..\xmltok\xmlrole.c
+-
+-!IF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-# PROP Exclude_From_Build 1
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-# PROP Exclude_From_Build 1
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 MinSize"
+-
+-!ENDIF
+-
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=..\xmltok\xmltok.c
+-
+-!IF "$(CFG)" == "xmlparse - Win32 Release"
+-
+-# PROP Exclude_From_Build 1
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 Debug"
+-
+-# PROP Exclude_From_Build 1
+-
+-!ELSEIF "$(CFG)" == "xmlparse - Win32 MinSize"
+-
+-!ENDIF
+-
+-# End Source File
+-# End Group
+-# Begin Group "Header Files"
+-
+-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
+-# Begin Source File
+-
+-SOURCE=.\hashtable.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmlparse.h
+-# End Source File
+-# End Group
+-# Begin Group "Resource Files"
+-
+-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+-# End Group
+-# End Target
+-# End Project
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.h dump_expat/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.h
+--- original/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlparse/xmlparse.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,482 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#ifndef XmlParse_INCLUDED
+-#define XmlParse_INCLUDED 1
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-#ifndef XMLPARSEAPI
+-#define XMLPARSEAPI /* as nothing */
+-#endif
+-
+-typedef void *XML_Parser;
+-
+-#ifdef XML_UNICODE_WCHAR_T
+-
+-/* XML_UNICODE_WCHAR_T will work only if sizeof(wchar_t) == 2 and wchar_t
+-uses Unicode. */
+-/* Information is UTF-16 encoded as wchar_ts */
+-
+-#ifndef XML_UNICODE
+-#define XML_UNICODE
+-#endif
+-
+-#include <stddef.h>
+-typedef wchar_t XML_Char;
+-typedef wchar_t XML_LChar;
+-
+-#else /* not XML_UNICODE_WCHAR_T */
+-
+-#ifdef XML_UNICODE
+-
+-/* Information is UTF-16 encoded as unsigned shorts */
+-typedef unsigned short XML_Char;
+-typedef char XML_LChar;
+-
+-#else /* not XML_UNICODE */
+-
+-/* Information is UTF-8 encoded. */
+-typedef char XML_Char;
+-typedef char XML_LChar;
+-
+-#endif /* not XML_UNICODE */
+-
+-#endif /* not XML_UNICODE_WCHAR_T */
+-
+-
+-/* Constructs a new parser; encoding is the encoding specified by the external
+-protocol or null if there is none specified. */
+-
+-XML_Parser XMLPARSEAPI
+-XML_ParserCreate(const XML_Char *encoding);
+-
+-/* Constructs a new parser and namespace processor. Element type names
+-and attribute names that belong to a namespace will be expanded;
+-unprefixed attribute names are never expanded; unprefixed element type
+-names are expanded only if there is a default namespace. The expanded
+-name is the concatenation of the namespace URI, the namespace separator character,
+-and the local part of the name. If the namespace separator is '\0' then
+-the namespace URI and the local part will be concatenated without any
+-separator. When a namespace is not declared, the name and prefix will be
+-passed through without expansion. */
+-
+-XML_Parser XMLPARSEAPI
+-XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator);
+-
+-
+-/* atts is array of name/value pairs, terminated by 0;
+- names and values are 0 terminated. */
+-
+-typedef void (*XML_StartElementHandler)(void *userData,
+- const XML_Char *name,
+- const XML_Char **atts);
+-
+-typedef void (*XML_EndElementHandler)(void *userData,
+- const XML_Char *name);
+-
+-/* s is not 0 terminated. */
+-typedef void (*XML_CharacterDataHandler)(void *userData,
+- const XML_Char *s,
+- int len);
+-
+-/* target and data are 0 terminated */
+-typedef void (*XML_ProcessingInstructionHandler)(void *userData,
+- const XML_Char *target,
+- const XML_Char *data);
+-
+-/* data is 0 terminated */
+-typedef void (*XML_CommentHandler)(void *userData, const XML_Char *data);
+-
+-typedef void (*XML_StartCdataSectionHandler)(void *userData);
+-typedef void (*XML_EndCdataSectionHandler)(void *userData);
+-
+-/* This is called for any characters in the XML document for
+-which there is no applicable handler. This includes both
+-characters that are part of markup which is of a kind that is
+-not reported (comments, markup declarations), or characters
+-that are part of a construct which could be reported but
+-for which no handler has been supplied. The characters are passed
+-exactly as they were in the XML document except that
+-they will be encoded in UTF-8. Line boundaries are not normalized.
+-Note that a byte order mark character is not passed to the default handler.
+-There are no guarantees about how characters are divided between calls
+-to the default handler: for example, a comment might be split between
+-multiple calls. */
+-
+-typedef void (*XML_DefaultHandler)(void *userData,
+- const XML_Char *s,
+- int len);
+-
+-/* This is called for a declaration of an unparsed (NDATA)
+-entity. The base argument is whatever was set by XML_SetBase.
+-The entityName, systemId and notationName arguments will never be null.
+-The other arguments may be. */
+-
+-typedef void (*XML_UnparsedEntityDeclHandler)(void *userData,
+- const XML_Char *entityName,
+- const XML_Char *base,
+- const XML_Char *systemId,
+- const XML_Char *publicId,
+- const XML_Char *notationName);
+-
+-/* This is called for a declaration of notation.
+-The base argument is whatever was set by XML_SetBase.
+-The notationName will never be null. The other arguments can be. */
+-
+-typedef void (*XML_NotationDeclHandler)(void *userData,
+- const XML_Char *notationName,
+- const XML_Char *base,
+- const XML_Char *systemId,
+- const XML_Char *publicId);
+-
+-/* When namespace processing is enabled, these are called once for
+-each namespace declaration. The call to the start and end element
+-handlers occur between the calls to the start and end namespace
+-declaration handlers. For an xmlns attribute, prefix will be null.
+-For an xmlns="" attribute, uri will be null. */
+-
+-typedef void (*XML_StartNamespaceDeclHandler)(void *userData,
+- const XML_Char *prefix,
+- const XML_Char *uri);
+-
+-typedef void (*XML_EndNamespaceDeclHandler)(void *userData,
+- const XML_Char *prefix);
+-
+-/* This is called if the document is not standalone (it has an
+-external subset or a reference to a parameter entity, but does not
+-have standalone="yes"). If this handler returns 0, then processing
+-will not continue, and the parser will return a
+-XML_ERROR_NOT_STANDALONE error. */
+-
+-typedef int (*XML_NotStandaloneHandler)(void *userData);
+-
+-/* This is called for a reference to an external parsed general entity.
+-The referenced entity is not automatically parsed.
+-The application can parse it immediately or later using
+-XML_ExternalEntityParserCreate.
+-The parser argument is the parser parsing the entity containing the reference;
+-it can be passed as the parser argument to XML_ExternalEntityParserCreate.
+-The systemId argument is the system identifier as specified in the entity declaration;
+-it will not be null.
+-The base argument is the system identifier that should be used as the base for
+-resolving systemId if systemId was relative; this is set by XML_SetBase;
+-it may be null.
+-The publicId argument is the public identifier as specified in the entity declaration,
+-or null if none was specified; the whitespace in the public identifier
+-will have been normalized as required by the XML spec.
+-The context argument specifies the parsing context in the format
+-expected by the context argument to
+-XML_ExternalEntityParserCreate; context is valid only until the handler
+-returns, so if the referenced entity is to be parsed later, it must be copied.
+-The handler should return 0 if processing should not continue because of
+-a fatal error in the handling of the external entity.
+-In this case the calling parser will return an XML_ERROR_EXTERNAL_ENTITY_HANDLING
+-error.
+-Note that unlike other handlers the first argument is the parser, not userData. */
+-
+-typedef int (*XML_ExternalEntityRefHandler)(XML_Parser parser,
+- const XML_Char *context,
+- const XML_Char *base,
+- const XML_Char *systemId,
+- const XML_Char *publicId);
+-
+-/* This structure is filled in by the XML_UnknownEncodingHandler
+-to provide information to the parser about encodings that are unknown
+-to the parser.
+-The map[b] member gives information about byte sequences
+-whose first byte is b.
+-If map[b] is c where c is >= 0, then b by itself encodes the Unicode scalar value c.
+-If map[b] is -1, then the byte sequence is malformed.
+-If map[b] is -n, where n >= 2, then b is the first byte of an n-byte
+-sequence that encodes a single Unicode scalar value.
+-The data member will be passed as the first argument to the convert function.
+-The convert function is used to convert multibyte sequences;
+-s will point to a n-byte sequence where map[(unsigned char)*s] == -n.
+-The convert function must return the Unicode scalar value
+-represented by this byte sequence or -1 if the byte sequence is malformed.
+-The convert function may be null if the encoding is a single-byte encoding,
+-that is if map[b] >= -1 for all bytes b.
+-When the parser is finished with the encoding, then if release is not null,
+-it will call release passing it the data member;
+-once release has been called, the convert function will not be called again.
+-
+-Expat places certain restrictions on the encodings that are supported
+-using this mechanism.
+-
+-1. Every ASCII character that can appear in a well-formed XML document,
+-other than the characters
+-
+- $@\^`{}~
+-
+-must be represented by a single byte, and that byte must be the
+-same byte that represents that character in ASCII.
+-
+-2. No character may require more than 4 bytes to encode.
+-
+-3. All characters encoded must have Unicode scalar values <= 0xFFFF,
+-(ie characters that would be encoded by surrogates in UTF-16
+-are not allowed). Note that this restriction doesn't apply to
+-the built-in support for UTF-8 and UTF-16.
+-
+-4. No Unicode character may be encoded by more than one distinct sequence
+-of bytes. */
+-
+-typedef struct {
+- int map[256];
+- void *data;
+- int (*convert)(void *data, const char *s);
+- void (*release)(void *data);
+-} XML_Encoding;
+-
+-/* This is called for an encoding that is unknown to the parser.
+-The encodingHandlerData argument is that which was passed as the
+-second argument to XML_SetUnknownEncodingHandler.
+-The name argument gives the name of the encoding as specified in
+-the encoding declaration.
+-If the callback can provide information about the encoding,
+-it must fill in the XML_Encoding structure, and return 1.
+-Otherwise it must return 0.
+-If info does not describe a suitable encoding,
+-then the parser will return an XML_UNKNOWN_ENCODING error. */
+-
+-typedef int (*XML_UnknownEncodingHandler)(void *encodingHandlerData,
+- const XML_Char *name,
+- XML_Encoding *info);
+-
+-void XMLPARSEAPI
+-XML_SetElementHandler(XML_Parser parser,
+- XML_StartElementHandler start,
+- XML_EndElementHandler end);
+-
+-void XMLPARSEAPI
+-XML_SetCharacterDataHandler(XML_Parser parser,
+- XML_CharacterDataHandler handler);
+-
+-void XMLPARSEAPI
+-XML_SetProcessingInstructionHandler(XML_Parser parser,
+- XML_ProcessingInstructionHandler handler);
+-void XMLPARSEAPI
+-XML_SetCommentHandler(XML_Parser parser,
+- XML_CommentHandler handler);
+-
+-void XMLPARSEAPI
+-XML_SetCdataSectionHandler(XML_Parser parser,
+- XML_StartCdataSectionHandler start,
+- XML_EndCdataSectionHandler end);
+-
+-/* This sets the default handler and also inhibits expansion of internal entities.
+-The entity reference will be passed to the default handler. */
+-
+-void XMLPARSEAPI
+-XML_SetDefaultHandler(XML_Parser parser,
+- XML_DefaultHandler handler);
+-
+-/* This sets the default handler but does not inhibit expansion of internal entities.
+-The entity reference will not be passed to the default handler. */
+-
+-void XMLPARSEAPI
+-XML_SetDefaultHandlerExpand(XML_Parser parser,
+- XML_DefaultHandler handler);
+-
+-void XMLPARSEAPI
+-XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
+- XML_UnparsedEntityDeclHandler handler);
+-
+-void XMLPARSEAPI
+-XML_SetNotationDeclHandler(XML_Parser parser,
+- XML_NotationDeclHandler handler);
+-
+-void XMLPARSEAPI
+-XML_SetNamespaceDeclHandler(XML_Parser parser,
+- XML_StartNamespaceDeclHandler start,
+- XML_EndNamespaceDeclHandler end);
+-
+-void XMLPARSEAPI
+-XML_SetNotStandaloneHandler(XML_Parser parser,
+- XML_NotStandaloneHandler handler);
+-
+-void XMLPARSEAPI
+-XML_SetExternalEntityRefHandler(XML_Parser parser,
+- XML_ExternalEntityRefHandler handler);
+-
+-/* If a non-null value for arg is specified here, then it will be passed
+-as the first argument to the external entity ref handler instead
+-of the parser object. */
+-void XMLPARSEAPI
+-XML_SetExternalEntityRefHandlerArg(XML_Parser, void *arg);
+-
+-void XMLPARSEAPI
+-XML_SetUnknownEncodingHandler(XML_Parser parser,
+- XML_UnknownEncodingHandler handler,
+- void *encodingHandlerData);
+-
+-/* This can be called within a handler for a start element, end element,
+-processing instruction or character data. It causes the corresponding
+-markup to be passed to the default handler. */
+-void XMLPARSEAPI XML_DefaultCurrent(XML_Parser parser);
+-
+-/* This value is passed as the userData argument to callbacks. */
+-void XMLPARSEAPI
+-XML_SetUserData(XML_Parser parser, void *userData);
+-
+-/* Returns the last value set by XML_SetUserData or null. */
+-#define XML_GetUserData(parser) (*(void **)(parser))
+-
+-/* This is equivalent to supplying an encoding argument
+-to XML_CreateParser. It must not be called after XML_Parse
+-or XML_ParseBuffer. */
+-
+-int XMLPARSEAPI
+-XML_SetEncoding(XML_Parser parser, const XML_Char *encoding);
+-
+-/* If this function is called, then the parser will be passed
+-as the first argument to callbacks instead of userData.
+-The userData will still be accessible using XML_GetUserData. */
+-
+-void XMLPARSEAPI
+-XML_UseParserAsHandlerArg(XML_Parser parser);
+-
+-/* Sets the base to be used for resolving relative URIs in system identifiers in
+-declarations. Resolving relative identifiers is left to the application:
+-this value will be passed through as the base argument to the
+-XML_ExternalEntityRefHandler, XML_NotationDeclHandler
+-and XML_UnparsedEntityDeclHandler. The base argument will be copied.
+-Returns zero if out of memory, non-zero otherwise. */
+-
+-int XMLPARSEAPI
+-XML_SetBase(XML_Parser parser, const XML_Char *base);
+-
+-const XML_Char XMLPARSEAPI *
+-XML_GetBase(XML_Parser parser);
+-
+-/* Returns the number of the attributes passed in last call to the
+-XML_StartElementHandler that were specified in the start-tag rather
+-than defaulted. */
+-
+-int XMLPARSEAPI XML_GetSpecifiedAttributeCount(XML_Parser parser);
+-
+-/* Parses some input. Returns 0 if a fatal error is detected.
+-The last call to XML_Parse must have isFinal true;
+-len may be zero for this call (or any other). */
+-int XMLPARSEAPI
+-XML_Parse(XML_Parser parser, const char *s, int len, int isFinal);
+-
+-void XMLPARSEAPI *
+-XML_GetBuffer(XML_Parser parser, int len);
+-
+-int XMLPARSEAPI
+-XML_ParseBuffer(XML_Parser parser, int len, int isFinal);
+-
+-/* Creates an XML_Parser object that can parse an external general entity;
+-context is a '\0'-terminated string specifying the parse context;
+-encoding is a '\0'-terminated string giving the name of the externally specified encoding,
+-or null if there is no externally specified encoding.
+-The context string consists of a sequence of tokens separated by formfeeds (\f);
+-a token consisting of a name specifies that the general entity of the name
+-is open; a token of the form prefix=uri specifies the namespace for a particular
+-prefix; a token of the form =uri specifies the default namespace.
+-This can be called at any point after the first call to an ExternalEntityRefHandler
+-so longer as the parser has not yet been freed.
+-The new parser is completely independent and may safely be used in a separate thread.
+-The handlers and userData are initialized from the parser argument.
+-Returns 0 if out of memory. Otherwise returns a new XML_Parser object. */
+-XML_Parser XMLPARSEAPI
+-XML_ExternalEntityParserCreate(XML_Parser parser,
+- const XML_Char *context,
+- const XML_Char *encoding);
+-
+-enum XML_Error {
+- XML_ERROR_NONE,
+- XML_ERROR_NO_MEMORY,
+- XML_ERROR_SYNTAX,
+- XML_ERROR_NO_ELEMENTS,
+- XML_ERROR_INVALID_TOKEN,
+- XML_ERROR_UNCLOSED_TOKEN,
+- XML_ERROR_PARTIAL_CHAR,
+- XML_ERROR_TAG_MISMATCH,
+- XML_ERROR_DUPLICATE_ATTRIBUTE,
+- XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
+- XML_ERROR_PARAM_ENTITY_REF,
+- XML_ERROR_UNDEFINED_ENTITY,
+- XML_ERROR_RECURSIVE_ENTITY_REF,
+- XML_ERROR_ASYNC_ENTITY,
+- XML_ERROR_BAD_CHAR_REF,
+- XML_ERROR_BINARY_ENTITY_REF,
+- XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
+- XML_ERROR_MISPLACED_XML_PI,
+- XML_ERROR_UNKNOWN_ENCODING,
+- XML_ERROR_INCORRECT_ENCODING,
+- XML_ERROR_UNCLOSED_CDATA_SECTION,
+- XML_ERROR_EXTERNAL_ENTITY_HANDLING,
+- XML_ERROR_NOT_STANDALONE
+-};
+-
+-/* If XML_Parse or XML_ParseBuffer have returned 0, then XML_GetErrorCode
+-returns information about the error. */
+-
+-enum XML_Error XMLPARSEAPI XML_GetErrorCode(XML_Parser parser);
+-
+-/* These functions return information about the current parse location.
+-They may be called when XML_Parse or XML_ParseBuffer return 0;
+-in this case the location is the location of the character at which
+-the error was detected.
+-They may also be called from any other callback called to report
+-some parse event; in this the location is the location of the first
+-of the sequence of characters that generated the event. */
+-
+-int XMLPARSEAPI XML_GetCurrentLineNumber(XML_Parser parser);
+-int XMLPARSEAPI XML_GetCurrentColumnNumber(XML_Parser parser);
+-long XMLPARSEAPI XML_GetCurrentByteIndex(XML_Parser parser);
+-
+-/* Return the number of bytes in the current event.
+-Returns 0 if the event is in an internal entity. */
+-
+-int XMLPARSEAPI XML_GetCurrentByteCount(XML_Parser parser);
+-
+-/* For backwards compatibility with previous versions. */
+-#define XML_GetErrorLineNumber XML_GetCurrentLineNumber
+-#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber
+-#define XML_GetErrorByteIndex XML_GetCurrentByteIndex
+-
+-/* Frees memory used by the parser. */
+-void XMLPARSEAPI
+-XML_ParserFree(XML_Parser parser);
+-
+-/* Returns a string describing the error. */
+-const XML_LChar XMLPARSEAPI *XML_ErrorString(int code);
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif /* not XmlParse_INCLUDED */
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/.cvsignore dump_expat/xmlrpc-epi-0.51/expat/xmltok/.cvsignore
+--- original/xmlrpc-epi-0.51/expat/xmltok/.cvsignore 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/.cvsignore 1969-12-31 18:00:00.000000000 -0600
+@@ -1,6 +0,0 @@
+-Makefile
+-.deps
+-xmltok.lo
+-xmlrole.lo
+-.libs
+-libexpat_tok.la
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/Makefile.am dump_expat/xmlrpc-epi-0.51/expat/xmltok/Makefile.am
+--- original/xmlrpc-epi-0.51/expat/xmltok/Makefile.am 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/Makefile.am 1969-12-31 18:00:00.000000000 -0600
+@@ -1,3 +0,0 @@
+-noinst_LTLIBRARIES = libexpat_tok.la
+-libexpat_tok_la_SOURCES = xmltok.c xmlrole.c
+-
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/Makefile.in dump_expat/xmlrpc-epi-0.51/expat/xmltok/Makefile.in
+--- original/xmlrpc-epi-0.51/expat/xmltok/Makefile.in 2002-06-23 18:48:29.000000000 -0500
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/Makefile.in 1969-12-31 18:00:00.000000000 -0600
+@@ -1,331 +0,0 @@
+-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+-
+-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+-# This Makefile.in is free software; the Free Software Foundation
+-# gives unlimited permission to copy and/or distribute it,
+-# with or without modifications, as long as this notice is preserved.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+-# PARTICULAR PURPOSE.
+-
+-
+-SHELL = @SHELL@
+-
+-srcdir = @srcdir@
+-top_srcdir = @top_srcdir@
+-VPATH = @srcdir@
+-prefix = @prefix@
+-exec_prefix = @exec_prefix@
+-
+-bindir = @bindir@
+-sbindir = @sbindir@
+-libexecdir = @libexecdir@
+-datadir = @datadir@
+-sysconfdir = @sysconfdir@
+-sharedstatedir = @sharedstatedir@
+-localstatedir = @localstatedir@
+-libdir = @libdir@
+-infodir = @infodir@
+-mandir = @mandir@
+-includedir = @includedir@
+-oldincludedir = /usr/include
+-
+-DESTDIR =
+-
+-pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+-pkgincludedir = $(includedir)/@PACKAGE@
+-
+-top_builddir = ../..
+-
+-ACLOCAL = @ACLOCAL@
+-AUTOCONF = @AUTOCONF@
+-AUTOMAKE = @AUTOMAKE@
+-AUTOHEADER = @AUTOHEADER@
+-
+-INSTALL = @INSTALL@
+-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+-INSTALL_DATA = @INSTALL_DATA@
+-INSTALL_SCRIPT = @INSTALL_SCRIPT@
+-transform = @program_transform_name@
+-
+-NORMAL_INSTALL = :
+-PRE_INSTALL = :
+-POST_INSTALL = :
+-NORMAL_UNINSTALL = :
+-PRE_UNINSTALL = :
+-POST_UNINSTALL = :
+-host_alias = @host_alias@
+-host_triplet = @host@
+-AS = @AS@
+-AWK = @AWK@
+-CC = @CC@
+-CPP = @CPP@
+-CXX = @CXX@
+-DLLTOOL = @DLLTOOL@
+-ECHO = @ECHO@
+-EXEEXT = @EXEEXT@
+-LIBTOOL = @LIBTOOL@
+-LN_S = @LN_S@
+-MAKEINFO = @MAKEINFO@
+-OBJDUMP = @OBJDUMP@
+-OBJEXT = @OBJEXT@
+-PACKAGE = @PACKAGE@
+-RANLIB = @RANLIB@
+-STRIP = @STRIP@
+-VERSION = @VERSION@
+-
+-noinst_LTLIBRARIES = libexpat_tok.la
+-libexpat_tok_la_SOURCES = xmltok.c xmlrole.c
+-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+-CONFIG_CLEAN_FILES =
+-LTLIBRARIES = $(noinst_LTLIBRARIES)
+-
+-
+-DEFS = @DEFS@ -I. -I$(srcdir)
+-CPPFLAGS = @CPPFLAGS@
+-LDFLAGS = @LDFLAGS@
+-LIBS = @LIBS@
+-libexpat_tok_la_LDFLAGS =
+-libexpat_tok_la_LIBADD =
+-libexpat_tok_la_OBJECTS = xmltok.lo xmlrole.lo
+-CFLAGS = @CFLAGS@
+-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-CCLD = $(CC)
+-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+-DIST_COMMON = Makefile.am Makefile.in
+-
+-
+-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+-
+-TAR = gtar
+-GZIP_ENV = --best
+-DEP_FILES = .deps/xmlrole.P .deps/xmltok.P
+-SOURCES = $(libexpat_tok_la_SOURCES)
+-OBJECTS = $(libexpat_tok_la_OBJECTS)
+-
+-all: all-redirect
+-.SUFFIXES:
+-.SUFFIXES: .S .c .lo .o .obj .s
+-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+- cd $(top_srcdir) && $(AUTOMAKE) --gnu expat/xmltok/Makefile
+-
+-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+- cd $(top_builddir) \
+- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+-
+-
+-mostlyclean-noinstLTLIBRARIES:
+-
+-clean-noinstLTLIBRARIES:
+- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+-
+-distclean-noinstLTLIBRARIES:
+-
+-maintainer-clean-noinstLTLIBRARIES:
+-
+-# FIXME: We should only use cygpath when building on Windows,
+-# and only if it is available.
+-.c.obj:
+- $(COMPILE) -c `cygpath -w $<`
+-
+-.s.o:
+- $(COMPILE) -c $<
+-
+-.S.o:
+- $(COMPILE) -c $<
+-
+-mostlyclean-compile:
+- -rm -f *.o core *.core
+- -rm -f *.$(OBJEXT)
+-
+-clean-compile:
+-
+-distclean-compile:
+- -rm -f *.tab.c
+-
+-maintainer-clean-compile:
+-
+-.s.lo:
+- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+-
+-.S.lo:
+- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+-
+-mostlyclean-libtool:
+- -rm -f *.lo
+-
+-clean-libtool:
+- -rm -rf .libs _libs
+-
+-distclean-libtool:
+-
+-maintainer-clean-libtool:
+-
+-libexpat_tok.la: $(libexpat_tok_la_OBJECTS) $(libexpat_tok_la_DEPENDENCIES)
+- $(LINK) $(libexpat_tok_la_LDFLAGS) $(libexpat_tok_la_OBJECTS) $(libexpat_tok_la_LIBADD) $(LIBS)
+-
+-tags: TAGS
+-
+-ID: $(HEADERS) $(SOURCES) $(LISP)
+- list='$(SOURCES) $(HEADERS)'; \
+- unique=`for i in $$list; do echo $$i; done | \
+- awk ' { files[$$0] = 1; } \
+- END { for (i in files) print i; }'`; \
+- here=`pwd` && cd $(srcdir) \
+- && mkid -f$$here/ID $$unique $(LISP)
+-
+-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+- tags=; \
+- here=`pwd`; \
+- list='$(SOURCES) $(HEADERS)'; \
+- unique=`for i in $$list; do echo $$i; done | \
+- awk ' { files[$$0] = 1; } \
+- END { for (i in files) print i; }'`; \
+- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+-
+-mostlyclean-tags:
+-
+-clean-tags:
+-
+-distclean-tags:
+- -rm -f TAGS ID
+-
+-maintainer-clean-tags:
+-
+-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+-
+-subdir = expat/xmltok
+-
+-distdir: $(DISTFILES)
+- here=`cd $(top_builddir) && pwd`; \
+- top_distdir=`cd $(top_distdir) && pwd`; \
+- distdir=`cd $(distdir) && pwd`; \
+- cd $(top_srcdir) \
+- && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu expat/xmltok/Makefile
+- @for file in $(DISTFILES); do \
+- d=$(srcdir); \
+- if test -d $$d/$$file; then \
+- cp -pr $$d/$$file $(distdir)/$$file; \
+- else \
+- test -f $(distdir)/$$file \
+- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+- || cp -p $$d/$$file $(distdir)/$$file || :; \
+- fi; \
+- done
+-
+-DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+-
+--include $(DEP_FILES)
+-
+-mostlyclean-depend:
+-
+-clean-depend:
+-
+-distclean-depend:
+- -rm -rf .deps
+-
+-maintainer-clean-depend:
+-
+-%.o: %.c
+- @echo '$(COMPILE) -c $<'; \
+- $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+- @-cp .deps/$(*F).pp .deps/$(*F).P; \
+- tr ' ' '\012' < .deps/$(*F).pp \
+- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+- >> .deps/$(*F).P; \
+- rm .deps/$(*F).pp
+-
+-%.lo: %.c
+- @echo '$(LTCOMPILE) -c $<'; \
+- $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+- @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
+- < .deps/$(*F).pp > .deps/$(*F).P; \
+- tr ' ' '\012' < .deps/$(*F).pp \
+- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+- >> .deps/$(*F).P; \
+- rm -f .deps/$(*F).pp
+-info-am:
+-info: info-am
+-dvi-am:
+-dvi: dvi-am
+-check-am: all-am
+-check: check-am
+-installcheck-am:
+-installcheck: installcheck-am
+-install-exec-am:
+-install-exec: install-exec-am
+-
+-install-data-am:
+-install-data: install-data-am
+-
+-install-am: all-am
+- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+-install: install-am
+-uninstall-am:
+-uninstall: uninstall-am
+-all-am: Makefile $(LTLIBRARIES)
+-all-redirect: all-am
+-install-strip:
+- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+-installdirs:
+-
+-
+-mostlyclean-generic:
+-
+-clean-generic:
+-
+-distclean-generic:
+- -rm -f Makefile $(CONFIG_CLEAN_FILES)
+- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+-
+-maintainer-clean-generic:
+-mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
+- mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
+- mostlyclean-generic
+-
+-mostlyclean: mostlyclean-am
+-
+-clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \
+- clean-tags clean-depend clean-generic mostlyclean-am
+-
+-clean: clean-am
+-
+-distclean-am: distclean-noinstLTLIBRARIES distclean-compile \
+- distclean-libtool distclean-tags distclean-depend \
+- distclean-generic clean-am
+- -rm -f libtool
+-
+-distclean: distclean-am
+-
+-maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \
+- maintainer-clean-compile maintainer-clean-libtool \
+- maintainer-clean-tags maintainer-clean-depend \
+- maintainer-clean-generic distclean-am
+- @echo "This command is intended for maintainers to use;"
+- @echo "it deletes files that may require special tools to rebuild."
+-
+-maintainer-clean: maintainer-clean-am
+-
+-.PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
+-clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \
+-mostlyclean-compile distclean-compile clean-compile \
+-maintainer-clean-compile mostlyclean-libtool distclean-libtool \
+-clean-libtool maintainer-clean-libtool tags mostlyclean-tags \
+-distclean-tags clean-tags maintainer-clean-tags distdir \
+-mostlyclean-depend distclean-depend clean-depend \
+-maintainer-clean-depend info-am info dvi-am dvi check check-am \
+-installcheck-am installcheck install-exec-am install-exec \
+-install-data-am install-data install-am install uninstall-am uninstall \
+-all-redirect all-am all installdirs mostlyclean-generic \
+-distclean-generic clean-generic maintainer-clean-generic clean \
+-mostlyclean distclean maintainer-clean
+-
+-
+-# Tell versions [3.59,3.63) of GNU make to not export all variables.
+-# Otherwise a system limit (for SysV at least) may be exceeded.
+-.NOEXPORT:
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/asciitab.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/asciitab.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/asciitab.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/asciitab.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,62 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML,
+-/* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML,
+-/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM,
+-/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS,
+-/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS,
+-/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL,
+-/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
+-/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
+-/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI,
+-/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST,
+-/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
+-/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
+-/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB,
+-/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT,
+-/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
+-/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
+-/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
+-/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER,
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/dllmain.c dump_expat/xmlrpc-epi-0.51/expat/xmltok/dllmain.c
+--- original/xmlrpc-epi-0.51/expat/xmltok/dllmain.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/dllmain.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,40 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#define STRICT 1
+-#define WIN32_LEAN_AND_MEAN 1
+-
+-#include <windows.h>
+-
+-BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
+-{
+- return TRUE;
+-}
+-
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/iasciitab.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/iasciitab.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/iasciitab.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/iasciitab.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,63 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */
+-/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML,
+-/* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML,
+-/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM,
+-/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS,
+-/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS,
+-/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL,
+-/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
+-/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT,
+-/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI,
+-/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST,
+-/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
+-/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
+-/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB,
+-/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT,
+-/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX,
+-/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT,
+-/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
+-/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER,
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/latin1tab.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/latin1tab.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/latin1tab.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/latin1tab.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,62 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-/* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER,
+-/* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME,
+-/* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER,
+-/* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER,
+-/* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
+-/* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER,
+-/* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+-/* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT,
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/nametab.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/nametab.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/nametab.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/nametab.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,150 +0,0 @@
+-static const unsigned namingBitmap[] = {
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+-0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE,
+-0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF,
+-0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF,
+-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF,
+-0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF,
+-0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000,
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD,
+-0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF,
+-0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF,
+-0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE,
+-0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF,
+-0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000,
+-0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060,
+-0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003,
+-0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003,
+-0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000,
+-0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001,
+-0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003,
+-0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000,
+-0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003,
+-0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003,
+-0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003,
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000,
+-0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000,
+-0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF,
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF,
+-0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB,
+-0x40000000, 0xF580C900, 0x00000007, 0x02010800,
+-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+-0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF,
+-0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF,
+-0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF,
+-0x00000000, 0x00004C40, 0x00000000, 0x00000000,
+-0x00000007, 0x00000000, 0x00000000, 0x00000000,
+-0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF,
+-0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF,
+-0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000,
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+-0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000,
+-0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+-0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000,
+-0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE,
+-0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF,
+-0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF,
+-0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000,
+-0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003,
+-0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD,
+-0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF,
+-0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF,
+-0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE,
+-0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF,
+-0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF,
+-0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF,
+-0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF,
+-0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF,
+-0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0,
+-0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1,
+-0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3,
+-0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80,
+-0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3,
+-0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3,
+-0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3,
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000,
+-0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000,
+-0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF,
+-0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000,
+-0x00000000, 0x00000000, 0x00000000, 0x00000000,
+-0x00000000, 0x00000000, 0x1FFF0000, 0x00000002,
+-0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF,
+-0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF,
+-};
+-static const unsigned char nmstrtPages[] = {
+-0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00,
+-0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+-0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
+-0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-};
+-static const unsigned char namePages[] = {
+-0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00,
+-0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
+-0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
+-0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+-0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-};
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/utf8tab.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/utf8tab.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/utf8tab.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/utf8tab.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,63 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-
+-/* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL,
+-/* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
+-/* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
+-/* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
+-/* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
+-/* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
+-/* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
+-/* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
+-/* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2,
+-/* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
+-/* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
+-/* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
+-/* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3,
+-/* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4,
+-/* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML,
+-/* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM,
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmldef.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmldef.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmldef.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmldef.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,63 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include <string.h>
+-
+-#ifdef XML_WINLIB
+-
+-#define WIN32_LEAN_AND_MEAN
+-#define STRICT
+-#include <windows.h>
+-
+-#define malloc(x) HeapAlloc(GetProcessHeap(), 0, (x))
+-#define calloc(x, y) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (x)*(y))
+-#define free(x) HeapFree(GetProcessHeap(), 0, (x))
+-#define realloc(x, y) HeapReAlloc(GetProcessHeap(), 0, x, y)
+-#define abort() /* as nothing */
+-
+-#else /* not XML_WINLIB */
+-
+-#include <stdlib.h>
+-
+-#endif /* not XML_WINLIB */
+-
+-/* This file can be used for any definitions needed in
+-particular environments. */
+-
+-#ifdef MOZILLA
+-
+-#include "nspr.h"
+-#define malloc(x) PR_Malloc(x)
+-#define realloc(x, y) PR_Realloc((x), (y))
+-#define calloc(x, y) PR_Calloc((x),(y))
+-#define free(x) PR_Free(x)
+-#define int int32
+-
+-#endif /* MOZILLA */
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmlrole.c dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmlrole.c
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmlrole.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmlrole.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,1113 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include "xmldef.h"
+-#include "xmlrole.h"
+-
+-/* Doesn't check:
+-
+- that ,| are not mixed in a model group
+- content of literals
+-
+-*/
+-
+-#ifndef MIN_BYTES_PER_CHAR
+-#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar)
+-#endif
+-
+-typedef int PROLOG_HANDLER(struct prolog_state *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc);
+-
+-static PROLOG_HANDLER
+- prolog0, prolog1, prolog2,
+- doctype0, doctype1, doctype2, doctype3, doctype4, doctype5,
+- internalSubset,
+- entity0, entity1, entity2, entity3, entity4, entity5, entity6,
+- entity7, entity8, entity9,
+- notation0, notation1, notation2, notation3, notation4,
+- attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6,
+- attlist7, attlist8, attlist9,
+- element0, element1, element2, element3, element4, element5, element6,
+- element7,
+- declClose,
+- error;
+-
+-static
+-int syntaxError(PROLOG_STATE *);
+-
+-static
+-int prolog0(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- state->handler = prolog1;
+- return XML_ROLE_NONE;
+- case XML_TOK_XML_DECL:
+- state->handler = prolog1;
+- return XML_ROLE_XML_DECL;
+- case XML_TOK_PI:
+- state->handler = prolog1;
+- return XML_ROLE_NONE;
+- case XML_TOK_COMMENT:
+- state->handler = prolog1;
+- case XML_TOK_BOM:
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_OPEN:
+- if (!XmlNameMatchesAscii(enc,
+- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
+- "DOCTYPE"))
+- break;
+- state->handler = doctype0;
+- return XML_ROLE_NONE;
+- case XML_TOK_INSTANCE_START:
+- state->handler = error;
+- return XML_ROLE_INSTANCE_START;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int prolog1(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_PI:
+- case XML_TOK_COMMENT:
+- case XML_TOK_BOM:
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_OPEN:
+- if (!XmlNameMatchesAscii(enc,
+- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
+- "DOCTYPE"))
+- break;
+- state->handler = doctype0;
+- return XML_ROLE_NONE;
+- case XML_TOK_INSTANCE_START:
+- state->handler = error;
+- return XML_ROLE_INSTANCE_START;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int prolog2(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_PI:
+- case XML_TOK_COMMENT:
+- return XML_ROLE_NONE;
+- case XML_TOK_INSTANCE_START:
+- state->handler = error;
+- return XML_ROLE_INSTANCE_START;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int doctype0(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- case XML_TOK_PREFIXED_NAME:
+- state->handler = doctype1;
+- return XML_ROLE_DOCTYPE_NAME;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int doctype1(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_OPEN_BRACKET:
+- state->handler = internalSubset;
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_CLOSE:
+- state->handler = prolog2;
+- return XML_ROLE_DOCTYPE_CLOSE;
+- case XML_TOK_NAME:
+- if (XmlNameMatchesAscii(enc, ptr, "SYSTEM")) {
+- state->handler = doctype3;
+- return XML_ROLE_NONE;
+- }
+- if (XmlNameMatchesAscii(enc, ptr, "PUBLIC")) {
+- state->handler = doctype2;
+- return XML_ROLE_NONE;
+- }
+- break;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int doctype2(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = doctype3;
+- return XML_ROLE_DOCTYPE_PUBLIC_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int doctype3(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = doctype4;
+- return XML_ROLE_DOCTYPE_SYSTEM_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int doctype4(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_OPEN_BRACKET:
+- state->handler = internalSubset;
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_CLOSE:
+- state->handler = prolog2;
+- return XML_ROLE_DOCTYPE_CLOSE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int doctype5(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_CLOSE:
+- state->handler = prolog2;
+- return XML_ROLE_DOCTYPE_CLOSE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int internalSubset(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_OPEN:
+- if (XmlNameMatchesAscii(enc,
+- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
+- "ENTITY")) {
+- state->handler = entity0;
+- return XML_ROLE_NONE;
+- }
+- if (XmlNameMatchesAscii(enc,
+- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
+- "ATTLIST")) {
+- state->handler = attlist0;
+- return XML_ROLE_NONE;
+- }
+- if (XmlNameMatchesAscii(enc,
+- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
+- "ELEMENT")) {
+- state->handler = element0;
+- return XML_ROLE_NONE;
+- }
+- if (XmlNameMatchesAscii(enc,
+- ptr + 2 * MIN_BYTES_PER_CHAR(enc),
+- "NOTATION")) {
+- state->handler = notation0;
+- return XML_ROLE_NONE;
+- }
+- break;
+- case XML_TOK_PI:
+- case XML_TOK_COMMENT:
+- return XML_ROLE_NONE;
+- case XML_TOK_PARAM_ENTITY_REF:
+- return XML_ROLE_PARAM_ENTITY_REF;
+- case XML_TOK_CLOSE_BRACKET:
+- state->handler = doctype5;
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity0(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_PERCENT:
+- state->handler = entity1;
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- state->handler = entity2;
+- return XML_ROLE_GENERAL_ENTITY_NAME;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity1(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- state->handler = entity7;
+- return XML_ROLE_PARAM_ENTITY_NAME;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity2(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- if (XmlNameMatchesAscii(enc, ptr, "SYSTEM")) {
+- state->handler = entity4;
+- return XML_ROLE_NONE;
+- }
+- if (XmlNameMatchesAscii(enc, ptr, "PUBLIC")) {
+- state->handler = entity3;
+- return XML_ROLE_NONE;
+- }
+- break;
+- case XML_TOK_LITERAL:
+- state->handler = declClose;
+- return XML_ROLE_ENTITY_VALUE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity3(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = entity4;
+- return XML_ROLE_ENTITY_PUBLIC_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-
+-static
+-int entity4(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = entity5;
+- return XML_ROLE_ENTITY_SYSTEM_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity5(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_CLOSE:
+- state->handler = internalSubset;
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- if (XmlNameMatchesAscii(enc, ptr, "NDATA")) {
+- state->handler = entity6;
+- return XML_ROLE_NONE;
+- }
+- break;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity6(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- state->handler = declClose;
+- return XML_ROLE_ENTITY_NOTATION_NAME;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity7(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- if (XmlNameMatchesAscii(enc, ptr, "SYSTEM")) {
+- state->handler = entity9;
+- return XML_ROLE_NONE;
+- }
+- if (XmlNameMatchesAscii(enc, ptr, "PUBLIC")) {
+- state->handler = entity8;
+- return XML_ROLE_NONE;
+- }
+- break;
+- case XML_TOK_LITERAL:
+- state->handler = declClose;
+- return XML_ROLE_ENTITY_VALUE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity8(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = entity9;
+- return XML_ROLE_ENTITY_PUBLIC_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int entity9(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = declClose;
+- return XML_ROLE_ENTITY_SYSTEM_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int notation0(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- state->handler = notation1;
+- return XML_ROLE_NOTATION_NAME;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int notation1(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- if (XmlNameMatchesAscii(enc, ptr, "SYSTEM")) {
+- state->handler = notation3;
+- return XML_ROLE_NONE;
+- }
+- if (XmlNameMatchesAscii(enc, ptr, "PUBLIC")) {
+- state->handler = notation2;
+- return XML_ROLE_NONE;
+- }
+- break;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int notation2(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = notation4;
+- return XML_ROLE_NOTATION_PUBLIC_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int notation3(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = declClose;
+- return XML_ROLE_NOTATION_SYSTEM_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int notation4(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = declClose;
+- return XML_ROLE_NOTATION_SYSTEM_ID;
+- case XML_TOK_DECL_CLOSE:
+- state->handler = internalSubset;
+- return XML_ROLE_NOTATION_NO_SYSTEM_ID;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int attlist0(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- case XML_TOK_PREFIXED_NAME:
+- state->handler = attlist1;
+- return XML_ROLE_ATTLIST_ELEMENT_NAME;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int attlist1(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_CLOSE:
+- state->handler = internalSubset;
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- case XML_TOK_PREFIXED_NAME:
+- state->handler = attlist2;
+- return XML_ROLE_ATTRIBUTE_NAME;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int attlist2(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- {
+- static const char *types[] = {
+- "CDATA",
+- "ID",
+- "IDREF",
+- "IDREFS",
+- "ENTITY",
+- "ENTITIES",
+- "NMTOKEN",
+- "NMTOKENS",
+- };
+- int i;
+- for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++)
+- if (XmlNameMatchesAscii(enc, ptr, types[i])) {
+- state->handler = attlist8;
+- return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i;
+- }
+- }
+- if (XmlNameMatchesAscii(enc, ptr, "NOTATION")) {
+- state->handler = attlist5;
+- return XML_ROLE_NONE;
+- }
+- break;
+- case XML_TOK_OPEN_PAREN:
+- state->handler = attlist3;
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int attlist3(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NMTOKEN:
+- case XML_TOK_NAME:
+- case XML_TOK_PREFIXED_NAME:
+- state->handler = attlist4;
+- return XML_ROLE_ATTRIBUTE_ENUM_VALUE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int attlist4(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_CLOSE_PAREN:
+- state->handler = attlist8;
+- return XML_ROLE_NONE;
+- case XML_TOK_OR:
+- state->handler = attlist3;
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int attlist5(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_OPEN_PAREN:
+- state->handler = attlist6;
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-
+-
+-static
+-int attlist6(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- state->handler = attlist7;
+- return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int attlist7(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_CLOSE_PAREN:
+- state->handler = attlist8;
+- return XML_ROLE_NONE;
+- case XML_TOK_OR:
+- state->handler = attlist6;
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-
+-/* default value */
+-static
+-int attlist8(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_POUND_NAME:
+- if (XmlNameMatchesAscii(enc,
+- ptr + MIN_BYTES_PER_CHAR(enc),
+- "IMPLIED")) {
+- state->handler = attlist1;
+- return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;
+- }
+- if (XmlNameMatchesAscii(enc,
+- ptr + MIN_BYTES_PER_CHAR(enc),
+- "REQUIRED")) {
+- state->handler = attlist1;
+- return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE;
+- }
+- if (XmlNameMatchesAscii(enc,
+- ptr + MIN_BYTES_PER_CHAR(enc),
+- "FIXED")) {
+- state->handler = attlist9;
+- return XML_ROLE_NONE;
+- }
+- break;
+- case XML_TOK_LITERAL:
+- state->handler = attlist1;
+- return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int attlist9(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_LITERAL:
+- state->handler = attlist1;
+- return XML_ROLE_FIXED_ATTRIBUTE_VALUE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int element0(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- case XML_TOK_PREFIXED_NAME:
+- state->handler = element1;
+- return XML_ROLE_ELEMENT_NAME;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int element1(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- if (XmlNameMatchesAscii(enc, ptr, "EMPTY")) {
+- state->handler = declClose;
+- return XML_ROLE_CONTENT_EMPTY;
+- }
+- if (XmlNameMatchesAscii(enc, ptr, "ANY")) {
+- state->handler = declClose;
+- return XML_ROLE_CONTENT_ANY;
+- }
+- break;
+- case XML_TOK_OPEN_PAREN:
+- state->handler = element2;
+- state->level = 1;
+- return XML_ROLE_GROUP_OPEN;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int element2(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_POUND_NAME:
+- if (XmlNameMatchesAscii(enc,
+- ptr + MIN_BYTES_PER_CHAR(enc),
+- "PCDATA")) {
+- state->handler = element3;
+- return XML_ROLE_CONTENT_PCDATA;
+- }
+- break;
+- case XML_TOK_OPEN_PAREN:
+- state->level = 2;
+- state->handler = element6;
+- return XML_ROLE_GROUP_OPEN;
+- case XML_TOK_NAME:
+- case XML_TOK_PREFIXED_NAME:
+- state->handler = element7;
+- return XML_ROLE_CONTENT_ELEMENT;
+- case XML_TOK_NAME_QUESTION:
+- state->handler = element7;
+- return XML_ROLE_CONTENT_ELEMENT_OPT;
+- case XML_TOK_NAME_ASTERISK:
+- state->handler = element7;
+- return XML_ROLE_CONTENT_ELEMENT_REP;
+- case XML_TOK_NAME_PLUS:
+- state->handler = element7;
+- return XML_ROLE_CONTENT_ELEMENT_PLUS;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int element3(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_CLOSE_PAREN:
+- case XML_TOK_CLOSE_PAREN_ASTERISK:
+- state->handler = declClose;
+- return XML_ROLE_GROUP_CLOSE_REP;
+- case XML_TOK_OR:
+- state->handler = element4;
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int element4(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_NAME:
+- case XML_TOK_PREFIXED_NAME:
+- state->handler = element5;
+- return XML_ROLE_CONTENT_ELEMENT;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int element5(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_CLOSE_PAREN_ASTERISK:
+- state->handler = declClose;
+- return XML_ROLE_GROUP_CLOSE_REP;
+- case XML_TOK_OR:
+- state->handler = element4;
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int element6(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_OPEN_PAREN:
+- state->level += 1;
+- return XML_ROLE_GROUP_OPEN;
+- case XML_TOK_NAME:
+- case XML_TOK_PREFIXED_NAME:
+- state->handler = element7;
+- return XML_ROLE_CONTENT_ELEMENT;
+- case XML_TOK_NAME_QUESTION:
+- state->handler = element7;
+- return XML_ROLE_CONTENT_ELEMENT_OPT;
+- case XML_TOK_NAME_ASTERISK:
+- state->handler = element7;
+- return XML_ROLE_CONTENT_ELEMENT_REP;
+- case XML_TOK_NAME_PLUS:
+- state->handler = element7;
+- return XML_ROLE_CONTENT_ELEMENT_PLUS;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int element7(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_CLOSE_PAREN:
+- state->level -= 1;
+- if (state->level == 0)
+- state->handler = declClose;
+- return XML_ROLE_GROUP_CLOSE;
+- case XML_TOK_CLOSE_PAREN_ASTERISK:
+- state->level -= 1;
+- if (state->level == 0)
+- state->handler = declClose;
+- return XML_ROLE_GROUP_CLOSE_REP;
+- case XML_TOK_CLOSE_PAREN_QUESTION:
+- state->level -= 1;
+- if (state->level == 0)
+- state->handler = declClose;
+- return XML_ROLE_GROUP_CLOSE_OPT;
+- case XML_TOK_CLOSE_PAREN_PLUS:
+- state->level -= 1;
+- if (state->level == 0)
+- state->handler = declClose;
+- return XML_ROLE_GROUP_CLOSE_PLUS;
+- case XML_TOK_COMMA:
+- state->handler = element6;
+- return XML_ROLE_GROUP_SEQUENCE;
+- case XML_TOK_OR:
+- state->handler = element6;
+- return XML_ROLE_GROUP_CHOICE;
+- }
+- return syntaxError(state);
+-}
+-
+-static
+-int declClose(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_PROLOG_S:
+- return XML_ROLE_NONE;
+- case XML_TOK_DECL_CLOSE:
+- state->handler = internalSubset;
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-
+-#if 0
+-
+-static
+-int ignore(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- switch (tok) {
+- case XML_TOK_DECL_CLOSE:
+- state->handler = internalSubset;
+- return 0;
+- default:
+- return XML_ROLE_NONE;
+- }
+- return syntaxError(state);
+-}
+-#endif
+-
+-static
+-int error(PROLOG_STATE *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc)
+-{
+- return XML_ROLE_NONE;
+-}
+-
+-static
+-int syntaxError(PROLOG_STATE *state)
+-{
+- state->handler = error;
+- return XML_ROLE_ERROR;
+-}
+-
+-void XmlPrologStateInit(PROLOG_STATE *state)
+-{
+- state->handler = prolog0;
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmlrole.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmlrole.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmlrole.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmlrole.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,111 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#ifndef XmlRole_INCLUDED
+-#define XmlRole_INCLUDED 1
+-
+-#include "xmltok.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-enum {
+- XML_ROLE_ERROR = -1,
+- XML_ROLE_NONE = 0,
+- XML_ROLE_XML_DECL,
+- XML_ROLE_INSTANCE_START,
+- XML_ROLE_DOCTYPE_NAME,
+- XML_ROLE_DOCTYPE_SYSTEM_ID,
+- XML_ROLE_DOCTYPE_PUBLIC_ID,
+- XML_ROLE_DOCTYPE_CLOSE,
+- XML_ROLE_GENERAL_ENTITY_NAME,
+- XML_ROLE_PARAM_ENTITY_NAME,
+- XML_ROLE_ENTITY_VALUE,
+- XML_ROLE_ENTITY_SYSTEM_ID,
+- XML_ROLE_ENTITY_PUBLIC_ID,
+- XML_ROLE_ENTITY_NOTATION_NAME,
+- XML_ROLE_NOTATION_NAME,
+- XML_ROLE_NOTATION_SYSTEM_ID,
+- XML_ROLE_NOTATION_NO_SYSTEM_ID,
+- XML_ROLE_NOTATION_PUBLIC_ID,
+- XML_ROLE_ATTRIBUTE_NAME,
+- XML_ROLE_ATTRIBUTE_TYPE_CDATA,
+- XML_ROLE_ATTRIBUTE_TYPE_ID,
+- XML_ROLE_ATTRIBUTE_TYPE_IDREF,
+- XML_ROLE_ATTRIBUTE_TYPE_IDREFS,
+- XML_ROLE_ATTRIBUTE_TYPE_ENTITY,
+- XML_ROLE_ATTRIBUTE_TYPE_ENTITIES,
+- XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN,
+- XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS,
+- XML_ROLE_ATTRIBUTE_ENUM_VALUE,
+- XML_ROLE_ATTRIBUTE_NOTATION_VALUE,
+- XML_ROLE_ATTLIST_ELEMENT_NAME,
+- XML_ROLE_IMPLIED_ATTRIBUTE_VALUE,
+- XML_ROLE_REQUIRED_ATTRIBUTE_VALUE,
+- XML_ROLE_DEFAULT_ATTRIBUTE_VALUE,
+- XML_ROLE_FIXED_ATTRIBUTE_VALUE,
+- XML_ROLE_ELEMENT_NAME,
+- XML_ROLE_CONTENT_ANY,
+- XML_ROLE_CONTENT_EMPTY,
+- XML_ROLE_CONTENT_PCDATA,
+- XML_ROLE_GROUP_OPEN,
+- XML_ROLE_GROUP_CLOSE,
+- XML_ROLE_GROUP_CLOSE_REP,
+- XML_ROLE_GROUP_CLOSE_OPT,
+- XML_ROLE_GROUP_CLOSE_PLUS,
+- XML_ROLE_GROUP_CHOICE,
+- XML_ROLE_GROUP_SEQUENCE,
+- XML_ROLE_CONTENT_ELEMENT,
+- XML_ROLE_CONTENT_ELEMENT_REP,
+- XML_ROLE_CONTENT_ELEMENT_OPT,
+- XML_ROLE_CONTENT_ELEMENT_PLUS,
+- XML_ROLE_PARAM_ENTITY_REF
+-};
+-
+-typedef struct prolog_state {
+- int (*handler)(struct prolog_state *state,
+- int tok,
+- const char *ptr,
+- const char *end,
+- const ENCODING *enc);
+- unsigned level;
+-} PROLOG_STATE;
+-
+-void XMLTOKAPI XmlPrologStateInit(PROLOG_STATE *);
+-
+-#define XmlTokenRole(state, tok, ptr, end, enc) \
+- (((state)->handler)(state, tok, ptr, end, enc))
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif /* not XmlRole_INCLUDED */
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmltok.c dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok.c
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmltok.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,1527 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include "xmldef.h"
+-#include "xmltok.h"
+-#include "nametab.h"
+-
+-#define VTABLE1 \
+- { PREFIX(prologTok), PREFIX(contentTok), PREFIX(cdataSectionTok) }, \
+- { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \
+- PREFIX(sameName), \
+- PREFIX(nameMatchesAscii), \
+- PREFIX(nameLength), \
+- PREFIX(skipS), \
+- PREFIX(getAtts), \
+- PREFIX(charRefNumber), \
+- PREFIX(predefinedEntityName), \
+- PREFIX(updatePosition), \
+- PREFIX(isPublicId)
+-
+-#define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16)
+-
+-#define UCS2_GET_NAMING(pages, hi, lo) \
+- (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F)))
+-
+-/* A 2 byte UTF-8 representation splits the characters 11 bits
+-between the bottom 5 and 6 bits of the bytes.
+-We need 8 bits to index into pages, 3 bits to add to that index and
+-5 bits to generate the mask. */
+-#define UTF8_GET_NAMING2(pages, byte) \
+- (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \
+- + ((((byte)[0]) & 3) << 1) \
+- + ((((byte)[1]) >> 5) & 1)] \
+- & (1 << (((byte)[1]) & 0x1F)))
+-
+-/* A 3 byte UTF-8 representation splits the characters 16 bits
+-between the bottom 4, 6 and 6 bits of the bytes.
+-We need 8 bits to index into pages, 3 bits to add to that index and
+-5 bits to generate the mask. */
+-#define UTF8_GET_NAMING3(pages, byte) \
+- (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \
+- + ((((byte)[1]) >> 2) & 0xF)] \
+- << 3) \
+- + ((((byte)[1]) & 3) << 1) \
+- + ((((byte)[2]) >> 5) & 1)] \
+- & (1 << (((byte)[2]) & 0x1F)))
+-
+-#define UTF8_GET_NAMING(pages, p, n) \
+- ((n) == 2 \
+- ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \
+- : ((n) == 3 \
+- ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \
+- : 0))
+-
+-#define UTF8_INVALID3(p) \
+- ((*p) == 0xED \
+- ? (((p)[1] & 0x20) != 0) \
+- : ((*p) == 0xEF \
+- ? ((p)[1] == 0xBF && ((p)[2] == 0xBF || (p)[2] == 0xBE)) \
+- : 0))
+-
+-#define UTF8_INVALID4(p) ((*p) == 0xF4 && ((p)[1] & 0x30) != 0)
+-
+-static
+-int isNever(const ENCODING *enc, const char *p)
+-{
+- return 0;
+-}
+-
+-static
+-int utf8_isName2(const ENCODING *enc, const char *p)
+-{
+- return UTF8_GET_NAMING2(namePages, (const unsigned char *)p);
+-}
+-
+-static
+-int utf8_isName3(const ENCODING *enc, const char *p)
+-{
+- return UTF8_GET_NAMING3(namePages, (const unsigned char *)p);
+-}
+-
+-#define utf8_isName4 isNever
+-
+-static
+-int utf8_isNmstrt2(const ENCODING *enc, const char *p)
+-{
+- return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p);
+-}
+-
+-static
+-int utf8_isNmstrt3(const ENCODING *enc, const char *p)
+-{
+- return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p);
+-}
+-
+-#define utf8_isNmstrt4 isNever
+-
+-#define utf8_isInvalid2 isNever
+-
+-static
+-int utf8_isInvalid3(const ENCODING *enc, const char *p)
+-{
+- return UTF8_INVALID3((const unsigned char *)p);
+-}
+-
+-static
+-int utf8_isInvalid4(const ENCODING *enc, const char *p)
+-{
+- return UTF8_INVALID4((const unsigned char *)p);
+-}
+-
+-struct normal_encoding {
+- ENCODING enc;
+- unsigned char type[256];
+-#ifdef XML_MIN_SIZE
+- int (*byteType)(const ENCODING *, const char *);
+- int (*isNameMin)(const ENCODING *, const char *);
+- int (*isNmstrtMin)(const ENCODING *, const char *);
+- int (*byteToAscii)(const ENCODING *, const char *);
+- int (*charMatches)(const ENCODING *, const char *, int);
+-#endif /* XML_MIN_SIZE */
+- int (*isName2)(const ENCODING *, const char *);
+- int (*isName3)(const ENCODING *, const char *);
+- int (*isName4)(const ENCODING *, const char *);
+- int (*isNmstrt2)(const ENCODING *, const char *);
+- int (*isNmstrt3)(const ENCODING *, const char *);
+- int (*isNmstrt4)(const ENCODING *, const char *);
+- int (*isInvalid2)(const ENCODING *, const char *);
+- int (*isInvalid3)(const ENCODING *, const char *);
+- int (*isInvalid4)(const ENCODING *, const char *);
+-};
+-
+-#ifdef XML_MIN_SIZE
+-
+-#define STANDARD_VTABLE(E) \
+- E ## byteType, \
+- E ## isNameMin, \
+- E ## isNmstrtMin, \
+- E ## byteToAscii, \
+- E ## charMatches,
+-
+-#else
+-
+-#define STANDARD_VTABLE(E) /* as nothing */
+-
+-#endif
+-
+-#define NORMAL_VTABLE(E) \
+- E ## isName2, \
+- E ## isName3, \
+- E ## isName4, \
+- E ## isNmstrt2, \
+- E ## isNmstrt3, \
+- E ## isNmstrt4, \
+- E ## isInvalid2, \
+- E ## isInvalid3, \
+- E ## isInvalid4
+-
+-static int checkCharRefNumber(int);
+-
+-#include "xmltok_impl.h"
+-
+-#ifdef XML_MIN_SIZE
+-#define sb_isNameMin isNever
+-#define sb_isNmstrtMin isNever
+-#endif
+-
+-#ifdef XML_MIN_SIZE
+-#define MINBPC(enc) ((enc)->minBytesPerChar)
+-#else
+-/* minimum bytes per character */
+-#define MINBPC(enc) 1
+-#endif
+-
+-#define SB_BYTE_TYPE(enc, p) \
+- (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
+-
+-#ifdef XML_MIN_SIZE
+-static
+-int sb_byteType(const ENCODING *enc, const char *p)
+-{
+- return SB_BYTE_TYPE(enc, p);
+-}
+-#define BYTE_TYPE(enc, p) \
+- (((const struct normal_encoding *)(enc))->byteType(enc, p))
+-#else
+-#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
+-#endif
+-
+-#ifdef XML_MIN_SIZE
+-#define BYTE_TO_ASCII(enc, p) \
+- (((const struct normal_encoding *)(enc))->byteToAscii(enc, p))
+-static
+-int sb_byteToAscii(const ENCODING *enc, const char *p)
+-{
+- return *p;
+-}
+-#else
+-#define BYTE_TO_ASCII(enc, p) (*p)
+-#endif
+-
+-#define IS_NAME_CHAR(enc, p, n) \
+- (((const struct normal_encoding *)(enc))->isName ## n(enc, p))
+-#define IS_NMSTRT_CHAR(enc, p, n) \
+- (((const struct normal_encoding *)(enc))->isNmstrt ## n(enc, p))
+-#define IS_INVALID_CHAR(enc, p, n) \
+- (((const struct normal_encoding *)(enc))->isInvalid ## n(enc, p))
+-
+-#ifdef XML_MIN_SIZE
+-#define IS_NAME_CHAR_MINBPC(enc, p) \
+- (((const struct normal_encoding *)(enc))->isNameMin(enc, p))
+-#define IS_NMSTRT_CHAR_MINBPC(enc, p) \
+- (((const struct normal_encoding *)(enc))->isNmstrtMin(enc, p))
+-#else
+-#define IS_NAME_CHAR_MINBPC(enc, p) (0)
+-#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
+-#endif
+-
+-#ifdef XML_MIN_SIZE
+-#define CHAR_MATCHES(enc, p, c) \
+- (((const struct normal_encoding *)(enc))->charMatches(enc, p, c))
+-static
+-int sb_charMatches(const ENCODING *enc, const char *p, int c)
+-{
+- return *p == c;
+-}
+-#else
+-/* c is an ASCII character */
+-#define CHAR_MATCHES(enc, p, c) (*(p) == c)
+-#endif
+-
+-#define PREFIX(ident) normal_ ## ident
+-#include "xmltok_impl.c"
+-
+-#undef MINBPC
+-#undef BYTE_TYPE
+-#undef BYTE_TO_ASCII
+-#undef CHAR_MATCHES
+-#undef IS_NAME_CHAR
+-#undef IS_NAME_CHAR_MINBPC
+-#undef IS_NMSTRT_CHAR
+-#undef IS_NMSTRT_CHAR_MINBPC
+-#undef IS_INVALID_CHAR
+-
+-enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */
+- UTF8_cval1 = 0x00,
+- UTF8_cval2 = 0xc0,
+- UTF8_cval3 = 0xe0,
+- UTF8_cval4 = 0xf0
+-};
+-
+-static
+-void utf8_toUtf8(const ENCODING *enc,
+- const char **fromP, const char *fromLim,
+- char **toP, const char *toLim)
+-{
+- char *to;
+- const char *from;
+- if (fromLim - *fromP > toLim - *toP) {
+- /* Avoid copying partial characters. */
+- for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--)
+- if (((unsigned char)fromLim[-1] & 0xc0) != 0x80)
+- break;
+- }
+- for (to = *toP, from = *fromP; from != fromLim; from++, to++)
+- *to = *from;
+- *fromP = from;
+- *toP = to;
+-}
+-
+-static
+-void utf8_toUtf16(const ENCODING *enc,
+- const char **fromP, const char *fromLim,
+- unsigned short **toP, const unsigned short *toLim)
+-{
+- unsigned short *to = *toP;
+- const char *from = *fromP;
+- while (from != fromLim && to != toLim) {
+- switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) {
+- case BT_LEAD2:
+- *to++ = ((from[0] & 0x1f) << 6) | (from[1] & 0x3f);
+- from += 2;
+- break;
+- case BT_LEAD3:
+- *to++ = ((from[0] & 0xf) << 12) | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f);
+- from += 3;
+- break;
+- case BT_LEAD4:
+- {
+- unsigned long n;
+- if (to + 1 == toLim)
+- break;
+- n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f);
+- n -= 0x10000;
+- to[0] = (unsigned short)((n >> 10) | 0xD800);
+- to[1] = (unsigned short)((n & 0x3FF) | 0xDC00);
+- to += 2;
+- from += 4;
+- }
+- break;
+- default:
+- *to++ = *from++;
+- break;
+- }
+- }
+- *fromP = from;
+- *toP = to;
+-}
+-
+-#ifdef XML_NS
+-static const struct normal_encoding utf8_encoding_ns = {
+- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
+- {
+-#include "asciitab.h"
+-#include "utf8tab.h"
+- },
+- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
+-};
+-#endif
+-
+-static const struct normal_encoding utf8_encoding = {
+- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
+- {
+-#define BT_COLON BT_NMSTRT
+-#include "asciitab.h"
+-#undef BT_COLON
+-#include "utf8tab.h"
+- },
+- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
+-};
+-
+-#ifdef XML_NS
+-
+-static const struct normal_encoding internal_utf8_encoding_ns = {
+- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
+- {
+-#include "iasciitab.h"
+-#include "utf8tab.h"
+- },
+- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
+-};
+-
+-#endif
+-
+-static const struct normal_encoding internal_utf8_encoding = {
+- { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 },
+- {
+-#define BT_COLON BT_NMSTRT
+-#include "iasciitab.h"
+-#undef BT_COLON
+-#include "utf8tab.h"
+- },
+- STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_)
+-};
+-
+-static
+-void latin1_toUtf8(const ENCODING *enc,
+- const char **fromP, const char *fromLim,
+- char **toP, const char *toLim)
+-{
+- for (;;) {
+- unsigned char c;
+- if (*fromP == fromLim)
+- break;
+- c = (unsigned char)**fromP;
+- if (c & 0x80) {
+- if (toLim - *toP < 2)
+- break;
+- *(*toP)++ = ((c >> 6) | UTF8_cval2);
+- *(*toP)++ = ((c & 0x3f) | 0x80);
+- (*fromP)++;
+- }
+- else {
+- if (*toP == toLim)
+- break;
+- *(*toP)++ = *(*fromP)++;
+- }
+- }
+-}
+-
+-static
+-void latin1_toUtf16(const ENCODING *enc,
+- const char **fromP, const char *fromLim,
+- unsigned short **toP, const unsigned short *toLim)
+-{
+- while (*fromP != fromLim && *toP != toLim)
+- *(*toP)++ = (unsigned char)*(*fromP)++;
+-}
+-
+-#ifdef XML_NS
+-
+-static const struct normal_encoding latin1_encoding_ns = {
+- { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 },
+- {
+-#include "asciitab.h"
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(sb_)
+-};
+-
+-#endif
+-
+-static const struct normal_encoding latin1_encoding = {
+- { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 },
+- {
+-#define BT_COLON BT_NMSTRT
+-#include "asciitab.h"
+-#undef BT_COLON
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(sb_)
+-};
+-
+-static
+-void ascii_toUtf8(const ENCODING *enc,
+- const char **fromP, const char *fromLim,
+- char **toP, const char *toLim)
+-{
+- while (*fromP != fromLim && *toP != toLim)
+- *(*toP)++ = *(*fromP)++;
+-}
+-
+-#ifdef XML_NS
+-
+-static const struct normal_encoding ascii_encoding_ns = {
+- { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 },
+- {
+-#include "asciitab.h"
+-/* BT_NONXML == 0 */
+- },
+- STANDARD_VTABLE(sb_)
+-};
+-
+-#endif
+-
+-static const struct normal_encoding ascii_encoding = {
+- { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 },
+- {
+-#define BT_COLON BT_NMSTRT
+-#include "asciitab.h"
+-#undef BT_COLON
+-/* BT_NONXML == 0 */
+- },
+- STANDARD_VTABLE(sb_)
+-};
+-
+-static int unicode_byte_type(char hi, char lo)
+-{
+- switch ((unsigned char)hi) {
+- case 0xD8: case 0xD9: case 0xDA: case 0xDB:
+- return BT_LEAD4;
+- case 0xDC: case 0xDD: case 0xDE: case 0xDF:
+- return BT_TRAIL;
+- case 0xFF:
+- switch ((unsigned char)lo) {
+- case 0xFF:
+- case 0xFE:
+- return BT_NONXML;
+- }
+- break;
+- }
+- return BT_NONASCII;
+-}
+-
+-#define DEFINE_UTF16_TO_UTF8(E) \
+-static \
+-void E ## toUtf8(const ENCODING *enc, \
+- const char **fromP, const char *fromLim, \
+- char **toP, const char *toLim) \
+-{ \
+- const char *from; \
+- for (from = *fromP; from != fromLim; from += 2) { \
+- int plane; \
+- unsigned char lo2; \
+- unsigned char lo = GET_LO(from); \
+- unsigned char hi = GET_HI(from); \
+- switch (hi) { \
+- case 0: \
+- if (lo < 0x80) { \
+- if (*toP == toLim) { \
+- *fromP = from; \
+- return; \
+- } \
+- *(*toP)++ = lo; \
+- break; \
+- } \
+- /* fall through */ \
+- case 0x1: case 0x2: case 0x3: \
+- case 0x4: case 0x5: case 0x6: case 0x7: \
+- if (toLim - *toP < 2) { \
+- *fromP = from; \
+- return; \
+- } \
+- *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \
+- *(*toP)++ = ((lo & 0x3f) | 0x80); \
+- break; \
+- default: \
+- if (toLim - *toP < 3) { \
+- *fromP = from; \
+- return; \
+- } \
+- /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \
+- *(*toP)++ = ((hi >> 4) | UTF8_cval3); \
+- *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \
+- *(*toP)++ = ((lo & 0x3f) | 0x80); \
+- break; \
+- case 0xD8: case 0xD9: case 0xDA: case 0xDB: \
+- if (toLim - *toP < 4) { \
+- *fromP = from; \
+- return; \
+- } \
+- plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \
+- *(*toP)++ = ((plane >> 2) | UTF8_cval4); \
+- *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \
+- from += 2; \
+- lo2 = GET_LO(from); \
+- *(*toP)++ = (((lo & 0x3) << 4) \
+- | ((GET_HI(from) & 0x3) << 2) \
+- | (lo2 >> 6) \
+- | 0x80); \
+- *(*toP)++ = ((lo2 & 0x3f) | 0x80); \
+- break; \
+- } \
+- } \
+- *fromP = from; \
+-}
+-
+-#define DEFINE_UTF16_TO_UTF16(E) \
+-static \
+-void E ## toUtf16(const ENCODING *enc, \
+- const char **fromP, const char *fromLim, \
+- unsigned short **toP, const unsigned short *toLim) \
+-{ \
+- /* Avoid copying first half only of surrogate */ \
+- if (fromLim - *fromP > ((toLim - *toP) << 1) \
+- && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \
+- fromLim -= 2; \
+- for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \
+- *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \
+-}
+-
+-#define SET2(ptr, ch) \
+- (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8)))
+-#define GET_LO(ptr) ((unsigned char)(ptr)[0])
+-#define GET_HI(ptr) ((unsigned char)(ptr)[1])
+-
+-DEFINE_UTF16_TO_UTF8(little2_)
+-DEFINE_UTF16_TO_UTF16(little2_)
+-
+-#undef SET2
+-#undef GET_LO
+-#undef GET_HI
+-
+-#define SET2(ptr, ch) \
+- (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF)))
+-#define GET_LO(ptr) ((unsigned char)(ptr)[1])
+-#define GET_HI(ptr) ((unsigned char)(ptr)[0])
+-
+-DEFINE_UTF16_TO_UTF8(big2_)
+-DEFINE_UTF16_TO_UTF16(big2_)
+-
+-#undef SET2
+-#undef GET_LO
+-#undef GET_HI
+-
+-#define LITTLE2_BYTE_TYPE(enc, p) \
+- ((p)[1] == 0 \
+- ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \
+- : unicode_byte_type((p)[1], (p)[0]))
+-#define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1)
+-#define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c)
+-#define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \
+- UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
+-#define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \
+- UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
+-
+-#ifdef XML_MIN_SIZE
+-
+-static
+-int little2_byteType(const ENCODING *enc, const char *p)
+-{
+- return LITTLE2_BYTE_TYPE(enc, p);
+-}
+-
+-static
+-int little2_byteToAscii(const ENCODING *enc, const char *p)
+-{
+- return LITTLE2_BYTE_TO_ASCII(enc, p);
+-}
+-
+-static
+-int little2_charMatches(const ENCODING *enc, const char *p, int c)
+-{
+- return LITTLE2_CHAR_MATCHES(enc, p, c);
+-}
+-
+-static
+-int little2_isNameMin(const ENCODING *enc, const char *p)
+-{
+- return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p);
+-}
+-
+-static
+-int little2_isNmstrtMin(const ENCODING *enc, const char *p)
+-{
+- return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p);
+-}
+-
+-#undef VTABLE
+-#define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16
+-
+-#else /* not XML_MIN_SIZE */
+-
+-#undef PREFIX
+-#define PREFIX(ident) little2_ ## ident
+-#define MINBPC(enc) 2
+-/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */
+-#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
+-#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p)
+-#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c)
+-#define IS_NAME_CHAR(enc, p, n) 0
+-#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p)
+-#define IS_NMSTRT_CHAR(enc, p, n) (0)
+-#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p)
+-
+-#include "xmltok_impl.c"
+-
+-#undef MINBPC
+-#undef BYTE_TYPE
+-#undef BYTE_TO_ASCII
+-#undef CHAR_MATCHES
+-#undef IS_NAME_CHAR
+-#undef IS_NAME_CHAR_MINBPC
+-#undef IS_NMSTRT_CHAR
+-#undef IS_NMSTRT_CHAR_MINBPC
+-#undef IS_INVALID_CHAR
+-
+-#endif /* not XML_MIN_SIZE */
+-
+-#ifdef XML_NS
+-
+-static const struct normal_encoding little2_encoding_ns = {
+- { VTABLE, 2, 0,
+-#if XML_BYTE_ORDER == 12
+- 1
+-#else
+- 0
+-#endif
+- },
+- {
+-#include "asciitab.h"
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(little2_)
+-};
+-
+-#endif
+-
+-static const struct normal_encoding little2_encoding = {
+- { VTABLE, 2, 0,
+-#if XML_BYTE_ORDER == 12
+- 1
+-#else
+- 0
+-#endif
+- },
+- {
+-#define BT_COLON BT_NMSTRT
+-#include "asciitab.h"
+-#undef BT_COLON
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(little2_)
+-};
+-
+-#if XML_BYTE_ORDER != 21
+-
+-#ifdef XML_NS
+-
+-static const struct normal_encoding internal_little2_encoding_ns = {
+- { VTABLE, 2, 0, 1 },
+- {
+-#include "iasciitab.h"
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(little2_)
+-};
+-
+-#endif
+-
+-static const struct normal_encoding internal_little2_encoding = {
+- { VTABLE, 2, 0, 1 },
+- {
+-#define BT_COLON BT_NMSTRT
+-#include "iasciitab.h"
+-#undef BT_COLON
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(little2_)
+-};
+-
+-#endif
+-
+-
+-#define BIG2_BYTE_TYPE(enc, p) \
+- ((p)[0] == 0 \
+- ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \
+- : unicode_byte_type((p)[0], (p)[1]))
+-#define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1)
+-#define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c)
+-#define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \
+- UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1])
+-#define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \
+- UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1])
+-
+-#ifdef XML_MIN_SIZE
+-
+-static
+-int big2_byteType(const ENCODING *enc, const char *p)
+-{
+- return BIG2_BYTE_TYPE(enc, p);
+-}
+-
+-static
+-int big2_byteToAscii(const ENCODING *enc, const char *p)
+-{
+- return BIG2_BYTE_TO_ASCII(enc, p);
+-}
+-
+-static
+-int big2_charMatches(const ENCODING *enc, const char *p, int c)
+-{
+- return BIG2_CHAR_MATCHES(enc, p, c);
+-}
+-
+-static
+-int big2_isNameMin(const ENCODING *enc, const char *p)
+-{
+- return BIG2_IS_NAME_CHAR_MINBPC(enc, p);
+-}
+-
+-static
+-int big2_isNmstrtMin(const ENCODING *enc, const char *p)
+-{
+- return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p);
+-}
+-
+-#undef VTABLE
+-#define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16
+-
+-#else /* not XML_MIN_SIZE */
+-
+-#undef PREFIX
+-#define PREFIX(ident) big2_ ## ident
+-#define MINBPC(enc) 2
+-/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */
+-#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
+-#define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p)
+-#define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c)
+-#define IS_NAME_CHAR(enc, p, n) 0
+-#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p)
+-#define IS_NMSTRT_CHAR(enc, p, n) (0)
+-#define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p)
+-
+-#include "xmltok_impl.c"
+-
+-#undef MINBPC
+-#undef BYTE_TYPE
+-#undef BYTE_TO_ASCII
+-#undef CHAR_MATCHES
+-#undef IS_NAME_CHAR
+-#undef IS_NAME_CHAR_MINBPC
+-#undef IS_NMSTRT_CHAR
+-#undef IS_NMSTRT_CHAR_MINBPC
+-#undef IS_INVALID_CHAR
+-
+-#endif /* not XML_MIN_SIZE */
+-
+-#ifdef XML_NS
+-
+-static const struct normal_encoding big2_encoding_ns = {
+- { VTABLE, 2, 0,
+-#if XML_BYTE_ORDER == 21
+- 1
+-#else
+- 0
+-#endif
+- },
+- {
+-#include "asciitab.h"
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(big2_)
+-};
+-
+-#endif
+-
+-static const struct normal_encoding big2_encoding = {
+- { VTABLE, 2, 0,
+-#if XML_BYTE_ORDER == 21
+- 1
+-#else
+- 0
+-#endif
+- },
+- {
+-#define BT_COLON BT_NMSTRT
+-#include "asciitab.h"
+-#undef BT_COLON
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(big2_)
+-};
+-
+-#if XML_BYTE_ORDER != 12
+-
+-#ifdef XML_NS
+-
+-static const struct normal_encoding internal_big2_encoding_ns = {
+- { VTABLE, 2, 0, 1 },
+- {
+-#include "iasciitab.h"
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(big2_)
+-};
+-
+-#endif
+-
+-static const struct normal_encoding internal_big2_encoding = {
+- { VTABLE, 2, 0, 1 },
+- {
+-#define BT_COLON BT_NMSTRT
+-#include "iasciitab.h"
+-#undef BT_COLON
+-#include "latin1tab.h"
+- },
+- STANDARD_VTABLE(big2_)
+-};
+-
+-#endif
+-
+-#undef PREFIX
+-
+-static
+-int streqci(const char *s1, const char *s2)
+-{
+- for (;;) {
+- char c1 = *s1++;
+- char c2 = *s2++;
+- if ('a' <= c1 && c1 <= 'z')
+- c1 += 'A' - 'a';
+- if ('a' <= c2 && c2 <= 'z')
+- c2 += 'A' - 'a';
+- if (c1 != c2)
+- return 0;
+- if (!c1)
+- break;
+- }
+- return 1;
+-}
+-
+-static
+-void initUpdatePosition(const ENCODING *enc, const char *ptr,
+- const char *end, POSITION *pos)
+-{
+- normal_updatePosition(&utf8_encoding.enc, ptr, end, pos);
+-}
+-
+-static
+-int toAscii(const ENCODING *enc, const char *ptr, const char *end)
+-{
+- char buf[1];
+- char *p = buf;
+- XmlUtf8Convert(enc, &ptr, end, &p, p + 1);
+- if (p == buf)
+- return -1;
+- else
+- return buf[0];
+-}
+-
+-static
+-int isSpace(int c)
+-{
+- switch (c) {
+- case 0x20:
+- case 0xD:
+- case 0xA:
+- case 0x9:
+- return 1;
+- }
+- return 0;
+-}
+-
+-/* Return 1 if there's just optional white space
+-or there's an S followed by name=val. */
+-static
+-int parsePseudoAttribute(const ENCODING *enc,
+- const char *ptr,
+- const char *end,
+- const char **namePtr,
+- const char **valPtr,
+- const char **nextTokPtr)
+-{
+- int c;
+- char open;
+- if (ptr == end) {
+- *namePtr = 0;
+- return 1;
+- }
+- if (!isSpace(toAscii(enc, ptr, end))) {
+- *nextTokPtr = ptr;
+- return 0;
+- }
+- do {
+- ptr += enc->minBytesPerChar;
+- } while (isSpace(toAscii(enc, ptr, end)));
+- if (ptr == end) {
+- *namePtr = 0;
+- return 1;
+- }
+- *namePtr = ptr;
+- for (;;) {
+- c = toAscii(enc, ptr, end);
+- if (c == -1) {
+- *nextTokPtr = ptr;
+- return 0;
+- }
+- if (c == '=')
+- break;
+- if (isSpace(c)) {
+- do {
+- ptr += enc->minBytesPerChar;
+- } while (isSpace(c = toAscii(enc, ptr, end)));
+- if (c != '=') {
+- *nextTokPtr = ptr;
+- return 0;
+- }
+- break;
+- }
+- ptr += enc->minBytesPerChar;
+- }
+- if (ptr == *namePtr) {
+- *nextTokPtr = ptr;
+- return 0;
+- }
+- ptr += enc->minBytesPerChar;
+- c = toAscii(enc, ptr, end);
+- while (isSpace(c)) {
+- ptr += enc->minBytesPerChar;
+- c = toAscii(enc, ptr, end);
+- }
+- if (c != '"' && c != '\'') {
+- *nextTokPtr = ptr;
+- return 0;
+- }
+- open = c;
+- ptr += enc->minBytesPerChar;
+- *valPtr = ptr;
+- for (;; ptr += enc->minBytesPerChar) {
+- c = toAscii(enc, ptr, end);
+- if (c == open)
+- break;
+- if (!('a' <= c && c <= 'z')
+- && !('A' <= c && c <= 'Z')
+- && !('0' <= c && c <= '9')
+- && c != '.'
+- && c != '-'
+- && c != '_') {
+- *nextTokPtr = ptr;
+- return 0;
+- }
+- }
+- *nextTokPtr = ptr + enc->minBytesPerChar;
+- return 1;
+-}
+-
+-static
+-int doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *,
+- const char *,
+- const char *),
+- int isGeneralTextEntity,
+- const ENCODING *enc,
+- const char *ptr,
+- const char *end,
+- const char **badPtr,
+- const char **versionPtr,
+- const char **encodingName,
+- const ENCODING **encoding,
+- int *standalone)
+-{
+- const char *val = 0;
+- const char *name = 0;
+- ptr += 5 * enc->minBytesPerChar;
+- end -= 2 * enc->minBytesPerChar;
+- if (!parsePseudoAttribute(enc, ptr, end, &name, &val, &ptr) || !name) {
+- *badPtr = ptr;
+- return 0;
+- }
+- if (!XmlNameMatchesAscii(enc, name, "version")) {
+- if (!isGeneralTextEntity) {
+- *badPtr = name;
+- return 0;
+- }
+- }
+- else {
+- if (versionPtr)
+- *versionPtr = val;
+- if (!parsePseudoAttribute(enc, ptr, end, &name, &val, &ptr)) {
+- *badPtr = ptr;
+- return 0;
+- }
+- if (!name) {
+- if (isGeneralTextEntity) {
+- /* a TextDecl must have an EncodingDecl */
+- *badPtr = ptr;
+- return 0;
+- }
+- return 1;
+- }
+- }
+- if (XmlNameMatchesAscii(enc, name, "encoding")) {
+- int c = toAscii(enc, val, end);
+- if (!('a' <= c && c <= 'z') && !('A' <= c && c <= 'Z')) {
+- *badPtr = val;
+- return 0;
+- }
+- if (encodingName)
+- *encodingName = val;
+- if (encoding)
+- *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar);
+- if (!parsePseudoAttribute(enc, ptr, end, &name, &val, &ptr)) {
+- *badPtr = ptr;
+- return 0;
+- }
+- if (!name)
+- return 1;
+- }
+- if (!XmlNameMatchesAscii(enc, name, "standalone") || isGeneralTextEntity) {
+- *badPtr = name;
+- return 0;
+- }
+- if (XmlNameMatchesAscii(enc, val, "yes")) {
+- if (standalone)
+- *standalone = 1;
+- }
+- else if (XmlNameMatchesAscii(enc, val, "no")) {
+- if (standalone)
+- *standalone = 0;
+- }
+- else {
+- *badPtr = val;
+- return 0;
+- }
+- while (isSpace(toAscii(enc, ptr, end)))
+- ptr += enc->minBytesPerChar;
+- if (ptr != end) {
+- *badPtr = ptr;
+- return 0;
+- }
+- return 1;
+-}
+-
+-static
+-int checkCharRefNumber(int result)
+-{
+- switch (result >> 8) {
+- case 0xD8: case 0xD9: case 0xDA: case 0xDB:
+- case 0xDC: case 0xDD: case 0xDE: case 0xDF:
+- return -1;
+- case 0:
+- if (latin1_encoding.type[result] == BT_NONXML)
+- return -1;
+- break;
+- case 0xFF:
+- if (result == 0xFFFE || result == 0xFFFF)
+- return -1;
+- break;
+- }
+- return result;
+-}
+-
+-int XmlUtf8Encode(int c, char *buf)
+-{
+- enum {
+- /* minN is minimum legal resulting value for N byte sequence */
+- min2 = 0x80,
+- min3 = 0x800,
+- min4 = 0x10000
+- };
+-
+- if (c < 0)
+- return 0;
+- if (c < min2) {
+- buf[0] = (c | UTF8_cval1);
+- return 1;
+- }
+- if (c < min3) {
+- buf[0] = ((c >> 6) | UTF8_cval2);
+- buf[1] = ((c & 0x3f) | 0x80);
+- return 2;
+- }
+- if (c < min4) {
+- buf[0] = ((c >> 12) | UTF8_cval3);
+- buf[1] = (((c >> 6) & 0x3f) | 0x80);
+- buf[2] = ((c & 0x3f) | 0x80);
+- return 3;
+- }
+- if (c < 0x110000) {
+- buf[0] = ((c >> 18) | UTF8_cval4);
+- buf[1] = (((c >> 12) & 0x3f) | 0x80);
+- buf[2] = (((c >> 6) & 0x3f) | 0x80);
+- buf[3] = ((c & 0x3f) | 0x80);
+- return 4;
+- }
+- return 0;
+-}
+-
+-int XmlUtf16Encode(int charNum, unsigned short *buf)
+-{
+- if (charNum < 0)
+- return 0;
+- if (charNum < 0x10000) {
+- buf[0] = charNum;
+- return 1;
+- }
+- if (charNum < 0x110000) {
+- charNum -= 0x10000;
+- buf[0] = (charNum >> 10) + 0xD800;
+- buf[1] = (charNum & 0x3FF) + 0xDC00;
+- return 2;
+- }
+- return 0;
+-}
+-
+-struct unknown_encoding {
+- struct normal_encoding normal;
+- int (*convert)(void *userData, const char *p);
+- void *userData;
+- unsigned short utf16[256];
+- char utf8[256][4];
+-};
+-
+-int XmlSizeOfUnknownEncoding()
+-{
+- return sizeof(struct unknown_encoding);
+-}
+-
+-static
+-int unknown_isName(const ENCODING *enc, const char *p)
+-{
+- int c = ((const struct unknown_encoding *)enc)
+- ->convert(((const struct unknown_encoding *)enc)->userData, p);
+- if (c & ~0xFFFF)
+- return 0;
+- return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF);
+-}
+-
+-static
+-int unknown_isNmstrt(const ENCODING *enc, const char *p)
+-{
+- int c = ((const struct unknown_encoding *)enc)
+- ->convert(((const struct unknown_encoding *)enc)->userData, p);
+- if (c & ~0xFFFF)
+- return 0;
+- return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF);
+-}
+-
+-static
+-int unknown_isInvalid(const ENCODING *enc, const char *p)
+-{
+- int c = ((const struct unknown_encoding *)enc)
+- ->convert(((const struct unknown_encoding *)enc)->userData, p);
+- return (c & ~0xFFFF) || checkCharRefNumber(c) < 0;
+-}
+-
+-static
+-void unknown_toUtf8(const ENCODING *enc,
+- const char **fromP, const char *fromLim,
+- char **toP, const char *toLim)
+-{
+- char buf[XML_UTF8_ENCODE_MAX];
+- for (;;) {
+- const char *utf8;
+- int n;
+- if (*fromP == fromLim)
+- break;
+- utf8 = ((const struct unknown_encoding *)enc)->utf8[(unsigned char)**fromP];
+- n = *utf8++;
+- if (n == 0) {
+- int c = ((const struct unknown_encoding *)enc)
+- ->convert(((const struct unknown_encoding *)enc)->userData, *fromP);
+- n = XmlUtf8Encode(c, buf);
+- if (n > toLim - *toP)
+- break;
+- utf8 = buf;
+- *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP]
+- - (BT_LEAD2 - 2);
+- }
+- else {
+- if (n > toLim - *toP)
+- break;
+- (*fromP)++;
+- }
+- do {
+- *(*toP)++ = *utf8++;
+- } while (--n != 0);
+- }
+-}
+-
+-static
+-void unknown_toUtf16(const ENCODING *enc,
+- const char **fromP, const char *fromLim,
+- unsigned short **toP, const unsigned short *toLim)
+-{
+- while (*fromP != fromLim && *toP != toLim) {
+- unsigned short c
+- = ((const struct unknown_encoding *)enc)->utf16[(unsigned char)**fromP];
+- if (c == 0) {
+- c = (unsigned short)((const struct unknown_encoding *)enc)
+- ->convert(((const struct unknown_encoding *)enc)->userData, *fromP);
+- *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP]
+- - (BT_LEAD2 - 2);
+- }
+- else
+- (*fromP)++;
+- *(*toP)++ = c;
+- }
+-}
+-
+-ENCODING *
+-XmlInitUnknownEncoding(void *mem,
+- int *table,
+- int (*convert)(void *userData, const char *p),
+- void *userData)
+-{
+- int i;
+- struct unknown_encoding *e = mem;
+- for (i = 0; i < sizeof(struct normal_encoding); i++)
+- ((char *)mem)[i] = ((char *)&latin1_encoding)[i];
+- for (i = 0; i < 128; i++)
+- if (latin1_encoding.type[i] != BT_OTHER
+- && latin1_encoding.type[i] != BT_NONXML
+- && table[i] != i)
+- return 0;
+- for (i = 0; i < 256; i++) {
+- int c = table[i];
+- if (c == -1) {
+- e->normal.type[i] = BT_MALFORM;
+- /* This shouldn't really get used. */
+- e->utf16[i] = 0xFFFF;
+- e->utf8[i][0] = 1;
+- e->utf8[i][1] = 0;
+- }
+- else if (c < 0) {
+- if (c < -4)
+- return 0;
+- e->normal.type[i] = BT_LEAD2 - (c + 2);
+- e->utf8[i][0] = 0;
+- e->utf16[i] = 0;
+- }
+- else if (c < 0x80) {
+- if (latin1_encoding.type[c] != BT_OTHER
+- && latin1_encoding.type[c] != BT_NONXML
+- && c != i)
+- return 0;
+- e->normal.type[i] = latin1_encoding.type[c];
+- e->utf8[i][0] = 1;
+- e->utf8[i][1] = (char)c;
+- e->utf16[i] = c == 0 ? 0xFFFF : c;
+- }
+- else if (checkCharRefNumber(c) < 0) {
+- e->normal.type[i] = BT_NONXML;
+- /* This shouldn't really get used. */
+- e->utf16[i] = 0xFFFF;
+- e->utf8[i][0] = 1;
+- e->utf8[i][1] = 0;
+- }
+- else {
+- if (c > 0xFFFF)
+- return 0;
+- if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff))
+- e->normal.type[i] = BT_NMSTRT;
+- else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff))
+- e->normal.type[i] = BT_NAME;
+- else
+- e->normal.type[i] = BT_OTHER;
+- e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1);
+- e->utf16[i] = c;
+- }
+- }
+- e->userData = userData;
+- e->convert = convert;
+- if (convert) {
+- e->normal.isName2 = unknown_isName;
+- e->normal.isName3 = unknown_isName;
+- e->normal.isName4 = unknown_isName;
+- e->normal.isNmstrt2 = unknown_isNmstrt;
+- e->normal.isNmstrt3 = unknown_isNmstrt;
+- e->normal.isNmstrt4 = unknown_isNmstrt;
+- e->normal.isInvalid2 = unknown_isInvalid;
+- e->normal.isInvalid3 = unknown_isInvalid;
+- e->normal.isInvalid4 = unknown_isInvalid;
+- }
+- e->normal.enc.utf8Convert = unknown_toUtf8;
+- e->normal.enc.utf16Convert = unknown_toUtf16;
+- return &(e->normal.enc);
+-}
+-
+-/* If this enumeration is changed, getEncodingIndex and encodings
+-must also be changed. */
+-enum {
+- UNKNOWN_ENC = -1,
+- ISO_8859_1_ENC = 0,
+- US_ASCII_ENC,
+- UTF_8_ENC,
+- UTF_16_ENC,
+- UTF_16BE_ENC,
+- UTF_16LE_ENC,
+- /* must match encodingNames up to here */
+- NO_ENC
+-};
+-
+-static
+-int getEncodingIndex(const char *name)
+-{
+- static const char *encodingNames[] = {
+- "ISO-8859-1",
+- "US-ASCII",
+- "UTF-8",
+- "UTF-16",
+- "UTF-16BE"
+- "UTF-16LE",
+- };
+- int i;
+- if (name == 0)
+- return NO_ENC;
+- for (i = 0; i < sizeof(encodingNames)/sizeof(encodingNames[0]); i++)
+- if (streqci(name, encodingNames[i]))
+- return i;
+- return UNKNOWN_ENC;
+-}
+-
+-/* For binary compatibility, we store the index of the encoding specified
+-at initialization in the isUtf16 member. */
+-
+-#define INIT_ENC_INDEX(enc) ((enc)->initEnc.isUtf16)
+-
+-/* This is what detects the encoding.
+-encodingTable maps from encoding indices to encodings;
+-INIT_ENC_INDEX(enc) is the index of the external (protocol) specified encoding;
+-state is XML_CONTENT_STATE if we're parsing an external text entity,
+-and XML_PROLOG_STATE otherwise.
+-*/
+-
+-
+-static
+-int initScan(const ENCODING **encodingTable,
+- const INIT_ENCODING *enc,
+- int state,
+- const char *ptr,
+- const char *end,
+- const char **nextTokPtr)
+-{
+- const ENCODING **encPtr;
+-
+- if (ptr == end)
+- return XML_TOK_NONE;
+- encPtr = enc->encPtr;
+- if (ptr + 1 == end) {
+- /* only a single byte available for auto-detection */
+- /* a well-formed document entity must have more than one byte */
+- if (state != XML_CONTENT_STATE)
+- return XML_TOK_PARTIAL;
+- /* so we're parsing an external text entity... */
+- /* if UTF-16 was externally specified, then we need at least 2 bytes */
+- switch (INIT_ENC_INDEX(enc)) {
+- case UTF_16_ENC:
+- case UTF_16LE_ENC:
+- case UTF_16BE_ENC:
+- return XML_TOK_PARTIAL;
+- }
+- switch ((unsigned char)*ptr) {
+- case 0xFE:
+- case 0xFF:
+- case 0xEF: /* possibly first byte of UTF-8 BOM */
+- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
+- && state == XML_CONTENT_STATE)
+- break;
+- /* fall through */
+- case 0x00:
+- case 0x3C:
+- return XML_TOK_PARTIAL;
+- }
+- }
+- else {
+- switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) {
+- case 0xFEFF:
+- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
+- && state == XML_CONTENT_STATE)
+- break;
+- *nextTokPtr = ptr + 2;
+- *encPtr = encodingTable[UTF_16BE_ENC];
+- return XML_TOK_BOM;
+- /* 00 3C is handled in the default case */
+- case 0x3C00:
+- if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC
+- || INIT_ENC_INDEX(enc) == UTF_16_ENC)
+- && state == XML_CONTENT_STATE)
+- break;
+- *encPtr = encodingTable[UTF_16LE_ENC];
+- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
+- case 0xFFFE:
+- if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC
+- && state == XML_CONTENT_STATE)
+- break;
+- *nextTokPtr = ptr + 2;
+- *encPtr = encodingTable[UTF_16LE_ENC];
+- return XML_TOK_BOM;
+- case 0xEFBB:
+- /* Maybe a UTF-8 BOM (EF BB BF) */
+- /* If there's an explicitly specified (external) encoding
+- of ISO-8859-1 or some flavour of UTF-16
+- and this is an external text entity,
+- don't look for the BOM,
+- because it might be a legal data. */
+- if (state == XML_CONTENT_STATE) {
+- int e = INIT_ENC_INDEX(enc);
+- if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC || e == UTF_16_ENC)
+- break;
+- }
+- if (ptr + 2 == end)
+- return XML_TOK_PARTIAL;
+- if ((unsigned char)ptr[2] == 0xBF) {
+- *encPtr = encodingTable[UTF_8_ENC];
+- return XML_TOK_BOM;
+- }
+- break;
+- default:
+- if (ptr[0] == '\0') {
+- /* 0 isn't a legal data character. Furthermore a document entity can only
+- start with ASCII characters. So the only way this can fail to be big-endian
+- UTF-16 if it it's an external parsed general entity that's labelled as
+- UTF-16LE. */
+- if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC)
+- break;
+- *encPtr = encodingTable[UTF_16BE_ENC];
+- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
+- }
+- else if (ptr[1] == '\0') {
+- /* We could recover here in the case:
+- - parsing an external entity
+- - second byte is 0
+- - no externally specified encoding
+- - no encoding declaration
+- by assuming UTF-16LE. But we don't, because this would mean when
+- presented just with a single byte, we couldn't reliably determine
+- whether we needed further bytes. */
+- if (state == XML_CONTENT_STATE)
+- break;
+- *encPtr = encodingTable[UTF_16LE_ENC];
+- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
+- }
+- break;
+- }
+- }
+- *encPtr = encodingTable[INIT_ENC_INDEX(enc)];
+- return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
+-}
+-
+-
+-#define NS(x) x
+-#define ns(x) x
+-#include "xmltok_ns.c"
+-#undef NS
+-#undef ns
+-
+-#ifdef XML_NS
+-
+-#define NS(x) x ## NS
+-#define ns(x) x ## _ns
+-
+-#include "xmltok_ns.c"
+-
+-#undef NS
+-#undef ns
+-
+-ENCODING *
+-XmlInitUnknownEncodingNS(void *mem,
+- int *table,
+- int (*convert)(void *userData, const char *p),
+- void *userData)
+-{
+- ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData);
+- if (enc)
+- ((struct normal_encoding *)enc)->type[':'] = BT_COLON;
+- return enc;
+-}
+-
+-#endif /* XML_NS */
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmltok.dsp dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok.dsp
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmltok.dsp 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok.dsp 1969-12-31 18:00:00.000000000 -0600
+@@ -1,163 +0,0 @@
+-# Microsoft Developer Studio Project File - Name="xmltok" - Package Owner=<4>
+-# Microsoft Developer Studio Generated Build File, Format Version 6.00
+-# ** DO NOT EDIT **
+-
+-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+-
+-CFG=xmltok - Win32 Release
+-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+-!MESSAGE use the Export Makefile command and run
+-!MESSAGE
+-!MESSAGE NMAKE /f "xmltok.mak".
+-!MESSAGE
+-!MESSAGE You can specify a configuration when running NMAKE
+-!MESSAGE by defining the macro CFG on the command line. For example:
+-!MESSAGE
+-!MESSAGE NMAKE /f "xmltok.mak" CFG="xmltok - Win32 Release"
+-!MESSAGE
+-!MESSAGE Possible choices for configuration are:
+-!MESSAGE
+-!MESSAGE "xmltok - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE "xmltok - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+-!MESSAGE
+-
+-# Begin Project
+-# PROP AllowPerConfigDependencies 0
+-# PROP Scc_ProjName ""
+-# PROP Scc_LocalPath ""
+-CPP=cl.exe
+-MTL=midl.exe
+-RSC=rc.exe
+-
+-!IF "$(CFG)" == "xmltok - Win32 Release"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir ".\Release"
+-# PROP BASE Intermediate_Dir ".\Release"
+-# PROP BASE Target_Dir "."
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir ".\Release"
+-# PROP Intermediate_Dir ".\Release"
+-# PROP Ignore_Export_Lib 0
+-# PROP Target_Dir "."
+-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+-# ADD CPP /nologo /MT /W3 /GX /O2 /D XMLTOKAPI=__declspec(dllexport) /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "XML_NS" /YX /FD /c
+-# ADD BASE MTL /nologo /D "NDEBUG" /win32
+-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"DllMain" /subsystem:windows /dll /machine:I386 /out:"..\bin\xmltok.dll" /link50compat
+-# SUBTRACT LINK32 /pdb:none
+-
+-!ELSEIF "$(CFG)" == "xmltok - Win32 Debug"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 1
+-# PROP BASE Output_Dir ".\Debug"
+-# PROP BASE Intermediate_Dir ".\Debug"
+-# PROP BASE Target_Dir "."
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 1
+-# PROP Output_Dir ".\Debug"
+-# PROP Intermediate_Dir ".\Debug"
+-# PROP Ignore_Export_Lib 0
+-# PROP Target_Dir "."
+-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllexport) /YX /FD /c
+-# ADD BASE MTL /nologo /D "_DEBUG" /win32
+-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+-# ADD BASE RSC /l 0x809 /d "_DEBUG"
+-# ADD RSC /l 0x809 /d "_DEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
+-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\dbgbin\xmltok.dll"
+-
+-!ENDIF
+-
+-# Begin Target
+-
+-# Name "xmltok - Win32 Release"
+-# Name "xmltok - Win32 Debug"
+-# Begin Group "Source Files"
+-
+-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90"
+-# Begin Source File
+-
+-SOURCE=.\dllmain.c
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmlrole.c
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmltok.c
+-# End Source File
+-# End Group
+-# Begin Group "Header Files"
+-
+-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
+-# Begin Source File
+-
+-SOURCE=.\asciitab.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\iasciitab.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\latin1tab.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\nametab.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\utf8tab.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmldef.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmlrole.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmltok.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmltok_impl.c
+-# PROP BASE Exclude_From_Build 1
+-# PROP Exclude_From_Build 1
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmltok_impl.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmltok_ns.c
+-# PROP Exclude_From_Build 1
+-# End Source File
+-# End Group
+-# Begin Group "Resource Files"
+-
+-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+-# End Group
+-# End Target
+-# End Project
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmltok.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmltok.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,307 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#ifndef XmlTok_INCLUDED
+-#define XmlTok_INCLUDED 1
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-#ifndef XMLTOKAPI
+-#define XMLTOKAPI /* as nothing */
+-#endif
+-
+-/* The following token may be returned by XmlContentTok */
+-#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be start of
+- illegal ]]> sequence */
+-/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */
+-#define XML_TOK_NONE -4 /* The string to be scanned is empty */
+-#define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan;
+- might be part of CRLF sequence */
+-#define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
+-#define XML_TOK_PARTIAL -1 /* only part of a token */
+-#define XML_TOK_INVALID 0
+-
+-/* The following tokens are returned by XmlContentTok; some are also
+- returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok */
+-
+-#define XML_TOK_START_TAG_WITH_ATTS 1
+-#define XML_TOK_START_TAG_NO_ATTS 2
+-#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
+-#define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4
+-#define XML_TOK_END_TAG 5
+-#define XML_TOK_DATA_CHARS 6
+-#define XML_TOK_DATA_NEWLINE 7
+-#define XML_TOK_CDATA_SECT_OPEN 8
+-#define XML_TOK_ENTITY_REF 9
+-#define XML_TOK_CHAR_REF 10 /* numeric character reference */
+-
+-/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */
+-#define XML_TOK_PI 11 /* processing instruction */
+-#define XML_TOK_XML_DECL 12 /* XML decl or text decl */
+-#define XML_TOK_COMMENT 13
+-#define XML_TOK_BOM 14 /* Byte order mark */
+-
+-/* The following tokens are returned only by XmlPrologTok */
+-#define XML_TOK_PROLOG_S 15
+-#define XML_TOK_DECL_OPEN 16 /* <!foo */
+-#define XML_TOK_DECL_CLOSE 17 /* > */
+-#define XML_TOK_NAME 18
+-#define XML_TOK_NMTOKEN 19
+-#define XML_TOK_POUND_NAME 20 /* #name */
+-#define XML_TOK_OR 21 /* | */
+-#define XML_TOK_PERCENT 22
+-#define XML_TOK_OPEN_PAREN 23
+-#define XML_TOK_CLOSE_PAREN 24
+-#define XML_TOK_OPEN_BRACKET 25
+-#define XML_TOK_CLOSE_BRACKET 26
+-#define XML_TOK_LITERAL 27
+-#define XML_TOK_PARAM_ENTITY_REF 28
+-#define XML_TOK_INSTANCE_START 29
+-
+-/* The following occur only in element type declarations */
+-#define XML_TOK_NAME_QUESTION 30 /* name? */
+-#define XML_TOK_NAME_ASTERISK 31 /* name* */
+-#define XML_TOK_NAME_PLUS 32 /* name+ */
+-#define XML_TOK_COND_SECT_OPEN 33 /* <![ */
+-#define XML_TOK_COND_SECT_CLOSE 34 /* ]]> */
+-#define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */
+-#define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
+-#define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */
+-#define XML_TOK_COMMA 38
+-
+-/* The following token is returned only by XmlAttributeValueTok */
+-#define XML_TOK_ATTRIBUTE_VALUE_S 39
+-
+-/* The following token is returned only by XmlCdataSectionTok */
+-#define XML_TOK_CDATA_SECT_CLOSE 40
+-
+-/* With namespace processing this is returned by XmlPrologTok
+- for a name with a colon. */
+-#define XML_TOK_PREFIXED_NAME 41
+-
+-#define XML_N_STATES 3
+-#define XML_PROLOG_STATE 0
+-#define XML_CONTENT_STATE 1
+-#define XML_CDATA_SECTION_STATE 2
+-
+-#define XML_N_LITERAL_TYPES 2
+-#define XML_ATTRIBUTE_VALUE_LITERAL 0
+-#define XML_ENTITY_VALUE_LITERAL 1
+-
+-/* The size of the buffer passed to XmlUtf8Encode must be at least this. */
+-#define XML_UTF8_ENCODE_MAX 4
+-/* The size of the buffer passed to XmlUtf16Encode must be at least this. */
+-#define XML_UTF16_ENCODE_MAX 2
+-
+-typedef struct position {
+- /* first line and first column are 0 not 1 */
+- unsigned long lineNumber;
+- unsigned long columnNumber;
+-} POSITION;
+-
+-typedef struct {
+- const char *name;
+- const char *valuePtr;
+- const char *valueEnd;
+- char normalized;
+-} ATTRIBUTE;
+-
+-struct encoding;
+-typedef struct encoding ENCODING;
+-
+-struct encoding {
+- int (*scanners[XML_N_STATES])(const ENCODING *,
+- const char *,
+- const char *,
+- const char **);
+- int (*literalScanners[XML_N_LITERAL_TYPES])(const ENCODING *,
+- const char *,
+- const char *,
+- const char **);
+- int (*sameName)(const ENCODING *,
+- const char *, const char *);
+- int (*nameMatchesAscii)(const ENCODING *,
+- const char *, const char *);
+- int (*nameLength)(const ENCODING *, const char *);
+- const char *(*skipS)(const ENCODING *, const char *);
+- int (*getAtts)(const ENCODING *enc, const char *ptr,
+- int attsMax, ATTRIBUTE *atts);
+- int (*charRefNumber)(const ENCODING *enc, const char *ptr);
+- int (*predefinedEntityName)(const ENCODING *, const char *, const char *);
+- void (*updatePosition)(const ENCODING *,
+- const char *ptr,
+- const char *end,
+- POSITION *);
+- int (*isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **badPtr);
+- void (*utf8Convert)(const ENCODING *enc,
+- const char **fromP,
+- const char *fromLim,
+- char **toP,
+- const char *toLim);
+- void (*utf16Convert)(const ENCODING *enc,
+- const char **fromP,
+- const char *fromLim,
+- unsigned short **toP,
+- const unsigned short *toLim);
+- int minBytesPerChar;
+- char isUtf8;
+- char isUtf16;
+-};
+-
+-/*
+-Scan the string starting at ptr until the end of the next complete token,
+-but do not scan past eptr. Return an integer giving the type of token.
+-
+-Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set.
+-
+-Return XML_TOK_PARTIAL when the string does not contain a complete token;
+-nextTokPtr will not be set.
+-
+-Return XML_TOK_INVALID when the string does not start a valid token; nextTokPtr
+-will be set to point to the character which made the token invalid.
+-
+-Otherwise the string starts with a valid token; nextTokPtr will be set to point
+-to the character following the end of that token.
+-
+-Each data character counts as a single token, but adjacent data characters
+-may be returned together. Similarly for characters in the prolog outside
+-literals, comments and processing instructions.
+-*/
+-
+-
+-#define XmlTok(enc, state, ptr, end, nextTokPtr) \
+- (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
+-
+-#define XmlPrologTok(enc, ptr, end, nextTokPtr) \
+- XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
+-
+-#define XmlContentTok(enc, ptr, end, nextTokPtr) \
+- XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr)
+-
+-#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \
+- XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr)
+-
+-/* This is used for performing a 2nd-level tokenization on
+-the content of a literal that has already been returned by XmlTok. */
+-
+-#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \
+- (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
+-
+-#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \
+- XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr)
+-
+-#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \
+- XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr)
+-
+-#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2))
+-
+-#define XmlNameMatchesAscii(enc, ptr1, ptr2) \
+- (((enc)->nameMatchesAscii)(enc, ptr1, ptr2))
+-
+-#define XmlNameLength(enc, ptr) \
+- (((enc)->nameLength)(enc, ptr))
+-
+-#define XmlSkipS(enc, ptr) \
+- (((enc)->skipS)(enc, ptr))
+-
+-#define XmlGetAttributes(enc, ptr, attsMax, atts) \
+- (((enc)->getAtts)(enc, ptr, attsMax, atts))
+-
+-#define XmlCharRefNumber(enc, ptr) \
+- (((enc)->charRefNumber)(enc, ptr))
+-
+-#define XmlPredefinedEntityName(enc, ptr, end) \
+- (((enc)->predefinedEntityName)(enc, ptr, end))
+-
+-#define XmlUpdatePosition(enc, ptr, end, pos) \
+- (((enc)->updatePosition)(enc, ptr, end, pos))
+-
+-#define XmlIsPublicId(enc, ptr, end, badPtr) \
+- (((enc)->isPublicId)(enc, ptr, end, badPtr))
+-
+-#define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \
+- (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
+-
+-#define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \
+- (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim))
+-
+-typedef struct {
+- ENCODING initEnc;
+- const ENCODING **encPtr;
+-} INIT_ENCODING;
+-
+-int XMLTOKAPI XmlParseXmlDecl(int isGeneralTextEntity,
+- const ENCODING *enc,
+- const char *ptr,
+- const char *end,
+- const char **badPtr,
+- const char **versionPtr,
+- const char **encodingNamePtr,
+- const ENCODING **namedEncodingPtr,
+- int *standalonePtr);
+-
+-int XMLTOKAPI XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name);
+-const ENCODING XMLTOKAPI *XmlGetUtf8InternalEncoding();
+-const ENCODING XMLTOKAPI *XmlGetUtf16InternalEncoding();
+-int XMLTOKAPI XmlUtf8Encode(int charNumber, char *buf);
+-int XMLTOKAPI XmlUtf16Encode(int charNumber, unsigned short *buf);
+-
+-int XMLTOKAPI XmlSizeOfUnknownEncoding();
+-ENCODING XMLTOKAPI *
+-XmlInitUnknownEncoding(void *mem,
+- int *table,
+- int (*conv)(void *userData, const char *p),
+- void *userData);
+-
+-int XMLTOKAPI XmlParseXmlDeclNS(int isGeneralTextEntity,
+- const ENCODING *enc,
+- const char *ptr,
+- const char *end,
+- const char **badPtr,
+- const char **versionPtr,
+- const char **encodingNamePtr,
+- const ENCODING **namedEncodingPtr,
+- int *standalonePtr);
+-int XMLTOKAPI XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name);
+-const ENCODING XMLTOKAPI *XmlGetUtf8InternalEncodingNS();
+-const ENCODING XMLTOKAPI *XmlGetUtf16InternalEncodingNS();
+-ENCODING XMLTOKAPI *
+-XmlInitUnknownEncodingNS(void *mem,
+- int *table,
+- int (*conv)(void *userData, const char *p),
+- void *userData);
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif /* not XmlTok_INCLUDED */
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmltok_impl.c dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok_impl.c
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmltok_impl.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok_impl.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,1746 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#ifndef IS_INVALID_CHAR
+-#define IS_INVALID_CHAR(enc, ptr, n) (0)
+-#endif
+-
+-#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \
+- case BT_LEAD ## n: \
+- if (end - ptr < n) \
+- return XML_TOK_PARTIAL_CHAR; \
+- if (IS_INVALID_CHAR(enc, ptr, n)) { \
+- *(nextTokPtr) = (ptr); \
+- return XML_TOK_INVALID; \
+- } \
+- ptr += n; \
+- break;
+-
+-#define INVALID_CASES(ptr, nextTokPtr) \
+- INVALID_LEAD_CASE(2, ptr, nextTokPtr) \
+- INVALID_LEAD_CASE(3, ptr, nextTokPtr) \
+- INVALID_LEAD_CASE(4, ptr, nextTokPtr) \
+- case BT_NONXML: \
+- case BT_MALFORM: \
+- case BT_TRAIL: \
+- *(nextTokPtr) = (ptr); \
+- return XML_TOK_INVALID;
+-
+-#define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \
+- case BT_LEAD ## n: \
+- if (end - ptr < n) \
+- return XML_TOK_PARTIAL_CHAR; \
+- if (!IS_NAME_CHAR(enc, ptr, n)) { \
+- *nextTokPtr = ptr; \
+- return XML_TOK_INVALID; \
+- } \
+- ptr += n; \
+- break;
+-
+-#define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \
+- case BT_NONASCII: \
+- if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \
+- *nextTokPtr = ptr; \
+- return XML_TOK_INVALID; \
+- } \
+- case BT_NMSTRT: \
+- case BT_HEX: \
+- case BT_DIGIT: \
+- case BT_NAME: \
+- case BT_MINUS: \
+- ptr += MINBPC(enc); \
+- break; \
+- CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \
+- CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \
+- CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
+-
+-#define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \
+- case BT_LEAD ## n: \
+- if (end - ptr < n) \
+- return XML_TOK_PARTIAL_CHAR; \
+- if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \
+- *nextTokPtr = ptr; \
+- return XML_TOK_INVALID; \
+- } \
+- ptr += n; \
+- break;
+-
+-#define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \
+- case BT_NONASCII: \
+- if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \
+- *nextTokPtr = ptr; \
+- return XML_TOK_INVALID; \
+- } \
+- case BT_NMSTRT: \
+- case BT_HEX: \
+- ptr += MINBPC(enc); \
+- break; \
+- CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \
+- CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \
+- CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
+-
+-#ifndef PREFIX
+-#define PREFIX(ident) ident
+-#endif
+-
+-/* ptr points to character following "<!-" */
+-
+-static
+-int PREFIX(scanComment)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr != end) {
+- if (!CHAR_MATCHES(enc, ptr, '-')) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- ptr += MINBPC(enc);
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- INVALID_CASES(ptr, nextTokPtr)
+- case BT_MINUS:
+- if ((ptr += MINBPC(enc)) == end)
+- return XML_TOK_PARTIAL;
+- if (CHAR_MATCHES(enc, ptr, '-')) {
+- if ((ptr += MINBPC(enc)) == end)
+- return XML_TOK_PARTIAL;
+- if (!CHAR_MATCHES(enc, ptr, '>')) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_COMMENT;
+- }
+- break;
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-/* ptr points to character following "<!" */
+-
+-static
+-int PREFIX(scanDecl)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_MINUS:
+- return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_LSQB:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_COND_SECT_OPEN;
+- case BT_NMSTRT:
+- case BT_HEX:
+- ptr += MINBPC(enc);
+- break;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_PERCNT:
+- if (ptr + MINBPC(enc) == end)
+- return XML_TOK_PARTIAL;
+- /* don't allow <!ENTITY% foo "whatever"> */
+- switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
+- case BT_S: case BT_CR: case BT_LF: case BT_PERCNT:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- /* fall through */
+- case BT_S: case BT_CR: case BT_LF:
+- *nextTokPtr = ptr;
+- return XML_TOK_DECL_OPEN;
+- case BT_NMSTRT:
+- case BT_HEX:
+- ptr += MINBPC(enc);
+- break;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-static
+-int PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end, int *tokPtr)
+-{
+- int upper = 0;
+- *tokPtr = XML_TOK_PI;
+- if (end - ptr != MINBPC(enc)*3)
+- return 1;
+- switch (BYTE_TO_ASCII(enc, ptr)) {
+- case 'x':
+- break;
+- case 'X':
+- upper = 1;
+- break;
+- default:
+- return 1;
+- }
+- ptr += MINBPC(enc);
+- switch (BYTE_TO_ASCII(enc, ptr)) {
+- case 'm':
+- break;
+- case 'M':
+- upper = 1;
+- break;
+- default:
+- return 1;
+- }
+- ptr += MINBPC(enc);
+- switch (BYTE_TO_ASCII(enc, ptr)) {
+- case 'l':
+- break;
+- case 'L':
+- upper = 1;
+- break;
+- default:
+- return 1;
+- }
+- if (upper)
+- return 0;
+- *tokPtr = XML_TOK_XML_DECL;
+- return 1;
+-}
+-
+-/* ptr points to character following "<?" */
+-
+-static
+-int PREFIX(scanPi)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- int tok;
+- const char *target = ptr;
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+- case BT_S: case BT_CR: case BT_LF:
+- if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- ptr += MINBPC(enc);
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- INVALID_CASES(ptr, nextTokPtr)
+- case BT_QUEST:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- if (CHAR_MATCHES(enc, ptr, '>')) {
+- *nextTokPtr = ptr + MINBPC(enc);
+- return tok;
+- }
+- break;
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- }
+- return XML_TOK_PARTIAL;
+- case BT_QUEST:
+- if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- if (CHAR_MATCHES(enc, ptr, '>')) {
+- *nextTokPtr = ptr + MINBPC(enc);
+- return tok;
+- }
+- /* fall through */
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-
+-static
+-int PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- int i;
+- /* CDATA[ */
+- if (end - ptr < 6 * MINBPC(enc))
+- return XML_TOK_PARTIAL;
+- for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
+- if (!CHAR_MATCHES(enc, ptr, "CDATA["[i])) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_CDATA_SECT_OPEN;
+-}
+-
+-static
+-int PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr == end)
+- return XML_TOK_NONE;
+- if (MINBPC(enc) > 1) {
+- size_t n = end - ptr;
+- if (n & (MINBPC(enc) - 1)) {
+- n &= ~(MINBPC(enc) - 1);
+- if (n == 0)
+- return XML_TOK_PARTIAL;
+- end = ptr + n;
+- }
+- }
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_RSQB:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- if (!CHAR_MATCHES(enc, ptr, ']'))
+- break;
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- if (!CHAR_MATCHES(enc, ptr, '>')) {
+- ptr -= MINBPC(enc);
+- break;
+- }
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_CDATA_SECT_CLOSE;
+- case BT_CR:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- if (BYTE_TYPE(enc, ptr) == BT_LF)
+- ptr += MINBPC(enc);
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_NEWLINE;
+- case BT_LF:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_DATA_NEWLINE;
+- INVALID_CASES(ptr, nextTokPtr)
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: \
+- if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
+- *nextTokPtr = ptr; \
+- return XML_TOK_DATA_CHARS; \
+- } \
+- ptr += n; \
+- break;
+- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
+-#undef LEAD_CASE
+- case BT_NONXML:
+- case BT_MALFORM:
+- case BT_TRAIL:
+- case BT_CR:
+- case BT_LF:
+- case BT_RSQB:
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+-}
+-
+-/* ptr points to character following "</" */
+-
+-static
+-int PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+- case BT_S: case BT_CR: case BT_LF:
+- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_S: case BT_CR: case BT_LF:
+- break;
+- case BT_GT:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_END_TAG;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-#ifdef XML_NS
+- case BT_COLON:
+- /* no need to check qname syntax here, since end-tag must match exactly */
+- ptr += MINBPC(enc);
+- break;
+-#endif
+- case BT_GT:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_END_TAG;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-/* ptr points to character following "&#X" */
+-
+-static
+-int PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_DIGIT:
+- case BT_HEX:
+- break;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_DIGIT:
+- case BT_HEX:
+- break;
+- case BT_SEMI:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_CHAR_REF;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-/* ptr points to character following "&#" */
+-
+-static
+-int PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr != end) {
+- if (CHAR_MATCHES(enc, ptr, 'x'))
+- return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_DIGIT:
+- break;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_DIGIT:
+- break;
+- case BT_SEMI:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_CHAR_REF;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-/* ptr points to character following "&" */
+-
+-static
+-int PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- case BT_NUM:
+- return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+- case BT_SEMI:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_ENTITY_REF;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-/* ptr points to character following first character of attribute name */
+-
+-static
+-int PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+-#ifdef XML_NS
+- int hadColon = 0;
+-#endif
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+-#ifdef XML_NS
+- case BT_COLON:
+- if (hadColon) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- hadColon = 1;
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- break;
+-#endif
+- case BT_S: case BT_CR: case BT_LF:
+- for (;;) {
+- int t;
+-
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- t = BYTE_TYPE(enc, ptr);
+- if (t == BT_EQUALS)
+- break;
+- switch (t) {
+- case BT_S:
+- case BT_LF:
+- case BT_CR:
+- break;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- /* fall through */
+- case BT_EQUALS:
+- {
+- int open;
+-#ifdef XML_NS
+- hadColon = 0;
+-#endif
+- for (;;) {
+-
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- open = BYTE_TYPE(enc, ptr);
+- if (open == BT_QUOT || open == BT_APOS)
+- break;
+- switch (open) {
+- case BT_S:
+- case BT_LF:
+- case BT_CR:
+- break;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- ptr += MINBPC(enc);
+- /* in attribute value */
+- for (;;) {
+- int t;
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- t = BYTE_TYPE(enc, ptr);
+- if (t == open)
+- break;
+- switch (t) {
+- INVALID_CASES(ptr, nextTokPtr)
+- case BT_AMP:
+- {
+- int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
+- if (tok <= 0) {
+- if (tok == XML_TOK_INVALID)
+- *nextTokPtr = ptr;
+- return tok;
+- }
+- break;
+- }
+- case BT_LT:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- }
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_S:
+- case BT_CR:
+- case BT_LF:
+- break;
+- case BT_SOL:
+- goto sol;
+- case BT_GT:
+- goto gt;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- /* ptr points to closing quote */
+- for (;;) {
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- case BT_S: case BT_CR: case BT_LF:
+- continue;
+- case BT_GT:
+- gt:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_START_TAG_WITH_ATTS;
+- case BT_SOL:
+- sol:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- if (!CHAR_MATCHES(enc, ptr, '>')) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- break;
+- }
+- break;
+- }
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-/* ptr points to character following "<" */
+-
+-static
+-int PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+-#ifdef XML_NS
+- int hadColon;
+-#endif
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- case BT_EXCL:
+- if ((ptr += MINBPC(enc)) == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_MINUS:
+- return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_LSQB:
+- return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- case BT_QUEST:
+- return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_SOL:
+- return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+-#ifdef XML_NS
+- hadColon = 0;
+-#endif
+- /* we have a start-tag */
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+-#ifdef XML_NS
+- case BT_COLON:
+- if (hadColon) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- hadColon = 1;
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- break;
+-#endif
+- case BT_S: case BT_CR: case BT_LF:
+- {
+- ptr += MINBPC(enc);
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- case BT_GT:
+- goto gt;
+- case BT_SOL:
+- goto sol;
+- case BT_S: case BT_CR: case BT_LF:
+- ptr += MINBPC(enc);
+- continue;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
+- }
+- return XML_TOK_PARTIAL;
+- }
+- case BT_GT:
+- gt:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_START_TAG_NO_ATTS;
+- case BT_SOL:
+- sol:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- if (!CHAR_MATCHES(enc, ptr, '>')) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-static
+-int PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr == end)
+- return XML_TOK_NONE;
+- if (MINBPC(enc) > 1) {
+- size_t n = end - ptr;
+- if (n & (MINBPC(enc) - 1)) {
+- n &= ~(MINBPC(enc) - 1);
+- if (n == 0)
+- return XML_TOK_PARTIAL;
+- end = ptr + n;
+- }
+- }
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_LT:
+- return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_AMP:
+- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_CR:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_TRAILING_CR;
+- if (BYTE_TYPE(enc, ptr) == BT_LF)
+- ptr += MINBPC(enc);
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_NEWLINE;
+- case BT_LF:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_DATA_NEWLINE;
+- case BT_RSQB:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_TRAILING_RSQB;
+- if (!CHAR_MATCHES(enc, ptr, ']'))
+- break;
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_TRAILING_RSQB;
+- if (!CHAR_MATCHES(enc, ptr, '>')) {
+- ptr -= MINBPC(enc);
+- break;
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- INVALID_CASES(ptr, nextTokPtr)
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: \
+- if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
+- *nextTokPtr = ptr; \
+- return XML_TOK_DATA_CHARS; \
+- } \
+- ptr += n; \
+- break;
+- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
+-#undef LEAD_CASE
+- case BT_RSQB:
+- if (ptr + MINBPC(enc) != end) {
+- if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ']')) {
+- ptr += MINBPC(enc);
+- break;
+- }
+- if (ptr + 2*MINBPC(enc) != end) {
+- if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), '>')) {
+- ptr += MINBPC(enc);
+- break;
+- }
+- *nextTokPtr = ptr + 2*MINBPC(enc);
+- return XML_TOK_INVALID;
+- }
+- }
+- /* fall through */
+- case BT_AMP:
+- case BT_LT:
+- case BT_NONXML:
+- case BT_MALFORM:
+- case BT_TRAIL:
+- case BT_CR:
+- case BT_LF:
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+-}
+-
+-/* ptr points to character following "%" */
+-
+-static
+-int PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- case BT_S: case BT_LF: case BT_CR: case BT_PERCNT:
+- *nextTokPtr = ptr;
+- return XML_TOK_PERCENT;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+- case BT_SEMI:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_PARAM_ENTITY_REF;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-static
+-int PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+- case BT_CR: case BT_LF: case BT_S:
+- case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR:
+- *nextTokPtr = ptr;
+- return XML_TOK_POUND_NAME;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-static
+-int PREFIX(scanLit)(int open, const ENCODING *enc,
+- const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- while (ptr != end) {
+- int t = BYTE_TYPE(enc, ptr);
+- switch (t) {
+- INVALID_CASES(ptr, nextTokPtr)
+- case BT_QUOT:
+- case BT_APOS:
+- ptr += MINBPC(enc);
+- if (t != open)
+- break;
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- *nextTokPtr = ptr;
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_S: case BT_CR: case BT_LF:
+- case BT_GT: case BT_PERCNT: case BT_LSQB:
+- return XML_TOK_LITERAL;
+- default:
+- return XML_TOK_INVALID;
+- }
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-static
+-int PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- int tok;
+- if (ptr == end)
+- return XML_TOK_NONE;
+- if (MINBPC(enc) > 1) {
+- size_t n = end - ptr;
+- if (n & (MINBPC(enc) - 1)) {
+- n &= ~(MINBPC(enc) - 1);
+- if (n == 0)
+- return XML_TOK_PARTIAL;
+- end = ptr + n;
+- }
+- }
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_QUOT:
+- return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_APOS:
+- return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_LT:
+- {
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_EXCL:
+- return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_QUEST:
+- return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_NMSTRT:
+- case BT_HEX:
+- case BT_NONASCII:
+- case BT_LEAD2:
+- case BT_LEAD3:
+- case BT_LEAD4:
+- *nextTokPtr = ptr - MINBPC(enc);
+- return XML_TOK_INSTANCE_START;
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- case BT_CR:
+- if (ptr + MINBPC(enc) == end)
+- return XML_TOK_TRAILING_CR;
+- /* fall through */
+- case BT_S: case BT_LF:
+- for (;;) {
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- break;
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_S: case BT_LF:
+- break;
+- case BT_CR:
+- /* don't split CR/LF pair */
+- if (ptr + MINBPC(enc) != end)
+- break;
+- /* fall through */
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_PROLOG_S;
+- }
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_PROLOG_S;
+- case BT_PERCNT:
+- return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- case BT_COMMA:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_COMMA;
+- case BT_LSQB:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_OPEN_BRACKET;
+- case BT_RSQB:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- if (CHAR_MATCHES(enc, ptr, ']')) {
+- if (ptr + MINBPC(enc) == end)
+- return XML_TOK_PARTIAL;
+- if (CHAR_MATCHES(enc, ptr + MINBPC(enc), '>')) {
+- *nextTokPtr = ptr + 2*MINBPC(enc);
+- return XML_TOK_COND_SECT_CLOSE;
+- }
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_CLOSE_BRACKET;
+- case BT_LPAR:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_OPEN_PAREN;
+- case BT_RPAR:
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_AST:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_CLOSE_PAREN_ASTERISK;
+- case BT_QUEST:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_CLOSE_PAREN_QUESTION;
+- case BT_PLUS:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_CLOSE_PAREN_PLUS;
+- case BT_CR: case BT_LF: case BT_S:
+- case BT_GT: case BT_COMMA: case BT_VERBAR:
+- case BT_RPAR:
+- *nextTokPtr = ptr;
+- return XML_TOK_CLOSE_PAREN;
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- case BT_VERBAR:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_OR;
+- case BT_GT:
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_DECL_CLOSE;
+- case BT_NUM:
+- return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: \
+- if (end - ptr < n) \
+- return XML_TOK_PARTIAL_CHAR; \
+- if (IS_NMSTRT_CHAR(enc, ptr, n)) { \
+- ptr += n; \
+- tok = XML_TOK_NAME; \
+- break; \
+- } \
+- if (IS_NAME_CHAR(enc, ptr, n)) { \
+- ptr += n; \
+- tok = XML_TOK_NMTOKEN; \
+- break; \
+- } \
+- *nextTokPtr = ptr; \
+- return XML_TOK_INVALID;
+- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
+-#undef LEAD_CASE
+- case BT_NMSTRT:
+- case BT_HEX:
+- tok = XML_TOK_NAME;
+- ptr += MINBPC(enc);
+- break;
+- case BT_DIGIT:
+- case BT_NAME:
+- case BT_MINUS:
+-#ifdef XML_NS
+- case BT_COLON:
+-#endif
+- tok = XML_TOK_NMTOKEN;
+- ptr += MINBPC(enc);
+- break;
+- case BT_NONASCII:
+- if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
+- ptr += MINBPC(enc);
+- tok = XML_TOK_NAME;
+- break;
+- }
+- if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
+- ptr += MINBPC(enc);
+- tok = XML_TOK_NMTOKEN;
+- break;
+- }
+- /* fall through */
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+- case BT_GT: case BT_RPAR: case BT_COMMA:
+- case BT_VERBAR: case BT_LSQB: case BT_PERCNT:
+- case BT_S: case BT_CR: case BT_LF:
+- *nextTokPtr = ptr;
+- return tok;
+-#ifdef XML_NS
+- case BT_COLON:
+- ptr += MINBPC(enc);
+- switch (tok) {
+- case XML_TOK_NAME:
+- if (ptr == end)
+- return XML_TOK_PARTIAL;
+- tok = XML_TOK_PREFIXED_NAME;
+- switch (BYTE_TYPE(enc, ptr)) {
+- CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
+- default:
+- tok = XML_TOK_NMTOKEN;
+- break;
+- }
+- break;
+- case XML_TOK_PREFIXED_NAME:
+- tok = XML_TOK_NMTOKEN;
+- break;
+- }
+- break;
+-#endif
+- case BT_PLUS:
+- if (tok == XML_TOK_NMTOKEN) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_NAME_PLUS;
+- case BT_AST:
+- if (tok == XML_TOK_NMTOKEN) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_NAME_ASTERISK;
+- case BT_QUEST:
+- if (tok == XML_TOK_NMTOKEN) {
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_NAME_QUESTION;
+- default:
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- }
+- }
+- return XML_TOK_PARTIAL;
+-}
+-
+-static
+-int PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- const char *start;
+- if (ptr == end)
+- return XML_TOK_NONE;
+- start = ptr;
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: ptr += n; break;
+- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
+-#undef LEAD_CASE
+- case BT_AMP:
+- if (ptr == start)
+- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- case BT_LT:
+- /* this is for inside entity references */
+- *nextTokPtr = ptr;
+- return XML_TOK_INVALID;
+- case BT_LF:
+- if (ptr == start) {
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_DATA_NEWLINE;
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- case BT_CR:
+- if (ptr == start) {
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_TRAILING_CR;
+- if (BYTE_TYPE(enc, ptr) == BT_LF)
+- ptr += MINBPC(enc);
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_NEWLINE;
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- case BT_S:
+- if (ptr == start) {
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_ATTRIBUTE_VALUE_S;
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+-}
+-
+-static
+-int PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- const char *start;
+- if (ptr == end)
+- return XML_TOK_NONE;
+- start = ptr;
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: ptr += n; break;
+- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
+-#undef LEAD_CASE
+- case BT_AMP:
+- if (ptr == start)
+- return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- case BT_PERCNT:
+- if (ptr == start)
+- return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- case BT_LF:
+- if (ptr == start) {
+- *nextTokPtr = ptr + MINBPC(enc);
+- return XML_TOK_DATA_NEWLINE;
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- case BT_CR:
+- if (ptr == start) {
+- ptr += MINBPC(enc);
+- if (ptr == end)
+- return XML_TOK_TRAILING_CR;
+- if (BYTE_TYPE(enc, ptr) == BT_LF)
+- ptr += MINBPC(enc);
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_NEWLINE;
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- }
+- *nextTokPtr = ptr;
+- return XML_TOK_DATA_CHARS;
+-}
+-
+-static
+-int PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **badPtr)
+-{
+- ptr += MINBPC(enc);
+- end -= MINBPC(enc);
+- for (; ptr != end; ptr += MINBPC(enc)) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_DIGIT:
+- case BT_HEX:
+- case BT_MINUS:
+- case BT_APOS:
+- case BT_LPAR:
+- case BT_RPAR:
+- case BT_PLUS:
+- case BT_COMMA:
+- case BT_SOL:
+- case BT_EQUALS:
+- case BT_QUEST:
+- case BT_CR:
+- case BT_LF:
+- case BT_SEMI:
+- case BT_EXCL:
+- case BT_AST:
+- case BT_PERCNT:
+- case BT_NUM:
+-#ifdef XML_NS
+- case BT_COLON:
+-#endif
+- break;
+- case BT_S:
+- if (CHAR_MATCHES(enc, ptr, '\t')) {
+- *badPtr = ptr;
+- return 0;
+- }
+- break;
+- case BT_NAME:
+- case BT_NMSTRT:
+- if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f))
+- break;
+- default:
+- switch (BYTE_TO_ASCII(enc, ptr)) {
+- case 0x24: /* $ */
+- case 0x40: /* @ */
+- break;
+- default:
+- *badPtr = ptr;
+- return 0;
+- }
+- break;
+- }
+- }
+- return 1;
+-}
+-
+-/* This must only be called for a well-formed start-tag or empty element tag.
+-Returns the number of attributes. Pointers to the first attsMax attributes
+-are stored in atts. */
+-
+-static
+-int PREFIX(getAtts)(const ENCODING *enc, const char *ptr,
+- int attsMax, ATTRIBUTE *atts)
+-{
+- enum { other, inName, inValue } state = inName;
+- int nAtts = 0;
+- int open;
+-
+- for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
+- switch (BYTE_TYPE(enc, ptr)) {
+-#define START_NAME \
+- if (state == other) { \
+- if (nAtts < attsMax) { \
+- atts[nAtts].name = ptr; \
+- atts[nAtts].normalized = 1; \
+- } \
+- state = inName; \
+- }
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break;
+- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
+-#undef LEAD_CASE
+- case BT_NONASCII:
+- case BT_NMSTRT:
+- case BT_HEX:
+- START_NAME
+- break;
+-#undef START_NAME
+- case BT_QUOT:
+- if (state != inValue) {
+- if (nAtts < attsMax)
+- atts[nAtts].valuePtr = ptr + MINBPC(enc);
+- state = inValue;
+- open = BT_QUOT;
+- }
+- else if (open == BT_QUOT) {
+- state = other;
+- if (nAtts < attsMax)
+- atts[nAtts].valueEnd = ptr;
+- nAtts++;
+- }
+- break;
+- case BT_APOS:
+- if (state != inValue) {
+- if (nAtts < attsMax)
+- atts[nAtts].valuePtr = ptr + MINBPC(enc);
+- state = inValue;
+- open = BT_APOS;
+- }
+- else if (open == BT_APOS) {
+- state = other;
+- if (nAtts < attsMax)
+- atts[nAtts].valueEnd = ptr;
+- nAtts++;
+- }
+- break;
+- case BT_AMP:
+- if (nAtts < attsMax)
+- atts[nAtts].normalized = 0;
+- break;
+- case BT_S:
+- if (state == inName)
+- state = other;
+- else if (state == inValue
+- && nAtts < attsMax
+- && atts[nAtts].normalized
+- && (ptr == atts[nAtts].valuePtr
+- || BYTE_TO_ASCII(enc, ptr) != ' '
+- || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ' '
+- || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
+- atts[nAtts].normalized = 0;
+- break;
+- case BT_CR: case BT_LF:
+- /* This case ensures that the first attribute name is counted
+- Apart from that we could just change state on the quote. */
+- if (state == inName)
+- state = other;
+- else if (state == inValue && nAtts < attsMax)
+- atts[nAtts].normalized = 0;
+- break;
+- case BT_GT:
+- case BT_SOL:
+- if (state != inValue)
+- return nAtts;
+- break;
+- default:
+- break;
+- }
+- }
+- /* not reached */
+-}
+-
+-static
+-int PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
+-{
+- int result = 0;
+- /* skip &# */
+- ptr += 2*MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 'x')) {
+- for (ptr += MINBPC(enc); !CHAR_MATCHES(enc, ptr, ';'); ptr += MINBPC(enc)) {
+- int c = BYTE_TO_ASCII(enc, ptr);
+- switch (c) {
+- case '0': case '1': case '2': case '3': case '4':
+- case '5': case '6': case '7': case '8': case '9':
+- result <<= 4;
+- result |= (c - '0');
+- break;
+- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+- result <<= 4;
+- result += 10 + (c - 'A');
+- break;
+- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+- result <<= 4;
+- result += 10 + (c - 'a');
+- break;
+- }
+- if (result >= 0x110000)
+- return -1;
+- }
+- }
+- else {
+- for (; !CHAR_MATCHES(enc, ptr, ';'); ptr += MINBPC(enc)) {
+- int c = BYTE_TO_ASCII(enc, ptr);
+- result *= 10;
+- result += (c - '0');
+- if (result >= 0x110000)
+- return -1;
+- }
+- }
+- return checkCharRefNumber(result);
+-}
+-
+-static
+-int PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, const char *end)
+-{
+- switch ((end - ptr)/MINBPC(enc)) {
+- case 2:
+- if (CHAR_MATCHES(enc, ptr + MINBPC(enc), 't')) {
+- switch (BYTE_TO_ASCII(enc, ptr)) {
+- case 'l':
+- return '<';
+- case 'g':
+- return '>';
+- }
+- }
+- break;
+- case 3:
+- if (CHAR_MATCHES(enc, ptr, 'a')) {
+- ptr += MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 'm')) {
+- ptr += MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 'p'))
+- return '&';
+- }
+- }
+- break;
+- case 4:
+- switch (BYTE_TO_ASCII(enc, ptr)) {
+- case 'q':
+- ptr += MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 'u')) {
+- ptr += MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 'o')) {
+- ptr += MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 't'))
+- return '"';
+- }
+- }
+- break;
+- case 'a':
+- ptr += MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 'p')) {
+- ptr += MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 'o')) {
+- ptr += MINBPC(enc);
+- if (CHAR_MATCHES(enc, ptr, 's'))
+- return '\'';
+- }
+- }
+- break;
+- }
+- }
+- return 0;
+-}
+-
+-static
+-int PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
+-{
+- for (;;) {
+- switch (BYTE_TYPE(enc, ptr1)) {
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: \
+- if (*ptr1++ != *ptr2++) \
+- return 0;
+- LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2)
+-#undef LEAD_CASE
+- /* fall through */
+- if (*ptr1++ != *ptr2++)
+- return 0;
+- break;
+- case BT_NONASCII:
+- case BT_NMSTRT:
+-#ifdef XML_NS
+- case BT_COLON:
+-#endif
+- case BT_HEX:
+- case BT_DIGIT:
+- case BT_NAME:
+- case BT_MINUS:
+- if (*ptr2++ != *ptr1++)
+- return 0;
+- if (MINBPC(enc) > 1) {
+- if (*ptr2++ != *ptr1++)
+- return 0;
+- if (MINBPC(enc) > 2) {
+- if (*ptr2++ != *ptr1++)
+- return 0;
+- if (MINBPC(enc) > 3) {
+- if (*ptr2++ != *ptr1++)
+- return 0;
+- }
+- }
+- }
+- break;
+- default:
+- if (MINBPC(enc) == 1 && *ptr1 == *ptr2)
+- return 1;
+- switch (BYTE_TYPE(enc, ptr2)) {
+- case BT_LEAD2:
+- case BT_LEAD3:
+- case BT_LEAD4:
+- case BT_NONASCII:
+- case BT_NMSTRT:
+-#ifdef XML_NS
+- case BT_COLON:
+-#endif
+- case BT_HEX:
+- case BT_DIGIT:
+- case BT_NAME:
+- case BT_MINUS:
+- return 0;
+- default:
+- return 1;
+- }
+- }
+- }
+- /* not reached */
+-}
+-
+-static
+-int PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1, const char *ptr2)
+-{
+- for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
+- if (!CHAR_MATCHES(enc, ptr1, *ptr2))
+- return 0;
+- }
+- switch (BYTE_TYPE(enc, ptr1)) {
+- case BT_LEAD2:
+- case BT_LEAD3:
+- case BT_LEAD4:
+- case BT_NONASCII:
+- case BT_NMSTRT:
+-#ifdef XML_NS
+- case BT_COLON:
+-#endif
+- case BT_HEX:
+- case BT_DIGIT:
+- case BT_NAME:
+- case BT_MINUS:
+- return 0;
+- default:
+- return 1;
+- }
+-}
+-
+-static
+-int PREFIX(nameLength)(const ENCODING *enc, const char *ptr)
+-{
+- const char *start = ptr;
+- for (;;) {
+- switch (BYTE_TYPE(enc, ptr)) {
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: ptr += n; break;
+- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
+-#undef LEAD_CASE
+- case BT_NONASCII:
+- case BT_NMSTRT:
+-#ifdef XML_NS
+- case BT_COLON:
+-#endif
+- case BT_HEX:
+- case BT_DIGIT:
+- case BT_NAME:
+- case BT_MINUS:
+- ptr += MINBPC(enc);
+- break;
+- default:
+- return ptr - start;
+- }
+- }
+-}
+-
+-static
+-const char *PREFIX(skipS)(const ENCODING *enc, const char *ptr)
+-{
+- for (;;) {
+- switch (BYTE_TYPE(enc, ptr)) {
+- case BT_LF:
+- case BT_CR:
+- case BT_S:
+- ptr += MINBPC(enc);
+- break;
+- default:
+- return ptr;
+- }
+- }
+-}
+-
+-static
+-void PREFIX(updatePosition)(const ENCODING *enc,
+- const char *ptr,
+- const char *end,
+- POSITION *pos)
+-{
+- while (ptr != end) {
+- switch (BYTE_TYPE(enc, ptr)) {
+-#define LEAD_CASE(n) \
+- case BT_LEAD ## n: \
+- ptr += n; \
+- break;
+- LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
+-#undef LEAD_CASE
+- case BT_LF:
+- pos->columnNumber = (unsigned)-1;
+- pos->lineNumber++;
+- ptr += MINBPC(enc);
+- break;
+- case BT_CR:
+- pos->lineNumber++;
+- ptr += MINBPC(enc);
+- if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF)
+- ptr += MINBPC(enc);
+- pos->columnNumber = (unsigned)-1;
+- break;
+- default:
+- ptr += MINBPC(enc);
+- break;
+- }
+- pos->columnNumber++;
+- }
+-}
+-
+-#undef DO_LEAD_CASE
+-#undef MULTIBYTE_CASES
+-#undef INVALID_CASES
+-#undef CHECK_NAME_CASE
+-#undef CHECK_NAME_CASES
+-#undef CHECK_NMSTRT_CASE
+-#undef CHECK_NMSTRT_CASES
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmltok_impl.h dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok_impl.h
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmltok_impl.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok_impl.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,71 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-enum {
+- BT_NONXML,
+- BT_MALFORM,
+- BT_LT,
+- BT_AMP,
+- BT_RSQB,
+- BT_LEAD2,
+- BT_LEAD3,
+- BT_LEAD4,
+- BT_TRAIL,
+- BT_CR,
+- BT_LF,
+- BT_GT,
+- BT_QUOT,
+- BT_APOS,
+- BT_EQUALS,
+- BT_QUEST,
+- BT_EXCL,
+- BT_SOL,
+- BT_SEMI,
+- BT_NUM,
+- BT_LSQB,
+- BT_S,
+- BT_NMSTRT,
+- BT_COLON,
+- BT_HEX,
+- BT_DIGIT,
+- BT_NAME,
+- BT_MINUS,
+- BT_OTHER, /* known not to be a name or name start character */
+- BT_NONASCII, /* might be a name or name start character */
+- BT_PERCNT,
+- BT_LPAR,
+- BT_RPAR,
+- BT_AST,
+- BT_PLUS,
+- BT_COMMA,
+- BT_VERBAR
+-};
+-
+-#include <stddef.h>
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmltok/xmltok_ns.c dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok_ns.c
+--- original/xmlrpc-epi-0.51/expat/xmltok/xmltok_ns.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmltok/xmltok_ns.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,96 +0,0 @@
+-const ENCODING *NS(XmlGetUtf8InternalEncoding)()
+-{
+- return &ns(internal_utf8_encoding).enc;
+-}
+-
+-const ENCODING *NS(XmlGetUtf16InternalEncoding)()
+-{
+-#if XML_BYTE_ORDER == 12
+- return &ns(internal_little2_encoding).enc;
+-#elif XML_BYTE_ORDER == 21
+- return &ns(internal_big2_encoding).enc;
+-#else
+- const short n = 1;
+- return *(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc;
+-#endif
+-}
+-
+-static
+-const ENCODING *NS(encodings)[] = {
+- &ns(latin1_encoding).enc,
+- &ns(ascii_encoding).enc,
+- &ns(utf8_encoding).enc,
+- &ns(big2_encoding).enc,
+- &ns(big2_encoding).enc,
+- &ns(little2_encoding).enc,
+- &ns(utf8_encoding).enc /* NO_ENC */
+-};
+-
+-static
+-int NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr);
+-}
+-
+-static
+-int NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
+- const char **nextTokPtr)
+-{
+- return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr);
+-}
+-
+-int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name)
+-{
+- int i = getEncodingIndex(name);
+- if (i == UNKNOWN_ENC)
+- return 0;
+- INIT_ENC_INDEX(p) = (char)i;
+- p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
+- p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
+- p->initEnc.updatePosition = initUpdatePosition;
+- p->encPtr = encPtr;
+- *encPtr = &(p->initEnc);
+- return 1;
+-}
+-
+-static
+-const ENCODING *NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
+-{
+-#define ENCODING_MAX 128
+- char buf[ENCODING_MAX];
+- char *p = buf;
+- int i;
+- XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
+- if (ptr != end)
+- return 0;
+- *p = 0;
+- if (streqci(buf, "UTF-16") && enc->minBytesPerChar == 2)
+- return enc;
+- i = getEncodingIndex(buf);
+- if (i == UNKNOWN_ENC)
+- return 0;
+- return NS(encodings)[i];
+-}
+-
+-int NS(XmlParseXmlDecl)(int isGeneralTextEntity,
+- const ENCODING *enc,
+- const char *ptr,
+- const char *end,
+- const char **badPtr,
+- const char **versionPtr,
+- const char **encodingName,
+- const ENCODING **encoding,
+- int *standalone)
+-{
+- return doParseXmlDecl(NS(findEncoding),
+- isGeneralTextEntity,
+- enc,
+- ptr,
+- end,
+- badPtr,
+- versionPtr,
+- encodingName,
+- encoding,
+- standalone);
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/codepage.c dump_expat/xmlrpc-epi-0.51/expat/xmlwf/codepage.c
+--- original/xmlrpc-epi-0.51/expat/xmlwf/codepage.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/codepage.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,90 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include "codepage.h"
+-
+-#ifdef WIN32
+-#define STRICT 1
+-#define WIN32_LEAN_AND_MEAN 1
+-
+-#include <windows.h>
+-
+-int codepageMap(int cp, int *map)
+-{
+- int i;
+- CPINFO info;
+- if (!GetCPInfo(cp, &info) || info.MaxCharSize > 2)
+- return 0;
+- for (i = 0; i < 256; i++)
+- map[i] = -1;
+- if (info.MaxCharSize > 1) {
+- for (i = 0; i < MAX_LEADBYTES; i++) {
+- int j, lim;
+- if (info.LeadByte[i] == 0 && info.LeadByte[i + 1] == 0)
+- break;
+- lim = info.LeadByte[i + 1];
+- for (j = info.LeadByte[i]; j < lim; j++)
+- map[j] = -2;
+- }
+- }
+- for (i = 0; i < 256; i++) {
+- if (map[i] == -1) {
+- char c = i;
+- unsigned short n;
+- if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS,
+- &c, 1, &n, 1) == 1)
+- map[i] = n;
+- }
+- }
+- return 1;
+-}
+-
+-int codepageConvert(int cp, const char *p)
+-{
+- unsigned short c;
+- if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS,
+- p, 2, &c, 1) == 1)
+- return c;
+- return -1;
+-}
+-
+-#else /* not WIN32 */
+-
+-int codepageMap(int cp, int *map)
+-{
+- return 0;
+-}
+-
+-int codepageConvert(int cp, const char *p)
+-{
+- return -1;
+-}
+-
+-#endif /* not WIN32 */
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/codepage.h dump_expat/xmlrpc-epi-0.51/expat/xmlwf/codepage.h
+--- original/xmlrpc-epi-0.51/expat/xmlwf/codepage.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/codepage.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,32 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-int codepageMap(int cp, int *map);
+-int codepageConvert(int cp, const char *p);
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/filemap.h dump_expat/xmlrpc-epi-0.51/expat/xmlwf/filemap.h
+--- original/xmlrpc-epi-0.51/expat/xmlwf/filemap.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/filemap.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,42 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-
+-#include <stddef.h>
+-
+-#ifdef XML_UNICODE
+-int filemap(const wchar_t *name,
+- void (*processor)(const void *, size_t, const wchar_t *, void *arg),
+- void *arg);
+-#else
+-int filemap(const char *name,
+- void (*processor)(const void *, size_t, const char *, void *arg),
+- void *arg);
+-#endif
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/readfilemap.c dump_expat/xmlrpc-epi-0.51/expat/xmlwf/readfilemap.c
+--- original/xmlrpc-epi-0.51/expat/xmlwf/readfilemap.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/readfilemap.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,99 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#include <stdlib.h>
+-#include <stdio.h>
+-
+-#ifndef S_ISREG
+-#ifndef S_IFREG
+-#define S_IFREG _S_IFREG
+-#endif
+-#ifndef S_IFMT
+-#define S_IFMT _S_IFMT
+-#endif
+-#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+-#endif /* not S_ISREG */
+-
+-#ifndef O_BINARY
+-#ifdef _O_BINARY
+-#define O_BINARY _O_BINARY
+-#else
+-#define O_BINARY 0
+-#endif
+-#endif
+-
+-int filemap(const char *name,
+- void (*processor)(const void *, size_t, const char *, void *arg),
+- void *arg)
+-{
+- size_t nbytes;
+- int fd;
+- int n;
+- struct stat sb;
+- void *p;
+-
+- fd = open(name, O_RDONLY|O_BINARY);
+- if (fd < 0) {
+- perror(name);
+- return 0;
+- }
+- if (fstat(fd, &sb) < 0) {
+- perror(name);
+- return 0;
+- }
+- if (!S_ISREG(sb.st_mode)) {
+- fprintf(stderr, "%s: not a regular file\n", name);
+- return 0;
+- }
+- nbytes = sb.st_size;
+- p = malloc(nbytes);
+- if (!p) {
+- fprintf(stderr, "%s: out of memory\n", name);
+- return 0;
+- }
+- n = read(fd, p, nbytes);
+- if (n < 0) {
+- perror(name);
+- close(fd);
+- return 0;
+- }
+- if (n != nbytes) {
+- fprintf(stderr, "%s: read unexpected number of bytes\n", name);
+- close(fd);
+- return 0;
+- }
+- processor(p, nbytes, name, arg);
+- free(p);
+- close(fd);
+- return 1;
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/unixfilemap.c dump_expat/xmlrpc-epi-0.51/expat/xmlwf/unixfilemap.c
+--- original/xmlrpc-epi-0.51/expat/xmlwf/unixfilemap.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/unixfilemap.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,82 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include <sys/types.h>
+-#include <sys/mman.h>
+-#include <sys/stat.h>
+-#include <fcntl.h>
+-#include <errno.h>
+-#include <string.h>
+-#include <stdio.h>
+-
+-#ifndef MAP_FILE
+-#define MAP_FILE 0
+-#endif
+-
+-#include "filemap.h"
+-
+-int filemap(const char *name,
+- void (*processor)(const void *, size_t, const char *, void *arg),
+- void *arg)
+-{
+- int fd;
+- size_t nbytes;
+- struct stat sb;
+- void *p;
+-
+- fd = open(name, O_RDONLY);
+- if (fd < 0) {
+- perror(name);
+- return 0;
+- }
+- if (fstat(fd, &sb) < 0) {
+- perror(name);
+- close(fd);
+- return 0;
+- }
+- if (!S_ISREG(sb.st_mode)) {
+- close(fd);
+- fprintf(stderr, "%s: not a regular file\n", name);
+- return 0;
+- }
+-
+- nbytes = sb.st_size;
+- p = (void *)mmap((caddr_t)0, (size_t)nbytes, PROT_READ,
+- MAP_FILE|MAP_PRIVATE, fd, (off_t)0);
+- if (p == (void *)-1) {
+- perror(name);
+- close(fd);
+- return 0;
+- }
+- processor(p, nbytes, name, arg);
+- munmap((caddr_t)p, nbytes);
+- close(fd);
+- return 1;
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/win32filemap.c dump_expat/xmlrpc-epi-0.51/expat/xmlwf/win32filemap.c
+--- original/xmlrpc-epi-0.51/expat/xmlwf/win32filemap.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/win32filemap.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,120 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#define STRICT 1
+-#define WIN32_LEAN_AND_MEAN 1
+-
+-#ifdef XML_UNICODE_WCHAR_T
+-#ifndef XML_UNICODE
+-#define XML_UNICODE
+-#endif
+-#endif
+-
+-#ifdef XML_UNICODE
+-#define UNICODE
+-#define _UNICODE
+-#endif /* XML_UNICODE */
+-#include <windows.h>
+-#include <stdio.h>
+-#include <tchar.h>
+-#include "filemap.h"
+-
+-static void win32perror(const TCHAR *);
+-
+-int filemap(const TCHAR *name,
+- void (*processor)(const void *, size_t, const TCHAR *, void *arg),
+- void *arg)
+-{
+- HANDLE f;
+- HANDLE m;
+- DWORD size;
+- DWORD sizeHi;
+- void *p;
+-
+- f = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
+- FILE_FLAG_SEQUENTIAL_SCAN, NULL);
+- if (f == INVALID_HANDLE_VALUE) {
+- win32perror(name);
+- return 0;
+- }
+- size = GetFileSize(f, &sizeHi);
+- if (size == (DWORD)-1) {
+- win32perror(name);
+- return 0;
+- }
+- if (sizeHi) {
+- _ftprintf(stderr, _T("%s: bigger than 2Gb\n"), name);
+- return 0;
+- }
+- /* CreateFileMapping barfs on zero length files */
+- if (size == 0) {
+- static const char c = '\0';
+- processor(&c, 0, name, arg);
+- CloseHandle(f);
+- return 1;
+- }
+- m = CreateFileMapping(f, NULL, PAGE_READONLY, 0, 0, NULL);
+- if (m == NULL) {
+- win32perror(name);
+- CloseHandle(f);
+- return 0;
+- }
+- p = MapViewOfFile(m, FILE_MAP_READ, 0, 0, 0);
+- if (p == NULL) {
+- win32perror(name);
+- CloseHandle(m);
+- CloseHandle(f);
+- return 0;
+- }
+- processor(p, size, name, arg);
+- UnmapViewOfFile(p);
+- CloseHandle(m);
+- CloseHandle(f);
+- return 1;
+-}
+-
+-static
+-void win32perror(const TCHAR *s)
+-{
+- LPVOID buf;
+- if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+- NULL,
+- GetLastError(),
+- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+- (LPTSTR) &buf,
+- 0,
+- NULL)) {
+- _ftprintf(stderr, _T("%s: %s"), s, buf);
+- fflush(stderr);
+- LocalFree(buf);
+- }
+- else
+- _ftprintf(stderr, _T("%s: unknown Windows error\n"), s);
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/xmlfile.c dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlfile.c
+--- original/xmlrpc-epi-0.51/expat/xmlwf/xmlfile.c 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlfile.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,238 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <stddef.h>
+-#include <string.h>
+-#include <fcntl.h>
+-#include "xmlparse.h"
+-#include "xmlfile.h"
+-#include "xmltchar.h"
+-#include "filemap.h"
+-
+-#ifdef _MSC_VER
+-#include <io.h>
+-#endif
+-
+-#ifdef _POSIX_SOURCE
+-#include <unistd.h>
+-#endif
+-
+-#ifndef O_BINARY
+-#ifdef _O_BINARY
+-#define O_BINARY _O_BINARY
+-#else
+-#define O_BINARY 0
+-#endif
+-#endif
+-
+-#ifdef _DEBUG
+-#define READ_SIZE 16
+-#else
+-#define READ_SIZE (1024*8)
+-#endif
+-
+-
+-
+-typedef struct {
+- XML_Parser parser;
+- int *retPtr;
+-} PROCESS_ARGS;
+-
+-static
+-void reportError(XML_Parser parser, const XML_Char *filename)
+-{
+- int code = XML_GetErrorCode(parser);
+- const XML_Char *message = XML_ErrorString(code);
+- if (message)
+- ftprintf(stdout, T("%s:%d:%ld: %s\n"),
+- filename,
+- XML_GetErrorLineNumber(parser),
+- XML_GetErrorColumnNumber(parser),
+- message);
+- else
+- ftprintf(stderr, T("%s: (unknown message %d)\n"), filename, code);
+-}
+-
+-static
+-void processFile(const void *data,
+- size_t size,
+- const XML_Char *filename,
+- void *args)
+-{
+- XML_Parser parser = ((PROCESS_ARGS *)args)->parser;
+- int *retPtr = ((PROCESS_ARGS *)args)->retPtr;
+- if (!XML_Parse(parser, data, size, 1)) {
+- reportError(parser, filename);
+- *retPtr = 0;
+- }
+- else
+- *retPtr = 1;
+-}
+-
+-static
+-int isAsciiLetter(XML_Char c)
+-{
+- return (T('a') <= c && c <= T('z')) || (T('A') <= c && c <= T('Z'));
+-}
+-
+-static
+-const XML_Char *resolveSystemId(const XML_Char *base, const XML_Char *systemId, XML_Char **toFree)
+-{
+- XML_Char *s;
+- *toFree = 0;
+- if (!base
+- || *systemId == T('/')
+-#ifdef WIN32
+- || *systemId == T('\\')
+- || (isAsciiLetter(systemId[0]) && systemId[1] == T(':'))
+-#endif
+- )
+- return systemId;
+- *toFree = (XML_Char *)malloc((tcslen(base) + tcslen(systemId) + 2)*sizeof(XML_Char));
+- if (!*toFree)
+- return systemId;
+- tcscpy(*toFree, base);
+- s = *toFree;
+- if (tcsrchr(s, T('/')))
+- s = tcsrchr(s, T('/')) + 1;
+-#ifdef WIN32
+- if (tcsrchr(s, T('\\')))
+- s = tcsrchr(s, T('\\')) + 1;
+-#endif
+- tcscpy(s, systemId);
+- return *toFree;
+-}
+-
+-static
+-int externalEntityRefFilemap(XML_Parser parser,
+- const XML_Char *context,
+- const XML_Char *base,
+- const XML_Char *systemId,
+- const XML_Char *publicId)
+-{
+- int result;
+- XML_Char *s;
+- const XML_Char *filename;
+- XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0);
+- PROCESS_ARGS args;
+- args.retPtr = &result;
+- args.parser = entParser;
+- filename = resolveSystemId(base, systemId, &s);
+- XML_SetBase(entParser, filename);
+- if (!filemap(filename, processFile, &args))
+- result = 0;
+- free(s);
+- XML_ParserFree(entParser);
+- return result;
+-}
+-
+-static
+-int processStream(const XML_Char *filename, XML_Parser parser)
+-{
+- int fd = topen(filename, O_BINARY|O_RDONLY);
+- if (fd < 0) {
+- tperror(filename);
+- return 0;
+- }
+- for (;;) {
+- int nread;
+- char *buf = XML_GetBuffer(parser, READ_SIZE);
+- if (!buf) {
+- close(fd);
+- ftprintf(stderr, T("%s: out of memory\n"), filename);
+- return 0;
+- }
+- nread = read(fd, buf, READ_SIZE);
+- if (nread < 0) {
+- tperror(filename);
+- close(fd);
+- return 0;
+- }
+- if (!XML_ParseBuffer(parser, nread, nread == 0)) {
+- reportError(parser, filename);
+- close(fd);
+- return 0;
+- }
+- if (nread == 0) {
+- close(fd);
+- break;;
+- }
+- }
+- return 1;
+-}
+-
+-static
+-int externalEntityRefStream(XML_Parser parser,
+- const XML_Char *context,
+- const XML_Char *base,
+- const XML_Char *systemId,
+- const XML_Char *publicId)
+-{
+- XML_Char *s;
+- const XML_Char *filename;
+- int ret;
+- XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0);
+- filename = resolveSystemId(base, systemId, &s);
+- XML_SetBase(entParser, filename);
+- ret = processStream(filename, entParser);
+- free(s);
+- XML_ParserFree(entParser);
+- return ret;
+-}
+-
+-int XML_ProcessFile(XML_Parser parser,
+- const XML_Char *filename,
+- unsigned flags)
+-{
+- int result;
+-
+- if (!XML_SetBase(parser, filename)) {
+- ftprintf(stderr, T("%s: out of memory"), filename);
+- exit(1);
+- }
+-
+- if (flags & XML_EXTERNAL_ENTITIES)
+- XML_SetExternalEntityRefHandler(parser,
+- (flags & XML_MAP_FILE)
+- ? externalEntityRefFilemap
+- : externalEntityRefStream);
+- if (flags & XML_MAP_FILE) {
+- PROCESS_ARGS args;
+- args.retPtr = &result;
+- args.parser = parser;
+- if (!filemap(filename, processFile, &args))
+- result = 0;
+- }
+- else
+- result = processStream(filename, parser);
+- return result;
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/xmlfile.h dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlfile.h
+--- original/xmlrpc-epi-0.51/expat/xmlwf/xmlfile.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlfile.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,36 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#define XML_MAP_FILE 01
+-#define XML_EXTERNAL_ENTITIES 02
+-
+-extern int XML_ProcessFile(XML_Parser parser,
+- const XML_Char *filename,
+- unsigned flags);
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/xmltchar.h dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmltchar.h
+--- original/xmlrpc-epi-0.51/expat/xmlwf/xmltchar.h 2001-03-19 21:28:34.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmltchar.h 1969-12-31 18:00:00.000000000 -0600
+@@ -1,36 +0,0 @@
+-#ifdef XML_UNICODE
+-#ifndef XML_UNICODE_WCHAR_T
+-#error xmlwf requires a 16-bit Unicode-compatible wchar_t
+-#endif
+-#define T(x) L ## x
+-#define ftprintf fwprintf
+-#define tfopen _wfopen
+-#define fputts fputws
+-#define puttc putwc
+-#define tcscmp wcscmp
+-#define tcscpy wcscpy
+-#define tcscat wcscat
+-#define tcschr wcschr
+-#define tcsrchr wcsrchr
+-#define tcslen wcslen
+-#define tperror _wperror
+-#define topen _wopen
+-#define tmain wmain
+-#define tremove _wremove
+-#else /* not XML_UNICODE */
+-#define T(x) x
+-#define ftprintf fprintf
+-#define tfopen fopen
+-#define fputts fputs
+-#define puttc putc
+-#define tcscmp strcmp
+-#define tcscpy strcpy
+-#define tcscat strcat
+-#define tcschr strchr
+-#define tcsrchr strrchr
+-#define tcslen strlen
+-#define tperror perror
+-#define topen open
+-#define tmain main
+-#define tremove remove
+-#endif /* not XML_UNICODE */
+Binary files original/xmlrpc-epi-0.51/expat/xmlwf/xmlwf and dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlwf differ
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/xmlwf.c dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlwf.c
+--- original/xmlrpc-epi-0.51/expat/xmlwf/xmlwf.c 2001-03-19 21:28:35.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlwf.c 1969-12-31 18:00:00.000000000 -0600
+@@ -1,657 +0,0 @@
+-/*
+-The contents of this file are subject to the Mozilla Public License
+-Version 1.1 (the "License"); you may not use this file except in
+-compliance with the License. You may obtain a copy of the License at
+-http://www.mozilla.org/MPL/
+-
+-Software distributed under the License is distributed on an "AS IS"
+-basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-License for the specific language governing rights and limitations
+-under the License.
+-
+-The Original Code is expat.
+-
+-The Initial Developer of the Original Code is James Clark.
+-Portions created by James Clark are Copyright (C) 1998, 1999
+-James Clark. All Rights Reserved.
+-
+-Contributor(s):
+-
+-Alternatively, the contents of this file may be used under the terms
+-of the GNU General Public License (the "GPL"), in which case the
+-provisions of the GPL are applicable instead of those above. If you
+-wish to allow use of your version of this file only under the terms of
+-the GPL and not to allow others to use your version of this file under
+-the MPL, indicate your decision by deleting the provisions above and
+-replace them with the notice and other provisions required by the
+-GPL. If you do not delete the provisions above, a recipient may use
+-your version of this file under either the MPL or the GPL.
+-*/
+-
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <stddef.h>
+-#include <string.h>
+-
+-#include "xmlparse.h"
+-#include "codepage.h"
+-#include "xmlfile.h"
+-#include "xmltchar.h"
+-
+-#ifdef _MSC_VER
+-#include <crtdbg.h>
+-#endif
+-
+-#define NSSEP T('#')
+-
+-static void characterData(void *userData, const XML_Char *s, int len)
+-{
+- FILE *fp = userData;
+- for (; len > 0; --len, ++s) {
+- switch (*s) {
+- case T('&'):
+- fputts(T("&amp;"), fp);
+- break;
+- case T('<'):
+- fputts(T("&lt;"), fp);
+- break;
+- case T('>'):
+- fputts(T("&gt;"), fp);
+- break;
+- case T('"'):
+- fputts(T("&quot;"), fp);
+- break;
+- case 9:
+- case 10:
+- case 13:
+- ftprintf(fp, T("&#%d;"), *s);
+- break;
+- default:
+- puttc(*s, fp);
+- break;
+- }
+- }
+-}
+-
+-/* Lexicographically comparing UTF-8 encoded attribute values,
+-is equivalent to lexicographically comparing based on the character number. */
+-
+-static int attcmp(const void *att1, const void *att2)
+-{
+- return tcscmp(*(const XML_Char **)att1, *(const XML_Char **)att2);
+-}
+-
+-static void startElement(void *userData, const XML_Char *name, const XML_Char **atts)
+-{
+- int nAtts;
+- const XML_Char **p;
+- FILE *fp = userData;
+- puttc(T('<'), fp);
+- fputts(name, fp);
+-
+- p = atts;
+- while (*p)
+- ++p;
+- nAtts = (p - atts) >> 1;
+- if (nAtts > 1)
+- qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, attcmp);
+- while (*atts) {
+- puttc(T(' '), fp);
+- fputts(*atts++, fp);
+- puttc(T('='), fp);
+- puttc(T('"'), fp);
+- characterData(userData, *atts, tcslen(*atts));
+- puttc(T('"'), fp);
+- atts++;
+- }
+- puttc(T('>'), fp);
+-}
+-
+-static void endElement(void *userData, const XML_Char *name)
+-{
+- FILE *fp = userData;
+- puttc(T('<'), fp);
+- puttc(T('/'), fp);
+- fputts(name, fp);
+- puttc(T('>'), fp);
+-}
+-
+-static void startElementNS(void *userData, const XML_Char *name, const XML_Char **atts)
+-{
+- int nAtts;
+- int nsi;
+- const XML_Char **p;
+- FILE *fp = userData;
+- const XML_Char *sep;
+- puttc(T('<'), fp);
+-
+- sep = tcsrchr(name, NSSEP);
+- if (sep) {
+- fputts(T("ns0:"), fp);
+- fputts(sep + 1, fp);
+- fputts(T(" xmlns:ns0=\""), fp);
+- characterData(userData, name, sep - name);
+- puttc(T('"'), fp);
+- nsi = 1;
+- }
+- else {
+- fputts(name, fp);
+- nsi = 0;
+- }
+-
+- p = atts;
+- while (*p)
+- ++p;
+- nAtts = (p - atts) >> 1;
+- if (nAtts > 1)
+- qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, attcmp);
+- while (*atts) {
+- name = *atts++;
+- sep = tcsrchr(name, NSSEP);
+- if (sep) {
+- ftprintf(fp, T(" xmlns:ns%d=\""), nsi);
+- characterData(userData, name, sep - name);
+- puttc(T('"'), fp);
+- name = sep + 1;
+- ftprintf(fp, T(" ns%d:"), nsi++);
+- }
+- else
+- puttc(T(' '), fp);
+- fputts(name, fp);
+- puttc(T('='), fp);
+- puttc(T('"'), fp);
+- characterData(userData, *atts, tcslen(*atts));
+- puttc(T('"'), fp);
+- atts++;
+- }
+- puttc(T('>'), fp);
+-}
+-
+-static void endElementNS(void *userData, const XML_Char *name)
+-{
+- FILE *fp = userData;
+- const XML_Char *sep;
+- puttc(T('<'), fp);
+- puttc(T('/'), fp);
+- sep = tcsrchr(name, NSSEP);
+- if (sep) {
+- fputts(T("ns0:"), fp);
+- fputts(sep + 1, fp);
+- }
+- else
+- fputts(name, fp);
+- puttc(T('>'), fp);
+-}
+-
+-static void processingInstruction(void *userData, const XML_Char *target, const XML_Char *data)
+-{
+- FILE *fp = userData;
+- puttc(T('<'), fp);
+- puttc(T('?'), fp);
+- fputts(target, fp);
+- puttc(T(' '), fp);
+- fputts(data, fp);
+- puttc(T('?'), fp);
+- puttc(T('>'), fp);
+-}
+-
+-static void defaultCharacterData(XML_Parser parser, const XML_Char *s, int len)
+-{
+- XML_DefaultCurrent(parser);
+-}
+-
+-static void defaultStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts)
+-{
+- XML_DefaultCurrent(parser);
+-}
+-
+-static void defaultEndElement(XML_Parser parser, const XML_Char *name)
+-{
+- XML_DefaultCurrent(parser);
+-}
+-
+-static void defaultProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data)
+-{
+- XML_DefaultCurrent(parser);
+-}
+-
+-static void nopCharacterData(XML_Parser parser, const XML_Char *s, int len)
+-{
+-}
+-
+-static void nopStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts)
+-{
+-}
+-
+-static void nopEndElement(XML_Parser parser, const XML_Char *name)
+-{
+-}
+-
+-static void nopProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data)
+-{
+-}
+-
+-static void markup(XML_Parser parser, const XML_Char *s, int len)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- for (; len > 0; --len, ++s)
+- puttc(*s, fp);
+-}
+-
+-static
+-void metaLocation(XML_Parser parser)
+-{
+- const XML_Char *uri = XML_GetBase(parser);
+- if (uri)
+- ftprintf(XML_GetUserData(parser), T(" uri=\"%s\""), uri);
+- ftprintf(XML_GetUserData(parser),
+- T(" byte=\"%ld\" nbytes=\"%d\" line=\"%d\" col=\"%d\""),
+- XML_GetCurrentByteIndex(parser),
+- XML_GetCurrentByteCount(parser),
+- XML_GetCurrentLineNumber(parser),
+- XML_GetCurrentColumnNumber(parser));
+-}
+-
+-static
+-void metaStartDocument(XML_Parser parser)
+-{
+- fputts(T("<document>\n"), XML_GetUserData(parser));
+-}
+-
+-static
+-void metaEndDocument(XML_Parser parser)
+-{
+- fputts(T("</document>\n"), XML_GetUserData(parser));
+-}
+-
+-static
+-void metaStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- const XML_Char **specifiedAttsEnd
+- = atts + 2*XML_GetSpecifiedAttributeCount(parser);
+- ftprintf(fp, T("<starttag name=\"%s\""), name);
+- metaLocation(parser);
+- if (*atts) {
+- fputts(T(">\n"), fp);
+- do {
+- ftprintf(fp, T("<attribute name=\"%s\" value=\""), atts[0]);
+- characterData(fp, atts[1], tcslen(atts[1]));
+- if (atts >= specifiedAttsEnd)
+- fputs(T("\" defaulted=\"yes\"/>\n"), fp);
+- else
+- fputts(T("\"/>\n"), fp);
+- } while (*(atts += 2));
+- fputts(T("</starttag>\n"), fp);
+- }
+- else
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaEndElement(XML_Parser parser, const XML_Char *name)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- ftprintf(fp, T("<endtag name=\"%s\""), name);
+- metaLocation(parser);
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- ftprintf(fp, T("<pi target=\"%s\" data=\""), target);
+- characterData(fp, data, tcslen(data));
+- puttc(T('"'), fp);
+- metaLocation(parser);
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaComment(XML_Parser parser, const XML_Char *data)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- fputts(T("<comment data=\""), fp);
+- characterData(fp, data, tcslen(data));
+- puttc(T('"'), fp);
+- metaLocation(parser);
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaStartCdataSection(XML_Parser parser)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- fputts(T("<startcdata"), fp);
+- metaLocation(parser);
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaEndCdataSection(XML_Parser parser)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- fputts(T("<endcdata"), fp);
+- metaLocation(parser);
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaCharacterData(XML_Parser parser, const XML_Char *s, int len)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- fputts(T("<chars str=\""), fp);
+- characterData(fp, s, len);
+- puttc(T('"'), fp);
+- metaLocation(parser);
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaUnparsedEntityDecl(XML_Parser parser,
+- const XML_Char *entityName,
+- const XML_Char *base,
+- const XML_Char *systemId,
+- const XML_Char *publicId,
+- const XML_Char *notationName)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- ftprintf(fp, T("<entity name=\"%s\""), entityName);
+- if (publicId)
+- ftprintf(fp, T(" public=\"%s\""), publicId);
+- fputts(T(" system=\""), fp);
+- characterData(fp, systemId, tcslen(systemId));
+- puttc(T('"'), fp);
+- ftprintf(fp, T(" notation=\"%s\""), notationName);
+- metaLocation(parser);
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaNotationDecl(XML_Parser parser,
+- const XML_Char *notationName,
+- const XML_Char *base,
+- const XML_Char *systemId,
+- const XML_Char *publicId)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- ftprintf(fp, T("<notation name=\"%s\""), notationName);
+- if (publicId)
+- ftprintf(fp, T(" public=\"%s\""), publicId);
+- if (systemId) {
+- fputts(T(" system=\""), fp);
+- characterData(fp, systemId, tcslen(systemId));
+- puttc(T('"'), fp);
+- }
+- metaLocation(parser);
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaStartNamespaceDecl(XML_Parser parser,
+- const XML_Char *prefix,
+- const XML_Char *uri)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- fputts(T("<startns"), fp);
+- if (prefix)
+- ftprintf(fp, T(" prefix=\"%s\""), prefix);
+- if (uri) {
+- fputts(T(" ns=\""), fp);
+- characterData(fp, uri, tcslen(uri));
+- fputts(T("\"/>\n"), fp);
+- }
+- else
+- fputts(T("/>\n"), fp);
+-}
+-
+-static
+-void metaEndNamespaceDecl(XML_Parser parser, const XML_Char *prefix)
+-{
+- FILE *fp = XML_GetUserData(parser);
+- if (!prefix)
+- fputts(T("<endns/>\n"), fp);
+- else
+- ftprintf(fp, T("<endns prefix=\"%s\"/>\n"), prefix);
+-}
+-
+-static
+-int unknownEncodingConvert(void *data, const char *p)
+-{
+- return codepageConvert(*(int *)data, p);
+-}
+-
+-static
+-int unknownEncoding(void *userData,
+- const XML_Char *name,
+- XML_Encoding *info)
+-{
+- int cp;
+- static const XML_Char prefixL[] = T("windows-");
+- static const XML_Char prefixU[] = T("WINDOWS-");
+- int i;
+-
+- for (i = 0; prefixU[i]; i++)
+- if (name[i] != prefixU[i] && name[i] != prefixL[i])
+- return 0;
+-
+- cp = 0;
+- for (; name[i]; i++) {
+- static const XML_Char digits[] = T("0123456789");
+- const XML_Char *s = tcschr(digits, name[i]);
+- if (!s)
+- return 0;
+- cp *= 10;
+- cp += s - digits;
+- if (cp >= 0x10000)
+- return 0;
+- }
+- if (!codepageMap(cp, info->map))
+- return 0;
+- info->convert = unknownEncodingConvert;
+- /* We could just cast the code page integer to a void *,
+- and avoid the use of release. */
+- info->release = free;
+- info->data = malloc(sizeof(int));
+- if (!info->data)
+- return 0;
+- *(int *)info->data = cp;
+- return 1;
+-}
+-
+-static
+-int notStandalone(void *userData)
+-{
+- return 0;
+-}
+-
+-static
+-void usage(const XML_Char *prog)
+-{
+- ftprintf(stderr, T("usage: %s [-n] [-r] [-s] [-w] [-x] [-d output-dir] [-e encoding] file ...\n"), prog);
+- exit(1);
+-}
+-
+-int tmain(int argc, XML_Char **argv)
+-{
+- int i, j;
+- const XML_Char *outputDir = 0;
+- const XML_Char *encoding = 0;
+- unsigned processFlags = XML_MAP_FILE;
+- int windowsCodePages = 0;
+- int outputType = 0;
+- int useNamespaces = 0;
+- int requireStandalone = 0;
+-
+-#ifdef _MSC_VER
+- _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
+-#endif
+-
+- i = 1;
+- j = 0;
+- while (i < argc) {
+- if (j == 0) {
+- if (argv[i][0] != T('-'))
+- break;
+- if (argv[i][1] == T('-') && argv[i][2] == T('\0')) {
+- i++;
+- break;
+- }
+- j++;
+- }
+- switch (argv[i][j]) {
+- case T('r'):
+- processFlags &= ~XML_MAP_FILE;
+- j++;
+- break;
+- case T('s'):
+- requireStandalone = 1;
+- j++;
+- break;
+- case T('n'):
+- useNamespaces = 1;
+- j++;
+- break;
+- case T('x'):
+- processFlags |= XML_EXTERNAL_ENTITIES;
+- j++;
+- break;
+- case T('w'):
+- windowsCodePages = 1;
+- j++;
+- break;
+- case T('m'):
+- outputType = 'm';
+- j++;
+- break;
+- case T('c'):
+- outputType = 'c';
+- useNamespaces = 0;
+- j++;
+- break;
+- case T('t'):
+- outputType = 't';
+- j++;
+- break;
+- case T('d'):
+- if (argv[i][j + 1] == T('\0')) {
+- if (++i == argc)
+- usage(argv[0]);
+- outputDir = argv[i];
+- }
+- else
+- outputDir = argv[i] + j + 1;
+- i++;
+- j = 0;
+- break;
+- case T('e'):
+- if (argv[i][j + 1] == T('\0')) {
+- if (++i == argc)
+- usage(argv[0]);
+- encoding = argv[i];
+- }
+- else
+- encoding = argv[i] + j + 1;
+- i++;
+- j = 0;
+- break;
+- case T('\0'):
+- if (j > 1) {
+- i++;
+- j = 0;
+- break;
+- }
+- /* fall through */
+- default:
+- usage(argv[0]);
+- }
+- }
+- if (i == argc)
+- usage(argv[0]);
+- for (; i < argc; i++) {
+- FILE *fp = 0;
+- XML_Char *outName = 0;
+- int result;
+- XML_Parser parser;
+- if (useNamespaces)
+- parser = XML_ParserCreateNS(encoding, NSSEP);
+- else
+- parser = XML_ParserCreate(encoding);
+- if (requireStandalone)
+- XML_SetNotStandaloneHandler(parser, notStandalone);
+- if (outputType == 't') {
+- /* This is for doing timings; this gives a more realistic estimate of
+- the parsing time. */
+- outputDir = 0;
+- XML_SetElementHandler(parser, nopStartElement, nopEndElement);
+- XML_SetCharacterDataHandler(parser, nopCharacterData);
+- XML_SetProcessingInstructionHandler(parser, nopProcessingInstruction);
+- }
+- else if (outputDir) {
+- const XML_Char *file = argv[i];
+- if (tcsrchr(file, T('/')))
+- file = tcsrchr(file, T('/')) + 1;
+-#ifdef WIN32
+- if (tcsrchr(file, T('\\')))
+- file = tcsrchr(file, T('\\')) + 1;
+-#endif
+- outName = malloc((tcslen(outputDir) + tcslen(file) + 2) * sizeof(XML_Char));
+- tcscpy(outName, outputDir);
+- tcscat(outName, T("/"));
+- tcscat(outName, file);
+- fp = tfopen(outName, T("wb"));
+- if (!fp) {
+- tperror(outName);
+- exit(1);
+- }
+- setvbuf(fp, NULL, _IOFBF, 16384);
+-#ifdef XML_UNICODE
+- puttc(0xFEFF, fp);
+-#endif
+- XML_SetUserData(parser, fp);
+- switch (outputType) {
+- case 'm':
+- XML_UseParserAsHandlerArg(parser);
+- XML_SetElementHandler(parser, metaStartElement, metaEndElement);
+- XML_SetProcessingInstructionHandler(parser, metaProcessingInstruction);
+- XML_SetCommentHandler(parser, metaComment);
+- XML_SetCdataSectionHandler(parser, metaStartCdataSection, metaEndCdataSection);
+- XML_SetCharacterDataHandler(parser, metaCharacterData);
+- XML_SetUnparsedEntityDeclHandler(parser, metaUnparsedEntityDecl);
+- XML_SetNotationDeclHandler(parser, metaNotationDecl);
+- XML_SetNamespaceDeclHandler(parser, metaStartNamespaceDecl, metaEndNamespaceDecl);
+- metaStartDocument(parser);
+- break;
+- case 'c':
+- XML_UseParserAsHandlerArg(parser);
+- XML_SetDefaultHandler(parser, markup);
+- XML_SetElementHandler(parser, defaultStartElement, defaultEndElement);
+- XML_SetCharacterDataHandler(parser, defaultCharacterData);
+- XML_SetProcessingInstructionHandler(parser, defaultProcessingInstruction);
+- break;
+- default:
+- if (useNamespaces)
+- XML_SetElementHandler(parser, startElementNS, endElementNS);
+- else
+- XML_SetElementHandler(parser, startElement, endElement);
+- XML_SetCharacterDataHandler(parser, characterData);
+- XML_SetProcessingInstructionHandler(parser, processingInstruction);
+- break;
+- }
+- }
+- if (windowsCodePages)
+- XML_SetUnknownEncodingHandler(parser, unknownEncoding, 0);
+- result = XML_ProcessFile(parser, argv[i], processFlags);
+- if (outputDir) {
+- if (outputType == 'm')
+- metaEndDocument(parser);
+- fclose(fp);
+- if (!result)
+- tremove(outName);
+- free(outName);
+- }
+- XML_ParserFree(parser);
+- }
+- return 0;
+-}
+diff -u -r -N original/xmlrpc-epi-0.51/expat/xmlwf/xmlwf.dsp dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlwf.dsp
+--- original/xmlrpc-epi-0.51/expat/xmlwf/xmlwf.dsp 2001-03-19 21:28:35.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/expat/xmlwf/xmlwf.dsp 1969-12-31 18:00:00.000000000 -0600
+@@ -1,136 +0,0 @@
+-# Microsoft Developer Studio Project File - Name="xmlwf" - Package Owner=<4>
+-# Microsoft Developer Studio Generated Build File, Format Version 6.00
+-# ** DO NOT EDIT **
+-
+-# TARGTYPE "Win32 (x86) Console Application" 0x0103
+-
+-CFG=xmlwf - Win32 Release
+-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+-!MESSAGE use the Export Makefile command and run
+-!MESSAGE
+-!MESSAGE NMAKE /f "xmlwf.mak".
+-!MESSAGE
+-!MESSAGE You can specify a configuration when running NMAKE
+-!MESSAGE by defining the macro CFG on the command line. For example:
+-!MESSAGE
+-!MESSAGE NMAKE /f "xmlwf.mak" CFG="xmlwf - Win32 Release"
+-!MESSAGE
+-!MESSAGE Possible choices for configuration are:
+-!MESSAGE
+-!MESSAGE "xmlwf - Win32 Release" (based on "Win32 (x86) Console Application")
+-!MESSAGE "xmlwf - Win32 Debug" (based on "Win32 (x86) Console Application")
+-!MESSAGE
+-
+-# Begin Project
+-# PROP AllowPerConfigDependencies 0
+-# PROP Scc_ProjName ""
+-# PROP Scc_LocalPath ""
+-CPP=cl.exe
+-RSC=rc.exe
+-
+-!IF "$(CFG)" == "xmlwf - Win32 Release"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 0
+-# PROP BASE Output_Dir ".\Release"
+-# PROP BASE Intermediate_Dir ".\Release"
+-# PROP BASE Target_Dir "."
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 0
+-# PROP Output_Dir ".\Release"
+-# PROP Intermediate_Dir ".\Release"
+-# PROP Ignore_Export_Lib 0
+-# PROP Target_Dir "."
+-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+-# ADD CPP /nologo /W3 /GX /O2 /I "..\xmlparse" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /FD /c
+-# ADD BASE RSC /l 0x809 /d "NDEBUG"
+-# ADD RSC /l 0x809 /d "NDEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+-# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\xmlwf.exe"
+-
+-!ELSEIF "$(CFG)" == "xmlwf - Win32 Debug"
+-
+-# PROP BASE Use_MFC 0
+-# PROP BASE Use_Debug_Libraries 1
+-# PROP BASE Output_Dir ".\Debug"
+-# PROP BASE Intermediate_Dir ".\Debug"
+-# PROP BASE Target_Dir "."
+-# PROP Use_MFC 0
+-# PROP Use_Debug_Libraries 1
+-# PROP Output_Dir ".\Debug"
+-# PROP Intermediate_Dir ".\Debug"
+-# PROP Ignore_Export_Lib 0
+-# PROP Target_Dir "."
+-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".\xmlparse" /I "..\xmlparse" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /FD /c
+-# ADD BASE RSC /l 0x809 /d "_DEBUG"
+-# ADD RSC /l 0x809 /d "_DEBUG"
+-BSC32=bscmake.exe
+-# ADD BASE BSC32 /nologo
+-# ADD BSC32 /nologo
+-LINK32=link.exe
+-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+-# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\xmlwf.exe"
+-
+-!ENDIF
+-
+-# Begin Target
+-
+-# Name "xmlwf - Win32 Release"
+-# Name "xmlwf - Win32 Debug"
+-# Begin Group "Source Files"
+-
+-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90"
+-# Begin Source File
+-
+-SOURCE=.\codepage.c
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\readfilemap.c
+-# PROP Exclude_From_Build 1
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\unixfilemap.c
+-# PROP Exclude_From_Build 1
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\win32filemap.c
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmlfile.c
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmlwf.c
+-# End Source File
+-# End Group
+-# Begin Group "Header Files"
+-
+-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
+-# Begin Source File
+-
+-SOURCE=.\codepage.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmlfile.h
+-# End Source File
+-# Begin Source File
+-
+-SOURCE=.\xmltchar.h
+-# End Source File
+-# End Group
+-# Begin Group "Resource Files"
+-
+-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+-# End Group
+-# End Target
+-# End Project
+diff -u -r -N original/xmlrpc-epi-0.51/sample/Makefile.in dump_expat/xmlrpc-epi-0.51/sample/Makefile.in
+--- original/xmlrpc-epi-0.51/sample/Makefile.in 2002-06-23 18:48:29.000000000 -0500
++++ dump_expat/xmlrpc-epi-0.51/sample/Makefile.in 2007-02-01 23:13:11.000000000 -0600
+@@ -77,7 +77,7 @@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+
+-INCLUDES = -I../src -I../expat/xmltok -I../expat/xmlparse
++INCLUDES = -I../src
+
+ bin_PROGRAMS = sample client server server_compliance_test memtest hello_client hello_server
+
+@@ -112,7 +112,7 @@
+ DEFS = @DEFS@ -I. -I$(srcdir)
+ CPPFLAGS = @CPPFLAGS@
+ LDFLAGS = @LDFLAGS@
+-LIBS = @LIBS@
++LIBS = @LIBS@ -lexpat
+ sample_OBJECTS = sample.$(OBJEXT)
+ sample_DEPENDENCIES = ../src/libxmlrpc.la
+ sample_LDFLAGS =
+diff -u -r -N original/xmlrpc-epi-0.51/src/Makefile.in dump_expat/xmlrpc-epi-0.51/src/Makefile.in
+--- original/xmlrpc-epi-0.51/src/Makefile.in 2002-06-23 18:48:29.000000000 -0500
++++ dump_expat/xmlrpc-epi-0.51/src/Makefile.in 2007-02-01 23:13:36.000000000 -0600
+@@ -75,11 +75,11 @@
+ STRIP = @STRIP@
+ VERSION = @VERSION@
+
+-INCLUDES = -I../liblm -I../expat/xmltok -I../expat/xmlparse -I/usr/local/ssl/include
++INCLUDES = -I../liblm -I/usr/local/ssl/include
+
+ lib_LTLIBRARIES = libxmlrpc.la
+
+-libxmlrpc_la_LIBADD = ../expat/xmltok/libexpat_tok.la ../expat/xmlparse/libexpat_parse.la
++libxmlrpc_la_LIBADD =
+
+ libxmlrpc_la_SOURCES = base64.c encodings.c queue.c simplestring.c xml_element.c xml_to_dandarpc.c xml_to_xmlrpc.c xml_to_soap.c xmlrpc.c xmlrpc_introspection.c system_methods.c
+
+@@ -130,8 +130,7 @@
+ CPPFLAGS = @CPPFLAGS@
+ LDFLAGS = @LDFLAGS@
+ LIBS = @LIBS@
+-libxmlrpc_la_DEPENDENCIES = ../expat/xmltok/libexpat_tok.la \
+-../expat/xmlparse/libexpat_parse.la
++libxmlrpc_la_DEPENDENCIES =
+ libxmlrpc_la_OBJECTS = base64.lo encodings.lo queue.lo simplestring.lo \
+ xml_element.lo xml_to_dandarpc.lo xml_to_xmlrpc.lo xml_to_soap.lo \
+ xmlrpc.lo xmlrpc_introspection.lo system_methods.lo
+diff -u -r -N original/xmlrpc-epi-0.51/src/xml_element.c dump_expat/xmlrpc-epi-0.51/src/xml_element.c
+--- original/xmlrpc-epi-0.51/src/xml_element.c 2002-05-23 12:46:51.000000000 -0500
++++ dump_expat/xmlrpc-epi-0.51/src/xml_element.c 2007-02-01 22:47:58.000000000 -0600
+@@ -91,7 +91,7 @@
+
+ #include "xml_element.h"
+ #include "queue.h"
+-#include "xmlparse.h"
++#include "expat.h"
+ #include "encodings.h"
+
+ #define my_free(thing) if(thing) {free(thing); thing = 0;}
+@@ -170,7 +170,8 @@
+
+ Q_Destroy(&root->children);
+ Q_Destroy(&root->attrs);
+- my_free((char*)root->name);
++ //my_free((char*)root->name);
++ my_free(root->name);
+ simplestring_free(&root->text);
+ my_free(root);
+ }
+diff -u -r -N original/xmlrpc-epi-0.51/src/xmlrpc.c dump_expat/xmlrpc-epi-0.51/src/xmlrpc.c
+--- original/xmlrpc-epi-0.51/src/xmlrpc.c 2002-03-09 17:15:44.000000000 -0600
++++ dump_expat/xmlrpc-epi-0.51/src/xmlrpc.c 2007-02-01 22:48:11.000000000 -0600
+@@ -120,7 +120,8 @@
+
+ #include "queue.h"
+ #include "xmlrpc.h"
+-#include "xmlparse.h"
++//#include "xmlparse.h"
++#include "expat.h"
+ #include "base64.h"
+
+ #include "xml_to_xmlrpc.h"
diff --git a/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-64bit-fixes.patch b/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-64bit-fixes.patch
new file mode 100644
index 0000000..2134b23
--- /dev/null
+++ b/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-64bit-fixes.patch
@@ -0,0 +1,93 @@
+--- xmlrpc-epi-0.51/sample/sample.c.64bit-fixes 2001-09-16 16:33:17.000000000 -0400
++++ xmlrpc-epi-0.51/sample/sample.c 2002-12-08 16:25:15.000000000 -0500
+@@ -38,6 +38,7 @@
+
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <string.h>
+ #include "xmlrpc.h"
+
+
+@@ -118,7 +119,7 @@ void describe_TestStruct(XMLRPC_SERVER s
+ }
+ else {
+ if(err.xml_elem_error.parser_code) {
+- printf("parse error, line: %i, column: %i, message: %s\n",
++ printf("parse error, line: %ld, column: %ld, message: %s\n",
+ err.xml_elem_error.line, err.xml_elem_error.column, err.xml_elem_error.parser_error);
+ }
+ }
+--- xmlrpc-epi-0.51/src/encodings.c.64bit-fixes 2002-03-12 13:08:18.000000000 -0500
++++ xmlrpc-epi-0.51/src/encodings.c 2002-12-08 16:11:28.000000000 -0500
+@@ -42,9 +42,9 @@ static char* convert(const char* src, in
+ char* outbuf = 0;
+
+ if(src && src_len && from_enc && to_enc) {
+- int outlenleft = src_len;
++ size_t outlenleft = src_len;
+ int outlen = src_len;
+- int inlenleft = src_len;
++ size_t inlenleft = src_len;
+ iconv_t ic = iconv_open(to_enc, from_enc);
+ char* src_ptr = (char*)src;
+ char* out_ptr = 0;
+--- xmlrpc-epi-0.51/src/xml_element.c.64bit-fixes 2002-05-23 13:46:51.000000000 -0400
++++ xmlrpc-epi-0.51/src/xml_element.c 2002-12-08 16:22:19.000000000 -0500
+@@ -461,9 +461,10 @@ static void xml_element_serialize(xml_el
+ }
+
+ /* print buf to file */
+-static file_out_fptr(void *f, const char *text, int size)
++static int file_out_fptr(void *f, const char *text, int size)
+ {
+- fputs(text, (FILE *)f);
++ // Assume we want to return 0 on success, -1 otherwise
++ return fputs(text, (FILE *)f) >= 0 ? 0 : -1;
+ }
+
+ /* print buf to simplestring */
+@@ -473,6 +474,7 @@ static simplestring_out_fptr(void *f, co
+ if(buf) {
+ simplestring_addn(buf, text, size);
+ }
++ return 0;
+ }
+
+ /****f* xml_element/xml_elem_serialize_to_string
+@@ -687,7 +689,7 @@ xml_element* xml_elem_parse_buf(const ch
+ if(byte_idx >= 0) {
+ snprintf(buf,
+ sizeof(buf),
+- "\n\tdata beginning %i before byte index: %s\n",
++ "\n\tdata beginning %ld before byte index: %s\n",
+ byte_idx > 10 ? 10 : byte_idx,
+ in_buf + (byte_idx > 10 ? byte_idx - 10 : byte_idx));
+ }
+@@ -696,7 +698,7 @@ xml_element* xml_elem_parse_buf(const ch
+ "\tdescription: %s\n"
+ "\tline: %i\n"
+ "\tcolumn: %i\n"
+- "\tbyte index: %i\n"
++ "\tbyte index: %ld\n"
+ "\ttotal bytes: %i\n%s ",
+ err_code, error_str, line_num,
+ col_num, byte_idx, byte_total, buf);
+--- xmlrpc-epi-0.51/src/xmlrpc.c.64bit-fixes 2002-03-09 18:15:44.000000000 -0500
++++ xmlrpc-epi-0.51/src/xmlrpc.c 2002-12-08 16:23:50.000000000 -0500
+@@ -116,6 +116,7 @@ static const char rcsid[] =
+ #include <stdlib.h>
+ #include <string.h>
+ #include <stdarg.h>
++#include <ctype.h>
+ #include <time.h>
+
+ #include "queue.h"
+@@ -699,7 +700,7 @@ static XMLRPC_VALUE map_expat_errors (XM
+ XMLRPC_ERROR_CODE code;
+ char buf[1024];
+ snprintf (buf, sizeof (buf),
+- "error occurred at line %i, column %i, byte index %i",
++ "error occurred at line %ld, column %ld, byte index %ld",
+ error->line, error->column, error->byte_index);
+
+ /* expat specific errors */
diff --git a/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-expat.patch b/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-expat.patch
new file mode 100644
index 0000000..a955373
--- /dev/null
+++ b/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-expat.patch
@@ -0,0 +1,83 @@
+diff -Naur xmlrpc-epi-0.51.orig/Makefile.am xmlrpc-epi-0.51/Makefile.am
+--- xmlrpc-epi-0.51.orig/Makefile.am 2001-04-10 10:37:40.000000000 +0900
++++ xmlrpc-epi-0.51/Makefile.am 2007-02-03 00:00:00.000000000 +0900
+@@ -1,4 +1,4 @@
+-SUBDIRS = expat src sample
++SUBDIRS = src sample
+
+ CHANGE_LOG_GEN_BIN = scripts/cvs2cl.pl
+ CHANGE_LOG_GEN_FLAGS = -t -r -b --accum -I ChangeLog --gmt --prune
+diff -Naur xmlrpc-epi-0.51.orig/configure.in xmlrpc-epi-0.51/configure.in
+--- xmlrpc-epi-0.51.orig/configure.in 2002-06-24 08:48:29.000000000 +0900
++++ xmlrpc-epi-0.51/configure.in 2007-02-03 00:29:58.000000000 +0900
+@@ -15,12 +15,11 @@
+ AC_PROG_MAKE_SET
+ AC_PROG_LIBTOOL
+
+-LIBS="-L/usr/local/lib"
++LIBS="-lexpat"
+
+ dnl Checks for header files.
+ AC_HEADER_STDC
+-AC_CHECK_HEADERS(fcntl.h malloc.h unistd.h)
+-
++AC_CHECK_HEADERS(fcntl.h malloc.h unistd.h expat.h)
+
+ dnl Checks for typedefs, structures, and compiler characteristics.
+ AC_C_CONST
+@@ -36,7 +35,7 @@
+
+ AC_CHECK_FUNCS(mktime strstr)
+
+-AC_OUTPUT(src/Makefile Makefile sample/Makefile expat/Makefile expat/xmltok/Makefile expat/xmlparse/Makefile)
++AC_OUTPUT(src/Makefile Makefile sample/Makefile)
+
+
+
+diff -Naur xmlrpc-epi-0.51.orig/sample/Makefile.am xmlrpc-epi-0.51/sample/Makefile.am
+--- xmlrpc-epi-0.51.orig/sample/Makefile.am 2001-09-01 06:38:27.000000000 +0900
++++ xmlrpc-epi-0.51/sample/Makefile.am 2007-02-03 00:17:22.000000000 +0900
+@@ -1,4 +1,4 @@
+-INCLUDES=-I../src -I../expat/xmltok -I../expat/xmlparse
++INCLUDES=-I../src
+
+ bin_PROGRAMS = sample client server server_compliance_test memtest hello_client hello_server
+
+diff -Naur xmlrpc-epi-0.51.orig/src/Makefile.am xmlrpc-epi-0.51/src/Makefile.am
+--- xmlrpc-epi-0.51.orig/src/Makefile.am 2001-09-17 05:27:27.000000000 +0900
++++ xmlrpc-epi-0.51/src/Makefile.am 2007-02-03 00:14:27.000000000 +0900
+@@ -1,8 +1,8 @@
+-INCLUDES=-I../liblm -I../expat/xmltok -I../expat/xmlparse -I/usr/local/ssl/include
++INCLUDES=-I../liblm
+
+ lib_LTLIBRARIES = libxmlrpc.la
+
+-libxmlrpc_la_LIBADD = ../expat/xmltok/libexpat_tok.la ../expat/xmlparse/libexpat_parse.la
++libxmlrpc_la_LIBADD =
+
+ libxmlrpc_la_SOURCES = \
+ base64.c \
+diff -Naur xmlrpc-epi-0.51.orig/src/xml_element.c xmlrpc-epi-0.51/src/xml_element.c
+--- xmlrpc-epi-0.51.orig/src/xml_element.c 2002-05-24 02:46:51.000000000 +0900
++++ xmlrpc-epi-0.51/src/xml_element.c 2007-02-03 00:15:10.000000000 +0900
+@@ -91,7 +91,7 @@
+
+ #include "xml_element.h"
+ #include "queue.h"
+-#include "xmlparse.h"
++#include "expat.h"
+ #include "encodings.h"
+
+ #define my_free(thing) if(thing) {free(thing); thing = 0;}
+diff -Naur xmlrpc-epi-0.51.orig/src/xmlrpc.c xmlrpc-epi-0.51/src/xmlrpc.c
+--- xmlrpc-epi-0.51.orig/src/xmlrpc.c 2002-03-10 08:15:44.000000000 +0900
++++ xmlrpc-epi-0.51/src/xmlrpc.c 2007-02-03 00:15:40.000000000 +0900
+@@ -120,7 +120,7 @@
+
+ #include "queue.h"
+ #include "xmlrpc.h"
+-#include "xmlparse.h"
++#include "expat.h"
+ #include "base64.h"
+
+ #include "xml_to_xmlrpc.h"
diff --git a/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-gcc4.patch b/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-gcc4.patch
new file mode 100644
index 0000000..c7ba6a1
--- /dev/null
+++ b/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-gcc4.patch
@@ -0,0 +1,11 @@
+--- xmlrpc-epi-0.51/src/xml_element.c.gcc4 2005-08-09 19:07:40.000000000 -0400
++++ xmlrpc-epi-0.51/src/xml_element.c 2005-08-09 19:11:05.000000000 -0400
+@@ -170,7 +170,7 @@ void xml_elem_free_non_recurse(xml_eleme
+
+ Q_Destroy(&root->children);
+ Q_Destroy(&root->attrs);
+- my_free((char*)root->name);
++ my_free(root->name);
+ simplestring_free(&root->text);
+ my_free(root);
+ }
diff --git a/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-secondlife.patch b/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-secondlife.patch
new file mode 100644
index 0000000..a5d31eb
--- /dev/null
+++ b/dev-libs/xmlrpc-epi/files/xmlrpc-epi-0.51-secondlife.patch
@@ -0,0 +1,12 @@
+--- xmlrpc-epi-0.51-old/src/queue.h 2001-05-18 10:29:09.000000000 -0700
++++ xmlrpc-epi-0.51-new/src/queue.h 2006-05-02 14:25:30.573246791 -0700
+@@ -24,6 +24,9 @@
+ #define True_ 1
+ #endif
+
++/* 2006-05-02 Inserted to enable compilation of rpcserver on linux. Phoenix */
++#define queue xmlrpc_queue
++
+ typedef struct nodeptr datanode;
+
+ typedef struct nodeptr {
diff --git a/dev-libs/xmlrpc-epi/xmlrpc-epi-0.51.ebuild b/dev-libs/xmlrpc-epi/xmlrpc-epi-0.51.ebuild
new file mode 100644
index 0000000..2d67c80
--- /dev/null
+++ b/dev-libs/xmlrpc-epi/xmlrpc-epi-0.51.ebuild
@@ -0,0 +1,31 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+inherit autotools eutils
+
+DESCRIPTION=""
+HOMEPAGE="http://xmlrpc-epi.sourceforge.net/"
+SRC_URI="mirror://sourceforge/xmlrpc-epi/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+
+DEPEND="sys-devel/gettext
+ !dev-libs/xmlrpc-c"
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+ epatch "${FILESDIR}"/${P}-64bit-fixes.patch
+ epatch "${FILESDIR}"/${P}-gcc4.patch
+ epatch "${FILESDIR}"/${P}-expat.patch
+ epatch "${FILESDIR}"/${P}-secondlife.patch
+ eautoreconf
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die
+}
diff --git a/games-simulation/secondlife-bin/Manifest b/games-simulation/secondlife-bin/Manifest
new file mode 100644
index 0000000..4ac9da9
--- /dev/null
+++ b/games-simulation/secondlife-bin/Manifest
@@ -0,0 +1,16 @@
+DIST SecondLife_i686_1_13_3_2.tar.bz2 40863936 RMD160 6b2ec9dcd94b2fafa923b606e46eec74bbab4538 SHA1 09629e3da7af9eb647538ee464379ccd384ff9b1 SHA256 db181dc52b31e91982bfed2e19678dfca21434a795fefd3dba06bdcf9fdc30a8
+DIST SecondLife_i686_1_13_4_59558_FIRSTLOOK.tar.bz2 50021132 RMD160 d9fd87bfcadef25a609a982653f2a8b491b7527f SHA1 875d3ccee60910036c0c30ac98d9b0b14154e68a SHA256 150e372b94356063fae135730dcd68969ebc975f3983eeb626b2bf4258b4cec5
+EBUILD secondlife-bin-1.13.3.2.ebuild 2023 RMD160 17a62e6e7e477b26381603046b4c50f76892224c SHA1 8f8f84eb3a46b95f35b262f8d0669e738d389af1 SHA256 5a4be413c4ff89c599be2e4aff1504c1fd191927b5b2b0651eacbb74b23891fb
+MD5 a6bc44c4fc3c0a4427e1a581ae9eca61 secondlife-bin-1.13.3.2.ebuild 2023
+RMD160 17a62e6e7e477b26381603046b4c50f76892224c secondlife-bin-1.13.3.2.ebuild 2023
+SHA256 5a4be413c4ff89c599be2e4aff1504c1fd191927b5b2b0651eacbb74b23891fb secondlife-bin-1.13.3.2.ebuild 2023
+EBUILD secondlife-bin-1.13.4.59558.ebuild 2144 RMD160 f343fb63c15a2a4ca49a43d5a181549b128bb072 SHA1 92d59c097ba22bc16623654065a0109f0b96cc4a SHA256 f4ddd6e4e89f8514ca9f9b6d62889d80475d68eb37bf20a4cb6f282a74da9d0f
+MD5 b6703cee5426acf4b9ecaaa253638c5b secondlife-bin-1.13.4.59558.ebuild 2144
+RMD160 f343fb63c15a2a4ca49a43d5a181549b128bb072 secondlife-bin-1.13.4.59558.ebuild 2144
+SHA256 f4ddd6e4e89f8514ca9f9b6d62889d80475d68eb37bf20a4cb6f282a74da9d0f secondlife-bin-1.13.4.59558.ebuild 2144
+MD5 119ac56f6e51bb5a576257d3cd08702e files/digest-secondlife-bin-1.13.3.2 283
+RMD160 78158b635c14929f51e6c57e997ce94048b46b5b files/digest-secondlife-bin-1.13.3.2 283
+SHA256 0aa603511191e63204fdf1d31c42cf84d8bc775435e86742734e27a81471ac5e files/digest-secondlife-bin-1.13.3.2 283
+MD5 22fbda7b5d3de28c0865c5dfa29239b5 files/digest-secondlife-bin-1.13.4.59558 325
+RMD160 b09993240ae564218f3d0f4e793d3fbae06708a3 files/digest-secondlife-bin-1.13.4.59558 325
+SHA256 76c67d7929431353f14b9924ce6e548f24f411ff57a96da7ae559aa6e45f2d21 files/digest-secondlife-bin-1.13.4.59558 325
diff --git a/games-simulation/secondlife-bin/files/digest-secondlife-bin-1.13.3.2 b/games-simulation/secondlife-bin/files/digest-secondlife-bin-1.13.3.2
new file mode 100644
index 0000000..f3da53b
--- /dev/null
+++ b/games-simulation/secondlife-bin/files/digest-secondlife-bin-1.13.3.2
@@ -0,0 +1,3 @@
+MD5 9800068b0a06ae5370633fafa57eae10 SecondLife_i686_1_13_3_2.tar.bz2 40863936
+RMD160 6b2ec9dcd94b2fafa923b606e46eec74bbab4538 SecondLife_i686_1_13_3_2.tar.bz2 40863936
+SHA256 db181dc52b31e91982bfed2e19678dfca21434a795fefd3dba06bdcf9fdc30a8 SecondLife_i686_1_13_3_2.tar.bz2 40863936
diff --git a/games-simulation/secondlife-bin/files/digest-secondlife-bin-1.13.4.59558 b/games-simulation/secondlife-bin/files/digest-secondlife-bin-1.13.4.59558
new file mode 100644
index 0000000..01dd0dd
--- /dev/null
+++ b/games-simulation/secondlife-bin/files/digest-secondlife-bin-1.13.4.59558
@@ -0,0 +1,3 @@
+MD5 22b16b32f9667b66d93221ef98de7392 SecondLife_i686_1_13_4_59558_FIRSTLOOK.tar.bz2 50021132
+RMD160 d9fd87bfcadef25a609a982653f2a8b491b7527f SecondLife_i686_1_13_4_59558_FIRSTLOOK.tar.bz2 50021132
+SHA256 150e372b94356063fae135730dcd68969ebc975f3983eeb626b2bf4258b4cec5 SecondLife_i686_1_13_4_59558_FIRSTLOOK.tar.bz2 50021132
diff --git a/games-simulation/secondlife-bin/secondlife-bin-1.13.3.2.ebuild b/games-simulation/secondlife-bin/secondlife-bin-1.13.3.2.ebuild
new file mode 100644
index 0000000..3bfd28f
--- /dev/null
+++ b/games-simulation/secondlife-bin/secondlife-bin-1.13.3.2.ebuild
@@ -0,0 +1,89 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+inherit games
+
+MY_P="SecondLife_i686_${PV//./_}"
+
+DESCRIPTION="A 3D MMORPG virtual world entirely built and owned by its residents"
+HOMEPAGE="http://secondlife.com/"
+SRC_URI="http://secondlife.com/downloads/viewer/${MY_P}.tar.bz2"
+
+LICENSE="as-is"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+RESTRICT="mirror strip"
+
+dir="${GAMES_PREFIX_OPT}/secondlife"
+QA_EXECSTACK="${dir:1}/bin/do-not-directly-run-secondlife-bin
+ ${dir:1}/lib/libGLU.so.1
+ ${dir:1}/lib/libkdu_v42R.so
+ ${dir:1}/lib/libcrypto.so.0.9.7
+ ${dir:1}/lib/libfmod-3.75.so"
+QA_TEXTRELS="${dir:1}/lib/libfreetype.so.6
+ ${dir:1}/lib/libcrypto.so.0.9.7
+ ${dir:1}/lib/libGLU.so.1
+ ${dir:1}/lib/libkdu_v42R.so
+ ${dir:1}/lib/libfmod-3.75.so
+ ${dir:1}/lib/libelfio.so"
+
+RDEPEND="sys-libs/glibc
+ media-fonts/kochi-substitute
+ x86? (
+ x11-libs/libX11
+ x11-libs/libXau
+ x11-libs/libXdmcp
+ x11-libs/libXext
+ dev-libs/libgcrypt
+ dev-libs/libgpg-error
+ dev-libs/openssl
+ media-libs/freetype
+ media-libs/libogg
+ media-libs/libsdl
+ media-libs/libvorbis
+ net-libs/gnutls
+ net-misc/curl
+ sys-libs/zlib
+ virtual/glu
+ virtual/opengl
+ )
+ amd64? (
+ app-emulation/emul-linux-x86-sdl
+ app-emulation/emul-linux-x86-gtklibs
+ )"
+
+S=${WORKDIR}/${MY_P}
+
+src_unpack() {
+ unpack ${A}
+
+ cd "${S}"
+ rm unicode.ttf
+}
+
+src_install() {
+ exeinto "${dir}"
+ doexe launch_url.sh linux-crash-logger.bin secondlife || die
+ rm -rf launch_url.sh linux-crash-logger.bin secondlife
+
+ exeinto "${dir}"/bin
+ doexe bin/do-not-directly-run-secondlife-bin || die
+ rm -rf bin
+
+ exeinto "${dir}"/lib
+ doexe lib/* || die
+ rm -rf lib
+
+ insinto "${dir}"
+ doins -r * || die "doins * failed"
+
+ dosym /usr/share/fonts/kochi-substitute/kochi-mincho-subst.ttf "${dir}"/unicode.ttf
+
+ games_make_wrapper secondlife-bin ./secondlife "${dir}" "${dir}"/lib
+ newicon secondlife.ico secondlife-bin.ico
+ make_desktop_entry secondlife-bin "Second Life(bin)" secondlife-bin.ico
+
+ prepgamesdirs
+}
diff --git a/games-simulation/secondlife-bin/secondlife-bin-1.13.4.59558.ebuild b/games-simulation/secondlife-bin/secondlife-bin-1.13.4.59558.ebuild
new file mode 100644
index 0000000..0aa317e
--- /dev/null
+++ b/games-simulation/secondlife-bin/secondlife-bin-1.13.4.59558.ebuild
@@ -0,0 +1,91 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+inherit games
+
+MY_P="SecondLife_i686_${PV//./_}_FIRSTLOOK"
+#MY_P="SecondLife_i686_${PV//./_}"
+
+DESCRIPTION="A 3D MMORPG virtual world entirely built and owned by its residents"
+HOMEPAGE="http://secondlife.com/"
+SRC_URI="http://s3.amazonaws.com/firstlook-secondlife-com/${MY_P}.tar.bz2"
+#SRC_URI="http://secondlife.com/downloads/viewer/${MY_P}.tar.bz2"
+
+LICENSE="as-is"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+RESTRICT="mirror strip"
+
+dir="${GAMES_PREFIX_OPT}/secondlife"
+QA_EXECSTACK="${dir:1}/bin/do-not-directly-run-secondlife-bin
+ ${dir:1}/lib/libGLU.so.1
+ ${dir:1}/lib/libkdu_v42R.so
+ ${dir:1}/lib/libcrypto.so.0.9.7
+ ${dir:1}/lib/libfmod-3.75.so"
+QA_TEXTRELS="${dir:1}/lib/libfreetype.so.6
+ ${dir:1}/lib/libcrypto.so.0.9.7
+ ${dir:1}/lib/libGLU.so.1
+ ${dir:1}/lib/libkdu_v42R.so
+ ${dir:1}/lib/libfmod-3.75.so
+ ${dir:1}/lib/libelfio.so"
+
+RDEPEND="sys-libs/glibc
+ media-fonts/kochi-substitute
+ x86? (
+ x11-libs/libX11
+ x11-libs/libXau
+ x11-libs/libXdmcp
+ x11-libs/libXext
+ dev-libs/libgcrypt
+ dev-libs/libgpg-error
+ dev-libs/openssl
+ media-libs/freetype
+ media-libs/libogg
+ media-libs/libsdl
+ media-libs/libvorbis
+ net-libs/gnutls
+ net-misc/curl
+ sys-libs/zlib
+ virtual/glu
+ virtual/opengl
+ )
+ amd64? (
+ app-emulation/emul-linux-x86-sdl
+ app-emulation/emul-linux-x86-gtklibs
+ )"
+
+S=${WORKDIR}/${MY_P}
+
+src_unpack() {
+ unpack ${A}
+
+ cd "${S}"
+ rm unicode.ttf
+}
+
+src_install() {
+ exeinto "${dir}"
+ doexe launch_url.sh linux-crash-logger.bin secondlife || die
+ rm -rf launch_url.sh linux-crash-logger.bin secondlife
+
+ exeinto "${dir}"/bin
+ doexe bin/do-not-directly-run-secondlife-bin || die
+ rm -rf bin
+
+ exeinto "${dir}"/lib
+ doexe lib/* || die
+ rm -rf lib
+
+ insinto "${dir}"
+ doins -r * || die "doins * failed"
+
+ dosym /usr/share/fonts/kochi-substitute/kochi-mincho-subst.ttf "${dir}"/unicode.ttf
+
+ games_make_wrapper secondlife-bin ./secondlife "${dir}" "${dir}"/lib
+ newicon secondlife.ico secondlife-bin.ico
+ make_desktop_entry secondlife-bin "Second Life(bin)" secondlife-bin.ico
+
+ prepgamesdirs
+}
diff --git a/games-simulation/secondlife/Manifest b/games-simulation/secondlife/Manifest
new file mode 100644
index 0000000..1c58797
--- /dev/null
+++ b/games-simulation/secondlife/Manifest
@@ -0,0 +1,25 @@
+AUX opensecondlife-svn41.patch 635 RMD160 4ff31d0a2e52c2ccfa6f5591e0e6e46471609690 SHA1 03998427597e06ede4d702ab4a91a7c8ae6bf824 SHA256 100a42a60f46bc6abd8b2d77ae81ee2d4ea56edcfabb1ab00b589ce0d9314bce
+MD5 23d4c1db16f9351dc2d190120d1962b4 files/opensecondlife-svn41.patch 635
+RMD160 4ff31d0a2e52c2ccfa6f5591e0e6e46471609690 files/opensecondlife-svn41.patch 635
+SHA256 100a42a60f46bc6abd8b2d77ae81ee2d4ea56edcfabb1ab00b589ce0d9314bce files/opensecondlife-svn41.patch 635
+AUX secondlife-1.13.3.2-llimagej2coj_debug.patch 3795 RMD160 4a0bd6cb16e1b35b445b2a61e7d7e372cdcd4450 SHA1 4ac6b96863d64c24f0708dc453cc2b48eb44883e SHA256 d1d16728aa2ebfac50b0563aa57a2f03d8e3dfd12f0fc10c2c2d3e99bcec28ca
+MD5 3b6706a0439c55c02e0d86acd4f495d1 files/secondlife-1.13.3.2-llimagej2coj_debug.patch 3795
+RMD160 4a0bd6cb16e1b35b445b2a61e7d7e372cdcd4450 files/secondlife-1.13.3.2-llimagej2coj_debug.patch 3795
+SHA256 d1d16728aa2ebfac50b0563aa57a2f03d8e3dfd12f0fc10c2c2d3e99bcec28ca files/secondlife-1.13.3.2-llimagej2coj_debug.patch 3795
+AUX secondlife-1.13.3.59315-no_fmod.patch 1146 RMD160 6c9a0f3f2c60fc9dcd7bf89e89c878caa4f730f7 SHA1 ed09cfb98608f530df3286e4d0e2b517821dcd6d SHA256 56a9cf153a2dc18c0527e6c2fed0645f57a542a7ab0990fad333542ebeee2a78
+MD5 29bf4466ac67b38cad15439d87d4f888 files/secondlife-1.13.3.59315-no_fmod.patch 1146
+RMD160 6c9a0f3f2c60fc9dcd7bf89e89c878caa4f730f7 files/secondlife-1.13.3.59315-no_fmod.patch 1146
+SHA256 56a9cf153a2dc18c0527e6c2fed0645f57a542a7ab0990fad333542ebeee2a78 files/secondlife-1.13.3.59315-no_fmod.patch 1146
+AUX secondlife-1.13.3.59558-gentoo.patch 8011 RMD160 aefb846e2d92e93fd9ee845f610ea2e39b44b08a SHA1 977415c6d60118d2a4366fac7ecdf7cd0d1f00f9 SHA256 dde90f2a3ecb9622bd2f366f82af91e0fe026afd593f1289a9be8095845971d1
+MD5 8d337cb0bb353e76a9e819257bc2619d files/secondlife-1.13.3.59558-gentoo.patch 8011
+RMD160 aefb846e2d92e93fd9ee845f610ea2e39b44b08a files/secondlife-1.13.3.59558-gentoo.patch 8011
+SHA256 dde90f2a3ecb9622bd2f366f82af91e0fe026afd593f1289a9be8095845971d1 files/secondlife-1.13.3.59558-gentoo.patch 8011
+DIST slviewer-artwork-FL-1.13.3.59558.zip 20005643 RMD160 bdc64269107054da2176d462f146140ea953e272 SHA1 da987b9201ce44ba72c530e50f0d270fda1c8921 SHA256 0bd2f8c2135184bcab756517c95bc5154e11666014439c56040332d4817b64a0
+DIST slviewer-src-FL-1.13.3.59558.tar.gz 9706079 RMD160 2ab28df4625813f629365c193c447915fb37dd1d SHA1 9ea1223291e304a36004ea3912b101228fd368ac SHA256 fc56a90120915d5b229458cf0d158e3cafac14338aa5e4f9f4c2a44c5b168f87
+EBUILD secondlife-1.13.3.59558.ebuild 3593 RMD160 21822f31a0137f1ee4b1c0eebbb338b53b2c7c4a SHA1 13d968252a0cc18448fb54811e5db6c498a5fd4d SHA256 6618a1691be9ca5e49f7b2c622f61871e9406a3840d54b884119e241a710ee10
+MD5 2513541c828dd4289f023c801a43156d secondlife-1.13.3.59558.ebuild 3593
+RMD160 21822f31a0137f1ee4b1c0eebbb338b53b2c7c4a secondlife-1.13.3.59558.ebuild 3593
+SHA256 6618a1691be9ca5e49f7b2c622f61871e9406a3840d54b884119e241a710ee10 secondlife-1.13.3.59558.ebuild 3593
+MD5 5c5223731df04a37b47f37a14572e7c1 files/digest-secondlife-1.13.3.59558 584
+RMD160 fa83237fb5a462f2ff8a49664b9a78371c322220 files/digest-secondlife-1.13.3.59558 584
+SHA256 2f7dffdd4cecc746870e0ac2a6905b555adc6914aa908f06dc66ba35f74e8878 files/digest-secondlife-1.13.3.59558 584
diff --git a/games-simulation/secondlife/files/digest-secondlife-1.13.3.59558 b/games-simulation/secondlife/files/digest-secondlife-1.13.3.59558
new file mode 100644
index 0000000..b537cb3
--- /dev/null
+++ b/games-simulation/secondlife/files/digest-secondlife-1.13.3.59558
@@ -0,0 +1,6 @@
+MD5 ed38c3e7e11467a3cd140e24453c3884 slviewer-artwork-FL-1.13.3.59558.zip 20005643
+RMD160 bdc64269107054da2176d462f146140ea953e272 slviewer-artwork-FL-1.13.3.59558.zip 20005643
+SHA256 0bd2f8c2135184bcab756517c95bc5154e11666014439c56040332d4817b64a0 slviewer-artwork-FL-1.13.3.59558.zip 20005643
+MD5 0b4ff4cf369f1414d257742ce2d7ab6b slviewer-src-FL-1.13.3.59558.tar.gz 9706079
+RMD160 2ab28df4625813f629365c193c447915fb37dd1d slviewer-src-FL-1.13.3.59558.tar.gz 9706079
+SHA256 fc56a90120915d5b229458cf0d158e3cafac14338aa5e4f9f4c2a44c5b168f87 slviewer-src-FL-1.13.3.59558.tar.gz 9706079
diff --git a/games-simulation/secondlife/files/opensecondlife-svn41.patch b/games-simulation/secondlife/files/opensecondlife-svn41.patch
new file mode 100644
index 0000000..f7f5606
--- /dev/null
+++ b/games-simulation/secondlife/files/opensecondlife-svn41.patch
@@ -0,0 +1,28 @@
+Index: linden/indra/llcommon/llfasttimer.cpp
+===================================================================
+--- linden/indra/llcommon/llfasttimer.cpp (revision 40)
++++ linden/indra/llcommon/llfasttimer.cpp (revision 41)
+@@ -90,21 +90,14 @@
+ #endif // LL_WINDOWS
+
+
+-#if LL_LINUX
++#if LL_LINUX && (defined(__i386__) || defined(__amd64__))
+ U64 get_cpu_clock_count()
+ {
+ U64 x;
+ __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
+ return x;
+ }
+-#endif
+-
+-#if LL_DARWIN
+-//
+-// Mac implementation of CPU clock
+-//
+-// Just use gettimeofday implementation for now
+-
++#else
+ U64 get_cpu_clock_count()
+ {
+ return get_clock_count();
diff --git a/games-simulation/secondlife/files/secondlife-1.13.3.2-llimagej2coj_debug.patch b/games-simulation/secondlife/files/secondlife-1.13.3.2-llimagej2coj_debug.patch
new file mode 100644
index 0000000..e66a198
--- /dev/null
+++ b/games-simulation/secondlife/files/secondlife-1.13.3.2-llimagej2coj_debug.patch
@@ -0,0 +1,121 @@
+--- linden/indra/llimagej2coj/llimagej2coj.cpp.orig 2007-02-04 09:52:40.000000000 +0100
++++ linden/indra/llimagej2coj/llimagej2coj.cpp 2007-02-05 21:09:53.000000000 +0100
+@@ -66,7 +66,8 @@
+ sample debug callback expecting no client object
+ */
+ void info_callback(const char *msg, void *client_data) {
+- fprintf(stdout, "[INFO] %s", msg);
++ FILE *stream = (FILE*)client_data;
++ fprintf(stream, "[INFO] %s", msg);
+ }
+
+
+@@ -86,21 +87,23 @@
+ // FIXME: Get the comment field out of the texture
+ //
+
+- LLTimer decode_timer;
+-
+ opj_dparameters_t parameters; /* decompression parameters */
++#ifdef _DEBUG
+ opj_event_mgr_t event_mgr; /* event manager */
++#endif
+ opj_image_t *image = NULL;
+
+ opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
+ opj_cio_t *cio = NULL;
+
+
++#ifdef _DEBUG
+ /* configure the event callbacks (not required) */
+ memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
+ event_mgr.error_handler = error_callback;
+ event_mgr.warning_handler = warning_callback;
+ event_mgr.info_handler = info_callback;
++#endif
+
+ /* set decoding parameters to default values */
+ opj_set_default_decoder_parameters(&parameters);
+@@ -116,7 +119,11 @@
+ dinfo = opj_create_decompress(CODEC_J2K);
+
+ /* catch events using our callbacks and give a local context */
+- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
++#ifdef _DEBUG
++ opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
++#else
++ opj_set_event_mgr((opj_common_ptr)dinfo, NULL, stderr);
++#endif
+
+ /* setup the decoder decoding parameters using user parameters */
+ opj_setup_decoder(dinfo, &parameters);
+@@ -181,10 +188,10 @@
+ {
+ const S32 MAX_COMPS = 5;
+ opj_cparameters_t parameters; /* compression parameters */
++#ifdef _DEBUG
+ opj_event_mgr_t event_mgr; /* event manager */
+
+-
+- /*
++ /*
+ configure the event callbacks (not required)
+ setting of each callback is optional
+ */
+@@ -192,6 +199,7 @@
+ event_mgr.error_handler = error_callback;
+ event_mgr.warning_handler = warning_callback;
+ event_mgr.info_handler = info_callback;
++#endif
+
+ /* set encoding parameters to default values */
+ opj_set_default_encoder_parameters(&parameters);
+@@ -264,7 +272,11 @@
+ opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);
+
+ /* catch events using our callbacks and give a local context */
+- opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
++#ifdef _DEBUG
++ opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
++#else
++ opj_set_event_mgr((opj_common_ptr)cinfo, NULL, stderr);
++#endif
+
+ /* setup the encoder parameters using the current image and using user parameters */
+ opj_setup_encoder(cinfo, &parameters, image);
+@@ -309,18 +321,22 @@
+ base.updateRawDiscardLevel();
+
+ opj_dparameters_t parameters; /* decompression parameters */
++#ifdef _DEBUG
+ opj_event_mgr_t event_mgr; /* event manager */
++#endif
+ opj_image_t *image = NULL;
+
+ opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
+ opj_cio_t *cio = NULL;
+
+
++#ifdef _DEBUG
+ /* configure the event callbacks (not required) */
+ memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
+ event_mgr.error_handler = error_callback;
+ event_mgr.warning_handler = warning_callback;
+ event_mgr.info_handler = info_callback;
++#endif
+
+ /* set decoding parameters to default values */
+ opj_set_default_decoder_parameters(&parameters);
+@@ -336,7 +352,11 @@
+ dinfo = opj_create_decompress(CODEC_J2K);
+
+ /* catch events using our callbacks and give a local context */
+- opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
++#ifdef _DEBUG
++ opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
++#else
++ opj_set_event_mgr((opj_common_ptr)dinfo, NULL, stderr);
++#endif
+
+ /* setup the decoder decoding parameters using user parameters */
+ opj_setup_decoder(dinfo, &parameters);
diff --git a/games-simulation/secondlife/files/secondlife-1.13.3.59315-no_fmod.patch b/games-simulation/secondlife/files/secondlife-1.13.3.59315-no_fmod.patch
new file mode 100644
index 0000000..fdcb331
--- /dev/null
+++ b/games-simulation/secondlife/files/secondlife-1.13.3.59315-no_fmod.patch
@@ -0,0 +1,21 @@
+diff -Naur linden.orig/indra/SConstruct linden/indra/SConstruct
+--- linden.orig/indra/SConstruct 2007-02-09 15:20:12.000000000 +0900
++++ linden/indra/SConstruct 2007-02-10 17:06:14.000000000 +0900
+@@ -180,7 +180,7 @@
+ # Linux-only flags
+ flags += '-DLL_LINUX=1 '
+ if build_target == 'client':
+- flags += '-DAPPID=secondlife -DLL_SDL=1 -DLL_X11=1 '
++ flags += '-DAPPID=secondlife -DLL_SDL=1 -DLL_FMOD=0 -DLL_X11=1 '
+ flags += '-DLL_GTK=1 '
+ client_external_libs += [ 'gtk-x11-2.0', 'elfio' ]
+ include_dirs += [ '../libraries/' + system_str + '/include/gtk-2.0' ]
+@@ -393,7 +393,7 @@
+ ##################
+ output_bin = 'newview/secondlife-' + arch + '-bin'
+
+- external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'fmod-3.75', 'db-4.2', 'openjpeg' ]
++ external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'db-4.2', 'openjpeg' ]
+ external_libs.remove('cares')
+
+ internal_libs = [ 'lscript', 'llwindow', 'llrender', 'llprimitive',
diff --git a/games-simulation/secondlife/files/secondlife-1.13.3.59558-gentoo.patch b/games-simulation/secondlife/files/secondlife-1.13.3.59558-gentoo.patch
new file mode 100644
index 0000000..352fe1e
--- /dev/null
+++ b/games-simulation/secondlife/files/secondlife-1.13.3.59558-gentoo.patch
@@ -0,0 +1,211 @@
+diff -Naur linden.orig/indra/SConstruct linden/indra/SConstruct
+--- linden.orig/indra/SConstruct 2007-03-22 15:34:54.000000000 +0900
++++ linden/indra/SConstruct 2007-03-22 20:46:41.000000000 +0900
+@@ -192,6 +192,12 @@
+ include_dirs += [ '../libraries/' + system_str + '/include/atk-1.0' ]
+ include_dirs += [ '../libraries/' + system_str + '/include/ELFIO' ]
+ include_dirs += [ '../libraries/' + system_str + '/include/llfreetype2' ]
++ pipe = os.popen('pkg-config gtk+-2.0 --cflags')
++ flags += pipe.read().rstrip('\n') + ' '
++ pipe.close()
++ pipe = os.popen('freetype-config --cflags')
++ flags += pipe.read().rstrip('\n') + ' '
++ pipe.close()
+
+ # llmozlib stuff
+ if enable_mozlib == 'yes':
+@@ -207,7 +213,7 @@
+ ### Build type-specific flags ###
+
+ debug_opts = flags + '-fno-inline -O0 -D_DEBUG -DLL_DEBUG=1 '
+- release_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 '
++ release_opts = flags + '-DNDEBUG -DLL_RELEASE=1 '
+ releasenoopt_opts = flags + '-O0 -DNDEBUG -DLL_RELEASE=1 '
+ releasefordownload_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 '
+
+diff -Naur linden.orig/indra/llcommon/llsdserialize_xml.cpp linden/indra/llcommon/llsdserialize_xml.cpp
+--- linden.orig/indra/llcommon/llsdserialize_xml.cpp 2007-03-22 15:34:56.000000000 +0900
++++ linden/indra/llcommon/llsdserialize_xml.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -35,7 +35,7 @@
+
+ extern "C"
+ {
+-#include "expat/expat.h"
++#include "expat.h"
+ }
+
+ /**
+diff -Naur linden.orig/indra/llcommon/llsys.cpp linden/indra/llcommon/llsys.cpp
+--- linden.orig/indra/llcommon/llsys.cpp 2007-03-22 15:34:56.000000000 +0900
++++ linden/indra/llcommon/llsys.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -30,7 +30,7 @@
+ #include "llsys.h"
+
+ #include <iostream>
+-#include <zlib/zlib.h>
++#include <zlib.h>
+ #include "processor.h"
+
+ #if LL_WINDOWS
+diff -Naur linden.orig/indra/llimage/llimagejpeg.h linden/indra/llimage/llimagejpeg.h
+--- linden.orig/indra/llimage/llimagejpeg.h 2007-03-22 15:34:56.000000000 +0900
++++ linden/indra/llimage/llimagejpeg.h 2007-03-22 19:13:51.000000000 +0900
+@@ -33,9 +33,8 @@
+ #include "llimage.h"
+
+ extern "C" {
+-#include "jpeglib/jinclude.h"
+-#include "jpeglib/jpeglib.h"
+-#include "jpeglib/jerror.h"
++#include "jpeglib.h"
++#include "jerror.h"
+ }
+
+ class LLImageJPEG : public LLImageFormatted
+diff -Naur linden.orig/indra/llimagej2coj/llimagej2coj.cpp linden/indra/llimagej2coj/llimagej2coj.cpp
+--- linden.orig/indra/llimagej2coj/llimagej2coj.cpp 2007-03-22 15:34:56.000000000 +0900
++++ linden/indra/llimagej2coj/llimagej2coj.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -30,7 +30,7 @@
+
+ // this is defined so that we get static linking.
+ #define OPJ_STATIC
+-#include "openjpeg/openjpeg.h"
++#include "openjpeg.h"
+
+ #include "lltimer.h"
+ #include "llmemory.h"
+diff -Naur linden.orig/indra/llmessage/llfiltersd2xmlrpc.cpp linden/indra/llmessage/llfiltersd2xmlrpc.cpp
+--- linden.orig/indra/llmessage/llfiltersd2xmlrpc.cpp 2007-03-22 15:34:58.000000000 +0900
++++ linden/indra/llmessage/llfiltersd2xmlrpc.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -76,7 +76,7 @@
+
+ #include <sstream>
+ #include <iterator>
+-#include <xmlrpc-epi/xmlrpc.h>
++#include <xmlrpc.h>
+ #include "apr-1/apr_base64.h"
+
+ #include "llbuffer.h"
+diff -Naur linden.orig/indra/llmessage/llhttpassetstorage.cpp linden/indra/llmessage/llhttpassetstorage.cpp
+--- linden.orig/indra/llmessage/llhttpassetstorage.cpp 2007-03-22 15:34:58.000000000 +0900
++++ linden/indra/llmessage/llhttpassetstorage.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -36,7 +36,7 @@
+ #include "llvfile.h"
+ #include "llvfs.h"
+
+-#include "zlib/zlib.h"
++#include "zlib.h"
+
+ const U32 MAX_RUNNING_REQUESTS = 4;
+ const F32 MAX_PROCESSING_TIME = 0.005f;
+diff -Naur linden.orig/indra/llrender/llfont.cpp linden/indra/llrender/llfont.cpp
+--- linden.orig/indra/llrender/llfont.cpp 2007-03-22 15:34:58.000000000 +0900
++++ linden/indra/llrender/llfont.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -30,11 +30,11 @@
+ #include "llfont.h"
+
+ // Freetype stuff
+-#if LL_LINUX // I had to do some work to avoid the system-installed FreeType headers... --ryan.
+-#include "llfreetype2/freetype/ft2build.h"
+-#else
++// #if LL_LINUX // I had to do some work to avoid the system-installed FreeType headers... --ryan.
++// #include "llfreetype2/freetype/ft2build.h"
++// #else
+ #include <ft2build.h>
+-#endif
++// #endif
+
+ // For some reason, this won't work if it's not wrapped in the ifdef
+ #ifdef FT_FREETYPE_H
+diff -Naur linden.orig/indra/llxml/llxmlnode.h linden/indra/llxml/llxmlnode.h
+--- linden.orig/indra/llxml/llxmlnode.h 2007-03-22 15:35:00.000000000 +0900
++++ linden/indra/llxml/llxmlnode.h 2007-03-22 19:13:51.000000000 +0900
+@@ -29,7 +29,7 @@
+ #define LL_LLXMLNODE_H
+
+ #define XML_STATIC
+-#include "expat/expat.h"
++#include "expat.h"
+ #include <map>
+
+ #include "indra_constants.h"
+diff -Naur linden.orig/indra/llxml/llxmlparser.h linden/indra/llxml/llxmlparser.h
+--- linden.orig/indra/llxml/llxmlparser.h 2007-03-22 15:35:00.000000000 +0900
++++ linden/indra/llxml/llxmlparser.h 2007-03-22 19:13:51.000000000 +0900
+@@ -29,7 +29,7 @@
+ #define LL_LLXMLPARSER_H
+
+ #define XML_STATIC
+-#include "expat/expat.h"
++#include "expat.h"
+
+ class LLXmlParser
+ {
+diff -Naur linden.orig/indra/newview/llfloaterpostcard.cpp linden/indra/newview/llfloaterpostcard.cpp
+--- linden.orig/indra/newview/llfloaterpostcard.cpp 2007-03-22 15:35:12.000000000 +0900
++++ linden/indra/newview/llfloaterpostcard.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -237,7 +237,7 @@
+ {
+ }
+ // *TODO define custom uploadFailed here so it's not such a generic message
+- void LLSendPostcardResponder::uploadComplete(const LLSD& content)
++ void uploadComplete(const LLSD& content)
+ {
+ // we don't care about what the server returns from this post, just clean up the UI
+ LLUploadDialog::modalUploadFinished();
+diff -Naur linden.orig/indra/newview/lluserauth.cpp linden/indra/newview/lluserauth.cpp
+--- linden.orig/indra/newview/lluserauth.cpp 2007-03-22 15:35:09.000000000 +0900
++++ linden/indra/newview/lluserauth.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -40,7 +40,7 @@
+
+ // NOTE: MUST include these after otherincludes since queue gets redefined!?!!
+ #include <curl/curl.h>
+-#include <xmlrpc-epi/xmlrpc.h>
++#include <xmlrpc.h>
+
+
+
+diff -Naur linden.orig/indra/newview/llviewerobjectlist.cpp linden/indra/newview/llviewerobjectlist.cpp
+--- linden.orig/indra/newview/llviewerobjectlist.cpp 2007-03-22 15:35:11.000000000 +0900
++++ linden/indra/newview/llviewerobjectlist.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -60,7 +60,7 @@
+ #include "u64.h"
+ #include "llviewerimagelist.h"
+ #include "lldatapacker.h"
+-#include <zlib/zlib.h>
++#include <zlib.h>
+ #include "object_flags.h"
+
+ extern BOOL gVelocityInterpolate;
+diff -Naur linden.orig/indra/newview/llwebbrowserctrl.h linden/indra/newview/llwebbrowserctrl.h
+--- linden.orig/indra/newview/llwebbrowserctrl.h 2007-03-22 15:35:05.000000000 +0900
++++ linden/indra/newview/llwebbrowserctrl.h 2007-03-22 19:28:32.000000000 +0900
+@@ -91,6 +91,7 @@
+ #include "lldynamictexture.h"
+ #include "llmozlib.h"
+
++class LLUICtrlFactory;
+ class LLViewBorder;
+ class LLWebBrowserTexture;
+
+@@ -239,7 +240,7 @@
+ class LLWebBrowserTexture : public LLDynamicTexture
+ {
+ public:
+- LLWebBrowserTexture::LLWebBrowserTexture( S32 width, S32 height, LLWebBrowserCtrl* browserCtrl, int browserWindow );
++ LLWebBrowserTexture( S32 width, S32 height, LLWebBrowserCtrl* browserCtrl, int browserWindow );
+ virtual ~LLWebBrowserTexture();
+
+ virtual void preRender( BOOL clear_depth = TRUE ) {};
+diff -Naur linden.orig/indra/newview/llxmlrpctransaction.cpp linden/indra/newview/llxmlrpctransaction.cpp
+--- linden.orig/indra/newview/llxmlrpctransaction.cpp 2007-03-22 15:35:10.000000000 +0900
++++ linden/indra/newview/llxmlrpctransaction.cpp 2007-03-22 19:13:51.000000000 +0900
+@@ -33,7 +33,7 @@
+
+ // Have to include these last to avoid queue redefinition!
+ #include <curl/curl.h>
+-#include <xmlrpc-epi/xmlrpc.h>
++#include <xmlrpc.h>
+
+ #include "viewer.h"
+
diff --git a/games-simulation/secondlife/secondlife-1.13.3.59558.ebuild b/games-simulation/secondlife/secondlife-1.13.3.59558.ebuild
new file mode 100644
index 0000000..b04af45
--- /dev/null
+++ b/games-simulation/secondlife/secondlife-1.13.3.59558.ebuild
@@ -0,0 +1,131 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+inherit games toolchain-funcs
+
+DESCRIPTION="A 3D MMORPG virtual world entirely built and owned by its residents"
+HOMEPAGE="http://secondlife.com/"
+#SRC_URI="http://secondlife.com/developers/opensource/downloads/2007/03/slviewer-src-${PV}.tar.gz
+# http://secondlife.com/developers/opensource/downloads/2007/03/slviewer-artwork-${PV}.zip"
+SRC_URI="http://secondlife.com/developers/opensource/downloads/2007/03/slviewer-src-FL-${PV}.tar.gz
+ http://secondlife.com/developers/opensource/downloads/2007/03/slviewer-artwork-FL-${PV}.zip"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64 ~x86"
+#IUSE="fmod xulrunner"
+IUSE="fmod"
+RESTRICT="mirror"
+
+RDEPEND=">=x11-libs/gtk+-2
+ =dev-libs/apr-1*
+ =dev-libs/apr-util-1*
+ dev-libs/boost
+ >=net-misc/curl-7.15.4
+ dev-libs/openssl
+ media-libs/freetype
+ media-libs/jpeg
+ media-libs/libsdl
+ media-libs/mesa
+ media-libs/libogg
+ media-libs/libvorbis
+ fmod? ( x86? ( =media-libs/fmod-3.75* ) )
+ =sys-libs/db-4.2*
+ dev-libs/expat
+ sys-libs/zlib
+ >=dev-libs/xmlrpc-epi-0.51
+ dev-libs/ELFIO
+ >=media-libs/openjpeg-1.1.1
+ media-fonts/kochi-substitute"
+# xulrunner? ( net-libs/xulrunner )
+
+DEPEND="${RDEPEND}
+ dev-util/scons
+ dev-util/pkgconfig
+ sys-devel/flex
+ sys-devel/bison"
+
+S="${WORKDIR}/linden"
+
+dir="${GAMES_DATADIR}/${PN}"
+
+src_unpack() {
+ unpack ${A}
+
+ cd "${S}"/indra
+
+ if ! use fmod || [ "${ARCH}" != "x86" ] ; then
+ epatch "${FILESDIR}"/${PN}-1.13.3.59315-no_fmod.patch
+ fi
+
+ # VWR-100
+ epatch "${FILESDIR}"/${PN}-1.13.3.2-llimagej2coj_debug.patch
+
+ epatch "${FILESDIR}"/opensecondlife-svn41.patch
+ epatch "${FILESDIR}"/${P}-gentoo.patch
+
+ sed -i -e "s/gcc_bin = .*$/gcc_bin = '$(tc-getCXX)'/" SConstruct || die
+
+ # "${S}"/indra/newview/viewer_manifest.py
+ # touch newview/gridargs.dat
+ sed -i -e 's|\(http://secondlife\.com/app/login/\)|\1firstlook/|' \
+ newview/skins/xui/en-us/panel_login.xml || die
+ echo -n '-settings settings_firstlook.xml' > newview/gridargs.dat
+}
+
+src_compile() {
+ local mozlib
+
+ cd "${S}"/indra
+
+ # if use xulrunner; then
+ # mozlib="yes"
+ #else
+ mozlib="no"
+ #fi
+
+ CLIENT_CPPFLAGS="${CXXFLAGS}" TEMP_BUILD_DIR="/" \
+ scons BUILD=release BTARGET=client DISTCC=no GRID=firstlook MOZLIB=${mozlib} || die
+}
+
+src_install() {
+ cd "${S}"/indra/newview/
+
+ insinto "${dir}"
+ #doins featuretable.txt featuretable_mac.txt gpu_table.txt gridargs.dat || die
+ doins featuretable.txt gpu_table.txt .txt gridargs.dat || die
+ doins -r app_settings character fonts help skins res-sdl || die
+
+ doins lsl_guide.html releasenotes.txt || die
+ newins licenses-linux.txt licenses.txt || die
+ newins linux_tools/client-readme.txt README-linux.txt || die
+ newins res/ll_icon.ico secondlife.ico || die
+
+ insinto "${dir}"/app_settings/
+ doins "${S}"/scripts/messages/message_template.msg || die
+
+ exeinto "${dir}"
+ doexe linux_tools/launch_url.sh || die
+ newexe linux_tools/wrapper.sh secondlife || die
+ newexe ../linux_crash_logger/linux-crash-logger-*-bin* linux-crash-logger.bin || die
+
+ exeinto "${dir}"/bin/
+ newexe secondlife-*-bin do-not-directly-run-secondlife-bin || die
+
+ keepdir "${dir}"/lib
+
+ dosym /usr/share/fonts/kochi-substitute/kochi-mincho-subst.ttf /usr/share/games/secondlife/unicode.ttf
+
+ games_make_wrapper secondlife ./secondlife "${dir}"
+ newicon res/ll_icon.ico secondlife.ico || die
+ make_desktop_entry secondlife "Second Life" secondlife.ico
+
+ dodoc releasenotes.txt
+ newdoc licenses-linux.txt licenses.txt
+ newdoc linux_tools/client-readme.txt README-linux.txt
+
+ dohtml lsl_guide.html
+
+ prepgamesdirs
+}
diff --git a/media-libs/openjpeg/Manifest b/media-libs/openjpeg/Manifest
new file mode 100644
index 0000000..af58122
--- /dev/null
+++ b/media-libs/openjpeg/Manifest
@@ -0,0 +1,20 @@
+AUX OPJ_limit_tags_for_decode_UPDATED.patch 121951 RMD160 876e9c90ee0a18b3f4f9077e9b7f1b7b6491b3a1 SHA1 d3ad1f7da7e318b1575123e7e7032ef22ea8e362 SHA256 a661e2a121e627522736416844dcba854e532beb7d72015217d0ea6b187c6786
+MD5 8233f9be998cb6ca326ec1aa1a5cf136 files/OPJ_limit_tags_for_decode_UPDATED.patch 121951
+RMD160 876e9c90ee0a18b3f4f9077e9b7f1b7b6491b3a1 files/OPJ_limit_tags_for_decode_UPDATED.patch 121951
+SHA256 a661e2a121e627522736416844dcba854e532beb7d72015217d0ea6b187c6786 files/OPJ_limit_tags_for_decode_UPDATED.patch 121951
+AUX openjpeg-1.1.1-gentoo.patch 595 RMD160 eea4058aae591a8a50a78c06788412ddda978195 SHA1 1139bd57dcea2ecadac6597691ccffa835f5e8de SHA256 1e2677bb0635d06fe8f3a37167bf0bd339fa59e20ee7364793e103631c2e989b
+MD5 8248d3ca7ba44598b52dcfe9626554a0 files/openjpeg-1.1.1-gentoo.patch 595
+RMD160 eea4058aae591a8a50a78c06788412ddda978195 files/openjpeg-1.1.1-gentoo.patch 595
+SHA256 1e2677bb0635d06fe8f3a37167bf0bd339fa59e20ee7364793e103631c2e989b files/openjpeg-1.1.1-gentoo.patch 595
+DIST openjpeg_v1_1_1.tar.gz 1406460 RMD160 08b2318441075a8704d6b9b0ac3d9d277c44d85e SHA1 1de6f9ccebe8844c96416daca521a20a84df23f5 SHA256 6076db131bfaa966a691d718044e5b5cdbec028436be3b7a3f146d1a0e3a7ec6
+EBUILD openjpeg-1.1.1.ebuild 876 RMD160 0839119e8c5b1be4817b283a3bee5b37fb629e4f SHA1 a2459ccbac53254b97878051a5745b2fa10b5b34 SHA256 faabd254957b6a7903c566e85e34daa9de861cd6668a5d01b05bab28abf2da40
+MD5 233ec2c814bae7bc17d2c08cce133ac3 openjpeg-1.1.1.ebuild 876
+RMD160 0839119e8c5b1be4817b283a3bee5b37fb629e4f openjpeg-1.1.1.ebuild 876
+SHA256 faabd254957b6a7903c566e85e34daa9de861cd6668a5d01b05bab28abf2da40 openjpeg-1.1.1.ebuild 876
+MISC .swp 4096 RMD160 654e0e4af7c51347966f4e45088874477c3d8a12 SHA1 30c6d8301b2a1b5c9f568ad859bbde7487ffad46 SHA256 fe70d97bd7e13f5c121b33a9e6fd682dbfaec845b07edb261c661ef8de411206
+MD5 327b5dbac44adeca74794fcf547e3122 .swp 4096
+RMD160 654e0e4af7c51347966f4e45088874477c3d8a12 .swp 4096
+SHA256 fe70d97bd7e13f5c121b33a9e6fd682dbfaec845b07edb261c661ef8de411206 .swp 4096
+MD5 fcdc3157bb74483f5e444836db0580b6 files/digest-openjpeg-1.1.1 250
+RMD160 f90411a7b6c5b72cc42ab7e7c217f554dad5d4f6 files/digest-openjpeg-1.1.1 250
+SHA256 d1a1fb2cc3299dae27b36b9ef21418fa213b29ee2709dcd67a2dd597498e4155 files/digest-openjpeg-1.1.1 250
diff --git a/media-libs/openjpeg/files/OPJ_limit_tags_for_decode_UPDATED.patch b/media-libs/openjpeg/files/OPJ_limit_tags_for_decode_UPDATED.patch
new file mode 100644
index 0000000..be5cd8b
--- /dev/null
+++ b/media-libs/openjpeg/files/OPJ_limit_tags_for_decode_UPDATED.patch
@@ -0,0 +1,3765 @@
+diff -Naur OpenJPEG/libopenjpeg/j2k.c OpenJPEG-patched/libopenjpeg/j2k.c
+--- OpenJPEG/libopenjpeg/j2k.c 2007-02-19 10:59:29.000000000 +0100
++++ OpenJPEG-patched/libopenjpeg/j2k.c 2007-03-17 14:18:44.000000000 +0100
+@@ -1342,37 +1342,39 @@
+ int states;
+ /** action linked to the marker */
+ void (*handler) (opj_j2k_t *j2k);
++ /** The enum value used to limit decode to specific tags. */
++ OPJ_LIMIT_TAGS limit_tag;
+ } opj_dec_mstabent_t;
+
+ opj_dec_mstabent_t j2k_dec_mstab[] = {
+- {J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc},
+- {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, j2k_read_sot},
+- {J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod},
+- {J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc},
+- {J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz},
+- {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_cod},
+- {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_coc},
+- {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_rgn},
+- {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcd},
+- {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcc},
+- {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_poc},
+- {J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm},
+- {J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm},
+- {J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt},
+- {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm},
+- {J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt},
+- {J2K_MS_SOP, 0, 0},
+- {J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg},
+- {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_com},
++ {J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc, OPJ_TAG_SOC},
++ {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, j2k_read_sot, OPJ_TAG_SOT},
++ {J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod, OPJ_TAG_SOD},
++ {J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc, OPJ_TAG_EOC},
++ {J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz, OPJ_TAG_SIZ},
++ {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_cod, OPJ_TAG_COD},
++ {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_coc, OPJ_TAG_COC},
++ {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_rgn, OPJ_TAG_RGN},
++ {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcd, OPJ_TAG_QCD},
++ {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcc, OPJ_TAG_QCC},
++ {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_poc, OPJ_TAG_POC},
++ {J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm, OPJ_TAG_TLM},
++ {J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm, OPJ_TAG_PLM},
++ {J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt, OPJ_TAG_PLT},
++ {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm, OPJ_TAG_PPM},
++ {J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt, OPJ_TAG_PPT},
++ {J2K_MS_SOP, 0, 0, OPJ_TAG_SOP},
++ {J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg, OPJ_TAG_CRG},
++ {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_com, OPJ_TAG_COM},
+ /* UniPG>> */
+ #ifdef USE_JPWL
+- {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc},
+- {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb},
+- {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd},
+- {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red},
++ {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc, OPJ_TAG_EPC},
++ {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb, OPJ_TAG_EPB},
++ {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd, OPJ_TAG_ESD},
++ {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red, OPJ_TAG_RED},
+ #endif /* USE_JPWL */
+ /* <<UniPG */
+- {0, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_unk}
++ {0, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_unk, -1}
+ };
+
+ static void j2k_read_unk(opj_j2k_t *j2k) {
+@@ -1689,6 +1691,12 @@
+ opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id);
+ return 0;
+ }
++ /* If a partial decode is requested, stop if the current tag
++ * isn't in the list.
++ */
++ if (j2k->cp->limit_tags && !(j2k->cp->limit_tags & e->limit_tag)) {
++ return image;
++ }
+ if (e->handler) {
+ (*e->handler)(j2k);
+ }
+diff -Naur OpenJPEG/libopenjpeg/j2k.c.orig OpenJPEG-patched/libopenjpeg/j2k.c.orig
+--- OpenJPEG/libopenjpeg/j2k.c.orig 1970-01-01 01:00:00.000000000 +0100
++++ OpenJPEG-patched/libopenjpeg/j2k.c.orig 2007-02-19 10:59:29.000000000 +0100
+@@ -0,0 +1,2392 @@
++/*
++ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
++ * Copyright (c) 2002-2007, Professor Benoit Macq
++ * Copyright (c) 2001-2003, David Janssens
++ * Copyright (c) 2002-2003, Yannick Verschueren
++ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
++ * Copyright (c) 2005, Herve Drolon, FreeImage Team
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++ * POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include "opj_includes.h"
++
++/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */
++/*@{*/
++
++/** @name Local static functions */
++/*@{*/
++
++/**
++Write the SOC marker (Start Of Codestream)
++@param j2k J2K handle
++*/
++static void j2k_write_soc(opj_j2k_t *j2k);
++/**
++Read the SOC marker (Start of Codestream)
++@param j2k J2K handle
++*/
++static void j2k_read_soc(opj_j2k_t *j2k);
++/**
++Write the SIZ marker (image and tile size)
++@param j2k J2K handle
++*/
++static void j2k_write_siz(opj_j2k_t *j2k);
++/**
++Read the SIZ marker (image and tile size)
++@param j2k J2K handle
++*/
++static void j2k_read_siz(opj_j2k_t *j2k);
++/**
++Write the COM marker (comment)
++@param j2k J2K handle
++*/
++static void j2k_write_com(opj_j2k_t *j2k);
++/**
++Read the COM marker (comment)
++@param j2k J2K handle
++*/
++static void j2k_read_com(opj_j2k_t *j2k);
++/**
++Write the value concerning the specified component in the marker COD and COC
++@param j2k J2K handle
++@param compno Number of the component concerned by the information written
++*/
++static void j2k_write_cox(opj_j2k_t *j2k, int compno);
++/**
++Read the value concerning the specified component in the marker COD and COC
++@param j2k J2K handle
++@param compno Number of the component concerned by the information read
++*/
++static void j2k_read_cox(opj_j2k_t *j2k, int compno);
++/**
++Write the COD marker (coding style default)
++@param j2k J2K handle
++*/
++static void j2k_write_cod(opj_j2k_t *j2k);
++/**
++Read the COD marker (coding style default)
++@param j2k J2K handle
++*/
++static void j2k_read_cod(opj_j2k_t *j2k);
++/**
++Write the COC marker (coding style component)
++@param j2k J2K handle
++@param compno Number of the component concerned by the information written
++*/
++static void j2k_write_coc(opj_j2k_t *j2k, int compno);
++/**
++Read the COC marker (coding style component)
++@param j2k J2K handle
++*/
++static void j2k_read_coc(opj_j2k_t *j2k);
++/**
++Write the value concerning the specified component in the marker QCD and QCC
++@param j2k J2K handle
++@param compno Number of the component concerned by the information written
++*/
++static void j2k_write_qcx(opj_j2k_t *j2k, int compno);
++/**
++Read the value concerning the specified component in the marker QCD and QCC
++@param j2k J2K handle
++@param compno Number of the component concern by the information read
++@param len Length of the information in the QCX part of the marker QCD/QCC
++*/
++static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len);
++/**
++Write the QCD marker (quantization default)
++@param j2k J2K handle
++*/
++static void j2k_write_qcd(opj_j2k_t *j2k);
++/**
++Read the QCD marker (quantization default)
++@param j2k J2K handle
++*/
++static void j2k_read_qcd(opj_j2k_t *j2k);
++/**
++Write the QCC marker (quantization component)
++@param j2k J2K handle
++@param compno Number of the component concerned by the information written
++*/
++static void j2k_write_qcc(opj_j2k_t *j2k, int compno);
++/**
++Read the QCC marker (quantization component)
++@param j2k J2K handle
++*/
++static void j2k_read_qcc(opj_j2k_t *j2k);
++/**
++Write the POC marker (progression order change)
++@param j2k J2K handle
++*/
++static void j2k_write_poc(opj_j2k_t *j2k);
++/**
++Read the POC marker (progression order change)
++@param j2k J2K handle
++*/
++static void j2k_read_poc(opj_j2k_t *j2k);
++/**
++Read the CRG marker (component registration)
++@param j2k J2K handle
++*/
++static void j2k_read_crg(opj_j2k_t *j2k);
++/**
++Read the TLM marker (tile-part lengths)
++@param j2k J2K handle
++*/
++static void j2k_read_tlm(opj_j2k_t *j2k);
++/**
++Read the PLM marker (packet length, main header)
++@param j2k J2K handle
++*/
++static void j2k_read_plm(opj_j2k_t *j2k);
++/**
++Read the PLT marker (packet length, tile-part header)
++@param j2k J2K handle
++*/
++static void j2k_read_plt(opj_j2k_t *j2k);
++/**
++Read the PPM marker (packet packet headers, main header)
++@param j2k J2K handle
++*/
++static void j2k_read_ppm(opj_j2k_t *j2k);
++/**
++Read the PPT marker (packet packet headers, tile-part header)
++@param j2k J2K handle
++*/
++static void j2k_read_ppt(opj_j2k_t *j2k);
++/**
++Write the SOT marker (start of tile-part)
++@param j2k J2K handle
++*/
++static void j2k_write_sot(opj_j2k_t *j2k);
++/**
++Read the SOT marker (start of tile-part)
++@param j2k J2K handle
++*/
++static void j2k_read_sot(opj_j2k_t *j2k);
++/**
++Write the SOD marker (start of data)
++@param j2k J2K handle
++@param tile_coder Pointer to a TCD handle
++*/
++static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder);
++/**
++Read the SOD marker (start of data)
++@param j2k J2K handle
++*/
++static void j2k_read_sod(opj_j2k_t *j2k);
++/**
++Write the RGN marker (region-of-interest)
++@param j2k J2K handle
++@param compno Number of the component concerned by the information written
++@param tileno Number of the tile concerned by the information written
++*/
++static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno);
++/**
++Read the RGN marker (region-of-interest)
++@param j2k J2K handle
++*/
++static void j2k_read_rgn(opj_j2k_t *j2k);
++/**
++Write the EOC marker (end of codestream)
++@param j2k J2K handle
++*/
++static void j2k_write_eoc(opj_j2k_t *j2k);
++/**
++Read the EOC marker (end of codestream)
++@param j2k J2K handle
++*/
++static void j2k_read_eoc(opj_j2k_t *j2k);
++/**
++Read an unknown marker
++@param j2k J2K handle
++*/
++static void j2k_read_unk(opj_j2k_t *j2k);
++
++/*@}*/
++
++/*@}*/
++
++/* ----------------------------------------------------------------------- */
++
++void j2k_dump_image(FILE *fd, opj_image_t * img) {
++ int compno;
++ fprintf(fd, "image {\n");
++ fprintf(fd, " x0=%d, y0=%d, x1=%d, y1=%d\n", img->x0, img->y0, img->x1, img->y1);
++ fprintf(fd, " numcomps=%d\n", img->numcomps);
++ for (compno = 0; compno < img->numcomps; compno++) {
++ opj_image_comp_t *comp = &img->comps[compno];
++ fprintf(fd, " comp %d {\n", compno);
++ fprintf(fd, " dx=%d, dy=%d\n", comp->dx, comp->dy);
++ fprintf(fd, " prec=%d\n", comp->prec);
++ fprintf(fd, " sgnd=%d\n", comp->sgnd);
++ fprintf(fd, " }\n");
++ }
++ fprintf(fd, "}\n");
++}
++
++void j2k_dump_cp(FILE *fd, opj_image_t * img, opj_cp_t * cp) {
++ int tileno, compno, layno, bandno, resno, numbands;
++ fprintf(fd, "coding parameters {\n");
++ fprintf(fd, " tx0=%d, ty0=%d\n", cp->tx0, cp->ty0);
++ fprintf(fd, " tdx=%d, tdy=%d\n", cp->tdx, cp->tdy);
++ fprintf(fd, " tw=%d, th=%d\n", cp->tw, cp->th);
++ for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
++ opj_tcp_t *tcp = &cp->tcps[tileno];
++ fprintf(fd, " tile %d {\n", tileno);
++ fprintf(fd, " csty=%x\n", tcp->csty);
++ fprintf(fd, " prg=%d\n", tcp->prg);
++ fprintf(fd, " numlayers=%d\n", tcp->numlayers);
++ fprintf(fd, " mct=%d\n", tcp->mct);
++ fprintf(fd, " rates=");
++ for (layno = 0; layno < tcp->numlayers; layno++) {
++ fprintf(fd, "%.1f ", tcp->rates[layno]);
++ }
++ fprintf(fd, "\n");
++ for (compno = 0; compno < img->numcomps; compno++) {
++ opj_tccp_t *tccp = &tcp->tccps[compno];
++ fprintf(fd, " comp %d {\n", compno);
++ fprintf(fd, " csty=%x\n", tccp->csty);
++ fprintf(fd, " numresolutions=%d\n", tccp->numresolutions);
++ fprintf(fd, " cblkw=%d\n", tccp->cblkw);
++ fprintf(fd, " cblkh=%d\n", tccp->cblkh);
++ fprintf(fd, " cblksty=%x\n", tccp->cblksty);
++ fprintf(fd, " qmfbid=%d\n", tccp->qmfbid);
++ fprintf(fd, " qntsty=%d\n", tccp->qntsty);
++ fprintf(fd, " numgbits=%d\n", tccp->numgbits);
++ fprintf(fd, " roishift=%d\n", tccp->roishift);
++ fprintf(fd, " stepsizes=");
++ numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 - 2;
++ for (bandno = 0; bandno < numbands; bandno++) {
++ fprintf(fd, "(%d,%d) ", tccp->stepsizes[bandno].mant,
++ tccp->stepsizes[bandno].expn);
++ }
++ fprintf(fd, "\n");
++
++ if (tccp->csty & J2K_CCP_CSTY_PRT) {
++ fprintf(fd, " prcw=");
++ for (resno = 0; resno < tccp->numresolutions; resno++) {
++ fprintf(fd, "%d ", tccp->prcw[resno]);
++ }
++ fprintf(fd, "\n");
++ fprintf(fd, " prch=");
++ for (resno = 0; resno < tccp->numresolutions; resno++) {
++ fprintf(fd, "%d ", tccp->prch[resno]);
++ }
++ fprintf(fd, "\n");
++ }
++ fprintf(fd, " }\n");
++ }
++ fprintf(fd, " }\n");
++ }
++ fprintf(fd, "}\n");
++}
++
++/* ----------------------------------------------------------------------- */
++
++static void j2k_write_soc(opj_j2k_t *j2k) {
++ opj_cio_t *cio = j2k->cio;
++ cio_write(cio, J2K_MS_SOC, 2);
++}
++
++static void j2k_read_soc(opj_j2k_t *j2k) {
++ j2k->state = J2K_STATE_MHSIZ;
++}
++
++static void j2k_write_siz(opj_j2k_t *j2k) {
++ int i;
++ int lenp, len;
++
++ opj_cio_t *cio = j2k->cio;
++ opj_image_t *image = j2k->image;
++ opj_cp_t *cp = j2k->cp;
++
++ cio_write(cio, J2K_MS_SIZ, 2); /* SIZ */
++ lenp = cio_tell(cio);
++ cio_skip(cio, 2);
++ cio_write(cio, 0, 2); /* Rsiz (capabilities) */
++ cio_write(cio, image->x1, 4); /* Xsiz */
++ cio_write(cio, image->y1, 4); /* Ysiz */
++ cio_write(cio, image->x0, 4); /* X0siz */
++ cio_write(cio, image->y0, 4); /* Y0siz */
++ cio_write(cio, cp->tdx, 4); /* XTsiz */
++ cio_write(cio, cp->tdy, 4); /* YTsiz */
++ cio_write(cio, cp->tx0, 4); /* XT0siz */
++ cio_write(cio, cp->ty0, 4); /* YT0siz */
++ cio_write(cio, image->numcomps, 2); /* Csiz */
++ for (i = 0; i < image->numcomps; i++) {
++ cio_write(cio, image->comps[i].prec - 1 + (image->comps[i].sgnd << 7), 1); /* Ssiz_i */
++ cio_write(cio, image->comps[i].dx, 1); /* XRsiz_i */
++ cio_write(cio, image->comps[i].dy, 1); /* YRsiz_i */
++ }
++ len = cio_tell(cio) - lenp;
++ cio_seek(cio, lenp);
++ cio_write(cio, len, 2); /* Lsiz */
++ cio_seek(cio, lenp + len);
++}
++
++static void j2k_read_siz(opj_j2k_t *j2k) {
++ int len, i;
++
++ opj_cio_t *cio = j2k->cio;
++ opj_image_t *image = j2k->image;
++ opj_cp_t *cp = j2k->cp;
++
++ len = cio_read(cio, 2); /* Lsiz */
++ cio_read(cio, 2); /* Rsiz (capabilities) */
++ image->x1 = cio_read(cio, 4); /* Xsiz */
++ image->y1 = cio_read(cio, 4); /* Ysiz */
++ image->x0 = cio_read(cio, 4); /* X0siz */
++ image->y0 = cio_read(cio, 4); /* Y0siz */
++ cp->tdx = cio_read(cio, 4); /* XTsiz */
++ cp->tdy = cio_read(cio, 4); /* YTsiz */
++ cp->tx0 = cio_read(cio, 4); /* XT0siz */
++ cp->ty0 = cio_read(cio, 4); /* YT0siz */
++
++ image->numcomps = cio_read(cio, 2); /* Csiz */
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++ /* if JPWL is on, we check whether TX errors have damaged
++ too much the SIZ parameters */
++ if (!(image->x1 * image->y1)) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "JPWL: bad image size (%d x %d)\n",
++ image->x1, image->y1);
++ if (!JPWL_ASSUME || JPWL_ASSUME)
++ exit(1);
++ }
++ if (image->numcomps != ((len - 38) / 3)) {
++ opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
++ "JPWL: Csiz is %d => space in SIZ only for %d comps.!!!\n",
++ image->numcomps, ((len - 38) / 3));
++ if (!JPWL_ASSUME)
++ exit(1);
++ /* we try to correct */
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n");
++ if (image->numcomps < ((len - 38) / 3)) {
++ len = 38 + 3 * image->numcomps;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Lsiz to %d => HYPOTHESIS!!!\n",
++ len);
++ } else {
++ image->numcomps = ((len - 38) / 3);
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Csiz to %d => HYPOTHESIS!!!\n",
++ image->numcomps);
++ }
++ }
++
++ /* update components number in the jpwl_exp_comps filed */
++ cp->exp_comps = image->numcomps;
++ }
++#endif /* USE_JPWL */
++/* <<UniPG */
++ image->comps = (opj_image_comp_t *) opj_malloc(image->numcomps * sizeof(opj_image_comp_t));
++ for (i = 0; i < image->numcomps; i++) {
++ int tmp, w, h;
++ tmp = cio_read(cio, 1); /* Ssiz_i */
++ image->comps[i].prec = (tmp & 0x7f) + 1;
++ image->comps[i].sgnd = tmp >> 7;
++ image->comps[i].dx = cio_read(cio, 1); /* XRsiz_i */
++ image->comps[i].dy = cio_read(cio, 1); /* YRsiz_i */
++
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++ /* if JPWL is on, we check whether TX errors have damaged
++ too much the SIZ parameters, again */
++ if (!(image->comps[i].dx * image->comps[i].dy)) {
++ opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
++ "JPWL: bad XRsiz_%d/YRsiz_%d (%d x %d)\n",
++ i, i, image->comps[i].dx, image->comps[i].dy);
++ if (!JPWL_ASSUME)
++ exit(1);
++ /* we try to correct */
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
++ if (!image->comps[i].dx) {
++ image->comps[i].dx = 1;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting XRsiz_%d to %d => HYPOTHESIS!!!\n",
++ i, image->comps[i].dx);
++ }
++ if (!image->comps[i].dy) {
++ image->comps[i].dy = 1;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting YRsiz_%d to %d => HYPOTHESIS!!!\n",
++ i, image->comps[i].dy);
++ }
++ }
++
++ }
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++
++ /* TODO: unused ? */
++ w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx);
++ h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy);
++
++ image->comps[i].resno_decoded = 0; /* number of resolution decoded */
++ image->comps[i].factor = 0; /* reducing factor per component */
++ }
++
++ cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
++ cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++ /* if JPWL is on, we check whether TX errors have damaged
++ too much the SIZ parameters */
++ if ((cp->tw < 1) || (cp->th < 1) || (cp->tw > cp->max_tiles) || (cp->th > cp->max_tiles)) {
++ opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
++ "JPWL: bad number of tiles (%d x %d)\n",
++ cp->tw, cp->th);
++ if (!JPWL_ASSUME)
++ exit(1);
++ /* we try to correct */
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
++ if (cp->tw < 1) {
++ cp->tw= 1;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in x => HYPOTHESIS!!!\n",
++ cp->tw);
++ }
++ if (cp->tw > cp->max_tiles) {
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- too large x, increase expectance of %d\n",
++ cp->max_tiles);
++ cp->tw= 1;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in x => HYPOTHESIS!!!\n",
++ cp->tw);
++ }
++ if (cp->th < 1) {
++ cp->th= 1;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in y => HYPOTHESIS!!!\n",
++ cp->th);
++ }
++ if (cp->th > cp->max_tiles) {
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- too large y, increase expectance of %d to continue\n",
++ cp->max_tiles);
++ cp->th= 1;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in y => HYPOTHESIS!!!\n",
++ cp->th);
++ }
++ }
++ }
++#endif /* USE_JPWL */
++/* <<UniPG */
++ cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * sizeof(opj_tcp_t));
++ cp->tileno = (int *) opj_malloc(cp->tw * cp->th * sizeof(int));
++ cp->tileno_size = 0;
++
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++ if (!cp->tcps) {
++ opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
++ "JPWL: could not alloc tcps field of cp\n");
++ if (!JPWL_ASSUME || JPWL_ASSUME)
++ exit(1);
++ }
++ }
++#endif /* USE_JPWL */
++/* <<UniPG */
++ for (i = 0; i < cp->tw * cp->th; i++) {
++ cp->tcps[i].POC = 0;
++ cp->tcps[i].numpocs = 0;
++ cp->tcps[i].first = 1;
++ }
++
++ /* Initialization for PPM marker */
++ cp->ppm = 0;
++ cp->ppm_data = NULL;
++ cp->ppm_data_first = NULL;
++ cp->ppm_previous = 0;
++ cp->ppm_store = 0;
++
++ j2k->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * image->numcomps);
++ for (i = 0; i < cp->tw * cp->th; i++) {
++ cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * image->numcomps);
++ }
++ j2k->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * sizeof(unsigned char *));
++ j2k->tile_len = (int *) opj_malloc(cp->tw * cp->th * sizeof(int));
++ j2k->state = J2K_STATE_MH;
++}
++
++static void j2k_write_com(opj_j2k_t *j2k) {
++ unsigned int i;
++ int lenp, len;
++
++ if(j2k->cp->comment) {
++ opj_cio_t *cio = j2k->cio;
++ char *comment = j2k->cp->comment;
++
++ cio_write(cio, J2K_MS_COM, 2);
++ lenp = cio_tell(cio);
++ cio_skip(cio, 2);
++ cio_write(cio, 0, 2);
++ for (i = 0; i < strlen(comment); i++) {
++ cio_write(cio, comment[i], 1);
++ }
++ len = cio_tell(cio) - lenp;
++ cio_seek(cio, lenp);
++ cio_write(cio, len, 2);
++ cio_seek(cio, lenp + len);
++ }
++}
++
++static void j2k_read_com(opj_j2k_t *j2k) {
++ int len;
++
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2);
++ cio_skip(cio, len - 2);
++}
++
++static void j2k_write_cox(opj_j2k_t *j2k, int compno) {
++ int i;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
++ opj_tccp_t *tccp = &tcp->tccps[compno];
++ opj_cio_t *cio = j2k->cio;
++
++ cio_write(cio, tccp->numresolutions - 1, 1); /* SPcox (D) */
++ cio_write(cio, tccp->cblkw - 2, 1); /* SPcox (E) */
++ cio_write(cio, tccp->cblkh - 2, 1); /* SPcox (F) */
++ cio_write(cio, tccp->cblksty, 1); /* SPcox (G) */
++ cio_write(cio, tccp->qmfbid, 1); /* SPcox (H) */
++
++ if (tccp->csty & J2K_CCP_CSTY_PRT) {
++ for (i = 0; i < tccp->numresolutions; i++) {
++ cio_write(cio, tccp->prcw[i] + (tccp->prch[i] << 4), 1); /* SPcox (I_i) */
++ }
++ }
++}
++
++static void j2k_read_cox(opj_j2k_t *j2k, int compno) {
++ int i;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
++ opj_tccp_t *tccp = &tcp->tccps[compno];
++ opj_cio_t *cio = j2k->cio;
++
++ tccp->numresolutions = cio_read(cio, 1) + 1; /* SPcox (D) */
++
++ /* check the reduce value */
++ cp->reduce = int_min((tccp->numresolutions)-1, cp->reduce);
++ tccp->cblkw = cio_read(cio, 1) + 2; /* SPcox (E) */
++ tccp->cblkh = cio_read(cio, 1) + 2; /* SPcox (F) */
++ tccp->cblksty = cio_read(cio, 1); /* SPcox (G) */
++ tccp->qmfbid = cio_read(cio, 1); /* SPcox (H) */
++ if (tccp->csty & J2K_CP_CSTY_PRT) {
++ for (i = 0; i < tccp->numresolutions; i++) {
++ int tmp = cio_read(cio, 1); /* SPcox (I_i) */
++ tccp->prcw[i] = tmp & 0xf;
++ tccp->prch[i] = tmp >> 4;
++ }
++ }
++}
++
++static void j2k_write_cod(opj_j2k_t *j2k) {
++ opj_cp_t *cp = NULL;
++ opj_tcp_t *tcp = NULL;
++ int lenp, len;
++
++ opj_cio_t *cio = j2k->cio;
++
++ cio_write(cio, J2K_MS_COD, 2); /* COD */
++
++ lenp = cio_tell(cio);
++ cio_skip(cio, 2);
++
++ cp = j2k->cp;
++ tcp = &cp->tcps[j2k->curtileno];
++
++ cio_write(cio, tcp->csty, 1); /* Scod */
++ cio_write(cio, tcp->prg, 1); /* SGcod (A) */
++ cio_write(cio, tcp->numlayers, 2); /* SGcod (B) */
++ cio_write(cio, tcp->mct, 1); /* SGcod (C) */
++
++ j2k_write_cox(j2k, 0);
++ len = cio_tell(cio) - lenp;
++ cio_seek(cio, lenp);
++ cio_write(cio, len, 2); /* Lcod */
++ cio_seek(cio, lenp + len);
++}
++
++static void j2k_read_cod(opj_j2k_t *j2k) {
++ int len, i, pos;
++
++ opj_cio_t *cio = j2k->cio;
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
++ opj_image_t *image = j2k->image;
++
++ len = cio_read(cio, 2); /* Lcod */
++ tcp->csty = cio_read(cio, 1); /* Scod */
++ tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); /* SGcod (A) */
++ tcp->numlayers = cio_read(cio, 2); /* SGcod (B) */
++ tcp->mct = cio_read(cio, 1); /* SGcod (C) */
++
++ pos = cio_tell(cio);
++ for (i = 0; i < image->numcomps; i++) {
++ tcp->tccps[i].csty = tcp->csty & J2K_CP_CSTY_PRT;
++ cio_seek(cio, pos);
++ j2k_read_cox(j2k, i);
++ }
++}
++
++static void j2k_write_coc(opj_j2k_t *j2k, int compno) {
++ int lenp, len;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
++ opj_image_t *image = j2k->image;
++ opj_cio_t *cio = j2k->cio;
++
++ cio_write(cio, J2K_MS_COC, 2); /* COC */
++ lenp = cio_tell(cio);
++ cio_skip(cio, 2);
++ cio_write(cio, compno, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
++ cio_write(cio, tcp->tccps[compno].csty, 1); /* Scoc */
++ j2k_write_cox(j2k, compno);
++ len = cio_tell(cio) - lenp;
++ cio_seek(cio, lenp);
++ cio_write(cio, len, 2); /* Lcoc */
++ cio_seek(cio, lenp + len);
++}
++
++static void j2k_read_coc(opj_j2k_t *j2k) {
++ int len, compno;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
++ opj_image_t *image = j2k->image;
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2); /* Lcoc */
++ compno = cio_read(cio, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
++ tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */
++ j2k_read_cox(j2k, compno);
++}
++
++static void j2k_write_qcx(opj_j2k_t *j2k, int compno) {
++ int bandno, numbands;
++ int expn, mant;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
++ opj_tccp_t *tccp = &tcp->tccps[compno];
++ opj_cio_t *cio = j2k->cio;
++
++ cio_write(cio, tccp->qntsty + (tccp->numgbits << 5), 1); /* Sqcx */
++ numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 - 2;
++
++ for (bandno = 0; bandno < numbands; bandno++) {
++ expn = tccp->stepsizes[bandno].expn;
++ mant = tccp->stepsizes[bandno].mant;
++
++ if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
++ cio_write(cio, expn << 3, 1); /* SPqcx_i */
++ } else {
++ cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */
++ }
++ }
++}
++
++static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len) {
++ int tmp;
++ int bandno, numbands;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
++ opj_tccp_t *tccp = &tcp->tccps[compno];
++ opj_cio_t *cio = j2k->cio;
++
++ tmp = cio_read(cio, 1); /* Sqcx */
++ tccp->qntsty = tmp & 0x1f;
++ tccp->numgbits = tmp >> 5;
++ numbands = (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ?
++ 1 : ((tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2);
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++
++ /* if JPWL is on, we check whether there are too many subbands */
++ if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) {
++ opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
++ "JPWL: bad number of subbands in Sqcx (%d)\n",
++ numbands);
++ if (!JPWL_ASSUME)
++ exit(1);
++ /* we try to correct */
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
++ numbands = 1;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting number of bands to %d => HYPOTHESIS!!!\n",
++ numbands);
++ };
++
++ };
++#endif /* USE_JPWL */
++/* <<UniPG */
++ for (bandno = 0; bandno < numbands; bandno++) {
++ int expn, mant;
++ if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
++ expn = cio_read(cio, 1) >> 3; /* SPqcx_i */
++ mant = 0;
++ } else {
++ tmp = cio_read(cio, 2); /* SPqcx_i */
++ expn = tmp >> 11;
++ mant = tmp & 0x7ff;
++ }
++ tccp->stepsizes[bandno].expn = expn;
++ tccp->stepsizes[bandno].mant = mant;
++ }
++
++ /* Add Antonin : if scalar_derived -> compute other stepsizes */
++ if (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) {
++ for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
++ tccp->stepsizes[bandno].expn =
++ ((tccp->stepsizes[0].expn) - ((bandno - 1) / 3) > 0) ?
++ (tccp->stepsizes[0].expn) - ((bandno - 1) / 3) : 0;
++ tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant;
++ }
++ }
++ /* ddA */
++}
++
++static void j2k_write_qcd(opj_j2k_t *j2k) {
++ int lenp, len;
++
++ opj_cio_t *cio = j2k->cio;
++
++ cio_write(cio, J2K_MS_QCD, 2); /* QCD */
++ lenp = cio_tell(cio);
++ cio_skip(cio, 2);
++ j2k_write_qcx(j2k, 0);
++ len = cio_tell(cio) - lenp;
++ cio_seek(cio, lenp);
++ cio_write(cio, len, 2); /* Lqcd */
++ cio_seek(cio, lenp + len);
++}
++
++static void j2k_read_qcd(opj_j2k_t *j2k) {
++ int len, i, pos;
++
++ opj_cio_t *cio = j2k->cio;
++ opj_image_t *image = j2k->image;
++
++ len = cio_read(cio, 2); /* Lqcd */
++ pos = cio_tell(cio);
++ for (i = 0; i < image->numcomps; i++) {
++ cio_seek(cio, pos);
++ j2k_read_qcx(j2k, i, len - 2);
++ }
++}
++
++static void j2k_write_qcc(opj_j2k_t *j2k, int compno) {
++ int lenp, len;
++
++ opj_cio_t *cio = j2k->cio;
++
++ cio_write(cio, J2K_MS_QCC, 2); /* QCC */
++ lenp = cio_tell(cio);
++ cio_skip(cio, 2);
++ cio_write(cio, compno, j2k->image->numcomps <= 256 ? 1 : 2); /* Cqcc */
++ j2k_write_qcx(j2k, compno);
++ len = cio_tell(cio) - lenp;
++ cio_seek(cio, lenp);
++ cio_write(cio, len, 2); /* Lqcc */
++ cio_seek(cio, lenp + len);
++}
++
++static void j2k_read_qcc(opj_j2k_t *j2k) {
++ int len, compno;
++ int numcomp = j2k->image->numcomps;
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2); /* Lqcc */
++ compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++
++ static int backup_compno = 0;
++
++ /* compno is negative or larger than the number of components!!! */
++ if ((compno < 0) || (compno >= numcomp)) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "JPWL: bad component number in QCC (%d out of a maximum of %d)\n",
++ compno, numcomp);
++ if (!JPWL_ASSUME)
++ exit(1);
++ /* we try to correct */
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n");
++ compno = backup_compno % numcomp;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting component number to %d\n",
++ compno);
++ }
++
++ /* keep your private count of tiles */
++ backup_compno++;
++ };
++#endif /* USE_JPWL */
++/* <<UniPG */
++ j2k_read_qcx(j2k, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
++}
++
++static void j2k_write_poc(opj_j2k_t *j2k) {
++ int len, numpchgs, i;
++
++ int numcomps = j2k->image->numcomps;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
++ opj_tccp_t *tccp = &tcp->tccps[0];
++ opj_cio_t *cio = j2k->cio;
++
++ numpchgs = tcp->numpocs;
++ cio_write(cio, J2K_MS_POC, 2); /* POC */
++ len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs;
++ cio_write(cio, len, 2); /* Lpoc */
++ for (i = 0; i < numpchgs; i++) {
++ opj_poc_t *poc = &tcp->pocs[i];
++ cio_write(cio, poc->resno0, 1); /* RSpoc_i */
++ cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2)); /* CSpoc_i */
++ cio_write(cio, poc->layno1, 2); /* LYEpoc_i */
++ poc->layno1 = int_min(poc->layno1, tcp->numlayers);
++ cio_write(cio, poc->resno1, 1); /* REpoc_i */
++ poc->resno1 = int_min(poc->resno1, tccp->numresolutions);
++ cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2)); /* CEpoc_i */
++ poc->compno1 = int_min(poc->compno1, numcomps);
++ cio_write(cio, poc->prg, 1); /* Ppoc_i */
++ }
++}
++
++static void j2k_read_poc(opj_j2k_t *j2k) {
++ int len, numpchgs, i, old_poc;
++
++ int numcomps = j2k->image->numcomps;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
++ opj_tccp_t *tccp = &tcp->tccps[0];
++ opj_cio_t *cio = j2k->cio;
++
++ old_poc = tcp->POC ? tcp->numpocs + 1 : 0;
++ tcp->POC = 1;
++ len = cio_read(cio, 2); /* Lpoc */
++ numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2));
++
++ for (i = old_poc; i < numpchgs + old_poc; i++) {
++ opj_poc_t *poc;
++ poc = &tcp->pocs[i];
++ poc->resno0 = cio_read(cio, 1); /* RSpoc_i */
++ poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2); /* CSpoc_i */
++ poc->layno1 = int_min(cio_read(cio, 2), (unsigned int) tcp->numlayers); /* LYEpoc_i */
++ poc->resno1 = int_min(cio_read(cio, 1), (unsigned int) tccp->numresolutions); /* REpoc_i */
++ poc->compno1 = int_min(
++ cio_read(cio, numcomps <= 256 ? 1 : 2), (unsigned int) numcomps); /* CEpoc_i */
++ poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1); /* Ppoc_i */
++ }
++
++ tcp->numpocs = numpchgs + old_poc - 1;
++}
++
++static void j2k_read_crg(opj_j2k_t *j2k) {
++ int len, i, Xcrg_i, Ycrg_i;
++
++ opj_cio_t *cio = j2k->cio;
++ int numcomps = j2k->image->numcomps;
++
++ len = cio_read(cio, 2); /* Lcrg */
++ for (i = 0; i < numcomps; i++) {
++ Xcrg_i = cio_read(cio, 2); /* Xcrg_i */
++ Ycrg_i = cio_read(cio, 2); /* Ycrg_i */
++ }
++}
++
++static void j2k_read_tlm(opj_j2k_t *j2k) {
++ int len, Ztlm, Stlm, ST, SP, tile_tlm, i;
++ long int Ttlm_i, Ptlm_i;
++
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2); /* Ltlm */
++ Ztlm = cio_read(cio, 1); /* Ztlm */
++ Stlm = cio_read(cio, 1); /* Stlm */
++ ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02);
++ SP = (Stlm >> 6) & 0x01;
++ tile_tlm = (len - 4) / ((SP + 1) * 2 + ST);
++ for (i = 0; i < tile_tlm; i++) {
++ Ttlm_i = cio_read(cio, ST); /* Ttlm_i */
++ Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */
++ }
++}
++
++static void j2k_read_plm(opj_j2k_t *j2k) {
++ int len, i, Zplm, Nplm, add, packet_len = 0;
++
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2); /* Lplm */
++ Zplm = cio_read(cio, 1); /* Zplm */
++ len -= 3;
++ while (len > 0) {
++ Nplm = cio_read(cio, 4); /* Nplm */
++ len -= 4;
++ for (i = Nplm; i > 0; i--) {
++ add = cio_read(cio, 1);
++ len--;
++ packet_len = (packet_len << 7) + add; /* Iplm_ij */
++ if ((add & 0x80) == 0) {
++ /* New packet */
++ packet_len = 0;
++ }
++ if (len <= 0)
++ break;
++ }
++ }
++}
++
++static void j2k_read_plt(opj_j2k_t *j2k) {
++ int len, i, Zplt, packet_len = 0, add;
++
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2); /* Lplt */
++ Zplt = cio_read(cio, 1); /* Zplt */
++ for (i = len - 3; i > 0; i--) {
++ add = cio_read(cio, 1);
++ packet_len = (packet_len << 7) + add; /* Iplt_i */
++ if ((add & 0x80) == 0) {
++ /* New packet */
++ packet_len = 0;
++ }
++ }
++}
++
++static void j2k_read_ppm(opj_j2k_t *j2k) {
++ int len, Z_ppm, i, j;
++ int N_ppm;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2);
++ cp->ppm = 1;
++
++ Z_ppm = cio_read(cio, 1); /* Z_ppm */
++ len -= 3;
++ while (len > 0) {
++ if (cp->ppm_previous == 0) {
++ N_ppm = cio_read(cio, 4); /* N_ppm */
++ len -= 4;
++ } else {
++ N_ppm = cp->ppm_previous;
++ }
++ j = cp->ppm_store;
++ if (Z_ppm == 0) { /* First PPM marker */
++ cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char));
++ cp->ppm_data_first = cp->ppm_data;
++ cp->ppm_len = N_ppm;
++ } else { /* NON-first PPM marker */
++ cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data, (N_ppm + cp->ppm_store) * sizeof(unsigned char));
++/* UniPG>> */
++#ifdef USE_JPWL
++ /* this memory allocation check could be done even in non-JPWL cases */
++ if (cp->correct) {
++ if (!cp->ppm_data) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "JPWL: failed memory allocation during PPM marker parsing (pos. %x)\n",
++ cio_tell(cio));
++ if (!JPWL_ASSUME || JPWL_ASSUME)
++ exit(1);
++ }
++ }
++#endif
++/* <<UniPG */
++ cp->ppm_data_first = cp->ppm_data;
++ cp->ppm_len = N_ppm + cp->ppm_store;
++ }
++ for (i = N_ppm; i > 0; i--) { /* Read packet header */
++ cp->ppm_data[j] = cio_read(cio, 1);
++ j++;
++ len--;
++ if (len == 0)
++ break; /* Case of non-finished packet header in present marker but finished in next one */
++ }
++ cp->ppm_previous = i - 1;
++ cp->ppm_store = j;
++ }
++}
++
++static void j2k_read_ppt(opj_j2k_t *j2k) {
++ int len, Z_ppt, i, j = 0;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = cp->tcps + j2k->curtileno;
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2);
++ Z_ppt = cio_read(cio, 1);
++ tcp->ppt = 1;
++ if (Z_ppt == 0) { /* First PPT marker */
++ tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char));
++ tcp->ppt_data_first = tcp->ppt_data;
++ tcp->ppt_store = 0;
++ tcp->ppt_len = len - 3;
++ } else { /* NON-first PPT marker */
++ tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data, (len - 3 + tcp->ppt_store) * sizeof(unsigned char));
++ tcp->ppt_data_first = tcp->ppt_data;
++ tcp->ppt_len = len - 3 + tcp->ppt_store;
++ }
++ j = tcp->ppt_store;
++ for (i = len - 3; i > 0; i--) {
++ tcp->ppt_data[j] = cio_read(cio, 1);
++ j++;
++ }
++ tcp->ppt_store = j;
++}
++
++static void j2k_write_sot(opj_j2k_t *j2k) {
++ int lenp, len;
++
++ opj_cio_t *cio = j2k->cio;
++
++ j2k->sot_start = cio_tell(cio);
++ cio_write(cio, J2K_MS_SOT, 2); /* SOT */
++ lenp = cio_tell(cio);
++ cio_skip(cio, 2); /* Lsot (further) */
++ cio_write(cio, j2k->curtileno, 2); /* Isot */
++ cio_skip(cio, 4); /* Psot (further in j2k_write_sod) */
++ cio_write(cio, 0, 1); /* TPsot */
++ cio_write(cio, 1, 1); /* TNsot */
++ len = cio_tell(cio) - lenp;
++ cio_seek(cio, lenp);
++ cio_write(cio, len, 2); /* Lsot */
++ cio_seek(cio, lenp + len);
++}
++
++static void j2k_read_sot(opj_j2k_t *j2k) {
++ int len, tileno, totlen, partno, numparts, i;
++ opj_tcp_t *tcp = NULL;
++ char status = 0;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_cio_t *cio = j2k->cio;
++
++ len = cio_read(cio, 2);
++ tileno = cio_read(cio, 2);
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++
++ static int backup_tileno = 0;
++
++ /* tileno is negative or larger than the number of tiles!!! */
++ if ((tileno < 0) || (tileno > (cp->tw * cp->th))) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "JPWL: bad tile number (%d out of a maximum of %d)\n",
++ tileno, (cp->tw * cp->th));
++ if (!JPWL_ASSUME)
++ exit(1);
++ /* we try to correct */
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n");
++ tileno = backup_tileno;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting tile number to %d\n",
++ tileno);
++ }
++
++ /* keep your private count of tiles */
++ backup_tileno++;
++ };
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++ if (cp->tileno_size == 0) {
++ cp->tileno[cp->tileno_size] = tileno;
++ cp->tileno_size++;
++ } else {
++ i = 0;
++ while (i < cp->tileno_size && status == 0) {
++ status = cp->tileno[i] == tileno ? 1 : 0;
++ i++;
++ }
++ if (status == 0) {
++ cp->tileno[cp->tileno_size] = tileno;
++ cp->tileno_size++;
++ }
++ }
++
++ totlen = cio_read(cio, 4);
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++
++ /* totlen is negative or larger than the bytes left!!! */
++ if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
++ totlen, cio_numbytesleft(cio) + 8);
++ if (!JPWL_ASSUME)
++ exit(1);
++ /* we try to correct */
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n");
++ totlen = 0;
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Psot to %d => "
++ "assuming it is the last tile\n",
++ totlen);
++ }
++
++ };
++#endif /* USE_JPWL */
++/* <<UniPG */
++ if (!totlen)
++ totlen = cio_numbytesleft(cio) + 8;
++
++ partno = cio_read(cio, 1);
++ numparts = cio_read(cio, 1);
++
++ j2k->curtileno = tileno;
++ j2k->eot = cio_getbp(cio) - 12 + totlen;
++ j2k->state = J2K_STATE_TPH;
++ tcp = &cp->tcps[j2k->curtileno];
++
++ if (tcp->first == 1) {
++
++ /* Initialization PPT */
++ opj_tccp_t *tmp = tcp->tccps;
++ memcpy(tcp, j2k->default_tcp, sizeof(opj_tcp_t));
++ tcp->ppt = 0;
++ tcp->ppt_data = NULL;
++ tcp->ppt_data_first = NULL;
++ tcp->tccps = tmp;
++
++ for (i = 0; i < j2k->image->numcomps; i++) {
++ tcp->tccps[i] = j2k->default_tcp->tccps[i];
++ }
++ cp->tcps[j2k->curtileno].first = 0;
++ }
++}
++
++static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder) {
++ int l, layno;
++ int totlen;
++ opj_tcp_t *tcp = NULL;
++ opj_image_info_t *image_info = NULL;
++
++ opj_tcd_t *tcd = (opj_tcd_t*)tile_coder; /* cast is needed because of conflicts in header inclusions */
++ opj_cp_t *cp = j2k->cp;
++ opj_cio_t *cio = j2k->cio;
++
++ cio_write(cio, J2K_MS_SOD, 2);
++ if (j2k->curtileno == 0) {
++ j2k->sod_start = cio_tell(cio) + j2k->pos_correction;
++ }
++
++ /* INDEX >> */
++ image_info = j2k->image_info;
++ if (image_info && image_info->index_on) {
++ image_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction - 1;
++ }
++ /* << INDEX */
++
++ tcp = &cp->tcps[j2k->curtileno];
++ for (layno = 0; layno < tcp->numlayers; layno++) {
++ tcp->rates[layno] -= tcp->rates[layno] ? (j2k->sod_start / (cp->th * cp->tw)) : 0;
++ }
++ if(image_info) {
++ image_info->num = 0;
++ }
++
++ l = tcd_encode_tile(tcd, j2k->curtileno, cio_getbp(cio), cio_numbytesleft(cio) - 2, image_info);
++
++ /* Writing Psot in SOT marker */
++ totlen = cio_tell(cio) + l - j2k->sot_start;
++ cio_seek(cio, j2k->sot_start + 6);
++ cio_write(cio, totlen, 4);
++ cio_seek(cio, j2k->sot_start + totlen);
++}
++
++static void j2k_read_sod(opj_j2k_t *j2k) {
++ int len, truncate = 0, i;
++ unsigned char *data = NULL, *data_ptr = NULL;
++
++ opj_cio_t *cio = j2k->cio;
++ int curtileno = j2k->curtileno;
++
++ len = int_min(j2k->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1);
++
++ if (len == cio_numbytesleft(cio) + 1) {
++ truncate = 1; /* Case of a truncate codestream */
++ }
++
++ data = (unsigned char *) opj_malloc((j2k->tile_len[curtileno] + len) * sizeof(unsigned char));
++
++ for (i = 0; i < j2k->tile_len[curtileno]; i++) {
++ data[i] = j2k->tile_data[curtileno][i];
++ }
++
++ data_ptr = data + j2k->tile_len[curtileno];
++ for (i = 0; i < len; i++) {
++ data_ptr[i] = cio_read(cio, 1);
++ }
++
++ j2k->tile_len[curtileno] += len;
++ opj_free(j2k->tile_data[curtileno]);
++ j2k->tile_data[curtileno] = data;
++
++ if (!truncate) {
++ j2k->state = J2K_STATE_TPHSOT;
++ } else {
++ j2k->state = J2K_STATE_NEOC; /* RAJOUTE !! */
++ }
++}
++
++static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno) {
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = &cp->tcps[tileno];
++ opj_cio_t *cio = j2k->cio;
++ int numcomps = j2k->image->numcomps;
++
++ cio_write(cio, J2K_MS_RGN, 2); /* RGN */
++ cio_write(cio, numcomps <= 256 ? 5 : 6, 2); /* Lrgn */
++ cio_write(cio, compno, numcomps <= 256 ? 1 : 2); /* Crgn */
++ cio_write(cio, 0, 1); /* Srgn */
++ cio_write(cio, tcp->tccps[compno].roishift, 1); /* SPrgn */
++}
++
++static void j2k_read_rgn(opj_j2k_t *j2k) {
++ int len, compno, roisty;
++
++ opj_cp_t *cp = j2k->cp;
++ opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
++ opj_cio_t *cio = j2k->cio;
++ int numcomps = j2k->image->numcomps;
++
++ len = cio_read(cio, 2); /* Lrgn */
++ compno = cio_read(cio, numcomps <= 256 ? 1 : 2); /* Crgn */
++ roisty = cio_read(cio, 1); /* Srgn */
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++ /* totlen is negative or larger than the bytes left!!! */
++ if (compno >= numcomps) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "JPWL: bad component number in RGN (%d when there are only %d)\n",
++ compno, numcomps);
++ if (!JPWL_ASSUME || JPWL_ASSUME)
++ exit(1);
++ }
++ };
++#endif /* USE_JPWL */
++/* <<UniPG */
++ tcp->tccps[compno].roishift = cio_read(cio, 1); /* SPrgn */
++}
++
++static void j2k_write_eoc(opj_j2k_t *j2k) {
++ opj_cio_t *cio = j2k->cio;
++ /* opj_event_msg(j2k->cinfo, "%.8x: EOC\n", cio_tell(cio) + j2k->pos_correction); */
++ cio_write(cio, J2K_MS_EOC, 2);
++}
++
++static void j2k_read_eoc(opj_j2k_t *j2k) {
++ int i, tileno;
++
++#ifndef NO_PACKETS_DECODING
++ opj_tcd_t *tcd = tcd_create(j2k->cinfo);
++ tcd_malloc_decode(tcd, j2k->image, j2k->cp);
++ for (i = 0; i < j2k->cp->tileno_size; i++) {
++ tileno = j2k->cp->tileno[i];
++ tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno);
++ opj_free(j2k->tile_data[tileno]);
++ j2k->tile_data[tileno] = NULL;
++ }
++ tcd_free_decode(tcd);
++ tcd_destroy(tcd);
++#else
++ for (i = 0; i < j2k->cp->tileno_size; i++) {
++ tileno = j2k->cp->tileno[i];
++ opj_free(j2k->tile_data[tileno]);
++ j2k->tile_data[tileno] = NULL;
++ }
++#endif
++
++ j2k->state = J2K_STATE_MT;
++}
++
++typedef struct opj_dec_mstabent {
++ /** marker value */
++ int id;
++ /** value of the state when the marker can appear */
++ int states;
++ /** action linked to the marker */
++ void (*handler) (opj_j2k_t *j2k);
++} opj_dec_mstabent_t;
++
++opj_dec_mstabent_t j2k_dec_mstab[] = {
++ {J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc},
++ {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, j2k_read_sot},
++ {J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod},
++ {J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc},
++ {J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz},
++ {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_cod},
++ {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_coc},
++ {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_rgn},
++ {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcd},
++ {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcc},
++ {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_poc},
++ {J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm},
++ {J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm},
++ {J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt},
++ {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm},
++ {J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt},
++ {J2K_MS_SOP, 0, 0},
++ {J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg},
++ {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_com},
++/* UniPG>> */
++#ifdef USE_JPWL
++ {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc},
++ {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb},
++ {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd},
++ {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red},
++#endif /* USE_JPWL */
++/* <<UniPG */
++ {0, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_unk}
++};
++
++static void j2k_read_unk(opj_j2k_t *j2k) {
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown marker\n");
++/* UniPG>> */
++#ifdef USE_JPWL
++ if (j2k->cp->correct) {
++ int m = 0, id, i;
++ int min_id = 0, min_dist = 17, cur_dist = 0, tmp_id;
++ cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
++ id = cio_read(j2k->cio, 2);
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "JPWL: really don't know this marker %x\n",
++ id);
++ if (!JPWL_ASSUME) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "- possible synch loss due to uncorrectable channel errors => Exiting\n");
++ exit(1);
++ }
++ /* OK, activate this at your own risk!!! */
++ /* we look for the marker at the minimum hamming distance from this */
++ while (j2k_dec_mstab[m].id) {
++
++ /* 1's where they differ */
++ tmp_id = j2k_dec_mstab[m].id ^ id;
++
++ /* compute the hamming distance between our id and the current */
++ cur_dist = 0;
++ for (i = 0; i < 16; i++) {
++ if ((tmp_id >> i) & 0x0001) {
++ cur_dist++;
++ }
++ }
++
++ /* if current distance is smaller, set the minimum */
++ if (cur_dist < min_dist) {
++ min_dist = cur_dist;
++ min_id = j2k_dec_mstab[m].id;
++ }
++
++ /* jump to the next marker */
++ m++;
++ }
++
++ /* do we substitute the marker? */
++ if (min_dist < JPWL_MAXIMUM_HAMMING) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "- marker %x is at distance %d from the read %x\n",
++ min_id, min_dist, id);
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "- trying to substitute in place and crossing fingers!\n");
++ cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
++ cio_write(j2k->cio, min_id, 2);
++
++ /* rewind */
++ cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
++
++ }
++
++ };
++#endif /* USE_JPWL */
++/* <<UniPG */
++}
++
++/**
++Read the lookup table containing all the marker, status and action
++@param id Marker value
++*/
++static opj_dec_mstabent_t *j2k_dec_mstab_lookup(int id) {
++ opj_dec_mstabent_t *e;
++ for (e = j2k_dec_mstab; e->id != 0; e++) {
++ if (e->id == id) {
++ break;
++ }
++ }
++ return e;
++}
++
++/* ----------------------------------------------------------------------- */
++/* J2K / JPT decoder interface */
++/* ----------------------------------------------------------------------- */
++
++opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo) {
++ opj_j2k_t *j2k = (opj_j2k_t*)opj_malloc(sizeof(opj_j2k_t));
++ if(j2k) {
++ j2k->cinfo = cinfo;
++ j2k->default_tcp = (opj_tcp_t*)opj_malloc(sizeof(opj_tcp_t));
++ if(!j2k->default_tcp) {
++ opj_free(j2k);
++ return NULL;
++ }
++ }
++ return j2k;
++}
++
++void j2k_destroy_decompress(opj_j2k_t *j2k) {
++ int i = 0;
++
++ if(j2k->tile_len != NULL) {
++ opj_free(j2k->tile_len);
++ }
++ if(j2k->tile_data != NULL) {
++ opj_free(j2k->tile_data);
++ }
++ if(j2k->default_tcp != NULL) {
++ opj_tcp_t *default_tcp = j2k->default_tcp;
++ if(default_tcp->ppt_data_first != NULL) {
++ opj_free(default_tcp->ppt_data_first);
++ }
++ if(j2k->default_tcp->tccps != NULL) {
++ opj_free(j2k->default_tcp->tccps);
++ }
++ opj_free(j2k->default_tcp);
++ }
++ if(j2k->cp != NULL) {
++ opj_cp_t *cp = j2k->cp;
++ if(cp->tcps != NULL) {
++ for(i = 0; i < cp->tw * cp->th; i++) {
++ if(cp->tcps[i].ppt_data_first != NULL) {
++ opj_free(cp->tcps[i].ppt_data_first);
++ }
++ if(cp->tcps[i].tccps != NULL) {
++ opj_free(cp->tcps[i].tccps);
++ }
++ }
++ opj_free(cp->tcps);
++ }
++ if(cp->ppm_data_first != NULL) {
++ opj_free(cp->ppm_data_first);
++ }
++ if(cp->tileno != NULL) {
++ opj_free(cp->tileno);
++ }
++ if(cp->comment != NULL) {
++ opj_free(cp->comment);
++ }
++
++ opj_free(cp);
++ }
++
++ opj_free(j2k);
++}
++
++void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters) {
++ if(j2k && parameters) {
++ /* create and initialize the coding parameters structure */
++ opj_cp_t *cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
++ cp->reduce = parameters->cp_reduce;
++ cp->layer = parameters->cp_layer;
++ cp->limit_decoding = parameters->cp_limit_decoding;
++/* UniPG>> */
++#ifdef USE_JPWL
++ cp->correct = parameters->jpwl_correct;
++ cp->exp_comps = parameters->jpwl_exp_comps;
++ cp->max_tiles = parameters->jpwl_max_tiles;
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++ /* keep a link to cp so that we can destroy it later in j2k_destroy_decompress */
++ j2k->cp = cp;
++ }
++}
++
++opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio) {
++ opj_image_t *image = NULL;
++
++ opj_common_ptr cinfo = j2k->cinfo;
++
++ j2k->cio = cio;
++
++ /* create an empty image */
++ image = opj_image_create0();
++ j2k->image = image;
++
++ j2k->state = J2K_STATE_MHSOC;
++
++ for (;;) {
++ opj_dec_mstabent_t *e;
++ int id = cio_read(cio, 2);
++
++/* UniPG>> */
++#ifdef USE_JPWL
++ /* we try to honor JPWL correction power */
++ if (j2k->cp->correct) {
++
++ int orig_pos = cio_tell(cio);
++ bool status;
++
++ /* call the corrector */
++ status = jpwl_correct(j2k);
++
++ /* go back to where you were */
++ cio_seek(cio, orig_pos - 2);
++
++ /* re-read the marker */
++ id = cio_read(cio, 2);
++
++ /* check whether it begins with ff */
++ if (id >> 8 != 0xff) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR,
++ "JPWL: possible bad marker %x at %d\n",
++ id, cio_tell(cio) - 2);
++ if (!JPWL_ASSUME)
++ exit(1);
++ /* we try to correct */
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n");
++ id = id | 0xff00;
++ cio_seek(cio, cio_tell(cio) - 2);
++ cio_write(cio, id, 2);
++ opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting marker to %x\n",
++ id);
++ }
++
++ }
++#endif /* USE_JPWL */
++/* <<UniPG */
++ if (id >> 8 != 0xff) {
++ opj_image_destroy(image);
++ opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id);
++ return 0;
++ }
++ e = j2k_dec_mstab_lookup(id);
++ // Check if the marker is known
++ if (!(j2k->state & e->states)) {
++ opj_image_destroy(image);
++ opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id);
++ return 0;
++ }
++ // Check if the decoding is limited to the main header
++ if (e->id == J2K_MS_SOT && j2k->cp->limit_decoding == LIMIT_TO_MAIN_HEADER) {
++ opj_event_msg(cinfo, EVT_INFO, "Main Header decoded.\n");
++ return image;
++ }
++
++ if (e->handler) {
++ (*e->handler)(j2k);
++ }
++ if (j2k->state == J2K_STATE_MT) {
++ break;
++ }
++ if (j2k->state == J2K_STATE_NEOC) {
++ break;
++ }
++ }
++ if (j2k->state == J2K_STATE_NEOC) {
++ j2k_read_eoc(j2k);
++ }
++
++ if (j2k->state != J2K_STATE_MT) {
++ opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
++ }
++
++ return image;
++}
++
++/*
++* Read a JPT-stream and decode file
++*
++*/
++opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio) {
++ opj_image_t *image = NULL;
++ opj_jpt_msg_header_t header;
++ int position;
++
++ opj_common_ptr cinfo = j2k->cinfo;
++
++ j2k->cio = cio;
++
++ /* create an empty image */
++ image = opj_image_create0();
++
++ j2k->state = J2K_STATE_MHSOC;
++
++ /* Initialize the header */
++ jpt_init_msg_header(&header);
++ /* Read the first header of the message */
++ jpt_read_msg_header(cinfo, cio, &header);
++
++ position = cio_tell(cio);
++ if (header.Class_Id != 6) { /* 6 : Main header data-bin message */
++ opj_image_destroy(image);
++ opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Main header first [class_Id %d] !\n", header.Class_Id);
++ return 0;
++ }
++
++ for (;;) {
++ opj_dec_mstabent_t *e = NULL;
++ int id;
++
++ if (!cio_numbytesleft(cio)) {
++ j2k_read_eoc(j2k);
++ return image;
++ }
++ /* data-bin read -> need to read a new header */
++ if ((unsigned int) (cio_tell(cio) - position) == header.Msg_length) {
++ jpt_read_msg_header(cinfo, cio, &header);
++ position = cio_tell(cio);
++ if (header.Class_Id != 4) { /* 4 : Tile data-bin message */
++ opj_image_destroy(image);
++ opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Tile info !\n");
++ return 0;
++ }
++ }
++
++ id = cio_read(cio, 2);
++ if (id >> 8 != 0xff) {
++ opj_image_destroy(image);
++ opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id);
++ return 0;
++ }
++ e = j2k_dec_mstab_lookup(id);
++ if (!(j2k->state & e->states)) {
++ opj_image_destroy(image);
++ opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id);
++ return 0;
++ }
++ if (e->handler) {
++ (*e->handler)(j2k);
++ }
++ if (j2k->state == J2K_STATE_MT) {
++ break;
++ }
++ if (j2k->state == J2K_STATE_NEOC) {
++ break;
++ }
++ }
++ if (j2k->state == J2K_STATE_NEOC) {
++ j2k_read_eoc(j2k);
++ }
++
++ if (j2k->state != J2K_STATE_MT) {
++ opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
++ }
++
++ return image;
++}
++
++/* ----------------------------------------------------------------------- */
++/* J2K encoder interface */
++/* ----------------------------------------------------------------------- */
++
++opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo) {
++ opj_j2k_t *j2k = (opj_j2k_t*)opj_malloc(sizeof(opj_j2k_t));
++ if(j2k) {
++ j2k->cinfo = cinfo;
++ }
++ return j2k;
++}
++
++void j2k_destroy_compress(opj_j2k_t *j2k) {
++ int tileno;
++
++ if(!j2k) return;
++
++ if(j2k->image_info != NULL) {
++ opj_image_info_t *image_info = j2k->image_info;
++ if (image_info->index_on && j2k->cp) {
++ opj_cp_t *cp = j2k->cp;
++ for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
++ opj_tile_info_t *tile_info = &image_info->tile[tileno];
++ opj_free(tile_info->thresh);
++ opj_free(tile_info->packet);
++ }
++ opj_free(image_info->tile);
++ }
++ opj_free(image_info);
++ }
++ if(j2k->cp != NULL) {
++ opj_cp_t *cp = j2k->cp;
++
++ if(cp->comment) {
++ opj_free(cp->comment);
++ }
++ if(cp->matrice) {
++ opj_free(cp->matrice);
++ }
++ for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
++ opj_free(cp->tcps[tileno].tccps);
++ }
++ opj_free(cp->tcps);
++ opj_free(cp);
++ }
++
++ opj_free(j2k);
++}
++
++void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image) {
++ int i, j, tileno, numpocs_tile;
++ opj_cp_t *cp = NULL;
++
++ if(!j2k || !parameters || ! image) {
++ return;
++ }
++
++ /* create and initialize the coding parameters structure */
++ cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
++
++ /* keep a link to cp so that we can destroy it later in j2k_destroy_compress */
++ j2k->cp = cp;
++
++ /* set default values for cp */
++ cp->tw = 1;
++ cp->th = 1;
++
++ /*
++ copy user encoding parameters
++ */
++
++ cp->disto_alloc = parameters->cp_disto_alloc;
++ cp->fixed_alloc = parameters->cp_fixed_alloc;
++ cp->fixed_quality = parameters->cp_fixed_quality;
++
++ /* mod fixed_quality */
++ if(parameters->cp_matrice) {
++ size_t array_size = parameters->tcp_numlayers * parameters->numresolution * 3 * sizeof(int);
++ cp->matrice = (int *) opj_malloc(array_size);
++ memcpy(cp->matrice, parameters->cp_matrice, array_size);
++ }
++
++ /* creation of an index file ? */
++ cp->index_on = parameters->index_on;
++ if(cp->index_on) {
++ j2k->image_info = (opj_image_info_t*)opj_malloc(sizeof(opj_image_info_t));
++ }
++
++ /* tiles */
++ cp->tdx = parameters->cp_tdx;
++ cp->tdy = parameters->cp_tdy;
++
++ /* tile offset */
++ cp->tx0 = parameters->cp_tx0;
++ cp->ty0 = parameters->cp_ty0;
++
++ /* comment string */
++ if(parameters->cp_comment) {
++ cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1);
++ if(cp->comment) {
++ strcpy(cp->comment, parameters->cp_comment);
++ }
++ }
++
++ /*
++ calculate other encoding parameters
++ */
++
++ if (parameters->tile_size_on) {
++ cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
++ cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
++ } else {
++ cp->tdx = image->x1 - cp->tx0;
++ cp->tdy = image->y1 - cp->ty0;
++ }
++
++/* UniPG>> */
++#ifdef USE_JPWL
++ /*
++ calculate JPWL encoding parameters
++ */
++
++ if (parameters->jpwl_epc_on) {
++ int i;
++
++ /* set JPWL on */
++ cp->epc_on = true;
++ cp->info_on = false; /* no informative technique */
++
++ /* set EPB on */
++ if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) {
++ cp->epb_on = true;
++
++ cp->hprot_MH = parameters->jpwl_hprot_MH;
++ for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
++ cp->hprot_TPH_tileno[i] = parameters->jpwl_hprot_TPH_tileno[i];
++ cp->hprot_TPH[i] = parameters->jpwl_hprot_TPH[i];
++ }
++ /* if tile specs are not specified, copy MH specs */
++ if (cp->hprot_TPH[0] == -1) {
++ cp->hprot_TPH_tileno[0] = 0;
++ cp->hprot_TPH[0] = parameters->jpwl_hprot_MH;
++ }
++ for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
++ cp->pprot_tileno[i] = parameters->jpwl_pprot_tileno[i];
++ cp->pprot_packno[i] = parameters->jpwl_pprot_packno[i];
++ cp->pprot[i] = parameters->jpwl_pprot[i];
++ }
++ }
++
++ /* set ESD writing */
++ if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) {
++ cp->esd_on = true;
++
++ cp->sens_size = parameters->jpwl_sens_size;
++ cp->sens_addr = parameters->jpwl_sens_addr;
++ cp->sens_range = parameters->jpwl_sens_range;
++
++ cp->sens_MH = parameters->jpwl_sens_MH;
++ for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
++ cp->sens_TPH_tileno[i] = parameters->jpwl_sens_TPH_tileno[i];
++ cp->sens_TPH[i] = parameters->jpwl_sens_TPH[i];
++ }
++ }
++
++ /* always set RED writing to false: we are at the encoder */
++ cp->red_on = false;
++
++ } else {
++ cp->epc_on = false;
++ }
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++ /* initialize the mutiple tiles */
++ /* ---------------------------- */
++ cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * sizeof(opj_tcp_t));
++
++ for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
++ opj_tcp_t *tcp = &cp->tcps[tileno];
++ tcp->numlayers = parameters->tcp_numlayers;
++ for (j = 0; j < tcp->numlayers; j++) {
++ if (cp->fixed_quality) { /* add fixed_quality */
++ tcp->distoratio[j] = parameters->tcp_distoratio[j];
++ } else {
++ tcp->rates[j] = parameters->tcp_rates[j];
++ }
++ }
++ tcp->csty = parameters->csty;
++ tcp->prg = parameters->prog_order;
++ tcp->mct = image->numcomps == 3 ? 1 : 0;
++
++ numpocs_tile = 0;
++ tcp->POC = 0;
++ if (parameters->numpocs) {
++ /* initialisation of POC */
++ tcp->POC = 1;
++ for (i = 0; i < parameters->numpocs; i++) {
++ if((tileno == parameters->POC[i].tile - 1) || (parameters->POC[i].tile == -1)) {
++ opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
++ tcp_poc->resno0 = parameters->POC[numpocs_tile].resno0;
++ tcp_poc->compno0 = parameters->POC[numpocs_tile].compno0;
++ tcp_poc->layno1 = parameters->POC[numpocs_tile].layno1;
++ tcp_poc->resno1 = parameters->POC[numpocs_tile].resno1;
++ tcp_poc->compno1 = parameters->POC[numpocs_tile].compno1;
++ tcp_poc->prg = parameters->POC[numpocs_tile].prg;
++ tcp_poc->tile = parameters->POC[numpocs_tile].tile;
++ numpocs_tile++;
++ }
++ }
++ }
++ tcp->numpocs = numpocs_tile;
++
++ tcp->tccps = (opj_tccp_t *) opj_malloc(image->numcomps * sizeof(opj_tccp_t));
++
++ for (i = 0; i < image->numcomps; i++) {
++ opj_tccp_t *tccp = &tcp->tccps[i];
++ tccp->csty = parameters->csty & 0x01; /* 0 => one precinct || 1 => custom precinct */
++ tccp->numresolutions = parameters->numresolution;
++ tccp->cblkw = int_floorlog2(parameters->cblockw_init);
++ tccp->cblkh = int_floorlog2(parameters->cblockh_init);
++ tccp->cblksty = parameters->mode;
++ tccp->qmfbid = parameters->irreversible ? 0 : 1;
++ tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT : J2K_CCP_QNTSTY_NOQNT;
++ tccp->numgbits = 2;
++ if (i == parameters->roi_compno) {
++ tccp->roishift = parameters->roi_shift;
++ } else {
++ tccp->roishift = 0;
++ }
++ if (parameters->csty & J2K_CCP_CSTY_PRT) {
++ int p = 0;
++ for (j = tccp->numresolutions - 1; j >= 0; j--) {
++ if (p < parameters->res_spec) {
++ if (parameters->prcw_init[p] < 1) {
++ tccp->prcw[j] = 1;
++ } else {
++ tccp->prcw[j] = int_floorlog2(parameters->prcw_init[p]);
++ }
++ if (parameters->prch_init[p] < 1) {
++ tccp->prch[j] = 1;
++ } else {
++ tccp->prch[j] = int_floorlog2(parameters->prch_init[p]);
++ }
++ } else {
++ int res_spec = parameters->res_spec;
++ int size_prcw = parameters->prcw_init[res_spec - 1] >> (p - (res_spec - 1));
++ int size_prch = parameters->prch_init[res_spec - 1] >> (p - (res_spec - 1));
++ if (size_prcw < 1) {
++ tccp->prcw[j] = 1;
++ } else {
++ tccp->prcw[j] = int_floorlog2(size_prcw);
++ }
++ if (size_prch < 1) {
++ tccp->prch[j] = 1;
++ } else {
++ tccp->prch[j] = int_floorlog2(size_prch);
++ }
++ }
++ p++;
++ /*printf("\nsize precinct for level %d : %d,%d\n", j,tccp->prcw[j], tccp->prch[j]); */
++ }
++ } else {
++ for (j = 0; j < tccp->numresolutions; j++) {
++ tccp->prcw[j] = 15;
++ tccp->prch[j] = 15;
++ }
++ }
++
++ dwt_calc_explicit_stepsizes(tccp, image->comps[i].prec);
++ }
++ }
++}
++
++/**
++Create an index file
++@param j2k
++@param cio
++@param image_info
++@param index Index filename
++@return Returns 1 if successful, returns 0 otherwise
++*/
++static int j2k_create_index(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_info_t *image_info, char *index) {
++ int tileno, compno, layno, resno, precno, pack_nb, x, y;
++ FILE *stream = NULL;
++ double total_disto = 0;
++
++ image_info->codestream_size = cio_tell(cio) + j2k->pos_correction; /* Correction 14/4/03 suite rmq de Patrick */
++
++/* UniPG>> */
++#ifdef USE_JPWL
++ /* if JPWL is enabled and the name coincides with our own set
++ then discard the creation of the file: this was just done to
++ enable indexing, we do not want an index file
++ */
++ if (j2k->cp->epc_on && !strcmp(index, JPWL_PRIVATEINDEX_NAME))
++ return 1;
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++ stream = fopen(index, "w");
++ if (!stream) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR, "failed to open %s for writing\n", index);
++ return 0;
++ }
++
++ fprintf(stream, "%d %d\n", image_info->image_w, image_info->image_h);
++ fprintf(stream, "%d\n", image_info->prog);
++ fprintf(stream, "%d %d\n", image_info->tile_x, image_info->tile_y);
++ fprintf(stream, "%d %d\n", image_info->tw, image_info->th);
++ fprintf(stream, "%d\n", image_info->comp);
++ fprintf(stream, "%d\n", image_info->layer);
++ fprintf(stream, "%d\n", image_info->decomposition);
++
++ for (resno = image_info->decomposition; resno >= 0; resno--) {
++ fprintf(stream, "[%d,%d] ",
++ (1 << image_info->tile[0].pdx[resno]), (1 << image_info->tile[0].pdx[resno])); /* based on tile 0 */
++ }
++ fprintf(stream, "\n");
++ fprintf(stream, "%d\n", image_info->main_head_end);
++ fprintf(stream, "%d\n", image_info->codestream_size);
++
++ for (tileno = 0; tileno < image_info->tw * image_info->th; tileno++) {
++ fprintf(stream, "%4d %9d %9d %9d %9e %9d %9e\n",
++ image_info->tile[tileno].num_tile,
++ image_info->tile[tileno].start_pos,
++ image_info->tile[tileno].end_header,
++ image_info->tile[tileno].end_pos,
++ image_info->tile[tileno].distotile, image_info->tile[tileno].nbpix,
++ image_info->tile[tileno].distotile / image_info->tile[tileno].nbpix);
++ }
++
++ for (tileno = 0; tileno < image_info->tw * image_info->th; tileno++) {
++ int start_pos, end_pos;
++ double disto = 0;
++ pack_nb = 0;
++
++ /*
++ fprintf(stream, "pkno tileno layerno resno compno precno start_pos end_pos deltaSE \n");
++ */
++
++ if (image_info->prog == LRCP) { /* LRCP */
++ /*
++ fprintf(stream, "pack_nb tileno layno resno compno precno start_pos end_pos disto");
++ */
++ for (layno = 0; layno < image_info->layer; layno++) {
++ for (resno = 0; resno < image_info->decomposition + 1; resno++) {
++ for (compno = 0; compno < image_info->comp; compno++) {
++ int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
++ for (precno = 0; precno < prec_max; precno++) {
++ start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
++ end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
++ disto = image_info->tile[tileno].packet[pack_nb].disto;
++ fprintf(stream, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
++ pack_nb, tileno, layno, resno, compno, precno, start_pos, end_pos, disto);
++ total_disto += disto;
++ pack_nb++;
++ }
++ }
++ }
++ }
++ } /* LRCP */
++ else if (image_info->prog == RLCP) { /* RLCP */
++ /*
++ fprintf(stream, "pack_nb tileno resno layno compno precno start_pos end_pos disto");
++ */
++ for (resno = 0; resno < image_info->decomposition + 1; resno++) {
++ for (layno = 0; layno < image_info->layer; layno++) {
++ for (compno = 0; compno < image_info->comp; compno++) {
++ int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
++ for (precno = 0; precno < prec_max; precno++) {
++ start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
++ end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
++ disto = image_info->tile[tileno].packet[pack_nb].disto;
++ fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %8e\n",
++ pack_nb, tileno, resno, layno, compno, precno, start_pos, end_pos, disto);
++ total_disto += disto;
++ pack_nb++;
++ }
++ }
++ }
++ }
++ } /* RLCP */
++ else if (image_info->prog == RPCL) { /* RPCL */
++ /*
++ fprintf(stream, "\npack_nb tileno resno precno compno layno start_pos end_pos disto\n");
++ */
++ for (resno = 0; resno < image_info->decomposition + 1; resno++) {
++ /* I suppose components have same XRsiz, YRsiz */
++ int x0 = image_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tw * image_info->tile_x;
++ int y0 = image_info->tile_Ox + (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tile_y;
++ int x1 = x0 + image_info->tile_x;
++ int y1 = y0 + image_info->tile_y;
++ for(y = y0; y < y1; y++) {
++ for(x = x0; x < x1; x++) {
++ for (compno = 0; compno < image_info->comp; compno++) {
++ int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
++ for (precno = 0; precno < prec_max; precno++) {
++ int pcnx = image_info->tile[tileno].pw[resno];
++ int pcx = (int) pow( 2, image_info->tile[tileno].pdx[resno] + image_info->decomposition - resno );
++ int pcy = (int) pow( 2, image_info->tile[tileno].pdy[resno] + image_info->decomposition - resno );
++ int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
++ int precno_y = (int) floor( (float)precno/(float)pcnx );
++ if (precno_y*pcy == y ) {
++ if (precno_x*pcx == x ) {
++ for (layno = 0; layno < image_info->layer; layno++) {
++ start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
++ end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
++ disto = image_info->tile[tileno].packet[pack_nb].disto;
++ fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %8e\n",
++ pack_nb, tileno, resno, precno, compno, layno, start_pos, end_pos, disto);
++ total_disto += disto;
++ pack_nb++;
++ }
++ }
++ }
++ } /* precno */
++ } /* compno */
++ } /* x = x0..x1 */
++ } /* y = y0..y1 */
++ } /* resno */
++ } /* RPCL */
++ else if (image_info->prog == PCRL) { /* PCRL */
++ /* I suppose components have same XRsiz, YRsiz */
++ int x0 = image_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tw * image_info->tile_x;
++ int y0 = image_info->tile_Ox + (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tile_y;
++ int x1 = x0 + image_info->tile_x;
++ int y1 = y0 + image_info->tile_y;
++ /*
++ fprintf(stream, "\npack_nb tileno precno compno resno layno start_pos end_pos disto\n");
++ */
++ for(y = y0; y < y1; y++) {
++ for(x = x0; x < x1; x++) {
++ for (compno = 0; compno < image_info->comp; compno++) {
++ for (resno = 0; resno < image_info->decomposition + 1; resno++) {
++ int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
++ for (precno = 0; precno < prec_max; precno++) {
++ int pcnx = image_info->tile[tileno].pw[resno];
++ int pcx = (int) pow( 2, image_info->tile[tileno].pdx[resno] + image_info->decomposition - resno );
++ int pcy = (int) pow( 2, image_info->tile[tileno].pdy[resno] + image_info->decomposition - resno );
++ int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
++ int precno_y = (int) floor( (float)precno/(float)pcnx );
++ if (precno_y*pcy == y ) {
++ if (precno_x*pcx == x ) {
++ for (layno = 0; layno < image_info->layer; layno++) {
++ start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
++ end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
++ disto = image_info->tile[tileno].packet[pack_nb].disto;
++ fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
++ pack_nb, tileno, precno, compno, resno, layno, start_pos, end_pos, disto);
++ total_disto += disto;
++ pack_nb++;
++ }
++ }
++ }
++ } /* precno */
++ } /* resno */
++ } /* compno */
++ } /* x = x0..x1 */
++ } /* y = y0..y1 */
++ } /* PCRL */
++ else { /* CPRL */
++ /*
++ fprintf(stream, "\npack_nb tileno compno precno resno layno start_pos end_pos disto\n");
++ */
++ for (compno = 0; compno < image_info->comp; compno++) {
++ /* I suppose components have same XRsiz, YRsiz */
++ int x0 = image_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tw * image_info->tile_x;
++ int y0 = image_info->tile_Ox + (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tile_y;
++ int x1 = x0 + image_info->tile_x;
++ int y1 = y0 + image_info->tile_y;
++ for(y = y0; y < y1; y++) {
++ for(x = x0; x < x1; x++) {
++ for (resno = 0; resno < image_info->decomposition + 1; resno++) {
++ int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
++ for (precno = 0; precno < prec_max; precno++) {
++ int pcnx = image_info->tile[tileno].pw[resno];
++ int pcx = (int) pow( 2, image_info->tile[tileno].pdx[resno] + image_info->decomposition - resno );
++ int pcy = (int) pow( 2, image_info->tile[tileno].pdy[resno] + image_info->decomposition - resno );
++ int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
++ int precno_y = (int) floor( (float)precno/(float)pcnx );
++ if (precno_y*pcy == y ) {
++ if (precno_x*pcx == x ) {
++ for (layno = 0; layno < image_info->layer; layno++) {
++ start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
++ end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
++ disto = image_info->tile[tileno].packet[pack_nb].disto;
++ fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
++ pack_nb, tileno, compno, precno, resno, layno, start_pos, end_pos, disto);
++ total_disto += disto;
++ pack_nb++;
++ }
++ }
++ }
++ } /* precno */
++ } /* resno */
++ } /* x = x0..x1 */
++ } /* y = y0..y1 */
++ } /* comno */
++ } /* CPRL */
++ } /* tileno */
++
++ fprintf(stream, "%8e\n", image_info->D_max); /* SE max */
++ fprintf(stream, "%.8e\n", total_disto); /* SE totale */
++ fclose(stream);
++
++ return 1;
++}
++
++bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, char *index) {
++ int tileno, compno;
++ opj_image_info_t *image_info = NULL;
++ opj_cp_t *cp = NULL;
++
++ opj_tcd_t *tcd = NULL; /* TCD component */
++
++ j2k->cio = cio;
++ j2k->image = image;
++
++ cp = j2k->cp;
++
++ /* j2k_dump_cp(stdout, image, cp); */
++
++ /* INDEX >> */
++ image_info = j2k->image_info;
++ if (image_info && cp->index_on) {
++ image_info->index_on = cp->index_on;
++ image_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * sizeof(opj_tile_info_t));
++ image_info->image_w = image->x1 - image->x0;
++ image_info->image_h = image->y1 - image->y0;
++ image_info->prog = (&cp->tcps[0])->prg;
++ image_info->tw = cp->tw;
++ image_info->th = cp->th;
++ image_info->tile_x = cp->tdx; /* new version parser */
++ image_info->tile_y = cp->tdy; /* new version parser */
++ image_info->tile_Ox = cp->tx0; /* new version parser */
++ image_info->tile_Oy = cp->ty0; /* new version parser */
++ image_info->comp = image->numcomps;
++ image_info->layer = (&cp->tcps[0])->numlayers;
++ image_info->decomposition = (&cp->tcps[0])->tccps->numresolutions - 1;
++ image_info->D_max = 0; /* ADD Marcela */
++ }
++ /* << INDEX */
++
++ j2k_write_soc(j2k);
++ j2k_write_siz(j2k);
++/* UniPG>> */
++#ifdef USE_JPWL
++ /** THIS CODE IS NOT USED */
++ //if(image_info && image_info->index_on && cp->epc_on)
++ // j2k_write_epc(j2k);
++#endif /* USE_JPWL */
++/* <<UniPG */
++ j2k_write_cod(j2k);
++ j2k_write_qcd(j2k);
++ for (compno = 0; compno < image->numcomps; compno++) {
++ opj_tcp_t *tcp = &cp->tcps[0];
++ if (tcp->tccps[compno].roishift)
++ j2k_write_rgn(j2k, compno, 0);
++ }
++ if (cp->comment != NULL) {
++ j2k_write_com(j2k);
++ }
++ /* INDEX >> */
++ if(image_info && image_info->index_on) {
++ image_info->main_head_end = cio_tell(cio) - 1;
++ }
++ /* << INDEX */
++
++ /* create the tile encoder */
++ tcd = tcd_create(j2k->cinfo);
++
++ /* encode each tile */
++
++ for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
++ opj_event_msg(j2k->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1, cp->tw * cp->th);
++
++ j2k->curtileno = tileno;
++
++ /* initialisation before tile encoding */
++ if (tileno == 0) {
++ tcd_malloc_encode(tcd, image, cp, j2k->curtileno);
++ } else {
++ tcd_init_encode(tcd, image, cp, j2k->curtileno);
++ }
++
++ /* INDEX >> */
++ if(image_info && image_info->index_on) {
++ image_info->tile[j2k->curtileno].num_tile = j2k->curtileno;
++ image_info->tile[j2k->curtileno].start_pos = cio_tell(cio) + j2k->pos_correction;
++ }
++ /* << INDEX */
++
++ j2k_write_sot(j2k);
++
++ for (compno = 1; compno < image->numcomps; compno++) {
++ j2k_write_coc(j2k, compno);
++ j2k_write_qcc(j2k, compno);
++ }
++ if (cp->tcps[tileno].numpocs) {
++ j2k_write_poc(j2k);
++ }
++
++ j2k_write_sod(j2k, tcd);
++
++ /* INDEX >> */
++ if(image_info && image_info->index_on) {
++ image_info->tile[j2k->curtileno].end_pos = cio_tell(cio) + j2k->pos_correction - 1;
++ }
++ /* << INDEX */
++
++
++ /*
++ if (tile->PPT) { // BAD PPT !!!
++ FILE *PPT_file;
++ int i;
++ PPT_file=fopen("PPT","rb");
++ fprintf(stderr,"%c%c%c%c",255,97,tile->len_ppt/256,tile->len_ppt%256);
++ for (i=0;i<tile->len_ppt;i++) {
++ unsigned char elmt;
++ fread(&elmt, 1, 1, PPT_file);
++ fwrite(&elmt,1,1,f);
++ }
++ fclose(PPT_file);
++ unlink("PPT");
++ }
++ */
++
++ }
++
++ /* destroy the tile encoder */
++ tcd_free_encode(tcd);
++ tcd_destroy(tcd);
++
++ j2k_write_eoc(j2k);
++
++ /* Creation of the index file */
++ if(image_info && image_info->index_on) {
++ if(!j2k_create_index(j2k, cio, image_info, index)) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR, "failed to create index file %s\n", index);
++ return false;
++ }
++ }
++
++/* UniPG>> */
++#ifdef USE_JPWL
++ /*
++ preparation of JPWL marker segments: can be finalized only when the whole
++ codestream is known
++ */
++ if(image_info && image_info->index_on && cp->epc_on) {
++
++ /* let's begin creating a marker list, according to user wishes */
++ jpwl_prepare_marks(j2k, cio, image);
++
++ /* now we dump the JPWL markers on the codestream */
++ jpwl_dump_marks(j2k, cio, image);
++
++ /* do not know exactly what is this for,
++ but it gets called during index creation */
++ j2k->pos_correction = 0;
++
++ /* Re-creation of the index file, with updated info */
++ if(image_info && image_info->index_on) {
++ if(!j2k_create_index(j2k, cio, image_info, index)) {
++ opj_event_msg(j2k->cinfo, EVT_ERROR, "failed to re-create index file %s\n", index);
++ return false;
++ }
++ }
++
++ /* now we finalize the marker contents */
++ /*jpwl_finalize_marks(j2k, cio, image);*/
++
++ }
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++ return true;
++}
++
+diff -Naur OpenJPEG/libopenjpeg/j2k.c.rej OpenJPEG-patched/libopenjpeg/j2k.c.rej
+--- OpenJPEG/libopenjpeg/j2k.c.rej 1970-01-01 01:00:00.000000000 +0100
++++ OpenJPEG-patched/libopenjpeg/j2k.c.rej 2007-03-17 14:18:44.000000000 +0100
+@@ -0,0 +1,16 @@
++***************
++*** 1522,1527 ****
++ opj_cp_t *cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
++ cp->reduce = parameters->cp_reduce;
++ cp->layer = parameters->cp_layer;
++ /* UniPG>> */
++ #ifdef USE_JPWL
++ cp->correct = parameters->jpwl_correct;
++--- 1524,1530 ----
++ opj_cp_t *cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
++ cp->reduce = parameters->cp_reduce;
++ cp->layer = parameters->cp_layer;
+++ cp->limit_tags = parameters->cp_limit_tags;
++ /* UniPG>> */
++ #ifdef USE_JPWL
++ cp->correct = parameters->jpwl_correct;
+diff -Naur OpenJPEG/libopenjpeg/j2k.h OpenJPEG-patched/libopenjpeg/j2k.h
+--- OpenJPEG/libopenjpeg/j2k.h 2007-02-19 10:59:29.000000000 +0100
++++ OpenJPEG-patched/libopenjpeg/j2k.h 2007-03-17 14:20:28.000000000 +0100
+@@ -200,6 +200,8 @@
+ /** if == NO_LIMITATION, decode entire codestream; if == LIMIT_TO_MAIN_HEADER then only decode the main header */
+ OPJ_LIMIT_DECODING limit_decoding;
+ /** 0 = no index || 1 = index */
++ /** if != 0, then only decode specific tags, abort on any other; if == 0 decode all tags */
++ OPJ_LIMIT_TAGS limit_tags;
+ int index_on;
+ /** XTOsiz */
+ int tx0;
+diff -Naur OpenJPEG/libopenjpeg/j2k.h.orig OpenJPEG-patched/libopenjpeg/j2k.h.orig
+--- OpenJPEG/libopenjpeg/j2k.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ OpenJPEG-patched/libopenjpeg/j2k.h.orig 2007-02-19 10:59:29.000000000 +0100
+@@ -0,0 +1,484 @@
++/*
++ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
++ * Copyright (c) 2002-2007, Professor Benoit Macq
++ * Copyright (c) 2001-2003, David Janssens
++ * Copyright (c) 2002-2003, Yannick Verschueren
++ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
++ * Copyright (c) 2005, Herve Drolon, FreeImage Team
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++ * POSSIBILITY OF SUCH DAMAGE.
++ */
++#ifndef __J2K_H
++#define __J2K_H
++/**
++@file j2k.h
++@brief The JPEG-2000 Codestream Reader/Writer (J2K)
++
++The functions in J2K.C have for goal to read/write the several parts of the codestream: markers and data.
++*/
++
++/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */
++/*@{*/
++
++#define J2K_CP_CSTY_PRT 0x01
++#define J2K_CP_CSTY_SOP 0x02
++#define J2K_CP_CSTY_EPH 0x04
++#define J2K_CCP_CSTY_PRT 0x01
++#define J2K_CCP_CBLKSTY_LAZY 0x01
++#define J2K_CCP_CBLKSTY_RESET 0x02
++#define J2K_CCP_CBLKSTY_TERMALL 0x04
++#define J2K_CCP_CBLKSTY_VSC 0x08
++#define J2K_CCP_CBLKSTY_PTERM 0x10
++#define J2K_CCP_CBLKSTY_SEGSYM 0x20
++#define J2K_CCP_QNTSTY_NOQNT 0
++#define J2K_CCP_QNTSTY_SIQNT 1
++#define J2K_CCP_QNTSTY_SEQNT 2
++
++/* ----------------------------------------------------------------------- */
++
++#define J2K_MS_SOC 0xff4f /**< SOC marker value */
++#define J2K_MS_SOT 0xff90 /**< SOT marker value */
++#define J2K_MS_SOD 0xff93 /**< SOD marker value */
++#define J2K_MS_EOC 0xffd9 /**< EOC marker value */
++#define J2K_MS_SIZ 0xff51 /**< SIZ marker value */
++#define J2K_MS_COD 0xff52 /**< COD marker value */
++#define J2K_MS_COC 0xff53 /**< COC marker value */
++#define J2K_MS_RGN 0xff5e /**< RGN marker value */
++#define J2K_MS_QCD 0xff5c /**< QCD marker value */
++#define J2K_MS_QCC 0xff5d /**< QCC marker value */
++#define J2K_MS_POC 0xff5f /**< POC marker value */
++#define J2K_MS_TLM 0xff55 /**< TLM marker value */
++#define J2K_MS_PLM 0xff57 /**< PLM marker value */
++#define J2K_MS_PLT 0xff58 /**< PLT marker value */
++#define J2K_MS_PPM 0xff60 /**< PPM marker value */
++#define J2K_MS_PPT 0xff61 /**< PPT marker value */
++#define J2K_MS_SOP 0xff91 /**< SOP marker value */
++#define J2K_MS_EPH 0xff92 /**< EPH marker value */
++#define J2K_MS_CRG 0xff63 /**< CRG marker value */
++#define J2K_MS_COM 0xff64 /**< COM marker value */
++/* UniPG>> */
++#ifdef USE_JPWL
++#define J2K_MS_EPC 0xff68 /**< EPC marker value (Part11) */
++#define J2K_MS_EPB 0xff66 /**< EPB marker value (Part11) */
++#define J2K_MS_ESD 0xff67 /**< ESD marker value (Part11) */
++#define J2K_MS_RED 0xff69 /**< RED marker value (Part11) */
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++/* ----------------------------------------------------------------------- */
++
++/**
++Values that specify the status of the decoding process when decoding the main header.
++These values may be combined with a | operator.
++*/
++typedef enum J2K_STATUS {
++ J2K_STATE_MHSOC = 0x0001, /**< a SOC marker is expected */
++ J2K_STATE_MHSIZ = 0x0002, /**< a SIZ marker is expected */
++ J2K_STATE_MH = 0x0004, /**< the decoding process is in the main header */
++ J2K_STATE_TPHSOT = 0x0008, /**< the decoding process is in a tile part header and expects a SOT marker */
++ J2K_STATE_TPH = 0x0010, /**< the decoding process is in a tile part header */
++ J2K_STATE_MT = 0x0020, /**< the EOC marker has just been read */
++ J2K_STATE_NEOC = 0x0040 /**< the decoding process must not expect a EOC marker because the codestream is truncated */
++} J2K_STATUS;
++
++/* ----------------------------------------------------------------------- */
++
++/**
++Quantization stepsize
++*/
++typedef struct opj_stepsize {
++ /** exponent */
++ int expn;
++ /** mantissa */
++ int mant;
++} opj_stepsize_t;
++
++/**
++Tile-component coding parameters
++*/
++typedef struct opj_tccp {
++ /** coding style */
++ int csty;
++ /** number of resolutions */
++ int numresolutions;
++ /** code-blocks width */
++ int cblkw;
++ /** code-blocks height */
++ int cblkh;
++ /** code-block coding style */
++ int cblksty;
++ /** discrete wavelet transform identifier */
++ int qmfbid;
++ /** quantisation style */
++ int qntsty;
++ /** stepsizes used for quantization */
++ opj_stepsize_t stepsizes[J2K_MAXBANDS];
++ /** number of guard bits */
++ int numgbits;
++ /** Region Of Interest shift */
++ int roishift;
++ /** precinct width */
++ int prcw[J2K_MAXRLVLS];
++ /** precinct height */
++ int prch[J2K_MAXRLVLS];
++} opj_tccp_t;
++
++/**
++Tile coding parameters :
++this structure is used to store coding/decoding parameters common to all
++tiles (information like COD, COC in main header)
++*/
++typedef struct opj_tcp {
++ /** 1 : first part-tile of a tile */
++ int first;
++ /** coding style */
++ int csty;
++ /** progression order */
++ OPJ_PROG_ORDER prg;
++ /** number of layers */
++ int numlayers;
++ /** multi-component transform identifier */
++ int mct;
++ /** rates of layers */
++ float rates[100];
++ /** number of progression order changes */
++ int numpocs;
++ /** indicates if a POC marker has been used O:NO, 1:YES */
++ int POC;
++ /** progression order changes */
++ opj_poc_t pocs[32];
++ /** packet header store there for futur use in t2_decode_packet */
++ unsigned char *ppt_data;
++ /** pointer remaining on the first byte of the first header if ppt is used */
++ unsigned char *ppt_data_first;
++ /** If ppt == 1 --> there was a PPT marker for the present tile */
++ int ppt;
++ /** used in case of multiple marker PPT (number of info already stored) */
++ int ppt_store;
++ /** ppmbug1 */
++ int ppt_len;
++ /** add fixed_quality */
++ float distoratio[100];
++ /** tile-component coding parameters */
++ opj_tccp_t *tccps;
++} opj_tcp_t;
++
++/**
++Coding parameters
++*/
++typedef struct opj_cp {
++ /** allocation by rate/distortion */
++ int disto_alloc;
++ /** allocation by fixed layer */
++ int fixed_alloc;
++ /** add fixed_quality */
++ int fixed_quality;
++ /** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */
++ int reduce;
++ /** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */
++ int layer;
++ /** if == NO_LIMITATION, decode entire codestream; if == LIMIT_TO_MAIN_HEADER then only decode the main header */
++ OPJ_LIMIT_DECODING limit_decoding;
++ /** 0 = no index || 1 = index */
++ int index_on;
++ /** XTOsiz */
++ int tx0;
++ /** YTOsiz */
++ int ty0;
++ /** XTsiz */
++ int tdx;
++ /** YTsiz */
++ int tdy;
++ /** comment for coding */
++ char *comment;
++ /** number of tiles in width */
++ int tw;
++ /** number of tiles in heigth */
++ int th;
++ /** ID number of the tiles present in the codestream */
++ int *tileno;
++ /** size of the vector tileno */
++ int tileno_size;
++ /** packet header store there for futur use in t2_decode_packet */
++ unsigned char *ppm_data;
++ /** pointer remaining on the first byte of the first header if ppm is used */
++ unsigned char *ppm_data_first;
++ /** if ppm == 1 --> there was a PPM marker for the present tile */
++ int ppm;
++ /** use in case of multiple marker PPM (number of info already store) */
++ int ppm_store;
++ /** use in case of multiple marker PPM (case on non-finished previous info) */
++ int ppm_previous;
++ /** ppmbug1 */
++ int ppm_len;
++ /** tile coding parameters */
++ opj_tcp_t *tcps;
++ /** fixed layer */
++ int *matrice;
++/* UniPG>> */
++#ifdef USE_JPWL
++ /** enables writing of EPC in MH, thus activating JPWL */
++ bool epc_on;
++ /** enables writing of EPB, in case of activated JPWL */
++ bool epb_on;
++ /** enables writing of ESD, in case of activated JPWL */
++ bool esd_on;
++ /** enables writing of informative techniques of ESD, in case of activated JPWL */
++ bool info_on;
++ /** enables writing of RED, in case of activated JPWL */
++ bool red_on;
++ /** error protection method for MH (0,1,16,32,37-128) */
++ int hprot_MH;
++ /** tile number of header protection specification (>=0) */
++ int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
++ /** error protection methods for TPHs (0,1,16,32,37-128) */
++ int hprot_TPH[JPWL_MAX_NO_TILESPECS];
++ /** tile number of packet protection specification (>=0) */
++ int pprot_tileno[JPWL_MAX_NO_PACKSPECS];
++ /** packet number of packet protection specification (>=0) */
++ int pprot_packno[JPWL_MAX_NO_PACKSPECS];
++ /** error protection methods for packets (0,1,16,32,37-128) */
++ int pprot[JPWL_MAX_NO_PACKSPECS];
++ /** enables writing of ESD, (0/2/4 bytes) */
++ int sens_size;
++ /** sensitivity addressing size (0=auto/2/4 bytes) */
++ int sens_addr;
++ /** sensitivity range (0-3) */
++ int sens_range;
++ /** sensitivity method for MH (-1,0-7) */
++ int sens_MH;
++ /** tile number of sensitivity specification (>=0) */
++ int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
++ /** sensitivity methods for TPHs (-1,0-7) */
++ int sens_TPH[JPWL_MAX_NO_TILESPECS];
++ /** enables JPWL correction at the decoder */
++ bool correct;
++ /** expected number of components at the decoder */
++ int exp_comps;
++ /** maximum number of tiles at the decoder */
++ int max_tiles;
++#endif /* USE_JPWL */
++/* <<UniPG */
++} opj_cp_t;
++
++/**
++Information concerning a packet inside tile
++*/
++typedef struct opj_packet_info {
++ /** start position */
++ int start_pos;
++ /** end position */
++ int end_pos;
++ /** ADD for Marcela */
++ double disto;
++} opj_packet_info_t;
++
++/**
++Index structure : information regarding tiles inside image
++*/
++typedef struct opj_tile_info {
++ /** value of thresh for each layer by tile cfr. Marcela */
++ double *thresh;
++ /** number of tile */
++ int num_tile;
++ /** start position */
++ int start_pos;
++ /** end position of the header */
++ int end_header;
++ /** end position */
++ int end_pos;
++ /** precinct number for each resolution level (width) */
++ int pw[33];
++ /** precinct number for each resolution level (height) */
++ int ph[33];
++ /** precinct size (in power of 2), in X for each resolution level */
++ int pdx[33];
++ /** precinct size (in power of 2), in Y for each resolution level */
++ int pdy[33];
++ /** information concerning packets inside tile */
++ opj_packet_info_t *packet;
++ /** add fixed_quality */
++ int nbpix;
++ /** add fixed_quality */
++ double distotile;
++} opj_tile_info_t;
++
++/**
++Index structure
++*/
++typedef struct opj_image_info {
++ /** 0 = no index || 1 = index */
++ int index_on;
++ /** maximum distortion reduction on the whole image (add for Marcela) */
++ double D_max;
++ /** packet number */
++ int num;
++ /** writing the packet in the index with t2_encode_packets */
++ int index_write;
++ /** image width */
++ int image_w;
++ /** image height */
++ int image_h;
++ /** progression order */
++ OPJ_PROG_ORDER prog;
++ /** tile size in x */
++ int tile_x;
++ /** tile size in y */
++ int tile_y;
++ /** */
++ int tile_Ox;
++ /** */
++ int tile_Oy;
++ /** number of tiles in X */
++ int tw;
++ /** number of tiles in Y */
++ int th;
++ /** component numbers */
++ int comp;
++ /** number of layer */
++ int layer;
++ /** number of decomposition */
++ int decomposition;
++ /** main header position */
++ int main_head_end;
++ /** codestream's size */
++ int codestream_size;
++ /** information regarding tiles inside image */
++ opj_tile_info_t *tile;
++} opj_image_info_t;
++
++/**
++JPEG-2000 codestream reader/writer
++*/
++typedef struct opj_j2k {
++ /** codec context */
++ opj_common_ptr cinfo;
++
++ /** locate in which part of the codestream the decoder is (main header, tile header, end) */
++ int state;
++ /** number of the tile curently concern by coding/decoding */
++ int curtileno;
++ /**
++ locate the position of the end of the tile in the codestream,
++ used to detect a truncated codestream (in j2k_read_sod)
++ */
++ unsigned char *eot;
++ /**
++ locate the start position of the SOT marker of the current coded tile:
++ after encoding the tile, a jump (in j2k_write_sod) is done to the SOT marker to store the value of its length.
++ */
++ int sot_start;
++ int sod_start;
++ /**
++ as the J2K-file is written in several parts during encoding,
++ it enables to make the right correction in position return by cio_tell
++ */
++ int pos_correction;
++ /** array used to store the data of each tile */
++ unsigned char **tile_data;
++ /** array used to store the length of each tile */
++ int *tile_len;
++ /**
++ decompression only :
++ store decoding parameters common to all tiles (information like COD, COC in main header)
++ */
++ opj_tcp_t *default_tcp;
++ /** pointer to the encoded / decoded image */
++ opj_image_t *image;
++ /** pointer to the coding parameters */
++ opj_cp_t *cp;
++ /** helper used to write the index file */
++ opj_image_info_t *image_info;
++ /** pointer to the byte i/o stream */
++ opj_cio_t *cio;
++} opj_j2k_t;
++
++/** @name Exported functions */
++/*@{*/
++/* ----------------------------------------------------------------------- */
++/**
++Creates a J2K decompression structure
++@param cinfo Codec context info
++@return Returns a handle to a J2K decompressor if successful, returns NULL otherwise
++*/
++opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo);
++/**
++Destroy a J2K decompressor handle
++@param j2k J2K decompressor handle to destroy
++*/
++void j2k_destroy_decompress(opj_j2k_t *j2k);
++/**
++Setup the decoder decoding parameters using user parameters.
++Decoding parameters are returned in j2k->cp.
++@param j2k J2K decompressor handle
++@param parameters decompression parameters
++*/
++void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
++/**
++Decode an image from a JPEG-2000 codestream
++@param j2k J2K decompressor handle
++@param cio Input buffer stream
++@return Returns a decoded image if successful, returns NULL otherwise
++*/
++opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio);
++/**
++Decode an image form a JPT-stream (JPEG 2000, JPIP)
++@param j2k J2K decompressor handle
++@param cio Input buffer stream
++@return Returns a decoded image if successful, returns NULL otherwise
++*/
++opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio);
++/**
++Creates a J2K compression structure
++@param cinfo Codec context info
++@return Returns a handle to a J2K compressor if successful, returns NULL otherwise
++*/
++opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo);
++/**
++Destroy a J2K compressor handle
++@param j2k J2K compressor handle to destroy
++*/
++void j2k_destroy_compress(opj_j2k_t *j2k);
++/**
++Setup the encoder parameters using the current image and using user parameters.
++Coding parameters are returned in j2k->cp.
++@param j2k J2K compressor handle
++@param parameters compression parameters
++@param image input filled image
++*/
++void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image);
++/**
++Encode an image into a JPEG-2000 codestream
++@param j2k J2K compressor handle
++@param cio Output buffer stream
++@param image Image to encode
++@param index Name of the index file if required, NULL otherwise
++@return Returns true if successful, returns false otherwise
++*/
++bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, char *index);
++/* ----------------------------------------------------------------------- */
++/*@}*/
++
++/*@}*/
++
++#endif /* __J2K_H */
+diff -Naur OpenJPEG/libopenjpeg/openjpeg.h OpenJPEG-patched/libopenjpeg/openjpeg.h
+--- OpenJPEG/libopenjpeg/openjpeg.h 2007-02-23 11:48:11.000000000 +0100
++++ OpenJPEG-patched/libopenjpeg/openjpeg.h 2007-03-17 14:18:28.000000000 +0100
+@@ -319,6 +319,41 @@
+
+ } opj_cparameters_t;
+
++/** Stop after tags. */
++typedef enum LIMIT_TAGS {
++ OPJ_TAG_SOC = 0x000001, /**< start of codestream */
++ OPJ_TAG_SOT = 0x000002, /**< start of tile-part*/
++ OPJ_TAG_SOD = 0x000004, /**< start of data */
++ OPJ_TAG_EOC = 0x000008, /**< end of codestream */
++ OPJ_TAG_SIZ = 0x000010, /**< image and tile size */
++ OPJ_TAG_COD = 0x000020, /**< coding style default */
++ OPJ_TAG_COC = 0x000040, /**< coding style component */
++ OPJ_TAG_RGN = 0x000080, /**< region-of-interest */
++ OPJ_TAG_QCD = 0x000100, /**< quantization default */
++ OPJ_TAG_QCC = 0x000200, /**< quantization component */
++ OPJ_TAG_POC = 0x000400, /**< progression order change */
++ OPJ_TAG_TLM = 0x000800, /**< tile-part lengths */
++ OPJ_TAG_PLM = 0x001000, /**< packet length, main header */
++ OPJ_TAG_PLT = 0x002000, /**< packet length, tile-part header */
++ OPJ_TAG_PPM = 0x004000, /**< packet packet headers, main header */
++ OPJ_TAG_PPT = 0x008000, /**< packet packet headers, tile-part header */
++ OPJ_TAG_SOP = 0x010000, /**< SOP marker value */
++ OPJ_TAG_EPH = 0x020000, /**< EPH marker value */
++ OPJ_TAG_CRG = 0x040000, /**< component registration */
++ OPJ_TAG_COM = 0x080000, /**< comment */
++#ifdef USE_JPWL
++/* UniPG>> */
++ OPJ_TAG_EPC = 0x100000, /**< EPC marker value (Part11) */
++ OPJ_TAG_EPB = 0x200000, /**< EPB marker value (Part11) */
++ OPJ_TAG_ESD = 0x400000, /**< ESD marker value (Part11) */
++ OPJ_TAG_RED = 0x800000, /**< RED marker value (Part11) */
++#endif /* USE_JPWL */
++/* <<UniPG */
++} OPJ_LIMIT_TAGS;
++
++/** The needed tags to decode just the size of the image. */
++#define OPJ_LIMIT_FOR_SIZE (OPJ_LIMIT_TAGS)(OPJ_TAG_SOC | OPJ_TAG_SIZ )
++
+ /**
+ Decompression parameters
+ */
+@@ -338,6 +373,15 @@
+ if == 0 or not used, all the quality layers are decoded
+ */
+ int cp_layer;
++ /**
++ Limits the tags that are decoded.
++ This is a bitwise OR of the tags to be decoded. If a tag is
++ encountered that isn't in the list decoding ceases and the function
++ returns.
++ if != 0 only the given tags are decoded.
++ if == 0 all tags are decoded.
++ */
++ OPJ_LIMIT_TAGS cp_limit_tags;
+
+ /**
+ Specify whether the decoding should be done on the entire codestream, or be limited to the main header
+diff -Naur OpenJPEG/libopenjpeg/openjpeg.h.orig OpenJPEG-patched/libopenjpeg/openjpeg.h.orig
+--- OpenJPEG/libopenjpeg/openjpeg.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ OpenJPEG-patched/libopenjpeg/openjpeg.h.orig 2007-02-23 11:48:11.000000000 +0100
+@@ -0,0 +1,704 @@
++ /*
++ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
++ * Copyright (c) 2002-2007, Professor Benoit Macq
++ * Copyright (c) 2001-2003, David Janssens
++ * Copyright (c) 2002-2003, Yannick Verschueren
++ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
++ * Copyright (c) 2005, Herve Drolon, FreeImage Team
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++ * POSSIBILITY OF SUCH DAMAGE.
++ */
++#ifndef OPENJPEG_H
++#define OPENJPEG_H
++
++#define OPENJPEG_VERSION "1.1.1"
++
++/*
++==========================================================
++ Compiler directives
++==========================================================
++*/
++
++#if defined(OPJ_STATIC) || !(defined(WIN32) || defined(__WIN32__))
++#define OPJ_API
++#define OPJ_CALLCONV
++#else
++#define OPJ_CALLCONV __stdcall
++/*
++The following ifdef block is the standard way of creating macros which make exporting
++from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS
++symbol defined on the command line. this symbol should not be defined on any project
++that uses this DLL. This way any other project whose source files include this file see
++OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols
++defined with this macro as being exported.
++*/
++#ifdef OPJ_EXPORTS
++#define OPJ_API __declspec(dllexport)
++#else
++#define OPJ_API __declspec(dllimport)
++#endif /* OPJ_EXPORTS */
++#endif /* !OPJ_STATIC || !WIN32 */
++
++#ifndef __cplusplus
++#if defined(HAVE_STDBOOL_H)
++/*
++The C language implementation does correctly provide the standard header
++file "stdbool.h".
++ */
++#include <stdbool.h>
++#else
++/*
++The C language implementation does not provide the standard header file
++"stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this
++braindamage below.
++*/
++#if !defined(bool)
++#define bool int
++#endif
++#if !defined(true)
++#define true 1
++#endif
++#if !defined(false)
++#define false 0
++#endif
++#endif
++#endif /* __cplusplus */
++
++/*
++==========================================================
++ Useful constant definitions
++==========================================================
++*/
++
++#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */
++
++#define J2K_MAXRLVLS 33 /**< Number of maximum resolution level authorized */
++#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */
++
++/* UniPG>> */
++#ifdef USE_JPWL
++#define JPWL_MAX_NO_TILESPECS 16 /**< Maximum number of tile parts expected by JPWL: increase at your will */
++#define JPWL_MAX_NO_PACKSPECS 16 /**< Maximum number of packet parts expected by JPWL: increase at your will */
++#define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: increase at your will */
++#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */
++#define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */
++#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */
++#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++/*
++==========================================================
++ enum definitions
++==========================================================
++*/
++
++/** Progression order */
++typedef enum PROG_ORDER {
++ PROG_UNKNOWN = -1, /**< place-holder */
++ LRCP = 0, /**< layer-resolution-component-precinct order */
++ RLCP = 1, /**< resolution-layer-component-precinct order */
++ RPCL = 2, /**< resolution-precinct-component-layer order */
++ PCRL = 3, /**< precinct-component-resolution-layer order */
++ CPRL = 4 /**< component-precinct-resolution-layer order */
++} OPJ_PROG_ORDER;
++
++/**
++Supported image color spaces
++*/
++typedef enum COLOR_SPACE {
++ CLRSPC_UNKNOWN = -1, /**< place-holder */
++ CLRSPC_SRGB = 1, /**< sRGB */
++ CLRSPC_GRAY = 2, /**< grayscale */
++ CLRSPC_SYCC = 3 /**< YUV */
++} OPJ_COLOR_SPACE;
++
++/**
++Supported codec
++*/
++typedef enum CODEC_FORMAT {
++ CODEC_UNKNOWN = -1, /**< place-holder */
++ CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */
++ CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */
++ CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */
++} OPJ_CODEC_FORMAT;
++
++/**
++Limit decoding to certain portions of the codestream.
++*/
++typedef enum LIMIT_DECODING {
++ NO_LIMITATION = 0, /**< No limitation for the decoding. The entire codestream will de decoded */
++ LIMIT_TO_MAIN_HEADER = 1 /**< The decoding is limited to the Main Header */
++} OPJ_LIMIT_DECODING;
++
++/*
++==========================================================
++ event manager typedef definitions
++==========================================================
++*/
++
++/**
++Callback function prototype for events
++@param msg Event message
++@param client_data
++*/
++typedef void (*opj_msg_callback) (const char *msg, void *client_data);
++
++/**
++Message handler object
++used for
++<ul>
++<li>Error messages
++<li>Warning messages
++<li>Debugging messages
++</ul>
++*/
++typedef struct opj_event_mgr {
++ /** Error message callback if available, NULL otherwise */
++ opj_msg_callback error_handler;
++ /** Warning message callback if available, NULL otherwise */
++ opj_msg_callback warning_handler;
++ /** Debug message callback if available, NULL otherwise */
++ opj_msg_callback info_handler;
++} opj_event_mgr_t;
++
++
++/*
++==========================================================
++ codec typedef definitions
++==========================================================
++*/
++
++/**
++Progression order changes
++*/
++typedef struct opj_poc {
++ int resno0, compno0;
++ int layno1, resno1, compno1;
++ OPJ_PROG_ORDER prg;
++ int tile;
++ char progorder[4];
++} opj_poc_t;
++
++/**
++Compression parameters
++*/
++typedef struct opj_cparameters {
++ /** size of tile: tile_size_on = false (not in argument) or = true (in argument) */
++ bool tile_size_on;
++ /** XTOsiz */
++ int cp_tx0;
++ /** YTOsiz */
++ int cp_ty0;
++ /** XTsiz */
++ int cp_tdx;
++ /** YTsiz */
++ int cp_tdy;
++ /** allocation by rate/distortion */
++ int cp_disto_alloc;
++ /** allocation by fixed layer */
++ int cp_fixed_alloc;
++ /** add fixed_quality */
++ int cp_fixed_quality;
++ /** fixed layer */
++ int *cp_matrice;
++ /** comment for coding */
++ char *cp_comment;
++ /** csty : coding style */
++ int csty;
++ /** progression order (default LRCP) */
++ OPJ_PROG_ORDER prog_order;
++ /** progression order changes */
++ opj_poc_t POC[32];
++ /** number of progression order changes (POC), default to 0 */
++ int numpocs;
++ /** number of layers */
++ int tcp_numlayers;
++ /** rates of layers */
++ float tcp_rates[100];
++ /** different psnr for successive layers */
++ float tcp_distoratio[100];
++ /** number of resolutions */
++ int numresolution;
++ /** initial code block width, default to 64 */
++ int cblockw_init;
++ /** initial code block height, default to 64 */
++ int cblockh_init;
++ /** mode switch (cblk_style) */
++ int mode;
++ /** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */
++ int irreversible;
++ /** region of interest: affected component in [0..3], -1 means no ROI */
++ int roi_compno;
++ /** region of interest: upshift value */
++ int roi_shift;
++ /* number of precinct size specifications */
++ int res_spec;
++ /** initial precinct width */
++ int prcw_init[J2K_MAXRLVLS];
++ /** initial precinct height */
++ int prch_init[J2K_MAXRLVLS];
++
++ /**@name command line encoder parameters (not used inside the library) */
++ /*@{*/
++ /** input file name */
++ char infile[OPJ_PATH_LEN];
++ /** output file name */
++ char outfile[OPJ_PATH_LEN];
++ /** creation of an index file, default to 0 (false) */
++ int index_on;
++ /** index file name */
++ char index[OPJ_PATH_LEN];
++ /** subimage encoding: origin image offset in x direction */
++ int image_offset_x0;
++ /** subimage encoding: origin image offset in y direction */
++ int image_offset_y0;
++ /** subsampling value for dx */
++ int subsampling_dx;
++ /** subsampling value for dy */
++ int subsampling_dy;
++ /** input file format 0: PGX, 1: PxM, 2: BMP */
++ int decod_format;
++ /** output file format 0: J2K, 1: JP2, 2: JPT */
++ int cod_format;
++ /*@}*/
++
++/* UniPG>> */
++#ifdef USE_JPWL
++ /**@name JPWL encoding parameters */
++ /*@{*/
++ /** enables writing of EPC in MH, thus activating JPWL */
++ bool jpwl_epc_on;
++ /** error protection method for MH (0,1,16,32,37-128) */
++ int jpwl_hprot_MH;
++ /** tile number of header protection specification (>=0) */
++ int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
++ /** error protection methods for TPHs (0,1,16,32,37-128) */
++ int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS];
++ /** tile number of packet protection specification (>=0) */
++ int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS];
++ /** packet number of packet protection specification (>=0) */
++ int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS];
++ /** error protection methods for packets (0,1,16,32,37-128) */
++ int jpwl_pprot[JPWL_MAX_NO_PACKSPECS];
++ /** enables writing of ESD, (0=no/1/2 bytes) */
++ int jpwl_sens_size;
++ /** sensitivity addressing size (0=auto/2/4 bytes) */
++ int jpwl_sens_addr;
++ /** sensitivity range (0-3) */
++ int jpwl_sens_range;
++ /** sensitivity method for MH (-1=no,0-7) */
++ int jpwl_sens_MH;
++ /** tile number of sensitivity specification (>=0) */
++ int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
++ /** sensitivity methods for TPHs (-1=no,0-7) */
++ int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS];
++ /*@}*/
++#endif /* USE_JPWL */
++/* <<UniPG */
++
++} opj_cparameters_t;
++
++/**
++Decompression parameters
++*/
++typedef struct opj_dparameters {
++ /**
++ Set the number of highest resolution levels to be discarded.
++ The image resolution is effectively divided by 2 to the power of the number of discarded levels.
++ The reduce factor is limited by the smallest total number of decomposition levels among tiles.
++ if != 0, then original dimension divided by 2^(reduce);
++ if == 0 or not used, image is decoded to the full resolution
++ */
++ int cp_reduce;
++ /**
++ Set the maximum number of quality layers to decode.
++ If there are less quality layers than the specified number, all the quality layers are decoded.
++ if != 0, then only the first "layer" layers are decoded;
++ if == 0 or not used, all the quality layers are decoded
++ */
++ int cp_layer;
++
++ /**
++ Specify whether the decoding should be done on the entire codestream, or be limited to the main header
++ Limiting the decoding to the main header makes it possible to extract the characteristics of the codestream
++ if == NO_LIMITATION, the entire codestream is decoded;
++ if == LIMIT_TO_MAIN_HEADER, only the main header is decoded;
++ */
++ OPJ_LIMIT_DECODING cp_limit_decoding;
++
++ /**@name command line encoder parameters (not used inside the library) */
++ /*@{*/
++ /** input file name */
++ char infile[OPJ_PATH_LEN];
++ /** output file name */
++ char outfile[OPJ_PATH_LEN];
++ /** input file format 0: J2K, 1: JP2, 2: JPT */
++ int decod_format;
++ /** output file format 0: PGX, 1: PxM, 2: BMP */
++ int cod_format;
++ /*@}*/
++
++/* UniPG>> */
++#ifdef USE_JPWL
++ /**@name JPWL decoding parameters */
++ /*@{*/
++ /** activates the JPWL correction capabilities */
++ bool jpwl_correct;
++ /** expected number of components */
++ int jpwl_exp_comps;
++ /** maximum number of tiles */
++ int jpwl_max_tiles;
++ /*@}*/
++#endif /* USE_JPWL */
++/* <<UniPG */
++} opj_dparameters_t;
++
++/** Common fields between JPEG-2000 compression and decompression master structs. */
++
++#define opj_common_fields \
++ opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\
++ void * client_data; /**< Available for use by application */\
++ bool is_decompressor; /**< So common code can tell which is which */\
++ OPJ_CODEC_FORMAT codec_format; /**< selected codec */\
++ void *j2k_handle; /**< pointer to the J2K codec */\
++ void *jp2_handle /**< pointer to the JP2 codec */
++
++/* Routines that are to be used by both halves of the library are declared
++ * to receive a pointer to this structure. There are no actual instances of
++ * opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t.
++ */
++typedef struct opj_common_struct {
++ opj_common_fields; /* Fields common to both master struct types */
++ /* Additional fields follow in an actual opj_cinfo_t or
++ * opj_dinfo_t. All three structs must agree on these
++ * initial fields! (This would be a lot cleaner in C++.)
++ */
++} opj_common_struct_t;
++
++typedef opj_common_struct_t * opj_common_ptr;
++
++/**
++Compression context info
++*/
++typedef struct opj_cinfo {
++ /** Fields shared with opj_dinfo_t */
++ opj_common_fields;
++ /* other specific fields go here */
++} opj_cinfo_t;
++
++/**
++Decompression context info
++*/
++typedef struct opj_dinfo {
++ /** Fields shared with opj_cinfo_t */
++ opj_common_fields;
++ /* other specific fields go here */
++} opj_dinfo_t;
++
++/*
++==========================================================
++ I/O stream typedef definitions
++==========================================================
++*/
++
++/*
++ * Stream open flags.
++ */
++/** The stream was opened for reading. */
++#define OPJ_STREAM_READ 0x0001
++/** The stream was opened for writing. */
++#define OPJ_STREAM_WRITE 0x0002
++
++/**
++Byte input-output stream (CIO)
++*/
++typedef struct opj_cio {
++ /** codec context */
++ opj_common_ptr cinfo;
++
++ /** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */
++ int openmode;
++ /** pointer to the start of the buffer */
++ unsigned char *buffer;
++ /** buffer size in bytes */
++ int length;
++
++ /** pointer to the start of the stream */
++ unsigned char *start;
++ /** pointer to the end of the stream */
++ unsigned char *end;
++ /** pointer to the current position */
++ unsigned char *bp;
++} opj_cio_t;
++
++/*
++==========================================================
++ image typedef definitions
++==========================================================
++*/
++
++/**
++Defines a single image component
++*/
++typedef struct opj_image_comp {
++ /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
++ int dx;
++ /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
++ int dy;
++ /** data width */
++ int w;
++ /** data height */
++ int h;
++ /** x component offset compared to the whole image */
++ int x0;
++ /** y component offset compared to the whole image */
++ int y0;
++ /** precision */
++ int prec;
++ /** image depth in bits */
++ int bpp;
++ /** signed (1) / unsigned (0) */
++ int sgnd;
++ /** number of decoded resolution */
++ int resno_decoded;
++ /** number of division by 2 of the out image compared to the original size of image */
++ int factor;
++ /** image component data */
++ int *data;
++} opj_image_comp_t;
++
++/**
++Defines image data and characteristics
++*/
++typedef struct opj_image {
++ /** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */
++ int x0;
++ /** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */
++ int y0;
++ /** Xsiz: width of the reference grid */
++ int x1;
++ /** Ysiz: height of the reference grid */
++ int y1;
++ /** number of components in the image */
++ int numcomps;
++ /** color space: sRGB, Greyscale or YUV */
++ OPJ_COLOR_SPACE color_space;
++ /** image components */
++ opj_image_comp_t *comps;
++} opj_image_t;
++
++/**
++Component parameters structure used by the opj_image_create function
++*/
++typedef struct opj_image_comptparm {
++ /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
++ int dx;
++ /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
++ int dy;
++ /** data width */
++ int w;
++ /** data height */
++ int h;
++ /** x component offset compared to the whole image */
++ int x0;
++ /** y component offset compared to the whole image */
++ int y0;
++ /** precision */
++ int prec;
++ /** image depth in bits */
++ int bpp;
++ /** signed (1) / unsigned (0) */
++ int sgnd;
++} opj_image_cmptparm_t;
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/*
++==========================================================
++ openjpeg version
++==========================================================
++*/
++
++OPJ_API const char * OPJ_CALLCONV opj_version();
++
++/*
++==========================================================
++ image functions definitions
++==========================================================
++*/
++
++/**
++Create an image
++@param numcmpts number of components
++@param cmptparms components parameters
++@param clrspc image color space
++@return returns a new image structure if successful, returns NULL otherwise
++*/
++OPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
++
++/**
++Deallocate any resources associated with an image
++@param image image to be destroyed
++*/
++OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image);
++
++/*
++==========================================================
++ stream functions definitions
++==========================================================
++*/
++
++/**
++Open and allocate a memory stream for read / write.
++On reading, the user must provide a buffer containing encoded data. The buffer will be
++wrapped by the returned CIO handle.
++On writing, buffer parameters must be set to 0: a buffer will be allocated by the library
++to contain encoded data.
++@param cinfo Codec context info
++@param buffer Reading: buffer address. Writing: NULL
++@param length Reading: buffer length. Writing: 0
++@return Returns a CIO handle if successful, returns NULL otherwise
++*/
++OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length);
++
++/**
++Close and free a CIO handle
++@param cio CIO handle to free
++*/
++OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio);
++
++/**
++Get position in byte stream
++@param cio CIO handle
++@return Returns the position in bytes
++*/
++OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio);
++/**
++Set position in byte stream
++@param cio CIO handle
++@param pos Position, in number of bytes, from the beginning of the stream
++*/
++OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos);
++
++/*
++==========================================================
++ event manager functions definitions
++==========================================================
++*/
++
++OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context);
++
++/*
++==========================================================
++ codec functions definitions
++==========================================================
++*/
++/**
++Creates a J2K/JPT/JP2 decompression structure
++@param format Decoder to select
++@return Returns a handle to a decompressor if successful, returns NULL otherwise
++*/
++OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format);
++/**
++Destroy a decompressor handle
++@param dinfo decompressor handle to destroy
++*/
++OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo);
++/**
++Set decoding parameters to default values
++@param parameters Decompression parameters
++*/
++OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters);
++/**
++Setup the decoder decoding parameters using user parameters.
++Decoding parameters are returned in j2k->cp.
++@param dinfo decompressor handle
++@param parameters decompression parameters
++*/
++OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters);
++/**
++Decode an image from a JPEG-2000 codestream
++@param dinfo decompressor handle
++@param cio Input buffer stream
++@return Returns a decoded image if successful, returns NULL otherwise
++*/
++OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio);
++/**
++Creates a J2K/JP2 compression structure
++@param format Coder to select
++@return Returns a handle to a compressor if successful, returns NULL otherwise
++*/
++OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format);
++/**
++Destroy a compressor handle
++@param cinfo compressor handle to destroy
++*/
++OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo);
++/**
++Set encoding parameters to default values, that means :
++<ul>
++<li>Lossless
++<li>1 tile
++<li>Size of precinct : 2^15 x 2^15 (means 1 precinct)
++<li>Size of code-block : 64 x 64
++<li>Number of resolutions: 6
++<li>No SOP marker in the codestream
++<li>No EPH marker in the codestream
++<li>No sub-sampling in x or y direction
++<li>No mode switch activated
++<li>Progression order: LRCP
++<li>No index file
++<li>No ROI upshifted
++<li>No offset of the origin of the image
++<li>No offset of the origin of the tiles
++<li>Reversible DWT 5-3
++</ul>
++@param parameters Compression parameters
++*/
++OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters);
++/**
++Setup the encoder parameters using the current image and using user parameters.
++@param cinfo compressor handle
++@param parameters compression parameters
++@param image input filled image
++*/
++OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image);
++/**
++Encode an image into a JPEG-2000 codestream
++@param cinfo compressor handle
++@param cio Output buffer stream
++@param image Image to encode
++@param index Name of the index file if required, NULL otherwise
++@return Returns true if successful, returns false otherwise
++*/
++OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* OPENJPEG_H */
diff --git a/media-libs/openjpeg/files/digest-openjpeg-1.1.1 b/media-libs/openjpeg/files/digest-openjpeg-1.1.1
new file mode 100644
index 0000000..c726c97
--- /dev/null
+++ b/media-libs/openjpeg/files/digest-openjpeg-1.1.1
@@ -0,0 +1,3 @@
+MD5 55ce1119efd3efb3d689ca2105afd10e openjpeg_v1_1_1.tar.gz 1406460
+RMD160 08b2318441075a8704d6b9b0ac3d9d277c44d85e openjpeg_v1_1_1.tar.gz 1406460
+SHA256 6076db131bfaa966a691d718044e5b5cdbec028436be3b7a3f146d1a0e3a7ec6 openjpeg_v1_1_1.tar.gz 1406460
diff --git a/media-libs/openjpeg/files/openjpeg-1.1.1-gentoo.patch b/media-libs/openjpeg/files/openjpeg-1.1.1-gentoo.patch
new file mode 100644
index 0000000..fdb0b9c
--- /dev/null
+++ b/media-libs/openjpeg/files/openjpeg-1.1.1-gentoo.patch
@@ -0,0 +1,20 @@
+diff -Naur OpenJPEG.orig/Makefile OpenJPEG/Makefile
+--- OpenJPEG.orig/Makefile 2007-02-13 17:49:00.000000000 +0900
++++ OpenJPEG/Makefile 2007-02-24 11:47:31.000000000 +0900
+@@ -36,7 +36,7 @@
+ dist: OpenJPEG
+ mkdir -p dist
+ cp *.a dist
+- mv *.so dist
++ cp *.so dist
+ cp libopenjpeg/openjpeg.h dist
+
+ dos2unix:
+@@ -57,7 +57,6 @@
+ install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR)
+ install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR)
+ ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(LIBNAME)
+- ldconfig
+
+ clean:
+ rm -rf core dist/ u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME)
diff --git a/media-libs/openjpeg/openjpeg-1.1.1.ebuild b/media-libs/openjpeg/openjpeg-1.1.1.ebuild
new file mode 100644
index 0000000..008ef72
--- /dev/null
+++ b/media-libs/openjpeg/openjpeg-1.1.1.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+inherit eutils flag-o-matic toolchain-funcs multilib
+
+DESCRIPTION="An open-source JPEG 2000 codec written in C"
+HOMEPAGE="http://www.openjpeg.org/"
+SRC_URI="http://www.openjpeg.org/openjpeg_v${PV//./_}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64 ~x86"
+IUSE=""
+
+S="${WORKDIR}/OpenJPEG"
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+ epatch "${FILESDIR}"/${P}-gentoo.patch
+ epatch "${FILESDIR}"/OPJ_limit_tags_for_decode_UPDATED.patch
+}
+
+src_compile() {
+ append-flags -fPIC
+ emake CC="$(tc-getCC)" COMPILERFLAGS="${CFLAGS}" || die "emake failed"
+}
+
+src_install() {
+ dodir /usr/$(get_libdir)
+ emake INSTALLDIR="${D}usr/$(get_libdir)" install || die "install failed"
+
+ insinto /usr/include
+ doins libopenjpeg/openjpeg.h
+
+ dodoc ChangeLog README.linux
+}