[libxml2] OS400: ILE RPG language header files.



commit e083c30e12d1a555e6dd5d4e5c0d2cb6934d2a0c
Author: Patrick Monnerat <pm datasphere ch>
Date:   Tue Mar 4 17:18:26 2014 +0100

    OS400: ILE RPG language header files.

 os400/libxmlrpg/DOCBparser.rpgle       |  116 +++
 os400/libxmlrpg/HTMLparser.rpgle       |  387 ++++++++
 os400/libxmlrpg/HTMLtree.rpgle         |  166 ++++
 os400/libxmlrpg/SAX.rpgle              |  207 ++++
 os400/libxmlrpg/SAX2.rpgle             |  248 +++++
 os400/libxmlrpg/c14n.rpgle             |  119 +++
 os400/libxmlrpg/catalog.rpgle          |  235 +++++
 os400/libxmlrpg/chvalid.rpgle          |   97 ++
 os400/libxmlrpg/debugXML.rpgle         |  241 +++++
 os400/libxmlrpg/dict.rpgle             |   78 ++
 os400/libxmlrpg/encoding.rpgle         |  274 ++++++
 os400/libxmlrpg/entities.rpgle         |  174 ++++
 os400/libxmlrpg/globals.rpgle          |  557 +++++++++++
 os400/libxmlrpg/hash.rpgle             |  231 +++++
 os400/libxmlrpg/list.rpgle             |  168 ++++
 os400/libxmlrpg/nanoftp.rpgle          |  156 +++
 os400/libxmlrpg/nanohttp.rpgle         |  103 ++
 os400/libxmlrpg/parser.rpgle           | 1407 ++++++++++++++++++++++++++
 os400/libxmlrpg/parserInternals.rpgle  |  575 +++++++++++
 os400/libxmlrpg/pattern.rpgle          |  117 +++
 os400/libxmlrpg/relaxng.rpgle          |  297 ++++++
 os400/libxmlrpg/schemasInternals.rpgle | 1137 +++++++++++++++++++++
 os400/libxmlrpg/schematron.rpgle       |  195 ++++
 os400/libxmlrpg/threads.rpgle          |   70 ++
 os400/libxmlrpg/transcode.rpgle        |   71 ++
 os400/libxmlrpg/tree.rpgle             | 1628 +++++++++++++++++++++++++++++++
 os400/libxmlrpg/uri.rpgle              |  100 ++
 os400/libxmlrpg/valid.rpgle            |  575 +++++++++++
 os400/libxmlrpg/xinclude.rpgle         |  147 +++
 os400/libxmlrpg/xlink.rpgle            |  164 ++++
 os400/libxmlrpg/xmlIO.rpgle            |  441 +++++++++
 os400/libxmlrpg/xmlautomata.rpgle      |  179 ++++
 os400/libxmlrpg/xmlerror.rpgle         | 1681 ++++++++++++++++++++++++++++++++
 os400/libxmlrpg/xmlexports.rpgle       |   15 +
 os400/libxmlrpg/xmlmemory.rpgle        |  239 +++++
 os400/libxmlrpg/xmlmodule.rpgle        |   51 +
 os400/libxmlrpg/xmlreader.rpgle        |  619 ++++++++++++
 os400/libxmlrpg/xmlregexp.rpgle        |  246 +++++
 os400/libxmlrpg/xmlsave.rpgle          |   96 ++
 os400/libxmlrpg/xmlschemas.rpgle       |  318 ++++++
 os400/libxmlrpg/xmlschemastypes.rpgle  |  235 +++++
 os400/libxmlrpg/xmlstdarg.rpgle        |   34 +
 os400/libxmlrpg/xmlstring.rpgle        |  162 +++
 os400/libxmlrpg/xmlunicode.rpgle       |  668 +++++++++++++
 os400/libxmlrpg/xmlversion.rpgle.in    |  352 +++++++
 os400/libxmlrpg/xmlwriter.rpgle        |  725 ++++++++++++++
 os400/libxmlrpg/xpath.rpgle            |  631 ++++++++++++
 os400/libxmlrpg/xpathInternals.rpgle   |  672 +++++++++++++
 os400/libxmlrpg/xpointer.rpgle         |  157 +++
 49 files changed, 17561 insertions(+), 0 deletions(-)
---
diff --git a/os400/libxmlrpg/DOCBparser.rpgle b/os400/libxmlrpg/DOCBparser.rpgle
new file mode 100644
index 0000000..bf5aaa2
--- /dev/null
+++ b/os400/libxmlrpg/DOCBparser.rpgle
@@ -0,0 +1,116 @@
+      * Summary: old DocBook SGML parser
+      * Description: interface for a DocBook SGML non-verifying parser
+      * This code is DEPRECATED, and should not be used anymore.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(DOCB_PARSER_H__)
+      /define DOCB_PARSER_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_DOCB_ENABLED)
+
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/parserInternals"
+
+      * Most of the back-end structures from XML and SGML are shared.
+
+     d docbParserCtxtPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserCtxtPtr)
+
+     d docbParserCtxt  ds                  based(docbParserCtxtPtr)
+     d                                     likeds(xmlParserCtxt)
+
+     d docbSAXHandlerPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlSAXHandlerPtr)
+
+     d docbSAXHandler  ds                  based(docbSAXHandlerPtr)
+     d                                     likeds(xmlSAXHandler)
+
+     d docbParserInputPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserInputPtr)
+
+     d docbParserInput...
+     d                 ds                  based(docbParserInputPtr)
+     d                                     likeds(xmlParserInput)
+
+     d docbDocPtr      s                   based(######typedef######)
+     d                                     like(xmlDocPtr)
+
+      * There is only few public functions.
+
+     d docbEncodeEntities...
+     d                 pr            10i 0 extproc('docbEncodeEntities')
+     d  out                            *   value options(*string)               unsigned char *
+     d  outlen                         *   value                                int *
+     d  in                             *   value options(*string)               const unsigned char
+     d                                                                          *
+     d  inlen                          *   value                                int *
+     d  quoteChar                    10i 0 value
+
+     d docbSAXParseDoc...
+     d                 pr                  extproc('docbSAXParseDoc')
+     d                                     like(docbDocPtr)
+     d  cur                            *   value options(*string)               xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+     d  sax                                value like(docbSAXHandlerPtr)
+     d  userData                       *   value                                void *
+
+     d docbParseDoc    pr                  extproc('docbParseDoc')
+     d                                     like(docbDocPtr)
+     d  cur                            *   value options(*string)               xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+
+     d docbSAXParseFile...
+     d                 pr                  extproc('docbSAXParseFile')
+     d                                     like(docbDocPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  sax                                value like(docbSAXHandlerPtr)
+     d  userData                       *   value                                void *
+
+     d docbParseFile   pr                  extproc('docbParseFile')
+     d                                     like(docbDocPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+
+      * Interfaces for the Push mode.
+
+     d docbFreeParserCtxt...
+     d                 pr                  extproc('docbFreeParserCtxt')
+     d  ctxt                               value like(docbParserCtxtPtr)
+
+     d docbCreatePushParserCtxt...
+     d                 pr                  extproc('docbCreatePushParserCtxt')
+     d                                     like(docbParserCtxtPtr)
+     d  sax                                value like(docbSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  filename                       *   value options(*string)               const char *
+     d  enc                                value like(xmlCharEncoding)
+
+     d docbParseChunk  pr            10i 0 extproc('docbParseChunk')
+     d  ctxt                               value like(docbParserCtxtPtr)
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  terminate                    10i 0 value
+
+     d docbCreateFileParserCtxt...
+     d                 pr                  extproc('docbCreateFileParserCtxt')
+     d                                     like(docbParserCtxtPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+
+     d docbParseDocument...
+     d                 pr            10i 0 extproc('docbParseDocument')
+     d  ctxt                               value like(docbParserCtxtPtr)
+
+      /endif                                                                    LIBXML_DOCB_ENABLED
+      /endif                                                                    DOCB_PARSER_H__
diff --git a/os400/libxmlrpg/HTMLparser.rpgle b/os400/libxmlrpg/HTMLparser.rpgle
new file mode 100644
index 0000000..6290b33
--- /dev/null
+++ b/os400/libxmlrpg/HTMLparser.rpgle
@@ -0,0 +1,387 @@
+      * Summary: interface for an HTML 4.0 non-verifying parser
+      * Description: this module implements an HTML 4.0 non-verifying parser
+      *              with API compatible with the XML parser ones. It should
+      *              be able to parse "real world" HTML, even if severely
+      *              broken from a specification point of view.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(HTML_PARSER_H__)
+      /define HTML_PARSER_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+
+      /if defined(LIBXML_HTML_ENABLED)
+
+      * Most of the back-end structures from XML and HTML are shared.
+
+     d htmlParserCtxtPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserCtxtPtr)
+
+     d htmlParserCtxt  ds                  based(htmlParserCtxtPtr)
+     d                                     likeds(xmlParserCtxt)
+
+     d htmlParserNodeInfoPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserNodeInfoPtr)
+
+     d htmlParserNodeInfo...
+     d                 ds                  based(htmlParserNodeInfoPtr)
+     d                                     likeds(xmlParserNodeInfo)
+
+     d htmlSAXHandlerPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlSAXHandlerPtr)
+
+     d htmlSAXHandler  ds                  based(htmlSAXHandlerPtr)
+     d                                     likeds(xmlSAXHandler)
+
+     d htmlParserInputPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserInputPtr)
+
+     d htmlParserInput...
+     d                 ds                  based(htmlParserInputPtr)
+     d                                     likeds(xmlParserInput)
+
+     d htmlDocPtr      s                   based(######typedef######)
+     d                                     like(xmlDocPtr)
+
+     d htmlNodePtr     s                   based(######typedef######)
+     d                                     like(xmlNodePtr)
+
+      * Internal description of an HTML element, representing HTML 4.01
+      * and XHTML 1.0 (which share the same structure).
+
+     d htmlElemDescPtr...
+     d                 s               *   based(######typedef######)
+
+     d htmlElemDesc    ds                  based(htmlElemDescPtr)
+     d                                     align qualified
+     d  name                           *                                        const char *
+     d  startTag                      3u 0                                      Start tag implied ?
+     d  endTag                        3u 0                                      End tag implied ?
+     d  saveEndTag                    3u 0                                      Save end tag ?
+     d  empty                         3u 0                                      Empty element ?
+     d  depr                          3u 0                                      Deprecated element ?
+     d  dtd                           3u 0                                      Loose DTD/Frameset
+     d  isinline                      3u 0                                      Block 0/inline elem?
+     d  desc                           *                                        const char *
+      *
+      * New fields encapsulating HTML structure
+      *
+      * Bugs:
+      *      This is a very limited representation.  It fails to tell us when
+      *      an element *requires* subelements (we only have whether they're
+      *      allowed or not), and it doesn't tell us where CDATA and PCDATA
+      *      are allowed.  Some element relationships are not fully represented:
+      *      these are flagged with the word MODIFIER
+      *
+     d  subelts                        *                                        const char * *
+     d  defaultsubelt                  *                                        const char *
+     d  attrs_opt                      *                                        const char * *
+     d  attrs_depr                     *                                        const char * *
+     d  attrs_req                      *                                        const char * *
+
+      * Internal description of an HTML entity.
+
+     d htmlEntityDescPtr...
+     d                 s               *   based(######typedef######)
+
+     d htmlEntityDesc...
+     d                 ds                  based(htmlEntityDescPtr)
+     d                                     align qualified
+     d  value                        10u 0                                      Unicode char value
+     d  name                           *                                        const char *
+     d  desc                           *                                        const char *
+
+      * There is only few public functions.
+
+     d htmlTagLookup   pr                  extproc('htmlTagLookup')
+     d                                     like(htmlElemDescPtr)                const
+     d  tag                            *   value options(*string)               const xmlChar *
+
+     d htmlEntityLookup...
+     d                 pr                  extproc('htmlEntityLookup')
+     d                                     like(htmlEntityDescPtr)              const
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d htmlEntityValueLookup...
+     d                 pr                  extproc('htmlEntityValueLookup')
+     d                                     like(htmlEntityDescPtr)              const
+     d  value                        10u 0 value
+
+     d htmlIsAutoClosed...
+     d                 pr            10i 0 extproc('htmlIsAutoClosed')
+     d  doc                                value like(htmlDocPtr)
+     d  elem                               value like(htmlNodePtr)
+
+     d htmlAutoCloseTag...
+     d                 pr            10i 0 extproc('htmlAutoCloseTag')
+     d  doc                                value like(htmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  elem                               value like(htmlNodePtr)
+
+     d htmlParseEntityRef...
+     d                 pr                  extproc('htmlParseEntityRef')
+     d                                     like(htmlEntityDescPtr)              const
+     d  ctxt                               value like(htmlParserCtxtPtr)
+     d  str                            *                                        const xmlChar *(*)
+
+     d htmlParseCharRef...
+     d                 pr            10i 0 extproc('htmlParseCharRef')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+
+     d htmlParseElement...
+     d                 pr                  extproc('htmlParseElement')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+
+     d htmlNewParserCtxt...
+     d                 pr                  extproc('htmlNewParserCtxt')
+     d                                     like(htmlParserCtxtPtr)
+
+     d htmlCreateMemoryParserCtxt...
+     d                 pr                  extproc('htmlCreateMemoryParserCtxt')
+     d                                     like(htmlParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d htmlParseDocument...
+     d                 pr            10i 0 extproc('htmlParseDocument')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+
+     d htmlSAXParseDoc...
+     d                 pr                  extproc('htmlSAXParseDoc')
+     d                                     like(htmlDocPtr)
+     d  cur                            *   value options(*string)               xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+     d  sax                                value like(htmlSAXHandlerPtr)
+     d  userData                       *   value                                void *
+
+     d htmlParseDoc    pr                  extproc('htmlParseDoc')
+     d                                     like(htmlDocPtr)
+     d  cur                            *   value options(*string)               xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+
+     d htmlSAXParseFile...
+     d                 pr                  extproc('htmlSAXParseFile')
+     d                                     like(htmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  sax                                value like(htmlSAXHandlerPtr)
+     d  userData                       *   value                                void *
+
+     d htmlParseFile   pr                  extproc('htmlParseFile')
+     d                                     like(htmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+
+     d UTF8ToHtml      pr            10i 0 extproc('UTF8ToHtml')
+     d  out                       65535    options(*varsize)                    unsigned char []
+     d  outlen                       10i 0
+     d  in                             *   value options(*string)               const unsigned char*
+     d  inlen                        10i 0
+
+     d htmlEncodeEntities...
+     d                 pr            10i 0 extproc('htmlEncodeEntities')
+     d  out                       65535    options(*varsize)                    unsigned char []
+     d  outlen                       10i 0
+     d  in                             *   value options(*string)               const unsigned char*
+     d  inlen                        10i 0
+     d  quoteChar                    10i 0 value
+
+     d htmlIsScriptAttribute...
+     d                 pr            10i 0 extproc('htmlIsScriptAttribute')
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d htmlHandleOmittedElem...
+     d                 pr            10i 0 extproc('htmlHandleOmittedElem')
+     d  val                          10i 0 value
+
+      /if defined(LIBXML_PUSH_ENABLED)
+
+      * Interfaces for the Push mode.
+
+     d htmlCreatePushParserCtxt...
+     d                 pr                  extproc('htmlCreatePushParserCtxt')
+     d                                     like(htmlParserCtxtPtr)
+     d  sax                                value like(htmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  filename                       *   value options(*string)               const char *
+     d  enc                                value like(xmlCharEncoding)
+
+     d htmlParseChunk  pr            10i 0 extproc('htmlParseChunk')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  terminate                    10i 0 value
+      /endif                                                                    LIBXML_PUSH_ENABLED
+
+     d htmlFreeParserCtxt...
+     d                 pr                  extproc('htmlFreeParserCtxt')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+
+      * New set of simpler/more flexible APIs
+
+      * xmlParserOption:
+      *
+      * This is the set of XML parser options that can be passed down
+      * to the xmlReadDoc() and similar calls.
+
+     d htmlParserOption...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  HTML_PARSE_RECOVER...                                                   Relaxed parsing
+     d                 c                   X'00000001'
+     d  HTML_PARSE_NODEFDTD...                                                  No default doctype
+     d                 c                   X'00000004'
+     d  HTML_PARSE_NOERROR...                                                   No error reports
+     d                 c                   X'00000020'
+     d  HTML_PARSE_NOWARNING...                                                 No warning reports
+     d                 c                   X'00000040'
+     d  HTML_PARSE_PEDANTIC...                                                  Pedantic err reports
+     d                 c                   X'00000080'
+     d  HTML_PARSE_NOBLANKS...                                                  Remove blank nodes
+     d                 c                   X'00000100'
+     d  HTML_PARSE_NONET...                                                     Forbid net access
+     d                 c                   X'00000800'
+     d  HTML_PARSE_NOIMPLIED...                                                 No implied html/body
+     d                 c                   X'00002000'
+     d  HTML_PARSE_COMPACT...                                                   compact small txtnod
+     d                 c                   X'00010000'
+     d  HTML_PARSE_IGNORE_ENC...                                                Ignore encoding hint
+     d                 c                   X'00200000'
+
+     d htmlCtxtReset   pr                  extproc('htmlCtxtReset')
+     d ctxt                                value like(htmlParserCtxtPtr)
+
+     d htmlCtxtUseOptions...
+     d                 pr            10i 0 extproc('htmlCtxtUseOptions')
+     d ctxt                                value like(htmlParserCtxtPtr)
+     d options                       10i 0 value
+
+     d htmlReadDoc     pr                  extproc('htmlReadDoc')
+     d                                     like(htmlDocPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlReadFile    pr                  extproc('htmlReadFile')
+     d                                     like(htmlDocPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlReadMemory  pr                  extproc('htmlReadMemory')
+     d                                     like(htmlDocPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlReadFd      pr                  extproc('htmlReadFd')
+     d                                     like(htmlDocPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlReadIO      pr                  extproc('htmlReadIO')
+     d                                     like(htmlDocPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadDoc...
+     d                 pr                  extproc('htmlCtxtReadDoc')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadFile...
+     d                 pr                  extproc('htmlCtxtReadFile')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadMemory...
+     d                 pr                  extproc('htmlCtxtReadMemory')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadFd  pr                  extproc('htmlCtxtReadFd')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadIO  pr                  extproc('htmlCtxtReadIO')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+      * Further knowledge of HTML structure
+
+     d htmlStatus      s             10i 0 based(######typedef######)           enum
+     d  HTML_NA        c                   X'0000'                              No check at all
+     d  HTML_INVALID   c                   X'0001'
+     d  HTML_DEPRECATED...
+     d                 c                   X'0002'
+     d  HTML_VALID     c                   X'0004'
+     d  HTML_REQUIRED  c                   X'000C'                              HTML_VALID ored-in
+
+      * Using htmlElemDesc rather than name here, to emphasise the fact
+      *  that otherwise there's a lookup overhead
+
+     d htmlAttrAllowed...
+     d                 pr                  extproc('htmlAttrAllowed')
+     d                                     like(htmlStatus)
+     d  #param1                            value like(htmlElemDescPtr)          const
+     d  #param2                        *   value options(*string)               const xmlChar *
+     d  #param3                      10i 0 value
+
+     d htmlElementAllowedHere...
+     d                 pr            10i 0 extproc('htmlElementAllowedHere')
+     d  #param1                            value like(htmlElemDescPtr)          const
+     d  #param2                        *   value options(*string)               const xmlChar *
+
+     d htmlElementStatusHere...
+     d                 pr                  extproc('htmlElementStatusHere')
+     d                                     like(htmlStatus)
+     d  #param1                            value like(htmlElemDescPtr)          const
+     d  #param2                            value like(htmlElemDescPtr)          const
+
+     d htmlNodeStatus  pr                  extproc('htmlNodeStatus')
+     d                                     like(htmlStatus)
+     d  #param1                            value like(htmlNodePtr)
+     d  #param2                      10i 0 value
+
+      /endif                                                                    LIBXML_HTML_ENABLED
+      /endif                                                                    HTML_PARSER_H__
diff --git a/os400/libxmlrpg/HTMLtree.rpgle b/os400/libxmlrpg/HTMLtree.rpgle
new file mode 100644
index 0000000..82a11ca
--- /dev/null
+++ b/os400/libxmlrpg/HTMLtree.rpgle
@@ -0,0 +1,166 @@
+      * Summary: specific APIs to process HTML tree, especially serialization
+      * Description: this module implements a few function needed to process
+      *              tree in an HTML specific way.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(HTML_TREE_H__)
+      /define HTML_TREE_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/HTMLparser"
+
+      /if defined(LIBXML_HTML_ENABLED)
+
+      * HTML_TEXT_NODE:
+      *
+      * Macro. A text node in a HTML document is really implemented
+      * the same way as a text node in an XML document.
+
+     d HTML_TEXT_NODE  c                   3
+
+      * HTML_ENTITY_REF_NODE:
+      *
+      * Macro. An entity reference in a HTML document is really implemented
+      * the same way as an entity reference in an XML document.
+
+     d HTML_ENTITY_REF_NODE...
+     d                 c                   5
+
+      * HTML_COMMENT_NODE:
+      *
+      * Macro. A comment in a HTML document is really implemented
+      * the same way as a comment in an XML document.
+
+     d HTML_COMMENT_NODE...
+     d                 c                   8
+
+      * HTML_PRESERVE_NODE:
+      *
+      * Macro. A preserved node in a HTML document is really implemented
+      * the same way as a CDATA section in an XML document.
+
+     d HTML_PRESERVE_NODE...
+     d                 c                   4
+
+      * HTML_PI_NODE:
+      *
+      * Macro. A processing instruction in a HTML document is really implemented
+      * the same way as a processing instruction in an XML document.
+
+     d HTML_PI_NODE    c                   7
+
+     d htmlNewDoc      pr                  extproc('htmlNewDoc')
+     d                                     like(htmlDocPtr)
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+
+     d htmlNewDocNoDtD...
+     d                 pr                  extproc('htmlNewDocNoDtD')
+     d                                     like(htmlDocPtr)
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+
+     d htmlGetMetaEncoding...
+     d                 pr              *   extproc('htmlGetMetaEncoding')       const xmlChar *
+     d  doc                                value like(htmlDocPtr)
+
+     d htmlSetMetaEncoding...
+     d                 pr            10i 0 extproc('htmlSetMetaEncoding')
+     d  doc                                value like(htmlDocPtr)
+     d  encoding                       *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d htmlDocDumpMemory...
+     d                 pr                  extproc('htmlDocDumpMemory')
+     d  cur                                value like(xmlDocPtr)
+     d  mem                            *   value                                xmlChar * *
+     d  size                         10i 0
+
+     d htmlDocDumpMemoryFormat...
+     d                 pr                  extproc('htmlDocDumpMemoryFormat')
+     d  cur                                value like(xmlDocPtr)
+     d  mem                            *   value                                xmlChar * *
+     d  size                         10i 0
+     d  format                       10i 0 value
+
+     d htmlDocDump     pr            10i 0 extproc('htmlDocDump')
+     d  f                              *   value                                FILE *
+     d  cur                                value like(xmlDocPtr)
+
+     d htmlSaveFile    pr            10i 0 extproc('htmlSaveFile')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+
+     d htmlNodeDump    pr            10i 0 extproc('htmlNodeDump')
+     d  buf                                value like(xmlBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d htmlNodeDumpFile...
+     d                 pr                  extproc('htmlNodeDumpFile')
+     d  out                            *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d htmlNodeDumpFileFormat...
+     d                 pr            10i 0 extproc('htmlNodeDumpFileFormat')
+     d  out                            *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d htmlSaveFileEnc...
+     d                 pr            10i 0 extproc('htmlSaveFileEnc')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+
+     d htmlSaveFileFormat...
+     d                 pr            10i 0 extproc('htmlSaveFileFormat')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d htmlNodeDumpFormatOutput...
+     d                 pr                  extproc('htmlNodeDumpFormatOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d htmlDocContentDumpOutput...
+     d                 pr                  extproc('htmlDocContentDumpOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+
+     d htmlDocContentDumpFormatOutput...
+     d                 pr                  extproc(
+     d                                     'htmlDocContentDumpFormatOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d htmlNodeDumpOutput...
+     d                 pr                  extproc('htmlNodeDumpOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  encoding                       *   value options(*string)               const char *
+
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d htmlIsBooleanAttr...
+     d                 pr            10i 0 extproc('htmlIsBooleanAttr')
+     d  name                           *   value options(*string)               const xmlChar *
+
+      /endif                                                                    LIBXML_HTML_ENABLED
+      /endif                                                                    HTML_TREE_H__
diff --git a/os400/libxmlrpg/SAX.rpgle b/os400/libxmlrpg/SAX.rpgle
new file mode 100644
index 0000000..18f851d
--- /dev/null
+++ b/os400/libxmlrpg/SAX.rpgle
@@ -0,0 +1,207 @@
+      * Summary: Old SAX version 1 handler, deprecated
+      * Description: DEPRECATED set of SAX version 1 interfaces used to
+      *              build the DOM tree.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SAX_H__)
+      /define XML_SAX_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/xlink"
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+
+     d getPublicId     pr              *   extproc('getPublicId')               const xmlChar *
+     d  ctx                            *   value                                void *
+
+     d getSystemId     pr              *   extproc('getSystemId')               const xmlChar *
+     d  ctx                            *   value                                void *
+
+     d setDocumentLocator...
+     d                 pr                  extproc('setDocumentLocator')
+     d  ctx                            *   value                                void *
+     d  loc                                value like(xmlSAXLocatorPtr)
+
+     d getLineNumber   pr            10i 0 extproc('getLineNumber')
+     d  ctx                            *   value                                void *
+
+     d getColumnNumber...
+     d                 pr            10i 0 extproc('getColumnNumber')
+     d  ctx                            *   value                                void *
+
+     d isStandalone    pr            10i 0 extproc('isStandalone')
+     d  ctx                            *   value                                void *
+
+     d hasInternalSubset...
+     d                 pr            10i 0 extproc('hasInternalSubset')
+     d  ctx                            *   value                                void *
+
+     d hasExternalSubset...
+     d                 pr            10i 0 extproc('hasExternalSubset')
+     d  ctx                            *   value                                void *
+
+     d internalSubset  pr                  extproc('internalSubset')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d externalSubset  pr                  extproc('externalSubset')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d getEntity       pr                  extproc('getEntity')
+     d                                     like(xmlEntityPtr)
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d getParameterEntity...
+     d                 pr                  extproc('getParameterEntity')
+     d                                     like(xmlEntityPtr)
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d resolveEntity   pr                  extproc('resolveEntity')
+     d                                     like(xmlParserInputPtr)
+     d  ctx                            *   value                                void *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+
+     d entityDecl      pr                  extproc('entityDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               xmlChar *
+
+     d attributeDecl   pr                  extproc('attributeDecl')
+     d  ctx                            *   value                                void *
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  def                          10i 0 value
+     d  defaultValue                   *   value options(*string)               const xmlChar *
+     d  tree                               value like(xmlEnumerationPtr)
+
+     d elementDecl     pr                  extproc('elementDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  content                            value like(xmlElementContentPtr)
+
+     d notationDecl    pr                  extproc('notationDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+
+     d unparsedEntityDecl...
+     d                 pr                  extproc('unparsedEntityDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+     d  notationName                   *   value options(*string)               const xmlChar *
+
+     d startDocument   pr                  extproc('startDocument')
+     d  ctx                            *   value                                void *
+
+     d endDocument     pr                  extproc('endDocument')
+     d  ctx                            *   value                                void *
+
+     d attribute       pr                  extproc('attribute')
+     d  ctx                            *   value                                void *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d startElement    pr                  extproc('startElement')
+     d  ctx                            *   value                                void *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  atts                           *                                        const xmlChar *(*)
+
+     d endElement      pr                  extproc('endElement')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d reference       pr                  extproc('reference')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d characters      pr                  extproc('characters')
+     d  ctx                            *   value                                void *
+     d  ch                             *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d ignorableWhitespace...
+     d                 pr                  extproc('ignorableWhitespace')
+     d  ctx                            *   value                                void *
+     d  ch                             *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d processingInstruction...
+     d                 pr                  extproc('processingInstruction')
+     d  ctx                            *   value                                void *
+     d  target                         *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               const xmlChar *
+
+     d globalNamespace...
+     d                 pr                  extproc('globalNamespace')
+     d  ctx                            *   value                                void *
+     d  href                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d setNamespace    pr                  extproc('setNamespace')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d getNamespace    pr                  extproc('getNamespace')
+     d                                     like(xmlNsPtr)
+     d  ctx                            *   value                                void *
+
+     d checkNamespace  pr            10i 0 extproc('checkNamespace')
+     d  ctx                            *   value                                void *
+     d  nameSpace                      *   value options(*string)               xmlChar *
+
+     d namespaceDecl   pr                  extproc('namespaceDecl')
+     d  ctx                            *   value                                void *
+     d  href                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d comment         pr                  extproc('comment')
+     d  ctx                            *   value                                void *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d cdataBlock      pr                  extproc('cdataBlock')
+     d  ctx                            *   value                                void *
+     d  value                          *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d initxmlDefaultSAXHandler...
+     d                 pr                  extproc('initxmlDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandlerV1)
+     d  warning                      10i 0 value
+
+      /if defined(LIBXML_HTML_ENABLED)
+     d inithtmlDefaultSAXHandler...
+     d                 pr                  extproc('inithtmlDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandlerV1)
+      /endif
+
+      /if defined(LIBXML_DOCB_ENABLED)
+     d initdocbDefaultSAXHandler...
+     d                 pr                  extproc('initdocbDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandlerV1)
+      /endif
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+      /endif                                                                    XML_SAX_H__
diff --git a/os400/libxmlrpg/SAX2.rpgle b/os400/libxmlrpg/SAX2.rpgle
new file mode 100644
index 0000000..c9ab9d1
--- /dev/null
+++ b/os400/libxmlrpg/SAX2.rpgle
@@ -0,0 +1,248 @@
+      * Summary: SAX2 parser interface used to build the DOM tree
+      * Description: those are the default SAX2 interfaces used by
+      *              the library when building DOM tree.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SAX2_H__)
+      /define XML_SAX2_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/xlink"
+
+     d xmlSAX2GetPublicId...
+     d                 pr              *   extproc('xmlSAX2getPublicId')        const xmlChar *
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2GetSystemId...
+     d                 pr              *   extproc('xmlSAX2getSystemId')        const xmlChar *
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2SetDocumentLocator...
+     d                 pr                  extproc('xmlSAX2SetDocumentLocator')
+     d  ctx                            *   value                                void *
+     d  loc                                value like(xmlSAXLocatorPtr)
+
+     d xmlSAX2GetLineNumber...
+     d                 pr            10i 0 extproc('xmlSAX2GetLineNumber')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2GetColumnNumber...
+     d                 pr            10i 0 extproc('xmlSAX2GetColumnNumber')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2IsStandalone...
+     d                 pr            10i 0 extproc('xmlSAX2IsStandalone')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2HasInternalSubset...
+     d                 pr            10i 0 extproc('xmlSAX2HasInternalSubset')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2HasExternalSubset...
+     d                 pr            10i 0 extproc('xmlSAX2HasExternalSubset')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2InternalSubset...
+     d                 pr                  extproc('xmlSAX2InternalSubset')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d xmlSAX2ExternalSubset...
+     d                 pr                  extproc('xmlSAX2ExternalSubset')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d xmlSAX2GetEntity...
+     d                 pr                  extproc('xmlSAX2GetEntity')
+     d                                     like(xmlEntityPtr)
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlSAX2GetParameterEntity...
+     d                 pr                  extproc('xmlSAX2GetParameterEntity')
+     d                                     like(xmlEntityPtr)
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlSAX2ResolveEntity...
+     d                 pr                  extproc('xmlSAX2ResolveEntity')
+     d                                     like(xmlParserInputPtr)
+     d  ctx                            *   value                                void *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+
+     d xmlSAX2EntityDecl...
+     d                 pr                  extproc('xmlSAX2EntityDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               xmlChar *
+
+     d xmlSAX2AttributeDecl...
+     d                 pr                  extproc('xmlSAX2AttributeDecl')
+     d  ctx                            *   value                                void *
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  def                          10i 0 value
+     d  defaultValue                   *   value options(*string)               const xmlChar *
+     d  tree                               value like(xmlEnumerationPtr)
+
+     d xmlSAX2ElementDecl...
+     d                 pr                  extproc('xmlSAX2ElementDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  content                            value like(xmlElementContentPtr)
+
+     d xmlSAX2NotationDecl...
+     d                 pr                  extproc('xmlSAX2NotationDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+
+     d xmlSAX2UnparsedEntityDecl...
+     d                 pr                  extproc('xmlSAX2UnparsedEntityDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+     d  notationName                   *   value options(*string)               xmlChar *
+
+     d xmlSAX2StartDocument...
+     d                 pr                  extproc('xmlSAX2StartDocument')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2EndDocument...
+     d                 pr                  extproc('xmlSAX2EndDocument')
+     d  ctx                            *   value                                void *
+
+      /undefine XML_TESTVAL
+      /if defined(LIBXML_SAX1_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_WRITER_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_DOCB_ENABLED)
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlSAX2StartElement...
+     d                 pr                  extproc('xmlSAX2StartElement')
+     d  ctx                            *   value                                void *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  atts                           *                                        const xmlChar *(*)
+
+     d xmlSAX2EndElement...
+     d                 pr                  extproc('xmlSAX2EndElement')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlSAX2StartElementNs...
+     d                 pr                  extproc('xmlSAX2StartElementNs')
+     d  ctx                            *   value                                void *
+     d  localname                      *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  nb_namespaces                10i 0 value
+     d  namespaces                     *   value                                const xmlChar *(*)
+     d  nb_attributes                10i 0 value
+     d  nb_defaulted                 10i 0 value
+     d  attributes                     *                                        const xmlChar *(*)
+
+     d xmlSAX2EndElementNs...
+     d                 pr                  extproc('xmlSAX2EndElementNs')
+     d  ctx                            *   value                                void *
+     d  localname                      *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+
+     d xmlSAX2Reference...
+     d                 pr                  extproc('xmlSAX2Reference')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlSAX2Characters...
+     d                 pr                  extproc('xmlSAX2Characters')
+     d  ctx                            *   value                                void *
+     d  ch                             *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlSAX2IgnorableWhitespace...
+     d                 pr                  extproc('xmlSAX2IgnorableWhitespace')
+     d  ctx                            *   value                                void *
+     d  ch                             *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlSAX2ProcessingInstruction...
+     d                 pr                  extproc(
+     d                                      'xmlSAX2ProcessingInstruction')
+     d  ctx                            *   value                                void *
+     d  target                         *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               const xmlChar *
+
+     d xmlSAX2Comment...
+     d                 pr                  extproc('xmlSAX2Comment')
+     d  ctx                            *   value                                void *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSAX2CDataBlock...
+     d                 pr                  extproc('xmlSAX2CDataBlock')
+     d  ctx                            *   value                                void *
+     d  value                          *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlSAXDefaultVersion...
+     d                 pr            10i 0 extproc('xmlSAXDefaultVersion')
+     d  version                      10i 0 value
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlSAXVersion   pr            10i 0 extproc('xmlSAXVersion')
+     d  hdlr                               like(xmlSAXHandler)
+     d  version                      10i 0 value
+
+     d xmlSAX2InitDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                      'xmlSAX2InitDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandler)
+     d  warning                      10i 0 value
+
+      /if defined(LIBXML_HTML_ENABLED)
+     d xmlSAX2InitHtmlDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                      'xmlSAX2InitHtmlDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandler)
+
+     d htmlDefaultSAXHandlerInit...
+     d                 pr                  extproc('htmlDefaultSAXHandlerInit')
+      /endif
+
+      /if defined(LIBXML_DOCB_ENABLED)
+     d xmlSAX2InitDocbDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                      'xmlSAX2InitDocbDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandler)
+
+     d docbDefaultSAXHandlerInit...
+     d                 pr                  extproc('docbDefaultSAXHandlerInit')
+      /endif
+
+     d xmlDefaultSAXHandlerInit...
+     d                 pr                  extproc('xmlDefaultSAXHandlerInit')
+
+      /endif                                                                    XML_SAX2_H__
diff --git a/os400/libxmlrpg/c14n.rpgle b/os400/libxmlrpg/c14n.rpgle
new file mode 100644
index 0000000..b64efb2
--- /dev/null
+++ b/os400/libxmlrpg/c14n.rpgle
@@ -0,0 +1,119 @@
+      * Summary: Provide Canonical XML and Exclusive XML Canonicalization
+      * Description: the c14n modules provides a
+      *
+      * "Canonical XML" implementation
+      * http://www.w3.org/TR/xml-c14n
+      *
+      * and an
+      *
+      * "Exclusive XML Canonicalization" implementation
+      * http://www.w3.org/TR/xml-exc-c14n
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_C14N_H__)
+      /define XML_C14N_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_C14N_ENABLED)
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/xpath"
+
+      * XML Canonicazation
+      * http://www.w3.org/TR/xml-c14n
+      *
+      * Exclusive XML Canonicazation
+      * http://www.w3.org/TR/xml-exc-c14n
+      *
+      * Canonical form of an XML document could be created if and only if
+      *  a) default attributes (if any) are added to all nodes
+      *  b) all character and parsed entity references are resolved
+      * In order to achive this in libxml2 the document MUST be loaded with
+      * following global setings:
+      *
+      *    xmlLoadExtDtdDefaultValue = XML_DETECT_IDS � XML_COMPLETE_ATTRS;
+      *    xmlSubstituteEntitiesDefault(1);
+      *
+      * or corresponding parser context setting:
+      *    xmlParserCtxtPtr ctxt;
+      *
+      *    ...
+      *    ctxt->loadsubset = XML_DETECT_IDS � XML_COMPLETE_ATTRS;
+      *    ctxt->replaceEntities = 1;
+      *    ...
+
+      * xmlC14NMode:
+      *
+      * Predefined values for C14N modes
+
+     d xmlBufferAllocationScheme...
+     d xmlC14NMode     s             10i 0 based(######typedef######)           enum
+     d  XML_C14N_1_0   c                   0                                    Original C14N 1.0
+     d  XML_C14N_EXCLUSIVE_1_0...                                               Exclusive C14N 1.0
+     d                 c                   1
+     d  XML_C14N_1_1   c                   2                                    C14N 1.1 spec
+
+     d xmlC14NDocSaveTo...
+     d                 pr            10i 0 extproc('xmlC14NDocSaveTo')
+     d  doc                                value like(xmlDocPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  mode                         10i 0 value
+     d  inclusive_ns_prefixes...
+     d                                 *                                        xmlChar *(*)
+     d  with_comments                10i 0 value
+     d  buf                                value like(xmlOutputBufferPtr)
+
+     d xmlC14NDocDumpMemory...
+     d                 pr            10i 0 extproc('xmlC14NDocDumpMemory')
+     d  doc                                value like(xmlDocPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  mode                         10i 0 value
+     d  inclusive_ns_prefixes...
+     d                                 *                                        xmlChar *(*)
+     d  with_comments                10i 0 value
+     d  doc_txt_ptr                    *                                        xmlChar *(*)
+
+     d xmlC14NDocSave  pr            10i 0 extproc('xmlC14NDocSave')
+     d  doc                                value like(xmlDocPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  mode                         10i 0 value
+     d  inclusive_ns_prefixes...
+     d                                 *                                        xmlChar *(*)
+     d  with_comments                10i 0 value
+     d  filename                       *   value options(*string)               const char *
+     d  compression                  10i 0 value
+
+      * This is the core C14N function
+
+      * xmlC14NIsVisibleCallback:
+      * @user_data: user data
+      * @node: the curent node
+      * @parent: the parent node
+      *
+      * Signature for a C14N callback on visible nodes
+      *
+      * Returns 1 if the node should be included
+
+     d xmlC14NIsVisibleCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlC14NExecute  pr            10i 0 extproc('xmlC14NExecute')
+     d  doc                                value like(xmlDocPtr)
+     d  is_visible_callback...
+     d                                     value like(xmlC14NIsVisibleCallback)
+     d  user_data                      *   value                                void *
+     d  mode                         10i 0 value
+     d  inclusive_ns_prefixes...
+     d                                 *                                        xmlChar *(*)
+     d  with_comments                10i 0 value
+     d  buf                                value like(xmlOutputBufferPtr)
+
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+      /endif                                                                    LIBXML_C14N_ENABLED
+      /endif                                                                    XML_C14N_H__
diff --git a/os400/libxmlrpg/catalog.rpgle b/os400/libxmlrpg/catalog.rpgle
new file mode 100644
index 0000000..52baf4e
--- /dev/null
+++ b/os400/libxmlrpg/catalog.rpgle
@@ -0,0 +1,235 @@
+      * Summary: interfaces to the Catalog handling system
+      * Description: the catalog module implements the support for
+      * XML Catalogs and SGML catalogs
+      *
+      * SGML Open Technical Resolution TR9401:1997.
+      * http://www.jclark.com/sp/catalog.htm
+      *
+      * XML Catalogs Working Draft 06 August 2001
+      * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_CATALOG_H__)
+      /define XML_CATALOG_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlstring"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_CATALOG_ENABLED)
+
+      * XML_CATALOGS_NAMESPACE:
+      *
+      * The namespace for the XML Catalogs elements.
+
+     d XML_CATALOGS_NAMESPACE...
+     d                 c                   'urn:oasis:names:+
+     d                                      tc:entity:xmlns:xml:catalog'
+
+      * XML_CATALOG_PI:
+      *
+      * The specific XML Catalog Processing Instuction name.
+
+     d XML_CATALOG_PI  c                   'oasis-xml-catalog'
+
+      * The API is voluntarily limited to general cataloging.
+
+     d xmlCatalogPrefer...
+     d                 s             10u 0 based(######typedef######)           enum type
+     d XML_CATA_PREFER_NONE...
+     d                 c                   0
+     d XML_CATA_PREFER_PUBLIC...
+     d                 c                   1
+     d XML_CATA_PREFER_SYSTEM...
+     d                 c                   2
+
+     d xmlCatalogAllow...
+     d                 s             10u 0 based(######typedef######)           enum type
+     d XML_CATA_ALLOW_NONE...
+     d                 c                   0
+     d XML_CATA_ALLOW_GLOBAL...
+     d                 c                   1
+     d XML_CATA_ALLOW_DOCUMENT...
+     d                 c                   2
+     d XML_CATA_ALLOW_ALL...
+     d                 c                   3
+
+     d xmlCatalogPtr   s               *   based(######typedef######)
+
+      * Operations on a given catalog.
+
+     d xmlNewCatalog   pr                  extproc('xmlNewCatalog')
+     d                                     like(xmlCatalogPtr)
+     d  sgml                         10i 0 value
+
+     d xmlLoadACatalog...
+     d                 pr                  extproc('xmlLoadACatalog')
+     d                                     like(xmlCatalogPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlLoadSGMLSuperCatalog...
+     d                 pr                  extproc('xmlLoadSGMLSuperCatalog')
+     d                                     like(xmlCatalogPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlConvertSGMLCatalog...
+     d                 pr            10i 0 extproc('xmlConvertSGMLCatalog')
+     d  catal                              value like(xmlCatalogPtr)
+
+     d xmlACatalogAdd  pr            10i 0 extproc('xmlACatalogAdd')
+     d  catal                              value like(xmlCatalogPtr)
+     d  type                           *   value options(*string)               const xmlChar *
+     d  orig                           *   value options(*string)               const xmlChar *
+     d  replace                        *   value options(*string)               const xmlChar *
+
+     d xmlACatalogRemove...
+     d                 pr            10i 0 extproc('xmlACatalogRemove')
+     d  catal                              value like(xmlCatalogPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlACatalogResolve...
+     d                 pr              *   extproc('xmlACatalogResolve')        xmlChar *
+     d  catal                              value like(xmlCatalogPtr)
+     d  pubID                          *   value options(*string)               const xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlACatalogResolveSystem...
+     d                 pr              *   extproc('xmlACatalogResolveSystem')  xmlChar *
+     d  catal                              value like(xmlCatalogPtr)
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlACatalogResolvePublic...
+     d                 pr              *   extproc('xmlACatalogResolvePublic')  xmlChar *
+     d  catal                              value like(xmlCatalogPtr)
+     d  pubID                          *   value options(*string)               const xmlChar *
+
+     d xmlACatalogResolveURI...
+     d                 pr              *   extproc('xmlACatalogResolveURI')     xmlChar *
+     d  catal                              value like(xmlCatalogPtr)
+     d  URI                            *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlACatalogDump...
+     d                 pr                  extproc('xmlACatalogDump')
+     d  catal                              value like(xmlCatalogPtr)
+     d  out                            *   value                                FILE *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlFreeCatalog  pr                  extproc('xmlFreeCatalog')
+     d  catal                              value like(xmlCatalogPtr)
+
+     d xmlCatalogIsEmpty...
+     d                 pr            10i 0 extproc('xmlCatalogIsEmpty')
+     d  catal                              value like(xmlCatalogPtr)
+
+      * Global operations.
+
+     d xmlInitializeCatalog...
+     d                 pr                  extproc('xmlInitializeCatalog')
+
+     d xmlLoadCatalog  pr            10i 0 extproc('xmlLoadCatalog')
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlLoadCatalogs...
+     d                 pr                  extproc('xmlLoadCatalogs')
+     d  paths                          *   value options(*string)               const char *
+
+     d xmlCatalogCleanup...
+     d                 pr                  extproc('xmlCatalogCleanup')
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlCatalogDump  pr                  extproc('xmlCatalogDump')
+     d  out                            *   value                                FILE *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlCatalogResolve...
+     d                 pr              *   extproc('xmlCatalogResolve')         xmlChar *
+     d  pubID                          *   value options(*string)               const xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogResolveSystem...
+     d                 pr              *   extproc('xmlCatalogResolveSystem')   xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogResolvePublic...
+     d                 pr              *   extproc('xmlCatalogResolvePublic')   xmlChar *
+     d  pubID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogResolveURI...
+     d                 pr              *   extproc('xmlCatalogResolveURI')      xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+
+     d xmlCatalogAdd   pr            10i 0 extproc('xmlCatalogAdd')
+     d  type                           *   value options(*string)               const xmlChar *
+     d  orig                           *   value options(*string)               const xmlChar *
+     d  replace                        *   value options(*string)               const xmlChar *
+
+     d xmlCatalogRemove...
+     d                 pr            10i 0 extproc('xmlCatalogRemove')
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlParseCatalogFile...
+     d                 pr                  extproc('xmlParseCatalogFile')
+     d                                     like(xmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlCatalogConvert...
+     d                 pr            10i 0 extproc('xmlCatalogConvert')
+
+      * Strictly minimal interfaces for per-document catalogs used
+      * by the parser.
+
+     d xmlCatalogFreeLocal...
+     d                 pr                  extproc('xmlCatalogFreeLocal')
+     d  catalogs                       *   value                                void *
+
+     d xmlCatalogAddLocal...
+     d                 pr              *   extproc('xmlCatalogAddLocal')        void *
+     d  catalogs                       *   value                                void *
+     d  URL                            *   value options(*string)               const xmlChar *
+
+     d xmlCatalogLocalResolve...
+     d                 pr              *   extproc('xmlCatalogLocalResolve')    xmlChar *
+     d  catalogs                       *   value                                void *
+     d  pubID                          *   value options(*string)               const xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogLocalResolveURI...
+     d                 pr              *   extproc('xmlCatalogLocalResolveURI') xmlChar *
+     d  catalogs                       *   value                                void *
+     d  URI                            *   value options(*string)               const xmlChar *
+
+      * Preference settings.
+
+     d xmlCatalogSetDebug...
+     d                 pr            10i 0 extproc('xmlCatalogSetDebug')
+     d  level                        10i 0 value
+
+     d xmlCatalogSetDefaultPrefer...
+     d                 pr                  extproc('xmlCatalogSetDefaultPrefer')
+     d                                     like(xmlCatalogPrefer)
+     d  prefer                             value like(xmlCatalogPrefer)
+
+     d xmlCatalogSetDefaults...
+     d                 pr                  extproc('xmlCatalogSetDefaults')
+     d  allow                              value like(xmlCatalogAllow)
+
+     d xmlCatalogGetDefaults...
+     d                 pr                  extproc('xmlCatalogGetDefaults')
+     d                                     like(xmlCatalogAllow)
+
+      * DEPRECATED interfaces
+
+     d xmlCatalogGetSystem...
+     d                 pr              *   extproc('xmlCatalogGetSystem')       const xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogGetPublic...
+     d                 pr              *   extproc('xmlCatalogGetPublic')       const xmlChar *
+     d  pubID                          *   value options(*string)               const xmlChar *
+
+      /endif                                                                    LIBXML_CATALOG_ENBLD
+      /endif                                                                    XML_CATALOG_H__
diff --git a/os400/libxmlrpg/chvalid.rpgle b/os400/libxmlrpg/chvalid.rpgle
new file mode 100644
index 0000000..33393f6
--- /dev/null
+++ b/os400/libxmlrpg/chvalid.rpgle
@@ -0,0 +1,97 @@
+      * Summary: Unicode character range checking
+      * Description: this module exports interfaces for the character
+      *               range validation APIs
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_CHVALID_H__)
+      /define XML_CHVALID_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlstring"
+
+      * Define our typedefs and structures
+
+     d xmlChSRangePtr  s               *   based(######typedef######)
+
+     d xmlChSRange     ds                  based(xmlChSRangePtr)
+     d                                     align qualified
+     d  low                           5u 0
+     d  high                          5u 0
+
+     d xmlChLRangePtr  s               *   based(######typedef######)
+
+     d xmlChLRange     ds                  based(xmlChLRangePtr)
+     d                                     align qualified
+     d  low                          10u 0
+     d  high                         10u 0
+
+     d xmlChRangeGroupPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlChRangeGroup...
+     d                 ds                  based(xmlChRangeGroupPtr)
+     d                                     align qualified
+     d  nbShortRange                 10i 0
+     d  nbLongRange                  10i 0
+     d  shortRange                         like(xmlChSRangePtr)
+     d  longRange                          like(xmlChLRangePtr)
+
+      * Range checking routine
+
+     d xmlCharInRange  pr            10i 0 extproc('xmlCharInRange')
+     d val                           10u 0 value
+     d group                               like(xmlChRangeGroupPtr)             const
+
+     d xmlIsBaseCharGroup...
+     d                 ds                  import('xmlIsBaseCharGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsCharGroup...
+     d                 ds                  import('xmlIsCharGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsCombiningGroup...
+     d                 ds                  import('xmlIsCombiningGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsDigitGroup...
+     d                 ds                  import('xmlIsDigitGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsExtenderGroup...
+     d                 ds                  import('xmlIsExtenderGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsIdeographicGroup...
+     d                 ds                  import('xmlIsIdeographicGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsBaseChar   pr            10i 0 extproc('xmlIsBaseChar')
+     d ch                            10u 0 value
+
+     d xmlIsBlank      pr            10i 0 extproc('xmlIsBlank')
+     d ch                            10u 0 value
+
+     d xmlIsChar       pr            10i 0 extproc('xmlIsChar')
+     d ch                            10u 0 value
+
+     d xmlIsCombining  pr            10i 0 extproc('xmlIsCombining')
+     d ch                            10u 0 value
+
+     d xmlIsDigit      pr            10i 0 extproc('xmlIsDigit')
+     d ch                            10u 0 value
+
+     d xmlIsExtender   pr            10i 0 extproc('xmlIsExtender')
+     d ch                            10u 0 value
+
+     d xmlIsIdeographic...
+     d                 pr            10i 0 extproc('xmlIsIdeographic')
+     d ch                            10u 0 value
+
+     d xmlIsPubidChar  pr            10i 0 extproc('xmlIsPubidChar')
+     d ch                            10u 0 value
+
+      /endif                                                                    XML_CHVALID_H__
diff --git a/os400/libxmlrpg/debugXML.rpgle b/os400/libxmlrpg/debugXML.rpgle
new file mode 100644
index 0000000..5005a2d
--- /dev/null
+++ b/os400/libxmlrpg/debugXML.rpgle
@@ -0,0 +1,241 @@
+      * Summary: Tree debugging APIs
+      * Description: Interfaces to a set of routines used for debugging the tree
+      *              produced by the XML parser.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(DEBUG_XML__)
+      /define DEBUG_XML__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_DEBUG_ENABLED)
+
+      /include "libxmlrpg/xpath"
+
+      * The standard Dump routines.
+
+     d xmlDebugDumpString...
+     d                 pr                  extproc('xmlDebugDumpString')
+     d  output                         *   value                                FILE *
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlDebugDumpAttr...
+     d                 pr                  extproc('xmlDebugDumpAttr')
+     d  output                         *   value                                FILE *
+     d  attr                               value like(xmlAttrPtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpAttrList...
+     d                 pr                  extproc('xmlDebugDumpAttrList')
+     d  output                         *   value                                FILE *
+     d  attr                               value like(xmlAttrPtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpOneNode...
+     d                 pr                  extproc('xmlDebugDumpOneNode')
+     d  output                         *   value                                FILE *
+     d  node                               value like(xmlNodePtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpNode...
+     d                 pr                  extproc('xmlDebugDumpNode')
+     d  output                         *   value                                FILE *
+     d  node                               value like(xmlNodePtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpNodeList...
+     d                 pr                  extproc('xmlDebugDumpNodeList')
+     d  output                         *   value                                FILE *
+     d  node                               value like(xmlNodePtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpDocumentHead...
+     d                 pr                  extproc('xmlDebugDumpDocumentHead')
+     d  output                         *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlDebugDumpDocument...
+     d                 pr                  extproc('xmlDebugDumpDocument')
+     d  output                         *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlDebugDumpDTD...
+     d                 pr                  extproc('xmlDebugDumpDTD')
+     d  output                         *   value                                FILE *
+     d  dtd                                value like(xmlDtdPtr)
+
+     d xmlDebugDumpEntities...
+     d                 pr                  extproc('xmlDebugDumpEntities')
+     d  output                         *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+
+      ****************************************************************
+      *                                                              *
+      *                      Checking routines                       *
+      *                                                              *
+      ****************************************************************
+
+     d xmlDebugCheckDocument...
+     d                 pr            10i 0 extproc('xmlDebugCheckDocument')
+     d  output                         *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+
+      ****************************************************************
+      *                                                              *
+      *                      XML shell helpers                       *
+      *                                                              *
+      ****************************************************************
+
+     d xmlLsOneNode    pr                  extproc('xmlLsOneNode')
+     d  output                         *   value                                FILE *
+     d  node                               value like(xmlNodePtr)
+
+     d xmlLsCountNode  pr            10i 0 extproc('xmlLsCountNode')
+     d  node                               value like(xmlNodePtr)
+
+     d xmlBoolToText   pr              *   extproc('xmlBoolToText')             const char *
+     d  boolval                      10i 0 value
+
+      ****************************************************************
+      *                                                              *
+      *       The XML shell related structures and functions         *
+      *                                                              *
+      ****************************************************************
+
+      /if defined(LIBXML_XPATH_ENABLED)
+
+      * xmlShellReadlineFunc:
+      * @prompt:  a string prompt
+      *
+      * This is a generic signature for the XML shell input function.
+      *
+      * Returns a string which will be freed by the Shell.
+
+     d xmlShellReadlineFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlShellCtxt:
+      *
+      * A debugging shell context.
+      * TODO: add the defined function tables.
+
+     d xmlShellCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchellCtxt   ds                  based(xmlShellCtxtPtr)
+     d                                     align qualified
+     d  filename                       *                                        char *
+     d  doc                                like(xmlDocPtr)
+     d  node                               like(xmlNodePtr)
+     d  pctxt                              like(xmlXPathContextPtr)
+     d  loaded                       10i 0
+     d  output                         *                                        FILE *
+     d  input                              like(xmlShellReadlineFunc)
+
+      * xmlShellCmd:
+      * @ctxt:  a shell context
+      * @arg:  a string argument
+      * @node:  a first node
+      * @node2:  a second node
+      *
+      * This is a generic signature for the XML shell functions.
+      *
+      * Returns an int, negative returns indicating errors.
+
+     d xmlShellCmd     s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlShellPrintXPathError...
+     d                 pr                  extproc('xmlShellPrintXPathError')
+     d  errorType                    10i 0 value
+     d  arg                            *   value options(*string)               const char *
+
+     d xmlShellPrintXPathResult...
+     d                 pr                  extproc('xmlShellPrintXPathResult')
+     d  list                               value like(xmlXPathObjectPtr)
+
+     d xmlShellList    pr            10i 0 extproc('xmlShellList')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellBase    pr            10i 0 extproc('xmlShellBase')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellDir     pr            10i 0 extproc('xmlShellDir')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellLoad    pr            10i 0 extproc('xmlShellLoad')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  filename                       *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlShellPrintNode...
+     d                 pr                  extproc('xmlShellPrintNode')
+     d  node                               value like(xmlNodePtr)
+
+     d xmlShellCat     pr            10i 0 extproc('xmlShellCat')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellWrite   pr            10i 0 extproc('xmlShellWrite')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  filename                       *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellSave    pr            10i 0 extproc('xmlShellSave')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  filename                       *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      /if defined(LIBXML_VALID_ENABLED)
+     d xmlShellValidate...
+     d                 pr            10i 0 extproc('xmlShellValidate')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  dtd                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+      /endif                                                                    LIBXML_VALID_ENABLED
+
+     d xmlShellDu      pr            10i 0 extproc('xmlShellDu')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  tree                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellPwd     pr            10i 0 extproc('xmlShellPwd')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  buffer                         *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+      * The Shell interface.
+
+     d xmlShell        pr                  extproc('xmlShell')
+     d  doc                                value like(xmlDocPtr)
+     d  filename                       *   value options(*string)               char *
+     d  input                              value like(xmlShellReadlineFunc)
+     d  output                         *   value                                FILE *
+
+      /endif                                                                    LIBXML_XPATH_ENABLED
+      /endif                                                                    LIBXML_DEBUG_ENABLED
+      /endif                                                                    DEBUG_XML__
diff --git a/os400/libxmlrpg/dict.rpgle b/os400/libxmlrpg/dict.rpgle
new file mode 100644
index 0000000..cd36f50
--- /dev/null
+++ b/os400/libxmlrpg/dict.rpgle
@@ -0,0 +1,78 @@
+      * Summary: string dictionary
+      * Description: dictionary of reusable strings, just used to avoid
+      *         allocation and freeing operations.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_DICT_H__)
+      /define XML_DICT_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      * The dictionary.
+
+     d xmlDictPtr      s               *   based(######typedef######)
+
+      * Initializer
+
+     d xmlInitializeDict...
+     d                 pr            10i 0 extproc('xmlInitializeDict')
+
+      * Constructor and destructor.
+
+     d xmlDictCreate   pr                  extproc('xmlDictCreate')
+     d                                     like(xmlDictPtr)
+
+     d xmlDictSetLimit...
+     d                 pr            10u 0 extproc('xmlDictSetLimit')           size_t
+     d  dict                               value like(xmlDictPtr)
+     d  limit                        10u 0 value                                size_t
+
+     d xmlDictGetUsage...
+     d                 pr            10u 0 extproc('xmlDictGetUsage')           size_t
+     d  dict                               value like(xmlDictPtr)
+
+     d xmlDictCreateSub...
+     d                 pr                  extproc('xmlDictCreateSub')
+     d                                     like(xmlDictPtr)
+     d  sub                                value like(xmlDictPtr)
+
+     d xmlDictReference...
+     d                 pr            10i 0 extproc('xmlDictGetReference')
+     d  dict                               value like(xmlDictPtr)
+
+     d xmlDictFree     pr                  extproc('xmlDictFree')
+     d  dict                               value like(xmlDictPtr)
+
+      * Lookup of entry in the dictionary.
+
+     d xmlDictLookup   pr              *   extproc('xmlDictLookup')             const xmlChar *
+     d  dict                               value like(xmlDictPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlDictExists   pr              *   extproc('xmlDictExists')             const xmlChar *
+     d  dict                               value like(xmlDictPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlDictQLookup  pr              *   extproc('xmlDictQLookup')            const xmlChar *
+     d  dict                               value like(xmlDictPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlDictOwns     pr            10i 0 extproc('xmlDictOwns')
+     d  dict                               value like(xmlDictPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlDictSize     pr            10i 0 extproc('xmlDictSize')
+     d  dict                               value like(xmlDictPtr)
+
+      * Cleanup function
+
+     d xmlDictCleanup  pr                  extproc('xmlDictCleanup')
+
+      /endif                                                                    ! XML_DICT_H__
diff --git a/os400/libxmlrpg/encoding.rpgle b/os400/libxmlrpg/encoding.rpgle
new file mode 100644
index 0000000..80970fb
--- /dev/null
+++ b/os400/libxmlrpg/encoding.rpgle
@@ -0,0 +1,274 @@
+      * Summary: interface for the encoding conversion functions
+      * Description: interface for the encoding conversion functions needed for
+      *              XML basic encoding and iconv() support.
+      *
+      * Related specs are
+      * rfc2044        (UTF-8 and UTF-16) F. Yergeau Alis Technologies
+      * [ISO-10646]    UTF-8 and UTF-16 in Annexes
+      * [ISO-8859-1]   ISO Latin-1 characters codes.
+      * [UNICODE]      The Unicode Consortium, "The Unicode Standard --
+      *                Worldwide Character Encoding -- Version 1.0", Addison-
+      *                Wesley, Volume 1, 1991, Volume 2, 1992.  UTF-8 is
+      *                described in Unicode Technical Report #4.
+      * [US-ASCII]     Coded Character Set--7-bit American Standard Code for
+      *                Information Interchange, ANSI X3.4-1986.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_CHAR_ENCODING_H__)
+      /define XML_CHAR_ENCODING_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      * xmlCharEncoding:
+      *
+      * Predefined values for some standard encodings.
+      * Libxml does not do beforehand translation on UTF8 and ISOLatinX.
+      * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default.
+      *
+      * Anything else would have to be translated to UTF8 before being
+      * given to the parser itself. The BOM for UTF16 and the encoding
+      * declaration are looked at and a converter is looked for at that
+      * point. If not found the parser stops here as asked by the XML REC. A
+      * converter can be registered by the user
+      * xmlRegisterCharEncodingHandler but the current form doesn't allow
+      * stateful transcoding (a serious problem agreed !). If iconv has been
+      * found it will be used automatically and allow stateful transcoding,
+      * the simplest is then to be sure to enable iconv and to provide iconv
+      * libs for the encoding support needed.
+      *
+      * Note that the generic "UTF-16" is not a predefined value.  Instead, only
+      * the specific UTF-16LE and UTF-16BE are present.
+
+     d xmlCharEncoding...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_CHAR_ENCODING_ERROR...                                              No encoding detected
+     d                 c                   -1
+     d  XML_CHAR_ENCODING_NONE...                                               No encoding detected
+     d                 c                   0
+     d  XML_CHAR_ENCODING_UTF8...                                               UTF-8
+     d                 c                   1
+     d  XML_CHAR_ENCODING_UTF16LE...                                            UTF-16 little endian
+     d                 c                   2
+     d  XML_CHAR_ENCODING_UTF16BE...                                            UTF-16 big endian
+     d                 c                   3
+     d  XML_CHAR_ENCODING_UCS4LE...                                             UCS-4 little endian
+     d                 c                   4
+     d  XML_CHAR_ENCODING_UCS4BE...                                             UCS-4 big endian
+     d                 c                   5
+     d  XML_CHAR_ENCODING_EBCDIC...                                             EBCDIC uh!
+     d                 c                   6
+     d  XML_CHAR_ENCODING_UCS4_2143...                                          UCS-4 unusual order
+     d                 c                   7
+     d  XML_CHAR_ENCODING_UCS4_3412...                                          UCS-4 unusual order
+     d                 c                   8
+     d  XML_CHAR_ENCODING_UCS2...                                               UCS-2
+     d                 c                   9
+     d  XML_CHAR_ENCODING_8859_1...                                             ISO-8859-1 ISOLatin1
+     d                 c                   10
+     d  XML_CHAR_ENCODING_8859_2...                                             ISO-8859-2 ISOLatin2
+     d                 c                   11
+     d  XML_CHAR_ENCODING_8859_3...                                             ISO-8859-3
+     d                 c                   12
+     d  XML_CHAR_ENCODING_8859_4...                                             ISO-8859-4
+     d                 c                   13
+     d  XML_CHAR_ENCODING_8859_5...                                             ISO-8859-5
+     d                 c                   14
+     d  XML_CHAR_ENCODING_8859_6...                                             ISO-8859-6
+     d                 c                   15
+     d  XML_CHAR_ENCODING_8859_7...                                             ISO-8859-7
+     d                 c                   16
+     d  XML_CHAR_ENCODING_8859_8...                                             ISO-8859-8
+     d                 c                   17
+     d  XML_CHAR_ENCODING_8859_9...                                             ISO-8859-9
+     d                 c                   18
+     d  XML_CHAR_ENCODING_2022_JP...                                            ISO-2022-JP
+     d                 c                   19
+     d  XML_CHAR_ENCODING_SHIFT_JIS...                                          Shift_JIS
+     d                 c                   20
+     d  XML_CHAR_ENCODING_EUC_JP...                                             EUC-JP
+     d                 c                   21
+     d  XML_CHAR_ENCODING_ASCII...                                              Pure ASCII
+     d                 c                   22
+
+      * xmlCharEncodingInputFunc:
+      * @out:  a pointer to an array of bytes to store the UTF-8 result
+      * @outlen:  the length of @out
+      * @in:  a pointer to an array of chars in the original encoding
+      * @inlen:  the length of @in
+      *
+      * Take a block of chars in the original encoding and try to convert
+      * it to an UTF-8 block of chars out.
+      *
+      * Returns the number of bytes written, -1 if lack of space, or -2
+      *     if the transcoding failed.
+      * The value of @inlen after return is the number of octets consumed
+      *     if the return value is positive, else unpredictiable.
+      * The value of @outlen after return is the number of octets consumed.
+
+     d xmlCharEncodingInputFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlCharEncodingOutputFunc:
+      * @out:  a pointer to an array of bytes to store the result
+      * @outlen:  the length of @out
+      * @in:  a pointer to an array of UTF-8 chars
+      * @inlen:  the length of @in
+      *
+      * Take a block of UTF-8 chars in and try to convert it to another
+      * encoding.
+      * Note: a first call designed to produce heading info is called with
+      * in = NULL. If stateful this should also initialize the encoder state.
+      *
+      * Returns the number of bytes written, -1 if lack of space, or -2
+      *     if the transcoding failed.
+      * The value of @inlen after return is the number of octets consumed
+      *     if the return value is positive, else unpredictiable.
+      * The value of @outlen after return is the number of octets produced.
+
+     d xmlCharEncodingOutputFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Block defining the handlers for non UTF-8 encodings.
+      * If iconv is supported, there are two extra fields.
+
+      /if defined(LIBXML_ICU_ENABLED)
+     d uconv_t         ds                  based(######typedef######)
+     d                                     align qualified
+     d  uconv                          *                                        UConverter *
+     d  utf8                           *                                        UConverter *
+      /endif
+
+     d xmlCharEncodingHandlerPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlCharEncodingHandler...
+     d                 ds                  based(xmlCharEncodingHandlerPtr)
+     d                                     align qualified
+     d  name                           *                                        char *
+     d  input                              like(xmlCharEncodingInputFunc)
+     d  output                             like(xmlCharEncodingOutputFunc)
+      *
+      /if defined(LIBXML_ICONV_ENABLED)
+     d  iconv_in                       *                                        iconv_t
+     d  iconv_out                      *                                        iconv_t
+      /endif                                                                    LIBXML_ICONV_ENABLED
+      *
+      /if defined(LIBXML_ICU_ENABLED)
+     d  uconv_in                       *                                        uconv_t *
+     d  uconv_out                      *                                        uconv_t *
+      /endif                                                                    LIBXML_ICU_ENABLED
+
+      /include "libxmlrpg/tree"
+
+      * Interfaces for encoding handlers.
+
+     d xmlInitCharEncodingHandlers...
+     d                 pr                  extproc(
+     d                                      'xmlInitCharEncodingHandlers')
+
+     d xmlCleanupCharEncodingHandlers...
+     d                 pr                  extproc(
+     d                                      'xmlCleanupCharEncodingHandlers')
+
+     d xmlRegisterCharEncodingHandler...
+     d                 pr                  extproc(
+     d                                      'xmlRegisterCharEncodingHandler')
+     d  handler                            value like(xmlCharEncodingHandlerPtr)
+
+     d xmlGetCharEncodingHandler...
+     d                 pr                  extproc('xmlGetCharEncodingHandler')
+     d                                     like(xmlCharEncodingHandlerPtr)
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlFindCharEncodingHandler...
+     d                 pr                  extproc('xmlFindCharEncodingHandler')
+     d                                     like(xmlCharEncodingHandlerPtr)
+     d  name                           *   value options(*string)               const char *
+
+     d xmlNewCharEncodingHandler...
+     d                 pr                  extproc('xmlNewCharEncodingHandler')
+     d                                     like(xmlCharEncodingHandlerPtr)
+     d  name                           *   value options(*string)               const char *
+     d  input                              value like(xmlCharEncodingInputFunc)
+     d  output                             value like(xmlCharEncodingOutputFunc)
+
+      * Interfaces for encoding names and aliases.
+
+     d xmlAddEncodingAlias...
+     d                 pr            10i 0 extproc('xmlAddEncodingAlias')
+     d  name                           *   value options(*string)               const char *
+     d  alias                          *   value options(*string)               const char *
+
+     d xmlDelEncodingAlias...
+     d                 pr            10i 0 extproc('xmlDelEncodingAlias')
+     d  alias                          *   value options(*string)               const char *
+
+     d xmlGetEncodingAlias...
+     d                 pr              *   extproc('xmlGetEncodingAlias')       const char *
+     d  alias                          *   value options(*string)               const char *
+
+     d xmlCleanupEncodingAliases...
+     d                 pr                  extproc('xmlCleanupEncodingAliases')
+
+     d xmlParseCharEncoding...
+     d                 pr                  extproc('xmlParseCharEncoding')
+     d                                     like(xmlCharEncoding)
+     d  name                           *   value options(*string)               const char *
+
+     d xmlGetCharEncodingName...
+     d                 pr              *   extproc('xmlGetCharEncodingName')    const char *
+     d  enc                                value like(xmlCharEncoding)
+
+      * Interfaces directly used by the parsers.
+
+     d xmlDetectCharEncoding...
+     d                 pr                  extproc('xmlDetectCharEncoding')
+     d                                     like(xmlCharEncoding)
+     d  in                             *   value options(*string)               const unsigned char*
+     d  len                          10i 0 value
+
+     d xmlCharEncOutFunc...
+     d                 pr            10i 0 extproc('xmlCharEncOutFunc')
+     d  handler                            like(xmlCharEncodingHandler)
+     d  out                                value like(xmlBufferPtr)
+     d  in                                 value like(xmlBufferPtr)
+
+     d xmlCharEncInFunc...
+     d                 pr            10i 0 extproc('xmlCharEncInFunc')
+     d  handler                            like(xmlCharEncodingHandler)
+     d  out                                value like(xmlBufferPtr)
+     d  in                                 value like(xmlBufferPtr)
+
+     d xmlCharEncFirstLine...
+     d                 pr            10i 0 extproc('xmlCharEncFirstLine')
+     d  handler                            like(xmlCharEncodingHandler)
+     d  out                                value like(xmlBufferPtr)
+     d  in                                 value like(xmlBufferPtr)
+
+     d xmlCharEncCloseFunc...
+     d                 pr            10i 0 extproc('xmlCharEncCloseFunc')
+     d  handler                            like(xmlCharEncodingHandler)
+
+      * Export a few useful functions
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d UTF8Toisolat1   pr            10i 0 extproc('UTF8Toisolat1')
+     d  out                       65535    options(*varsize)                    unsigned char (*)
+     d  outlen                       10i 0
+     d  in                             *   value options(*string)               const unsigned char*
+     d  inlen                        10i 0
+
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d isolat1ToUTF8   pr            10i 0 extproc('isolat1ToUTF8')
+     d  out                       65535    options(*varsize)                    unsigned char (*)
+     d  outlen                       10i 0
+     d  in                             *   value options(*string)               const unsigned char*
+     d  inlen                        10i 0
+
+      /endif                                                                    XML_CHAR_ENCODING_H
diff --git a/os400/libxmlrpg/entities.rpgle b/os400/libxmlrpg/entities.rpgle
new file mode 100644
index 0000000..8d97915
--- /dev/null
+++ b/os400/libxmlrpg/entities.rpgle
@@ -0,0 +1,174 @@
+      * Summary: interface for the XML entities handling
+      * Description: this module provides some of the entity API needed
+      *              for the parser and applications.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_ENTITIES_H__)
+      /define XML_ENTITIES_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      * The different valid entity types.
+
+     d xmlEntityType   s             10i 0 based(######typedef######)           enum
+     d  XML_INTERNAL_GENERAL_ENTITY...
+     d                 c                   1
+     d  XML_EXTERNAL_GENERAL_PARSED_ENTITY...
+     d                 c                   2
+     d  XML_EXTERNAL_GENERAL_UNPARSED_ENTITY...
+     d                 c                   3
+     d  XML_INTERNAL_PARAMETER_ENTITY...
+     d                 c                   4
+     d  XML_EXTERNAL_PARAMETER_ENTITY...
+     d                 c                   5
+     d  XML_INTERNAL_PREDEFINED_ENTITY...
+     d                 c                   6
+
+      * An unit of storage for an entity, contains the string, the value
+      * and the linkind data needed for the linking in the hash table.
+
+     d xmlEntity       ds                  based(xmlEntityPtr)
+     d                                     align qualified
+     d  #private                       *                                        void *
+     d  type                               like(xmlElementType)                 XML_ENTITY_DECL
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     First child link
+     d  last                               like(xmlNodePtr)                     Last child link
+     d  parent                             like(xmlDtdPtr)                      -> DTD
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     prev sibling link
+     d  doc                                like(xmlDocPtr)                      containing document
+     d  orig                           *                                        xmlChar *
+     d  content                        *                                        xmlChar *
+     d  length                       10i 0                                      content length
+     d  etype                              like(xmlEntityType)                  The entity type
+     d  ExternalID                     *                                        const xmlChar *
+     d  SystemlID                      *                                        const xmlChar *
+     d  nexte                              like(xmlEntityPtr)                   unused
+     d  URI                            *                                        const xmlChar *
+     d  owner                        10i 0                                      Owns children ?
+     d  checked                      10i 0                                      Content checked ?
+
+      * All entities are stored in an hash table.
+      * There is 2 separate hash tables for global and parameter entities.
+
+     d xmlEntitiesTablePtr...
+     d                 s               *   based(######typedef######)
+
+      * External functions:
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+     d xmlInitializePredefinedEntities...
+     d                 pr                  extproc(
+     d                                      'xmlInitializePredefinedEntities')
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+     d xmlNewEntity    pr                  extproc('xmlNewEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlAddDocEntity...
+     d                 pr                  extproc('xmlAddDocEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlAddDtdEntity...
+     d                 pr                  extproc('xmlAddDtdEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlGetPredefinedEntity...
+     d                 pr                  extproc('xmlGetPredefinedEntity')
+     d                                     like(xmlEntityPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDocEntity...
+     d                 pr                  extproc('xmlGetDocEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdEntity...
+     d                 pr                  extproc('xmlGetDtdEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetParameterEntity...
+     d                 pr                  extproc('xmlGetParameterEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+     d xmlEncodeEntities...
+     d                 pr              *   extproc('xmlEncodeEntities')         xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  input                          *   value options(*string)               const xmlChar *
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+     d xmlEncodeEntitiesReentrant...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                      'xmlEncodeEntitiesReentrant')
+     d  doc                                value like(xmlDocPtr)
+     d  input                          *   value options(*string)               const xmlChar *
+XMLPU
+     d xmlEncodeSpecialChars...
+     d                 pr              *   extproc('xmlSpecialChars')           xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  input                          *   value options(*string)               const xmlChar *
+XMLPU
+     d xmlCreateEntitiesTable...
+     d                 pr                  extproc('xmlCreateEntitiesTable')
+     d                                     like(xmlEntitiesTablePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyEntitiesTable...
+     d                 pr                  extproc('xmlCopyEntitiesTable')
+     d                                     like(xmlEntitiesTablePtr)
+     d  table                              value like(xmlEntitiesTablePtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlFreeEntitiesTable...
+     d                 pr                  extproc('xmlFreeEntitiesTable')
+     d  table                              value like(xmlEntitiesTablePtr)
+XMLPU
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlDumpEntitiesTable...
+     d                 pr                  extproc('xmlDumpEntitiesTable')
+     d  buf                                value like(xmlBufferPtr)
+     d  table                              value like(xmlEntitiesTablePtr)
+XMLPU
+     d xmlDumpEntityDecl...
+     d                 pr                  extproc('xmlDumpEntityDecl')
+     d  buf                                value like(xmlBufferPtr)
+     d  ent                                value like(xmlEntityPtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+     d xmlCleanupPredefinedEntities...
+     d                 pr                  extproc(
+XMLPUd                                      'xmlCleanupPredefinedEntities')
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+      /endif                                                                    XML_ENTITIES_H__
diff --git a/os400/libxmlrpg/globals.rpgle b/os400/libxmlrpg/globals.rpgle
new file mode 100644
index 0000000..80dadca
--- /dev/null
+++ b/os400/libxmlrpg/globals.rpgle
@@ -0,0 +1,557 @@
+      * Summary: interface for all global variables of the library
+      * Description: all the global variables and thread handling for
+      *              those variables is handled by this module.
+      *
+      * The bottom of this file is automatically generated by build_glob.py
+      * based on the description file global.data
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_GLOBALS_H)
+      /define XML_GLOBALS_H
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/xmlerror"
+      /include "libxmlrpg/SAX"
+      /include "libxmlrpg/SAX2"
+      /include "libxmlrpg/xmlmemory"
+
+     d xmlInitGlobals  pr                  extproc('xmlInitGlobals')
+
+     d xmlCleanupGlobals...
+     d                 pr                  extproc('xmlCleanupGlobals')
+
+      * xmlParserInputBufferCreateFilenameFunc:
+      * @URI: the URI to read from
+      * @enc: the requested source encoding
+      *
+      * Signature for the function doing the lookup for a suitable input method
+      * corresponding to an URI.
+      *
+      * Returns the new xmlParserInputBufferPtr in case of success or NULL if no
+      *         method was found.
+
+     d xmlParserInputBufferCreateFilenameFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlOutputBufferCreateFilenameFunc:
+      * @URI: the URI to write to
+      * @enc: the requested target encoding
+      *
+      * Signature for the function doing the lookup for a suitable output method
+      * corresponding to an URI.
+      *
+      * Returns the new xmlOutputBufferPtr in case of success or NULL if no
+      *         method was found.
+
+     d xmlOutputBufferCreateFilenameFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlParserInputBufferCreateFilenameDefault...
+     d                 pr                  extproc('xmlParserInputBufferCreate+
+     d                                     FilenameDefault')
+     d                                     like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+     d func                                value like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+
+     d xmlOutputBufferCreateFilenameDefault...
+     d                 pr                  extproc('xmlOutputBufferCreate+
+     d                                     FilenameDefault')
+     d                                     like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+     d func                                value like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+
+      * xmlRegisterNodeFunc:
+      * @node: the current node
+      *
+      * Signature for the registration callback of a created node
+
+     d xmlRegisterNodeFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlDeregisterNodeFunc:
+      * @node: the current node
+      *
+      * Signature for the deregistration callback of a discarded node
+
+     d xmlDeregisterNodeFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlGlobalStatePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlGlobalState  ds                  based(xmlGlobalStatePtr)
+     d                                     align qualified
+     d  xmlParserVersion...
+     d                                 *                                        const char *
+     d  xmlDefaultSAXLocator...
+     d                                     like(xmlSAXLocator)
+     d  xmlDefaultSAXHandler...
+     d                                     like(xmlSAXHandlerV1)
+     d  docbDefaultSAXHandler...
+     d                                     like(xmlSAXHandlerV1)
+     d  htmlDefaultSAXHandler...
+     d                                     like(xmlSAXHandlerV1)
+     d  xmlFree                            like(xmlFreeFunc)
+     d  xmlMalloc                          like(xmlMallocFunc)
+     d  xmlMemStrdup                       like(xmlStrdupFunc)
+     d  xmlRealloc                         like(xmlReallocFunc)
+     d  xmlGenericError...
+     d                                     like(xmlGenericErrorFunc)
+     d  xmlStructuredError...
+     d                                     like(xmlStructuredErrorFunc)
+     d  xmlGenericErrorContext...
+     d                                 *                                        void *
+     d  oldXMLWDcompatibility...
+     d                               10i 0
+     d  xmlBufferAllocScheme...
+     d                                     like(xmlBufferAllocationScheme)
+     d  xmlDefaultBufferSize...
+     d                               10i 0
+     d  xmlSubstituteEntitiesDefaultValue...
+     d                               10i 0
+     d  xmlDoValidityCheckingDefaultValue...
+     d                               10i 0
+     d  xmlGetWarningsDefaultValue...
+     d                               10i 0
+     d  xmlKeepBlanksDefaultValue...
+     d                               10i 0
+     d  xmlLineNumbersDefaultValue...
+     d                               10i 0
+     d  xmlLoadExtDtdDefaultValue...
+     d                               10i 0
+     d  xmlParserDebugEntities...
+     d                               10i 0
+     d  xmlPedanticParserDefaultValue...
+     d                               10i 0
+     d  xmlSaveNoEmptyTags...
+     d                               10i 0
+     d  xmlIndentTreeOutput...
+     d                               10i 0
+     d  xmlTreeIndentString...
+     d                                 *                                        const char *
+     d  xmlRegisterNodeDefaultValue...
+     d                                     like(xmlRegisterNodeFunc)
+     d  xmlDeregisterNodeDefaultValue...
+     d                                     like(xmlDeregisterNodeFunc)
+     d  xmlMallocAtomic...
+     d                                     like(xmlMallocFunc)
+     d  xmlLastError                       like(xmlError)
+     d  xmlParserInputBufferCreateFilenameValue...
+     d                                     like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+     d  xmlOutputBufferCreateFilenameValue...
+     d                                     like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+     d  xmlStructuredErrorContext...
+     d                                 *                                        void *
+
+      /include "libxmlrpg/threads"
+
+     d xmlInitializeGlobalState...
+     d                 pr                  extproc('xmlInitializeGlobalState')
+     d qs                                  value like(xmlGlobalStatePtr)
+
+     d xmlThrDefSetGenericErrorFunc...
+     d                 pr                  extproc(
+     d                                      'xmlThrDefSetGenericErrorFunc')
+     d ctx                             *   value                                void *
+     d handler                             value like(xmlGenericErrorFunc)
+
+     d xmlThrDefSetStructuredErrorFunc...
+     d                 pr                  extproc(
+     d                                      'xmlThrDefSetStructuredErrorFunc')
+     d ctx                             *   value                                void *
+     d handler                             value like(xmlStructuredErrorFunc)
+
+     d xmlRegisterNodeDefault...
+     d                 pr                  extproc('xmlRegisterNodeDefault')
+     d                                     like(xmlRegisterNodeFunc)
+     d func                                value like(xmlRegisterNodeFunc)
+
+     d xmlThrDefRegisterNodeDefault...
+     d                 pr                  extproc(
+     d                                      'xmlThrDefRegisterNodeDefault')
+     d                                     like(xmlRegisterNodeFunc)
+     d func                                value like(xmlRegisterNodeFunc)
+
+     d xmlDeregisterNodeDefault...
+     d                 pr                  extproc('xmlDeregisterNodeDefault')
+     d                                     like(xmlDeregisterNodeFunc)
+     d func                                value like(xmlDeregisterNodeFunc)
+
+     d xmlThrDefDeregisterNodeDefault...
+     d                 pr                  extproc(
+     d                                      'xmlThrDefDeregisterNodeDefault')
+     d                                     like(xmlDeregisterNodeFunc)
+     d func                                value like(xmlDeregisterNodeFunc)
+
+     d xmlThrDefOutputBufferCreateFilenameDefault...
+     d                 pr                  extproc('xmlThrDefOutputBuffer+
+     d                                     CreateFilenameDefault')
+     d                                     like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+     d func                                value like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+
+     d xmlThrDefParserInputBufferCreateFilenameDefault...
+     d                 pr                  extproc('xmlThrDefParserInputBuffer+
+     d                                     CreateFilenameDefault')
+     d                                     like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+     d func                                value like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+
+      /if defined(LIBXML_DOCB_ENABLED)
+     d get_docbDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                       '__get_docbDefaultSAXHandler')
+     d                                     like(xmlSAXHandlerV1)
+
+     d set_docbDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                       '__set_docbDefaultSAXHandler')
+     d  value                              value like(xmlSAXHandlerV1)
+      /endif
+
+      /if defined(LIBXML_HTML_ENABLED)
+     d get_htmlDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                       '__get_htmlDefaultSAXHandler')
+     d                                     like(xmlSAXHandlerV1)
+
+     d set_htmlDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                       '__set_htmlDefaultSAXHandler')
+     d  value                              value like(xmlSAXHandlerV1)
+      /endif
+
+     d get_xmlLastError...
+     d                 pr                  extproc('__get_xmlLastError')
+     d                                     like(xmlError)
+
+     d set_xmlLastError...
+     d                 pr                  extproc('__set_xmlLastError')
+     d  value                              value like(xmlError)
+
+     d get_oldXMLWDcompatibility...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_oldXMLWDcompatibility')
+
+     d set_oldXMLWDcompatibility...
+     d                 pr                  extproc(
+     d                                       '__set_oldXMLWDcompatibility')
+     d  value                        10i 0 value
+
+     d get_xmlBufferAllocScheme...
+     d                 pr                  extproc('__get_xmlBufferAllocScheme')
+     d                                     like(xmlBufferAllocationScheme)
+
+     d set_xmlBufferAllocScheme...
+     d                 pr                  extproc('__set_xmlBufferAllocScheme')
+     d  value                              value like(xmlBufferAllocationScheme)
+
+     d xmlThrDefBufferAllocScheme...
+     d                 pr                  extproc('xmlThrDefBufferAllocScheme')
+     d                                     like(xmlBufferAllocationScheme)
+     d  v                                  value like(xmlBufferAllocationScheme)
+
+     d get_xmlDefaultBufferSize...
+     d                 pr            10i 0 extproc('__get_xmlDefaultBufferSize')
+
+     d set_xmlDefaultBufferSize...
+     d                 pr                  extproc('__set_xmlDefaultBufferSize')
+     d  value                        10i 0 value
+
+     d xmlThrDefDefaultBufferSize...
+     d                 pr            10i 0 extproc('xmlThrDefDefaultBufferSize')
+     d  v                            10i 0 value
+
+     d get_xmlDefaultSAXHandler...
+     d                 pr                  extproc('__get_xmlDefaultSAXHandler')
+     d                                     like(xmlSAXHandlerV1)
+
+     d set_xmlDefaultSAXHandler...
+     d                 pr                  extproc('__set_xmlDefaultSAXHandler')
+     d  value                              value like(xmlSAXHandlerV1)
+
+     d get_xmlDefaultSAXLocator...
+     d                 pr                  extproc('__get_xmlDefaultSAXLocator')
+     d                                     like(xmlSAXLocator)
+
+     d set_xmlDefaultSAXLocator...
+     d                 pr                  extproc('__set_xmlDefaultSAXLocator')
+     d  value                              value like(xmlSAXLocator)
+
+     d get_xmlDoValidityCheckingDefaultValue...
+     d                 pr            10i 0 extproc('__get_xmlDoValidity+
+     d                                       CheckingDefaultValue')
+
+     d set_xmlDoValidityCheckingDefaultValue...
+     d                 pr                  extproc('__set_xmlDoValidity+
+     d                                       CheckingDefaultValue')
+     d  value                        10i 0 value
+    
+     d xmlThrDefDoValidityCheckingDefaultValue...
+     d                 pr            10i 0 extproc('xmlThrDefDoValidity+
+     d                                       CheckingDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlGenericError...
+     d                 pr                  extproc('__get_xmlGenericError')
+     d                                     like(xmlGenericErrorFunc)
+
+     d set_xmlGenericError...
+     d                 pr                  extproc('__set_xmlGenericError')
+     d  func                               value like(xmlGenericErrorFunc)
+
+     d get_xmlStructuredError...
+     d                 pr                  extproc('__get_xmlStructuredError')
+     d                                     like(xmlStructuredErrorFunc)
+
+     d set_xmlStructuredError...
+     d                 pr                  extproc('__set_xmlStructuredError')
+     d  func                               value like(xmlStructuredErrorFunc)
+
+     d xmlStructuredError...
+     d                 pr                  extproc('__call_xmlStructuredError')
+     d  userData                       *   value options(*string)               void *
+     d  error                              value like(xmlErrorPtr) 
+
+     d get_xmlGenericErrorContext...
+     d                 pr                  extproc(
+     d                                       '__get_xmlGenericErrorContext')
+     d                                 *                                        void *
+
+     d set_xmlGenericErrorContext...
+     d                 pr                  extproc(
+     d                                       '__set_xmlGenericErrorContext')
+     d  value                          *   value options(*string)               void *
+
+     d get_xmlStructuredErrorContext...
+     d                 pr                  extproc(
+     d                                       '__get_xmlStructuredErrorContext')
+     d                                 *                                        void *
+
+     d set_xmlStructuredErrorContext...
+     d                 pr                  extproc(
+     d                                       '__set_xmlStructuredErrorContext')
+     d  value                          *   value options(*string)               void *
+
+     d get_xmlGetWarningsDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlGetWarningsDefaultValue')
+
+     d set_xmlGetWarningsDefaultValue...
+     d                 pr                  extproc(
+     d                                       '__set_xmlGetWarningsDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefGetWarningsDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefGetWarningsDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlIndentTreeOutput...
+     d                 pr            10i 0 extproc('__get_xmlIndentTreeOutput')
+
+     d set_xmlIndentTreeOutput...
+     d                 pr                   extproc('__set_xmlIndentTreeOutput')
+     d  value                        10i 0 value
+
+     d xmlThrDefIndentTreeOutput...
+     d                 pr            10i 0 extproc('xmlThrDefIndentTreeOutput')
+     d  v                            10i 0 value
+
+     d get_xmlTreeIndentString...
+     d                 pr              *   extproc('__get_xmlTreeIndentString') const char *
+
+     d set_xmlTreeIndentString...
+     d                 pr                  extproc('__set_xmlTreeIndentString')
+     d  value                          *   value options(*string)               const char *
+ 
+     d xmlThrDefTreeIndentString...
+     d                 pr              *   extproc('xmlThrDefTreeIndentString') const char *
+     d  v                              *   value options(*string)               const char *
+
+     d get_xmlKeepBlanksDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlKeepBlanksDefaultValue') 
+
+     d set_xmlKeepBlanksDefaultValue...
+     d                 pr                  extproc(
+     d                                       '__set_xmlKeepBlanksDefaultValue') 
+     d  value                        10i 0 value
+
+     d xmlThrDefKeepBlanksDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefKeepBlanksDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlLineNumbersDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlLineNumbersDefaultValue')
+
+     d set_xmlLineNumbersDefaultValue...
+     d                 pr                  extproc(
+     d                                       '__set_xmlLineNumbersDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefLineNumbersDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefLineNumbersDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlLoadExtDtdDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlLoadExtDtdDefaultValue')
+
+     d set_xmlLoadExtDtdDefaultValue...
+     d                 pr                  extproc(
+     d                                       '__set_xmlLoadExtDtdDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefLoadExtDtdDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefLoadExtDtdDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlParserDebugEntities...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlParserDebugEntities')
+
+     d set_xmlParserDebugEntities...
+     d                 pr                  extproc(
+     d                                       '__set_xmlParserDebugEntities')
+     d  value                        10i 0 value
+
+     d xmlThrDefParserDebugEntities...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefParserDebugEntities')
+     d  v                            10i 0 value
+
+     d get_xmlParserVersion...
+     d                 pr              *   extproc('__get_xmlParserVersion')    const char *
+
+     d set_xmlParserVersion...
+     d                 pr                  extproc('__set_xmlParserVersion')
+     d  value                          *   value options(*string)               const char *
+
+     d get_xmlPedanticParserDefaultValue...
+     d                 pr            10i 0 extproc('__get_xmlPedantic+
+     d                                       ParserDefaultValue')
+
+     d set_xmlPedanticParserDefaultValue...
+     d                 pr                  extproc('__set_xmlPedantic+
+     d                                       ParserDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefPedanticParserDefaultValue...
+     d                 pr            10i 0 extproc('xmlThrDefPedantic+
+     d                                       ParserDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlSaveNoEmptyTags...
+     d                 pr            10i 0 extproc('__get_xmlSaveNoEmptyTags')
+
+     d set_xmlSaveNoEmptyTags...
+     d                 pr                  extproc('__set_xmlSaveNoEmptyTags')
+     d  value                        10i 0 value
+
+     d xmlThrDefSaveNoEmptyTags...
+     d                 pr            10i 0 extproc('xmlThrDefSaveNoEmptyTags')
+     d  v                            10i 0 value
+
+     d get_xmlSubstituteEntitiesDefaultValue...
+     d                 pr            10i 0 extproc('__get_xmlSubstitute+
+     d                                       EntitiesDefaultValue')
+
+     d set_xmlSubstituteEntitiesDefaultValue...
+     d                 pr                  extproc('__set_xmlSubstitute+
+     d                                       EntitiesDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefSubstituteEntitiesDefaultValue...
+     d                 pr            10i 0 extproc('xmlThrDefSubstitute+
+     d                                       EntitiesDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlRegisterNodeDefaultValue...
+     d                 pr                  extproc('__get_xmlRegisterNode+
+     d                                       DefaultValue')
+     d                                     like(xmlRegisterNodeFunc)
+
+     d set_xmlRegisterNodeDefaultValue...
+     d                 pr                  extproc('__set_xmlRegisterNode+
+     d                                       DefaultValue')
+     d  value                              value like(xmlRegisterNodeFunc)
+
+     d xmlRegisterNodeDefaultValue...
+     d                 pr                  extproc('__call_xmlRegisterNode+
+     d                                       DefaultValue')
+     d  node                               value like(xmlNodePtr)
+
+     d get_xmlDeregisterNodeDefaultValue...
+     d                 pr                  extproc('__get_xmlDeregisterNode+
+     d                                       DefaultValue')
+     d                                     like(xmlDeregisterNodeFunc)
+
+     d set_xmlDeregisterNodeDefaultValue...
+     d                 pr                  extproc('__set_xmlDeregisterNode+
+     d                                       DefaultValue')
+     d  value                              value like(xmlDeregisterNodeFunc)
+
+     d xmlDeregisterNodeDefaultValue...
+     d                 pr                  extproc('__call_xmlDeregisterNode+
+     d                                       DefaultValue')
+     d  node                               value like(xmlNodePtr)
+
+     d get_xmlParserInputBufferCreateFilenameValue...
+     d                 pr                  extproc('__get_xmlParserInputBuffer+
+     d                                       CreateFilenameValue')
+     d                                     like(xmlParserInputBuffer...
+     d                                       CreateFilenameFunc)
+
+     d set_xmlParserInputBufferCreateFilenameValue...
+     d                 pr                  extproc('__set_xmlParserInputBuffer+
+     d                                       CreateFilenameValue')
+     d  value                              value like(xmlParserInputBuffer...
+     d                                       CreateFilenameFunc)
+
+     d xmlParserInputBufferCreateFilenameValue...
+     d                 pr                  extproc('__call_xmlParserInputBuffer+
+     d                                       CreateFilenameValue')
+     d                                     like(xmlParserInputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+     d  enc                                value like(xmlCharEncoding)
+
+     d get_xmlOutputBufferCreateFilenameValue...
+     d                 pr                  extproc('__get_xmlOutputBuffer+
+     d                                       CreateFilenameValue')
+     d                                     like(
+     d                                       xmlOutputBufferCreateFilenameFunc)
+
+     d set_xmlOutputBufferCreateFilenameValue...
+     d                 pr                  extproc('__set_xmlOutputBuffer+
+     d                                       CreateFilenameValue')
+     d  value                              value like(
+     d                                       xmlOutputBufferCreateFilenameFunc)
+
+     d xmlOutputBufferCreateFilenameValue...
+     d                 pr                  extproc('__call_xmlOutputBuffer+
+     d                                       CreateFilenameValue')
+     d                                     like(xmlOutputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+     d  encoder                            value like(xmlCharEncodingHandlerPtr)
+     d  compression                  10i 0 value
+
+      /endif                                                                    XML_GLOBALS_H
diff --git a/os400/libxmlrpg/hash.rpgle b/os400/libxmlrpg/hash.rpgle
new file mode 100644
index 0000000..867f98f
--- /dev/null
+++ b/os400/libxmlrpg/hash.rpgle
@@ -0,0 +1,231 @@
+      * Summary: Chained hash tables
+      * Description: This module implements the hash table support used in
+      *              various places in the library.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_HASH_H__)
+      /define XML_HASH_H__
+
+      * The hash table.
+
+     d xmlHashTablePtr...
+     d                 s               *   based(######typedef######)
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/dict"
+
+      * function types:
+
+      * xmlHashDeallocator:
+      * @payload:  the data in the hash
+      * @name:  the name associated
+      *
+      * Callback to free data from a hash.
+
+     d xmlHashDeallocator...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlHashCopier:
+      * @payload:  the data in the hash
+      * @name:  the name associated
+      *
+      * Callback to copy data from a hash.
+      *
+      * Returns a copy of the data or NULL in case of error.
+
+     d xmlHashCopier   s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlHashScanner:
+      * @payload:  the data in the hash
+      * @data:  extra scannner data
+      * @name:  the name associated
+      *
+      * Callback when scanning data in a hash with the simple scanner.
+
+     d xmlHashScanner  s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlHashScannerFull:
+      * @payload:  the data in the hash
+      * @data:  extra scannner data
+      * @name:  the name associated
+      * @name2:  the second name associated
+      * @name3:  the third name associated
+      *
+      * Callback when scanning data in a hash with the full scanner.
+
+     d xmlHashScannerFull...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Constructor and destructor.
+
+     d xmlHashCreate   pr                  extproc('xmlHashCreate')
+     d                                     like(xmlHashTablePtr)
+     d  size                         10i 0 value
+
+     d xmlHashCreateDict...
+     d                 pr                  extproc('xmlHashCreateDict')
+     d                                     like(xmlHashTablePtr)
+     d  size                         10i 0 value
+     d  dict                               value like(xmlDictPtr)
+
+     d xmlHashFree     pr                  extproc('xmlHashFree')
+     d  table                              value like(xmlHashTablePtr)
+     d  f                                  value like(xmlHashDeallocator)
+
+      * Add a new entry to the hash table.
+
+     d xmlHashAddEntry...
+     d                 pr            10i 0 extproc('xmlHashAddEntry')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+
+     d xmlHashUpdateEntry...
+     d                 pr            10i 0 extproc('xmlHashUpdateEntry')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+     d  f                                  value like(xmlHashDeallocator)
+
+     d xmlHashAddEntry2...
+     d                 pr            10i 0 extproc('xmlHashAddEntry2')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+
+     d xmlHashUpdateEntry2...
+     d                 pr            10i 0 extproc('xmlHashUpdateEntry2')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+     d  f                                  value like(xmlHashDeallocator)
+
+     d xmlHashAddEntry3...
+     d                 pr            10i 0 extproc('xmlHashAddEntry3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+
+     d xmlHashUpdateEntry3...
+     d                 pr            10i 0 extproc('xmlHashUpdateEntry3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+     d  f                                  value like(xmlHashDeallocator)
+
+      * Remove an entry from the hash table.
+
+     d xmlHashRemoveEntry...
+     d                 pr            10i 0 extproc('xmlHashRemoveEntry')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashDeallocator)
+
+     d xmlHashRemoveEntry2...
+     d                 pr            10i 0 extproc('xmlHashRemoveEntry2')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashDeallocator)
+
+     d xmlHashRemoveEntry3...
+     d                 pr            10i 0 extproc('xmlHashRemoveEntry3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashDeallocator)
+
+      * Retrieve the userdata.
+
+     d xmlHashLookup   pr              *   extproc('xmlHashLookup')             void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlHashLookup2  pr              *   extproc('xmlHashLookup2')            void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+
+     d xmlHashLookup3  pr              *   extproc('xmlHashLookup3')            void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+
+     d xmlHashQLookup  pr              *   extproc('xmlHashQLookup')            void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlHashQLookup2...
+     d                 pr              *   extproc('xmlHashQLookup2')           void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  prefix2                        *   value options(*string)               const xmlChar *
+
+     d xmlHashQLookup3...
+     d                 pr              *   extproc('xmlHashQLookup3')           void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  prefix2                        *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  prefix3                        *   value options(*string)               const xmlChar *
+
+      * Helpers.
+
+     d xmlHashCopy     pr                  extproc('xmlHashCopy')
+     d                                     like(xmlHashTablePtr)
+     d  table                              value like(xmlHashTablePtr)
+     d  f                                  value like(xmlHashCopier)
+
+     d xmlHashSize     pr            10i 0 extproc('xmlHashSize')
+     d  table                              value like(xmlHashTablePtr)
+
+     d xmlHashScan     pr                  extproc('xmlHashScan')
+     d  table                              value like(xmlHashTablePtr)
+     d  f                                  value like(xmlHashScanner)
+     d  data                           *   value options(*string)               void *
+
+     d xmlHashScan3    pr                  extproc('xmlHashScan3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashScanner)
+     d  data                           *   value options(*string)               void *
+
+     d xmlHashScanFull...
+     d                 pr                  extproc('xmlHashScanFull')
+     d  table                              value like(xmlHashTablePtr)
+     d  f                                  value like(xmlHashScannerFull)
+     d  data                           *   value options(*string)               void *
+
+     d xmlHashScanFull3...
+     d                 pr                  extproc('xmlHashScanFull3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashScannerFull)
+     d  data                           *   value options(*string)               void *
+
+      /endif                                                                    XML_HASH_H__
diff --git a/os400/libxmlrpg/list.rpgle b/os400/libxmlrpg/list.rpgle
new file mode 100644
index 0000000..c62fcbd
--- /dev/null
+++ b/os400/libxmlrpg/list.rpgle
@@ -0,0 +1,168 @@
+      * Summary: lists interfaces
+      * Description: this module implement the list support used in
+      * various place in the library.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_LINK_INCLUDE__)
+      /define XML_LINK_INCLUDE__
+
+      /include "libxmlrpg/xmlversion"
+
+     d xmlLinkPtr      s               *   based(######typedef######)
+
+     d xmlListPtr      s               *   based(######typedef######)
+
+      * xmlListDeallocator:
+      * @lk:  the data to deallocate
+      *
+      * Callback function used to free data from a list.
+
+     d xmlListDeallocator...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlListDataCompare:
+      * @data0: the first data
+      * @data1: the second data
+      *
+      * Callback function used to compare 2 data.
+      *
+      * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
+
+     d xmlListDataCompare...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlListWalker:
+      * @data: the data found in the list
+      * @user: extra user provided data to the walker
+      *
+      * Callback function used when walking a list with xmlListWalk().
+      *
+      * Returns 0 to stop walking the list, 1 otherwise.
+
+     d xmlListWalker   s               *   based(######typedef######)
+     d                                     procptr
+
+      * Creation/Deletion
+
+     d xmlListCreate   pr                  extproc('xmlListCreate')
+     d                                     like(xmlListPtr)
+     d  deallocator                        value like(xmlListDeallocator)
+     d  compare                            value like(xmlListDataCompare)
+
+     d xmlListDelete   pr                  extproc('xmlListDelete')
+     d  l                                  value like(xmlListPtr)
+
+      * Basic Operators
+
+     d xmlListSearch   pr              *   extproc('xmlListSearch')             void *
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListReverseSearch...
+     d                 pr              *   extproc('xmlListReverseSearch')      void *
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListInsert   pr            10i 0 extproc('xmlListInsert')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListAppend   pr            10i 0 extproc('xmlListAppend')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListRemoveFirst...
+     d                 pr            10i 0 extproc('xmlListRemoveFirst')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListRemoveLast...
+     d                 pr            10i 0 extproc('xmlListRemoveLast')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListRemoveAll...
+     d                 pr            10i 0 extproc('xmlListRemoveAll')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListClear    pr                  extproc('xmlListClear')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListEmpty    pr            10i 0 extproc('xmlListEmpty')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListFront    pr                  extproc('xmlListFront')
+     d                                     like(xmlLinkPtr)
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListEnd      pr                  extproc('xmlListEnd')
+     d                                     like(xmlLinkPtr)
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListSize     pr            10i 0 extproc('xmlListSize')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListPopFront...
+     d                 pr                  extproc('xmlListPopFront')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListPopBack...
+     d                 pr                  extproc('xmlListPopBack')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListPushFront...
+     d                 pr            10i 0 extproc('xmlListPushFront')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListPushBack...
+     d                 pr            10i 0 extproc('xmlListPushBack')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+      * Advanced Operators
+
+     d xmlListReverse  pr                  extproc('xmlListReverse')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListSort     pr                  extproc('xmlListSort')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListWalk     pr                  extproc('xmlListWalk')
+     d  l                                  value like(xmlListPtr)
+     d  walker                             value like(xmlListWalker)
+     d  user                           *   value                                const void *
+
+     d xmlListReverseWalk...
+     d                 pr                  extproc('xmlListReverseWalk')
+     d  l                                  value like(xmlListPtr)
+     d  walker                             value like(xmlListWalker)
+     d  user                           *   value                                const void *
+
+     d xmlListMerge    pr                  extproc('xmlListMerge')
+     d  l1                                 value like(xmlListPtr)
+     d  l2                                 value like(xmlListPtr)
+
+     d xmlListDup      pr                  extproc('xmlListDup')
+     d                                     like(xmlListPtr)
+     d  old                                value like(xmlListPtr)
+
+     d xmlListCopy     pr            10i 0 extproc('xmlListCopy')
+     d  cur                                value like(xmlListPtr)
+     d  old                                value like(xmlListPtr)               const
+
+      * Link operators
+
+     d xmlListGetData  pr              *   extproc('xmlListGetData')            void *
+     d  lk                                 value like(xmlLinkPtr)
+
+      * xmlListUnique()
+      * xmlListSwap
+
+      /endif                                                                    XML_LINK_INCLUDE__
diff --git a/os400/libxmlrpg/nanoftp.rpgle b/os400/libxmlrpg/nanoftp.rpgle
new file mode 100644
index 0000000..0637562
--- /dev/null
+++ b/os400/libxmlrpg/nanoftp.rpgle
@@ -0,0 +1,156 @@
+      * Summary: minimal FTP implementation
+      * Description: minimal FTP implementation allowing to fetch resources
+      *              like external subset.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(NANO_FTP_H__)
+      /define NANO_FTP_H__
+
+      /include /libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_FTP_ENABLED)
+
+     d INVALID_SOCKET  c                   -1
+
+      * ftpListCallback:
+      * @userData:  user provided data for the callback
+      * @filename:  the file name (including "->" when links are shown)
+      * @attrib:  the attribute string
+      * @owner:  the owner string
+      * @group:  the group string
+      * @size:  the file size
+      * @links:  the link count
+      * @year:  the year
+      * @month:  the month
+      * @day:  the day
+      * @hour:  the hour
+      * @minute:  the minute
+      *
+      * A callback for the xmlNanoFTPList command.
+      * Note that only one of year and day:minute are specified.
+
+     d ftpListCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * ftpDataCallback:
+      * @userData: the user provided context
+      * @data: the data received
+      * @len: its size in bytes
+      *
+      * A callback for the xmlNanoFTPGet command.
+
+     d ftpDataCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Init
+
+     d xmlNanoFTPInit  pr                  extproc('xmlNanoFTPInit')
+
+     d xmlNanoFTPCleanup...
+     d                 pr                  extproc('xmlNanoFTPCleanup')
+
+      * Creating/freeing contexts.
+
+     d xmlNanoFTPNewCtxt...
+     d                 pr              *   extproc('xmlNanoFTPNewCtxt')         void *
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlNanoFTPFreeCtxt...
+     d                 pr                  extproc('xmlNanoFTPFreeCtxt')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPConnectTo...
+     d                 pr              *   extproc('xmlNanoFTPConnectTo')       void *
+     d  server                         *   value options(*string)               const char *
+     d  port                         10i 0 value
+
+      * Opening/closing session connections.
+
+     d xmlNanoFTPOpen  pr              *   extproc('xmlNanoFTPOpen')            void *
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlNanoFTPConnect...
+     d                 pr            10i 0 extproc('xmlNanoFTPConnect')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPClose...
+     d                 pr            10i 0 extproc('xmlNanoFTPClose')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPQuit  pr            10i 0 extproc('xmlNanoFTPQuit')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPScanProxy...
+     d                 pr                  extproc('xmlNanoFTPScanProxy')
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlNanoFTPProxy...
+     d                 pr                  extproc('xmlNanoFTPProxy')
+     d  host                           *   value options(*string)               const char *
+     d  port                         10i 0 value
+     d  user                           *   value options(*string)               const char *
+     d  passwd                         *   value options(*string)               const char *
+     d  type                         10i 0 value
+
+     d xmlNanoFTPUpdateURL...
+     d                 pr            10i 0 extproc('xmlNanoFTPUpdateURL')
+     d  ctx                            *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+
+      * Rather internal commands.
+
+     d xmlNanoFTPGetResponse...
+     d                 pr            10i 0 extproc('xmlNanoFTPGetResponse')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPCheckResponse...
+     d                 pr            10i 0 extproc('xmlNanoFTPCheckResponse')
+     d  ctx                            *   value                                void *
+
+      * CD/DIR/GET handlers.
+
+     d xmlNanoFTPCwd   pr            10i 0 extproc('xmlNanoFTPCwd')
+     d  ctx                            *   value                                void *
+     d  directory                      *   value options(*string)               const char *
+
+     d xmlNanoFTPDele  pr            10i 0 extproc('xmlNanoFTPDele')
+     d  ctx                            *   value                                void *
+     d  file                           *   value options(*string)               const char *
+
+     d xmlNanoFTPGetConnection...
+     d                 pr            10i 0 extproc('xmlNanoFTPGetConnection')   Socket descriptor
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPCloseConnection...
+     d                 pr            10i 0 extproc('xmlNanoFTPCloseConnection')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPList  pr            10i 0 extproc('xmlNanoFTPList')
+     d  ctx                            *   value                                void *
+     d  callback                           value like(ftpListCallback)
+     d  userData                       *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlNanoFTPGetSocket...
+     d                 pr            10i 0 extproc('xmlNanoFTPGetSocket')       Socket descriptor
+     d  ctx                            *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlNanoFTPGet   pr            10i 0 extproc('xmlNanoFTPGet')
+     d  ctx                            *   value                                void *
+     d  callback                           value like(ftpDataCallback)
+     d  userData                       *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlNanoFTPRead  pr            10i 0 extproc('xmlNanoFTPRead')
+     d  ctx                            *   value                                void *
+     d  dest                           *   value                                void *
+     d  len                          10i 0 value
+
+      /endif                                                                    LIBXML_FTP_ENABLED
+      /endif                                                                    NANO_FTP_H__
diff --git a/os400/libxmlrpg/nanohttp.rpgle b/os400/libxmlrpg/nanohttp.rpgle
new file mode 100644
index 0000000..4a076d2
--- /dev/null
+++ b/os400/libxmlrpg/nanohttp.rpgle
@@ -0,0 +1,103 @@
+      * Summary: minimal HTTP implementation
+      * Description: minimal HTTP implementation allowing to fetch resources
+      *              like external subset.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(NANO_HTTP_H__)
+      /define NANO_HTTP_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_HTTP_ENABLED)
+
+     d xmlNanoHTTPInit...
+     d                 pr                  extproc('xmlNanoHTTPInit')
+
+     d xmlNanoHTTPCleanup...
+     d                 pr                  extproc('xmlNanoHTTPCleanup')
+
+     d xmlNanoHTTPScanProxy...
+     d                 pr                  extproc('xmlNanoHTTPScanProxy')
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlNanoHTTPFetch...
+     d                 pr            10i 0 extproc('xmlNanoHTTPFetch')
+     d  URL                            *   value options(*string)               const char *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlNanoHTTPMethod...
+     d                 pr              *   extproc('xmlNanoHTTPMethod')         void *
+     d  URL                            *   value options(*string)               const char *
+     d  method                         *   value options(*string)               const char *
+     d  input                          *   value options(*string)               const char *
+     d  contentType                    *   value                                char * *
+     d  headers                        *   value options(*string)               const char *
+     d  ilen                         10i 0 value
+
+     d xmlNanoHTTPMethodRedir...
+     d                 pr              *   extproc('xmlNanoHTTPMethodRedir')    void *
+     d  URL                            *   value options(*string)               const char *
+     d  method                         *   value options(*string)               const char *
+     d  input                          *   value options(*string)               const char *
+     d  contentType                    *   value                                char * *
+     d  redir                          *   value                                char * *
+     d  headers                        *   value options(*string)               const char *
+     d  ilen                         10i 0 value
+
+     d xmlNanoHTTPOpen...
+     d                 pr              *   extproc('xmlNanoHTTPOpen')           void *
+     d  URL                            *   value options(*string)               const char *
+     d  contentType                    *                                        char *(*)
+
+     d xmlNanoHTTPOpenRedir...
+     d                 pr              *   extproc('xmlNanoHTTPOpenRedir')      void *
+     d  URL                            *   value options(*string)               const char *
+     d  contentType                    *   value                                char * *
+     d  redir                          *   value                                char * *
+
+     d xmlNanoHTTPReturnCode...
+     d                 pr            10i 0 extproc('xmlNanoHTTPReturnCode')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPAuthHeader...
+     d                 pr              *   extproc('xmlNanoHTTPAuthHeader')     const char *
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPRedir...
+     d                 pr              *   extproc('xmlNanoHTTPRedir')          const char *
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPContentLength...
+     d                 pr            10i 0 extproc('xmlNanoHTTPContentLength')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPEncoding...
+     d                 pr              *   extproc('xmlNanoHTTPEncoding')       const char *
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPMimeType...
+     d                 pr              *   extproc('xmlNanoHTTPMimeType')       const char *
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPRead...
+     d                 pr            10i 0 extproc('xmlNanoHTTPRead')
+     d  ctx                            *   value                                void *
+     d  dest                           *   value                                void *
+     d  len                          10i 0 value
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlNanoHTTPSave...
+     d                 pr            10i 0 extproc('xmlNanoHTTPSave')
+     d  ctxt                           *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlNanoHTTPClose...
+     d                 pr                  extproc('xmlNanoHTTPClose')
+     d  ctx                            *   value                                void *
+
+      /endif                                                                    LIBXML_HTTP_ENABLED
+      /endif                                                                    NANO_HTTP_H__
diff --git a/os400/libxmlrpg/parser.rpgle b/os400/libxmlrpg/parser.rpgle
new file mode 100644
index 0000000..7f29e31
--- /dev/null
+++ b/os400/libxmlrpg/parser.rpgle
@@ -0,0 +1,1407 @@
+      * Summary: the core parser module
+      * Description: Interfaces, constants and types related to the XML parser
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_PARSER_H__)
+      /define XML_PARSER_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/dict"
+      /include "libxmlrpg/hash"
+      /include "libxmlrpg/valid"
+      /include "libxmlrpg/entities"
+      /include "libxmlrpg/xmlerror"
+      /include "libxmlrpg/xmlstring"
+
+      * XML_DEFAULT_VERSION:
+      *
+      * The default version of XML used: 1.0
+
+     d XML_DEFAULT_VERSION...
+     d                 c                   '1.0'
+
+      * xmlParserInput:
+      *
+      * An xmlParserInput is an input flow for the XML processor.
+      * Each entity parsed is associated an xmlParserInput (except the
+      * few predefined ones). This is the case both for internal entities
+      * - in which case the flow is already completely in memory - or
+      * external entities - in which case we use the buf structure for
+      * progressive reading and I18N conversions to the internal UTF-8 format.
+
+      * xmlParserInputDeallocate:
+      * @str:  the string to deallocate
+      *
+      * Callback for freeing some parser input allocations.
+
+     d xmlParserInputDeallocate...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Input buffer
+
+     d xmlParserInput  ds                  based(xmlParserInputPtr)
+     d                                     align qualified
+     d  buf                                like(xmlParserInputBufferPtr)        UTF-8 encoded buffer
+     d  filename                       *                                        const char *
+     d  directory                      *                                        const char *
+     d  base                           *                                        const char *
+     d  cur                            *                                        const char *
+     d  end                            *                                        const char *
+     d  length                       10i 0                                      Length if known
+     d  line                         10i 0                                      Current line
+     d  col                          10i 0                                      Current column
+      *
+      * NOTE: consumed is only tested for equality in the parser code,
+      *       so even if there is an overflow this should not give troubles
+      *       for parsing very large instances.
+      *
+     d  consumed                     20u 0                                      # consumed xmlChars
+     d  free                               like(xmlParserInputDeallocate)       base deallocator
+     d  encoding                       *                                        const xmlChar *
+     d  version                        *                                        const xmlChar *
+     d  standalone                   10i 0                                      Standalone entity ?
+     d  id                           10i 0                                      Entity unique ID
+
+      * xmlParserNodeInfo:
+      *
+      * The parser can be asked to collect Node informations, i.e. at what
+      * place in the file they were detected.
+      * NOTE: This is off by default and not very well tested.
+
+     d xmlParserNodeInfoPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlParserNodeInfo...
+     d                 ds                  based(xmlParserNodeInfoPtr)
+     d                                     align qualified
+     d  node                               like(xmlNodePtr)                     const
+      * Position & line # that text that created the node begins & ends on
+     d  begin_pos                    20u 0
+     d  begin_line                   20u 0
+     d  end_pos                      20u 0
+     d  end_line                     20u 0
+
+     d xmlParserNodeInfoSeqPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlParserNodeInfoSeq...
+     d                 ds                  based(xmlParserNodeInfoSeqPtr)
+     d                                     align qualified
+     d  maximum                      20u 0
+     d  length                       20u 0
+     d  buffer                             like(xmlParserNodeInfoPtr)
+
+      * xmlParserInputState:
+      *
+      * The parser is now working also as a state based parser.
+      * The recursive one use the state info for entities processing.
+
+     d xmlParserInputState...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PARSER_EOF...                                                       Nothing to parse
+     d                 c                   -1
+     d  XML_PARSER_START...                                                     Nothing parsed
+     d                 c                   0
+     d  XML_PARSER_MISC...                                                      Misc* b4 int subset
+     d                 c                   1
+     d  XML_PARSER_PI  c                   2                                    In proc instr
+     d  XML_PARSER_DTD...                                                       In some DTD content
+     d                 c                   3
+     d  XML_PARSER_PROLOG...                                                    Misc* after int sbst
+     d                 c                   4
+     d  XML_PARSER_COMMENT...                                                   Within a comment
+     d                 c                   5
+     d  XML_PARSER_START_TAG...                                                 Within a start tag
+     d                 c                   6
+     d  XML_PARSER_CONTENT...                                                   Within the content
+     d                 c                   7
+     d  XML_PARSER_CDATA_SECTION...                                             Within a CDATA
+     d                 c                   8
+     d  XML_PARSER_END_TAG...                                                   Within a closing tag
+     d                 c                   9
+     d  XML_PARSER_ENTITY_DECL...                                               In an entity decl
+     d                 c                   10
+     d  XML_PARSER_ENTITY_VALUE...                                              In entity decl value
+     d                 c                   11
+     d  XML_PARSER_ATTRIBUTE_VALUE...                                           In attribute value
+     d                 c                   12
+     d  XML_PARSER_SYSTEM_LITERAL...                                            In a SYSTEM value
+     d                 c                   13
+     d  XML_PARSER_EPILOG...                                                    Last end tag Misc*
+     d                 c                   14
+     d  XML_PARSER_IGNORE...                                                    In IGNORED section
+     d                 c                   15
+     d  XML_PARSER_PUBLIC_LITERAL...                                            In a PUBLIC value
+     d                 c                   16
+
+      * XML_DETECT_IDS:
+      *
+      * Bit in the loadsubset context field to tell to do ID/REFs lookups.
+      * Use it to initialize xmlLoadExtDtdDefaultValue.
+
+     d XML_DETECT_IDS  c                   2
+
+      * XML_COMPLETE_ATTRS:
+      *
+      * Bit in the loadsubset context field to tell to do complete the
+      * elements attributes lists with the ones defaulted from the DTDs.
+      * Use it to initialize xmlLoadExtDtdDefaultValue.
+
+     d XML_COMPLETE_ATTRS...
+     d                 c                   4
+
+      * XML_SKIP_IDS:
+      *
+      * Bit in the loadsubset context field to tell to not do ID/REFs
+      *   registration.
+      * Used to initialize xmlLoadExtDtdDefaultValue in some special cases.
+
+     d XML_SKIP_IDS    c                   8
+
+      * xmlParserMode:
+      *
+      * A parser can operate in various modes
+
+     d xmlParserMode   s             10i 0 based(######typedef######)           enum
+     d  XML_PARSE_UNKNOWN...
+     d                 c                   0
+     d  XML_PARSE_DOM...
+     d                 c                   1
+     d  XML_PARSE_SAX...
+     d                 c                   2
+     d  XML_PARSE_PUSH_DOM...
+     d                 c                   3
+     d  XML_PARSE_PUSH_SAX...
+     d                 c                   4
+     d  XML_PARSE_READER...
+     d                 c                   5
+
+      * xmlParserCtxt:
+      *
+      * The parser context.
+      * NOTE This doesn't completely define the parser state, the (current ?)
+      *      design of the parser uses recursive function calls since this allow
+      *      and easy mapping from the production rules of the specification
+      *      to the actual code. The drawback is that the actual function call
+      *      also reflect the parser state. However most of the parsing routines
+      *      takes as the only argument the parser context pointer, so migrating
+      *      to a state based parser for progressive parsing shouldn't be too
+      *      hard.
+
+     d xmlParserCtxt   ds                  based(xmlParserCtxtPtr)
+     d                                     align qualified
+     d  sax                                like(xmlSAXHandlerPtr)               The SAX handler
+     d  userData                       *                                        SAX only-4 DOM build
+     d  myDoc                              like(xmlDocPtr)                      Document being built
+     d  wellFormed                   10i 0                                      Well formed doc ?
+     d  replaceEntities...                                                      Replace entities ?
+     d                               10i 0
+     d  version                        *                                        const xmlChar *
+     d  encoding                       *                                        const xmlChar *
+     d  standalone                   10i 0                                      Standalone document
+     d  html                         10i 0                                      HTML state/type
+      *
+      * Input stream stack
+      *
+     d  input                              like(xmlParserInputPtr)              Current input stream
+     d  inputNr                      10i 0                                      # current in streams
+     d  inputMax                     10i 0                                      Max # of in streams
+     d  inputTab                       *                                        xmlParserInputPtr *
+      *
+      * Node analysis stack only used for DOM building
+      *
+     d  node                               like(xmlNodePtr)                     Current parsed node
+     d  nodeNr                       10i 0                                      Parsing stack depth
+     d  nodeMax                      10i 0                                      Max stack depth
+     d  nodeTab                        *                                        xmlNodePtr *
+      *
+     d  record_info                  10i 0                                      Keep node info ?
+     d  node_seq                           like(xmlParserNodeInfoSeq)           Parsed nodes info
+      *
+     d  errNo                        10i 0                                      Error code
+      *
+     d  hasExternalSubset...
+     d                               10i 0
+     d  hashPErefs                   10i 0
+     d  external                     10i 0                                      Parsing ext. entity?
+      *
+     d  valid                        10i 0                                      Valid document ?
+     d  validate                     10i 0                                      Try to validate ?
+     d  vctxt                              like(xmlValidCtxt)                   Validity context
+      *
+     d  instate                            like(xmlParserInputState)            Current input type
+     d  token                        10i 0                                      Next look-ahead char
+      *
+     d  directory                      *                                        char *
+      *
+      * Node name stack
+      *
+     d  name                           *                                        const xmlChar *
+     d  nameNr                       10i 0                                      Parsing stack depth
+     d  nameMax                      10i 0                                      Max stack depth
+     d  nameTab                        *                                        const xmlChar * *
+      *
+     d  nbChars                      20i 0                                      # xmlChars processed
+     d  checkIndex                   20i 0                                      4 progressive parse
+     d  keepBlanks                   10i 0                                      Ugly but ...
+     d  disableSAX                   10i 0                                      Disable SAX cllbacks
+     d  inSubset                     10i 0                                      In int 1/ext 2 sbset
+     d  intSubName                     *                                        const xmlChar *
+     d  extSubURI                      *                                        const xmlChar *
+     d  extSubSytem                    *                                        const xmlChar *
+      *
+      * xml:space values
+      *
+     d  space                          *                                        int *
+     d  spaceNr                      10i 0                                      Parsing stack depth
+     d  spaceMax                     10i 0                                      Max stack depth
+     d  spaceTab                       *                                        int *
+      *
+     d  depth                        10i 0                                      To detect loops
+     d  entity                             like(xmlParserInputPtr)              To check boundaries
+     d  charset                      10i 0                                      In-memory content
+     d  nodelen                      10i 0                                      Speed up parsing
+     d  nodemem                      10i 0                                      Speed up parsing
+     d  pedantic                     10i 0                                      Enb. pedantic warng
+     d  #private                       *                                        void *
+      *
+     d  loadsubset                   10i 0                                      Load ext. subset ?
+     d  linenumbers                  10i 0                                      Set line numbers ?
+     d  catalogs                       *                                        void *
+     d  recovery                     10i 0                                      Run in recovery mode
+     d  progressive                  10i 0                                      Progressive parsing?
+     d  dict                               like(xmlDictPtr)                     Parser dictionary
+     d  atts                           *                                        const xmlChar *
+     d  maxatts                      10i 0                                      Above array size
+     d  docdict                      10i 0                                      Use dictionary ?
+      *
+      * pre-interned strings
+      *
+     d  str_xml                        *                                        const xmlChar *
+     d  str_xmlns                      *                                        const xmlChar *
+     d  str_xml_ms                     *                                        const xmlChar *
+      *
+      * Everything below is used only by the new SAX mode
+      *
+     d  sax2                         10i 0                                      New SAX mode ?
+     d  nsNr                         10i 0                                      # inherited nmspaces
+     d  nsMax                        10i 0                                      Array size
+     d  nsTab                          *                                        const xmlChar *
+     d  attallocs                      *                                        int *
+     d  pushTab                        *                                        void *
+     d  attsDefault                        like(xmlHashTablePtr)                Defaulted attrs
+     d  attsSpecial                        like(xmlHashTablePtr)                non-CDATA attrs
+     d  nsWellFormed                 10i 0                                      Doc namespace OK ?
+     d  options                      10i 0                                      Extra options
+      *
+      * Those fields are needed only for treaming parsing so far
+      *
+     d  dictNames                    10i 0                                      Dict names in tree ?
+     d  freeElemsNr                  10i 0                                      # free element nodes
+     d  freeElems                          like(xmlNodePtr)                     Free elem nodes list
+     d  freeAttrsNr                  10i 0                                      # free attr. nodes
+     d  freeAttrs                          like(xmlAttrPtr)                     Free attr noes list
+      *
+      * the complete error informations for the last error.
+      *
+     d  lastError                          like(xmlError)
+     d  parseMode                          like(xmlParserMode)                  The parser mode
+     d  nbentities                   20u 0                                      # entity references
+     d  sizeentities                 20u 0                                      Parsed entities size
+      *
+      * for use by HTML non-recursive parser
+      *
+     d  nodeInfo                           like(xmlParserNodeInfo)              Current NodeInfo
+     d  nodeInfoNr                   10i 0                                      Parsing stack depth
+     d  nodeInfoMax                  10i 0                                      Max stack depth
+     d  nodeInfoTab                    *                                        xmlParserNodeInfo *
+      *
+     d  input_id                     10i 0                                      Label inputs ?
+     d  sizeentcopy                  20u 0                                      Entity copy volume
+
+      * xmlSAXLocator:
+      *
+      * A SAX Locator.
+
+     d xmlSAXLocator   ds                  based(xmlSAXLocatorPtr)
+     d                                     align qualified
+     d  getPublicId                    *   procptr
+     d  getSystemId                    *   procptr
+     d  getLineNumber                  *   procptr
+     d  getColumnNumber...
+     d                                 *   procptr
+
+      * xmlSAXHandler:
+      *
+      * A SAX handler is bunch of callbacks called by the parser when
+      * processing of the input generate data or structure informations.
+
+      * resolveEntitySAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @publicId: The public ID of the entity
+      * @systemId: The system ID of the entity
+      *
+      * Callback:
+      * The entity loader, to control the loading of external entities,
+      * the application can either:
+      *    - override this resolveEntity() callback in the SAX block
+      *    - or better use the xmlSetExternalEntityLoader() function to
+      *      set up it's own entity resolution routine
+      *
+      * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+
+     d resolveEntitySAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * internalSubsetSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  the root element name
+      * @ExternalID:  the external ID
+      * @SystemID:  the SYSTEM ID (e.g. filename or URL)
+      *
+      * Callback on internal subset declaration.
+
+     d internalSubsetSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * externalSubsetSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  the root element name
+      * @ExternalID:  the external ID
+      * @SystemID:  the SYSTEM ID (e.g. filename or URL)
+      *
+      * Callback on external subset declaration.
+
+     d externalSubsetSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * getEntitySAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name: The entity name
+      *
+      * Get an entity by name.
+      *
+      * Returns the xmlEntityPtr if found.
+
+     d getEntitySAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * getParameterEntitySAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name: The entity name
+      *
+      * Get a parameter entity by name.
+      *
+      * Returns the xmlEntityPtr if found.
+
+     d getParameterEntitySAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * entityDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  the entity name
+      * @type:  the entity type
+      * @publicId: The public ID of the entity
+      * @systemId: The system ID of the entity
+      * @content: the entity value (without processing).
+      *
+      * An entity definition has been parsed.
+
+     d entityDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * notationDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name: The name of the notation
+      * @publicId: The public ID of the entity
+      * @systemId: The system ID of the entity
+      *
+      * What to do when a notation declaration has been parsed.
+
+     d notationDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * attributeDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @elem:  the name of the element
+      * @fullname:  the attribute name
+      * @type:  the attribute type
+      * @def:  the type of default value
+      * @defaultValue: the attribute default value
+      * @tree:  the tree of enumerated value set
+      *
+      * An attribute definition has been parsed.
+
+     d attributeDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * elementDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  the element name
+      * @type:  the element type
+      * @content: the element value tree
+      *
+      * An element definition has been parsed.
+
+     d elementDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * unparsedEntityDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name: The name of the entity
+      * @publicId: The public ID of the entity
+      * @systemId: The system ID of the entity
+      * @notationName: the name of the notation
+      *
+      * What to do when an unparsed entity declaration is parsed.
+
+     d unparsedEntityDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * setDocumentLocatorSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @loc: A SAX Locator
+      *
+      * Receive the document locator at startup, actually xmlDefaultSAXLocator.
+      * Everything is available on the context, so this is useless in our case.
+
+     d setDocumentLocatorSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * startDocumentSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Called when the document start being processed.
+
+     d startDocumentSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * endDocumentSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Called when the document end has been detected.
+
+     d endDocumentSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * startElementSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  The element name, including namespace prefix
+      * @atts:  An array of name/value attributes pairs, NULL terminated
+      *
+      * Called when an opening tag has been processed.
+
+     d startElementSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * endElementSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  The element name
+      *
+      * Called when the end of an element has been detected.
+
+     d endElementSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * attributeSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  The attribute name, including namespace prefix
+      * @value:  The attribute value
+      *
+      * Handle an attribute that has been read by the parser.
+      * The default handling is to convert the attribute into an
+      * DOM subtree and past it in a new xmlAttr element added to
+      * the element.
+
+     d attributeSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * referenceSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  The entity name
+      *
+      * Called when an entity reference is detected.
+
+     d referenceSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * charactersSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @ch:  a xmlChar string
+      * @len: the number of xmlChar
+      *
+      * Receiving some chars from the parser.
+
+     d charactersSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * ignorableWhitespaceSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @ch:  a xmlChar string
+      * @len: the number of xmlChar
+      *
+      * Receiving some ignorable whitespaces from the parser.
+      * UNUSED: by default the DOM building will use characters.
+
+     d ignorableWhitespaceSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * processingInstructionSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @target:  the target name
+      * @data: the PI data's
+      *
+      * A processing instruction has been parsed.
+
+     d processingInstructionSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * commentSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @value:  the comment content
+      *
+      * A comment has been parsed.
+
+     d commentSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * cdataBlockSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @value:  The pcdata content
+      * @len:  the block length
+      *
+      * Called when a pcdata block has been parsed.
+
+     d cdataBlockSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * warningSAXFunc:
+      * @ctx:  an XML parser context
+      * @msg:  the message to display/transmit
+      * @...:  extra parameters for the message display
+      *
+      * Display and format a warning messages, callback.
+
+     d warningSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * errorSAXFunc:
+      * @ctx:  an XML parser context
+      * @msg:  the message to display/transmit
+      * @...:  extra parameters for the message display
+      *
+      * Display and format an error messages, callback.
+
+     d errorSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * fatalErrorSAXFunc:
+      * @ctx:  an XML parser context
+      * @msg:  the message to display/transmit
+      * @...:  extra parameters for the message display
+      *
+      * Display and format fatal error messages, callback.
+      * Note: so far fatalError() SAX callbacks are not used, error()
+      *       get all the callbacks for errors.
+
+     d fatalErrorSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * isStandaloneSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Is this document tagged standalone?
+      *
+      * Returns 1 if true
+
+     d isStandaloneSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * hasInternalSubsetSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Does this document has an internal subset.
+      *
+      * Returns 1 if true
+
+     d hasInternalSubsetSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * hasExternalSubsetSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Does this document has an external subset?
+      *
+      * Returns 1 if true
+
+     d hasExternalSubsetSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      ************************************************************************
+      *                                                                      *
+      *                      The SAX version 2 API extensions                *
+      *                                                                      *
+      ************************************************************************
+
+      * XML_SAX2_MAGIC:
+      *
+      * Special constant found in SAX2 blocks initialized fields
+
+     d XML_SAX2_MAGIC  c                   X'DEEDBEAF'
+
+      * startElementNsSAX2Func:
+      * @ctx:           the user data (XML parser context)
+      * @localname:     the local name of the element
+      * @prefix:        the element namespace prefix if available
+      * @URI:           the element namespace name if available
+      * @nb_namespaces: number of namespace definitions on that node
+      * @namespaces:    pointer to the array of prefix/URI pairs namespace
+      *                 definitions
+      * @nb_attributes:  the number of attributes on that node
+      * @nb_defaulted:   the number of defaulted attributes. The defaulted
+      *                  ones are at the end of the array
+      * @attributes:     pointer to the array of
+      *                  (localname/prefix/URI/value/end) attribute values.
+      *
+      * SAX2 callback when an element start has been detected by the parser.
+      * It provides the namespace informations for the element, as well as
+      * the new namespace declarations on the element.
+
+     d startElementNsSAX2Func...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * endElementNsSAX2Func:
+      * @ctx:  the user data (XML parser context)
+      * @localname:  the local name of the element
+      * @prefix:  the element namespace prefix if available
+      * @URI:  the element namespace name if available
+      *
+      * SAX2 callback when an element end has been detected by the parser.
+      * It provides the namespace informations for the element.
+
+     d endElementNsSAX2Func...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlSAXHandler   ds                  based(xmlSAXHandlerPtr)
+     d                                     align qualified
+     d  internalSubset...
+     d                                     like(internalSubsetSAXFunc)
+     d  isStandalone                       like(isStandaloneSAXFunc)
+     d  hasInternalSubset...
+     d                                     like(hasInternalSubsetSAXFunc)
+     d  hasExternalSubset...
+     d                                     like(hasExternalSubsetSAXFunc)
+     d  resolveEntity                      like(resolveEntitySAXFunc)
+     d  getEntity                          like(getEntitySAXFunc)
+     d  entityDecl                         like(entityDeclSAXFunc)
+     d  notationDecl                       like(notationDeclSAXFunc)
+     d  attributeDecl                      like(attributeDeclSAXFunc)
+     d  elementDecl                        like(elementDeclSAXFunc)
+     d  unparsedEntityDecl...
+     d                                     like(unparsedEntityDeclSAXFunc)
+     d  setDocumentLocator...
+     d                                     like(setDocumentLocatorSAXFunc)
+     d  startDocument                      like(startDocumentSAXFunc)
+     d  endDocument                        like(endDocumentSAXFunc)
+     d  startElement                       like(startElementSAXFunc)
+     d  endElement                         like(endElementSAXFunc)
+     d  reference                          like(referenceSAXFunc)
+     d  characters                         like(charactersSAXFunc)
+     d  ignorableWhitespace...
+     d                                     like(ignorableWhitespaceSAXFunc)
+     d  processingInstruction...
+     d                                     like(processingInstructionSAXFunc)
+     d  comment                            like(commentSAXFunc)
+     d  warning                            like(warningSAXFunc)
+     d  error                              like(errorSAXFunc)
+     d  fatalError                         like(fatalErrorSAXFunc)
+     d  getParameterEntity...
+     d                                     like(getParameterEntitySAXFunc)
+     d  cdataBlock                         like(cdataBlockSAXFunc)
+     d  externalSubset...
+     d                                     like(externalSubsetSAXFunc)
+     d  initialized                  10u 0
+      *
+      * The following fields are extensions available only on version 2
+      *
+     d  #private                       *                                        void *
+     d  startElementNs...
+     d                                     like(startElementNsSAX2Func)
+     d  endELementNs                       like(endElementNsSAX2Func)
+     d  serror                             like(xmlStructuredErrorFunc)
+
+      * SAX Version 1
+
+     d xmlSAXHandlerV1Ptr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSAXHandlerV1...
+     d                 ds                  based(xmlSAXHandlerV1Ptr)
+     d                                     align qualified
+     d  internalSubset...
+     d                                     like(internalSubsetSAXFunc)
+     d  isStandalone                       like(isStandaloneSAXFunc)
+     d  hasInternalSubset...
+     d                                     like(hasInternalSubsetSAXFunc)
+     d  hasExternalSubset...
+     d                                     like(hasExternalSubsetSAXFunc)
+     d  resolveEntity                      like(resolveEntitySAXFunc)
+     d  getEntity                          like(getEntitySAXFunc)
+     d  entityDecl                         like(entityDeclSAXFunc)
+     d  notationDecl                       like(notationDeclSAXFunc)
+     d  attributeDecl                      like(attributeDeclSAXFunc)
+     d  elementDecl                        like(elementDeclSAXFunc)
+     d  unparsedEntityDecl...
+     d                                     like(unparsedEntityDeclSAXFunc)
+     d  setDocumentLocator...
+     d                                     like(setDocumentLocatorSAXFunc)
+     d  startDocument                      like(startDocumentSAXFunc)
+     d  endDocument                        like(endDocumentSAXFunc)
+     d  startElement                       like(startElementSAXFunc)
+     d  endElement                         like(endElementSAXFunc)
+     d  reference                          like(referenceSAXFunc)
+     d  characters                         like(charactersSAXFunc)
+     d  ignorableWhitespace...
+     d                                     like(ignorableWhitespaceSAXFunc)
+     d  processingInstruction...
+     d                                     like(processingInstructionSAXFunc)
+     d  comment                            like(commentSAXFunc)
+     d  warning                            like(warningSAXFunc)
+     d  error                              like(errorSAXFunc)
+     d  fatalError                         like(fatalErrorSAXFunc)
+     d  getParameterEntity...
+     d                                     like(getParameterEntitySAXFunc)
+     d  cdataBlock                         like(cdataBlockSAXFunc)
+     d  externalSubset...
+     d                                     like(externalSubsetSAXFunc)
+     d  initialized                  10u 0
+
+      * xmlExternalEntityLoader:
+      * @URL: The System ID of the resource requested
+      * @ID: The Public ID of the resource requested
+      * @context: the XML parser context
+      *
+      * External entity loaders types.
+      *
+      * Returns the entity input parser.
+
+     d xmlExternalEntityLoader...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      /include "libxmlrpg/encoding"
+      /include "libxmlrpg/xmlIO"
+      /include "libxmlrpg/globals"
+
+      * Init/Cleanup
+
+     d xmlInitParser   pr                  extproc('xmlInitParser')
+
+     d xmlCleanupParser...
+     d                 pr                  extproc('xmlCleanupParser')
+
+      * Input functions
+
+     d xmlParserInputRead...
+     d                 pr            10i 0 extproc('xmlParserInputRead')
+     d  in                                 value like(xmlParserInputPtr)
+     d  len                          10i 0 value
+
+     d xmlParserInputGrow...
+     d                 pr            10i 0 extproc('xmlParserInputGrow')
+     d  in                                 value like(xmlParserInputPtr)
+     d  len                          10i 0 value
+
+      * Basic parsing Interfaces
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlParseDoc     pr                  extproc('xmlParseDoc')
+     d                                     like(xmlDocPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+
+     d xmlParseFile    pr                  extproc('xmlParseFile')
+     d                                     like(xmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlParseMemory  pr                  extproc('xmlParseMemory')
+     d                                     like(xmlDocPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlSubstituteEntitiesDefault...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlSubstituteEntitiesDefault')
+     d  val                          10i 0 value
+
+     d xmlKeepBlanksDefault...
+     d                 pr            10i 0 extproc('xmlKeepBlanksDefault')
+     d  val                          10i 0 value
+
+     d xmlStopParser   pr                  extproc('xmlStopParser')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlPedanticParserDefault...
+     d                 pr            10i 0 extproc('xmlPedanticParserDefault')
+     d  val                          10i 0 value
+
+     d xmlLineNumbersDefault...
+     d                 pr            10i 0 extproc('xmlLineNumbersDefault')
+     d  val                          10i 0 value
+
+      /if defined(LIBXML_SAX1_ENABLED)
+      * Recovery mode
+
+     d xmlRecoverDoc   pr                  extproc('xmlRecoverDoc')
+     d                                     like(xmlDocPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+
+     d xmlRecoverMemory...
+     d                 pr                  extproc('xmlRecoverMemory')
+     d                                     like(xmlDocPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d xmlRecoverFile  pr                  extproc('xmlRecoverFile')
+     d                                     like(xmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+      * Less common routines and SAX interfaces
+
+     d xmlParseDocument...
+     d                 pr            10i 0 extproc('xmlParseDocument')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlParseExtParsedEnt...
+     d                 pr            10i 0 extproc('xmlParseExtParsedEnt')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlSAXUserParseFile...
+     d                 pr            10i 0 extproc('xmlSAXUserParseFile')
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlSAXUserParseMemory...
+     d                 pr            10i 0 extproc('xmlSAXUserParseMemory')
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d xmlSAXParseDoc  pr                  extproc('xmlSAXParseDoc')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  recovery                     10i 0 value
+
+     d xmlSAXParseMemory...
+     d                 pr                  extproc('xmlSAXParseMemory')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  recovery                     10i 0 value
+
+     d xmlSAXParseMemoryWithData...
+     d                 pr                  extproc('xmlSAXParseMemoryWithData')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  recovery                     10i 0 value
+     d  data                           *   value                                void *
+
+     d xmlSAXParseFile...
+     d                 pr                  extproc('xmlSAXParseFile')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  recovery                     10i 0 value
+
+     d xmlSAXParseFileWithData...
+     d                 pr                  extproc('xmlSAXParseFileWithData')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  recovery                     10i 0 value
+     d  data                           *   value                                void *
+
+     d xmlSAXParseEntity...
+     d                 pr                  extproc('xmlSAXParseEntity')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlParseEntity...
+     d                 pr                  extproc('xmlParseEntity')
+     d                                     like(xmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+      /if defined(LIBXML_VALID_ENABLED)
+     d xmlSAXParseDTD  pr                  extproc('xmlSAXParseDTD')
+     d                                     like(xmlDtdPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d xmlParseDTD     pr                  extproc('xmlParseDTD')
+     d                                     like(xmlDtdPtr)
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d xmlIOParseDTD   pr                  extproc('xmlIOParseDTD')
+     d                                     like(xmlDtdPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  input                              value like(xmlParserInputBufferPtr)
+     d  enc                                value like(xmlCharEncoding)
+      /endif                                                                    LIBXML_VALID_ENABLED
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlParseBalancedChunkMemory...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlParseBalancedChunkMemory')
+     d  doc                                value like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  depth                        10i 0 value
+     d  user_data                      *   value                                void *
+     d  string                         *   value options(*string)               const xmlChar *
+     d  lst                            *   value                                xmlNodePtr *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlParseInNodeContext...
+     d                 pr                  extproc('xmlParseInNodeContext')
+     d                                     like(xmlParserErrors)
+     d  node                               value like(xmlNodePtr)
+     d  data                           *   value options(*string)               const char *
+     d  datalen                      10i 0 value
+     d  options                      10i 0 value
+     d  lst                            *   value                                xmlNodePtr *
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlParseBalancedChunkMemoryRecover...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlParseBalancedChunkMemoryRecover')
+     d  doc                                value like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  depth                        10i 0 value
+     d  string                         *   value options(*string)               const xmlChar *
+     d  lst                            *   value                                xmlNodePtr *
+     d  recover                      10i 0 value
+
+     d xmlParseExternalEntity...
+     d                 pr            10i 0 extproc('xmlParseExternalEntity')
+     d  doc                                value like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  depth                        10i 0 value
+     d  URL                            *   value options(*string)               const xmlChar *
+     d  ID                             *   value options(*string)               const xmlChar *
+     d  lst                            *   value                                xmlNodePtr *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlParseCtxtExternalEntity...
+     d                 pr            10i 0 extproc('xmlParseCtxtExternalEntity')
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  URL                            *   value options(*string)               const xmlChar *
+     d  ID                             *   value options(*string)               const xmlChar *
+     d  lst                            *   value                                xmlNodePtr *
+
+      * Parser contexts handling.
+
+     d xmlNewParserCtxt...
+     d                 pr                  extproc('xmlNewParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+
+     d xmlInitParserCtxt...
+     d                 pr            10i 0 extproc('xmlInitParserCtxt')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlClearParserCtxt...
+     d                 pr                  extproc('xmlClearParserCtxt')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlFreeParserCtxt...
+     d                 pr                  extproc('xmlFreeParserCtxt')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlSetupParserForBuffer...
+     d                 pr                  extproc('xmlSetupParserForBuffer')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const xmlChar *
+     d  filename                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlCreateDocParserCtxt...
+     d                 pr                  extproc('xmlCreateDocParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+      * Reading/setting optional parsing features.
+
+     d xmlGetFeaturesList...
+     d                 pr            10i 0 extproc('xmlGetFeaturesList')
+     d  len                          10i 0
+     d  result                         *                                        const char *(*)
+
+     d xmlGetFeature   pr            10i 0 extproc('xmlGetFeature')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  name                           *   value options(*string)               const char *
+     d  result                         *   value                                void *
+
+     d xmlSetFeature   pr            10i 0 extproc('xmlSetFeature')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  name                           *   value options(*string)               const char *
+     d  result                         *   value                                void *
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+      /if defined(LIBXML_PUSH_ENABLED)
+      * Interfaces for the Push mode.
+
+     d xmlCreatePushParserCtxt...
+     d                 pr                  extproc('xmlCreatePushParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlParseChunk   pr            10i 0 extproc('xmlParseChunk')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  terminate                    10i 0 value
+      /endif                                                                    LIBXML_PUSH_ENABLED
+
+      * Special I/O mode.
+
+     d xmlCreateIOParserCtxt...
+     d                 pr                  extproc('xmlCreateIOParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlNewIOInputStream...
+     d                 pr                  extproc('xmlNewIOInputStream')
+     d                                     like(xmlParserInputPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  input                              value like(xmlParserInputBufferPtr)
+     d  enc                                value like(xmlCharEncoding)
+
+      * Node infos.
+
+     d xmlParserFindNodeInfo...
+     d                 pr              *   extproc('xmlParserFindNodeInfo')     xmlParserNodeInfo *
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  node                               value like(xmlNodePtr)               const
+
+     d xmlInitNodeInfoSeq...
+     d                 pr                  extproc('xmlInitNodeInfoSeq')
+     d  seq                                value like(xmlParserNodeInfoSeqPtr)
+
+     d xmlClearNodeInfoSeq...
+     d                 pr                  extproc('xmlClearNodeInfoSeq')
+     d  seq                                value like(xmlParserNodeInfoSeqPtr)
+
+     d xmlParserFindNodeInfoIndex...
+     d                 pr            20u 0 extproc('xmlParserFindNodeInfoIndex')
+     d  seq                                value like(xmlParserNodeInfoSeqPtr)
+     d  node                               value like(xmlNodePtr)               const
+
+     d xmlParserAddNodeInfo...
+     d                 pr                  extproc('xmlParserAddNodeInfo')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  info                               value like(xmlParserNodeInfoPtr)     const
+
+      * External entities handling actually implemented in xmlIO.
+
+     d xmlSetExternalEntityLoader...
+     d                 pr                  extproc('xmlSetExternalEntityLoader')
+     d  f                                  value like(xmlExternalEntityLoader)
+
+     d xmlGetExternalEntityLoader...
+     d                 pr                  extproc('xmlGetExternalEntityLoader')
+     d                                     like(xmlExternalEntityLoader)
+
+     d xmlLoadExternalEntity...
+     d                 pr                  extproc('xmlLoadExternalEntity')
+     d                                     like(xmlParserInputPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  ID                             *   value options(*string)               const char *
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      * Index lookup, actually implemented in the encoding module
+
+     d xmlByteConsumed...
+     d                 pr            20i 0 extproc('xmlByteConsumed')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      * New set of simpler/more flexible APIs
+
+      * xmlParserOption:
+      *
+      * This is the set of XML parser options that can be passed down
+      * to the xmlReadDoc() and similar calls.
+
+     d xmlParserOption...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PARSE_RECOVER...                                                    Recover on errors
+     d                 c                   X'00000001'
+     d  XML_PARSE_NOENT...                                                      Substitute entities
+     d                 c                   X'00000002'
+     d  XML_PARSE_DTDLOAD...                                                    Load external subset
+     d                 c                   X'00000004'
+     d  XML_PARSE_DTDATTR...                                                    Default DTD attrs
+     d                 c                   X'00000008'
+     d  XML_PARSE_DTDVALID...                                                   Validate with DTD
+     d                 c                   X'00000010'
+     d  XML_PARSE_NOERROR...                                                    Suppress err reports
+     d                 c                   X'00000020'
+     d  XML_PARSE_NOWARNING...                                                  Suppr warn reports
+     d                 c                   X'00000040'
+     d  XML_PARSE_PEDANTIC...                                                   Pedantic err report
+     d                 c                   X'00000080'
+     d  XML_PARSE_NOBLANKS...                                                   Remove blank nodes
+     d                 c                   X'00000100'
+     d  XML_PARSE_SAX1...                                                       Use SAX1 internally
+     d                 c                   X'00000200'
+     d  XML_PARSE_XINCLUDE...                                                   Impl XInclude subst
+     d                 c                   X'00000400'
+     d  XML_PARSE_NONET...                                                      Forbid netwrk access
+     d                 c                   X'00000800'
+     d  XML_PARSE_NODICT...                                                     No contxt dict reuse
+     d                 c                   X'00001000'
+     d  XML_PARSE_NSCLEAN...                                                    Rmv redndnt ns decls
+     d                 c                   X'00002000'
+     d  XML_PARSE_NOCDATA...                                                    CDATA as text nodes
+     d                 c                   X'00004000'
+     d  XML_PARSE_NOXINCNODE...                                                 No XINCL START/END
+     d                 c                   X'00008000'
+     d  XML_PARSE_COMPACT...                                                    Compact text nodes
+     d                 c                   X'00010000'
+     d  XML_PARSE_OLD10...                                                      B4 upd5 compatible
+     d                 c                   X'00020000'
+     d  XML_PARSE_NOBASEFIX...                                                  No XINC xml:base fix
+     d                 c                   X'00040000'
+     d  XML_PARSE_HUGE...                                                       No parsing limit
+     d                 c                   X'00080000'
+     d  XML_PARSE_OLDSAX...                                                     Use SAX2 b4 2.7.0
+     d                 c                   X'00100000'
+     d  XML_PARSE_IGNORE_ENC...                                                 No int doc code hint
+     d                 c                   X'00200000'
+     d  XML_PARSE_BIG_LINES...                                                  Big line#-->PSVI fld
+     d                 c                   X'00400000'
+
+     d xmlCtxtReset    pr                  extproc('xmlCtxtReset')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlCtxtResetPush...
+     d                 pr            10i 0 extproc('xmlCtxtResetPush')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+
+     d xmlCtxtUseOptions...
+     d                 pr            10i 0 extproc('xmlCtxtUseOptions')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  options                      10i 0 value
+
+     d xmlReadDoc      pr                  extproc('xmlReadDoc')
+     d                                     like(xmlDocPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReadFile     pr                  extproc('xmlReadFile')
+     d                                     like(xmlDocPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReadMemory   pr                  extproc('xmlReadMemory')
+     d                                     like(xmlDocPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReadFd       pr                  extproc('xmlReadFd')
+     d                                     like(xmlDocPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReadIO       pr                  extproc('xmlReadIO')
+     d                                     like(xmlDocPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadDoc  pr                  extproc('xmlCtxtReadDoc')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadFile...
+     d                 pr                  extproc('xmlCtxtReadFile')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadMemory...
+     d                 pr                  extproc('xmlCtxtReadMemory')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadFd   pr                  extproc('xmlCtxtReadFd')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadIO   pr                  extproc('xmlCtxtReadIO')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+      * Library wide options
+
+      * xmlFeature:
+      *
+      * Used to examine the existance of features that can be enabled
+      * or disabled at compile-time.
+      * They used to be called XML_FEATURE_xxx but this clashed with Expat
+
+     d xmlFeature      s             10i 0 based(######typedef######)           enum
+     d  XML_WITH_THREAD...
+     d                 c                   1
+     d  XML_WITH_TREE  c                   2
+     d  XML_WITH_OUTPUT...
+     d                 c                   3
+     d  XML_WITH_PUSH  c                   4
+     d  XML_WITH_READER...
+     d                 c                   5
+     d  XML_WITH_PATTERN...
+     d                 c                   6
+     d  XML_WITH_WRITER...
+     d                 c                   7
+     d  XML_WITH_SAX1  c                   8
+     d  XML_WITH_FTP   c                   9
+     d  XML_WITH_HTTP  c                   10
+     d  XML_WITH_VALID...
+     d                 c                   11
+     d  XML_WITH_HTML  c                   12
+     d  XML_WITH_LEGACY...
+     d                 c                   13
+     d  XML_WITH_C14N  c                   14
+     d  XML_WITH_CATALOG...
+     d                 c                   15
+     d  XML_WITH_XPATH...
+     d                 c                   16
+     d  XML_WITH_XPTR  c                   17
+     d  XML_WITH_XINCLUDE...
+     d                 c                   18
+     d  XML_WITH_ICONV...
+     d                 c                   19
+     d  XML_WITH_ISO8859X...
+     d                 c                   20
+     d  XML_WITH_UNICODE...
+     d                 c                   21
+     d  XML_WITH_REGEXP...
+     d                 c                   22
+     d  XML_WITH_AUTOMATA...
+     d                 c                   23
+     d  XML_WITH_EXPR  c                   24
+     d  XML_WITH_SCHEMAS...
+     d                 c                   25
+     d  XML_WITH_SCHEMATRON...
+     d                 c                   26
+     d  XML_WITH_MODULES...
+     d                 c                   27
+     d  XML_WITH_DEBUG...
+     d                 c                   28
+     d  XML_WITH_DEBUG_MEM...
+     d                 c                   29
+     d  XML_WITH_DEBUG_RUN...
+     d                 c                   30
+     d  XML_WITH_ZLIB  c                   31
+     d  XML_WITH_ICU   c                   32
+     d  XML_WITH_LZMA  c                   33
+     d  XML_WITH_NONE  c                   99999
+
+     d xmlHasFeature   pr            10i 0 extproc('xmlHasFeature')
+     d  feature                            value like(xmlFeature)
+
+      /endif                                                                    XML_PARSER_H__
diff --git a/os400/libxmlrpg/parserInternals.rpgle b/os400/libxmlrpg/parserInternals.rpgle
new file mode 100644
index 0000000..6942b7d
--- /dev/null
+++ b/os400/libxmlrpg/parserInternals.rpgle
@@ -0,0 +1,575 @@
+      * Summary: internals routines and limits exported by the parser.
+      * Description: this module exports a number of internal parsing routines
+      *              they are not really all intended for applications but
+      *              can prove useful doing low level processing.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_PARSER_INTERNALS_H__)
+      /define XML_PARSER_INTERNALS_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/HTMLparser"
+      /include "libxmlrpg/chvalid"
+
+      * xmlParserMaxDepth:
+      *
+      * arbitrary depth limit for the XML documents that we allow to
+      * process. This is not a limitation of the parser but a safety
+      * boundary feature, use XML_PARSE_HUGE option to override it.
+
+     d xmlParserMaxDepth...
+     d                 s             10u 0 import('xmlParserMaxDepth')
+
+      * XML_MAX_TEXT_LENGTH:
+      *
+      * Maximum size allowed for a single text node when building a tree.
+      * This is not a limitation of the parser but a safety boundary feature,
+      * use XML_PARSE_HUGE option to override it.
+      * Introduced in 2.9.0
+
+     d XML_MAX_TEXT_LENGTH...
+     d                 c                   10000000
+
+      * XML_MAX_NAME_LENGTH:
+      *
+      * Maximum size allowed for a markup identitier
+      * This is not a limitation of the parser but a safety boundary feature,
+      * use XML_PARSE_HUGE option to override it.
+      * Note that with the use of parsing dictionaries overriding the limit
+      * may result in more runtime memory usage in face of "unfriendly' content
+      * Introduced in 2.9.0
+
+     d XML_MAX_NAME_LENGTH...
+     d                 c                   50000
+
+      * XML_MAX_DICTIONARY_LIMIT:
+      *
+      * Maximum size allowed by the parser for a dictionary by default
+      * This is not a limitation of the parser but a safety boundary feature,
+      * use XML_PARSE_HUGE option to override it.
+      * Introduced in 2.9.0
+
+     d XML_MAX_DICTIONARY_LIMIT...
+     d                 c                   10000000
+
+      * XML_MAX_LOOKUP_LIMIT:
+      *
+      * Maximum size allowed by the parser for ahead lookup
+      * This is an upper boundary enforced by the parser to avoid bad
+      * behaviour on "unfriendly' content
+      * Introduced in 2.9.0
+
+     d XML_MAX_LOOKUP_LIMIT...
+     d                 c                   10000000
+
+      * XML_MAX_NAMELEN:
+      *
+      * Identifiers can be longer, but this will be more costly
+      * at runtime.
+
+     d XML_MAX_NAMELEN...
+     d                 c                   100
+
+      * INPUT_CHUNK:
+      *
+      * The parser tries to always have that amount of input ready.
+      * One of the point is providing context when reporting errors.
+
+     d INPUT_CHUNK     c                   250
+
+      * Global variables used for predefined strings.
+
+     d xmlStringText   s              4    import('xmlStringText')              \0 in 5th byte
+
+     d xmlStringTextNoenc...
+     d                 s              9    import('xmlStringTextNoenc')         \0 in 10th byte
+
+     d xmlStringComment...
+     d                 s              7    import('xmlStringTextComment')       \0 in 8th byte
+
+      * Function to finish the work of the macros where needed.
+
+     d xmlIsLetter     pr            10i 0 extproc('xmlIsLetter')
+     d c                             10i 0 value
+
+      * Parser context.
+
+     d xmlCreateFileParserCtxt...
+     d                 pr                  extproc('xmlCreateFileParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+
+     d xmlCreateURLParserCtxt...
+     d                 pr                  extproc('xmlCreateURLParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+     d options                       10i 0 value
+
+     d xmlCreateMemoryParserCtxt...
+     d                 pr                  extproc('xmlCreateMemoryParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d buffer                          *   value options(*string)               const char *
+     d size                          10i 0 value
+
+     d xmlCreateEntityParserCtxt...
+     d                 pr                  extproc('xmlCreateEntityParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d URL                             *   value options(*string)               const xmlChar *
+     d ID                              *   value options(*string)               const xmlChar *
+     d base                            *   value options(*string)               const xmlChar *
+
+     d xmlSwitchEncoding...
+     d                 pr            10i 0 extproc('xmlSwitchEncoding')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d enc                                 value like(xmlCharEncoding)
+
+     d xmlSwitchToEncoding...
+     d                 pr            10i 0 extproc('xmlSwitchToEncoding')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d handler                             value like(xmlCharEncodingHandlerPtr)
+
+     d xmlSwitchInputEncoding...
+     d                 pr            10i 0 extproc('xmlSwitchInputEncoding')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d input                               value like(xmlParserInputPtr)
+     d handler                             value like(xmlCharEncodingHandlerPtr)
+
+      * Input Streams.
+
+     d xmlNewStringInputStream...
+     d                 pr                  extproc('xmlNewStringInputStream')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d buffer                          *   value options(*string)               const xmlChar *
+
+     d xmlNewEntityInputStream...
+     d                 pr                  extproc('xmlNewEntityInputStream')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d entity                              value like(xmlEntityPtr)
+
+     d xmlPushInput    pr            10i 0 extproc('xmlPushInput')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d input                               value like(xmlParserInputPtr)
+
+     d xmlPopInput     pr                  extproc('xmlPopInput')
+     d                                     like(xmlChar)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlFreeInputStream...
+     d                 pr                  extproc('xmlFreeInputStream')
+     d input                               value like(xmlParserInputPtr)
+
+     d xmlNewInputFromFile...
+     d                 pr                  extproc('xmlNewInputFromFile')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+
+     d xmlNewInputStream...
+     d                 pr                  extproc('xmlNewInputStream')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+      * Namespaces.
+
+     d xmlSplitQName   pr              *   extproc('xmlSplitQName')             xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d name                            *   value options(*string)               const xmlChar *
+     d prefix                          *                                        xmlChar *(*)
+
+      * Generic production rules.
+
+     d xmlParseName    pr              *   extproc('xmlParseName')              const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseNmtoken...
+     d                 pr              *   extproc('xmlParseNmtoken')           xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEntityValue...
+     d                 pr              *   extproc('xmlParseEntityValue')       xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d orig                            *                                        xmlChar *(*)
+
+     d xmlParseAttValue...
+     d                 pr              *   extproc('xmlParseAttValue')          xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseSystemLiteral...
+     d                 pr              *   extproc('xmlParseSystemLiteral')     xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParsePubidLiteral...
+     d                 pr              *   extproc('xmlParsePubidLiteral')      xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseCharData...
+     d                 pr                  extproc('xmlParseCharData')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d cdata                         10i 0 value
+
+     d xmlParseExternalID...
+     d                 pr              *   extproc('xmlParseExternalID')        xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d publicID                        *                                        xmlChar *(*)
+     d strict                        10i 0 value
+
+     d xmlParseComment...
+     d                 pr                  extproc('xmlParseComment')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParsePITarget...
+     d                 pr              *   extproc('xmlParsePITarget')          const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParsePI      pr                  extproc('xmlParsePI')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseNotationDecl...
+     d                 pr                  extproc('xmlParseNotationDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEntityDecl...
+     d                 pr                  extproc('xmlParseEntityDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseDefaultDecl...
+     d                 pr            10i 0 extproc('xmlParseDefaultDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                           *                                        xmlChar *(*)
+
+     d xmlParseNotationType...
+     d                 pr                  extproc('xmlParseNotationType')
+     d                                     like(xmlEnumerationPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEnumerationType...
+     d                 pr                  extproc('xmlParseEnumerationType')
+     d                                     like(xmlEnumerationPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEnumeratedType...
+     d                 pr            10i 0 extproc('xmlParseEnumeratedType')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d tree                            *   value                                xmlEnumerationPtr *
+
+     d xmlParseAttributeType...
+     d                 pr            10i 0 extproc('xmlParseAttributeType')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d tree                            *   value                                xmlEnumerationPtr *
+
+     d xmlParseAttributeListDecl...
+     d                 pr                  extproc('xmlParseAttributeListDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseElementMixedContentDecl...
+     d                 pr                  extproc(
+     d                                     'xmlParseElementMixedContentDecl')
+     d                                     like(xmlElementContentPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d inputchk                      10i 0 value
+
+     d xmlParseElementChildrenContentDecl...
+     d                 pr                  extproc(
+     d                                     'xmlParseElementChildrenContentDecl')
+     d                                     like(xmlElementContentPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d inputchk                      10i 0 value
+
+     d xmlParseElementContentDecl...
+     d                 pr            10i 0 extproc('xmlParseElementContentDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d name                            *   value options(*string)               const xmlChar *
+     d result                          *   value                                xmlElementContentPtr
+     d                                                                          *
+
+     d xmlParseElementDecl...
+     d                 pr            10i 0 extproc('xmlParseElementDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseMarkupDecl...
+     d                 pr                  extproc('xmlParseMarkupDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseCharRef...
+     d                 pr            10i 0 extproc('xmlParseCharRef')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEntityRef...
+     d                 pr                  extproc('xmlParseEntityRef')
+     d                                     like(xmlEntityPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseReference...
+     d                 pr                  extproc('xmlParseReference')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParsePEReference...
+     d                 pr                  extproc('xmlParsePEReference')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseDocTypeDecl...
+     d                 pr                  extproc('xmlParseDocTypeDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlParseAttribute...
+     d                 pr              *   extproc('xmlParseAttribute')         const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                           *                                        xmlChar *(*)
+
+     d xmlParseStartTag...
+     d                 pr              *   extproc('xmlParseStartTag')          const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEndTag  pr                  extproc('xmlParseEndTag')
+     d ctxt                                value like(xmlParserCtxtPtr)
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlParseCDSect  pr                  extproc('xmlParseCDSect')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseContent...
+     d                 pr                  extproc('xmlParseContent')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseElement...
+     d                 pr                  extproc('xmlParseElement')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseVersionNum...
+     d                 pr              *   extproc('xmlParseVersionNum')        xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseVersionInfo...
+     d                 pr              *   extproc('xmlParseVersionInfo')       xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEncName...
+     d                 pr              *   extproc('xmlParseEncName')           xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEncodingDecl...
+     d                 pr              *   extproc('xmlParseEncodingDecl')      const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseSDDecl  pr            10i 0 extproc('xmlParseSDDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseXMLDecl...
+     d                 pr                  extproc('xmlParseXMLDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseTextDecl...
+     d                 pr                  extproc('xmlParseTextDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseMisc    pr                  extproc('xmlParseMisc')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseExternalSubset...
+     d                 pr                  extproc('xmlParseExternalSubset')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d ExternalID                      *   value options(*string)               const xmlChar *
+     d SystemID                        *   value options(*string)               const xmlChar *
+
+      * XML_SUBSTITUTE_NONE:
+      *
+      * If no entities need to be substituted.
+
+     d XML_SUBSTITUTE_NONE...
+     d                 c                   0
+
+      * XML_SUBSTITUTE_REF:
+      *
+      * Whether general entities need to be substituted.
+
+     d XML_SUBSTITUTE_REF...
+     d                 c                   1
+
+      * XML_SUBSTITUTE_PEREF:
+      *
+      * Whether parameter entities need to be substituted.
+
+     d XML_SUBSTITUTE_PEREF...
+     d                 c                   2
+
+      * XML_SUBSTITUTE_BOTH:
+      *
+      * Both general and parameter entities need to be substituted.
+
+     d XML_SUBSTITUTE_BOTH...
+     d                 c                   3
+
+     d xmlStringDecodeEntities...
+     d                 pr              *   extproc('xmlStringDecodeEntities')   xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d what                          10i 0 value
+     d end                                 value like(xmlChar)
+     d end2                                value like(xmlChar)
+     d end3                                value like(xmlChar)
+
+     d xmlStringLenDecodeEntities...
+     d                 pr              *   extproc('xmlStringLenDecodeEntities')xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d len                           10i 0 value
+     d what                          10i 0 value
+     d end                                 value like(xmlChar)
+     d end2                                value like(xmlChar)
+     d end3                                value like(xmlChar)
+
+      * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP.
+
+     d nodePush        pr            10i 0 extproc('nodePush')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                               value like(xmlNodePtr)
+
+     d nodePop         pr                  extproc('nodePop')
+     d                                     like(xmlNodePtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d inputPush       pr            10i 0 extproc('inputPush')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                               value like(xmlParserInputPtr)
+
+     d inputPop        pr                  extproc('inputPop')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d namePop         pr              *   extproc('namePop')                   const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d namePush        pr            10i 0 extproc('namePush')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                           *   value options(*string)               const xmlChar *
+
+      * other commodities shared between parser.c and parserInternals.
+
+     d xmlSkipBlankChars...
+     d                 pr            10i 0 extproc('xmlSkipBlankChars')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlStringCurrentChar...
+     d                 pr            10i 0 extproc('xmlStringCurrentChar')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d cur                             *   value options(*string)               const xmlChar *
+     d len                             *   value                                int *
+
+     d xmlParserHandlePEReference...
+     d                 pr                  extproc('xmlParserHandlePEReference')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlCheckLanguageID...
+     d                 pr            10i 0 extproc('xmlCheckLanguageID')
+     d lang                            *   value options(*string)               const xmlChar *
+
+      * Really core function shared with HTML parser.
+
+     d xmlCurrentChar  pr            10i 0 extproc('xmlCurrentChar')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d len                             *   value                                int *
+
+     d xmlCopyCharMultiByte...
+     d                 pr            10i 0 extproc('xmlCopyCharMultiByte')
+     d out                             *   value options(*string)               xmlChar *
+     d val                           10i 0 value
+
+     d xmlCopyChar     pr            10i 0 extproc('xmlCopyChar')
+     d len                           10i 0 value
+     d out                             *   value options(*string)               xmlChar *
+     d val                           10i 0 value
+
+     d xmlNextChar     pr                  extproc('xmlNextChar')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParserInputShrink...
+     d                 pr                  extproc('xmlParserInputShrink')
+     d in                                  value like(xmlParserInputPtr)
+
+      /if defined(LIBXML_HTML_ENABLED)
+
+      * Actually comes from the HTML parser but launched from the init stuff.
+
+     d htmlInitAutoClose...
+     d                 pr                  extproc('htmlInitAutoClose')
+
+     d htmlCreateFileParserCtxt...
+     d                 pr                  extproc('htmlCreateFileParserCtxt')
+     d                                     like(htmlParserCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+     d encoding                        *   value options(*string)               const char *
+      /endif
+
+      * Specific function to keep track of entities references
+      * and used by the XSLT debugger.
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+      * xmlEntityReferenceFunc:
+      * @ent: the entity
+      * @firstNode:  the fist node in the chunk
+      * @lastNode:  the last nod in the chunk
+      *
+      * Callback function used when one needs to be able to track back the
+      * provenance of a chunk of nodes inherited from an entity replacement.
+
+     d xmlEntityReferenceFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlSetEntityReferenceFunc...
+     d                 pr                  extproc('xmlSetEntityReferenceFunc')
+     d func                                value like(xmlEntityReferenceFunc)
+
+     d xmlParseQuotedString...
+     d                 pr              *   extproc('xmlParseQuotedString')      xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseNamespace...
+     d                 pr                  extproc('xmlParseNamespace')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlNamespaceParseNSDef...
+     d                 pr              *   extproc('xmlNamespaceParseNSDef')    xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlScanName     pr              *   extproc('xmlScanName')               xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlNamespaceParseNCName...
+     d                 pr              *   extproc('xmlNamespaceParseNCName')   xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParserHandleReference...
+     d                 pr                  extproc('xmlParserHandleReference')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlNamespaceParseQName...
+     d                 pr              *   extproc('xmlNamespaceParseQName')    xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d prefix                          *                                        xmlChar *(*)
+
+      * Entities
+
+     d xmlDecodeEntities...
+     d                 pr              *   extproc('xmlDecodeEntities')         xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d len                           10i 0 value
+     d what                          10i 0 value
+     d end                                 value like(xmlChar)
+     d end2                                value like(xmlChar)
+     d end3                                value like(xmlChar)
+
+     d xmlHandleEntity...
+     d                 pr                  extproc('xmlHandleEntity')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d entity                              value like(xmlEntityPtr)
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+      /endif
diff --git a/os400/libxmlrpg/pattern.rpgle b/os400/libxmlrpg/pattern.rpgle
new file mode 100644
index 0000000..2e881e5
--- /dev/null
+++ b/os400/libxmlrpg/pattern.rpgle
@@ -0,0 +1,117 @@
+      * Summary: pattern expression handling
+      * Description: allows to compile and test pattern expressions for nodes
+      *              either in a tree or based on a parser state.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_PATTERN_H__)
+      /define XML_PATTERN_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/dict"
+
+      /if defined(LIBXML_PATTERN_ENABLED)
+
+      * xmlPattern:
+      *
+      * A compiled (XPath based) pattern to select nodes
+
+     d xmlPatternPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlPatternFlags:
+      *
+      * This is the set of options affecting the behaviour of pattern
+      * matching with this module
+
+     d xmlPatternFlags...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PATTERN_DEFAULT...                                                  Simple pattern match
+     d                 c                   X'0000'
+     d  XML_PATTERN_XPATH...                                                    Std XPath pattern
+     d                 c                   X'0001'
+     d  XML_PATTERN_XSSEL...                                                    Schm sel XPth subset
+     d                 c                   X'0002'
+     d  XML_PATTERN_XSFIELD...                                                  Schm fld XPth subset
+     d                 c                   X'0004'
+
+     d xmlFreePattern  pr                  extproc('xmlFreePattern')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlFreePatternList...
+     d                 pr                  extproc('xmlFreePatternList')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatterncompile...
+     d                 pr                  extproc('xmlPatterncompile')
+     d                                     like(xmlPatternPtr)
+     d  pattern                        *   value options(*string)               const xmlChar *
+     d  dict                           *   value                                xmlDict *
+     d  flags                        10i 0 value
+     d  namespaces                     *                                        const xmlChar *(*)
+
+     d xmlPatternMatch...
+     d                 pr            10i 0 extproc('xmlPatternMatch')
+     d  comp                               value like(xmlPatternPtr)
+     d  node                               value like(xmlNodePtr)
+
+      * streaming interfaces
+
+     d xmlStreamCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlPatternStreamable...
+     d                 pr            10i 0 extproc('xmlPatternStreamable')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatternMaxDepth...
+     d                 pr            10i 0 extproc('xmlPatternMaxDepth')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatternMinDepth...
+     d                 pr            10i 0 extproc('xmlPatternMinDepth')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatternFromRoot...
+     d                 pr            10i 0 extproc('xmlPatternFromRoot')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatternGetStreamCtxt...
+     d                 pr                  extproc('xmlPatternGetStreamCtxt')
+     d                                     like(xmlStreamCtxtPtr)
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlFreeStreamCtxt...
+     d                 pr                  extproc('xmlFreeStreamCtxt')
+     d  stream                             value like(xmlStreamCtxtPtr)
+
+     d xmlStreamPushNode...
+     d                 pr            10i 0 extproc('xmlStreamPushNode')
+     d  stream                             value like(xmlStreamCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+     d  nodeType                     10i 0 value
+
+     d xmlStreamPush   pr            10i 0 extproc('xmlStreamPush')
+     d  stream                             value like(xmlStreamCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+
+     d xmlStreamPushAttr...
+     d                 pr            10i 0 extproc('xmlStreamPushAttr')
+     d  stream                             value like(xmlStreamCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+
+     d xmlStreamPop    pr            10i 0 extproc('xmlStreamPop')
+     d  stream                             value like(xmlStreamCtxtPtr)
+
+     d xmlStreamWantsAnyNode...
+     d                 pr            10i 0 extproc('xmlStreamWantsAnyNode')
+     d  stream                             value like(xmlStreamCtxtPtr)
+
+      /endif                                                                    LIBXML_PATTERN_ENBLD
+      /endif                                                                    XML_PATTERN_H__
diff --git a/os400/libxmlrpg/relaxng.rpgle b/os400/libxmlrpg/relaxng.rpgle
new file mode 100644
index 0000000..af662aa
--- /dev/null
+++ b/os400/libxmlrpg/relaxng.rpgle
@@ -0,0 +1,297 @@
+      * Summary: implementation of the Relax-NG validation
+      * Description: implementation of the Relax-NG validation
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_RELAX_NG__)
+      /define XML_RELAX_NG__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/hash"
+      /include "libxmlrpg/xmlstring"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+
+     d xmlRelaxNGPtr   s               *   based(######typedef######)
+
+      * xmlRelaxNGValidityErrorFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of an error callback from a Relax-NG validation
+
+     d xmlRelaxNGValidityErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlRelaxNGValidityWarningFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of a warning callback from a Relax-NG validation
+
+     d xmlRelaxNGValidityWarningFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * A schemas validation context
+
+     d xmlRelaxNGParserCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlRelaxNGValidCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlRelaxNGValidErr:
+      *
+      * List of possible Relax NG validation errors
+
+     d xmlRelaxNGValidErr...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_RELAXNG_OK...
+     d                 c                   0
+     d  XML_RELAXNG_ERR_MEMORY...
+     d                 c                   1
+     d  XML_RELAXNG_ERR_TYPE...
+     d                 c                   2
+     d  XML_RELAXNG_ERR_TYPEVAL...
+     d                 c                   3
+     d  XML_RELAXNG_ERR_DUPID...
+     d                 c                   4
+     d  XML_RELAXNG_ERR_TYPECMP...
+     d                 c                   5
+     d  XML_RELAXNG_ERR_NOSTATE...
+     d                 c                   6
+     d  XML_RELAXNG_ERR_NODEFINE...
+     d                 c                   7
+     d  XML_RELAXNG_ERR_LISTEXTRA...
+     d                 c                   8
+     d  XML_RELAXNG_ERR_LISTEMPTY...
+     d                 c                   9
+     d  XML_RELAXNG_ERR_INTERNODATA...
+     d                 c                   10
+     d  XML_RELAXNG_ERR_INTERSEQ...
+     d                 c                   11
+     d  XML_RELAXNG_ERR_INTEREXTRA...
+     d                 c                   12
+     d  XML_RELAXNG_ERR_ELEMNAME...
+     d                 c                   13
+     d  XML_RELAXNG_ERR_ATTRNAME...
+     d                 c                   14
+     d  XML_RELAXNG_ERR_ELEMNONS...
+     d                 c                   15
+     d  XML_RELAXNG_ERR_ATTRNONS...
+     d                 c                   16
+     d  XML_RELAXNG_ERR_ELEMWRONGNS...
+     d                 c                   17
+     d  XML_RELAXNG_ERR_ATTRWRONGNS...
+     d                 c                   18
+     d  XML_RELAXNG_ERR_ELEMEXTRANS...
+     d                 c                   19
+     d  XML_RELAXNG_ERR_ATTREXTRANS...
+     d                 c                   20
+     d  XML_RELAXNG_ERR_ELEMNOTEMPTY...
+     d                 c                   21
+     d  XML_RELAXNG_ERR_NOELEM...
+     d                 c                   22
+     d  XML_RELAXNG_ERR_NOTELEM...
+     d                 c                   23
+     d  XML_RELAXNG_ERR_ATTRVALID...
+     d                 c                   24
+     d  XML_RELAXNG_ERR_CONTENTVALID...
+     d                 c                   25
+     d  XML_RELAXNG_ERR_EXTRACONTENT...
+     d                 c                   26
+     d  XML_RELAXNG_ERR_INVALIDATTR...
+     d                 c                   27
+     d  XML_RELAXNG_ERR_DATAELEM...
+     d                 c                   28
+     d  XML_RELAXNG_ERR_VALELEM...
+     d                 c                   29
+     d  XML_RELAXNG_ERR_LISTELEM...
+     d                 c                   30
+     d  XML_RELAXNG_ERR_DATATYPE...
+     d                 c                   31
+     d  XML_RELAXNG_ERR_VALUE...
+     d                 c                   32
+     d  XML_RELAXNG_ERR_LIST...
+     d                 c                   33
+     d  XML_RELAXNG_ERR_NOGRAMMAR...
+     d                 c                   34
+     d  XML_RELAXNG_ERR_EXTRADATA...
+     d                 c                   35
+     d  XML_RELAXNG_ERR_LACKDATA...
+     d                 c                   36
+     d  XML_RELAXNG_ERR_INTERNAL...
+     d                 c                   37
+     d  XML_RELAXNG_ERR_ELEMWRONG...
+     d                 c                   38
+     d  XML_RELAXNG_ERR_TEXTWRONG...
+     d                 c                   39
+
+      * xmlRelaxNGParserFlags:
+      *
+      * List of possible Relax NG Parser flags
+
+     d xmlRelaxNGParserFlag...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_RELAXNGP_NONE...
+     d                 c                   0
+     d  XML_RELAXNGP_FREE_DOC...
+     d                 c                   1
+     d  XML_RELAXNGP_CRNG...
+     d                 c                   2
+
+     d xmlRelaxNGInitTypes...
+     d                 pr            10i 0 extproc('xmlRelaxNGInitTypes')
+
+     d xmlRelaxNGCleanupTypes...
+     d                 pr                  extproc('xmlRelaxNGCleanupTypes')
+
+
+      * Interfaces for parsing.
+
+     d xmlRelaxNGNewParserCtxt...
+     d                 pr                  extproc('xmlRelaxNGNewParserCtxt')
+     d                                     like(xmlRelaxNGParserCtxtPtr)
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlRelaxNGNewMemParserCtxt...
+     d                 pr                  extproc('xmlRelaxNGNewMemParserCtxt')
+     d                                     like(xmlRelaxNGParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d xmlRelaxNGNewDocParserCtxt...
+     d                 pr                  extproc('xmlRelaxNGNewDocParserCtxt')
+     d                                     like(xmlRelaxNGParserCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlRelaxParserSetFlag...
+     d                 pr            10i 0 extproc('xmlRelaxParserSetFlag')
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+     d  flag                         10i 0 value
+
+     d xmlRelaxNGFreeParserCtxt...
+     d                 pr                  extproc('xmlRelaxNGFreeParserCtxt')
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+
+     d xmlRelaxNGSetParserErrors...
+     d                 pr                  extproc('xmlRelaxNGSetParserErrors')
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+     d  err                                value
+     d                                     like(xmlRelaxNGValidityErrorFunc)
+     d  warn                               value
+     d                                     like(xmlRelaxNGValidityWarningFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlRelaxNGGetParserErrors...
+     d                 pr            10i 0 extproc('xmlRelaxNGGetParserErrors')
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+     d  err                                like(xmlRelaxNGValidityErrorFunc)
+     d  warn                               like(xmlRelaxNGValidityWarningFunc)
+     d  ctx                            *                                        void *(*)
+
+     d xmlRelaxNGSetParserStructuredErrors...
+     d                 pr                  extproc(
+     d                                     'xmlRelaxNGSetParserStructuredErrors'
+     d                                     )
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+     d  serror                             value like(xmlStructuredErrorFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlRelaxNGParse...
+     d                 pr                  extproc('xmlRelaxNGParse')
+     d                                     like(xmlRelaxNGPtr)
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+
+     d xmlRelaxNGFree  pr                  extproc('xmlRelaxNGFree')
+     d  schema                             value like(xmlRelaxNGPtr)
+
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlRelaxNGDump  pr                  extproc('xmlRelaxNGDump')
+     d  output                         *   value                                FILE *
+     d  schema                             value like(xmlRelaxNGPtr)
+
+     d xmlRelaxNGDumpTree...
+     d                 pr                  extproc('xmlRelaxNGDumpTree')
+     d  output                         *   value                                FILE *
+     d  schema                             value like(xmlRelaxNGPtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Interfaces for validating
+
+     d xmlRelaxNGSetValidErrors...
+     d                 pr                  extproc('xmlRelaxNGSetValidErrors')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  err                                value
+     d                                     like(xmlRelaxNGValidityErrorFunc)
+     d  warn                               value
+     d                                     like(xmlRelaxNGValidityWarningFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlRelaxNGGetValidErrors...
+     d                 pr            10i 0 extproc('xmlRelaxNGGetValidErrors')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  err                                like(xmlRelaxNGValidityErrorFunc)
+     d  warn                               like(xmlRelaxNGValidityWarningFunc)
+     d  ctx                            *   value                                void * *
+
+     d xmlRelaxNGSetValidStructuredErrors...
+     d                 pr                  extproc(
+     d                                     'xmlRelaxNGSetValidStructuredErrors')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  serror                             value like(xmlStructuredErrorFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlRelaxNGNewValidCtxt...
+     d                 pr                  extproc('xmlRelaxNGNewValidCtxt')
+     d                                     like(xmlRelaxNGValidCtxtPtr)
+     d  schema                             value like(xmlRelaxNGPtr)
+
+     d xmlRelaxNGFreeValidCtxt...
+     d                 pr                  extproc('xmlRelaxNGFreeValidCtxt')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+
+     d xmlRelaxNGValidateDoc...
+     d                 pr            10i 0 extproc('xmlRelaxNGValidateDoc')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+      * Interfaces for progressive validation when possible
+
+     d xmlRelaxNGValidatePushElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlRelaxNGValidatePushElement')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlRelaxNGValidatePushCData...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlRelaxNGValidatePushCData')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  data                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlRelaxNGValidatePopElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlRelaxNGValidatePopElement')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlRelaxNGValidateFullElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlRelaxNGValidateFullElement')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+      /endif                                                                    LIBXML_SCHEMAS_ENBLD
+      /endif                                                                    XML_RELAX_NG__
diff --git a/os400/libxmlrpg/schemasInternals.rpgle b/os400/libxmlrpg/schemasInternals.rpgle
new file mode 100644
index 0000000..edeea5b
--- /dev/null
+++ b/os400/libxmlrpg/schemasInternals.rpgle
@@ -0,0 +1,1137 @@
+      * Summary: internal interfaces for XML Schemas
+      * Description: internal interfaces for the XML Schemas handling
+      *              and schema validity checking
+      *              The Schemas development is a Work In Progress.
+      *              Some of those interfaces are not garanteed to be API or
+      *                ABI stable !
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SCHEMA_INTERNALS_H__)
+      /define XML_SCHEMA_INTERNALS_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+      /include "libxmlrpg/xmlregexp"
+      /include "libxmlrpg/hash"
+      /include "libxmlrpg/dict"
+
+     d xmlSchemaValType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMAS_UNKNOWN...
+     d                 c                   0
+     d  XML_SCHEMAS_STRING...
+     d                 c                   1
+     d  XML_SCHEMAS_NORMSTRING...
+     d                 c                   2
+     d  XML_SCHEMAS_DECIMAL...
+     d                 c                   3
+     d  XML_SCHEMAS_TIME...
+     d                 c                   4
+     d  XML_SCHEMAS_GDAY...
+     d                 c                   5
+     d  XML_SCHEMAS_GMONTH...
+     d                 c                   6
+     d  XML_SCHEMAS_GMONTHDAY...
+     d                 c                   7
+     d  XML_SCHEMAS_GYEAR...
+     d                 c                   8
+     d  XML_SCHEMAS_GYEARMONTH...
+     d                 c                   9
+     d  XML_SCHEMAS_DATE...
+     d                 c                   10
+     d  XML_SCHEMAS_DATETIME...
+     d                 c                   11
+     d  XML_SCHEMAS_DURATION...
+     d                 c                   12
+     d  XML_SCHEMAS_FLOAT...
+     d                 c                   13
+     d  XML_SCHEMAS_DOUBLE...
+     d                 c                   14
+     d  XML_SCHEMAS_BOOLEAN...
+     d                 c                   15
+     d  XML_SCHEMAS_TOKEN...
+     d                 c                   16
+     d  XML_SCHEMAS_LANGUAGE...
+     d                 c                   17
+     d  XML_SCHEMAS_NMTOKEN...
+     d                 c                   18
+     d  XML_SCHEMAS_NMTOKENS...
+     d                 c                   19
+     d  XML_SCHEMAS_NAME...
+     d                 c                   20
+     d  XML_SCHEMAS_QNAME...
+     d                 c                   21
+     d  XML_SCHEMAS_NCNAME...
+     d                 c                   22
+     d  XML_SCHEMAS_ID...
+     d                 c                   23
+     d  XML_SCHEMAS_IDREF...
+     d                 c                   24
+     d  XML_SCHEMAS_IDREFS...
+     d                 c                   25
+     d  XML_SCHEMAS_ENTITY...
+     d                 c                   26
+     d  XML_SCHEMAS_ENTITIES...
+     d                 c                   27
+     d  XML_SCHEMAS_NOTATION...
+     d                 c                   28
+     d  XML_SCHEMAS_ANYURI...
+     d                 c                   29
+     d  XML_SCHEMAS_INTEGER...
+     d                 c                   30
+     d  XML_SCHEMAS_NPINTEGER...
+     d                 c                   31
+     d  XML_SCHEMAS_NINTEGER...
+     d                 c                   32
+     d  XML_SCHEMAS_NNINTEGER...
+     d                 c                   33
+     d  XML_SCHEMAS_PINTEGER...
+     d                 c                   34
+     d  XML_SCHEMAS_INT...
+     d                 c                   35
+     d  XML_SCHEMAS_UINT...
+     d                 c                   36
+     d  XML_SCHEMAS_LONG...
+     d                 c                   37
+     d  XML_SCHEMAS_ULONG...
+     d                 c                   38
+     d  XML_SCHEMAS_SHORT...
+     d                 c                   39
+     d  XML_SCHEMAS_USHORT...
+     d                 c                   40
+     d  XML_SCHEMAS_BYTE...
+     d                 c                   41
+     d  XML_SCHEMAS_UBYTE...
+     d                 c                   42
+     d  XML_SCHEMAS_HEXBINARY...
+     d                 c                   43
+     d  XML_SCHEMAS_BASE64BINARY...
+     d                 c                   44
+     d  XML_SCHEMAS_ANYTYPE...
+     d                 c                   45
+     d  XML_SCHEMAS_ANYSIMPLETYPE...
+     d                 c                   46
+
+      * XML Schemas defines multiple type of types.
+
+     d xmlSchemaTypeType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMA_TYPE_BASIC...                                                A builtin datatype
+     d                 c                   1
+     d  XML_SCHEMA_TYPE_ANY...
+     d                 c                   2
+     d  XML_SCHEMA_TYPE_FACET...
+     d                 c                   3
+     d  XML_SCHEMA_TYPE_SIMPLE...
+     d                 c                   4
+     d  XML_SCHEMA_TYPE_COMPLEX...
+     d                 c                   5
+     d  XML_SCHEMA_TYPE_SEQUENCE...
+     d                 c                   6
+     d  XML_SCHEMA_TYPE_CHOICE...
+     d                 c                   7
+     d  XML_SCHEMA_TYPE_ALL...
+     d                 c                   8
+     d  XML_SCHEMA_TYPE_SIMPLE_CONTENT...
+     d                 c                   9
+     d  XML_SCHEMA_TYPE_COMPLEX_CONTENT...
+     d                 c                   10
+     d  XML_SCHEMA_TYPE_UR...
+     d                 c                   11
+     d  XML_SCHEMA_TYPE_RESTRICTION...
+     d                 c                   12
+     d  XML_SCHEMA_TYPE_EXTENSION...
+     d                 c                   13
+     d  XML_SCHEMA_TYPE_ELEMENT...
+     d                 c                   14
+     d  XML_SCHEMA_TYPE_ATTRIBUTE...
+     d                 c                   15
+     d  XML_SCHEMA_TYPE_ATTRIBUTEGROUP...
+     d                 c                   16
+     d  XML_SCHEMA_TYPE_GROUP...
+     d                 c                   17
+     d  XML_SCHEMA_TYPE_NOTATION...
+     d                 c                   18
+     d  XML_SCHEMA_TYPE_LIST...
+     d                 c                   19
+     d  XML_SCHEMA_TYPE_UNION...
+     d                 c                   20
+     d  XML_SCHEMA_TYPE_ANY_ATTRIBUTE...
+     d                 c                   21
+     d  XML_SCHEMA_TYPE_IDC_UNIQUE...
+     d                 c                   22
+     d  XML_SCHEMA_TYPE_IDC_KEY...
+     d                 c                   23
+     d  XML_SCHEMA_TYPE_IDC_KEYREF...
+     d                 c                   24
+     d  XML_SCHEMA_TYPE_PARTICLE...
+     d                 c                   25
+     d  XML_SCHEMA_TYPE_ATTRIBUTE_USE...
+     d                 c                   26
+     d  XML_SCHEMA_FACET_MININCLUSIVE...
+     d                 c                   1000
+     d  XML_SCHEMA_FACET_MINEXCLUSIVE...
+     d                 c                   1001
+     d  XML_SCHEMA_FACET_MAXINCLUSIVE...
+     d                 c                   1002
+     d  XML_SCHEMA_FACET_MAXEXCLUSIVE...
+     d                 c                   1003
+     d  XML_SCHEMA_FACET_TOTALDIGITS...
+     d                 c                   1004
+     d  XML_SCHEMA_FACET_FRACTIONDIGITS...
+     d                 c                   1005
+     d  XML_SCHEMA_FACET_PATTERN...
+     d                 c                   1006
+     d  XML_SCHEMA_FACET_ENUMERATION...
+     d                 c                   1007
+     d  XML_SCHEMA_FACET_WHITESPACE...
+     d                 c                   1008
+     d  XML_SCHEMA_FACET_LENGTH...
+     d                 c                   1009
+     d  XML_SCHEMA_FACET_MAXLENGTH...
+     d                 c                   1010
+     d  XML_SCHEMA_FACET_MINLENGTH...
+     d                 c                   1011
+     d  XML_SCHEMA_EXTRA_QNAMEREF...
+     d                 c                   2000
+     d  XML_SCHEMA_EXTRA_ATTR_USE_PROHIB...
+     d                 c                   2001
+
+     d xmlSchemaContentType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMA_CONTENT_UNKNOWN...
+     d                 c                   0
+     d  XML_SCHEMA_CONTENT_EMPTY...
+     d                 c                   1
+     d  XML_SCHEMA_CONTENT_ELEMENTS...
+     d                 c                   2
+     d  XML_SCHEMA_CONTENT_MIXED...
+     d                 c                   3
+     d  XML_SCHEMA_CONTENT_SIMPLE...
+     d                 c                   4
+     d  XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS...                                 Obsolete
+     d                 c                   5
+     d  XML_SCHEMA_CONTENT_BASIC...
+     d                 c                   6
+     d  XML_SCHEMA_CONTENT_ANY...
+     d                 c                   7
+
+     d xmlSchemaValPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaTypePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaFacetPtr...
+     d                 s               *   based(######typedef######)
+
+      * Annotation
+
+     d xmlSchemaAnnotPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaAnnot  ds                  based(xmlSchemaAnnotPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaAnnotPtr)
+     d  content                            like(xmlNodePtr)                     The annotation
+
+      * XML_SCHEMAS_ANYATTR_SKIP:
+      *
+      * Skip unknown attribute from validation
+      * Obsolete, not used anymore.
+
+     d XML_SCHEMAS_ANYATTR_SKIP...
+     d                 c                   1
+
+      * XML_SCHEMAS_ANYATTR_LAX:
+      *
+      * Ignore validation non definition on attributes
+      * Obsolete, not used anymore.
+
+     d XML_SCHEMAS_ANYATTR_LAX...
+     d                 c                   2
+
+      * XML_SCHEMAS_ANYATTR_STRICT:
+      *
+      * Apply strict validation rules on attributes
+      * Obsolete, not used anymore.
+
+     d XML_SCHEMAS_ANYATTR_STRICT...
+     d                 c                   3
+
+      * XML_SCHEMAS_ANY_SKIP:
+      *
+      * Skip unknown attribute from validation
+
+     d XML_SCHEMAS_ANY_SKIP...
+     d                 c                   1
+
+      * XML_SCHEMAS_ANY_LAX:
+      *
+      * Used by wildcards.
+      * Validate if type found, don't worry if not found
+
+     d XML_SCHEMAS_ANY_LAX...
+     d                 c                   2
+
+      * XML_SCHEMAS_ANY_STRICT:
+      *
+      * Used by wildcards.
+      * Apply strict validation rules
+
+     d XML_SCHEMAS_ANY_STRICT...
+     d                 c                   3
+
+      * XML_SCHEMAS_ATTR_USE_PROHIBITED:
+      *
+      * Used by wildcards.
+      * The attribute is prohibited.
+
+     d XML_SCHEMAS_ATTR_USE_PROHIBITED...
+     d                 c                   0
+
+      * XML_SCHEMAS_ATTR_USE_REQUIRED:
+      *
+      * The attribute is required.
+
+     d XML_SCHEMAS_ATTR_USE_REQUIRED...
+     d                 c                   1
+
+      * XML_SCHEMAS_ATTR_USE_OPTIONAL:
+      *
+      * The attribute is optional.
+
+     d XML_SCHEMAS_ATTR_USE_OPTIONAL...
+     d                 c                   2
+
+      * XML_SCHEMAS_ATTR_GLOBAL:
+      *
+      * allow elements in no namespace
+
+     d XML_SCHEMAS_ATTR_GLOBAL...
+     d                 c                   X'0001'
+
+      * XML_SCHEMAS_ATTR_NSDEFAULT:
+      *
+      * allow elements in no namespace
+
+     d XML_SCHEMAS_ATTR_NSDEFAULT...
+     d                 c                   X'0080'
+
+      * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED:
+      *
+      * this is set when the "type" and "ref" references
+      * have been resolved.
+
+     d XML_SCHEMAS_ATTR_INTERNAL_RESOLVED...
+     d                 c                   X'0100'
+
+      * XML_SCHEMAS_ATTR_FIXED:
+      *
+      * the attribute has a fixed value
+
+     d XML_SCHEMAS_ATTR_FIXED...
+     d                 c                   X'0200'
+
+      * xmlSchemaAttribute:
+      * An attribute definition.
+
+     d xmlSchemaAttributePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaAttribute...
+     d                 ds                  based(xmlSchemaAttributePtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)
+     d  next                               like(xmlSchemaAttributePtr)          Next attribute
+     d  name                           *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  ref                            *                                        const xmlChar *
+     d  refNs                          *                                        const xmlChar *
+     d  typeName                       *                                        const xmlChar *
+     d  typeNs                         *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+      *
+     d  base                               like(xmlSchemaTypePtr)               Deprecated
+     d  occurs                       10i 0                                      Deprecated
+     d  defValue                       *                                        const xmlChar *
+     d  subtypes                           like(xmlSchemaTypePtr)               The type definition
+     d  node                               like(xmlNodePtr)
+     d  targetNamespace...                                                      const xmlChar *
+     d                                 *
+     d  flags                        10i 0
+     d  refPrefix                      *                                        const xmlChar *
+     d  defVal                             like(xmlSchemaValPtr)                Compiled constraint
+     d  refDecl                            like(xmlSchemaAttributePtr)          Deprecated
+
+      * xmlSchemaAttributeLink:
+      * Used to build a list of attribute uses on complexType definitions.
+      * WARNING: Deprecated; not used.
+
+     d xmlSchemaAttributeLinkPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaAttributeLink...
+     d                 ds                  based(xmlSchemaAttributeLinkPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaAttributeLinkPtr)      The next link
+     d  attr                               like(xmlSchemaAttributePtr)          The linked attribute
+
+      * XML_SCHEMAS_WILDCARD_COMPLETE:
+      *
+      * If the wildcard is complete.
+
+     d XML_SCHEMAS_WILDCARD_COMPLETE...
+     d                 c                   X'0001'
+
+      * xmlSchemaCharValueLink:
+      * Used to build a list of namespaces on wildcards.
+
+     d xmlSchemaWildcardNsPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaWildcardNs...
+     d                 ds                  based(xmlSchemaWildcardNsPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaWildcardNsPtr)         The next link
+     d  value                          *                                        const xmlChar *
+
+      * xmlSchemaWildcard.
+      * A wildcard.
+
+     d xmlSchemaWildcardPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaWildcard...
+     d                 ds                  based(xmlSchemaWildcardPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  id                             *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  node                               like(xmlNodePtr)
+     d  minOccurs                    10i 0                                      Deprecated; not used
+     d  maxOccurs                    10i 0                                      Deprecated; not used
+     d  processContents...
+     d                               10i 0
+     d  any                          10i 0                                      Ns constraint ##any?
+     d  nsSet                              like(xmlSchemaWildcardNsPtr)         Allowed namspce list
+     d  negNsSet                           like(xmlSchemaWildcardNsPtr)         Negated namespace
+     d  flags                        10i 0                                      Deprecated; not used
+
+      * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED:
+      *
+      * The attribute wildcard has been already builded.
+
+     d XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED...
+     d                 c                   X'0001'
+
+      * XML_SCHEMAS_ATTRGROUP_GLOBAL:
+      *
+      * The attribute wildcard has been already builded.
+
+     d XML_SCHEMAS_ATTRGROUP_GLOBAL...
+     d                 c                   X'0002'
+
+      * XML_SCHEMAS_ATTRGROUP_MARKED:
+      *
+      * Marks the attr group as marked; used for circular checks.
+
+     d XML_SCHEMAS_ATTRGROUP_MARKED...
+     d                 c                   X'0004'
+
+      * XML_SCHEMAS_ATTRGROUP_REDEFINED:
+      *
+      * The attr group was redefined.
+
+     d XML_SCHEMAS_ATTRGROUP_REDEFINED...
+     d                 c                   X'0008'
+
+      * XML_SCHEMAS_ATTRGROUP_HAS_REFS:
+      *
+      * Whether this attr. group contains attr. group references.
+
+     d XML_SCHEMAS_ATTRGROUP_HAS_REFS...
+     d                 c                   X'0010'
+
+      * An attribute group definition.
+      *
+      * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
+      * must be kept similar
+
+     d xmlSchemaAttributeGroupPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaAttributeGroup...
+     d                 ds                  based(xmlSchemaAttributeGroupPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  next                               like(xmlSchemaAttributePtr)          Next attribute
+     d  name                           *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  ref                            *                                        const xmlChar *
+     d  refNs                          *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+      *
+     d  attributes                         like(xmlSchemaAttributePtr)          Deprecated; not used
+     d  node                               like(xmlNodePtr)
+     d  flags                        10i 0
+     d  attributeWildcard...
+     d                                     like(xmlSchemaWildcardPtr)
+     d  refPrefix                      *                                        const xmlChar *
+     d  refItem                            like(xmlSchemaAttributeGroupPtr)     Deprecated; not used
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+     d  attrUses                       *                                        void *
+
+      * xmlSchemaTypeLink:
+      * Used to build a list of types (e.g. member types of
+      * simpleType with variety "union").
+
+     d xmlSchemaTypeLinkPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaTypeLink...
+     d                 ds                  based(xmlSchemaTypeLinkPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaTypeLinkPtr)           Next type link
+     d  type                               like(xmlSchemaTypePtr)               Linked type
+
+      * xmlSchemaFacetLink:
+      * Used to build a list of facets.
+
+     d xmlSchemaFacetLinkPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaFacetLink...
+     d                 ds                  based(xmlSchemaFacetLinkPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaFacetLinkPtr)          Next facet link
+     d  facet                              like(xmlSchemaFacetPtr)              Linked facet
+
+      * XML_SCHEMAS_TYPE_MIXED:
+      *
+      * the element content type is mixed
+
+     d XML_SCHEMAS_TYPE_MIXED...
+     d                 c                   X'00000001'
+
+      * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION:
+      *
+      * the simple or complex type has a derivation method of "extension".
+
+     d XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION...
+     d                 c                   X'00000002'
+
+      * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION:
+      *
+      * the simple or complex type has a derivation method of "restriction".
+
+     d XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION...
+     d                 c                   X'00000004'
+
+      * XML_SCHEMAS_TYPE_GLOBAL:
+      *
+      * the type is global
+
+     d XML_SCHEMAS_TYPE_GLOBAL...
+     d                 c                   X'00000008'
+
+      * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD:
+      *
+      * the complexType owns an attribute wildcard, i.e.
+      * it can be freed by the complexType
+
+     d XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD...                                  Obsolete.
+     d                 c                   X'00000010'
+
+      * XML_SCHEMAS_TYPE_VARIETY_ABSENT:
+      *
+      * the simpleType has a variety of "absent".
+      * TODO: Actually not necessary :-/, since if
+      * none of the variety flags occur then it's
+      * automatically absent.
+
+     d XML_SCHEMAS_TYPE_VARIETY_ABSENT...
+     d                 c                   X'00000020'
+
+      * XML_SCHEMAS_TYPE_VARIETY_LIST:
+      *
+      * the simpleType has a variety of "list".
+
+     d XML_SCHEMAS_TYPE_VARIETY_LIST...
+     d                 c                   X'00000040'
+
+      * XML_SCHEMAS_TYPE_VARIETY_UNION:
+      *
+      * the simpleType has a variety of "union".
+
+     d XML_SCHEMAS_TYPE_VARIETY_UNION...
+     d                 c                   X'00000080'
+
+      * XML_SCHEMAS_TYPE_VARIETY_ATOMIC:
+      *
+      * the simpleType has a variety of "union".
+
+     d XML_SCHEMAS_TYPE_VARIETY_ATOMIC...
+     d                 c                   X'00000100'
+
+      * XML_SCHEMAS_TYPE_FINAL_EXTENSION:
+      *
+      * the complexType has a final of "extension".
+
+     d XML_SCHEMAS_TYPE_FINAL_EXTENSION...
+     d                 c                   X'00000200'
+
+      * XML_SCHEMAS_TYPE_FINAL_RESTRICTION:
+      *
+      * the simpleType/complexType has a final of "restriction".
+
+     d XML_SCHEMAS_TYPE_FINAL_RESTRICTION...
+     d                 c                   X'00000400'
+
+      * XML_SCHEMAS_TYPE_FINAL_LIST:
+      *
+      * the simpleType has a final of "list".
+
+     d XML_SCHEMAS_TYPE_FINAL_LIST...
+     d                 c                   X'00000800'
+
+      * XML_SCHEMAS_TYPE_FINAL_UNION:
+      *
+      * the simpleType has a final of "union".
+
+     d XML_SCHEMAS_TYPE_FINAL_UNION...
+     d                 c                   X'00001000'
+
+      * XML_SCHEMAS_TYPE_FINAL_DEFAULT:
+      *
+      * the simpleType has a final of "default".
+
+     d XML_SCHEMAS_TYPE_FINAL_DEFAULT...
+     d                 c                   X'00002000'
+
+      * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE:
+      *
+      * Marks the item as a builtin primitive.
+
+     d XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE...
+     d                 c                   X'00004000'
+
+      * XML_SCHEMAS_TYPE_MARKED:
+      *
+      * Marks the item as marked; used for circular checks.
+
+     d XML_SCHEMAS_TYPE_MARKED...
+     d                 c                   X'00010000'
+
+      * XML_SCHEMAS_TYPE_BLOCK_DEFAULT:
+      *
+      * the complexType did not specify 'block' so use the default of the
+      * <schema> item.
+
+     d XML_SCHEMAS_TYPE_BLOCK_DEFAULT...
+     d                 c                   X'00020000'
+
+      * XML_SCHEMAS_TYPE_BLOCK_EXTENSION:
+      *
+      * the complexType has a 'block' of "extension".
+
+     d XML_SCHEMAS_TYPE_BLOCK_EXTENSION...
+     d                 c                   X'00040000'
+
+      * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION:
+      *
+      * the complexType has a 'block' of "restriction".
+
+     d XML_SCHEMAS_TYPE_BLOCK_RESTRICTION...
+     d                 c                   X'00080000'
+
+      * XML_SCHEMAS_TYPE_ABSTRACT:
+      *
+      * the simple/complexType is abstract.
+
+     d XML_SCHEMAS_TYPE_ABSTRACT...
+     d                 c                   X'00100000'
+
+      * XML_SCHEMAS_TYPE_FACETSNEEDVALUE:
+      *
+      * indicates if the facets need a computed value
+
+     d XML_SCHEMAS_TYPE_FACETSNEEDVALUE...
+     d                 c                   X'00200000'
+
+      * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:
+      *
+      * indicates that the type was typefixed
+
+     d XML_SCHEMAS_TYPE_INTERNAL_RESOLVED...
+     d                 c                   X'00400000'
+
+      * XML_SCHEMAS_TYPE_INTERNAL_INVALID:
+      *
+      * indicates that the type is invalid
+
+     d XML_SCHEMAS_TYPE_INTERNAL_INVALID...
+     d                 c                   X'00800000'
+
+      * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE:
+      *
+      * a whitespace-facet value of "preserve"
+
+     d XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE...
+     d                 c                   X'01000000'
+
+      * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE:
+      *
+      * a whitespace-facet value of "replace"
+
+     d XML_SCHEMAS_TYPE_WHITESPACE_REPLACE...
+     d                 c                   X'02000000'
+
+      * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE:
+      *
+      * a whitespace-facet value of "collapse"
+
+     d XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE...
+     d                 c                   X'04000000'
+
+      * XML_SCHEMAS_TYPE_HAS_FACETS:
+      *
+      * has facets
+
+     d XML_SCHEMAS_TYPE_HAS_FACETS...
+     d                 c                   X'08000000'
+
+      * XML_SCHEMAS_TYPE_NORMVALUENEEDED:
+      *
+      * indicates if the facets (pattern) need a normalized value
+
+     d XML_SCHEMAS_TYPE_NORMVALUENEEDED...
+     d                 c                   X'10000000'
+
+      * XML_SCHEMAS_TYPE_FIXUP_1:
+      *
+      * First stage of fixup was done.
+
+     d XML_SCHEMAS_TYPE_FIXUP_1...
+     d                 c                   X'20000000'
+
+      * XML_SCHEMAS_TYPE_REDEFINED:
+      *
+      * The type was redefined.
+
+     d XML_SCHEMAS_TYPE_REDEFINED...
+     d                 c                   X'40000000'
+
+      /if defined(DISABLED)
+      * XML_SCHEMAS_TYPE_REDEFINING:
+      *
+      * The type redefines an other type.
+
+     d XML_SCHEMAS_TYPE_REDEFINING...
+     d                 c                   X'80000000'
+      /endif
+
+      * _xmlSchemaType:
+      *
+      * Schemas type definition.
+
+     d xmlSchemaType...
+     d                 ds                  based(xmlSchemaTypePtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  next                               like(xmlSchemaTypePtr)               Next type
+     d  name                           *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  ref                            *                                        const xmlChar *
+     d  refNs                          *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  subtypes                           like(xmlSchemaTypePtr)
+     d  attributes                         like(xmlSchemaAttributePtr)          Deprecated; not used
+     d  node                               like(xmlNodePtr)
+     d  minOccurs                    10i 0                                      Deprecated; not used
+     d  maxOccurs                    10i 0                                      Deprecated; not used
+      *
+     d  flags                        10i 0
+     d  contentType                        like(xmlSchemaContentType)
+     d  base                           *                                        const xmlChar *
+     d  baseNs                         *                                        const xmlChar *
+     d  baseType                           like(xmlSchemaTypePtr)               Base type component
+     d  facets                             like(xmlSchemaFacetPtr)              Local facets
+     d  redef                              like(xmlSchemaTypePtr)               Deprecated; not used
+     d  recurse                      10i 0                                      Obsolete
+     d  attributeUses                      like(xmlSchemaAttributeLinkPtr)      Deprecated; not used
+     d  attributeWildcard...
+     d                                     like(xmlSchemaWildcardPtr)
+     d  builtInType                  10i 0                                      Built-in types type
+     d  memberTypes                        like(xmlSchemaTypeLinkPtr)           Union member-types
+     d  facetSet                           like(xmlSchemaFacetLinkPtr)          All facets
+     d  refPrefix                      *                                        const xmlChar *
+     d  contentTypeDef...
+     d                                     like(xmlSchemaTypePtr)
+     d  contModel                          like(xmlRegexpPtr)                   Content model autom.
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+     d  attrUses                       *                                        void *
+
+      * xmlSchemaElement:
+      * An element definition.
+      *
+      * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
+      * structures must be kept similar
+
+      * XML_SCHEMAS_ELEM_NILLABLE:
+      *
+      * the element is nillable
+
+     d XML_SCHEMAS_ELEM_NILLABLE...
+     d                 c                   X'00000001'
+
+      * XML_SCHEMAS_ELEM_GLOBAL:
+      *
+      * the element is global
+
+     d XML_SCHEMAS_ELEM_GLOBAL...
+     d                 c                   X'00000002'
+
+      * XML_SCHEMAS_ELEM_DEFAULT:
+      *
+      * the element has a default value
+
+     d XML_SCHEMAS_ELEM_DEFAULT...
+     d                 c                   X'00000004'
+
+      * XML_SCHEMAS_ELEM_FIXED:
+      *
+      * the element has a fixed value
+
+     d XML_SCHEMAS_ELEM_FIXED...
+     d                 c                   X'00000008'
+
+      * XML_SCHEMAS_ELEM_ABSTRACT:
+      *
+      * the element is abstract
+
+     d XML_SCHEMAS_ELEM_ABSTRACT...
+     d                 c                   X'00000010'
+
+      * XML_SCHEMAS_ELEM_TOPLEVEL:
+      *
+      * the element is top level
+      * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead
+
+     d XML_SCHEMAS_ELEM_TOPLEVEL...
+     d                 c                   X'00000020'
+
+      * XML_SCHEMAS_ELEM_REF:
+      *
+      * the element is a reference to a type
+
+     d XML_SCHEMAS_ELEM_REF...
+     d                 c                   X'00000040'
+
+      * XML_SCHEMAS_ELEM_NSDEFAULT:
+      *
+      * allow elements in no namespace
+      * Obsolete, not used anymore.
+
+     d XML_SCHEMAS_ELEM_NSDEFAULT...
+     d                 c                   X'00000080'
+
+      * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED:
+      *
+      * this is set when "type", "ref", "substitutionGroup"
+      * references have been resolved.
+
+     d XML_SCHEMAS_ELEM_INTERNAL_RESOLVED...
+     d                 c                   X'00000100'
+
+      * XML_SCHEMAS_ELEM_CIRCULAR:
+      *
+      * a helper flag for the search of circular references.
+
+     d XML_SCHEMAS_ELEM_CIRCULAR...
+     d                 c                   X'00000200'
+
+      * XML_SCHEMAS_ELEM_BLOCK_ABSENT:
+      *
+      * the "block" attribute is absent
+
+     d XML_SCHEMAS_ELEM_BLOCK_ABSENT...
+     d                 c                   X'00000400'
+
+      * XML_SCHEMAS_ELEM_BLOCK_EXTENSION:
+      *
+      * disallowed substitutions are absent
+
+     d XML_SCHEMAS_ELEM_BLOCK_EXTENSION...
+     d                 c                   X'00000800'
+
+      * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:
+      *
+      * disallowed substitutions: "restriction"
+
+     d XML_SCHEMAS_ELEM_BLOCK_RESTRICTION...
+     d                 c                   X'00001000'
+
+      * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:
+      *
+      * disallowed substitutions: "substituion"
+
+     d XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION...
+     d                 c                   X'00002000'
+
+      * XML_SCHEMAS_ELEM_FINAL_ABSENT:
+      *
+      * substitution group exclusions are absent
+
+     d XML_SCHEMAS_ELEM_FINAL_ABSENT...
+     d                 c                   X'00004000'
+
+      * XML_SCHEMAS_ELEM_FINAL_EXTENSION:
+      *
+      * substitution group exclusions: "extension"
+
+     d XML_SCHEMAS_ELEM_FINAL_EXTENSION...
+     d                 c                   X'00008000'
+
+      * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:
+      *
+      * substitution group exclusions: "restriction"
+
+     d XML_SCHEMAS_ELEM_FINAL_RESTRICTION...
+     d                 c                   X'00010000'
+
+      * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD:
+      *
+      * the declaration is a substitution group head
+
+     d XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD...
+     d                 c                   X'00020000'
+
+      * XML_SCHEMAS_ELEM_INTERNAL_CHECKED:
+      *
+      * this is set when the elem decl has been checked against
+      * all constraints
+
+     d XML_SCHEMAS_ELEM_INTERNAL_CHECKED...
+     d                 c                   X'00040000'
+
+     d xmlSchemaElementPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaElement...
+     d                 ds                  based(xmlSchemaElementPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  next                               like(xmlSchemaElementPtr)            Not used ?
+     d  name                           *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  ref                            *                                        const xmlChar *
+     d  refNs                          *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  subtypes                           like(xmlSchemaTypePtr)
+     d  attributes                         like(xmlSchemaAttributePtr)          Deprecated; not used
+     d  node                               like(xmlNodePtr)
+     d  minOccurs                    10i 0                                      Deprecated; not used
+     d  maxOccurs                    10i 0                                      Deprecated; not used
+      *
+     d  flags                        10i 0
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+     d  namedType                      *                                        const xmlChar *
+     d  namedTypeNs                    *                                        const xmlChar *
+     d  substGroup                     *                                        const xmlChar *
+     d  substGroupNs                   *                                        const xmlChar *
+     d  scope                          *                                        const xmlChar *
+     d  value                          *                                        const xmlChar *
+     d  refDecl                            like(xmlSchemaElementPtr)
+     d  contModel                          like(xmlRegexpPtr)
+     d  contentType                        like(xmlSchemaContentType)
+     d  refPrefix                      *                                        const xmlChar *
+     d  devVal                             like(xmlSchemaValPtr)                Comp val constraint
+     d  idcs                           *                                        void *
+
+      * XML_SCHEMAS_FACET_UNKNOWN:
+      *
+      * unknown facet handling
+
+     d XML_SCHEMAS_FACET_UNKNOWN...
+     d                 c                   0
+
+      * XML_SCHEMAS_FACET_PRESERVE:
+      *
+      * preserve the type of the facet
+
+     d XML_SCHEMAS_FACET_PRESERVE...
+     d                 c                   1
+
+      * XML_SCHEMAS_FACET_REPLACE:
+      *
+      * replace the type of the facet
+
+     d XML_SCHEMAS_FACET_REPLACE...
+     d                 c                   2
+
+      * XML_SCHEMAS_FACET_COLLAPSE:
+      *
+      * collapse the types of the facet
+
+     d XML_SCHEMAS_FACET_COLLAPSE...
+     d                 c                   3
+
+      * A facet definition.
+
+     d xmlSchemaFacet...
+     d                 ds                  based(xmlSchemaFacetPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  next                               like(xmlSchemaFacetPtr)              Next type in seq.
+     d  value                          *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  node                               like(xmlNodePtr)
+     d  fixed                        10i 0                                      _FACET_PRESERVE, etc
+     d  whitespace                   10i 0
+     d  val                                like(xmlSchemaValPtr)                Compiled value
+     d  regexp                             like(xmlRegexpPtr)                   Regexp for patterns
+
+      * A notation definition.
+
+     d xmlSchemaNotationPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaNotation...
+     d                 ds                  based(xmlSchemaNotationPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  name                           *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  identifier                     *                                        const xmlChar *
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+
+      * TODO: Actually all those flags used for the schema should sit
+      * on the schema parser context, since they are used only
+      * during parsing an XML schema document, and not available
+      * on the component level as per spec.
+
+      * XML_SCHEMAS_QUALIF_ELEM:
+      *
+      * Reflects elementFormDefault == qualified in
+      * an XML schema document.
+
+     d XML_SCHEMAS_QUALIF_ELEM...
+     d                 c                   X'00000001'
+
+      * XML_SCHEMAS_QUALIF_ATTR:
+      *
+      * Reflects attributeFormDefault == qualified in
+      * an XML schema document.
+
+     d XML_SCHEMAS_QUALIF_ATTR...
+     d                 c                   X'00000002'
+
+      * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION:
+      *
+      * the schema has "extension" in the set of finalDefault.
+
+     d XML_SCHEMAS_FINAL_DEFAULT_EXTENSION...
+     d                 c                   X'00000004'
+
+      * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION:
+      *
+      * the schema has "restriction" in the set of finalDefault.
+
+     d XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION...
+     d                 c                   X'00000008'
+
+      * XML_SCHEMAS_FINAL_DEFAULT_LIST:
+      *
+      * the cshema has "list" in the set of finalDefault.
+
+     d XML_SCHEMAS_FINAL_DEFAULT_LIST...
+     d                 c                   X'00000010'
+
+      * XML_SCHEMAS_FINAL_DEFAULT_UNION:
+      *
+      * the schema has "union" in the set of finalDefault.
+
+     d XML_SCHEMAS_FINAL_DEFAULT_UNION...
+     d                 c                   X'00000020'
+
+      * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION:
+      *
+      * the schema has "extension" in the set of blockDefault.
+
+     d XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION...
+     d                 c                   X'00000040'
+
+      * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION:
+      *
+      * the schema has "restriction" in the set of blockDefault.
+
+     d XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION...
+     d                 c                   X'00000080'
+
+      * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION:
+      *
+      * the schema has "substitution" in the set of blockDefault.
+
+     d XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION...
+     d                 c                   X'00000100'
+
+      * XML_SCHEMAS_INCLUDING_CONVERT_NS:
+      *
+      * the schema is currently including an other schema with
+      * no target namespace.
+
+     d XML_SCHEMAS_INCLUDING_CONVERT_NS...
+     d                 c                   X'00000200'
+
+      * _xmlSchema:
+      *
+      * A Schemas definition
+
+     d xmlSchema       ds                  based(xmlSchemaPtr)
+     d                                     align qualified
+     d  name                           *                                        const xmlChar *
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+     d  version                        *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  doc                                like(xmlDocPtr)
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  flags                        10i 0
+      *
+     d  typeDecl                           like(xmlHashTablePtr)
+     d  attrDecl                           like(xmlHashTablePtr)
+     d  attrGrpDecl                        like(xmlHashTablePtr)
+     d  elemDecl                           like(xmlHashTablePtr)
+     d  notaDecl                           like(xmlHashTablePtr)
+     d  schemasImports...
+     d                                     like(xmlHashTablePtr)
+      *
+     d  #private                       *                                        void *
+     d  groupDecl                          like(xmlHashTablePtr)
+     d  dict                               like(xmlDictPtr)
+     d  includes                       *                                        void *
+     d  preserve                     10i 0                                      Do not free doc ?
+     d  counter                      10i 0                                      For name uniqueness
+     d  idcDef                             like(xmlHashTablePtr)                All id-constr. defs
+     d  volatiles                      *                                        void *
+
+     d xmlSchemaFreeType...
+     d                 pr                  extproc('xmlSchemaFreeType')
+     d type                                value like(xmlSchemaTypePtr)
+
+     d xmlSchemaFreeWildcard...
+     d                 pr                  extproc('xmlSchemaFreeWildcard')
+     d wildcard                            value like(xmlSchemaWildcardPtr)
+
+      /endif                                                                    LIBXML_SCHEMAS_ENBLD
+      /endif                                                                    SCHEMA_INTERNALS_H__
diff --git a/os400/libxmlrpg/schematron.rpgle b/os400/libxmlrpg/schematron.rpgle
new file mode 100644
index 0000000..ff8ea62
--- /dev/null
+++ b/os400/libxmlrpg/schematron.rpgle
@@ -0,0 +1,195 @@
+      * Summary: XML Schemastron implementation
+      * Description: interface to the XML Schematron validity checking.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SCHEMATRON_H__)
+      /define XML_SCHEMATRON_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_SCHEMATRON_ENABLED)
+
+      /include "libxmlrpg/tree"
+
+     d xmlSchematronValidOptions...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMATRON_OUT_QUIET...                                             Quiet no report
+     d                 c                   X'0001'
+     d  XML_SCHEMATRON_OUT_TEXT...                                              Build textual report
+     d                 c                   X'0002'
+     d  XML_SCHEMATRON_OUT_XML...                                               Output SVRL
+     d                 c                   X'0004'
+     d  XML_SCHEMATRON_OUT_ERROR...                                             Output to error func
+     d                 c                   X'0008'
+     d  XML_SCHEMATRON_OUT_FILE...                                              Output to file descr
+     d                 c                   X'0100'
+     d  XML_SCHEMATRON_OUT_BUFFER...                                            Output to a buffer
+     d                 c                   X'0200'
+     d  XML_SCHEMATRON_OUT_IO...                                                Output to I/O mech
+     d                 c                   X'0400'
+
+      * The schemas related types are kept internal
+
+     d xmlSchematronPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlSchematronValidityErrorFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of an error callback from a Schematron validation
+
+     d xmlSchematronValidityErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlSchematronValidityWarningFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of a warning callback from a Schematron validation
+
+     d xmlSchematronValidityWarningFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * A schemas validation context
+
+     d xmlSchematronParserCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchematronValidCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      * Interfaces for parsing.
+
+     d xmlSchematronNewParserCtxt...
+     d                 pr                  extproc('xmlSchematronNewParserCtxt')
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlSchematronNewMemParserCtxt...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronNewMemParserCtxt')
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d xmlSchematronNewDocParserCtxt...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronNewDocParserCtxt')
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlSchematronFreeParserCtxt...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronFreeParserCtxt')
+     d  ctxt                               value
+     d                                     like(xmlSchematronParserCtxtPtr)
+
+      /if defined(DISABLED)
+     d xmlSchematronSetParserErrors...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronSetParserErrors')
+     d  ctxt                               value
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  err                                value
+     d                                     like(xmlSchematronValidityErrorFunc)
+     d  warn                               value like(
+     d                                     xmlSchematronValidityWarningFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlSchematronGetParserErrors...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronGetParserErrors')
+     d  ctxt                               value
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  err                                like(xmlSchematronValidityErrorFunc)
+     d  warn                               like(
+     d                                       xmlSchematronValidityWarningFunc)
+     d  ctx                            *                                        void *(*)
+
+     d xmlSchematronIsValid...
+     d                 pr            10i 0 extproc('xmlSchematronIsValid')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+      /endif
+
+     d xmlSchematronParse...
+     d                 pr                  extproc('xmlSchematronParse')
+     d                                     like(xmlSchematronPtr)
+     d  ctxt                               value
+     d                                     like(xmlSchematronParserCtxtPtr)
+
+     d xmlSchematronFree...
+     d                 pr                  extproc('xmlSchematronFree')
+     d  schema                             value like(xmlSchematronPtr)
+
+      * Interfaces for validating
+
+     d xmlSchematronSetValidStructuredErrors...
+     d                 pr                  extproc('xmlSchematronSetValidStruct-
+     d                                     uredErrors')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  serror                             value like(xmlStructuredErrorFunc)
+     d  ctx                            *   value                                void *
+
+      /if defined(DISABLED)
+     d xmlSchematronSetValidErrors...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronSetValidErrors')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  err                                value
+     d                                     like(xmlSchematronValidityErrorFunc)
+     d  warn                               value like(
+     d                                     xmlSchematronValidityWarningFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlSchematronGetValidErrors...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronGetValidErrors')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  err                                like(xmlSchematronValidityErrorFunc)
+     d  warn                               like(
+     d                                       xmlSchematronValidityWarningFunc)
+     d  ctx                            *                                        void *(*)
+
+     d xmlSchematronSetValidOptions...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronSetValidOptions')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  options                      10i 0 value
+
+     d xmlSchematronValidCtxtGetOptions...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronValidCtxtGetOptions')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+
+     d xmlSchematronValidateOneElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronValidateOneElement')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  elem                               value like(xmlNodePtr)
+      /endif
+
+     d xmlSchematronNewValidCtxt...
+     d                 pr                  extproc('xmlSchematronNewValidCtxt')
+     d                                     like(xmlSchematronValidCtxtPtr)
+     d  schema                             value like(xmlSchematronPtr)
+     d  options                      10i 0 value
+
+     d xmlSchematronFreeValidCtxt...
+     d                 pr                  extproc('xmlSchematronFreeValidCtxt')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+
+     d xmlSchematronValidateDoc...
+     d                 pr            10i 0 extproc('xmlSchematronValidateDoc')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  instance                           value like(xmlDocPtr)
+
+      /endif                                                                    _SCHEMATRON_ENABLED
+      /endif                                                                    XML_SCHEMATRON_H__
diff --git a/os400/libxmlrpg/threads.rpgle b/os400/libxmlrpg/threads.rpgle
new file mode 100644
index 0000000..07d4278
--- /dev/null
+++ b/os400/libxmlrpg/threads.rpgle
@@ -0,0 +1,70 @@
+      * Summary: interfaces for thread handling
+      * Description: set of generic threading related routines
+      *              should work with pthreads, Windows native or TLS threads
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_THREADS_H__)
+      /define XML_THREADS_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      * xmlMutex are a simple mutual exception locks.
+
+     d xmlMutexPtr     s               *   based(######typedef######)
+
+      * xmlRMutex are reentrant mutual exception locks.
+
+     d xmlRMutexPtr    s               *   based(######typedef######)
+
+      /include "libxmlrpg/globals"
+
+     d xmlNewMutex     pr                  extproc('xmlNewMutex')
+     d                                     like(xmlMutexPtr)
+
+     d xmlMutexLock    pr                  extproc('xmlMutexLock')
+     d  tok                                value like(xmlMutexPtr)
+
+     d xmlMutexUnlock  pr                  extproc('xmlMutexUnlock')
+     d  tok                                value like(xmlMutexPtr)
+
+     d xmlFreeMutex    pr                  extproc('xmlFreeMutex')
+     d  tok                                value like(xmlMutexPtr)
+
+     d xmlNewRMutex    pr                  extproc('xmlNewRMutex')
+     d                                     like(xmlRMutexPtr)
+
+     d xmlRMutexLock   pr                  extproc('xmlRMutexLock')
+     d  tok                                value like(xmlRMutexPtr)
+
+     d xmlRMutexUnlock...
+     d                 pr                  extproc('xmlRMutexUnlock')
+     d  tok                                value like(xmlRMutexPtr)
+
+     d xmlFreeRMutex   pr                  extproc('xmlFreeRMutex')
+     d  tok                                value like(xmlRMutexPtr)
+
+      * Library wide APIs.
+
+     d xmlInitThreads  pr                  extproc('xmlInitThreads')
+
+     d xmlLockLibrary  pr                  extproc('xmlLockLibrary')
+
+     d xmlUnlockLibrary...
+     d                 pr                  extproc('xmlUnlockLibrary')
+
+     d xmlGetThreadId  pr            10i 0 extproc('xmlGetThreadId')
+
+     d xmlIsMainThread...
+     d                 pr            10i 0 extproc('xmlIsMainThread')
+
+     d xmlCleanupThreads...
+     d                 pr                  extproc('xmlCleanupThreads')
+
+     d xmlGetGlobalState...
+     d                 pr                  extproc('xmlGetGlobalState')
+     d                                     like(xmlGlobalStatePtr)
+
+      /endif                                                                    XML_THREADS_H__
diff --git a/os400/libxmlrpg/transcode.rpgle b/os400/libxmlrpg/transcode.rpgle
new file mode 100644
index 0000000..b96e4e8
--- /dev/null
+++ b/os400/libxmlrpg/transcode.rpgle
@@ -0,0 +1,71 @@
+      * Supplementary character code conversion functions for
+      *   EBCDIC environments.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(TRANSCODE_H__)
+      /define TRANSCODE_H__
+
+      /include "libxmlrpg/dict"
+      /include "libxmlrpg/xmlstdarg"
+
+     d xmlZapDict      pr                  extproc('xmlZapDict')
+     d  dict                               like(xmlDictPtr)
+
+     d xmlTranscodeResult...
+     d                 pr              *   extproc('xmlTranscodeResult')        const char *
+     d  s                              *   value options(*string)               const xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+     d  freeproc                       *   value procptr
+
+     d xmlTranscodeString...
+     d                 pr              *   extproc('xmlTranscodeString')        const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+     d xmlTranscodeWString...
+     d                 pr              *   extproc('xmlTranscodeWString')       const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+     d xmlTranscodeHString...
+     d                 pr              *   extproc('xmlTranscodeHString')       const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+      /if not defined(XML_NO_SHORT_NAMES)
+     d xmlTR           pr              *   extproc('xmlTranscodeResult')        const char *
+     d  s                              *   value options(*string)               const xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+     d  freeproc                       *   value procptr
+
+     d xmlTS           pr              *   extproc('xmlTranscodeString')        const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+     d xmlTW           pr              *   extproc('xmlTranscodeWString')       const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+     d xmlTH           pr              *   extproc('xmlTranscodeHString')       const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+      /endif
+
+     d xmlVasprintf    pr              *   extproc('xmlVasprintf')
+     d  dict                               like(xmlDictPtr) options(*omit)
+     d  encoding                       *   value options(*string)               const char *
+     d  fmt                            *   value options(*string)               const xmlChar *
+     d  args                               likeds(xmlVaList)
+
+      /endif
diff --git a/os400/libxmlrpg/tree.rpgle b/os400/libxmlrpg/tree.rpgle
new file mode 100644
index 0000000..8b4981a
--- /dev/null
+++ b/os400/libxmlrpg/tree.rpgle
@@ -0,0 +1,1628 @@
+      * Summary: interfaces for tree manipulation
+      * Description: this module describes the structures found in an tree
+      *              resulting from an XML or HTML parsing, as well as the API
+      *              provided for various processing on that tree
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_TREE_H__)
+      /define XML_TREE_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlstring"
+
+
+      * Some of the basic types pointer to structures:
+
+      * xmlIO.h
+
+     d xmlParserInputBufferPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlOutputBufferPtr...
+     d                 s               *   based(######typedef######)
+
+      * parser.h
+
+     d xmlParserInputPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlParserCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSAXLocatorPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSAXHandlerPtr...
+     d                 s               *   based(######typedef######)
+
+      * entities.h
+
+     d xmlEntityPtr    s               *   based(######typedef######)
+
+
+      * BASE_BUFFER_SIZE:
+      *
+      * default buffer size 4000.
+
+     d BASE_BUFFER_SIZE...
+     d                 c                   4096
+
+      * LIBXML_NAMESPACE_DICT:
+      *
+      * Defines experimental behaviour:
+      * 1) xmlNs gets an additional field @context (a xmlDoc)
+      * 2) when creating a tree, xmlNs->href is stored in the dict of xmlDoc.
+
+      /if defined(DO_NOT_COMPILE)
+      /define LIBXML_NAMESPACE_DICT
+      /endif
+
+      * xmlBufferAllocationScheme:
+      *
+      * A buffer allocation scheme can be defined to either match exactly the
+      * need or double it's allocated size each time it is found too small.
+
+     d xmlBufferAllocationScheme...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_BUFFER_ALLOC_DOUBLEIT...
+     d                 c                   0
+     d  XML_BUFFER_ALLOC_EXACT...
+     d                 c                   1
+     d  XML_BUFFER_ALLOC_IMMUTABLE...
+     d                 c                   2
+     d  XML_BUFFER_ALLOC_IO...
+     d                 c                   3
+     d  XML_BUFFER_ALLOC_HYBRID...
+     d                 c                   4
+
+      * xmlBuffer:
+      *
+      * A buffer structure, this old construct is limited to 2GB and
+      * is being deprecated, use API with xmlBuf instead
+
+     d xmlBufferPtr    s               *   based(######typedef######)
+
+     d xmlBuffer       ds                  based(xmlBufferPtr)
+     d                                     align qualified
+     d  content                        *                                        xmlChar *
+     d  use                          10u 0                                      The buffer size used
+     d  size                         10u 0                                      The buffer size
+     d  alloc                              like(xmlBufferAllocationScheme)      The realloc method
+     d  contentIO                      *                                        xmlChar *
+
+      * xmlBufPtr:
+      *
+      * A pointer to a buffer structure, the actual structure internals are not
+      * public
+
+     d xmlBufPtr       s               *   based(######typedef######)
+
+      * A few public routines for xmlBuf. As those are expected to be used
+      * mostly internally the bulk of the routines are internal in buf.h
+
+     d xmlBufContent   pr              *   extproc('xmlBufContent')             xmlChar *
+     d  buf                                value like(xmlBufPtr)                const
+
+     d xmlBufEnd       pr              *   extproc('xmlBufEnd')                 xmlChar *
+     d  buf                                value like(xmlBufPtr)                const
+
+     d xmlBufUse       pr            10u 0 extproc('xmlBufUse')                 size_t
+     d  buf                                value like(xmlBufPtr)                const
+
+     d xmlBufShrink    pr            10u 0 extproc('xmlBufShrink')              size_t
+     d  buf                                value like(xmlBufPtr)
+     d  len                          10u 0 value                                size_t
+
+      * LIBXML2_NEW_BUFFER:
+      *
+      * Macro used to express that the API use the new buffers for
+      * xmlParserInputBuffer and xmlOutputBuffer. The change was
+      * introduced in 2.9.0.
+
+      /define LIBXML2_NEW_BUFFER
+
+      * XML_XML_NAMESPACE:
+      *
+      * This is the namespace for the special xml: prefix predefined in the
+      * XML Namespace specification.
+
+     d XML_XML_NAMESPACE...
+     d                 c                   'http://www.w3.org/XML/1998/+
+     d                                      namespace'
+
+      * XML_XML_ID:
+      *
+      * This is the name for the special xml:id attribute
+
+     d XML_XML_ID      c                   'xml:id'
+
+      * The different element types carried by an XML tree.
+      *
+      * NOTE: This is synchronized with DOM Level1 values
+      *       See http://www.w3.org/TR/REC-DOM-Level-1/
+      *
+      * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
+      * be deprecated to use an XML_DTD_NODE.
+
+     d xmlElementType  s             10i 0 based(######typedef######)           enum
+     d  XML_ELEMENT_NODE...
+     d                 c                   1
+     d  XML_ATTRIBUTE_NODE...
+     d                 c                   2
+     d  XML_TEXT_NODE  c                   3
+     d  XML_CDATA_SECTION_NODE...
+     d                 c                   4
+     d  XML_ENTITY_REF_NODE...
+     d                 c                   5
+     d  XML_ENTITY_NODE...
+     d                 c                   6
+     d  XML_PI_NODE    c                   7
+     d  XML_COMMENT_NODE...
+     d                 c                   8
+     d  XML_DOCUMENT_NODE...
+     d                 c                   9
+     d  XML_DOCUMENT_TYPE_NODE...
+     d                 c                   10
+     d  XML_DOCUMENT_FRAG_NODE...
+     d                 c                   11
+     d  XML_NOTATION_NODE...
+     d                 c                   12
+     d  XML_HTML_DOCUMENT_NODE...
+     d                 c                   13
+     d  XML_DTD_NODE   c                   14
+     d  XML_ELEMENT_DECL...
+     d                 c                   15
+     d  XML_ATTRIBUTE_DECL...
+     d                 c                   16
+     d  XML_ENTITY_DECL...
+     d                 c                   17
+     d  XML_NAMESPACE_DECL...
+     d                 c                   18
+     d  XML_LOCAL_NAMESPACE...
+     d                 c                   18                                   Alias
+     d  XML_XINCLUDE_START...
+     d                 c                   19
+     d  XML_XINCLUDE_END...
+     d                 c                   20
+      /if defined(LIBXML_DOCB_ENABLED)
+     d  XML_DOCB_DOCUMENT_NODE...
+     d                 c                   21
+      /endif
+
+      * xmlNotation:
+      *
+      * A DTD Notation definition.
+
+     d xmlNotationPtr  s               *   based(######typedef######)
+
+     d xmlNotation     ds                  based(xmlNotationPtr)
+     d                                     align qualified
+     d  name                           *                                        const xmlChar *
+     d  PublicID                       *                                        const xmlChar *
+     d  SystemID                       *                                        const xmlChar *
+
+      * xmlAttributeType:
+      *
+      * A DTD Attribute type definition.
+
+     d xmlAttributeType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ATTRIBUTE_CDATA...
+     d                 c                   1
+     d  XML_ATTRIBUTE_ID...
+     d                 c                   2
+     d  XML_ATTRIBUTE_IDREF...
+     d                 c                   3
+     d  XML_ATTRIBUTE_IDREFS...
+     d                 c                   4
+     d  XML_ATTRIBUTE_ENTITY...
+     d                 c                   5
+     d  XML_ATTRIBUTE_ENTITIES...
+     d                 c                   6
+     d  XML_ATTRIBUTE_NMTOKEN...
+     d                 c                   7
+     d  XML_ATTRIBUTE_NMTOKENS...
+     d                 c                   8
+     d  XML_ATTRIBUTE_ENUMERATION...
+     d                 c                   9
+     d  XML_ATTRIBUTE_NOTATION...
+     d                 c                   10
+
+      * xmlAttributeDefault:
+      *
+      * A DTD Attribute default definition.
+
+     d xmlAttributeDefault...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ATTRIBUTE_NONE...
+     d                 c                   1
+     d  XML_ATTRIBUTE_REQUIRED...
+     d                 c                   2
+     d  XML_ATTRIBUTE_IMPLIED...
+     d                 c                   3
+     d  XML_ATTRIBUTE_FIXED...
+     d                 c                   4
+
+      * xmlEnumeration:
+      *
+      * List structure used when there is an enumeration in DTDs.
+
+     d xmlEnumerationPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlEnumeration  ds                  based(xmlEnumerationPtr)
+     d                                     align qualified
+     d  next                               like(xmlEnumerationPtr)              Next one
+     d  name                           *                                        const xmlChar *
+
+      * Forward pointer declarations.
+
+     d xmlNodePtr      s               *   based(######typedef######)
+     d xmlDocPtr       s               *   based(######typedef######)
+     d xmlDtdPtr       s               *   based(######typedef######)
+
+      * xmlAttribute:
+      *
+      * An Attribute declaration in a DTD.
+
+     d xmlAttributePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlAttribute    ds                  based(xmlAttributePtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_ATTRIBUTE_DECL
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     NULL
+     d  last                               like(xmlNodePtr)                     NULL
+     d  parent                             like(xmlDtdPtr)                      -> DTD
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  nexth                              like(xmlAttributePtr)                Next in hash table
+     d  atype                              like(xmlAttributeType)               The attribute type
+     d  def                                like(xmlAttributeDefault)            The default
+     d  defaultValue                   *                                        or const xmlChar *
+     d  tree                               like(xmlEnumerationPtr)              or enum tree
+     d  prefix                         *                                        const xmlChar *
+     d  elem                           *                                        const xmlChar *
+
+      * xmlElementContentType:
+      *
+      * Possible definitions of element content types.
+
+     d xmlElementContentType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ELEMENT_CONTENT_PCDATA...
+     d                 c                   1
+     d  XML_ELEMENT_CONTENT_ELEMENT...
+     d                 c                   2
+     d  XML_ELEMENT_CONTENT_SEQ...
+     d                 c                   3
+     d  XML_ELEMENT_CONTENT_OR...
+     d                 c                   4
+
+      * xmlElementContentOccur:
+      *
+      * Possible definitions of element content occurrences.
+
+     d xmlElementContentOccur...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ELEMENT_CONTENT_ONCE...
+     d                 c                   1
+     d  XML_ELEMENT_CONTENT_OPT...
+     d                 c                   2
+     d  XML_ELEMENT_CONTENT_MULT...
+     d                 c                   3
+     d  XML_ELEMENT_CONTENT_PLUS...
+     d                 c                   4
+
+      * xmlElementContent:
+      *
+      * An XML Element content as stored after parsing an element definition
+      * in a DTD.
+
+     d xmlElementContentPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlElementContent...
+     d                 ds                  based(xmlElementContentPtr)
+     d                                     align qualified
+     d  type                               like(xmlElementContentType)
+     d  ocur                               like(xmlElementContentOccur)
+     d  name                           *                                        const xmlChar *
+     d  c1                                 like(xmlElementContentPtr)           First child
+     d  c2                                 like(xmlElementContentPtr)           Second child
+     d  parent                             like(xmlElementContentPtr)           Parent
+     d  prefix                         *                                        const xmlChar *
+
+      * xmlElementTypeVal:
+      *
+      * The different possibilities for an element content type.
+
+     d xmlElementTypeVal...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ELEMENT_TYPE_UNDEFINED...
+     d                 c                   0
+     d  XML_ELEMENT_TYPE_EMPTY...
+     d                 c                   1
+     d  XML_ELEMENT_TYPE_ANY...
+     d                 c                   2
+     d  XML_ELEMENT_TYPE_MIXED...
+     d                 c                   3
+     d  XML_ELEMENT_TYPE_ELEMENT...
+     d                 c                   4
+
+      /include "libxmlrpg/xmlregexp"
+
+      * xmlElement:
+      *
+      * An XML Element declaration from a DTD.
+
+     d xmlElementPtr   s               *   based(######typedef######)
+
+     d xmlElement      ds                  based(xmlElementPtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_ELEMENT_DECL
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     NULL
+     d  last                               like(xmlNodePtr)                     NULL
+     d  parent                             like(xmlDtdPtr)                      -> DTD
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  etype                              like(xmlElementTypeVal)              The type
+     d  content                            like(xmlElementContentPtr)           Allowed elem content
+     d  attributes                         like(xmlAttributePtr)                Declared attributes
+     d  prefix                         *                                        const xmlChar *
+      /if defined(LIBXML_REGEXP_ENABLED)
+     d  contModel                          like(xmlRegexpPtr)                   Validating regexp
+      /else
+     d  contModel                      *
+      /endif
+
+      * XML_LOCAL_NAMESPACE:
+      *
+      * A namespace declaration node.
+
+      * xmlNs:
+      *
+      * An XML namespace.
+      * Note that prefix == NULL is valid, it defines the default namespace
+      * within the subtree (until overridden).
+      *
+      * xmlNsType is unified with xmlElementType.
+
+     d xmlNsType       s                   based(######typedef######)           enum
+     d                                     like(xmlElementType)
+
+     d xmlNsPtr        s               *   based(######typedef######)
+
+     d xmlNs           ds                  based(xmlNsPtr)
+     d                                     align qualified
+     d  next                               like(xmlNsPtr)                       next Ns link
+     d  type                               like(xmlNsType)                      Global or local
+     d  href                           *                                        const xmlChar *
+     d  prefix                         *                                        const xmlChar *
+     d  #private                       *                                        Application data
+     d  context                            like(xmlDocPtr)                      normally an xmlDoc
+
+      * xmlDtd:
+      *
+      * An XML DTD, as defined by <!DOCTYPE ... There is actually one for
+      * the internal subset and for the external subset.
+
+     d xmlDtd          ds                  based(xmlDtdPtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_DTD_NODE
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     Property link value
+     d  last                               like(xmlNodePtr)                     Last child link
+     d  parent                             like(xmlDocPtr)                      Child->parent link
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  notations                      *                                        notations hash table
+     d  elements                       *                                        elements hash table
+     d  entities                       *                                        entities hash table
+     d  ExternalID                     *                                        const xmlChar *
+     d  SystemID                       *                                        const xmlChar *
+     d  pentities                      *                                        param. ent. h table
+
+      * xmlAttr:
+      *
+      * An attribute on an XML node.
+
+     d xmlAttrPtr      s               *   based(######typedef######)
+
+     d xmlAttr         ds                  based(xmlAttrPtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_ATTRIBUTE_NODE
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     Property link value
+     d  last                               like(xmlNodePtr)                     NULL
+     d  parent                             like(xmlNodePtr)                     Child->parent link
+     d  next                               like(xmlAttrPtr)                     next sibling link
+     d  prev                               like(xmlAttrPtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  ns                                 like(xmlNsPtr)                       Associated namespace
+     d  atype                              like(xmlAttributeType)               For validation
+     d  psvi                           *                                        Type/PSVI info
+
+      * xmlID:
+      *
+      * An XML ID instance.
+
+     d xmlIdPtr        s               *   based(######typedef######)
+
+     d xmlID           ds                  based(xmlIdPtr)
+     d                                     align qualified
+     d  next                               like(xmlIdPtr)                       Next ID
+     d  attr                               like(xmlAttrPtr)                     Attribute holding it
+     d  name                           *                                        const xmlChar *
+     d  lineno                       10i 0                                      Line # if not avail
+     d  doc                                like(xmlDocPtr)                      Doc holding ID
+
+      * xmlRef:
+      *
+      * An XML IDREF instance.
+
+     d xmlRefPtr       s               *   based(######typedef######)
+
+     d xmlRef          ds                  based(xmlRefPtr)
+     d                                     align qualified
+     d  next                               like(xmlRefPtr)                      Next Ref
+     d  value                          *                                        const xmlChar *
+     d  attr                               like(xmlAttrPtr)                     Attribute holding it
+     d  name                           *                                        const xmlChar *
+     d  lineno                       10i 0                                      Line # if not avail
+
+      * xmlNode:
+      *
+      * A node in an XML tree.
+
+     d xmlNode         ds                  based(xmlNodePtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     Parent->children lnk
+     d  last                               like(xmlNodePtr)                     Last child link
+     d  parent                             like(xmlNodePtr)                     Child->parent link
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  ns                                 like(xmlNsPtr)                       Associated namespace
+     d  content                        *                                        xmlChar *
+     d  properties                         like(xmlAttrPtr)                     Properties list
+     d  nsDef                              like(xmlNsPtr)                       Node ns definitions
+     d  psvi                           *                                        Type/PSVI info
+     d  line                          5u 0                                      Line number
+     d  extra                         5u 0                                      Data for XPath/XSLT
+
+      * xmlDocProperty
+      *
+      * Set of properties of the document as found by the parser
+      * Some of them are linked to similary named xmlParserOption
+
+     d xmlDocProperties...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_DOC_WELLFORMED...
+     d                 c                   X'00000001'
+     d  XML_DOC_NSVALID...
+     d                 c                   X'00000002'
+     d  XML_DOC_OLD10  c                   X'00000004'
+     d  XML_DOC_DTDVALID...
+     d                 c                   X'00000008'
+     d  XML_DOC_XINCLUDE...
+     d                 c                   X'00000010'
+     d  XML_DOC_USERBUILT...
+     d                 c                   X'00000020'
+     d  XML_DOC_INTERNAL...
+     d                 c                   X'00000030'
+     d  XML_DOC_HTML   c                   X'00000080'
+
+      * xmlDoc:
+      *
+      * An XML document.
+
+     d xmlDoc          ds                  based(xmlDocPtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_DOCUMENT_NODE
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     The document tree
+     d  last                               like(xmlNodePtr)                     Last child link
+     d  parent                             like(xmlNodePtr)                     Child->parent link
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      Reference to itself
+     d  compression                  10i 0                                      zlib compression lev
+     d  standalone                   10i 0
+     d  intSubset                          like(xmlDtdPtr)                      Internal subset
+     d  extSubset                          like(xmlDtdPtr)                      External subset
+     d  oldns                              like(xmlNsPtr)                       Global namespace
+     d  version                        *                                        const xmlChar *
+     d  encoding                       *                                        const xmlChar *
+     d  ids                            *                                        IDs hash table
+     d  refs                           *                                        IDREFs hash table
+     d  URL                            *                                        const xmlChar *
+     d  charset                      10i 0                                      In-memory encoding
+     d  dict                           *                                        xmlDictPtr for names
+     d  psvi                           *                                        Type/PSVI ino
+     d  parseFlags                   10i 0                                      xmlParserOption's
+     d  properties                   10i 0                                      xmlDocProperties
+
+      * xmlDOMWrapAcquireNsFunction:
+      * @ctxt:  a DOM wrapper context
+      * @node:  the context node (element or attribute)
+      * @nsName:  the requested namespace name
+      * @nsPrefix:  the requested namespace prefix
+      *
+      * A function called to acquire namespaces (xmlNs) from the wrapper.
+      *
+      * Returns an xmlNsPtr or NULL in case of an error.
+
+     d xmlDOMWrapAcquireNsFunction...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlDOMWrapCtxt:
+      *
+      * Context for DOM wrapper-operations.
+
+     d xmlDOMWrapCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlDOMWrapCtxt...
+     d                 ds                  based(xmlDOMWrapCtxtPtr)
+     d                                     align qualified
+     d  #private                       *                                        void *
+     d  type                         10i 0
+     d  namespaceMap                   *                                        void *
+     d  getNsForNodeFunc...
+     d                                     like(xmlDOMWrapAcquireNsFunction)
+
+
+      * Variables.
+
+      * Some helper functions
+
+      /undefine XML_TESTVAL
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_XPATH_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_DEBUG_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SAX1_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_WRITER_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_DOCB_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlValidateNCName...
+     d                 pr            10i 0 extproc('xmlValidateNCName')
+     d  value                          *   value options(*string)               const xmlChar *
+     d  space                        10i 0 value
+
+      /undefine XML_TESTVAL
+      /endif
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlValidateQName...
+     d                 pr            10i 0 extproc('xmlValidateQName')
+     d  value                          *   value options(*string)               const xmlChar *
+     d  space                        10i 0 value
+
+     d xmlValidateName...
+     d                 pr            10i 0 extproc('xmlValidateName')
+     d  value                          *   value options(*string)               const xmlChar *
+     d  space                        10i 0 value
+
+     d xmlValidateNMToken...
+     d                 pr            10i 0 extproc('xmlValidateNMToken')
+     d  value                          *   value options(*string)               const xmlChar *
+     d  space                        10i 0 value
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlBuildQName   pr              *   extproc('xmlBuildQName')             xmlChar *
+     d  ncname                         *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  memory                    65535    options(*varsize: *omit)             xmlChar[]
+     d  len                          10i 0 value                                memory length
+
+     d xmlSplitQName2  pr              *   extproc('xmlSplitQName2')            xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *                                        xmlChar *
+
+     d xmlSplitQName3  pr              *   extproc('xmlSplitQName3')            const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0
+
+      * Handling Buffers, the old ones see @xmlBuf for the new ones.
+
+     d xmlSetBufferAllocationScheme...
+     d                 pr                  extproc(
+     d                                      'xmlSetBufferAllocationScheme')
+     d  scheme                             value
+     d                                     like(xmlBufferAllocationScheme)
+
+     d xmlGetBufferAllocationScheme...
+     d                 pr                  extproc(
+     d                                      'xmlGetBufferAllocationScheme')
+     d                                     like(xmlBufferAllocationScheme)
+
+     d xmlBufferCreate...
+     d                 pr                  extproc('xmlBufferCreate')
+     d                                     like(xmlBufferPtr)
+
+     d xmlBufferCreateSize...
+     d                 pr                  extproc('xmlBufferCreateSize')
+     d                                     like(xmlBufferPtr)
+     d  size                         10u 0 value                                size_t
+
+     d xmlBufferCreateStatic...
+     d                 pr                  extproc('xmlBufferCreateStatic')
+     d                                     like(xmlBufferPtr)
+     d  mem                            *   value
+     d  size                         10u 0 value                                size_t
+
+     d xmlBufferResize...
+     d                 pr            10i 0 extproc('xmlBufferResize')
+     d  buf                                value like(xmlBufferPtr)
+     d  size                         10u 0 value                                size_t
+
+     d xmlBufferFree   pr                  extproc('xmlBufferFree')
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferDump   pr            10i 0 extproc('xmlBufferDump')
+     d  file                           *   value                                FILE *
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferAdd    pr            10i 0 extproc('xmlBufferAdd')
+     d  buf                                value like(xmlBufferPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value                                str length
+
+     d xmlBufferAddHead...
+     d                 pr            10i 0 extproc('xmlBufferAddHead')
+     d  buf                                value like(xmlBufferPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value                                str length
+
+     d xmlBufferCat    pr            10i 0 extproc('xmlBufferCat')
+     d  buf                                value like(xmlBufferPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlBufferCCat   pr            10i 0 extproc('xmlBufferCCat')
+     d  buf                                value like(xmlBufferPtr)
+     d  str                            *   value options(*string)               const char *
+
+     d xmlBufferShrink...
+     d                 pr            10i 0 extproc('xmlBufferShrink')
+     d  buf                                value like(xmlBufferPtr)
+     d  len                          10u 0 value                                str length
+
+     d xmlBufferGrow   pr            10i 0 extproc('xmlBufferGrow')
+     d  buf                                value like(xmlBufferPtr)
+     d  len                          10u 0 value                                str length
+
+     d xmlBufferEmpty  pr                  extproc('xmlBufferEmpty')
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferContent...
+     d                 pr              *   extproc('xmlBufferContent')          const xmlChar *
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferDetach...
+     d                 pr              *   extproc('xmlBufferDetach')           xmlChar *
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferSetAllocationScheme...
+     d                 pr                  extproc(
+     d                                      'xmlBufferSetAllocationScheme')
+     d  buf                                value like(xmlBufferPtr)
+     d  scheme                             value
+     d                                     like(xmlBufferAllocationScheme)
+
+     d xmlBufferLength...
+     d                 pr            10i 0 extproc('xmlBufferLength')
+     d  buf                                value like(xmlBufferPtr)
+
+      * Creating/freeing new structures.
+
+     d xmlCreateIntSubset...
+     d                 pr                  extproc('xmlCreateIntSubset')
+     d                                     like(xmlDtdPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemlID                      *   value options(*string)               const xmlChar *
+
+     d xmlNewDtd       pr                  extproc('xmlNewDtd')
+     d                                     like(xmlDtdPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemlID                      *   value options(*string)               const xmlChar *
+
+     d xmlGetIntSubset...
+     d                 pr                  extproc('xmlGetIntSubset')
+     d                                     like(xmlDtdPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlFreeDtd      pr                  extproc('xmlFreeDtd')
+     d  cur                                value like(xmlDtdPtr)
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+     d xmlNewGlobalNs  pr                  extproc('xmlNewGlobalNs')
+     d                                     like(xmlNsPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  href                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+     d xmlNewNs        pr                  extproc('xmlNewNs')
+     d                                     like(xmlNsPtr)
+     d  node                               value like(xmlNodePtr)
+     d  href                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlFreeNs       pr                  extproc('xmlFreeNs')
+     d  cur                                value like(xmlNsPtr)
+
+     d xmlFreeNsList   pr                  extproc('xmlFreeNsList')
+     d  cur                                value like(xmlNsPtr)
+
+     d xmlNewDoc       pr                  extproc('xmlNewDoc')
+     d                                     like(xmlDocPtr)
+     d  version                        *   value options(*string)               const xmlChar *
+
+     d xmlFreeDoc      pr                  extproc('xmlFreeDoc')
+     d  cur                                value like(xmlDocPtr)
+
+     d xmlNewDocProp   pr                  extproc('xmlNewDocProp')
+     d                                     like(xmlAttrPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlNewProp      pr                  extproc('xmlNewProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlNewNsProp    pr                  extproc('xmlNewNsProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlNewNsPropEatName...
+     d                 pr                  extproc('xmlNewNsPropEatName')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value                                xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlFreePropList...
+     d                 pr                  extproc('xmlFreePropList')
+     d  cur                                value like(xmlAttrPtr)
+
+     d xmlFreeProp     pr                  extproc('xmlFreeProp')
+     d  cur                                value like(xmlAttrPtr)
+
+     d xmlCopyProp     pr                  extproc('xmlCopyProp')
+     d                                     like(xmlAttrPtr)
+     d  target                             value like(xmlNodePtr)
+     d  cur                                value like(xmlAttrPtr)
+
+     d xmlCopyPropList...
+     d                 pr                  extproc('xmlCopyPropList')
+     d                                     like(xmlAttrPtr)
+     d  target                             value like(xmlNodePtr)
+     d  cur                                value like(xmlAttrPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyDtd      pr                  extproc('xmlCopyDtd')
+     d                                     like(xmlDtdPtr)
+     d  dtd                                value like(xmlDtdPtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlCopyDoc      pr                  extproc('xmlCopyDoc')
+     d                                     like(xmlDocPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  recursive                    10i 0 value
+
+      /undefine XML_TESTVAL
+      /endif
+
+      * Creating new nodes.
+
+     d xmlNewDocNode   pr                  extproc('xmlNewDocNode')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocNodeEatName...
+     d                 pr                  extproc('xmlNewDocNodeEatName')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value                                xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewNode      pr                  extproc('xmlNewNode')
+     d                                     like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlNewNodeEatName...
+     d                 pr                  extproc('xmlNewNodeEatName')
+     d                                     like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value                                xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlNewChild     pr                  extproc('xmlNewChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlNewDocText   pr                  extproc('xmlNewDocText')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewText      pr                  extproc('xmlNewText')
+     d                                     like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocPI     pr                  extproc('xmlNewDocPI')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewPI        pr                  extproc('xmlNewPI')
+     d                                     like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocTextLen...
+     d                 pr                  extproc('xmlNewDocTextLen')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNewTextLen   pr                  extproc('xmlNewTextLen')
+     d                                     like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNewDocComment...
+     d                 pr                  extproc('xmlNewDocComment')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewComment   pr                  extproc('xmlNewComment')
+     d                                     like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewCDataBlock...
+     d                 pr                  extproc('xmlNewCDataBlock')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNewCharRef   pr                  extproc('xmlNewCharRef')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlNewReference...
+     d                 pr                  extproc('xmlNewReference')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlCopyNode     pr                  extproc('xmlCopyNode')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+     d  recursive                    10i 0 value
+
+     d xmlDocCopyNode  pr                  extproc('xmlDocCopyNode')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  recursive                    10i 0 value
+
+     d xmlDocCopyNodeList...
+     d                 pr                  extproc('xmlDocCopyNodeList')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlCopyNodeList...
+     d                 pr                  extproc('xmlCopyNodeList')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNewTextChild...
+     d                 pr                  extproc('xmlNewTextChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocRawNode...
+     d                 pr                  extproc('xmlNewDocRawNode')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocFragment...
+     d                 pr                  extproc('xmlNewDocFragment')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+      * Navigating.
+
+     d xmlNewDocFragment...
+     d xmlGetLineNo    pr            20i 0 extproc('xmlGetLineNo')
+     d  node                               value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_DEBUG_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlGetNodePath  pr              *   extproc('xmlGetNodePath')            xmlChar *
+     d  node                               value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlDocGetRootElement...
+     d                 pr                  extproc('xmlDocGetRootElement')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlGetLastChild...
+     d                 pr                  extproc('xmlGetLastChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+
+     d xmlNodeIsText   pr            10i 0 extproc('xmlNodeIsText')
+     d  node                               value like(xmlNodePtr)
+
+     d xmlIsBlankNode  pr            10i 0 extproc('xmlIsBlankNode')
+     d  node                               value like(xmlNodePtr)
+
+      * Changing the structure.
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_WRITER_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlDocSetRootElement...
+     d                 pr                  extproc('xmlDocSetRootElement')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  root                               value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNodeSetName  pr                  extproc('xmlNodeSetName')
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlAddChild     pr                  extproc('xmlAddChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlAddChildList...
+     d                 pr                  extproc('xmlAddChildList')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_WRITER_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlReplaceNode  pr                  extproc('xmlReplaceNode')
+     d                                     like(xmlNodePtr)
+     d  old                                value like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlAddPrevSibling...
+     d                 pr                  extproc('xmlAddPrevSibling')
+     d                                     like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+     d  elem                               value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlAddSibling   pr                  extproc('xmlAddSibling')
+     d                                     like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlAddNextSibling...
+     d                 pr                  extproc('xmlAddNextSibling')
+     d                                     like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlUnlinkNode   pr                  extproc('xmlUnlinkNode')
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlTextMerge    pr                  extproc('xmlTextMerge')
+     d                                     like(xmlNodePtr)
+     d  first                              value like(xmlNodePtr)
+     d  second                             value like(xmlNodePtr)
+
+     d xmlTextConcat   pr            10i 0 extproc('xmlTextConcat')
+     d  node                               value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlFreeNodeList...
+     d                 pr                  extproc('xmlFreeNodeList')
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlFreeNode     pr                  extproc('xmlFreeNode')
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlSetTreeDoc   pr                  extproc('xmlSetTreeDoc')
+     d  tree                               value like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlSetListDoc   pr                  extproc('xmlSetListDoc')
+     d  list                               value like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+
+      * Namespaces.
+
+     d xmlSearchNs     pr                  extproc('xmlSearchNs')
+     d                                     like(xmlNsPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  nameSpace                      *   value options(*string)               const xmlChar *
+
+     d xmlSearchNsByHref...
+     d                 pr                  extproc('xmlSearchNsByHref')
+     d                                     like(xmlNsPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  href                           *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_XPATH_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlGetNsList    pr              *   extproc('xmlGetNsList')              xmlNsPtr *
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlSetNs        pr                  extproc('xmlSetNs')
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+
+     d xmlCopyNamespace...
+     d                 pr                  extproc('xmlCopyNamespace')
+     d                                     like(xmlNsPtr)
+     d  cur                                value like(xmlNsPtr)
+
+     d xmlCopyNamespaceList...
+     d                 pr                  extproc('xmlCopyNamespaceList')
+     d                                     like(xmlNsPtr)
+     d  cur                                value like(xmlNsPtr)
+
+      * Changing the content.
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_XINCLUDE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlSetProp      pr                  extproc('xmlSetProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSetNsProp    pr                  extproc('xmlSetNsProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlGetNoNsProp  pr              *   extproc('xmlGetNoNsProp')            xmlChar *
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetProp      pr              *   extproc('xmlGetProp')                xmlChar *
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlHasProp      pr                  extproc('xmlHasProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlHasNsProp    pr                  extproc('xmlHasNsProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  nameSpace                      *   value options(*string)               const xmlChar *
+
+     d xmlGetNsProp    pr              *   extproc('xmlGetNsProp')              xmlChar *
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  nameSpace                      *   value options(*string)               const xmlChar *
+
+     d xmlStringGetNodeList...
+     d                 pr                  extproc('xmlStringGetNodeList')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlStringLenGetNodeList...
+     d                 pr                  extproc('xmlStringLenGetNodeList')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNodeListGetString...
+     d                 pr              *   extproc('xmlNodeListGetString')      xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  list                               value like(xmlNodePtr)
+     d  inLine                       10i 0 value
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNodeListGetRawString...
+     d                 pr              *   extproc('xmlNodeListGetRawString')   xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  list                               value like(xmlNodePtr)
+     d  inLine                       10i 0 value
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlNodeSetContent...
+     d                 pr                  extproc('xmlNodeSetContent')
+     d  cur                                value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNodeSetContentLen...
+     d                 pr                  extproc('xmlNodeSetContentLen')
+     d  cur                                value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlNodeAddContent...
+     d                 pr                  extproc('xmlNodeAddContent')
+     d  cur                                value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNodeAddContentLen...
+     d                 pr                  extproc('xmlNodeAddContentLen')
+     d  cur                                value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNodeGetContent...
+     d                 pr              *   extproc('xmlNodeGetContent')         xmlChar *
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlNodeBufGetContent...
+     d                 pr            10i 0 extproc('xmlNodeBufGetContent')
+     d  buffer                             value like(xmlBufferPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlBufGetNodeContent...
+     d                 pr            10i 0 extproc('xmlBufGetNodeContent')
+     d  buf                                value like(xmlBufPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlNodeGetLang  pr              *   extproc('xmlNodeGetLang')            xmlChar *
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlNodeGetSpacePreserve...
+     d                 pr            10i 0 extproc('xmlNodeGetSpacePreserve')
+     d  cur                                value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNodeSetLang  pr                  extproc('xmlNodeSetLang')
+     d  cur                                value like(xmlNodePtr)
+     d  lang                           *   value options(*string)               const xmlChar *
+
+     d xmlNodeSetSpacePreserve...
+     d                 pr                  extproc('xmlNodeSetSpacePreserve')
+     d  cur                                value like(xmlNodePtr)
+     d  val                          10i 0 value
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlNodeGetBase  pr              *   extproc('xmlNodeGetBase')            xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_XINCLUDE_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlNodeSetBase  pr                  extproc('xmlNodeSetBase')
+     d  node                               value like(xmlNodePtr)
+     d  uri                            *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+      * Removing content.
+
+     d xmlRemoveProp   pr            10i 0 extproc('xmlRemoveProp')
+     d  cur                                value like(xmlAttrPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlUnsetNsProp  pr            10i 0 extproc('xmlUnsetNsProp')
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlUnsetProp    pr            10i 0 extproc('xmlUnsetProp')
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+      * Internal, don't use.
+
+     d xmlBufferWriteCharacter...                                               Warning: renamed
+     d                 pr                  extproc('xmlBufferWriteCHAR')
+     d  buf                                value like(xmlBufferPtr)
+     d  string                         *   value options(*string)               const xmlChar *
+
+     d xmlBufferWriteChar...
+     d                 pr                  extproc('xmlBufferWriteChar')
+     d  buf                                value like(xmlBufferPtr)
+     d  string                         *   value options(*string)               const xmlChar *
+
+     d xmlBufferWriteQuotedString...
+     d                 pr                  extproc('xmlBufferWriteQuotedString')
+     d  buf                                value like(xmlBufferPtr)
+     d  string                         *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlAttrSerializeTxtContent...
+     d                 pr                  extproc('xmlAttrSerializeTxtContent')
+     d  buf                                value like(xmlBufferPtr)
+     d  attr                               value like(xmlAttrPtr)
+     d  string                         *   value options(*string)               const xmlChar *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      /if defined(LIBXML_TREE_ENABLED)
+
+      * Namespace handling.
+
+     d xmlReconciliateNs...
+     d                 pr            10i 0 extproc('xmlReconciliateNs')
+     d  doc                                value like(xmlDocPtr)
+     d  tree                               value like(xmlNodePtr)
+      /endif
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      * Saving.
+
+     d xmlDocDumpFormatMemory...
+     d                 pr                  extproc('xmlDocDumpFormatMemory')
+     d  cur                                value like(xmlDocPtr)
+     d  mem                            *                                        xmlChar * (*)
+     d  size                         10i 0
+     d  format                       10i 0 value
+
+     d xmlDocDumpMemory...
+     d                 pr                  extproc('xmlDocDumpMemory')
+     d  cur                                value like(xmlDocPtr)
+     d  mem                            *                                        xmlChar * (*)
+     d  size                         10i 0
+
+     d xmlDocDumpMemoryEnc...
+     d                 pr                  extproc('xmlDocDumpMemoryEnc')
+     d  out_doc                            value like(xmlDocPtr)
+     d  doc_txt_ptr                    *                                        xmlChar * (*)
+     d  doc_txt_len                  10i 0
+     d  txt_encoding                   *   value options(*string)               const char *
+
+     d xmlDocDumpFormatMemoryEnc...
+     d                 pr                  extproc('xmlDocDumpFormatMemoryEnc')
+     d  out_doc                            value like(xmlDocPtr)
+     d  doc_txt_ptr                    *                                        xmlChar * (*)
+     d  doc_txt_len                  10i 0
+     d  txt_encoding                   *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d xmlDocFormatDump...
+     d                 pr            10i 0 extproc('xmlDocFormatDump')
+     d  f                              *   value                                FILE *
+     d  cur                                value like(xmlDocPtr)
+     d  format                       10i 0 value
+
+     d xmlDocDump      pr            10i 0 extproc('xmlDocDump')
+     d  f                              *   value                                FILE *
+     d  cur                                value like(xmlDocPtr)
+
+     d xmlElemDump     pr                  extproc('xmlElemDump')
+     d  f                              *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlSaveFile     pr            10i 0 extproc('xmlSaveFile')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+
+     d xmlSaveFormatFile...
+     d                 pr            10i 0 extproc('xmlSaveFormatFile')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  format                       10i 0 value
+
+     d xmlBufNodeDump  pr            10u 0 extproc('xmlBufNodeDump')            size_t
+     d  buf                                value like(xmlBufPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  level                        10i 0 value
+     d  format                       10i 0 value
+
+     d xmlNodeDump     pr            10i 0 extproc('xmlNodeDump')
+     d  buf                                value like(xmlBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  level                        10i 0 value
+     d  format                       10i 0 value
+
+     d xmlSaveFileTo   pr            10i 0 extproc('xmlSaveFileTo')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+
+     d xmlSaveFormatFileTo...
+     d                 pr            10i 0 extproc('xmlSaveFormatFileTo')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d xmlNodeDumpOutput...
+     d                 pr                  extproc('xmlNodeDumpOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  level                        10i 0 value
+     d  format                       10i 0 value
+     d  encoding                       *   value options(*string)               const char *
+
+     d xmlSaveFormatFileEnc...
+     d                 pr            10i 0 extproc('xmlSaveFormatFileEnc')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d xmlSaveFileEnc  pr            10i 0 extproc('xmlSaveFileEnc')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * XHTML
+
+     d xmlIsXHTML      pr            10i 0 extproc('xmlIsXHTML')
+     d  systemID                       *   value options(*string)               const xmlChar *
+     d  publicID                       *   value options(*string)               const xmlChar *
+
+      * Compression.
+
+     d xmlGetDocCompressMode...
+     d                 pr            10i 0 extproc('xmlGetDocCompressMode')
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlSetDocCompressMode...
+     d                 pr                  extproc('xmlSetDocCompressMode')
+     d  doc                                value like(xmlDocPtr)
+     d  mode                         10i 0 value
+
+     d xmlGetCompressMode...
+     d                 pr            10i 0 extproc('xmlGetCompressMode')
+
+     d xmlSetCompressMode...
+     d                 pr                  extproc('xmlSetCompressMode')
+     d  mode                         10i 0 value
+
+      * DOM-wrapper helper functions.
+
+     d xmlDOMWrapNewCtxt...
+     d                 pr                  extproc('xmlDOMWrapNewCtxt')
+     d                                     like(xmlDOMWrapCtxtPtr)
+
+     d xmlDOMWrapFreeCtxt...
+     d                 pr                  extproc('xmlDOMWrapFreeCtxt')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+
+     d xmlDOMWrapReconcileNamespaces...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlDOMWrapReconcileNamespaces')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  options                      10i 0 value
+
+     d xmlDOMWrapAdoptNode...
+     d                 pr            10i 0 extproc('xmlDOMWrapAdoptNode')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+     d  sourceDoc                          value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  destDoc                            value like(xmlDocPtr)
+     d  destParent                         value like(xmlNodePtr)
+     d  options                      10i 0 value
+
+     d xmlDOMWrapRemoveNode...
+     d                 pr            10i 0 extproc('xmlDOMWrapRemoveNode')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  options                      10i 0 value
+
+     d xmlDOMWrapCloneNode...
+     d                 pr            10i 0 extproc('xmlDOMWrapCloneNode')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+     d  sourceDoc                          value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  clonedNode                         like(xmlNodePtr)
+     d  destDoc                            value like(xmlDocPtr)
+     d  destParent                         value like(xmlNodePtr)
+     d  options                      10i 0 value
+
+      /if defined(LIBXML_TREE_ENABLED)
+
+      * 5 interfaces from DOM ElementTraversal, but different in entities
+      * traversal.
+
+     d xmlChildElementCount...
+     d                 pr            20u 0 extproc('xmlChildElementCount')
+     d  parent                             value like(xmlNodePtr)
+
+     d xmlNextElementSibling...
+     d                 pr                  extproc('xmlNextElementSibling')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlFirstElementChild...
+     d                 pr                  extproc('xmlFirstElementChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+
+     d xmlLastElementChild...
+     d                 pr                  extproc('xmlLastElementChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+
+     d xmlPreviousElementSibling...
+     d                 pr                  extproc('xmlPreviousElementSibling')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+      /endif
+
+      /if not defined(XML_PARSER_H__)
+      /include "libxmlrpg/xmlmemory"
+      /endif
+
+      /endif                                                                    XML_TREE_H__
diff --git a/os400/libxmlrpg/uri.rpgle b/os400/libxmlrpg/uri.rpgle
new file mode 100644
index 0000000..9a23d80
--- /dev/null
+++ b/os400/libxmlrpg/uri.rpgle
@@ -0,0 +1,100 @@
+      * Summary: library of generic URI related routines
+      * Description: library of generic URI related routines
+      *              Implements RFC 2396
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_URI_H__)
+      /define XML_URI_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      * xmlURI:
+      *
+      * A parsed URI reference. This is a struct containing the various fields
+      * as described in RFC 2396 but separated for further processing.
+      *
+      * Note: query is a deprecated field which is incorrectly unescaped.
+      * query_raw takes precedence over query if the former is set.
+      * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00127
+
+     d xmlURIPtr       s               *   based(######typedef######)
+
+     d xmlURI          ds                  based(xmlURIPtr)
+     d                                     align qualified
+     d  scheme                         *                                        char *
+     d  opaque                         *                                        char *
+     d  authority                      *                                        char *
+     d  server                         *                                        char *
+     d  user                           *                                        char *
+     d  port                         10i 0
+     d  path                           *                                        char *
+     d  query                          *                                        char *
+     d  fragment                       *                                        char *
+     d  cleanup                      10i 0
+     d  query_raw                      *                                        char *
+
+     d xmlCreateURI    pr                  extproc('xmlCreateURI')
+     d                                     like(xmlURIPtr)
+
+     d xmlBuildURI     pr              *   extproc('xmlBuildURI')               xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  base                           *   value options(*string)               const xmlChar *
+
+     d xmlBuildRelativeURI...
+     d                 pr              *   extproc('xmlBuildRelativeURI')       xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  base                           *   value options(*string)               const xmlChar *
+
+     d xmlParseURI     pr                  extproc('xmlParseURI')
+     d                                     like(xmlURIPtr)
+     d  str                            *   value options(*string)               const char *
+
+     d xmlParseURIRaw  pr                  extproc('xmlParseURIRaw')
+     d                                     like(xmlURIPtr)
+     d  str                            *   value options(*string)               const char *
+     d  raw                          10i 0 value
+
+     d xmlParseURIReference...
+     d                 pr            10i 0 extproc('xmlParseURIReference')
+     d  uri                                value like(xmlURIPtr)
+     d  str                            *   value options(*string)               const char *
+
+     d xmlSaveUri      pr              *   extproc('xmlSaveUri')                xmlChar *
+     d  uri                                value like(xmlURIPtr)
+
+     d xmlPrintURI     pr                  extproc('xmlPrintURI')
+     d  stream                         *   value                                FILE *
+     d  uri                                value like(xmlURIPtr)
+
+     d xmlURIEscapeStr...
+     d                 pr              *   extproc('xmlURIEscapeStr')           xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  list                           *   value options(*string)               const xmlChar *
+
+     d xmlURIUnescapeString...
+     d                 pr              *   extproc('xmlURIUnescapeString')      char *
+     d  str                            *   value options(*string)               const char *
+     d  len                          10i 0 value
+     d  target                         *   value options(*string)               char *
+
+     d xmlNormalizeURIPath...
+     d                 pr            10i 0 extproc('xmlNormalizeURIPath')
+     d  path                           *   value options(*string)               char *
+
+     d xmlURIEscape    pr              *   extproc('xmlURIEscape')              xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlFreeURI      pr                  extproc('xmlFreeURI')
+     d  uri                                value like(xmlURIPtr)
+
+     d xmlCanonicPath  pr              *   extproc('xmlCanonicPath')            xmlChar *
+     d  path                           *   value options(*string)               const xmlChar *
+
+     d xmlPathToURI    pr              *   extproc('xmlPathToURI')              xmlChar *
+     d  path                           *   value options(*string)               const xmlChar *
+
+      /endif                                                                    XML_URI_H__
diff --git a/os400/libxmlrpg/valid.rpgle b/os400/libxmlrpg/valid.rpgle
new file mode 100644
index 0000000..722b89d
--- /dev/null
+++ b/os400/libxmlrpg/valid.rpgle
@@ -0,0 +1,575 @@
+      * Summary: The DTD validation
+      * Description: API for the DTD handling and the validity checking
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_VALID_H__)
+      /define XML_VALID_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlerror"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/list"
+      /include "libxmlrpg/xmlautomata"
+      /include "libxmlrpg/xmlregexp"
+
+      * Validation state added for non-determinist content model.
+
+     d xmlValidStatePtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlValidityErrorFunc:
+      * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
+      *        but comes from ctxt->userData (which normally contains such
+      *        a pointer); ctxt->userData can be changed by the user.
+      * @msg:  the string to format *printf like vararg
+      * @...:  remaining arguments to the format
+      *
+      * Callback called when a validity error is found. This is a message
+      * oriented function similar to an *printf function.
+
+     d xmlValidityErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlValidityWarningFunc:
+      * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
+      *        but comes from ctxt->userData (which normally contains such
+      *        a pointer); ctxt->userData can be changed by the user.
+      * @msg:  the string to format *printf like vararg
+      * @...:  remaining arguments to the format
+      *
+      * Callback called when a validity warning is found. This is a message
+      * oriented function similar to an *printf function.
+
+     d xmlValidityWarningFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlValidCtxt:
+      * An xmlValidCtxt is used for error reporting when validating.
+
+     d xmlValidCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlValidCtxt    ds                  based(xmlValidCtxtPtr)
+     d                                     align qualified
+     d  userdata                       *                                        void *
+     d  error                              like(xmlValidityErrorFunc)           Error callback
+     d  warning                            like(xmlValidityWarningFunc)         Warning callback
+      *
+      * Node analysis stack used when validating within entities
+      *
+     d  node                               like(xmlNodePtr)                     Current parsed Node
+     d  nodeNr                       10i 0                                      Parsing stack depth
+     d  nodeMax                      10i 0                                      Max stack depth
+     d  nodeTab                        *                                        xmlNodePtr *
+      *
+     d  finishDtd                    10u 0                                      Finish validtng DTD?
+     d  doc                                like(xmlDocPtr)                      The document
+     d  valid                        10i 0                                      Temp check result
+      *
+      * state state used for non-determinist content validation
+      *
+     d  vstate                         *                                        xmlValidState *
+     d  vstateNr                     10i 0                                      Validat. stack depth
+     d  vstateMax                    10i 0                                      Max stack depth
+     d  vstateTab                      *                                        xmlValidState *
+      *
+      /if defined(LIBXML_REGEXP_ENABLED)
+     d  am                                 like(xmlAutomataPtr)                 The automata
+     d  state                              like(xmlAutomataStatePtr)            Automata build state
+      /else
+     d  am                             *
+     d  state                          *
+      /endif
+
+      * ALL notation declarations are stored in a table.
+      * There is one table per DTD.
+
+     d xmlNotationTablePtr...
+     d                 s               *   based(######typedef######)
+
+      * ALL element declarations are stored in a table.
+      * There is one table per DTD.
+
+     d xmlElementTablePtr...
+     d                 s               *   based(######typedef######)
+
+      * ALL attribute declarations are stored in a table.
+      * There is one table per DTD.
+
+     d xmlAttributeTablePtr...
+     d                 s               *   based(######typedef######)
+
+      * ALL IDs attributes are stored in a table.
+      * There is one table per document.
+
+     d xmlIDTablePtr   s               *   based(######typedef######)
+
+      * ALL Refs attributes are stored in a table.
+      * There is one table per document.
+
+     d xmlRefTablePtr  s               *   based(######typedef######)
+
+      * Notation
+
+     d xmlAddNotationDecl...
+     d                 pr                  extproc('xmlAddNotationDecl')
+     d                                     like(xmlNotationPtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  PublicID                       *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyNotationTable...
+     d                 pr                  extproc('xmlCopyNotationTable')
+     d                                     like(xmlNotationPtr)
+     d  table                              value like(xmlNotationTablePtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlFreeNotationTable...
+     d                 pr                  extproc('xmlFreeNotationTable')
+     d  table                              value like(xmlNotationTablePtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlDumpNotationDecl...
+     d                 pr                  extproc('xmlDumpNotationDecl')
+     d  buf                                value like(xmlBufferPtr)
+     d  nota                               value like(xmlNotationPtr)
+
+     d xmlDumpNotationTable...
+     d                 pr                  extproc('xmlDumpNotationTable')
+     d  buf                                value like(xmlBufferPtr)
+     d  table                              value like(xmlNotationTablePtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Element Content
+      * the non Doc version are being deprecated
+
+     d xmlNewElementContent...
+     d                 pr                  extproc('xmlNewElementContent')
+     d                                     like(xmlElementContentPtr)
+     d  name                           *   value                                const xmlChar *
+     d  type                               value like(xmlElementContentType)
+
+     d xmlCopyElementContent...
+     d                 pr                  extproc('xmlCopyElementContent')
+     d                                     like(xmlElementContentPtr)
+     d  content                            value like(xmlElementContentPtr)
+
+     d xmlFreeElementContent...
+     d                 pr                  extproc('xmlFreeElementContent')
+     d  cur                                value like(xmlElementContentPtr)
+
+      * the new versions with doc argument
+
+     d xmlNewDocElementContent...
+     d                 pr                  extproc('xmlNewDocElementContent')
+     d                                     like(xmlElementContentPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value                                const xmlChar *
+     d  type                               value like(xmlElementContentType)
+
+     d xmlCopyDocElementContent...
+     d                 pr                  extproc('xmlCopyDocElementContent')
+     d                                     like(xmlElementContentPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                            value like(xmlElementContentPtr)
+
+     d xmlFreeDocElementContent...
+     d                 pr                  extproc('xmlFreeDocElementContent')
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlElementContentPtr)
+
+     d xmlSnprintfElementContent...
+     d                 pr                  extproc('xmlSnprintfElementContent')
+     d  buf                       65535    options(*varsize)
+     d  size                         10i 0 value
+     d  content                            value like(xmlElementContentPtr)
+     d  englob                       10i 0 value
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+      * DEPRECATED
+     d xmlSprintfElementContent...
+     d                 pr                  extproc('xmlSprintfElementContent')
+     d  buf                       65535    options(*varsize)
+     d  content                            value like(xmlElementContentPtr)
+     d  englob                       10i 0 value
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * DEPRECATED
+
+      * Element
+
+     d xmlAddElementDecl...
+     d                 pr                  extproc('xmlAddElementDecl')
+     d                                     like(xmlElementPtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                               value like(xmlElementTypeVal)
+     d  content                            value like(xmlElementContentPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyElementTable...
+     d                 pr                  extproc('xmlCopyElementTable')
+     d                                     like(xmlElementTablePtr)
+     d  table                              value like(xmlElementTablePtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlFreeElementTable...
+     d                 pr                  extproc('xmlFreeElementTable')
+     d  table                              value like(xmlElementTablePtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlDumpElementTable...
+     d                 pr                  extproc('xmlDumpElementTable')
+     d  buf                                value like(xmlBufferPtr)
+     d  table                              value like(xmlElementTablePtr)
+
+     d xmlDumpElementDecl...
+     d                 pr                  extproc('xmlDumpElementDecl')
+     d  buf                                value like(xmlBufferPtr)
+     d  elem                               value like(xmlElementPtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Enumeration
+
+     d xmlCreateEnumeration...
+     d                 pr                  extproc('xmlCreateEnumeration')
+     d                                     like(xmlEnumerationPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlFreeEnumeration...
+     d                 pr                  extproc('xmlFreeEnumeration')
+     d  cur                                value like(xmlEnumerationPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyEnumeration...
+     d                 pr                  extproc('xmlCopyEnumeration')
+     d                                     like(xmlEnumerationPtr)
+     d  cur                                value like(xmlEnumerationPtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+      * Attribute
+
+     d xmlAddAttributeDecl...
+     d                 pr                  extproc('xmlAddAttributeDecl')
+     d                                     like(xmlAttributePtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+     d  type                               value like(xmlAttributeType)
+     d  def                                value like(xmlAttributeDefault)
+     d  defaultValue                   *   value options(*string)               const xmlChar *
+     d  tree                               value like(xmlEnumerationPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyAttributeTable...
+     d                 pr                  extproc('xmlCopyAttributeTable')
+     d                                     like(xmlAttributeTablePtr)
+     d  table                              value like(xmlAttributeTablePtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlFreeAttributeTable...
+     d                 pr                  extproc('xmlFreeAttributeTable')
+     d  table                              value like(xmlAttributeTablePtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlDumpAttributeTable...
+     d                 pr                  extproc('xmlDumpAttributeTable')
+     d  buf                                value like(xmlBufferPtr)
+     d  table                              value like(xmlAttributeTablePtr)
+
+     d xmlDumpAttributeDecl...
+     d                 pr                  extproc('xmlDumpAttributeDecl')
+     d  buf                                value like(xmlBufferPtr)
+     d  attr                               value like(xmlAttributePtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * IDs
+
+     d xmlAddID        pr                  extproc('xmlAddID')
+     d                                     like(xmlIDPtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlFreeIdTable  pr                  extproc('xmlFreeIDTable')
+     d  table                              value like(xmlIDTablePtr)
+
+     d xmlGetID        pr                  extproc('xmlGetID')
+     d                                     like(xmlAttrPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ID                             *   value options(*string)               const xmlChar *
+
+     d xmlIsID         pr            10i 0 extproc('xmlIsID')
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlRemoveID     pr            10i 0 extproc('xmlRemoveID')
+     d  doc                                value like(xmlDocPtr)
+     d  attr                               value like(xmlAttrPtr)
+
+      * IDREFs
+
+     d xmlAddRef       pr                  extproc('xmlAddRef')
+     d                                     like(xmlRefPtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlFreeRefTable...
+     d                 pr                  extproc('xmlFreeRefTable')
+     d  table                              value like(xmlRefTablePtr)
+
+     d xmlIsRef        pr            10i 0 extproc('xmlIsRef')
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlRemoveRef    pr            10i 0 extproc('xmlRemoveRef')
+     d  doc                                value like(xmlDocPtr)
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlGetRefs      pr                  extproc('xmlGetRefs')
+     d                                     like(xmlListPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ID                             *   value options(*string)               const xmlChar *
+
+      * The public function calls related to validity checking.
+
+      /if defined(LIBXML_VALID_ENABLED)
+      * Allocate/Release Validation Contexts
+
+     d xmlNewValidCtxt...
+     d                 pr                  extproc('xmlNewValidCtxt')
+     d                                     like(xmlValidCtxtPtr)
+
+     d xmlFreeValidCtxt...
+     d                 pr                  extproc('xmlFreeValidCtxt')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+
+     d xmlValidateRoot...
+     d                 pr            10i 0 extproc('xmlValidateRoot')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlValidateElementDecl...
+     d                 pr            10i 0 extproc('xmlValidateElementDecl')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlElementPtr)
+
+     d xmlValidNormalizeAttributeValue...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                      'xmlValidNormalizeAttributeValue')
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidCtxtNormalizeAttributeValue...
+     d                 pr              *   extproc('xmlValidCtxt+               xmlChar *
+     d                                     NormalizeAttributeValue')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateAttributeDecl...
+     d                 pr            10i 0 extproc('xmlValidateAttributeDecl')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  attr                               value like(xmlAttributePtr)
+
+     d xmlValidateAttributeValue...
+     d                 pr            10i 0 extproc('xmlValidateAttributeValue')
+     d  type                               value like(xmlAttributeType)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateNotationDecl...
+     d                 pr            10i 0 extproc('xmlValidateNotationDecl')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  nota                               value like(xmlNotationPtr)
+
+     d xmlValidateDtd  pr            10i 0 extproc('xmlValidateDtd')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  dtd                                value like(xmlDtdPtr)
+
+     d xmlValidateDtdFinal...
+     d                 pr            10i 0 extproc('xmlValidateDtdFinal')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlValidateDocument...
+     d                 pr            10i 0 extproc('xmlValidateDocument')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlValidateElement...
+     d                 pr            10i 0 extproc('xmlValidateElement')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlValidateOneElement...
+     d                 pr            10i 0 extproc('xmlValidateOneElement')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlValidateOneAttribute...
+     d                 pr            10i 0 extproc('xmlValidateOneAttribute')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  attr                               value like(xmlAttrPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateOneNamespace...
+     d                 pr            10i 0 extproc('xmlValidateOneNamespace')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  ns                                 value like(xmlNsPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateDocumentFinal...
+     d                 pr            10i 0 extproc('xmlValidateDocumentFinal')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+      /endif                                                                    LIBXML_VALID_ENABLED
+
+      /undefine XML_TESTVAL
+      /if defined(LIBXML_VALID_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlValidateNotationUse...
+     d                 pr            10i 0 extproc('xmlValidateNotationUse')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  notationName                   *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlIsMixedElement...
+     d                 pr            10i 0 extproc('xmlIsMixedElement')
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdAttrDesc...
+     d                 pr                  extproc('xmlGetDtdAttrDesc')
+     d                                     like(xmlAttributePtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdQAttrDesc...
+     d                 pr                  extproc('xmlGetDtdQAttrDesc')
+     d                                     like(xmlAttributePtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdNotationDesc...
+     d                 pr                  extproc('xmlGetDtdNotationDesc')
+     d                                     like(xmlNotationPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdQElementDesc...
+     d                 pr                  extproc('xmlGetDtdQElementDesc')
+     d                                     like(xmlElementPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdElementDesc...
+     d                 pr                  extproc('xmlGetDtdElementDesc')
+     d                                     like(xmlElementPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_VALID_ENABLED)
+     d xmlValidGetPotentialChildren...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlValidGetPotentialChildren')
+     d  ctree                          *   value                                xmlElementContent *
+     d  names                          *                                        const xmlChar *(*)
+     d  len                          10i 0
+     d  max                          10i 0 value
+
+     d xmlValidGetValidElements...
+     d                 pr            10i 0 extproc('xmlValidGetValidElements')
+     d  prev                               like(xmlNodePtr)
+     d  next                               like(xmlNodePtr)
+     d  names                          *                                        const xmlChar *(*)
+     d  max                          10i 0 value
+
+     d xmlValidateNameValue...
+     d                 pr            10i 0 extproc('xmlValidateNameValue')
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateNamesValue...
+     d                 pr            10i 0 extproc('xmlValidateNamesValue')
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateNmtokenValue...
+     d                 pr            10i 0 extproc('xmlValidateNmtokenValue')
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateNmtokensValue...
+     d                 pr            10i 0 extproc('xmlValidateNmtokensValue')
+     d  value                          *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_REGEXP_ENABLED)
+      * Validation based on the regexp support
+
+     d xmlValidBuildContentModel...
+     d                 pr            10i 0 extproc('xmlValidBuildContentModel')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  elem                               value like(xmlElementPtr)
+
+     d xmlValidatePushElement...
+     d                 pr            10i 0 extproc('xmlValidatePushElement')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  qname                          *   value options(*string)               const xmlChar *
+
+     d xmlValidatePushCData...
+     d                 pr            10i 0 extproc('xmlValidatePushCData')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  data                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlValidatePopElement...
+     d                 pr            10i 0 extproc('xmlValidatePopElement')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  qname                          *   value options(*string)               const xmlChar *
+
+      /endif                                                                    LIBXML_REGEXP_ENABLD
+      /endif                                                                    LIBXML_VALID_ENABLED
+      /endif                                                                    XML_VALID_H__
diff --git a/os400/libxmlrpg/xinclude.rpgle b/os400/libxmlrpg/xinclude.rpgle
new file mode 100644
index 0000000..c0b68ff
--- /dev/null
+++ b/os400/libxmlrpg/xinclude.rpgle
@@ -0,0 +1,147 @@
+      * Summary: implementation of XInclude
+      * Description: API to handle XInclude processing,
+      * implements the
+      * World Wide Web Consortium Last Call Working Draft 10 November 2003
+      * http://www.w3.org/TR/2003/WD-xinclude-20031110
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XINCLUDE_H__)
+      /define XML_XINCLUDE_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_XINCLUDE_ENABLED)
+
+      * XINCLUDE_NS:
+      *
+      * Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude
+
+     d XINCLUDE_NS     c                   'http://www.w3.org/2003/XInclude'
+
+
+      * XINCLUDE_OLD_NS:
+      *
+      * Define the draft Xinclude namespace: http://www.w3.org/2001/XInclude
+
+     d XINCLUDE_OLD_NS...
+     d                 c                   'http://www.w3.org/2001/XInclude'
+
+      * XINCLUDE_NODE:
+      *
+      * Macro defining "include"
+
+     d XINCLUDE_NODE   c                   'include'
+
+      * XINCLUDE_FALLBACK:
+      *
+      * Macro defining "fallback"
+
+     d XINCLUDE_FALLBACK...
+     d                 c                   'fallback'
+
+      * XINCLUDE_HREF:
+      *
+      * Macro defining "href"
+
+     d XINCLUDE_HREF   c                   'href'
+
+      * XINCLUDE_PARSE:
+      *
+      * Macro defining "parse"
+
+     d XINCLUDE_PARSE  c                   'parse'
+
+      * XINCLUDE_PARSE_XML:
+      *
+      * Macro defining "xml"
+
+     d XINCLUDE_PARSE_XML...
+     d                 c                   'xml'
+
+      * XINCLUDE_PARSE_TEXT:
+      *
+      * Macro defining "text"
+
+     d XINCLUDE_PARSE_TEXT...
+     d                 c                   'text'
+
+      * XINCLUDE_PARSE_ENCODING:
+      *
+      * Macro defining "encoding"
+
+     d XINCLUDE_PARSE_ENCODING...
+     d                 c                   'encoding'
+
+      * XINCLUDE_PARSE_XPOINTER:
+      *
+      * Macro defining "xpointer"
+
+     d XINCLUDE_PARSE_XPOINTER...
+     d                 c                   'xpointer'
+
+     d xmlXIncludeCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      * standalone processing
+
+     d xmlXIncludeProcess...
+     d                 pr            10i 0 extproc('xmlXIncludeProcess')
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlXIncludeProcessFlags...
+     d                 pr            10i 0 extproc('xmlXIncludeProcessFlags')
+     d  doc                                value like(xmlDocPtr)
+     d  flags                        10i 0 value
+
+     d xmlXIncludeProcessFlagsData...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXIncludeProcessFlagsData')
+     d  doc                                value like(xmlDocPtr)
+     d  flags                        10i 0 value
+     d  data                           *   value                                void *
+
+     d xmlXIncludeProcessTreeFlagsData...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXIncludeProcessTreeFlagsData')
+     d  tree                               value like(xmlNodePtr)
+     d  flags                        10i 0 value
+     d  data                           *   value                                void *
+
+     d xmlXIncludeProcessTree...
+     d                 pr            10i 0 extproc('xmlXIncludeProcessTree')
+     d  tree                               value like(xmlNodePtr)
+
+     d xmlXIncludeProcessTreeFlags...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXIncludeProcessTreeFlags')
+     d  tree                               value like(xmlNodePtr)
+     d  flags                        10i 0 value
+
+
+      * contextual processing
+
+     d xmlXIncludeNewContext...
+     d                 pr                  extproc('xmlXIncludeNewContext')
+     d                                     like(xmlXIncludeCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlXIncludeSetFlags...
+     d                 pr            10i 0 extproc('xmlXIncludeSetFlags')
+     d  ctxt                               value like(xmlXIncludeCtxtPtr)
+     d  flags                        10i 0 value
+
+     d xmlXIncludeFreeContext...
+     d                 pr                  extproc('xmlXIncludeFreeContext')
+     d  ctxt                               value like(xmlXIncludeCtxtPtr)
+
+     d xmlXIncludeProcessNode...
+     d                 pr            10i 0 extproc('xmlXIncludeProcessNode')
+     d  ctxt                               value like(xmlXIncludeCtxtPtr)
+     d  tree                               value like(xmlNodePtr)
+
+      /endif                                                                    XINCLUDE_ENABLED
+      /endif                                                                    XML_XINCLUDE_H__
diff --git a/os400/libxmlrpg/xlink.rpgle b/os400/libxmlrpg/xlink.rpgle
new file mode 100644
index 0000000..964e605
--- /dev/null
+++ b/os400/libxmlrpg/xlink.rpgle
@@ -0,0 +1,164 @@
+      * Summary: unfinished XLink detection module
+      * Description: unfinished XLink detection module
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XLINK_H__)
+      /define XML_XLINK_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_XPTR_ENABLED)
+
+      * Various defines for the various Link properties.
+      *
+      * NOTE: the link detection layer will try to resolve QName expansion
+      *       of namespaces. If "foo" is the prefix for "http://foo.com/";
+      *       then the link detection layer will expand role="foo:myrole"
+      *       to "http://foo.com/:myrole";.
+      * NOTE: the link detection layer will expand URI-Refences found on
+      *       href attributes by using the base mechanism if found.
+
+     d xlinkRef        s               *   based(######typedef######)           xmlChar *
+     d xlinkRole       s               *   based(######typedef######)           xmlChar *
+     d xlinkTitle      s               *   based(######typedef######)           xmlChar *
+
+     d xlinkType       s             10i 0 based(######typedef######)           enum
+     d  XLINK_TYPE_NONE...
+     d                 c                   0
+     d  XLINK_TYPE_SIMPLE...
+     d                 c                   1
+     d  XLINK_TYPE_EXTENDED...
+     d                 c                   2
+     d  XLINK_TYPE_EXTENDED_SET...
+     d                 c                   3
+
+     d xlinkShow       s             10i 0 based(######typedef######)           enum
+     d  XLINK_SHOW_NONE...
+     d                 c                   0
+     d  XLINK_SHOW_NEW...
+     d                 c                   1
+     d  XLINK_SHOW_EMBED...
+     d                 c                   2
+     d  XLINK_SHOW_REPLACE...
+     d                 c                   3
+
+     d xlinkActuate    s             10i 0 based(######typedef######)           enum
+     d  XLINK_ACTUATE_NONE...
+     d                 c                   0
+     d  XLINK_ACTUATE_AUTO...
+     d                 c                   1
+     d  XLINK_ACTUATE_ONREQUEST...
+     d                 c                   2
+
+      * xlinkNodeDetectFunc:
+      * @ctx:  user data pointer
+      * @node:  the node to check
+      *
+      * This is the prototype for the link detection routine.
+      * It calls the default link detection callbacks upon link detection.
+
+     d xlinkNodeDetectFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * The link detection module interact with the upper layers using
+      * a set of callback registered at parsing time.
+
+      * xlinkSimpleLinkFunk:
+      * @ctx:  user data pointer
+      * @node:  the node carrying the link
+      * @href:  the target of the link
+      * @role:  the role string
+      * @title:  the link title
+      *
+      * This is the prototype for a simple link detection callback.
+
+     d xlinkSimpleLinkFunk...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xlinkExtendedLinkFunk:
+      * @ctx:  user data pointer
+      * @node:  the node carrying the link
+      * @nbLocators: the number of locators detected on the link
+      * @hrefs:  pointer to the array of locator hrefs
+      * @roles:  pointer to the array of locator roles
+      * @nbArcs: the number of arcs detected on the link
+      * @from:  pointer to the array of source roles found on the arcs
+      * @to:  pointer to the array of target roles found on the arcs
+      * @show:  array of values for the show attributes found on the arcs
+      * @actuate:  array of values for the actuate attributes found on the arcs
+      * @nbTitles: the number of titles detected on the link
+      * @title:  array of titles detected on the link
+      * @langs:  array of xml:lang values for the titles
+      *
+      * This is the prototype for a extended link detection callback.
+
+     d xlinkExtendedLinkFunk...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xlinkExtendedLinkSetFunk:
+      * @ctx:  user data pointer
+      * @node:  the node carrying the link
+      * @nbLocators: the number of locators detected on the link
+      * @hrefs:  pointer to the array of locator hrefs
+      * @roles:  pointer to the array of locator roles
+      * @nbTitles: the number of titles detected on the link
+      * @title:  array of titles detected on the link
+      * @langs:  array of xml:lang values for the titles
+      *
+      * This is the prototype for a extended link set detection callback.
+
+     d xlinkExtendedLinkSetFunk...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * This is the structure containing a set of Links detection callbacks.
+      *
+      * There is no default xlink callbacks, if one want to get link
+      * recognition activated, those call backs must be provided before parsing.
+
+     d xlinkHandlerPtr...
+     d                 s               *   based(######typedef######)           xmlChar *
+
+     d xlinkHandler    ds                  based(xlinkHandlerPtr)
+     d                                     align qualified
+     d  simple                             like(xlinkSimpleLinkFunk)
+     d  extended                           like(xlinkExtendedLinkFunk)
+     d  set                                like(xlinkExtendedLinkSetFunk)
+
+      * The default detection routine, can be overridden, they call the default
+      * detection callbacks.
+
+     d xlinkGetDefaultDetect...
+     d                 pr                  extproc('xlinkGetDefaultDetect')
+     d                                     like(xlinkNodeDetectFunc)
+
+     d xlinkSetDefaultDetect...
+     d                 pr                  extproc('xlinkSetDefaultDetect')
+     d  func                               value like(xlinkNodeDetectFunc)
+
+      * Routines to set/get the default handlers.
+
+     d xlinkGetDefaultHandler...
+     d                 pr                  extproc('xlinkGetDefaultHandler')
+     d                                     like(xlinkHandlerPtr)
+
+     d xlinkSetDefaultHandler...
+     d                 pr                  extproc('xlinkSetDefaultHandler')
+     d  handler                            value like(xlinkHandlerPtr)
+
+      * Link detection module itself.
+
+     d xlinkIsLink     pr                  extproc('xlinkIsLink')
+     d                                     like(xlinkType)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+
+      /endif                                                                    LIBXML_XPTR_ENABLED
+      /endif                                                                    XML_XLINK_H__
diff --git a/os400/libxmlrpg/xmlIO.rpgle b/os400/libxmlrpg/xmlIO.rpgle
new file mode 100644
index 0000000..72911bc
--- /dev/null
+++ b/os400/libxmlrpg/xmlIO.rpgle
@@ -0,0 +1,441 @@
+      * Summary: interface for the I/O interfaces used by the parser
+      * Description: interface for the I/O interfaces used by the parser
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_IO_H__)
+      /define XML_IO_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      * Those are the functions and datatypes for the parser input
+      * I/O structures.
+
+      * xmlInputMatchCallback:
+      * @filename: the filename or URI
+      *
+      * Callback used in the I/O Input API to detect if the current handler
+      * can provide input fonctionnalities for this resource.
+      *
+      * Returns 1 if yes and 0 if another Input module should be used
+
+     d xmlInputMatchCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlInputOpenCallback:
+      * @filename: the filename or URI
+      *
+      * Callback used in the I/O Input API to open the resource
+      *
+      * Returns an Input context or NULL in case or error
+
+     d xmlInputOpenCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlInputReadCallback:
+      * @context:  an Input context
+      * @buffer:  the buffer to store data read
+      * @len:  the length of the buffer in bytes
+      *
+      * Callback used in the I/O Input API to read the resource
+      *
+      * Returns the number of bytes read or -1 in case of error
+
+     d xmlInputReadCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlInputCloseCallback:
+      * @context:  an Input context
+      *
+      * Callback used in the I/O Input API to close the resource
+      *
+      * Returns 0 or -1 in case of error
+
+     d xmlInputCloseCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      * Those are the functions and datatypes for the library output
+      * I/O structures.
+
+      * xmlOutputMatchCallback:
+      * @filename: the filename or URI
+      *
+      * Callback used in the I/O Output API to detect if the current handler
+      * can provide output fonctionnalities for this resource.
+      *
+      * Returns 1 if yes and 0 if another Output module should be used
+
+     d xmlOutputMatchCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlOutputOpenCallback:
+      * @filename: the filename or URI
+      *
+      * Callback used in the I/O Output API to open the resource
+      *
+      * Returns an Output context or NULL in case or error
+
+     d xmlOutputOpenCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlOutputWriteCallback:
+      * @context:  an Output context
+      * @buffer:  the buffer of data to write
+      * @len:  the length of the buffer in bytes
+      *
+      * Callback used in the I/O Output API to write to the resource
+      *
+      * Returns the number of bytes written or -1 in case of error
+
+     d xmlOutputWriteCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlOutputCloseCallback:
+      * @context:  an Output context
+      *
+      * Callback used in the I/O Output API to close the resource
+      *
+      * Returns 0 or -1 in case of error
+
+     d xmlOutputCloseCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      /include "libxmlrpg/globals"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/encoding"
+
+     d xmlParserInputBuffer...
+     d                 ds                  based(xmlParserInputBufferPtr)
+     d                                     align qualified
+     d  context                        *                                        void *
+     d  readcallback                       like(xmlInputReadCallback)
+     d  closecallback                      like(xmlInputCloseCallback)
+      *
+     d  encoder                            like(xmlCharEncodingHandlerPtr)      Conversions --> UTF8
+      *
+     d  buffer                             like(xmlBufPtr)                      UTF-8 local buffer
+     d  raw                                like(xmlBufPtr)                      Raw input buffer
+     d  compressed                   10i 0
+     d  error                        10i 0
+     d  rawconsumed                  20u 0
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlOutputBuffer...
+     d                 ds                  based(xmlOutputBufferPtr)
+     d                                     align qualified
+     d  context                        *                                        void *
+     d  writecallback                      like(xmlOutputWriteCallback)
+     d  closecallback                      like(xmlOutputCloseCallback)
+      *
+     d  encoder                            like(xmlCharEncodingHandlerPtr)      Conversions --> UTF8
+      *
+     d  buffer                             like(xmlBufPtr)                      UTF-8/ISOLatin local
+     d  conv                               like(xmlBufPtr)                      Buffer for output
+     d  written                      10i 0                                      Total # byte written
+     d  error                        10i 0
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Interfaces for input
+
+     d xmlCleanupInputCallbacks...
+     d                 pr                  extproc('xmlCleanupInputCallbacks')
+
+     d xmlPopInputCallbacks...
+     d                 pr            10i 0 extproc('xmlPopInputCallbacks')
+
+     d xmlRegisterDefaultInputCallbacks...
+     d                 pr                  extproc(
+     d                                      'xmlRegisterDefaultInputCallbacks')
+
+     d xmlAllocParserInputBuffer...
+     d                 pr                  extproc('xmlAllocParserInputBuffer')
+     d                                     like(xmlParserInputBufferPtr)
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateFilename...
+     d                 pr                  extproc(
+     d                                     'xmlParserInputBufferCreateFilename')
+     d                                     like(xmlParserInputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateFile...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateFile')
+     d                                     like(xmlParserInputBufferPtr)
+     d  file                           *   value                                FILE *
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateFd...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateFd')
+     d                                     like(xmlParserInputBufferPtr)
+     d  fd                           10i 0 value
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateMem...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateMem')
+     d                                     like(xmlParserInputBufferPtr)
+     d  mem                            *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateStatic...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateStatic')
+     d                                     like(xmlParserInputBufferPtr)
+     d  mem                            *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateIO...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateIO')
+     d                                     like(xmlParserInputBufferPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferRead...
+     d                 pr            10i 0 extproc('xmlParserInputBufferRead')
+     d  in                                 value like(xmlParserInputBufferPtr)
+     d  len                          10i 0 value
+
+     d xmlParserInputBufferGrow...
+     d                 pr            10i 0 extproc('xmlParserInputBufferGrow')
+     d  in                                 value like(xmlParserInputBufferPtr)
+     d  len                          10i 0 value
+
+     d xmlParserInputBufferPush...
+     d                 pr            10i 0 extproc('xmlParserInputBufferPush')
+     d  in                                 value like(xmlParserInputBufferPtr)
+     d  len                          10i 0 value
+     d  buf                            *   value options(*string)               const char *
+
+     d xmlFreeParserInputBuffer...
+     d                 pr                  extproc('xmlFreeParserInputBuffer')
+     d  in                                 value like(xmlParserInputBufferPtr)
+
+     d xmlParserGetDirectory...
+     d                 pr              *   extproc('xmlParserGetDirectory')     char *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlRegisterInputCallbacks...
+     d                 pr            10i 0 extproc('xmlRegisterInputCallbacks')
+     d  matchFunc                          value like(xmlInputMatchCallback)
+     d  openFunc                           value like(xmlInputOpenCallback)
+     d  readFunc                           value like(xmlInputReadCallback)
+     d  closeFunc                          value like(xmlInputCloseCallback)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      * Interfaces for output
+
+     d xmlCleanupOutputCallbacks...
+     d                 pr                  extproc('xmlCleanupOutputCallbacks')
+
+     d xmlRegisterDefaultOutputCallbacks...
+     d                 pr                  extproc(
+     d                                      'xmlRegisterDefaultOuputCallbacks')
+
+     d xmlAllocOutputBuffer...
+     d                 pr                  extproc('xmlAllocOutputBuffer')
+     d                                     like(xmlOutputBufferPtr)
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+     d xmlOutputBufferCreateFilename...
+     d                 pr                  extproc(
+     d                                      'xmlOutputBufferCreateFilename')
+     d                                     like(xmlOutputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+     d  compression                  10i 0 value
+
+     d xmlOutputBufferCreateFile...
+     d                 pr                  extproc('xmlOutputBufferCreateFile')
+     d                                     like(xmlOutputBufferPtr)
+     d  file                           *   value                                FILE *
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+     d xmlOutputBufferCreateBuffer...
+     d                 pr                  extproc(
+     d                                      'xmlOutputBufferCreateBuffer')
+     d                                     like(xmlOutputBufferPtr)
+     d  buffer                             value like(xmlBufferPtr)
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+     d xmlOutputBufferCreateFd...
+     d                 pr                  extproc('xmlOutputBufferCreateFd')
+     d                                     like(xmlOutputBufferPtr)
+     d  fd                           10i 0 value
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+     d xmlOutputBufferCreateIO...
+     d                 pr                  extproc('xmlOutputBufferCreateIO')
+     d                                     like(xmlOutputBufferPtr)
+     d  iowrite                            value like(xmlOutputWriteCallback)
+     d  ioclose                            value like(xmlOutputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+      * Couple of APIs to get the output without digging into the buffers
+
+     d xmlOutputBufferGetContent...
+     d                 pr              *   extproc('xmlOutputBufferGetContent') const xmlChar *
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlOutputBufferGetSize...
+     d                 pr            10u 0 extproc('xmlOutputBufferGetSize')    size_t
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlOutputBufferWrite...
+     d                 pr            10i 0 extproc('xmlOutputBufferWrite')
+     d  out                                value like(xmlOutputBufferPtr)
+     d  len                          10i 0 value
+     d  buf                            *   value options(*string)               const char *
+
+     d xmlOutputBufferWriteString...
+     d                 pr            10i 0 extproc('xmlOutputBufferWriteString')
+     d  out                                value like(xmlOutputBufferPtr)
+     d  str                            *   value options(*string)               const char *
+
+     d xmlOutputBufferWriteEscape...
+     d                 pr            10i 0 extproc('xmlOutputBufferWriteEscape')
+     d  out                                value like(xmlOutputBufferPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  escaping                           value like(xmlCharEncodingOutputFunc)
+
+     d xmlOutputBufferFlush...
+     d                 pr            10i 0 extproc('xmlOutputBufferFlush')
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlOutputBufferClose...
+     d                 pr            10i 0 extproc('xmlOutputBufferClose')
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlRegisterOutputCallbacks...
+     d                 pr            10i 0 extproc('xmlRegisterOutputCallbacks')
+     d  matchFunc                          value like(xmlOutputMatchCallback)
+     d  openFunc                           value like(xmlOutputOpenCallback)
+     d  writeFunc                          value like(xmlOutputWriteCallback)
+     d  closeFunc                          value like(xmlOutputCloseCallback)
+
+      /if defined(LIBXML_HTTP_ENABLED)
+
+      *  This function only exists if HTTP support built into the library
+
+     d xmlRegisterHTTPPostCallbacks...
+     d                 pr                  extproc(
+     d                                      'xmlRegisterHTTPPostCallbacks')
+
+      /endif                                                                    LIBXML_HTTP_ENABLED
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlCheckHTTPInput...
+     d                 pr                  extproc('xmlCheckHTTPInput')
+     d                                     like(xmlParserInputPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  ret                                value like(xmlParserInputPtr)
+
+      * A predefined entity loader disabling network accesses
+
+     d xmlNoNetExternalEntityLoader...
+     d                 pr                  extproc(
+     d                                      'xmlNoNetExternalEntityLoader')
+     d                                     like(xmlParserInputPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  ID                             *   value options(*string)               const char *
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      * xmlNormalizeWindowsPath is obsolete, don't use it.
+      * Check xmlCanonicPath in uri.h for a better alternative.
+
+     d xmlNormalizeWindowsPath...
+     d                 pr              *   extproc('xmlNormalizeWindowsPath')   xmlChar *
+     d  path                           *   value options(*string)               const xmlChar *
+
+     d xmlCheckFilename...
+     d                 pr            10i 0 extproc('xmlCheckFilename')
+     d  path                           *   value options(*string)               const char *
+
+      * Default 'file://' protocol callbacks
+
+     d xmlFileMatch    pr            10i 0 extproc('xmlFileMatch')
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlFileOpen     pr              *   extproc('xmlFileOpen')               void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlFileRead     pr            10i 0 extproc('xmlFileRead')
+     d  context                        *   value                                void *
+     d  buffer                    65535    options(*varsize)
+     d  len                          10i 0 value
+
+     d xmlFileClose    pr            10i 0 extproc('xmlFileClose')
+     d  context                        *   value                                void *
+
+      * Default 'http://' protocol callbacks
+
+      /if defined(LIBXML_HTTP_ENABLED)
+     d xmlIOHTTPMatch  pr            10i 0 extproc('xmlIOHTTPMatch')
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlIOHTTPOpen   pr              *   extproc('xmlIOHTTPOpen')             void *
+     d  filename                       *   value options(*string)               const char *
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlIOHTTPOpenW  pr              *   extproc('xmlIOHTTPOpenW')            void *
+     d  post_uri                       *   value options(*string)               const char *
+     d  compression                  10i 0 value
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlIOHTTPRead   pr            10i 0 extproc('xmlIOHTTPRead')
+     d  context                        *   value                                void *
+     d  buffer                    65535    options(*varsize)
+     d  len                          10i 0 value
+
+     d xmlIOHTTPClose  pr            10i 0 extproc('xmlIOHTTPClose')
+     d  context                        *   value                                void *
+      /endif                                                                    LIBXML_HTTP_ENABLED
+
+      * Default 'ftp://' protocol callbacks
+
+      /if defined(LIBXML_FTP_ENABLED)
+     d xmlIOFTPMatch   pr            10i 0 extproc('xmlIOFTPMatch')
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlIOFTPOpen    pr              *   extproc('xmlIOFTPOpen')              void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlIOFTPRead    pr            10i 0 extproc('xmlIOFTPRead')
+     d  context                        *   value                                void *
+     d  buffer                    65535    options(*varsize)
+     d  len                          10i 0 value
+
+     d xmlIOFTPClose   pr            10i 0 extproc('xmlIOFTPClose')
+     d  context                        *   value                                void *
+      /endif                                                                    LIBXML_FTP_ENABLED
+
+      /endif                                                                    XML_IO_H__
diff --git a/os400/libxmlrpg/xmlautomata.rpgle b/os400/libxmlrpg/xmlautomata.rpgle
new file mode 100644
index 0000000..4979725
--- /dev/null
+++ b/os400/libxmlrpg/xmlautomata.rpgle
@@ -0,0 +1,179 @@
+      * Summary: API to build regexp automata
+      * Description: the API to build regexp automata
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_AUTOMATA_H__)
+      /define XML_AUTOMATA_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_REGEXP_ENABLED)
+      /if defined(LIBXML_AUTOMATA_ENABLED)
+
+      /include "libxmlrpg/xmlregexp"
+
+      * xmlAutomataPtr:
+      *
+      * A libxml automata description, It can be compiled into a regexp
+
+     d xmlAutomataPtr  s               *   based(######typedef######)
+
+      * xmlAutomataStatePtr:
+      *
+      * A state int the automata description,
+
+     d xmlAutomataStatePtr...
+     d                 s               *   based(######typedef######)
+
+      * Building API
+
+     d xmlNewAutomata  pr                  extproc('xmlNewAutomata')
+     d                                     like(xmlAutomataPtr)
+
+     d xmlFreeAutomata...
+     d                 pr                  extproc('xmlFreeAutomata')
+     d  am                                 value like(xmlAutomataPtr)
+
+     d xmlAutomataGetInitState...
+     d                 pr                  extproc('xmlAutomataGetInitState')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+
+     d xmlAutomataSetFinalState...
+     d                 pr            10i 0 extproc('xmlAutomataSetFinalState')
+     d  am                                 value like(xmlAutomataPtr)
+     d  state                              value like(xmlAutomataStatePtr)
+
+     d xmlAutomataNewState...
+     d                 pr                  extproc('xmlAutomataNewState')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+
+     d xmlAutomataNewTransition...
+     d                 pr                  extproc('xmlAutomataNewTransition')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewTransition2...
+     d                 pr                  extproc('xmlAutomataNewTransition2')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  token2                         *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewNegTrans...
+     d                 pr                  extproc('xmlAutomataNewNegTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  token2                         *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewCountTrans...
+     d                 pr                  extproc('xmlAutomataNewCountTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewCountTrans2...
+     d                 pr                  extproc('xmlAutomataNewCountTrans2')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  token2                         *   value options(*string)               const xmlChar *
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewOnceTrans...
+     d                 pr                  extproc('xmlAutomataNewOnceTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewOnceTrans2...
+     d                 pr                  extproc('xmlAutomataNewOnceTrans2')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  token2                         *   value options(*string)               const xmlChar *
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewAllTrans...
+     d                 pr                  extproc('xmlAutomataNewAllTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  lax                          10i 0 value
+
+     d xmlAutomataNewEpsilon...
+     d                 pr                  extproc('xmlAutomataNewEpsilon')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+
+     d xmlAutomataNewCountedTrans...
+     d                 pr                  extproc('xmlAutomataNewCountedTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  counter                      10i 0 value
+
+     d xmlAutomataNewCounterTrans...
+     d                 pr                  extproc('xmlAutomataNewCounterTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  counter                      10i 0 value
+
+     d xmlAutomataNewCounter...
+     d                 pr            10i 0 extproc('xmlAutomataNewCounter')
+     d  am                                 value like(xmlAutomataPtr)
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+
+     d xmlAutomataCompile...
+     d                 pr                  extproc('xmlAutomataCompile')
+     d                                     like(xmlRegexpPtr)
+     d  am                                 value like(xmlAutomataPtr)
+
+     d xmlAutomataIsDeterminist...
+     d                 pr            10i 0 extproc('xmlAutomataIsDeterminist')
+     d  am                                 value like(xmlAutomataPtr)
+
+      /endif                                                                    AUTOMATA_ENABLED
+      /endif                                                                    LIBXML_REGEXP_ENABLD
+      /endif                                                                    XML_AUTOMATA_H__
diff --git a/os400/libxmlrpg/xmlerror.rpgle b/os400/libxmlrpg/xmlerror.rpgle
new file mode 100644
index 0000000..b77caad
--- /dev/null
+++ b/os400/libxmlrpg/xmlerror.rpgle
@@ -0,0 +1,1681 @@
+      * Summary: error handling
+      * Description: the API used to report errors
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /include "libxmlrpg/parser"
+
+      /if not defined(XML_ERROR_H__)
+      /define XML_ERROR_H__
+
+      * xmlErrorLevel:
+      *
+      * Indicates the level of an error
+
+     d xmlErrorLevel   s             10i 0 based(######typedef######)           enum
+     d  XML_ERR_NONE   c                   0
+     d  XML_ERR_WARNING...                                                      A simple warning
+     d                 c                   1
+     d  XML_ERR_ERROR  c                   2                                    A recoverable error
+     d  XML_ERR_FATAL  c                   3                                    A fatal error
+
+      * xmlErrorDomain:
+      *
+      * Indicates where an error may have come from
+
+     d xmlErrorDomain  s             10i 0 based(######typedef######)           enum
+     d  XML_FROM_NONE  c                   0
+     d  XML_FROM_PARSER...                                                      XML parser
+     d                 c                   1
+     d  XML_FROM_TREE  c                   2                                    Tree module
+     d  XML_FROM_NAMESPACE...                                                   XML Namespace module
+     d                 c                   3
+     d  XML_FROM_DTD   c                   4                                    DTD validation
+     d  XML_FROM_HTML  c                   5                                    HTML parser
+     d  XML_FROM_MEMORY...                                                      Memory allocator
+     d                 c                   6
+     d  XML_FROM_OUTPUT...                                                      serialization code
+     d                 c                   7
+     d  XML_FROM_IO    c                   8                                    Input/Output stack
+     d  XML_FROM_FTP   c                   9                                    FTP module
+     d  XML_FROM_HTTP  c                   10                                   HTTP module
+     d  XML_FROM_XINCLUDE...                                                    XInclude processing
+     d                 c                   11
+     d  XML_FROM_XPATH...                                                       XPath module
+     d                 c                   12
+     d  XML_FROM_XPOINTER...                                                    XPointer module
+     d                 c                   13
+     d  XML_FROM_REGEXP...                                                      Regexp module
+     d                 c                   14
+     d  XML_FROM_DATATYPE...                                                    W3C XML Schm Dtatype
+     d                 c                   15
+     d  XML_FROM_SCHEMASP...                                                    W3C XML Schm parser
+     d                 c                   16
+     d  XML_FROM_SCHEMASV...                                                    W3C XML Schm valid.
+     d                 c                   17
+     d  XML_FROM_RELAXNGP...                                                    Relax-NG parser
+     d                 c                   18
+     d  XML_FROM_RELAXNGV...                                                    Relax-NG validator
+     d                 c                   19
+     d  XML_FROM_CATALOG...                                                     Catalog module
+     d                 c                   20
+     d  XML_FROM_C14N  c                   21                                   Canonicalization
+     d  XML_FROM_XSLT  c                   22                                   Engine from libxslt
+     d  XML_FROM_VALID...                                                       DTD valid. w/ ctxt
+     d                 c                   23
+     d  XML_FROM_CHECK...                                                       Error check module
+     d                 c                   24
+     d  XML_FROM_WRITER...                                                      xmlwriter module
+     d                 c                   25
+     d  XML_FROM_MODULE...                                                      Dyn. loaded module
+     d                 c                   26
+     d  XML_FROM_I18N  c                   27                                   Mod hdlg char conv
+     d  XML_FROM_SCHEMATRONV...                                                 Schematron valid
+     d                 c                   28
+     d  XML_FROM_BUFFER...                                                      Buffers module
+     d                 c                   29
+     d  XML_FROM_URI   c                   30                                   URI module
+
+      * xmlError:
+      *
+      * An XML Error instance.
+
+     d xmlErrorPtr     s               *   based(######typedef######)
+
+     d xmlError        ds                  based(xmlErrorPtr)
+     d                                     align qualified
+     d  domain                       10i 0                                      Libpart raising err
+     d  code                         10i 0                                      Error code
+     d  message                        *                                        char *
+     d  level                              like(xmlErrorLevel)                  Error severity
+     d  file                           *                                        File name
+     d  line                         10i 0                                      Line number
+     d  str1                           *                                        char *
+     d  str2                           *                                        char *
+     d  str3                           *                                        char *
+     d  int1                         10i 0                                      Extra number info
+     d  int2                         10i 0                                      Error column
+     d  ctxt                           *                                        void *
+     d  node                           *                                        void *
+
+      * xmlParserError:
+      *
+      * This is an error that the XML (or HTML) parser can generate
+
+     d xmlParserErrors...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ERR_OK     c                   0
+     d  XML_ERR_INTERNAL_ERROR...
+     d                 c                   1
+     d  XML_ERR_NO_MEMORY...
+     d                 c                   2
+     d  XML_ERR_DOCUMENT_START...
+     d                 c                   3
+     d  XML_ERR_DOCUMENT_EMPTY...
+     d                 c                   4
+     d  XML_ERR_DOCUMENT_END...
+     d                 c                   5
+     d  XML_ERR_INVALID_HEX_CHARREF...
+     d                 c                   6
+     d  XML_ERR_INVALID_DEC_CHARREF...
+     d                 c                   7
+     d  XML_ERR_INVALID_CHARREF...
+     d                 c                   8
+     d  XML_ERR_INVALID_CHAR...
+     d                 c                   9
+     d  XML_ERR_CHARREF_AT_EOF...
+     d                 c                   10
+     d  XML_ERR_CHARREF_IN_PROLOG...
+     d                 c                   11
+     d  XML_ERR_CHARREF_IN_EPILOG...
+     d                 c                   12
+     d  XML_ERR_CHARREF_IN_DTD...
+     d                 c                   13
+     d  XML_ERR_ENTITYREF_AT_EOF...
+     d                 c                   14
+     d  XML_ERR_ENTITYREF_IN_PROLOG...
+     d                 c                   15
+     d  XML_ERR_ENTITYREF_IN_EPILOG...
+     d                 c                   16
+     d  XML_ERR_ENTITYREF_IN_DTD...
+     d                 c                   17
+     d  XML_ERR_PEREF_AT_EOF...
+     d                 c                   18
+     d  XML_ERR_PEREF_IN_PROLOG...
+     d                 c                   19
+     d  XML_ERR_PEREF_IN_EPILOG...
+     d                 c                   20
+     d  XML_ERR_PEREF_IN_INT_SUBSET...
+     d                 c                   21
+     d  XML_ERR_ENTITYREF_NO_NAME...
+     d                 c                   22
+     d  XML_ERR_ENTITYREF_SEMICOL_MISSING...
+     d                 c                   23
+     d  XML_ERR_PEREF_NO_NAME...
+     d                 c                   24
+     d  XML_ERR_PEREF_SEMICOL_MISSING...
+     d                 c                   25
+     d  XML_ERR_UNDECLARED_ENTITY...
+     d                 c                   26
+     d  XML_WAR_UNDECLARED_ENTITY...
+     d                 c                   27
+     d  XML_ERR_UNPARSED_ENTITY...
+     d                 c                   28
+     d  XML_ERR_ENTITY_IS_EXTERNAL...
+     d                 c                   29
+     d  XML_ERR_ENTITY_IS_PARAMETER...
+     d                 c                   30
+     d  XML_ERR_UNKNOWN_ENCODING...
+     d                 c                   31
+     d  XML_ERR_UNSUPPORTED_ENCODING...
+     d                 c                   32
+     d  XML_ERR_STRING_NOT_STARTED...
+     d                 c                   33
+     d  XML_ERR_STRING_NOT_CLOSED...
+     d                 c                   34
+     d  XML_ERR_NS_DECL_ERROR...
+     d                 c                   35
+     d  XML_ERR_ENTITY_NOT_STARTED...
+     d                 c                   36
+     d  XML_ERR_ENTITY_NOT_FINISHED...
+     d                 c                   37
+     d  XML_ERR_LT_IN_ATTRIBUTE...
+     d                 c                   38
+     d  XML_ERR_ATTRIBUTE_NOT_STARTED...
+     d                 c                   39
+     d  XML_ERR_ATTRIBUTE_NOT_FINISHED...
+     d                 c                   40
+     d  XML_ERR_ATTRIBUTE_WITHOUT_VALUE...
+     d                 c                   41
+     d  XML_ERR_ATTRIBUTE_REDEFINED...
+     d                 c                   42
+     d  XML_ERR_LITERAL_NOT_STARTED...
+     d                 c                   43
+     d  XML_ERR_LITERAL_NOT_FINISHED...
+     d                 c                   44
+     d  XML_ERR_COMMENT_NOT_FINISHED...
+     d                 c                   45
+     d  XML_ERR_PI_NOT_STARTED...
+     d                 c                   46
+     d  XML_ERR_PI_NOT_FINISHED...
+     d                 c                   47
+     d  XML_ERR_NOTATION_NOT_STARTED...
+     d                 c                   48
+     d  XML_ERR_NOTATION_NOT_FINISHED...
+     d                 c                   49
+     d  XML_ERR_ATTLIST_NOT_STARTED...
+     d                 c                   50
+     d  XML_ERR_ATTLIST_NOT_FINISHED...
+     d                 c                   51
+     d  XML_ERR_MIXED_NOT_STARTED...
+     d                 c                   52
+     d  XML_ERR_MIXED_NOT_FINISHED...
+     d                 c                   53
+     d  XML_ERR_ELEMCONTENT_NOT_STARTED...
+     d                 c                   54
+     d  XML_ERR_ELEMCONTENT_NOT_FINISHED...
+     d                 c                   55
+     d  XML_ERR_XMLDECL_NOT_STARTED...
+     d                 c                   56
+     d  XML_ERR_XMLDECL_NOT_FINISHED...
+     d                 c                   57
+     d  XML_ERR_CONDSEC_NOT_STARTED...
+     d                 c                   58
+     d  XML_ERR_CONDSEC_NOT_FINISHED...
+     d                 c                   59
+     d  XML_ERR_EXT_SUBSET_NOT_FINISHED...
+     d                 c                   60
+     d  XML_ERR_DOCTYPE_NOT_FINISHED...
+     d                 c                   61
+     d  XML_ERR_MISPLACED_CDATA_END...
+     d                 c                   62
+     d  XML_ERR_CDATA_NOT_FINISHED...
+     d                 c                   63
+     d  XML_ERR_RESERVED_XML_NAME...
+     d                 c                   64
+     d  XML_ERR_SPACE_REQUIRED...
+     d                 c                   65
+     d  XML_ERR_SEPARATOR_REQUIRED...
+     d                 c                   66
+     d  XML_ERR_NMTOKEN_REQUIRED...
+     d                 c                   67
+     d  XML_ERR_NAME_REQUIRED...
+     d                 c                   68
+     d  XML_ERR_PCDATA_REQUIRED...
+     d                 c                   69
+     d  XML_ERR_URI_REQUIRED...
+     d                 c                   70
+     d  XML_ERR_PUBID_REQUIRED...
+     d                 c                   71
+     d  XML_ERR_LT_REQUIRED...
+     d                 c                   72
+     d  XML_ERR_GT_REQUIRED...
+     d                 c                   73
+     d  XML_ERR_LTSLASH_REQUIRED...
+     d                 c                   74
+     d  XML_ERR_EQUAL_REQUIRED...
+     d                 c                   75
+     d  XML_ERR_TAG_NAME_MISMATCH...
+     d                 c                   76
+     d  XML_ERR_TAG_NOT_FINISHED...
+     d                 c                   77
+     d  XML_ERR_STANDALONE_VALUE...
+     d                 c                   78
+     d  XML_ERR_ENCODING_NAME...
+     d                 c                   79
+     d  XML_ERR_HYPHEN_IN_COMMENT...
+     d                 c                   80
+     d  XML_ERR_INVALID_ENCODING...
+     d                 c                   81
+     d  XML_ERR_EXT_ENTITY_STANDALONE...
+     d                 c                   82
+     d  XML_ERR_CONDSEC_INVALID...
+     d                 c                   83
+     d  XML_ERR_VALUE_REQUIRED...
+     d                 c                   84
+     d  XML_ERR_NOT_WELL_BALANCED...
+     d                 c                   85
+     d  XML_ERR_EXTRA_CONTENT...
+     d                 c                   86
+     d  XML_ERR_ENTITY_CHAR_ERROR...
+     d                 c                   87
+     d  XML_ERR_ENTITY_PE_INTERNAL...
+     d                 c                   88
+     d  XML_ERR_ENTITY_LOOP...
+     d                 c                   89
+     d  XML_ERR_ENTITY_BOUNDARY...
+     d                 c                   90
+     d  XML_ERR_INVALID_URI...
+     d                 c                   91
+     d  XML_ERR_URI_FRAGMENT...
+     d                 c                   92
+     d  XML_WAR_CATALOG_PI...
+     d                 c                   93
+     d  XML_ERR_NO_DTD...
+     d                 c                   94
+     d  XML_ERR_CONDSEC_INVALID_KEYWORD...
+     d                 c                   95
+     d  XML_ERR_VERSION_MISSING...
+     d                 c                   96
+     d  XML_WAR_UNKNOWN_VERSION...
+     d                 c                   97
+     d  XML_WAR_LANG_VALUE...
+     d                 c                   98
+     d  XML_WAR_NS_URI...
+     d                 c                   99
+     d  XML_WAR_NS_URI_RELATIVE...
+     d                 c                   100
+     d  XML_ERR_MISSING_ENCODING...
+     d                 c                   101
+     d  XML_WAR_SPACE_VALUE...
+     d                 c                   102
+     d  XML_ERR_NOT_STANDALONE...
+     d                 c                   103
+     d  XML_ERR_ENTITY_PROCESSING...
+     d                 c                   104
+     d  XML_ERR_NOTATION_PROCESSING...
+     d                 c                   105
+     d  XML_WAR_NS_COLUMN...
+     d                 c                   106
+     d  XML_WAR_ENTITY_REDEFINED...
+     d                 c                   107
+     d  XML_ERR_UNKNOWN_VERSION...
+     d                 c                   108
+     d  XML_ERR_VERSION_MISMATCH...
+     d                 c                   109
+     d  XML_ERR_NAME_TOO_LONG...
+     d                 c                   110
+     d  XML_ERR_USER_STOP...
+     d                 c                   111
+     d  XML_NS_ERR_XML_NAMESPACE...
+     d                 c                   200
+     d  XML_NS_ERR_UNDEFINED_NAMESPACE...
+     d                 c                   201
+     d  XML_NS_ERR_QNAME...
+     d                 c                   202
+     d  XML_NS_ERR_ATTRIBUTE_REDEFINED...
+     d                 c                   203
+     d  XML_NS_ERR_EMPTY...
+     d                 c                   204
+     d  XML_NS_ERR_COLON...
+     d                 c                   205
+     d  XML_DTD_ATTRIBUTE_DEFAULT...
+     d                 c                   500
+     d  XML_DTD_ATTRIBUTE_REDEFINED...
+     d                 c                   501
+     d  XML_DTD_ATTRIBUTE_VALUE...
+     d                 c                   502
+     d  XML_DTD_CONTENT_ERROR...
+     d                 c                   503
+     d  XML_DTD_CONTENT_MODEL...
+     d                 c                   504
+     d  XML_DTD_CONTENT_NOT_DETERMINIST...
+     d                 c                   505
+     d  XML_DTD_DIFFERENT_PREFIX...
+     d                 c                   506
+     d  XML_DTD_ELEM_DEFAULT_NAMESPACE...
+     d                 c                   507
+     d  XML_DTD_ELEM_NAMESPACE...
+     d                 c                   508
+     d  XML_DTD_ELEM_REDEFINED...
+     d                 c                   509
+     d  XML_DTD_EMPTY_NOTATION...
+     d                 c                   510
+     d  XML_DTD_ENTITY_TYPE...
+     d                 c                   511
+     d  XML_DTD_ID_FIXED...
+     d                 c                   512
+     d  XML_DTD_ID_REDEFINED...
+     d                 c                   513
+     d  XML_DTD_ID_SUBSET...
+     d                 c                   514
+     d  XML_DTD_INVALID_CHILD...
+     d                 c                   515
+     d  XML_DTD_INVALID_DEFAULT...
+     d                 c                   516
+     d  XML_DTD_LOAD_ERROR...
+     d                 c                   517
+     d  XML_DTD_MISSING_ATTRIBUTE...
+     d                 c                   518
+     d  XML_DTD_MIXED_CORRUPT...
+     d                 c                   519
+     d  XML_DTD_MULTIPLE_ID...
+     d                 c                   520
+     d  XML_DTD_NO_DOC...
+     d                 c                   521
+     d  XML_DTD_NO_DTD...
+     d                 c                   522
+     d  XML_DTD_NO_ELEM_NAME...
+     d                 c                   523
+     d  XML_DTD_NO_PREFIX...
+     d                 c                   524
+     d  XML_DTD_NO_ROOT...
+     d                 c                   525
+     d  XML_DTD_NOTATION_REDEFINED...
+     d                 c                   526
+     d  XML_DTD_NOTATION_VALUE...
+     d                 c                   527
+     d  XML_DTD_NOT_EMPTY...
+     d                 c                   528
+     d  XML_DTD_NOT_PCDATA...
+     d                 c                   529
+     d  XML_DTD_NOT_STANDALONE...
+     d                 c                   530
+     d  XML_DTD_ROOT_NAME...
+     d                 c                   531
+     d  XML_DTD_STANDALONE_WHITE_SPACE...
+     d                 c                   532
+     d  XML_DTD_UNKNOWN_ATTRIBUTE...
+     d                 c                   533
+     d  XML_DTD_UNKNOWN_ELEM...
+     d                 c                   534
+     d  XML_DTD_UNKNOWN_ENTITY...
+     d                 c                   535
+     d  XML_DTD_UNKNOWN_ID...
+     d                 c                   536
+     d  XML_DTD_UNKNOWN_NOTATION...
+     d                 c                   537
+     d  XML_DTD_STANDALONE_DEFAULTED...
+     d                 c                   538
+     d  XML_DTD_XMLID_VALUE...
+     d                 c                   539
+     d  XML_DTD_XMLID_TYPE...
+     d                 c                   540
+     d  XML_DTD_DUP_TOKEN...
+     d                 c                   541
+     d  XML_HTML_STRUCURE_ERROR...
+     d                 c                   800
+     d  XML_HTML_UNKNOWN_TAG...
+     d                 c                   801
+     d  XML_RNGP_ANYNAME_ATTR_ANCESTOR...
+     d                 c                   1000
+     d  XML_RNGP_ATTR_CONFLICT...
+     d                 c                   1001
+     d  XML_RNGP_ATTRIBUTE_CHILDREN...
+     d                 c                   1002
+     d  XML_RNGP_ATTRIBUTE_CONTENT...
+     d                 c                   1003
+     d  XML_RNGP_ATTRIBUTE_EMPTY...
+     d                 c                   1004
+     d  XML_RNGP_ATTRIBUTE_NOOP...
+     d                 c                   1005
+     d  XML_RNGP_CHOICE_CONTENT...
+     d                 c                   1006
+     d  XML_RNGP_CHOICE_EMPTY...
+     d                 c                   1007
+     d  XML_RNGP_CREATE_FAILURE...
+     d                 c                   1008
+     d  XML_RNGP_DATA_CONTENT...
+     d                 c                   1009
+     d  XML_RNGP_DEF_CHOICE_AND_INTERLEAVE...
+     d                 c                   1010
+     d  XML_RNGP_DEFINE_CREATE_FAILED...
+     d                 c                   1011
+     d  XML_RNGP_DEFINE_EMPTY...
+     d                 c                   1012
+     d  XML_RNGP_DEFINE_MISSING...
+     d                 c                   1013
+     d  XML_RNGP_DEFINE_NAME_MISSING...
+     d                 c                   1014
+     d  XML_RNGP_ELEM_CONTENT_EMPTY...
+     d                 c                   1015
+     d  XML_RNGP_ELEM_CONTENT_ERROR...
+     d                 c                   1016
+     d  XML_RNGP_ELEMENT_EMPTY...
+     d                 c                   1017
+     d  XML_RNGP_ELEMENT_CONTENT...
+     d                 c                   1018
+     d  XML_RNGP_ELEMENT_NAME...
+     d                 c                   1019
+     d  XML_RNGP_ELEMENT_NO_CONTENT...
+     d                 c                   1020
+     d  XML_RNGP_ELEM_TEXT_CONFLICT...
+     d                 c                   1021
+     d  XML_RNGP_EMPTY...
+     d                 c                   1022
+     d  XML_RNGP_EMPTY_CONSTRUCT...
+     d                 c                   1023
+     d  XML_RNGP_EMPTY_CONTENT...
+     d                 c                   1024
+     d  XML_RNGP_EMPTY_NOT_EMPTY...
+     d                 c                   1025
+     d  XML_RNGP_ERROR_TYPE_LIB...
+     d                 c                   1026
+     d  XML_RNGP_EXCEPT_EMPTY...
+     d                 c                   1027
+     d  XML_RNGP_EXCEPT_MISSING...
+     d                 c                   1028
+     d  XML_RNGP_EXCEPT_MULTIPLE...
+     d                 c                   1029
+     d  XML_RNGP_EXCEPT_NO_CONTENT...
+     d                 c                   1030
+     d  XML_RNGP_EXTERNALREF_EMTPY...
+     d                 c                   1031
+     d  XML_RNGP_EXTERNAL_REF_FAILURE...
+     d                 c                   1032
+     d  XML_RNGP_EXTERNALREF_RECURSE...
+     d                 c                   1033
+     d  XML_RNGP_FORBIDDEN_ATTRIBUTE...
+     d                 c                   1034
+     d  XML_RNGP_FOREIGN_ELEMENT...
+     d                 c                   1035
+     d  XML_RNGP_GRAMMAR_CONTENT...
+     d                 c                   1036
+     d  XML_RNGP_GRAMMAR_EMPTY...
+     d                 c                   1037
+     d  XML_RNGP_GRAMMAR_MISSING...
+     d                 c                   1038
+     d  XML_RNGP_GRAMMAR_NO_START...
+     d                 c                   1039
+     d  XML_RNGP_GROUP_ATTR_CONFLICT...
+     d                 c                   1040
+     d  XML_RNGP_HREF_ERROR...
+     d                 c                   1041
+     d  XML_RNGP_INCLUDE_EMPTY...
+     d                 c                   1042
+     d  XML_RNGP_INCLUDE_FAILURE...
+     d                 c                   1043
+     d  XML_RNGP_INCLUDE_RECURSE...
+     d                 c                   1044
+     d  XML_RNGP_INTERLEAVE_ADD...
+     d                 c                   1045
+     d  XML_RNGP_INTERLEAVE_CREATE_FAILED...
+     d                 c                   1046
+     d  XML_RNGP_INTERLEAVE_EMPTY...
+     d                 c                   1047
+     d  XML_RNGP_INTERLEAVE_NO_CONTENT...
+     d                 c                   1048
+     d  XML_RNGP_INVALID_DEFINE_NAME...
+     d                 c                   1049
+     d  XML_RNGP_INVALID_URI...
+     d                 c                   1050
+     d  XML_RNGP_INVALID_VALUE...
+     d                 c                   1051
+     d  XML_RNGP_MISSING_HREF...
+     d                 c                   1052
+     d  XML_RNGP_NAME_MISSING...
+     d                 c                   1053
+     d  XML_RNGP_NEED_COMBINE...
+     d                 c                   1054
+     d  XML_RNGP_NOTALLOWED_NOT_EMPTY...
+     d                 c                   1055
+     d  XML_RNGP_NSNAME_ATTR_ANCESTOR...
+     d                 c                   1056
+     d  XML_RNGP_NSNAME_NO_NS...
+     d                 c                   1057
+     d  XML_RNGP_PARAM_FORBIDDEN...
+     d                 c                   1058
+     d  XML_RNGP_PARAM_NAME_MISSING...
+     d                 c                   1059
+     d  XML_RNGP_PARENTREF_CREATE_FAILED...
+     d                 c                   1060
+     d  XML_RNGP_PARENTREF_NAME_INVALID...
+     d                 c                   1061
+     d  XML_RNGP_PARENTREF_NO_NAME...
+     d                 c                   1062
+     d  XML_RNGP_PARENTREF_NO_PARENT...
+     d                 c                   1063
+     d  XML_RNGP_PARENTREF_NOT_EMPTY...
+     d                 c                   1064
+     d  XML_RNGP_PARSE_ERROR...
+     d                 c                   1065
+     d  XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME...
+     d                 c                   1066
+     d  XML_RNGP_PAT_ATTR_ATTR...
+     d                 c                   1067
+     d  XML_RNGP_PAT_ATTR_ELEM...
+     d                 c                   1068
+     d  XML_RNGP_PAT_DATA_EXCEPT_ATTR...
+     d                 c                   1069
+     d  XML_RNGP_PAT_DATA_EXCEPT_ELEM...
+     d                 c                   1070
+     d  XML_RNGP_PAT_DATA_EXCEPT_EMPTY...
+     d                 c                   1071
+     d  XML_RNGP_PAT_DATA_EXCEPT_GROUP...
+     d                 c                   1072
+     d  XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE...
+     d                 c                   1073
+     d  XML_RNGP_PAT_DATA_EXCEPT_LIST...
+     d                 c                   1074
+     d  XML_RNGP_PAT_DATA_EXCEPT_ONEMORE...
+     d                 c                   1075
+     d  XML_RNGP_PAT_DATA_EXCEPT_REF...
+     d                 c                   1076
+     d  XML_RNGP_PAT_DATA_EXCEPT_TEXT...
+     d                 c                   1077
+     d  XML_RNGP_PAT_LIST_ATTR...
+     d                 c                   1078
+     d  XML_RNGP_PAT_LIST_ELEM...
+     d                 c                   1079
+     d  XML_RNGP_PAT_LIST_INTERLEAVE...
+     d                 c                   1080
+     d  XML_RNGP_PAT_LIST_LIST...
+     d                 c                   1081
+     d  XML_RNGP_PAT_LIST_REF...
+     d                 c                   1082
+     d  XML_RNGP_PAT_LIST_TEXT...
+     d                 c                   1083
+     d  XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME...
+     d                 c                   1084
+     d  XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME...
+     d                 c                   1085
+     d  XML_RNGP_PAT_ONEMORE_GROUP_ATTR...
+     d                 c                   1086
+     d  XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR...
+     d                 c                   1087
+     d  XML_RNGP_PAT_START_ATTR...
+     d                 c                   1088
+     d  XML_RNGP_PAT_START_DATA...
+     d                 c                   1089
+     d  XML_RNGP_PAT_START_EMPTY...
+     d                 c                   1090
+     d  XML_RNGP_PAT_START_GROUP...
+     d                 c                   1091
+     d  XML_RNGP_PAT_START_INTERLEAVE...
+     d                 c                   1092
+     d  XML_RNGP_PAT_START_LIST...
+     d                 c                   1093
+     d  XML_RNGP_PAT_START_ONEMORE...
+     d                 c                   1094
+     d  XML_RNGP_PAT_START_TEXT...
+     d                 c                   1095
+     d  XML_RNGP_PAT_START_VALUE...
+     d                 c                   1096
+     d  XML_RNGP_PREFIX_UNDEFINED...
+     d                 c                   1097
+     d  XML_RNGP_REF_CREATE_FAILED...
+     d                 c                   1098
+     d  XML_RNGP_REF_CYCLE...
+     d                 c                   1099
+     d  XML_RNGP_REF_NAME_INVALID...
+     d                 c                   1100
+     d  XML_RNGP_REF_NO_DEF...
+     d                 c                   1101
+     d  XML_RNGP_REF_NO_NAME...
+     d                 c                   1102
+     d  XML_RNGP_REF_NOT_EMPTY...
+     d                 c                   1103
+     d  XML_RNGP_START_CHOICE_AND_INTERLEAVE...
+     d                 c                   1104
+     d  XML_RNGP_START_CONTENT...
+     d                 c                   1105
+     d  XML_RNGP_START_EMPTY...
+     d                 c                   1106
+     d  XML_RNGP_START_MISSING...
+     d                 c                   1107
+     d  XML_RNGP_TEXT_EXPECTED...
+     d                 c                   1108
+     d  XML_RNGP_TEXT_HAS_CHILD...
+     d                 c                   1109
+     d  XML_RNGP_TYPE_MISSING...
+     d                 c                   1110
+     d  XML_RNGP_TYPE_NOT_FOUND...
+     d                 c                   1111
+     d  XML_RNGP_TYPE_VALUE...
+     d                 c                   1112
+     d  XML_RNGP_UNKNOWN_ATTRIBUTE...
+     d                 c                   1113
+     d  XML_RNGP_UNKNOWN_COMBINE...
+     d                 c                   1114
+     d  XML_RNGP_UNKNOWN_CONSTRUCT...
+     d                 c                   1115
+     d  XML_RNGP_UNKNOWN_TYPE_LIB...
+     d                 c                   1116
+     d  XML_RNGP_URI_FRAGMENT...
+     d                 c                   1117
+     d  XML_RNGP_URI_NOT_ABSOLUTE...
+     d                 c                   1118
+     d  XML_RNGP_VALUE_EMPTY...
+     d                 c                   1119
+     d  XML_RNGP_VALUE_NO_CONTENT...
+     d                 c                   1120
+     d  XML_RNGP_XMLNS_NAME...
+     d                 c                   1121
+     d  XML_RNGP_XML_NS...
+     d                 c                   1122
+     d  XML_XPATH_EXPRESSION_OK...
+     d                 c                   1200
+     d  XML_XPATH_NUMBER_ERROR...
+     d                 c                   1201
+     d  XML_XPATH_UNFINISHED_LITERAL_ERROR...
+     d                 c                   1202
+     d  XML_XPATH_START_LITERAL_ERROR...
+     d                 c                   1203
+     d  XML_XPATH_VARIABLE_REF_ERROR...
+     d                 c                   1204
+     d  XML_XPATH_UNDEF_VARIABLE_ERROR...
+     d                 c                   1205
+     d  XML_XPATH_INVALID_PREDICATE_ERROR...
+     d                 c                   1206
+     d  XML_XPATH_EXPR_ERROR...
+     d                 c                   1207
+     d  XML_XPATH_UNCLOSED_ERROR...
+     d                 c                   1208
+     d  XML_XPATH_UNKNOWN_FUNC_ERROR...
+     d                 c                   1209
+     d  XML_XPATH_INVALID_OPERAND...
+     d                 c                   1210
+     d  XML_XPATH_INVALID_TYPE...
+     d                 c                   1211
+     d  XML_XPATH_INVALID_ARITY...
+     d                 c                   1212
+     d  XML_XPATH_INVALID_CTXT_SIZE...
+     d                 c                   1213
+     d  XML_XPATH_INVALID_CTXT_POSITION...
+     d                 c                   1214
+     d  XML_XPATH_MEMORY_ERROR...
+     d                 c                   1215
+     d  XML_XPTR_SYNTAX_ERROR...
+     d                 c                   1216
+     d  XML_XPTR_RESOURCE_ERROR...
+     d                 c                   1217
+     d  XML_XPTR_SUB_RESOURCE_ERROR...
+     d                 c                   1218
+     d  XML_XPATH_UNDEF_PREFIX_ERROR...
+     d                 c                   1219
+     d  XML_XPATH_ENCODING_ERROR...
+     d                 c                   1220
+     d  XML_XPATH_INVALID_CHAR_ERROR...
+     d                 c                   1231
+     d  XML_TREE_INVALID_HEX...
+     d                 c                   1300
+     d  XML_TREE_INVALID_DEC...
+     d                 c                   1301
+     d  XML_TREE_UNTERMINATED_ENTITY...
+     d                 c                   1302
+     d  XML_TREE_NOT_UTF8...
+     d                 c                   1303
+     d  XML_SAVE_NOT_UTF8...
+     d                 c                   1400
+     d  XML_SAVE_CHAR_INVALID...
+     d                 c                   1401
+     d  XML_SAVE_NO_DOCTYPE...
+     d                 c                   1402
+     d  XML_SAVE_UNKNOWN_ENCODING...
+     d                 c                   1403
+     d  XML_REGEXP_COMPILE_ERROR...
+     d                 c                   1403
+     d  XML_IO_UNKNOWN...
+     d                 c                   1500
+     d  XML_IO_EACCES  c                   1501
+     d  XML_IO_EAGAIN  c                   1502
+     d  XML_IO_EBADF   c                   1503
+     d  XML_IO_EBADMSG...
+     d                 c                   1504
+     d  XML_IO_EBUSY   c                   1505
+     d  XML_IO_ECANCELED...
+     d                 c                   1506
+     d  XML_IO_ECHILD  c                   1507
+     d  XML_IO_EDEADLK...
+     d                 c                   1508
+     d  XML_IO_EDOM    c                   1509
+     d  XML_IO_EEXIST  c                   1510
+     d  XML_IO_EFAULT  c                   1511
+     d  XML_IO_EFBIG   c                   1512
+     d  XML_IO_EINPROGRESS...
+     d                 c                   1513
+     d  XML_IO_EINTR   c                   1514
+     d  XML_IO_EINVAL  c                   1515
+     d  XML_IO_EIO     c                   1516
+     d  XML_IO_EISDIR  c                   1517
+     d  XML_IO_EMFILE  c                   1518
+     d  XML_IO_EMLINK  c                   1519
+     d  XML_IO_EMSGSIZE...
+     d                 c                   1520
+     d  XML_IO_ENAMETOOLONG...
+     d                 c                   1521
+     d  XML_IO_ENFILE  c                   1522
+     d  XML_IO_ENODEV  c                   1523
+     d  XML_IO_ENOENT  c                   1524
+     d  XML_IO_ENOEXEC...
+     d                 c                   1525
+     d  XML_IO_ENOLCK  c                   1526
+     d  XML_IO_ENOMEM  c                   1527
+     d  XML_IO_ENOSPC  c                   1528
+     d  XML_IO_ENOSYS  c                   1529
+     d  XML_IO_ENOTDIR...
+     d                 c                   1530
+     d  XML_IO_ENOTEMPTY...
+     d                 c                   1531
+     d  XML_IO_ENOTSUP...
+     d                 c                   1532
+     d  XML_IO_ENOTTY  c                   1533
+     d  XML_IO_ENXIO   c                   1534
+     d  XML_IO_EPERM   c                   1535
+     d  XML_IO_EPIPE   c                   1536
+     d  XML_IO_ERANGE  c                   1537
+     d  XML_IO_EROFS   c                   1538
+     d  XML_IO_ESPIPE  c                   1539
+     d  XML_IO_ESRCH   c                   1540
+     d  XML_IO_ETIMEDOUT...
+     d                 c                   1541
+     d  XML_IO_EXDEV   c                   1542
+     d  XML_IO_NETWORK_ATTEMPT...
+     d                 c                   1543
+     d  XML_IO_ENCODER...
+     d                 c                   1544
+     d  XML_IO_FLUSH   c                   1545
+     d  XML_IO_WRITE   c                   1546
+     d  XML_IO_NO_INPUT...
+     d                 c                   1547
+     d  XML_IO_BUFFER_FULL...
+     d                 c                   1548
+     d  XML_IO_LOAD_ERROR...
+     d                 c                   1549
+     d  XML_IO_ENOTSOCK...
+     d                 c                   1550
+     d  XML_IO_EISCONN...
+     d                 c                   1551
+     d  XML_IO_ECONNREFUSED...
+     d                 c                   1552
+     d  XML_IO_ENETUNREACH...
+     d                 c                   1553
+     d  XML_IO_EADDRINUSE...
+     d                 c                   1554
+     d  XML_IO_EALREADY...
+     d                 c                   1555
+     d  XML_IO_EAFNOSUPPORT...
+     d                 c                   1556
+     d  XML_XINCLUDE_RECURSION...
+     d                 c                   1600
+     d  XML_XINCLUDE_PARSE_VALUE...
+     d                 c                   1601
+     d  XML_XINCLUDE_ENTITY_DEF_MISMATCH...
+     d                 c                   1602
+     d  XML_XINCLUDE_NO_HREF...
+     d                 c                   1603
+     d  XML_XINCLUDE_NO_FALLBACK...
+     d                 c                   1604
+     d  XML_XINCLUDE_HREF_URI...
+     d                 c                   1605
+     d  XML_XINCLUDE_TEXT_FRAGMENT...
+     d                 c                   1606
+     d  XML_XINCLUDE_TEXT_DOCUMENT...
+     d                 c                   1607
+     d  XML_XINCLUDE_INVALID_CHAR...
+     d                 c                   1608
+     d  XML_XINCLUDE_BUILD_FAILED...
+     d                 c                   1609
+     d  XML_XINCLUDE_UNKNOWN_ENCODING...
+     d                 c                   1610
+     d  XML_XINCLUDE_MULTIPLE_ROOT...
+     d                 c                   1611
+     d  XML_XINCLUDE_XPTR_FAILED...
+     d                 c                   1612
+     d  XML_XINCLUDE_XPTR_RESULT...
+     d                 c                   1613
+     d  XML_XINCLUDE_INCLUDE_IN_INCLUDE...
+     d                 c                   1614
+     d  XML_XINCLUDE_FALLBACKS_IN_INCLUDE...
+     d                 c                   1615
+     d  XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE...
+     d                 c                   1616
+     d  XML_XINCLUDE_DEPRECATED_NS...
+     d                 c                   1617
+     d  XML_XINCLUDE_FRAGMENT_ID...
+     d                 c                   1618
+     d  XML_CATALOG_MISSING_ATTR...
+     d                 c                   1650
+     d  XML_CATALOG_ENTRY_BROKEN...
+     d                 c                   1651
+     d  XML_CATALOG_PREFER_VALUE...
+     d                 c                   1652
+     d  XML_CATALOG_NOT_CATALOG...
+     d                 c                   1653
+     d  XML_CATALOG_RECURSION...
+     d                 c                   1654
+     d  XML_SCHEMAP_PREFIX_UNDEFINED...
+     d                 c                   1700
+     d  XML_SCHEMAP_ATTRFORMDEFAULT_VALUE...
+     d                 c                   1701
+     d  XML_SCHEMAP_ATTRGRP_NONAME_NOREF...
+     d                 c                   1702
+     d  XML_SCHEMAP_ATTR_NONAME_NOREF...
+     d                 c                   1703
+     d  XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF...
+     d                 c                   1704
+     d  XML_SCHEMAP_ELEMFORMDEFAULT_VALUE...
+     d                 c                   1705
+     d  XML_SCHEMAP_ELEM_NONAME_NOREF...
+     d                 c                   1706
+     d  XML_SCHEMAP_EXTENSION_NO_BASE...
+     d                 c                   1707
+     d  XML_SCHEMAP_FACET_NO_VALUE...
+     d                 c                   1708
+     d  XML_SCHEMAP_FAILED_BUILD_IMPORT...
+     d                 c                   1709
+     d  XML_SCHEMAP_GROUP_NONAME_NOREF...
+     d                 c                   1710
+     d  XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI...
+     d                 c                   1711
+     d  XML_SCHEMAP_IMPORT_REDEFINE_NSNAME...
+     d                 c                   1712
+     d  XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI...
+     d                 c                   1713
+     d  XML_SCHEMAP_INVALID_BOOLEAN...
+     d                 c                   1714
+     d  XML_SCHEMAP_INVALID_ENUM...
+     d                 c                   1715
+     d  XML_SCHEMAP_INVALID_FACET...
+     d                 c                   1716
+     d  XML_SCHEMAP_INVALID_FACET_VALUE...
+     d                 c                   1717
+     d  XML_SCHEMAP_INVALID_MAXOCCURS...
+     d                 c                   1718
+     d  XML_SCHEMAP_INVALID_MINOCCURS...
+     d                 c                   1719
+     d  XML_SCHEMAP_INVALID_REF_AND_SUBTYPE...
+     d                 c                   1720
+     d  XML_SCHEMAP_INVALID_WHITE_SPACE...
+     d                 c                   1721
+     d  XML_SCHEMAP_NOATTR_NOREF...
+     d                 c                   1722
+     d  XML_SCHEMAP_NOTATION_NO_NAME...
+     d                 c                   1723
+     d  XML_SCHEMAP_NOTYPE_NOREF...
+     d                 c                   1724
+     d  XML_SCHEMAP_REF_AND_SUBTYPE...
+     d                 c                   1725
+     d  XML_SCHEMAP_RESTRICTION_NONAME_NOREF...
+     d                 c                   1726
+     d  XML_SCHEMAP_SIMPLETYPE_NONAME...
+     d                 c                   1727
+     d  XML_SCHEMAP_TYPE_AND_SUBTYPE...
+     d                 c                   1728
+     d  XML_SCHEMAP_UNKNOWN_ALL_CHILD...
+     d                 c                   1729
+     d  XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD...
+     d                 c                   1730
+     d  XML_SCHEMAP_UNKNOWN_ATTR_CHILD...
+     d                 c                   1731
+     d  XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD...
+     d                 c                   1732
+     d  XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP...
+     d                 c                   1733
+     d  XML_SCHEMAP_UNKNOWN_BASE_TYPE...
+     d                 c                   1734
+     d  XML_SCHEMAP_UNKNOWN_CHOICE_CHILD...
+     d                 c                   1735
+     d  XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD...
+     d                 c                   1736
+     d  XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD...
+     d                 c                   1737
+     d  XML_SCHEMAP_UNKNOWN_ELEM_CHILD...
+     d                 c                   1738
+     d  XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD...
+     d                 c                   1739
+     d  XML_SCHEMAP_UNKNOWN_FACET_CHILD...
+     d                 c                   1740
+     d  XML_SCHEMAP_UNKNOWN_FACET_TYPE...
+     d                 c                   1741
+     d  XML_SCHEMAP_UNKNOWN_GROUP_CHILD...
+     d                 c                   1742
+     d  XML_SCHEMAP_UNKNOWN_IMPORT_CHILD...
+     d                 c                   1743
+     d  XML_SCHEMAP_UNKNOWN_LIST_CHILD...
+     d                 c                   1744
+     d  XML_SCHEMAP_UNKNOWN_NOTATION_CHILD...
+     d                 c                   1745
+     d  XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD...
+     d                 c                   1746
+     d  XML_SCHEMAP_UNKNOWN_REF...
+     d                 c                   1747
+     d  XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD...
+     d                 c                   1748
+     d  XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD...
+     d                 c                   1749
+     d  XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD...
+     d                 c                   1750
+     d  XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD...
+     d                 c                   1751
+     d  XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD...
+     d                 c                   1752
+     d  XML_SCHEMAP_UNKNOWN_TYPE...
+     d                 c                   1753
+     d  XML_SCHEMAP_UNKNOWN_UNION_CHILD...
+     d                 c                   1754
+     d  XML_SCHEMAP_ELEM_DEFAULT_FIXED...
+     d                 c                   1755
+     d  XML_SCHEMAP_REGEXP_INVALID...
+     d                 c                   1756
+     d  XML_SCHEMAP_FAILED_LOAD...
+     d                 c                   1757
+     d  XML_SCHEMAP_NOTHING_TO_PARSE...
+     d                 c                   1758
+     d  XML_SCHEMAP_NOROOT...
+     d                 c                   1759
+     d  XML_SCHEMAP_REDEFINED_GROUP...
+     d                 c                   1760
+     d  XML_SCHEMAP_REDEFINED_TYPE...
+     d                 c                   1761
+     d  XML_SCHEMAP_REDEFINED_ELEMENT...
+     d                 c                   1762
+     d  XML_SCHEMAP_REDEFINED_ATTRGROUP...
+     d                 c                   1763
+     d  XML_SCHEMAP_REDEFINED_ATTR...
+     d                 c                   1764
+     d  XML_SCHEMAP_REDEFINED_NOTATION...
+     d                 c                   1765
+     d  XML_SCHEMAP_FAILED_PARSE...
+     d                 c                   1766
+     d  XML_SCHEMAP_UNKNOWN_PREFIX...
+     d                 c                   1767
+     d  XML_SCHEMAP_DEF_AND_PREFIX...
+     d                 c                   1768
+     d  XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD...
+     d                 c                   1769
+     d  XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI...
+     d                 c                   1770
+     d  XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI...
+     d                 c                   1771
+     d  XML_SCHEMAP_NOT_SCHEMA...
+     d                 c                   1772
+     d  XML_SCHEMAP_UNKNOWN_MEMBER_TYPE...
+     d                 c                   1773
+     d  XML_SCHEMAP_INVALID_ATTR_USE...
+     d                 c                   1774
+     d  XML_SCHEMAP_RECURSIVE...
+     d                 c                   1775
+     d  XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE...
+     d                 c                   1776
+     d  XML_SCHEMAP_INVALID_ATTR_COMBINATION...
+     d                 c                   1777
+     d  XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION...
+     d                 c                   1778
+     d  XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD...
+     d                 c                   1779
+     d  XML_SCHEMAP_INVALID_ATTR_NAME...
+     d                 c                   1780
+     d  XML_SCHEMAP_REF_AND_CONTENT...
+     d                 c                   1781
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_1...
+     d                 c                   1782
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_2...
+     d                 c                   1783
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_3...
+     d                 c                   1784
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_4...
+     d                 c                   1785
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_5...
+     d                 c                   1786
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1...
+     d                 c                   1787
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1...
+     d                 c                   1788
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2...
+     d                 c                   1789
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2...
+     d                 c                   1790
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3...
+     d                 c                   1791
+     d  XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER...
+     d                 c                   1792
+     d  XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE...
+     d                 c                   1793
+     d  XML_SCHEMAP_UNION_NOT_EXPRESSIBLE...
+     d                 c                   1794
+     d  XML_SCHEMAP_SRC_IMPORT_3_1...
+     d                 c                   1795
+     d  XML_SCHEMAP_SRC_IMPORT_3_2...
+     d                 c                   1796
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1...
+     d                 c                   1797
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2...
+     d                 c                   1798
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3...
+     d                 c                   1799
+     d  XML_SCHEMAP_COS_CT_EXTENDS_1_3...
+     d                 c                   1800
+     d  XML_SCHEMAV_NOROOT...
+     d                 c                   1801
+     d  XML_SCHEMAV_UNDECLAREDELEM...
+     d                 c                   1802
+     d  XML_SCHEMAV_NOTTOPLEVEL...
+     d                 c                   1803
+     d  XML_SCHEMAV_MISSING...
+     d                 c                   1804
+     d  XML_SCHEMAV_WRONGELEM...
+     d                 c                   1805
+     d  XML_SCHEMAV_NOTYPE...
+     d                 c                   1806
+     d  XML_SCHEMAV_NOROLLBACK...
+     d                 c                   1807
+     d  XML_SCHEMAV_ISABSTRACT...
+     d                 c                   1808
+     d  XML_SCHEMAV_NOTEMPTY...
+     d                 c                   1809
+     d  XML_SCHEMAV_ELEMCONT...
+     d                 c                   1810
+     d  XML_SCHEMAV_HAVEDEFAULT...
+     d                 c                   1811
+     d  XML_SCHEMAV_NOTNILLABLE...
+     d                 c                   1812
+     d  XML_SCHEMAV_EXTRACONTENT...
+     d                 c                   1813
+     d  XML_SCHEMAV_INVALIDATTR...
+     d                 c                   1814
+     d  XML_SCHEMAV_INVALIDELEM...
+     d                 c                   1815
+     d  XML_SCHEMAV_NOTDETERMINIST...
+     d                 c                   1816
+     d  XML_SCHEMAV_CONSTRUCT...
+     d                 c                   1817
+     d  XML_SCHEMAV_INTERNAL...
+     d                 c                   1818
+     d  XML_SCHEMAV_NOTSIMPLE...
+     d                 c                   1819
+     d  XML_SCHEMAV_ATTRUNKNOWN...
+     d                 c                   1820
+     d  XML_SCHEMAV_ATTRINVALID...
+     d                 c                   1821
+     d  XML_SCHEMAV_VALUE...
+     d                 c                   1822
+     d  XML_SCHEMAV_FACET...
+     d                 c                   1823
+     d  XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1...
+     d                 c                   1824
+     d  XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2...
+     d                 c                   1825
+     d  XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3...
+     d                 c                   1826
+     d  XML_SCHEMAV_CVC_TYPE_3_1_1...
+     d                 c                   1827
+     d  XML_SCHEMAV_CVC_TYPE_3_1_2...
+     d                 c                   1828
+     d  XML_SCHEMAV_CVC_FACET_VALID...
+     d                 c                   1829
+     d  XML_SCHEMAV_CVC_LENGTH_VALID...
+     d                 c                   1830
+     d  XML_SCHEMAV_CVC_MINLENGTH_VALID...
+     d                 c                   1831
+     d  XML_SCHEMAV_CVC_MAXLENGTH_VALID...
+     d                 c                   1832
+     d  XML_SCHEMAV_CVC_MININCLUSIVE_VALID...
+     d                 c                   1833
+     d  XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID...
+     d                 c                   1834
+     d  XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID...
+     d                 c                   1835
+     d  XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID...
+     d                 c                   1836
+     d  XML_SCHEMAV_CVC_TOTALDIGITS_VALID...
+     d                 c                   1837
+     d  XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID...
+     d                 c                   1838
+     d  XML_SCHEMAV_CVC_PATTERN_VALID...
+     d                 c                   1839
+     d  XML_SCHEMAV_CVC_ENUMERATION_VALID...
+     d                 c                   1840
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1...
+     d                 c                   1841
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2...
+     d                 c                   1842
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3...
+     d                 c                   1843
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4...
+     d                 c                   1844
+     d  XML_SCHEMAV_CVC_ELT_1...
+     d                 c                   1845
+     d  XML_SCHEMAV_CVC_ELT_2...
+     d                 c                   1846
+     d  XML_SCHEMAV_CVC_ELT_3_1...
+     d                 c                   1847
+     d  XML_SCHEMAV_CVC_ELT_3_2_1...
+     d                 c                   1848
+     d  XML_SCHEMAV_CVC_ELT_3_2_2...
+     d                 c                   1849
+     d  XML_SCHEMAV_CVC_ELT_4_1...
+     d                 c                   1850
+     d  XML_SCHEMAV_CVC_ELT_4_2...
+     d                 c                   1851
+     d  XML_SCHEMAV_CVC_ELT_4_3...
+     d                 c                   1852
+     d  XML_SCHEMAV_CVC_ELT_5_1_1...
+     d                 c                   1853
+     d  XML_SCHEMAV_CVC_ELT_5_1_2...
+     d                 c                   1854
+     d  XML_SCHEMAV_CVC_ELT_5_2_1...
+     d                 c                   1855
+     d  XML_SCHEMAV_CVC_ELT_5_2_2_1...
+     d                 c                   1856
+     d  XML_SCHEMAV_CVC_ELT_5_2_2_2_1...
+     d                 c                   1857
+     d  XML_SCHEMAV_CVC_ELT_5_2_2_2_2...
+     d                 c                   1858
+     d  XML_SCHEMAV_CVC_ELT_6...
+     d                 c                   1859
+     d  XML_SCHEMAV_CVC_ELT_7...
+     d                 c                   1860
+     d  XML_SCHEMAV_CVC_ATTRIBUTE_1...
+     d                 c                   1861
+     d  XML_SCHEMAV_CVC_ATTRIBUTE_2...
+     d                 c                   1862
+     d  XML_SCHEMAV_CVC_ATTRIBUTE_3...
+     d                 c                   1863
+     d  XML_SCHEMAV_CVC_ATTRIBUTE_4...
+     d                 c                   1864
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1...
+     d                 c                   1865
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1...
+     d                 c                   1866
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2...
+     d                 c                   1867
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_4...
+     d                 c                   1868
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1...
+     d                 c                   1869
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2...
+     d                 c                   1870
+     d  XML_SCHEMAV_ELEMENT_CONTENT...
+     d                 c                   1871
+     d  XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING...
+     d                 c                   1872
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_1...
+     d                 c                   1873
+     d  XML_SCHEMAV_CVC_AU...
+     d                 c                   1874
+     d  XML_SCHEMAV_CVC_TYPE_1...
+     d                 c                   1875
+     d  XML_SCHEMAV_CVC_TYPE_2...
+     d                 c                   1876
+     d  XML_SCHEMAV_CVC_IDC...
+     d                 c                   1877
+     d  XML_SCHEMAV_CVC_WILDCARD...
+     d                 c                   1878
+     d  XML_SCHEMAV_MISC...
+     d                 c                   1879
+     d  XML_XPTR_UNKNOWN_SCHEME...
+     d                 c                   1900
+     d  XML_XPTR_CHILDSEQ_START...
+     d                 c                   1901
+     d  XML_XPTR_EVAL_FAILED...
+     d                 c                   1902
+     d  XML_XPTR_EXTRA_OBJECTS...
+     d                 c                   1903
+     d  XML_C14N_CREATE_CTXT...
+     d                 c                   1950
+     d  XML_C14N_REQUIRES_UTF8...
+     d                 c                   1951
+     d  XML_C14N_CREATE_STACK...
+     d                 c                   1952
+     d  XML_C14N_INVALID_NODE...
+     d                 c                   1953
+     d  XML_C14N_UNKNOW_NODE...
+     d                 c                   1954
+     d  XML_C14N_RELATIVE_NAMESPACE...
+     d                 c                   1955
+     d  XML_FTP_PASV_ANSWER...
+     d                 c                   2000
+     d  XML_FTP_EPSV_ANSWER...
+     d                 c                   2001
+     d  XML_FTP_ACCNT...
+     d                 c                   2002
+     d  XML_FTP_URL_SYNTAX...
+     d                 c                   2003
+     d  XML_HTTP_URL_SYNTAX...
+     d                 c                   2020
+     d  XML_HTTP_USE_IP...
+     d                 c                   2021
+     d  XML_HTTP_UNKNOWN_HOST...
+     d                 c                   2022
+     d  XML_SCHEMAP_SRC_SIMPLE_TYPE_1...
+     d                 c                   3000
+     d  XML_SCHEMAP_SRC_SIMPLE_TYPE_2...
+     d                 c                   3001
+     d  XML_SCHEMAP_SRC_SIMPLE_TYPE_3...
+     d                 c                   3002
+     d  XML_SCHEMAP_SRC_SIMPLE_TYPE_4...
+     d                 c                   3003
+     d  XML_SCHEMAP_SRC_RESOLVE...
+     d                 c                   3004
+     d  XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE...
+     d                 c                   3005
+     d  XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE...
+     d                 c                   3006
+     d  XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES...
+     d                 c                   3007
+     d  XML_SCHEMAP_ST_PROPS_CORRECT_1...
+     d                 c                   3008
+     d  XML_SCHEMAP_ST_PROPS_CORRECT_2...
+     d                 c                   3009
+     d  XML_SCHEMAP_ST_PROPS_CORRECT_3...
+     d                 c                   3010
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_1_1...
+     d                 c                   3011
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_1_2...
+     d                 c                   3012
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1...
+     d                 c                   3013
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2...
+     d                 c                   3014
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_1...
+     d                 c                   3015
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1...
+     d                 c                   3016
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2...
+     d                 c                   3017
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1...
+     d                 c                   3018
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2...
+     d                 c                   3019
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3...
+     d                 c                   3020
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4...
+     d                 c                   3021
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5...
+     d                 c                   3022
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_1...
+     d                 c                   3023
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1...
+     d                 c                   3024
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2...
+     d                 c                   3025
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2...
+     d                 c                   3026
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1...
+     d                 c                   3027
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3...
+     d                 c                   3028
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4...
+     d                 c                   3029
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5...
+     d                 c                   3030
+     d  XML_SCHEMAP_COS_ST_DERIVED_OK_2_1...
+     d                 c                   3031
+     d  XML_SCHEMAP_COS_ST_DERIVED_OK_2_2...
+     d                 c                   3032
+     d  XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED...
+     d                 c                   3033
+     d  XML_SCHEMAP_S4S_ELEM_MISSING...
+     d                 c                   3034
+     d  XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED...
+     d                 c                   3035
+     d  XML_SCHEMAP_S4S_ATTR_MISSING...
+     d                 c                   3036
+     d  XML_SCHEMAP_S4S_ATTR_INVALID_VALUE...
+     d                 c                   3037
+     d  XML_SCHEMAP_SRC_ELEMENT_1...
+     d                 c                   3038
+     d  XML_SCHEMAP_SRC_ELEMENT_2_1...
+     d                 c                   3039
+     d  XML_SCHEMAP_SRC_ELEMENT_2_2...
+     d                 c                   3040
+     d  XML_SCHEMAP_SRC_ELEMENT_3...
+     d                 c                   3041
+     d  XML_SCHEMAP_P_PROPS_CORRECT_1...
+     d                 c                   3042
+     d  XML_SCHEMAP_P_PROPS_CORRECT_2_1...
+     d                 c                   3043
+     d  XML_SCHEMAP_P_PROPS_CORRECT_2_2...
+     d                 c                   3044
+     d  XML_SCHEMAP_E_PROPS_CORRECT_2...
+     d                 c                   3045
+     d  XML_SCHEMAP_E_PROPS_CORRECT_3...
+     d                 c                   3046
+     d  XML_SCHEMAP_E_PROPS_CORRECT_4...
+     d                 c                   3047
+     d  XML_SCHEMAP_E_PROPS_CORRECT_5...
+     d                 c                   3048
+     d  XML_SCHEMAP_E_PROPS_CORRECT_6...
+     d                 c                   3049
+     d  XML_SCHEMAP_SRC_INCLUDE...
+     d                 c                   3050
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_1...
+     d                 c                   3051
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_2...
+     d                 c                   3052
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_3_1...
+     d                 c                   3053
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_3_2...
+     d                 c                   3054
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_4...
+     d                 c                   3055
+     d  XML_SCHEMAP_NO_XMLNS...
+     d                 c                   3056
+     d  XML_SCHEMAP_NO_XSI...
+     d                 c                   3057
+     d  XML_SCHEMAP_COS_VALID_DEFAULT_1...
+     d                 c                   3058
+     d  XML_SCHEMAP_COS_VALID_DEFAULT_2_1...
+     d                 c                   3059
+     d  XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1...
+     d                 c                   3060
+     d  XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2...
+     d                 c                   3061
+     d  XML_SCHEMAP_CVC_SIMPLE_TYPE...
+     d                 c                   3062
+     d  XML_SCHEMAP_COS_CT_EXTENDS_1_1...
+     d                 c                   3063
+     d  XML_SCHEMAP_SRC_IMPORT_1_1...
+     d                 c                   3064
+     d  XML_SCHEMAP_SRC_IMPORT_1_2...
+     d                 c                   3065
+     d  XML_SCHEMAP_SRC_IMPORT_2...
+     d                 c                   3066
+     d  XML_SCHEMAP_SRC_IMPORT_2_1...
+     d                 c                   3067
+     d  XML_SCHEMAP_SRC_IMPORT_2_2...
+     d                 c                   3068
+     d  XML_SCHEMAP_INTERNAL...                                                 Non W3C
+     d                 c                   3069
+     d  XML_SCHEMAP_NOT_DETERMINISTIC...
+     d                 c                   3070
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1...
+     d                 c                   3071
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2...
+     d                 c                   3072
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3...
+     d                 c                   3073
+     d  XML_SCHEMAP_MG_PROPS_CORRECT_1...
+     d                 c                   3074
+     d  XML_SCHEMAP_MG_PROPS_CORRECT_2...
+     d                 c                   3075
+     d  XML_SCHEMAP_SRC_CT_1...
+     d                 c                   3076
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3...
+     d                 c                   3077
+     d  XML_SCHEMAP_AU_PROPS_CORRECT_2...
+     d                 c                   3078
+     d  XML_SCHEMAP_A_PROPS_CORRECT_2...
+     d                 c                   3079
+     d  XML_SCHEMAP_C_PROPS_CORRECT...
+     d                 c                   3080
+     d  XML_SCHEMAP_SRC_REDEFINE...
+     d                 c                   3081
+     d  XML_SCHEMAP_SRC_IMPORT...
+     d                 c                   3082
+     d  XML_SCHEMAP_WARN_SKIP_SCHEMA...
+     d                 c                   3083
+     d  XML_SCHEMAP_WARN_UNLOCATED_SCHEMA...
+     d                 c                   3084
+     d  XML_SCHEMAP_WARN_ATTR_REDECL_PROH...
+     d                 c                   3085
+     d  XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH...
+     d                 c                   3086
+     d  XML_SCHEMAP_AG_PROPS_CORRECT...
+     d                 c                   3087
+     d  XML_SCHEMAP_COS_CT_EXTENDS_1_2...
+     d                 c                   3088
+     d  XML_SCHEMAP_AU_PROPS_CORRECT...
+     d                 c                   3089
+     d  XML_SCHEMAP_A_PROPS_CORRECT_3...
+     d                 c                   3090
+     d  XML_SCHEMAP_COS_ALL_LIMITED...
+     d                 c                   3091
+     d  XML_SCHEMATRONV_ASSERT...
+     d                 c                   4000
+     d  XML_SCHEMATRONV_REPORT...
+     d                 c                   4001
+     d  XML_MODULE_OPEN...
+     d                 c                   4900
+     d  XML_MODULE_CLOSE...
+     d                 c                   4901
+     d  XML_CHECK_FOUND_ELEMENT...
+     d                 c                   5000
+     d  XML_CHECK_FOUND_ATTRIBUTE...
+     d                 c                   5001
+     d  XML_CHECK_FOUND_TEXT...
+     d                 c                   5002
+     d  XML_CHECK_FOUND_CDATA...
+     d                 c                   5003
+     d  XML_CHECK_FOUND_ENTITYREF...
+     d                 c                   5004
+     d  XML_CHECK_FOUND_ENTITY...
+     d                 c                   5005
+     d  XML_CHECK_FOUND_PI...
+     d                 c                   5006
+     d  XML_CHECK_FOUND_COMMENT...
+     d                 c                   5007
+     d  XML_CHECK_FOUND_DOCTYPE...
+     d                 c                   5008
+     d  XML_CHECK_FOUND_FRAGMENT...
+     d                 c                   5009
+     d  XML_CHECK_FOUND_NOTATION...
+     d                 c                   5010
+     d  XML_CHECK_UNKNOWN_NODE...
+     d                 c                   5011
+     d  XML_CHECK_ENTITY_TYPE...
+     d                 c                   5012
+     d  XML_CHECK_NO_PARENT...
+     d                 c                   5013
+     d  XML_CHECK_NO_DOC...
+     d                 c                   5014
+     d  XML_CHECK_NO_NAME...
+     d                 c                   5015
+     d  XML_CHECK_NO_ELEM...
+     d                 c                   5016
+     d  XML_CHECK_WRONG_DOC...
+     d                 c                   5017
+     d  XML_CHECK_NO_PREV...
+     d                 c                   5018
+     d  XML_CHECK_WRONG_PREV...
+     d                 c                   5019
+     d  XML_CHECK_NO_NEXT...
+     d                 c                   5020
+     d  XML_CHECK_WRONG_NEXT...
+     d                 c                   5021
+     d  XML_CHECK_NOT_DTD...
+     d                 c                   5022
+     d  XML_CHECK_NOT_ATTR...
+     d                 c                   5023
+     d  XML_CHECK_NOT_ATTR_DECL...
+     d                 c                   5024
+     d  XML_CHECK_NOT_ELEM_DECL...
+     d                 c                   5025
+     d  XML_CHECK_NOT_ENTITY_DECL...
+     d                 c                   5026
+     d  XML_CHECK_NOT_NS_DECL...
+     d                 c                   5027
+     d  XML_CHECK_NO_HREF...
+     d                 c                   5028
+     d  XML_CHECK_WRONG_PARENT...
+     d                 c                   5029
+     d  XML_CHECK_NS_SCOPE...
+     d                 c                   5030
+     d  XML_CHECK_NS_ANCESTOR...
+     d                 c                   5031
+     d  XML_CHECK_NOT_UTF8...
+     d                 c                   5032
+     d  XML_CHECK_NO_DICT...
+     d                 c                   5033
+     d  XML_CHECK_NOT_NCNAME...
+     d                 c                   5034
+     d  XML_CHECK_OUTSIDE_DICT...
+     d                 c                   5035
+     d  XML_CHECK_WRONG_NAME...
+     d                 c                   5036
+     d  XML_CHECK_NAME_NOT_NULL...
+     d                 c                   5037
+     d  XML_I18N_NO_NAME...
+     d                 c                   6000
+     d  XML_I18N_NO_HANDLER...
+     d                 c                   6001
+     d  XML_I18N_EXCESS_HANDLER...
+     d                 c                   6002
+     d  XML_I18N_CONV_FAILED...
+     d                 c                   6003
+     d  XML_I18N_NO_OUTPUT...
+     d                 c                   6004
+     d  XML_BUF_OVERFLOW...
+     d                 c                   7000
+
+      * xmlGenericErrorFunc:
+      * @ctx:  a parsing context
+      * @msg:  the message
+      * @...:  the extra arguments of the varags to format the message
+      *
+      * Signature of the function to use when there is an error and
+      * no parsing or validity context available .
+
+     d xmlGenericErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlStructuredErrorFunc:
+      * @userData:  user provided data for the error callback
+      * @error:  the error being raised.
+      *
+      * Signature of the function to use when there is an error and
+      * the module handles the new error reporting mechanism.
+
+     d xmlStructuredErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Use the following function to reset the two global variables
+      * xmlGenericError and xmlGenericErrorContext.
+
+     d xmlSetGenericErrorFunc...
+     d                 pr                  extproc('xmlSetGenericErrorFunc')
+     d  ctx                            *   value                                void *
+     d  handler                            value like(xmlGenericErrorFunc)
+
+     d initGenericErrorDefaultFunc...
+     d                 pr                  extproc(
+     d                                      'initGenericErrorDefaultFunc')
+     d  handler                            like(xmlGenericErrorFunc)
+
+     d xmlSetStructuredErrorFunc...
+     d                 pr                  extproc('xmlSetStructuredErrorFunc')
+     d  ctx                            *   value                                void *
+     d  handler                            value like(xmlGenericErrorFunc)
+
+      * Default message routines used by SAX and Valid context for error
+      * and warning reporting.
+      *
+      * These are vararg functions.
+      * The following prototypes support up to 8 pointer arguments.
+      * Other argument signature can be achieved by defining alternate
+      *   prototypes redirected to the same function.
+
+     d xmlParserError  pr                  extproc('xmlParserError')
+     d  ctx                            *   value                                void *
+     d  msg                            *   value options(*string)               const char *
+     d  handler                            value like(xmlGenericErrorFunc)
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlParserWarning...
+     d                 pr                  extproc('xmlParserWarning')
+     d  ctx                            *   value                                void *
+     d  msg                            *   value options(*string)               const char *
+     d  handler                            value like(xmlGenericErrorFunc)
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlParserValidityError...
+     d                 pr                  extproc('xmlParserValidityError')
+     d  ctx                            *   value                                void *
+     d  msg                            *   value options(*string)               const char *
+     d  handler                            value like(xmlGenericErrorFunc)
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlParserValidityWarning...
+     d                 pr                  extproc('xmlParserValidityWarning')
+     d  ctx                            *   value                                void *
+     d  msg                            *   value options(*string)               const char *
+     d  handler                            value like(xmlGenericErrorFunc)
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlParserPrintFileInfo...
+     d                 pr                  extproc('xmlParserPrintFileInfo')
+     d  input                              value like(xmlParserInputPtr)
+
+     d xmlParserPrintFileContext...
+     d                 pr                  extproc('xmlParserPrintFileContext')
+     d  input                              value like(xmlParserInputPtr)
+
+      * Extended error information routines
+
+     d xmlGetLastError...
+     d                 pr                  extproc('xmlGetLastError')
+     d                                     like(xmlErrorPtr)
+
+     d xmlResetLastError...
+     d                 pr                  extproc('xmlResetLastError')
+
+     d xmlCtxtGetLastError...
+     d                 pr                  extproc('xmlCtxtGetLastError')
+     d                                     like(xmlErrorPtr)
+     d  ctx                            *   value                                void *
+
+     d xmlCtxtResetLastError...
+     d                 pr                  extproc('xmlCtxtResetLastError')
+     d  ctx                            *   value                                void *
+
+     d xmlResetError   pr                  extproc('xmlResetError')
+     d  err                                value like(xmlErrorPtr)
+
+     d xmlCopyError    pr            10i 0 extproc('xmlCopyError')
+     d  from                               value like(xmlErrorPtr)
+     d  to                                 value like(xmlErrorPtr)
+
+      /endif                                                                    XML_ERROR_H__
diff --git a/os400/libxmlrpg/xmlexports.rpgle b/os400/libxmlrpg/xmlexports.rpgle
new file mode 100644
index 0000000..9a6fd10
--- /dev/null
+++ b/os400/libxmlrpg/xmlexports.rpgle
@@ -0,0 +1,15 @@
+      * Summary: macros for marking symbols as exportable/importable.
+      * Description: macros for marking symbols as exportable/importable.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_EXPORTS_H__)
+      /define XML_EXPORTS_H__
+
+      * The definition in the original C header file are not appliable to
+      * ILE/RPG.
+      * Therefore this file is intentionally empty.
+
+      /endif                                                                    XML_EXPORTS_H__
diff --git a/os400/libxmlrpg/xmlmemory.rpgle b/os400/libxmlrpg/xmlmemory.rpgle
new file mode 100644
index 0000000..165eaca
--- /dev/null
+++ b/os400/libxmlrpg/xmlmemory.rpgle
@@ -0,0 +1,239 @@
+      * Summary: interface for the memory allocator
+      * Description: provides interfaces for the memory allocator,
+      *              including debugging capabilities.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(DEBUG_MEMORY_ALLOC__)
+      /define DEBUG_MEMORY_ALLOC__
+
+      /include "libxmlrpg/xmlversion"
+
+      * DEBUG_MEMORY:
+      *
+      * DEBUG_MEMORY replaces the allocator with a collect and debug
+      * shell to the libc allocator.
+      * DEBUG_MEMORY should only be activated when debugging
+      * libxml i.e. if libxml has been configured with --with-debug-mem too.
+
+      * /define DEBUG_MEMORY_FREED
+      * /define DEBUG_MEMORY_LOCATION
+
+      /if defined(DEBUG)
+      /if not defined(DEBUG_MEMORY)
+      /define DEBUG_MEMORY
+      /endif
+      /endif
+
+      * DEBUG_MEMORY_LOCATION:
+      *
+      * DEBUG_MEMORY_LOCATION should be activated only when debugging
+      * libxml i.e. if libxml has been configured with --with-debug-mem too.
+
+      /if defined(DEBUG_MEMORY_LOCATION)
+      /endif
+
+      * The XML memory wrapper support 4 basic overloadable functions.
+
+      * xmlFreeFunc:
+      * @mem: an already allocated block of memory
+      *
+      * Signature for a free() implementation.
+
+     d xmlFreeFunc     s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlMallocFunc:
+      * @size:  the size requested in bytes
+      *
+      * Signature for a malloc() implementation.
+      *
+      * Returns a pointer to the newly allocated block or NULL in case of error.
+
+     d xmlMallocFunc   s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlReallocFunc:
+      * @mem: an already allocated block of memory
+      * @size:  the new size requested in bytes
+      *
+      * Signature for a realloc() implementation.
+      *
+      * Returns a pointer to the newly reallocated block or NULL in case of error.
+
+     d xmlReallocFunc  s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlStrdupFunc:
+      * @str: a zero terminated string
+      *
+      * Signature for an strdup() implementation.
+      *
+      * Returns the copy of the string or NULL in case of error.
+
+     d xmlStrdupFunc   s               *   based(######typedef######)
+     d                                     procptr
+
+      * The 5 interfaces used for all memory handling within libxml.
+      * Since indirect calls are only supported via a based prototype,
+      *   storage is accessed via functions.
+
+     d get_xmlFree     pr                  extproc('__get_xmlFree')
+     d                                     like(xmlFreeFunc)
+
+     d set_xmlFree     pr                  extproc('__set_xmlFree')
+     d  func                               value like(xmlFreeFunc)
+
+     d xmlFree         pr                  extproc('__call_xmlFree')
+     d  mem                            *   value                                void *
+
+     d get_xmlMalloc   pr                  extproc('__get_xmlMalloc')
+     d                                     like(xmlMallocFunc)
+
+     d set_xmlMalloc   pr                  extproc('__set_xmlMalloc')
+     d  func                               value like(xmlMallocFunc)
+
+     d xmlMalloc       pr              *   extproc('__call_xmlMalloc')          void *
+     d  size                         10u 0 value                                size_t
+
+     d get_xmlMallocAtomic...
+     d                 pr                  extproc('__get_xmlMallocAtomic')
+     d                                     like(xmlMallocFunc)
+
+     d set_xmlMallocAtomic...
+     d                 pr                  extproc('__set_xmlMallocAtomic')
+     d  func                               value like(xmlMallocFunc)
+
+     d xmlMallocAtomic...
+     d                 pr              *   extproc('__call_xmlMallocAtomic')    void *
+     d  size                         10u 0 value                                size_t
+
+     d get_xmlRealloc  pr                  extproc('__get_xmlRealloc')
+     d                                     like(xmlReallocFunc)
+
+     d set_xmlRealloc  pr                  extproc('__set_xmlRealloc')
+     d  func                               value like(xmlReallocFunc)
+
+     d xmlRealloc      pr              *   extproc('__call_xmlRealloc')         void *
+     d  mem                            *   value                                void *
+     d  size                         10u 0 value                                size_t
+
+     d get_xmlMemStrdup...
+     d                 pr                  extproc('__get_xmlMemStrdup')
+     d                                     like(xmlStrdupFunc)
+
+     d set_xmlMemStrdup...
+     d                 pr                  extproc('__set_xmlMemstrdup')
+     d  func                               value like(xmlStrdupFunc)
+
+     d xmlMemStrdup    pr              *   extproc('__call_xmlMemStrdup')          void *
+     d  str                            *   value options(*string)               const char *
+
+      * The way to overload the existing functions.
+      * The xmlGc function have an extra entry for atomic block
+      * allocations useful for garbage collected memory allocators
+
+     d xmlMemSetup     pr            10i 0 extproc('xmlMemSetup')
+     d  freeFunc                           value like(xmlFreeFunc)
+     d  mallocFunc                         value like(xmlMallocFunc)
+     d  reallocFunc                        value like(xmlReallocFunc)
+     d  strdupFunc                         value like(xmlStrdupFunc)
+
+     d xmlMemGet       pr            10i 0 extproc('xmlMemGet')
+     d  freeFunc                           like(xmlFreeFunc)
+     d  mallocFunc                         like(xmlMallocFunc)
+     d  reallocFunc                        like(xmlReallocFunc)
+     d  strdupFunc                         like(xmlStrdupFunc)
+
+     d xmlGcMemSetup   pr            10i 0 extproc('xmlGcMemSetup')
+     d  freeFunc                           value like(xmlFreeFunc)
+     d  mallocFunc                         value like(xmlMallocFunc)
+     d  mallocAtomicFunc...
+     d                                     value like(xmlMallocFunc)
+     d  reallocFunc                        value like(xmlReallocFunc)
+     d  strdupFunc                         value like(xmlStrdupFunc)
+
+     d xmlGcMemGet     pr            10i 0 extproc('xmlGcMemGet')
+     d  freeFunc                           like(xmlFreeFunc)
+     d  mallocFunc                         like(xmlMallocFunc)
+     d  mallocAtomicFunc...
+     d                                     like(xmlMallocFunc)
+     d  reallocFunc                        like(xmlReallocFunc)
+     d  strdupFunc                         like(xmlStrdupFunc)
+
+      * Initialization of the memory layer.
+
+     d xmlInitMemory   pr            10i 0 extproc('xmlInitMemory')
+
+      * Cleanup of the memory layer.
+
+     d xmlCleanupMemory...
+     d                 pr                  extproc('xmlCleanupMemory')
+
+      * These are specific to the XML debug memory wrapper.
+
+     d xmlMemUsed      pr            10i 0 extproc('xmlMemUsed')
+
+     d xmlMemBlocks    pr            10i 0 extproc('xmlMemBlocks')
+
+     d xmlMemDisplay   pr                  extproc('xmlMemDisplay')
+     d  fp                             *   value                                FILE *
+
+     d xmlMmDisplayLast...
+     d                 pr                  extproc('xmlMemDisplayLast')
+     d  fp                             *   value                                FILE *
+     d  nbBytes                      20i 0 value
+
+     d xmlMemShow      pr                  extproc('xmlMemShow')
+     d  fp                             *   value                                FILE *
+     d  nr                           10i 0 value
+
+     d xmlMemoryDump   pr                  extproc('xmlMemoryDump')
+
+     d xmlMemMalloc    pr              *   extproc('xmlMemMalloc')              void *
+     d  size                         10u 0 value                                size_t
+
+     d xmlMemRealloc   pr              *   extproc('xmlMemRealloc')             void *
+     d  ptr                            *   value                                void *
+     d  size                         10u 0 value                                size_t
+
+     d xmlMemFree      pr                  extproc('xmlMemFree')
+     d  ptr                            *   value                                void *
+
+     d xmlMemoryStrdup...
+     d                 pr              *   extproc('xmlMemoryStrdup')           char *
+     d  str                            *   value options(*string)               const char *
+
+     d xmlMallocLoc    pr              *   extproc('xmlMallocLoc')              void *
+     d  size                         10u 0 value                                size_t
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+
+     d xmlReallocLoc   pr              *   extproc('xmlReallocLoc')              void *
+     d  ptr                            *   value                                void *
+     d  size                         10u 0 value                                size_t
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+
+     d xmlMallocAtomicLoc...
+     d                 pr              *   extproc('xmlMallocAtomicLoc')        void *
+     d  size                         10u 0 value                                size_t
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+
+     d xmlMemStrdupLoc...
+     d                 pr              *   extproc('xmlMemStrdupLoc')           char *
+     d  str                            *   value options(*string)               const char *
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+
+      /if not defined(XML_GLOBALS_H)
+      /if not defined(XML_THREADS_H__)
+      /include "libxmlrpg/threads"
+      /include "libxmlrpg/globals"
+      /endif
+      /endif
+
+      /endif                                                                    DEBUG_MEMORY_ALLOC__
diff --git a/os400/libxmlrpg/xmlmodule.rpgle b/os400/libxmlrpg/xmlmodule.rpgle
new file mode 100644
index 0000000..09592a6
--- /dev/null
+++ b/os400/libxmlrpg/xmlmodule.rpgle
@@ -0,0 +1,51 @@
+      * Summary: dynamic module loading
+      * Description: basic API for dynamic module loading, used by
+      *              libexslt added in 2.6.17
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_MODULE_H__)
+      /define XML_MODULE_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_MODULES_ENABLED)
+
+      * xmlModulePtr:
+      *
+      * A handle to a dynamically loaded module
+
+     d xmlModulePtr    s               *   based(######typedef######)
+
+      * xmlModuleOption:
+      *
+      * enumeration of options that can be passed down to xmlModuleOpen()
+
+     d xmlModuleOption...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_MODULE_LAZY...                                                      Lazy binding
+     d                 c                   1
+     d  XML_MODULE_LOCAL...                                                     Local binding
+     d                 c                   2
+
+     d xmlModuleOpen   pr                  extproc('xmlModuleOpen')
+     d                                     like(xmlModulePtr)
+     d  filename                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlModuleSymbol...
+     d                 pr            10i 0 extproc('xmlModuleSymbol')
+     d  module                             value like(xmlModulePtr)
+     d  name                           *   value options(*string)               const char *
+     d  result                         *                                        void *(*)
+
+     d xmlModuleClose  pr            10i 0 extproc('xmlModuleClose')
+     d  module                             value like(xmlModulePtr)
+
+     d xmlModuleFree   pr            10i 0 extproc('xmlModuleFree')
+     d  module                             value like(xmlModulePtr)
+
+      /endif                                                                    LIBXML_MODULES_ENBLD
+      /endif                                                                    XML_MODULE_H__
diff --git a/os400/libxmlrpg/xmlreader.rpgle b/os400/libxmlrpg/xmlreader.rpgle
new file mode 100644
index 0000000..eccd37c
--- /dev/null
+++ b/os400/libxmlrpg/xmlreader.rpgle
@@ -0,0 +1,619 @@
+      * Summary: the XMLReader implementation
+      * Description: API of the XML streaming API based on C# interfaces.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XMLREADER_H__)
+      /define XML_XMLREADER_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/xmlIO"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+      /include "libxmlrpg/relaxng"
+      /include "libxmlrpg/xmlschemas"
+      /endif
+
+      * xmlParserSeverities:
+      *
+      * How severe an error callback is when the per-reader error callback API
+      * is used.
+
+     d xmlParserSeverities...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PARSER_SEVERITY_VALIDITY_WARNING...
+     d                 c                   1
+     d  XML_PARSER_SEVERITY_VALIDITY_ERROR...
+     d                 c                   2
+     d  XML_PARSER_SEVERITY_WARNING...
+     d                 c                   3
+     d  XML_PARSER_SEVERITY_ERROR...
+     d                 c                   4
+
+      /if defined(LIBXML_READER_ENABLED)
+
+      * xmlTextReaderMode:
+      *
+      * Internal state values for the reader.
+
+     d xmlTextReaderMode...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_TEXTREADER_MODE_INITIAL...
+     d                 c                   0
+     d  XML_TEXTREADER_MODE_INTERACTIVE...
+     d                 c                   1
+     d  XML_TEXTREADER_MODE_ERROR...
+     d                 c                   2
+     d  XML_TEXTREADER_MODE_EOF...
+     d                 c                   3
+     d  XML_TEXTREADER_MODE_CLOSED...
+     d                 c                   4
+     d  XML_TEXTREADER_MODE_READING...
+     d                 c                   5
+
+      * xmlParserProperties:
+      *
+      * Some common options to use with xmlTextReaderSetParserProp, but it
+      * is better to use xmlParserOption and the xmlReaderNewxxx and
+      * xmlReaderForxxx APIs now.
+
+     d xmlParserProperties...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PARSER_LOADDTD...
+     d                 c                   1
+     d  XML_PARSER_DEFAULTATTRS...
+     d                 c                   2
+     d  XML_PARSER_VALIDATE...
+     d                 c                   3
+     d  XML_PARSER_SUBST_ENTITIES...
+     d                 c                   4
+
+      * xmlReaderTypes:
+      *
+      * Predefined constants for the different types of nodes.
+
+     d xmlReaderTypes  s             10i 0 based(######typedef######)           enum
+     d  XML_READER_TYPE_NONE...
+     d                 c                   0
+     d  XML_READER_TYPE_ELEMENT...
+     d                 c                   1
+     d  XML_READER_TYPE_ATTRIBUTE...
+     d                 c                   2
+     d  XML_READER_TYPE_TEXT...
+     d                 c                   3
+     d  XML_READER_TYPE_CDATA...
+     d                 c                   4
+     d  XML_READER_TYPE_ENTITY_REFERENCE...
+     d                 c                   5
+     d  XML_READER_TYPE_ENTITY...
+     d                 c                   6
+     d  XML_READER_TYPE_PROCESSING_INSTRUCTION...
+     d                 c                   7
+     d  XML_READER_TYPE_COMMENT...
+     d                 c                   8
+     d  XML_READER_TYPE_DOCUMENT...
+     d                 c                   9
+     d  XML_READER_TYPE_DOCUMENT_TYPE...
+     d                 c                   10
+     d  XML_READER_TYPE_DOCUMENT_FRAGMENT...
+     d                 c                   11
+     d  XML_READER_TYPE_NOTATION...
+     d                 c                   12
+     d  XML_READER_TYPE_WHITESPACE...
+     d                 c                   13
+     d  XML_READER_TYPE_SIGNIFICANT_WHITESPACE...
+     d                 c                   14
+     d  XML_READER_TYPE_END_ELEMENT...
+     d                 c                   15
+     d  XML_READER_TYPE_END_ENTITY...
+     d                 c                   16
+     d  XML_READER_TYPE_XML_DECLARATION...
+     d                 c                   17
+
+      * xmlTextReaderPtr:
+      *
+      * Pointer to an xmlReader context.
+
+     d xmlTextReaderPtr...
+     d                 s               *   based(######typedef######)
+
+      * Constructors & Destructor
+
+     d xmlNewTextReader...
+     d                 pr                  extproc('xmlNewTextReader')
+     d                                     like(xmlTextReaderPtr)
+     d  input                              value like(xmlParserInputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+
+     d xmlNewTextReaderFilename...
+     d                 pr                  extproc('xmlNewTextReaderFilename')
+     d                                     like(xmlTextReaderPtr)
+     d  URI                            *   value options(*string)               const char *
+
+     d xmlFreeTextReader...
+     d                 pr                  extproc('xmlFreeTextReader')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderSetup...
+     d                 pr            10i 0 extproc('xmlTextReaderSetup')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  input                              value like(xmlParserInputBufferPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+      * Iterators
+
+     d xmlTextReaderRead...
+     d                 pr            10i 0 extproc('xmlTextReaderRead')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      /if defined(LIBXML_WRITER_ENABLED)
+     d xmlTextReaderReadInnerXml...
+     d                 pr              *   extproc('xmlTextReaderReadInnerXml') xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderReadOuterXml...
+     d                 pr              *   extproc('xmlTextReaderReadOuterXml') xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+      /endif
+
+     d xmlTextReaderReadString...
+     d                 pr              *   extproc('xmlTextReaderReadString')   xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderReadAttributeValue...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderReadAttributeValue')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * Attributes of the node
+
+     d xmlTextReaderAttributeCount...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderAttributeCount')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderDepth...
+     d                 pr            10i 0 extproc('xmlTextReaderDepth')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderHasAttributes...
+     d                 pr            10i 0 extproc('xmlTextReaderHasAttributes')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderHasValue...
+     d                 pr            10i 0 extproc('xmlTextReaderHasValue')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderIsDefault...
+     d                 pr            10i 0 extproc('xmlTextReaderIsDefault')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderIsEmptyElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderIsEmptyElement')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNodeType...
+     d                 pr            10i 0 extproc('xmlTextReaderNodeType')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderQuoteChar...
+     d                 pr            10i 0 extproc('xmlTextReaderQuoteChar')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderReadState...
+     d                 pr            10i 0 extproc('xmlTextReaderReadState')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderIsNamespaceDecl...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderIsNamespaceDecl')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstBaseUri...
+     d                 pr              *   extproc('xmlTextReaderConstBaseUri') const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstLocalName...
+     d                 pr              *   extproc(                             const xmlChar *
+     d                                     'xmlTextReaderConstLocalName')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstName...
+     d                 pr              *   extproc('xmlTextReaderConstName')    const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstNamespaceUri...
+     d                 pr              *   extproc(                             const xmlChar *
+     d                                     'xmlTextReaderConstNamespaceUri')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstPrefix...
+     d                 pr              *   extproc('xmlTextReaderConstPrefix')  const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstXmlLang...
+     d                 pr              *   extproc('xmlTextReaderConstXmlLang') const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstString...
+     d                 pr              *   extproc('xmlTextReaderConstString')  const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderConstValue...
+     d                 pr              *   extproc('xmlTextReaderConstValue')   const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * use the Const version of the routine for
+      * better performance and simpler code
+
+     d xmlTextReaderBaseUri...
+     d                 pr              *   extproc('xmlTextReaderBaseUri')      xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderLocalName...
+     d                 pr              *   extproc('xmlTextReaderLocalName')    xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderName...
+     d                 pr              *   extproc('xmlTextReaderName')         xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNamespaceUri...
+     d                 pr              *   extproc('xmlTextReaderNamespaceUri') xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderPrefix...
+     d                 pr              *   extproc('xmlTextReaderPrefix')       xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderXmlLang...
+     d                 pr              *   extproc('xmlTextReaderXmlLang')      xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderValue...
+     d                 pr              *   extproc('xmlTextReaderValue')        xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * Methods of the XmlTextReader
+
+     d xmlTextReaderClose...
+     d                 pr            10i 0 extproc('xmlTextReaderClose')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderGetAttributeNo...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                     'xmlTextReaderGetAttributeNo')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  no                           10i 0 value
+
+     d xmlTextReaderGetAttribute...
+     d                 pr              *   extproc('xmlTextReaderGetAttribute') xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderGetAttributeNs...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                     'xmlTextReaderGetAttributeNs')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  localName                      *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderGetRemainder...
+     d                 pr                  extproc('xmlTextReaderGetRemainder')
+     d                                     like(xmlParserInputBufferPtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderLookupNamespace...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                     'xmlTextReaderLookupNamespace')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderMoveToAttributeNo...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToAttributeNo')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  no                           10i 0 value
+
+     d xmlTextReaderMoveToAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToAttribute')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderMoveToAttributeNs...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToAttributeNs')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  localName                      *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderMoveToFirstAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToFirstAttribute')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderMoveToNextAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToNextAttribute')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderMoveToElement...
+     d                 pr            10i 0 extproc('xmlTextReaderMoveToElement')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNormalization...
+     d                 pr            10i 0 extproc('xmlTextReaderNormalization')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstEncoding...
+     d                 pr              *   extproc('xmlTextReaderConstEncoding')const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * Extensions
+
+     d xmlTextReaderSetParserProp...
+     d                 pr            10i 0 extproc('xmlTextReaderSetParserProp')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  prop                         10i 0 value
+     d  value                        10i 0 value
+
+     d xmlTextReaderGetParserProp...
+     d                 pr            10i 0 extproc('xmlTextReaderGetParserProp')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  prop                         10i 0 value
+
+     d xmlTextReaderCurrentNode...
+     d                 pr                  extproc('xmlTextReaderCurrentNode')
+     d                                     like(xmlNodePtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderGetParserLineNumber...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderGetParserLineNumber')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderGetParserColumnNumber...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderGetParserColumnNumber')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderPreserve...
+     d                 pr                  extproc('xmlTextReaderPreserve')
+     d                                     like(xmlNodePtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+      /if defined(LIBXML_PATTERN_ENABLED)
+     d xmlTextReaderPreservePattern...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderPreservePattern')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  pattern                        *   value options(*string)               const xmlChar *
+     d  namespaces                     *                                        const xmlChar *(*)
+      /endif                                                                    LIBXML_PATTERN_ENBLD
+
+     d xmlTextReaderCurrentDoc...
+     d                 pr                  extproc('xmlTextReaderCurrentDoc')
+     d                                     like(xmlDocPtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderExpand...
+     d                 pr                  extproc('xmlTextReaderExpand')
+     d                                     like(xmlNodePtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNext...
+     d                 pr            10i 0 extproc('xmlTextReaderNext')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNextSibling...
+     d                 pr            10i 0 extproc('xmlTextReaderNextSibling')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderIsValid...
+     d                 pr            10i 0 extproc('xmlTextReaderIsValid')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+     d xmlTextReaderRelaxNGValidate...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderRelaxNGValidate')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  rng                            *   value options(*string)               const char *
+
+     d xmlTextReaderRelaxNGValidateCtxt...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderRelaxNGValidateCtxt')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  options                      10i 0 value
+
+     d xmlTextReaderRelaxNGSetSchema...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderRelaxNGSetSchema')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  schema                             value like(xmlRelaxNGPtr)
+
+     d xmlTextReaderSchemaValidate...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderSchemaValidate')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  xsd                            *   value options(*string)               const char *
+
+     d xmlTextReaderSchemaValidateCtxt...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderSchemaValidateCtxt')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  ctxt                               value like(xmlSchemaValidCtxtPtr)
+     d  options                      10i 0 value
+
+     d xmlTextReaderSetSchema...
+     d                 pr            10i 0 extproc('xmlTextReaderSetSchema')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  schema                             value like(xmlSchemaPtr)
+      /endif
+
+     d xmlTextReaderConstXmlVersion...
+     d                 pr              *   extproc(                             const xmlChar *
+     d                                     'xmlTextReaderConstXmlVersion')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderStandalone...
+     d                 pr            10i 0 extproc('xmlTextReaderStandalone')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * Index lookup
+
+     d xmlTextReaderByteConsumed...
+     d                 pr            20i 0 extproc('xmlTextReaderByteConsumed')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * New more complete APIs for simpler creation and reuse of readers
+
+     d xmlReaderWalker...
+     d                 pr                  extproc('xmlReaderWalker')
+     d                                     like(xmlTextReaderPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlReaderForDoc...
+     d                 pr                  extproc('xmlReaderForDoc')
+     d                                     like(xmlTextReaderPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderForFile...
+     d                 pr                  extproc('xmlReaderForFile')
+     d                                     like(xmlTextReaderPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderForMemory...
+     d                 pr                  extproc('xmlReaderForMemory')
+     d                                     like(xmlTextReaderPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderForFd  pr                  extproc('xmlReaderForFd')
+     d                                     like(xmlTextReaderPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderForIO  pr                  extproc('xmlReaderForIO')
+     d                                     like(xmlTextReaderPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewWalker...
+     d                 pr            10i 0 extproc('xmlReaderNewWalker')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlReaderNewDoc...
+     d                 pr            10i 0 extproc('xmlReaderNewDoc')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewFile...
+     d                 pr            10i 0 extproc('xmlReaderNewFile')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewMemory...
+     d                 pr            10i 0 extproc('xmlReaderNewMemory')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewFd  pr            10i 0 extproc('xmlReaderNewFd')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewIO  pr            10i 0 extproc('xmlReaderNewIO')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+      * Error handling extensions
+
+     d xmlTextReaderLocatorPtr...
+     d                 s               *   based(######typedef######)           void *
+
+      * xmlTextReaderErrorFunc:
+      * @arg: the user argument
+      * @msg: the message
+      * @severity: the severity of the error
+      * @locator: a locator indicating where the error occured
+      *
+      * Signature of an error callback from a reader parser
+
+     d xmlTextReaderErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlTextReaderLocatorLineNumber...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderLocatorLineNumber')
+     d  locator                            value like(xmlTextReaderLocatorPtr)
+
+     d xmlTextReaderLocatorBaseURI...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                     'xmlTextReaderLocatorBaseURI')
+     d  locator                            value like(xmlTextReaderLocatorPtr)
+
+     d xmlTextReaderSetErrorHandler...
+     d                 pr                  extproc(
+     d                                     'xmlTextReaderSetErrorHandler')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  f                                  value like(xmlTextReaderErrorFunc)
+     d  arg                            *   value                                void *
+
+     d xmlTextReaderSetStructuredErrorHandler...
+     d                 pr                  extproc('xmlTextReaderSetStructuredE-
+     d                                     rrorHandler')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  f                                  value like(xmlStructuredErrorFunc)
+     d  arg                            *   value                                void *
+
+     d xmlTextReaderGetErrorHandler...
+     d                 pr                  extproc(
+     d                                     'xmlTextReaderGetErrorHandler')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  f                                  like(xmlTextReaderErrorFunc)
+     d  arg                            *                                        void *(*)
+
+      /endif                                                                    LIBXML_READER_ENABLD
+      /endif                                                                    XML_XMLREADER_H__
diff --git a/os400/libxmlrpg/xmlregexp.rpgle b/os400/libxmlrpg/xmlregexp.rpgle
new file mode 100644
index 0000000..65c2d07
--- /dev/null
+++ b/os400/libxmlrpg/xmlregexp.rpgle
@@ -0,0 +1,246 @@
+      * Summary: regular expressions handling
+      * Description: basic API for libxml regular expressions handling used
+      *              for XML Schemas and validation.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_REGEXP_H__)
+      /define XML_REGEXP_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_REGEXP_ENABLED)
+
+      * xmlRegexpPtr:
+      *
+      * A libxml regular expression, they can actually be far more complex
+      * thank the POSIX regex expressions.
+
+     d xmlRegexpPtr    s               *   based(######typedef######)
+
+      * xmlRegExecCtxtPtr:
+      *
+      * A libxml progressive regular expression evaluation context
+
+     d xmlRegExecCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/dict"
+
+      * The POSIX like API
+
+     d xmlRegexpCompile...
+     d                 pr                  extproc('xmlRegexpCompile')
+     d                                     like(xmlRegexpPtr)
+     d  regexp                         *   value options(*string)               const xmlChar *
+
+     d xmlRegFreeRegexp...
+     d                 pr                  extproc('xmlRegFreeRegexp')
+     d  regexp                             value like(xmlRegexpPtr)
+
+     d xmlRegexpExec   pr            10i 0 extproc('xmlRegexpExec')
+     d  comp                               value like(xmlRegexpPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlRegexpPrint  pr                  extproc('xmlRegexpPrint')
+     d  output                         *   value                                FILE *
+     d  regexp                             value like(xmlRegexpPtr)
+
+     d xmlRegexpIsDeterminist...
+     d                 pr            10i 0 extproc('xmlRegexpIsDeterminist')
+     d  comp                               value like(xmlRegexpPtr)
+
+      * xmlRegExecCallbacks:
+      * @exec: the regular expression context
+      * @token: the current token string
+      * @transdata: transition data
+      * @inputdata: input data
+      *
+      * Callback function when doing a transition in the automata
+
+     d xmlRegExecCallbacks...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * The progressive API
+
+     d xmlRegNewExecCtxt...
+     d                 pr                  extproc('xmlRegNewExecCtxt')
+     d                                     like(xmlRegExecCtxtPtr)
+     d  comp                               value like(xmlRegexpPtr)
+     d  callback                           value like(xmlRegExecCallbacks)
+     d  data                           *   value                                void *
+
+     d xmlRegFreeExecCtxt...
+     d                 pr                  extproc('xmlRegFreeExecCtxt')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+
+     d xmlRegExecPushString...
+     d                 pr            10i 0 extproc('xmlRegExecPushString')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  data                           *   value                                void *
+
+     d xmlRegExecPushString2...
+     d                 pr            10i 0 extproc('xmlRegExecPushString2')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  value2                         *   value options(*string)               const xmlChar *
+     d  data                           *   value                                void *
+
+     d xmlRegExecNextValues...
+     d                 pr            10i 0 extproc('xmlRegExecNextValues')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+     d  nbval                        10i 0
+     d  nbneg                        10i 0
+     d  values                         *                                        xmlChar * (*)
+     d  terminal                     10i 0
+
+     d xmlRegExecErrInfo...
+     d                 pr            10i 0 extproc('xmlRegExecErrInfo')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+     d  string                         *                                        const xmlChar * (*)
+     d  nbval                        10i 0
+     d  nbneg                        10i 0
+     d  values                         *                                        xmlChar * (*)
+     d  terminal                     10i 0
+
+      /if defined(LIBXML_EXPR_ENABLED)
+
+      * Formal regular expression handling
+      * Its goal is to do some formal work on content models
+
+      * expressions are used within a context
+
+     d xmlExpCtxtPtr   s               *   based(######typedef######)
+
+     d xmlExpFreeCtxt  pr                  extproc('xmlExpFreeCtxt')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+
+     d xmlExpNewCtxt   pr                  extproc('xmlExpNewCtxt')
+     d                                     like(xmlExpCtxtPtr)
+     d  maxNodes                     10i 0 value
+     d  dict                               value like(xmlDictPtr)
+
+     d xmlExpCtxtNbNodes...
+     d                 pr            10i 0 extproc('xmlExpCtxtNbNodes')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+
+     d xmlExpCtxtNbCons...
+     d                 pr            10i 0 extproc('xmlExpCtxtNbCons')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+
+      * Expressions are trees but the tree is opaque
+
+     d xmlExpNodePtr   s               *   based(######typedef######)
+
+     d xmlExpNodeType  s             10i 0 based(######typedef######)           enum
+     d  XML_EXP_EMPTY  c                   0
+     d  XML_EXP_FORBID...
+     d                 c                   1
+     d  XML_EXP_ATOM   c                   2
+     d  XML_EXP_SEQ    c                   3
+     d  XML_EXP_OR     c                   4
+     d  XML_EXP_COUNT  c                   5
+
+      * 2 core expressions shared by all for the empty language set
+      * and for the set with just the empty token
+
+     d forbiddenExp    s                   import('forbiddenExp')
+     d                                     like(xmlExpNodePtr)
+
+     d emptyExp        s                   import('emptyExp')
+     d                                     like(xmlExpNodePtr)
+
+
+      * Expressions are reference counted internally
+
+     d xmlExpFree      pr                  extproc('xmlExpFree')
+     d  expr                               value like(xmlExpNodePtr)
+
+     d xmlExpRef       pr                  extproc('xmlExpRef')
+     d  expr                               value like(xmlExpNodePtr)
+
+      * constructors can be either manual or from a string
+
+     d xmlExpParse     pr                  extproc('xmlExpParse')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                           *   value options(*string)               const char *
+
+     d xmlExpNewAtom   pr                  extproc('xmlExpNewAtom')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlExpNewOr     pr                  extproc('xmlExpNewOr')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  left                               value like(xmlExpNodePtr)
+     d  right                              value like(xmlExpNodePtr)
+
+     d xmlExpNewSeq    pr                  extproc('xmlExpNewSeq')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  left                               value like(xmlExpNodePtr)
+     d  right                              value like(xmlExpNodePtr)
+
+     d xmlExpNewRange  pr                  extproc('xmlExpNewRange')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  subset                             value like(xmlExpNodePtr)
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+
+      * The really interesting APIs
+
+     d xmlExpIsNillable...
+     d                 pr            10i 0 extproc('xmlExpIsNillable')
+     d  expr                               value like(xmlExpNodePtr)
+
+     d xmlExpMaxToken  pr            10i 0 extproc('xmlExpMaxToken')
+     d  expr                               value like(xmlExpNodePtr)
+
+     d xmlExpGetLanguage...
+     d                 pr            10i 0 extproc('xmlExpGetLanguage')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  langList                       *                                        const xmlChar *(*)
+     d  len                          10i 0 value
+
+     d xmlExpGetStart  pr            10i 0 extproc('xmlExpGetStart')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  tokList                        *                                        const xmlChar *(*)
+     d  len                          10i 0 value
+
+     d xmlExpStringDerive...
+     d                 pr                  extproc('xmlExpStringDerive')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlExpExpDerive...
+     d                 pr                  extproc('xmlExpExpDerive')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  sub                                value like(xmlExpNodePtr)
+
+     d xmlExpSubsume   pr            10i 0 extproc('xmlExpSubsume')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  sub                                value like(xmlExpNodePtr)
+
+     d xmlExpDump      pr                  extproc('xmlExpDump')
+     d  buf                                value like(xmlBufferPtr)
+     d  expr                               value like(xmlExpNodePtr)
+      /endif                                                                    LIBXML_EXPR_ENABLED
+      /endif                                                                    LIBXML_REGEXP_ENABLD
+      /endif                                                                    XML_REGEXP_H__
diff --git a/os400/libxmlrpg/xmlsave.rpgle b/os400/libxmlrpg/xmlsave.rpgle
new file mode 100644
index 0000000..efcb09f
--- /dev/null
+++ b/os400/libxmlrpg/xmlsave.rpgle
@@ -0,0 +1,96 @@
+      * Summary: the XML document serializer
+      * Description: API to save document or subtree of document
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XMLSAVE_H__)
+      /define XML_XMLSAVE_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/encoding"
+      /include "libxmlrpg/xmlIO"
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      * xmlSaveOption:
+      *
+      * This is the set of XML save options that can be passed down
+      * to the xmlSaveToFd() and similar calls.
+
+     d xmlSaveOption   s             10i 0 based(######typedef######)           enum
+     d  XML_SAVE_FORMAT...                                                      Format save output
+     d                 c                   X'0001'
+     d  XML_SAVE_NO_DECL...                                                     Drop xml declaration
+     d                 c                   X'0002'
+     d  XML_SAVE_NO_EMPTY...                                                    No empty tags
+     d                 c                   X'0004'
+     d  XML_SAVE_NO_XHTML...                                                    No XHTML1 specific
+     d                 c                   X'0008'
+     d  XML_SAVE_XHTML...                                                       Frce XHTML1 specific
+     d                 c                   X'0010'
+     d  XML_SAVE_AS_XML...                                                      Frce XML on HTML doc
+     d                 c                   X'0020'
+     d  XML_SAVE_AS_HTML...                                                     Frce HTML on XML doc
+     d                 c                   X'0040'
+     d  XML_SAVE_WSNONSIG...                                                    Fmt w/ non-sig space
+     d                 c                   X'0080'
+
+     d xmlSaveCtxtPtr  s               *   based(######typedef######)
+
+     d xmlSaveToFd     pr                  extproc('xmlSaveToFd')
+     d                                     like(xmlSaveCtxtPtr)
+     d  fd                           10i 0 value
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlSaveToFilename...
+     d                 pr                  extproc('xmlSaveToFilename')
+     d                                     like(xmlSaveCtxtPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlSaveToBuffer...
+     d                 pr                  extproc('xmlSaveToBuffer')
+     d                                     like(xmlSaveCtxtPtr)
+     d  buffer                             value like(xmlBufferPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlSaveToIO     pr                  extproc('xmlSaveToIO')
+     d                                     like(xmlSaveCtxtPtr)
+     d  iowrite                            value like(xmlOutputWriteCallback)
+     d  ioclose                            value like(xmlOutputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlSaveDoc      pr            20i 0 extproc('xmlSaveDoc')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlSaveTree     pr            20i 0 extproc('xmlSaveTree')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlSaveFlush    pr            10i 0 extproc('xmlSaveFlush')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+
+     d xmlSaveClose    pr            10i 0 extproc('xmlSaveClose')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+
+     d xmlSaveSetEscape...
+     d                 pr            10i 0 extproc('xmlSaveSetEscape')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+     d  escape                             value like(xmlCharEncodingOutputFunc)
+
+     d xmlSaveSetAttrEscape...
+     d                 pr            10i 0 extproc('xmlSaveSetAttrEscape')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+     d  escape                             value like(xmlCharEncodingOutputFunc)
+
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+      /endif                                                                    XML_XMLSAVE_H__
diff --git a/os400/libxmlrpg/xmlschemas.rpgle b/os400/libxmlrpg/xmlschemas.rpgle
new file mode 100644
index 0000000..865dd26
--- /dev/null
+++ b/os400/libxmlrpg/xmlschemas.rpgle
@@ -0,0 +1,318 @@
+      * Summary: incomplete XML Schemas structure implementation
+      * Description: interface to the XML Schemas handling and schema validity
+      *              checking, it is incomplete right now.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SCHEMA_H__)
+      /define XML_SCHEMA_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+
+      /include "libxmlrpg/tree"
+
+      * This error codes are obsolete; not used any more.
+
+     d xmlSchemaValidError...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMAS_ERR_OK...
+     d                 c                   0
+     d  XML_SCHEMAS_ERR_NOROOT...
+     d                 c                   1
+     d  XML_SCHEMAS_ERR_UNDECLAREDELEM...
+     d                 c                   2
+     d  XML_SCHEMAS_ERR_NOTTOPLEVEL...
+     d                 c                   3
+     d  XML_SCHEMAS_ERR_MISSING...
+     d                 c                   4
+     d  XML_SCHEMAS_ERR_WRONGELEM...
+     d                 c                   5
+     d  XML_SCHEMAS_ERR_NOTYPE...
+     d                 c                   6
+     d  XML_SCHEMAS_ERR_NOROLLBACK...
+     d                 c                   7
+     d  XML_SCHEMAS_ERR_ISABSTRACT...
+     d                 c                   8
+     d  XML_SCHEMAS_ERR_NOTEMPTY...
+     d                 c                   9
+     d  XML_SCHEMAS_ERR_ELEMCONT...
+     d                 c                   10
+     d  XML_SCHEMAS_ERR_HAVEDEFAULT...
+     d                 c                   11
+     d  XML_SCHEMAS_ERR_NOTNILLABLE...
+     d                 c                   12
+     d  XML_SCHEMAS_ERR_EXTRACONTENT...
+     d                 c                   13
+     d  XML_SCHEMAS_ERR_INVALIDATTR...
+     d                 c                   14
+     d  XML_SCHEMAS_ERR_INVALIDELEM...
+     d                 c                   15
+     d  XML_SCHEMAS_ERR_NOTDETERMINIST...
+     d                 c                   16
+     d  XML_SCHEMAS_ERR_CONSTRUCT...
+     d                 c                   17
+     d  XML_SCHEMAS_ERR_INTERNAL...
+     d                 c                   18
+     d  XML_SCHEMAS_ERR_NOTSIMPLE...
+     d                 c                   19
+     d  XML_SCHEMAS_ERR_ATTRUNKNOWN...
+     d                 c                   20
+     d  XML_SCHEMAS_ERR_ATTRINVALID...
+     d                 c                   21
+     d  XML_SCHEMAS_ERR_VALUE...
+     d                 c                   22
+     d  XML_SCHEMAS_ERR_FACET...
+     d                 c                   23
+     d  XML_SCHEMAS_ERR_...
+     d                 c                   24
+     d  XML_SCHEMAS_ERR_XXX...
+     d                 c                   25
+
+      * ATTENTION: Change xmlSchemaSetValidOptions's check
+      * for invalid values, if adding to the validation
+      * options below.
+
+      * xmlSchemaValidOption:
+      *
+      * This is the set of XML Schema validation options.
+
+     d xmlSchemaValidOption...
+     d                 s             10i 0 based(######typedef######)           enum
+      *
+      * Default/fixed: create an attribute node
+      * or an element's text node on the instance.
+      *
+     d  XML_SCHEMA_VAL_VC_I_CREATE...
+     d                 c                   X'0001'
+      /if defined(DISABLED)
+      *
+      * assemble schemata using
+      * xsi:schemaLocation and
+      * xsi:noNamespaceSchemaLocation
+      *
+     d  XML_SCHEMA_VAL_XSI_ASSEMBLE...
+     d                 c                   X'0002'
+      /endif
+
+      * The schemas related types are kept internal
+
+     d xmlSchemaPtr    s               *   based(######typedef######)
+
+      * xmlSchemaValidityErrorFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of an error callback from an XSD validation
+
+     d xmlSchemaValidityErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlSchemaValidityWarningFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of a warning callback from an XSD validation
+
+     d xmlSchemaValidityWarningFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * A schemas validation context
+
+     d xmlSchemaParserCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaValidCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlSchemaValidityLocatorFunc:
+      * @ctx: user provided context
+      * @file: returned file information
+      * @line: returned line information
+      *
+      * A schemas validation locator, a callback called by the validator.
+      * This is used when file or node informations are not available
+      * to find out what file and line number are affected
+      *
+      * Returns: 0 in case of success and -1 in case of error
+
+     d xmlSchemaValidityLocatorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Interfaces for parsing.
+
+     d xmlSchemaNewParserCtxt...
+     d                 pr                  extproc('xmlSchemaNewParserCtxt')
+     d                                     like(xmlSchemaParserCtxtPtr)
+     d URL                             *   value options(*string)               const char *
+
+     d xmlSchemaNewMemParserCtxt...
+     d                 pr                  extproc('xmlSchemaNewMemParserCtxt')
+     d                                     like(xmlSchemaParserCtxtPtr)
+     d buffer                          *   value options(*string)               const char *
+     d size                          10i 0 value
+
+     d xmlSchemaNewDocParserCtxt...
+     d                 pr                  extproc('xmlSchemaNewDocParserCtxt')
+     d                                     like(xmlSchemaParserCtxtPtr)
+     d doc                                 value like(xmlDocPtr)
+
+     d xmlSchemaFreeParserCtxt...
+     d                 pr                  extproc('xmlSchemaFreeParserCtxt')
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+
+     d xmlSchemaSetParserErrors...
+     d                 pr                  extproc('xmlSchemaSetParserErrors')
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+     d err                                 value
+     d                                     like(xmlSchemaValidityErrorFunc)
+     d warn                                value
+     d                                     like(xmlSchemaValidityWarningFunc)
+     d ctx                             *   value                                void *
+
+     d xmlSchemaSetParserStructuredErrors...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaSetParserStructuredErrors')
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+     d serror                              value like(xmlStructuredErrorFunc)
+     d ctx                             *   value                                void *
+
+     d xmlSchemaGetParserErrors...
+     d                 pr            10i 0 extproc('xmlSchemaGetParserErrors')
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+     d err                                 like(xmlSchemaValidityErrorFunc)
+     d warn                                like(xmlSchemaValidityWarningFunc)
+     d ctx                             *                                        void *(*)
+
+     d xmlSchemaIsValid...
+     d                 pr            10i 0 extproc('xmlSchemaIsValid')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+
+     d xmlSchemaParse  pr                  extproc('xmlSchemaParse')
+     d                                     like(xmlSchemaPtr)
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+
+     d xmlSchemaFree   pr                  extproc('xmlSchemaFree')
+     d schema                              value like(xmlSchemaPtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlSchemaDump   pr                  extproc('xmlSchemaDump')
+     d output                          *   value                                FILE *
+     d schema                              value like(xmlSchemaPtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Interfaces for validating
+
+     d xmlSchemaSetValidErrors...
+     d                 pr                  extproc('xmlSchemaSetValidErrors')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d err                                 value
+     d                                     like(xmlSchemaValidityErrorFunc)
+     d warn                                value
+     d                                     like(xmlSchemaValidityWarningFunc)
+     d ctx                             *   value                                void *
+
+     d xmlSchemaSetValidStructuredErrors...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaSetValidStructuredErrors')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d serror                              value like(xmlStructuredErrorFunc)
+     d ctx                             *   value                                void *
+
+     d xmlSchemaGetValidErrors...
+     d                 pr            10i 0 extproc('xmlSchemaGetValidErrors')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d err                                 like(xmlSchemaValidityErrorFunc)
+     d warn                                like(xmlSchemaValidityWarningFunc)
+     d ctx                             *                                        void *(*)
+
+     d xmlSchemaSetValidOptions...
+     d                 pr            10i 0 extproc('xmlSchemaSetValidOptions')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d options                       10i 0 value
+
+     d xmlSchemaValidateSetFilename...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaValidateSetFilename')
+     d vctxt                               value like(xmlSchemaValidCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+
+     d xmlSchemaValidCtxtGetOptions...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidCtxtGetOptions')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+
+     d xmlSchemaNewValidCtxt...
+     d                 pr                  extproc('xmlSchemaNewValidCtxt')
+     d                                     like(xmlSchemaValidCtxtPtr)
+     d schema                              value like(xmlSchemaPtr)
+
+     d xmlSchemaFreeValidCtxt...
+     d                 pr                  extproc('xmlSchemaFreeValidCtxt')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+
+     d xmlSchemaValidateDoc...
+     d                 pr            10i 0 extproc('xmlSchemaValidateDoc')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d instance                            value like(xmlDocPtr)
+
+     d xmlSchemaValidateOneElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidateOneElement')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d elem                                value like(xmlNodePtr)
+
+     d xmlSchemaValidateStream...
+     d                 pr            10i 0 extproc('xmlSchemaValidateStream')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d input                               value like(xmlParserInputBufferPtr)
+     d enc                                 value like(xmlCharEncoding)
+     d sax                                 value like(xmlSAXHandlerPtr)
+     d user_data                       *   value                                void *
+
+     d xmlSchemaValidateFile...
+     d                 pr            10i 0 extproc('xmlSchemaValidateFile')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+     d options                       10i 0 value
+
+     d xmlSchemaValidCtxtGetParserCtxt...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaValidCtxtGetParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+
+      * Interface to insert Schemas SAX validation in a SAX stream
+
+     d xmlSchemaSAXPlugPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaSAXPlug...
+     d                 pr                  extproc('xmlSchemaSAXPlug')
+     d                                     like(xmlSchemaSAXPlugPtr)
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d sax                                 like(xmlSAXHandlerPtr)
+     d user_data                       *                                        void *(*)
+
+     d xmlSchemaSAXUnplug...
+     d                 pr            10i 0 extproc('xmlSchemaSAXUnplug')
+     d plug                                value like(xmlSchemaSAXPlugPtr)
+
+     d xmlSchemaValidateSetLocator...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaValidateSetLocator')
+     d vctxt                               value like(xmlSchemaValidCtxtPtr)
+     d f                                   value
+     d                                     like(xmlSchemaValidityLocatorFunc)
+     d ctxt                            *   value                                void *
+
+      /endif                                                                    LIBXML_SCHEMAS_ENBLD
+      /endif                                                                    XML_SCHEMA_H__
diff --git a/os400/libxmlrpg/xmlschemastypes.rpgle b/os400/libxmlrpg/xmlschemastypes.rpgle
new file mode 100644
index 0000000..6433c32
--- /dev/null
+++ b/os400/libxmlrpg/xmlschemastypes.rpgle
@@ -0,0 +1,235 @@
+      * Summary: implementation of XML Schema Datatypes
+      * Description: module providing the XML Schema Datatypes implementation
+      *              both definition and validity checking
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SCHEMA_TYPES_H__)
+      /define XML_SCHEMA_TYPES_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+
+      /include "libxmlrpg/schemasInternals"
+      /include "libxmlrpg/xmlschemas"
+
+     d xmlSchemaWhitespaceValueType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMA_WHITESPACE_UNKNOWN...
+     d                 c                   0
+     d  XML_SCHEMA_WHITESPACE_PRESERVE...
+     d                 c                   1
+     d  XML_SCHEMA_WHITESPACE_REPLACE...
+     d                 c                   2
+     d  XML_SCHEMA_WHITESPACE_COLLAPSE...
+     d                 c                   3
+
+     d xmlSchemaInitTypes...
+     d                 pr                  extproc('xmlSchemaInitTypes')
+
+     d xmlSchemaCleanupTypes...
+     d                 pr                  extproc('xmlSchemaCleanupTypes')
+
+     d xmlSchemaGetPredefinedType...
+     d                 pr                  extproc('xmlSchemaGetPredefinedType')
+     d                                     like(xmlSchemaTypePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+
+     d xmlSchemaValidatePredefinedType...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidatePredefinedType')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                            *   value                                xmlSchemaValPtr *
+
+     d xmlSchemaValPredefTypeNode...
+     d                 pr            10i 0 extproc('xmlSchemaValPredefTypeNode')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                            *   value                                xmlSchemaValPtr *
+     d  node                               value like(xmlNodePtr)
+
+     d xmlSchemaValidateFacet...
+     d                 pr            10i 0 extproc('xmlSchemaValidateFacet')
+     d  base                               value like(xmlSchemaTypePtr)
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaValidateFacetWhtsp...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidateFacetWhtsp')
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  fws                                value
+     d                                     like(xmlSchemaWhitespaceValueType)
+     d  valType                            value like(xmlSchemaValType)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+     d  ws                                 value
+     d                                     like(xmlSchemaWhitespaceValueType)
+
+     d xmlSchemaFreeValue...
+     d                 pr                  extproc('xmlSchemaFreeValue')
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaNewFacet...
+     d                 pr                  extproc('xmlSchemaNewFacet')
+     d                                     like(xmlSchemaFacetPtr)
+
+     d xmlSchemaCheckFacet...
+     d                 pr            10i 0 extproc('xmlSchemaCheckFacet')
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  typeDecl                           value like(xmlSchemaTypePtr)
+     d  ctxt                               value like(xmlSchemaParserCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlSchemaFreeFacet...
+     d                 pr                  extproc('xmlSchemaFreeFacet')
+     d  facet                              value like(xmlSchemaFacetPtr)
+
+     d xmlSchemaCompareValues...
+     d                 pr            10i 0 extproc('xmlSchemaCompareValues')
+     d  x                                  value like(xmlSchemaValPtr)
+     d  y                                  value like(xmlSchemaValPtr)
+
+     d xmlSchemaGetBuiltInListSimpleTypeItemType...
+     d                 pr                  extproc('xmlSchemaGetBuiltInListSimp-
+     d                                     leTypeItemType')
+     d                                     like(xmlSchemaTypePtr)
+     d  type                               value like(xmlSchemaTypePtr)
+
+     d xmlSchemaValidateListSimpleTypeFacet...
+     d                 pr            10i 0 extproc('xmlSchemaValidateListSimple-
+     d                                     TypeFacet')
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  actualLen                    20u 0 value
+     d  expectedLen                    *   value                                unsigned long *
+
+     d xmlSchemaGetBuiltInType...
+     d                 pr                  extproc('xmlSchemaGetBuiltInType')
+     d                                     like(xmlSchemaTypePtr)
+     d  type                               value like(xmlSchemaValType)
+
+     d xmlSchemaIsBuiltInTypeFacet...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaIsBuiltInTypeFacet')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  facetType                    10i 0 value
+
+     d xmlSchemaCollapseString...
+     d                 pr              *   extproc('xmlSchemaCollapseString')   xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSchemaWhiteSpaceReplace...
+     d                 pr              *   extproc('xmlSchemaWhiteSpaceReplace')xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSchemaGetFacetValueAsULong...
+     d                 pr            20u 0 extproc(
+     d                                     'xmlSchemaGetFacetValueAsULong')
+     d  facet                              value like(xmlSchemaFacetPtr)
+
+     d xmlSchemaValidateLengthFacet...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidateLengthFacet')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+     d  length                       20u 0
+
+     d xmlSchemaValidateLengthFacetWhtsp...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidateLengthFacetWhtsp')
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  valType                            value like(xmlSchemaValType)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+     d  length                       20u 0
+     d  ws                                 value
+     d                                     like(xmlSchemaWhitespaceValueType)
+
+     d xmlSchemaValPredefTypeNodeNoNorm...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValPredefTypeNodeNoNorm')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                like(xmlSchemaValPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlSchemaGetCanonValue...
+     d                 pr            10i 0 extproc('xmlSchemaGetCanonValue')
+     d  val                                value like(xmlSchemaValPtr)
+     d  retValue                       *   value                                const xmlChar * *
+
+     d xmlSchemaGetCanonValueWhtsp...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaGetCanonValueWhtsp')
+     d  val                                value like(xmlSchemaValPtr)
+     d  retValue                       *   value                                const xmlChar * *
+     d  ws                                 value
+     d                                     like(xmlSchemaWhitespaceValueType)
+
+     d xmlSchemaValueAppend...
+     d                 pr            10i 0 extproc('xmlSchemaValueAppend')
+     d  prev                               value like(xmlSchemaValPtr)
+     d  cur                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaValueGetNext...
+     d                 pr                  extproc('xmlSchemaValueGetNext')
+     d                                     like(xmlSchemaValPtr)
+     d  cur                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaValueGetAsString...
+     d                 pr              *   extproc('xmlSchemaValueGetAsString') const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaValueGetAsBoolean...
+     d                 pr            10i 0 extproc('xmlSchemaValueGetAsBoolean')
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaNewStringValue...
+     d                 pr                  extproc('xmlSchemaNewStringValue')
+     d                                     like(xmlSchemaValPtr)
+     d  type                               value like(xmlSchemaValType)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSchemaNewNOTATIONValue...
+     d                 pr                  extproc('xmlSchemaNewNOTATIONValue')
+     d                                     like(xmlSchemaValPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+
+     d xmlSchemaNewQNameValue...
+     d                 pr                  extproc('xmlSchemaNewQNameValue')
+     d                                     like(xmlSchemaValPtr)
+     d  namespaceName                  *   value options(*string)               const xmlChar *
+     d  localName                      *   value options(*string)               const xmlChar *
+
+     d xmlSchemaCompareValuesWhtsp...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaCompareValuesWhtsp')
+     d  x                                  value like(xmlSchemaValPtr)
+     d  xws                                value
+     d                                     like(xmlSchemaWhitespaceValueType)
+     d  y                                  value like(xmlSchemaValPtr)
+     d  yws                                value
+     d                                     like(xmlSchemaWhitespaceValueType)
+
+     d xmlSchemaCopyValue...
+     d                 pr                  extproc('xmlSchemaCopyValue')
+     d                                     like(xmlSchemaValPtr)
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaGetValType...
+     d                 pr                  extproc('xmlSchemaGetValType')
+     d                                     like(xmlSchemaValType)
+     d  val                                value like(xmlSchemaValPtr)
+
+      /endif                                                                    LIBXML_SCHEMAS_ENBLD
+      /endif                                                                    XML_SCHEMA_TYPES_H__
diff --git a/os400/libxmlrpg/xmlstdarg.rpgle b/os400/libxmlrpg/xmlstdarg.rpgle
new file mode 100644
index 0000000..4e6f121
--- /dev/null
+++ b/os400/libxmlrpg/xmlstdarg.rpgle
@@ -0,0 +1,34 @@
+      * Summary: va_list support for ILE/RPG.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_STDARG_H__)
+      /define XML_STDARG_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      * The va_list object.
+
+     d xmlVaList       ds                  based(######typedef######)
+     d                                     align qualified
+     d  current                        *
+     d  next                           *
+
+      * Procedures.
+
+     d xmlVaStart      pr                  extproc('__xmlVaStart')
+     d  list                               like(xmlVaList)
+     d  lastargaddr                    *   value
+     d  lastargsize                  10u 0 value
+
+     d xmlVaArg        pr              *   extproc('__xmlVaArg')
+     d  list                               like(xmlVaList)
+     d  dest                           *   value
+     d  argsize                      10i 0 value
+
+     d xmlVaEnd        pr                  extproc('__xmlVaEnd')
+     d  list                               like(xmlVaList)
+
+      /endif                                                                    XML_STDARG_H__
diff --git a/os400/libxmlrpg/xmlstring.rpgle b/os400/libxmlrpg/xmlstring.rpgle
new file mode 100644
index 0000000..41e9eb5
--- /dev/null
+++ b/os400/libxmlrpg/xmlstring.rpgle
@@ -0,0 +1,162 @@
+      * Summary: set of routines to process strings
+      * Description: type and interfaces needed for the internal string
+      *              handling of the library, especially UTF8 processing.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_STRING_H__)
+      /define XML_STRING_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlstdarg"
+
+      * xmlChar:
+      *
+      * This is a basic byte in an UTF-8 encoded string.
+      * It's unsigned allowing to pinpoint case where char * are assigned
+      * to xmlChar * (possibly making serialization back impossible).
+
+     d xmlChar         s              3u 0 based(######typedef######)
+
+      * xmlChar handling
+
+     d xmlStrdup       pr              *   extproc('xmlStrdup')                 xmlChar *
+     d  cur                            *   value options(*string)               const xmlChar *
+
+     d xmlStrndup      pr              *   extproc('xmlStrndup')                xmlChar *
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlCharStrndup  pr              *   extproc('xmlCharStrndup')            xmlChar *
+     d  cur                            *   value options(*string)               const char *
+     d  len                          10i 0 value
+
+     d xmlCharStrdup   pr              *   extproc('xmlCharStrdup')             xmlChar *
+     d  cur                            *   value options(*string)               const char *
+
+     d xmlStrsub       pr              *   extproc('xmlStrsub')                 const xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  start                        10i 0 value
+     d  len                          10i 0 value
+
+     d xmlStrchr       pr              *   extproc('xmlStrchr')                 const xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlChar)
+
+     d xmlStrstr       pr              *   extproc('xmlStrstr')                 const xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  val                            *   value options(*string)               const xmlChar *
+
+     d xmlStrcasestr   pr              *   extproc('xmlStrcasestr')             const xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  val                            *   value options(*string)               const xmlChar *
+
+     d xmlStrcmp       pr            10i 0 extproc('xmlStrcmp')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+
+     d xmlStrncmp      pr            10i 0 extproc('xmlStrncmp')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlStrcasecmp   pr            10i 0 extproc('xmlStrcasecmp')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+
+     d xmlStrncasecmp  pr            10i 0 extproc('xmlStrncasecmp')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlStrEqual     pr            10i 0 extproc('xmlStrEqual')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+
+     d xmlStrQEqual    pr            10i 0 extproc('xmlStrQEqual')
+     d  pref                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  stre                           *   value options(*string)               const xmlChar *
+
+     d xmlStrlen       pr            10i 0 extproc('xmlStrlen')
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlStrcat       pr              *   extproc('xmlStrcat')                 xmlChar *
+     d  cur                            *   value options(*string)               xmlChar *
+     d  add                            *   value options(*string)               const xmlChar *
+
+     d xmlStrncat      pr              *   extproc('xmlStrncat')                xmlChar *
+     d  cur                            *   value options(*string)               xmlChar *
+     d  add                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlStrncatNew   pr              *   extproc('xmlStrncatNew')             xmlChar *
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+      * xmlStrPrintf() is a vararg function.
+      * The following prototype supports up to 8 pointer arguments.
+      * Other argument signature can be achieved by defining alternate
+      *   prototypes redirected to the same function.
+
+     d xmlStrPrintf    pr            10i 0 extproc('xmlStrPrintf')
+     d  buf                            *   value options(*string)               xmlChar *
+     d  len                          10i 0 value
+     d  msg                            *   value options(*string)               const xmlChar *
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlStrVPrintf   pr            10i 0 extproc('xmlStrVPrintf')
+     d  buf                            *   value options(*string)               xmlChar *
+     d  len                          10i 0 value
+     d  msg                            *   value options(*string)               const xmlChar *
+     d  ap                                 likeds(xmlVaList)
+
+     d xmlGetUTF8Char  pr            10i 0 extproc('xmlGetUTF8Char')
+     d  utf                            *   value options(*string)               const uns. char *
+     d  len                          10i 0
+
+     d xmlCheckUTF8    pr            10i 0 extproc('xmlCheckUTF8')
+     d  utf                            *   value options(*string)               const uns. char *
+
+     d xmlUTF8Strsize  pr            10i 0 extproc('xmlUTF8Strsize')
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlUTF8Strndup  pr              *   extproc('xmlUTF8Strndup')            xmlChar *
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlUTF8Strpos   pr              *   extproc('xmlUTF8Strpos')             const xmlChar *
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  pos                          10i 0 value
+
+     d xmlUTF8Strloc   pr            10i 0 extproc('xmlUTF8Strloc')
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  utfchar                        *   value options(*string)               const xmlChar *
+
+     d xmlUTF8Strsub   pr              *   extproc('xmlUTF8Strsub')             xmlChar *
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  start                        10i 0 value
+     d  len                          10i 0 value
+
+     d xmlUTF8Strlen   pr            10i 0 extproc('xmlUTF8Strlen')
+     d  utf                            *   value options(*string)               const xmlChar *
+
+     d xmlUTF8Size     pr            10i 0 extproc('xmlUTF8Size')
+     d  utf                            *   value options(*string)               const xmlChar *
+
+     d xmlUTF8Charcmp  pr            10i 0 extproc('xmlUTF8Charcmp')
+     d  utf1                           *   value options(*string)               const xmlChar *
+     d  utf2                           *   value options(*string)               const xmlChar *
+
+      /endif                                                                    XML_STRING_H__
diff --git a/os400/libxmlrpg/xmlunicode.rpgle b/os400/libxmlrpg/xmlunicode.rpgle
new file mode 100644
index 0000000..64f7abf
--- /dev/null
+++ b/os400/libxmlrpg/xmlunicode.rpgle
@@ -0,0 +1,668 @@
+      * Summary: Unicode character APIs
+      * Description: API for the Unicode character APIs
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_UNICODE_H__)
+      /define XML_UNICODE_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_UNICODE_ENABLED)
+
+     d xmlUCSIsAegeanNumbers...
+     d                 pr            10i 0 extproc('xmlUCSIsAegeanNumbers')
+     d  code                         10i 0 value
+
+     d xmlUCSIsAlphabeticPresentationForms...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsAlphabeticPresentationForms'
+     d                                     )
+     d  code                         10i 0 value
+
+     d xmlUCSIsArabic  pr            10i 0 extproc('xmlUCSIsArabic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsArabicPresentationFormsA...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsArabicPresentationFormsA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsArabicPresentationFormsB...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsArabicPresentationFormsB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsArmenian...
+     d                 pr            10i 0 extproc('xmlUCSIsArmenian')
+     d  code                         10i 0 value
+
+     d xmlUCSIsArrows  pr            10i 0 extproc('xmlUCSIsArrows')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBasicLatin...
+     d                 pr            10i 0 extproc('xmlUCSIsBasicLatin')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBengali...
+     d                 pr            10i 0 extproc('xmlUCSIsBengali')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBlockElements...
+     d                 pr            10i 0 extproc('xmlUCSIsBlockElements')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBopomofo...
+     d                 pr            10i 0 extproc('xmlUCSIsBopomofo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBopomofoExtended...
+     d                 pr            10i 0 extproc('xmlUCSIsBopomofoExtended')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBoxDrawing...
+     d                 pr            10i 0 extproc('xmlUCSIsBoxDrawing')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBraillePatterns...
+     d                 pr            10i 0 extproc('xmlUCSIsBraillePatterns')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBuhid   pr            10i 0 extproc('xmlUCSIsBuhid')
+     d  code                         10i 0 value
+
+     d xmlUCSIsByzantineMusicalSymbols...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsByzantineMusicalSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKCompatibility...
+     d                 pr            10i 0 extproc('xmlUCSIsCJKCompatibility')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKCompatibilityForms...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKCompatibilityForms')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKCompatibilityIdeographs...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKCompatibilityIdeographs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKCompatibilityIdeographsSupplement...
+     d                 pr            10i 0 extproc('xmlUCSIsCJKCompatibilityIde-
+     d                                     ographsSupplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKRadicalsSupplement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKRadicalsSupplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKSymbolsandPunctuation...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKSymbolsandPunctuation')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKUnifiedIdeographs...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKUnifiedIdeographs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKUnifiedIdeographsExtensionA...
+     d                 pr            10i 0 extproc('xmlUCSIsCJKUnifiedIdeograph-
+     d                                     sExtensionA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKUnifiedIdeographsExtensionB...
+     d                 pr            10i 0 extproc('xmlUCSIsCJKUnifiedIdeograph-
+     d                                     sExtensionB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCherokee...
+     d                 pr            10i 0 extproc('xmlUCSIsCherokee')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCombiningDiacriticalMarks...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCombiningDiacriticalMarks')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCombiningDiacriticalMarksforSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsCombiningDiacritica-
+     d                                     lMarksforSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCombiningHalfMarks...
+     d                 pr            10i 0 extproc('xmlUCSIsCombiningHalfMarks')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCombiningMarksforSymbols...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCombiningMarksforSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsControlPictures...
+     d                 pr            10i 0 extproc('xmlUCSIsControlPictures')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCurrencySymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsCurrencySymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCypriotSyllabary...
+     d                 pr            10i 0 extproc('xmlUCSIsCypriotSyllabary')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCyrillic...
+     d                 pr            10i 0 extproc('xmlUCSIsCyrillic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCyrillicSupplement...
+     d                 pr            10i 0 extproc('xmlUCSIsCyrillicSupplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsDeseret...
+     d                 pr            10i 0 extproc('xmlUCSIsDeseret')
+     d  code                         10i 0 value
+
+     d xmlUCSIsDevanagari...
+     d                 pr            10i 0 extproc('xmlUCSIsDevanagari')
+     d  code                         10i 0 value
+
+     d xmlUCSIsDingbats...
+     d                 pr            10i 0 extproc('xmlUCSIsDingbats')
+     d  code                         10i 0 value
+
+     d xmlUCSIsEnclosedAlphanumerics...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsEnclosedAlphanumerics')
+     d  code                         10i 0 value
+
+     d xmlUCSIsEnclosedCJKLettersandMonths...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsEnclosedCJKLettersandMonths'
+     d                                     )
+     d  code                         10i 0 value
+
+     d xmlUCSIsEthiopic...
+     d                 pr            10i 0 extproc('xmlUCSIsEthiopic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGeneralPunctuation...
+     d                 pr            10i 0 extproc('xmlUCSIsGeneralPunctuation')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGeometricShapes...
+     d                 pr            10i 0 extproc('xmlUCSIsGeometricShapes')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGeorgian...
+     d                 pr            10i 0 extproc('xmlUCSIsGeorgian')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGothic  pr            10i 0 extproc('xmlUCSIsGothic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGreek   pr            10i 0 extproc('xmlUCSIsGreek')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGreekExtended...
+     d                 pr            10i 0 extproc('xmlUCSIsGreekExtended')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGreekandCoptic...
+     d                 pr            10i 0 extproc('xmlUCSIsGreekandCoptic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGujarati...
+     d                 pr            10i 0 extproc('xmlUCSIsGujarati')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGurmukhi...
+     d                 pr            10i 0 extproc('xmlUCSIsGurmukhi')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHalfwidthandFullwidthForms...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsHalfwidthandFullwidthForms')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHangulCompatibilityJamo...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsHangulCompatibilityJamo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHangulJamo...
+     d                 pr            10i 0 extproc('xmlUCSIsHangulJamo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHangulSyllables...
+     d                 pr            10i 0 extproc('xmlUCSIsHangulSyllables')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHanunoo...
+     d                 pr            10i 0 extproc('xmlUCSIsHanunoo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHebrew  pr            10i 0 extproc('xmlUCSIsHebrew')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHighPrivateUseSurrogates...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsHighPrivateUseSurrogates')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHighSurrogates...
+     d                 pr            10i 0 extproc('xmlUCSIsHighSurrogates')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHiragana...
+     d                 pr            10i 0 extproc('xmlUCSIsHiragana')
+     d  code                         10i 0 value
+
+     d xmlUCSIsIPAExtensions...
+     d                 pr            10i 0 extproc('xmlUCSIsIPAExtensions')
+     d  code                         10i 0 value
+
+     d xmlUCSIsIdeographicDescriptionCharacters...
+     d                 pr            10i 0 extproc('xmlUCSIsIdeographicDescript-
+     d                                     ionCharacters')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKanbun  pr            10i 0 extproc('xmlUCSIsKanbun')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKangxiRadicals...
+     d                 pr            10i 0 extproc('xmlUCSIsKangxiRadicals')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKannada...
+     d                 pr            10i 0 extproc('xmlUCSIsKannada')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKatakana...
+     d                 pr            10i 0 extproc('xmlUCSIsKatakana')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKatakanaPhoneticExtensions...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsKatakanaPhoneticExtensions')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKhmer   pr            10i 0 extproc('xmlUCSIsKhmer')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKhmerSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsKhmerSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLao     pr            10i 0 extproc('xmlUCSIsLao')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLatin1Supplement...
+     d                 pr            10i 0 extproc('xmlUCSIsLatin1Supplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLatinExtendedA...
+     d                 pr            10i 0 extproc('xmlUCSIsLatinExtendedA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLatinExtendedB...
+     d                 pr            10i 0 extproc('xmlUCSIsLatinExtendedB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLatinExtendedAdditional...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsLatinExtendedAdditional')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLetterlikeSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsLetterlikeSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLimbu   pr            10i 0 extproc('xmlUCSIsLimbu')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLinearBIdeograms...
+     d                 pr            10i 0 extproc('xmlUCSIsLinearBIdeograms')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLinearBSyllabary...
+     d                 pr            10i 0 extproc('xmlUCSIsLinearBSyllabary')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLowSurrogates...
+     d                 pr            10i 0 extproc('xmlUCSIsLowSurrogates')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMalayalam...
+     d                 pr            10i 0 extproc('xmlUCSIsMalayalam')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMathematicalAlphanumericSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsMathematicalAlphanu-
+     d                                     mericSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMathematicalOperators...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsMathematicalOperators')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousMathematicalSymbolsA...
+     d                 pr            10i 0 extproc('xmlUCSIsMiscellaneousMathem-
+     d                                     aticalSymbolsA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousMathematicalSymbolsB...
+     d                 pr            10i 0 extproc('xmlUCSIsMiscellaneousMathem-
+     d                                     aticalSymbolsB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousSymbols...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsMiscellaneousSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousSymbolsandArrows...
+     d                 pr            10i 0 extproc('xmlUCSIsMiscellaneousSymbol-
+     d                                     sandArrows')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousTechnical...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsMiscellaneousTechnical')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMongolian...
+     d                 pr            10i 0 extproc('xmlUCSIsMongolian')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMusicalSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsMusicalSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMyanmar...
+     d                 pr            10i 0 extproc('xmlUCSIsMyanmar')
+     d  code                         10i 0 value
+
+     d xmlUCSIsNumberForms...
+     d                 pr            10i 0 extproc('xmlUCSIsNumberForms')
+     d  code                         10i 0 value
+
+     d xmlUCSIsOgham   pr            10i 0 extproc('xmlUCSIsOgham')
+     d  code                         10i 0 value
+
+     d xmlUCSIsOldItalic...
+     d                 pr            10i 0 extproc('xmlUCSIsOldItalic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsOpticalCharacterRecognition...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsOpticalCharacterRecognition'
+     d                                     )
+     d  code                         10i 0 value
+
+     d xmlUCSIsOriya   pr            10i 0 extproc('xmlUCSIsOriya')
+     d  code                         10i 0 value
+
+     d xmlUCSIsOsmanya...
+     d                 pr            10i 0 extproc('xmlUCSIsOsmanya')
+     d  code                         10i 0 value
+
+     d xmlUCSIsPhoneticExtensions...
+     d                 pr            10i 0 extproc('xmlUCSIsPhoneticExtensions')
+     d  code                         10i 0 value
+
+     d xmlUCSIsPrivateUse...
+     d                 pr            10i 0 extproc('xmlUCSIsPrivateUse')
+     d  code                         10i 0 value
+
+     d xmlUCSIsPrivateUseArea...
+     d                 pr            10i 0 extproc('xmlUCSIsPrivateUseArea')
+     d  code                         10i 0 value
+
+     d xmlUCSIsRunic   pr            10i 0 extproc('xmlUCSIsRunic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsShavian...
+     d                 pr            10i 0 extproc('xmlUCSIsShavian')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSinhala...
+     d                 pr            10i 0 extproc('xmlUCSIsSinhala')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSmallFormVariants...
+     d                 pr            10i 0 extproc('xmlUCSIsSmallFormVariants')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSpacingModifierLetters...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsSpacingModifierLetters')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSpecials...
+     d                 pr            10i 0 extproc('xmlUCSIsSpecials')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSuperscriptsandSubscripts...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsSuperscriptsandSubscripts')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementalArrowsA...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsSupplementalArrowsA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementalArrowsB...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsSupplementalArrowsB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementalMathematicalOperators...
+     d                 pr            10i 0 extproc('xmlUCSIsSupplementalMathema-
+     d                                     ticalOperators')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementaryPrivateUseAreaA...
+     d                 pr            10i 0 extproc('xmlUCSIsSupplementaryPrivat-
+     d                                     eUseAreaA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementaryPrivateUseAreaB...
+     d                 pr            10i 0 extproc('xmlUCSIsSupplementaryPrivat-
+     d                                     eUseAreaB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSyriac  pr            10i 0 extproc('xmlUCSIsSyriac')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTagalog...
+     d                 pr            10i 0 extproc('xmlUCSIsTagalog')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTagbanwa...
+     d                 pr            10i 0 extproc('xmlUCSIsTagbanwa')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTags    pr            10i 0 extproc('xmlUCSIsTags')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTaiLe   pr            10i 0 extproc('xmlUCSIsTaiLe')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTaiXuanJingSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsTaiXuanJingSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTamil   pr            10i 0 extproc('xmlUCSIsTamil')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTelugu  pr            10i 0 extproc('xmlUCSIsTelugu')
+     d  code                         10i 0 value
+
+     d xmlUCSIsThaana  pr            10i 0 extproc('xmlUCSIsThaana')
+     d  code                         10i 0 value
+
+     d xmlUCSIsThai    pr            10i 0 extproc('xmlUCSIsThai')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTibetan...
+     d                 pr            10i 0 extproc('xmlUCSIsTibetan')
+     d  code                         10i 0 value
+
+     d xmlUCSIsUgaritic...
+     d                 pr            10i 0 extproc('xmlUCSIsUgaritic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsUnifiedCanadianAboriginalSyllabics...
+     d                 pr            10i 0 extproc('xmlUCSIsUnifiedCanadianAbor-
+     d                                     iginalSyllabics')
+     d  code                         10i 0 value
+
+     d xmlUCSIsVariationSelectors...
+     d                 pr            10i 0 extproc('xmlUCSIsVariationSelectors')
+     d  code                         10i 0 value
+
+     d xmlUCSIsVariationSelectorsSupplement...
+     d                 pr            10i 0 extproc('xmlUCSIsVariationSelectorsS-
+     d                                     upplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsYiRadicals...
+     d                 pr            10i 0 extproc('xmlUCSIsYiRadicals')
+     d  code                         10i 0 value
+
+     d xmlUCSIsYiSyllables...
+     d                 pr            10i 0 extproc('xmlUCSIsYiSyllables')
+     d  code                         10i 0 value
+
+     d xmlUCSIsYijingHexagramSymbols...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsYijingHexagramSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBlock   pr            10i 0 extproc('xmlUCSIsBlock')
+     d  code                         10i 0 value
+     d  block                          *   value options(*string)               const char *
+
+     d xmlUCSIsCatC    pr            10i 0 extproc('xmlUCSIsCatC')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatCc   pr            10i 0 extproc('xmlUCSIsCatCc')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatCf   pr            10i 0 extproc('xmlUCSIsCatCf')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatCo   pr            10i 0 extproc('xmlUCSIsCatCo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatCs   pr            10i 0 extproc('xmlUCSIsCatCs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatL    pr            10i 0 extproc('xmlUCSIsCatL')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLl   pr            10i 0 extproc('xmlUCSIsCatLl')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLm   pr            10i 0 extproc('xmlUCSIsCatLm')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLo   pr            10i 0 extproc('xmlUCSIsCatLo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLt   pr            10i 0 extproc('xmlUCSIsCatLt')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLu   pr            10i 0 extproc('xmlUCSIsCatLu')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatM    pr            10i 0 extproc('xmlUCSIsCatM')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatMc   pr            10i 0 extproc('xmlUCSIsCatMc')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatMe   pr            10i 0 extproc('xmlUCSIsCatMe')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatMn   pr            10i 0 extproc('xmlUCSIsCatMn')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatN    pr            10i 0 extproc('xmlUCSIsCatN')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatNd   pr            10i 0 extproc('xmlUCSIsCatNd')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatNl   pr            10i 0 extproc('xmlUCSIsCatNl')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatNo   pr            10i 0 extproc('xmlUCSIsCatNo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatP    pr            10i 0 extproc('xmlUCSIsCatP')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPc   pr            10i 0 extproc('xmlUCSIsCatPc')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPd   pr            10i 0 extproc('xmlUCSIsCatPd')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPe   pr            10i 0 extproc('xmlUCSIsCatPe')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPf   pr            10i 0 extproc('xmlUCSIsCatPf')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPi   pr            10i 0 extproc('xmlUCSIsCatPi')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPo   pr            10i 0 extproc('xmlUCSIsCatPo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPs   pr            10i 0 extproc('xmlUCSIsCatPs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatS    pr            10i 0 extproc('xmlUCSIsCatS')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatSc   pr            10i 0 extproc('xmlUCSIsCatSc')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatSk   pr            10i 0 extproc('xmlUCSIsCatSk')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatSm   pr            10i 0 extproc('xmlUCSIsCatSm')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatSo   pr            10i 0 extproc('xmlUCSIsCatSo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatZ    pr            10i 0 extproc('xmlUCSIsCatZ')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatZl   pr            10i 0 extproc('xmlUCSIsCatZl')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatZp   pr            10i 0 extproc('xmlUCSIsCatZp')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatZs   pr            10i 0 extproc('xmlUCSIsCatZs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCat     pr            10i 0 extproc('xmlUCSIsCat')
+     d  code                         10i 0 value
+     d  cat                            *   value options(*string)               const char *
+
+      /endif                                                                    LIBXML_UNICODE_ENBLD
+      /endif                                                                    XML_UNICODE_H__
diff --git a/os400/libxmlrpg/xmlversion.rpgle.in b/os400/libxmlrpg/xmlversion.rpgle.in
new file mode 100644
index 0000000..81676be
--- /dev/null
+++ b/os400/libxmlrpg/xmlversion.rpgle.in
@@ -0,0 +1,352 @@
+      * Summary: compile-time version informations
+      * Description: compile-time version informations for the XML library
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_VERSION_H__)
+      /define XML_VERSION_H__
+
+      /include "libxmlrpg/xmlexports"
+
+      * use those to be sure nothing nasty will happen if
+      * your library and includes mismatch
+
+
+     d xmlCheckVersion...
+     d                 pr                  extproc('xmlCheckVersion')
+     d  version                      10i 0 value
+
+      * LIBXML_DOTTED_VERSION:
+      *
+      * the version string like "1.2.3"
+
+     d LIBXML_DOTTED_VERSION...
+     d                 c                   '@VERSION@'
+
+      * LIBXML_VERSION:
+      *
+      * the version number: 1.2.3 value is 10203
+
+     d LIBXML_VERSION  c                   @LIBXML_VERSION_NUMBER@
+
+      * LIBXML_VERSION_STRING:
+      *
+      * the version number string, 1.2.3 value is "10203"
+
+     d LIBXML_VERSION_STRING...
+     d                 c                   '@LIBXML_VERSION_NUMBER@'
+
+      * LIBXML_VERSION_EXTRA:
+      *
+      * extra version information, used to show a CVS compilation
+
+     d LIBXML_VERSION_EXTRA...
+     d                 c                   '@LIBXML_VERSION_EXTRA@'
+
+      * For conditional compilation
+      /define   DEFINED_1
+      /undefine DEFINED_0
+
+      /if defined(DEFINED_ WITH_TRIO@)
+      * WITH_TRIO:
+      *
+      * defined if the trio support need to be configured in
+
+      /define WITH_TRIO
+      /else
+      * WITHOUT_TRIO:
+      *
+      * defined if the trio support should not be configured in
+
+      /define WITHOUT_TRIO
+      /endif
+
+      * LIBXML_THREAD_ENABLED:
+      *
+      * Whether the thread support is configured in
+
+      /if defined(DEFINED_ WITH_THREADS@)
+      /define LIBXML_THREAD_ENABLED
+      /endif
+
+      * LIBXML_THREAD_ALLOC_ENABLED:
+      *
+      * Whether the allocation hooks are per-thread
+
+      /if defined(DEFINED_ WITH_THREAD_ALLOC@)
+      /define LIBXML_THREAD_ALLOC_ENABLED
+      /endif
+
+      * LIBXML_TREE_ENABLED:
+      *
+      * Whether the DOM like tree manipulation API support is configured in
+
+      /if defined(DEFINED_ WITH_TREE@)
+      /define LIBXML_TREE_ENABLED
+      /endif
+
+      * LIBXML_OUTPUT_ENABLED:
+      *
+      * Whether the serialization/saving support is configured in
+
+      /if defined(DEFINED_ WITH_OUTPUT@)
+      /define LIBXML_OUTPUT_ENABLED
+      /endif
+
+      * LIBXML_PUSH_ENABLED:
+      *
+      * Whether the push parsing interfaces are configured in
+
+      /if defined(DEFINED_ WITH_PUSH@)
+      /define LIBXML_PUSH_ENABLED
+      /endif
+
+      * LIBXML_READER_ENABLED:
+      *
+      * Whether the xmlReader parsing interface is configured in
+
+      /if defined(DEFINED_ WITH_READER@)
+      /define LIBXML_READER_ENABLED
+      /endif
+
+      * LIBXML_PATTERN_ENABLED:
+      *
+      * Whether the xmlPattern node selection interface is configured in
+
+      /if defined(DEFINED_ WITH_PATTERN@)
+      /define LIBXML_PATTERN_ENABLED
+      /endif
+
+      * LIBXML_WRITER_ENABLED:
+      *
+      * Whether the xmlWriter saving interface is configured in
+
+      /if defined(DEFINED_ WITH_WRITER@)
+      /define LIBXML_WRITER_ENABLED
+      /endif
+
+      * LIBXML_SAX1_ENABLED:
+      *
+      * Whether the older SAX1 interface is configured in
+
+      /if defined(DEFINED_ WITH_SAX1@)
+      /define LIBXML_SAX1_ENABLED
+      /endif
+
+      * LIBXML_FTP_ENABLED:
+      *
+      * Whether the FTP support is configured in
+
+      /if defined(DEFINED_ WITH_FTP@)
+      /define LIBXML_FTP_ENABLED
+      /endif
+
+      * LIBXML_HTTP_ENABLED:
+      *
+      * Whether the HTTP support is configured in
+
+      /if defined(DEFINED_ WITH_HTTP@)
+      /define LIBXML_HTTP_ENABLED
+      /endif
+
+      * LIBXML_VALID_ENABLED:
+      *
+      * Whether the DTD validation support is configured in
+
+      /if defined(DEFINED_ WITH_VALID@)
+      /define LIBXML_VALID_ENABLED
+      /endif
+
+      * LIBXML_HTML_ENABLED:
+      *
+      * Whether the HTML support is configured in
+
+      /if defined(DEFINED_ WITH_HTML@)
+      /define LIBXML_HTML_ENABLED
+      /endif
+
+      * LIBXML_LEGACY_ENABLED:
+      *
+      * Whether the deprecated APIs are compiled in for compatibility
+
+      /if defined(DEFINED_ WITH_LEGACY@)
+      /define LIBXML_LEGACY_ENABLED
+      /endif
+
+      * LIBXML_C14N_ENABLED:
+      *
+      * Whether the Canonicalization support is configured in
+
+      /if defined(DEFINED_ WITH_C14N@)
+      /define LIBXML_C14N_ENABLED
+      /endif
+
+      * LIBXML_CATALOG_ENABLED:
+      *
+      * Whether the Catalog support is configured in
+
+      /if defined(DEFINED_ WITH_CATALOG@)
+      /define LIBXML_CATALOG_ENABLED
+      /endif
+
+      * LIBXML_DOCB_ENABLED:
+      *
+      * Whether the SGML Docbook support is configured in
+
+      /if defined(DEFINED_ WITH_DOCB@)
+      /define LIBXML_DOCB_ENABLED
+      /endif
+
+      * LIBXML_XPATH_ENABLED:
+      *
+      * Whether XPath is configured in
+
+      /if defined(DEFINED_ WITH_XPATH@)
+      /define LIBXML_XPATH_ENABLED
+      /endif
+
+      * LIBXML_XPTR_ENABLED:
+      *
+      * Whether XPointer is configured in
+
+      /if defined(DEFINED_ WITH_XPTR@)
+      /define LIBXML_XPTR_ENABLED
+      /endif
+
+      * LIBXML_XINCLUDE_ENABLED:
+      *
+      * Whether XInclude is configured in
+
+      /if defined(DEFINED_ WITH_XINCLUDE@)
+      /define LIBXML_XINCLUDE_ENABLED
+      /endif
+
+      * LIBXML_ICONV_ENABLED:
+      *
+      * Whether iconv support is available
+
+      /if defined(DEFINED_ WITH_ICONV@)
+      /define LIBXML_ICONV_ENABLED
+      /endif
+
+      * LIBXML_ICU_ENABLED:
+      *
+      * Whether icu support is available
+
+      /if defined(DEFINED_ WITH_ICU@)
+      /define LIBXML_ICU_ENABLED
+      /endif
+
+      * LIBXML_ISO8859X_ENABLED:
+      *
+      * Whether ISO-8859-* support is made available in case iconv is not
+
+      /if defined(DEFINED_ WITH_ISO8859X@)
+      /define LIBXML_ISO8859X_ENABLED
+      /endif
+
+      * LIBXML_DEBUG_ENABLED:
+      *
+      * Whether Debugging module is configured in
+
+      /if defined(DEFINED_ WITH_DEBUG@)
+      /define LIBXML_DEBUG_ENABLED
+      /endif
+
+      * DEBUG_MEMORY_LOCATION:
+      *
+      * Whether the memory debugging is configured in
+
+      /if defined(DEFINED_ WITH_MEM_DEBUG@)
+      /define DEBUG_MEMORY_LOCATION
+      /endif
+
+      * LIBXML_DEBUG_RUNTIME:
+      *
+      * Whether the runtime debugging is configured in
+
+      /if defined(DEFINED_ WITH_RUN_DEBUG@)
+      /define LIBXML_DEBUG_RUNTIME
+      /endif
+
+      * LIBXML_UNICODE_ENABLED:
+      *
+      * Whether the Unicode related interfaces are compiled in
+
+      /if defined(DEFINED_ WITH_REGEXPS@)
+      /define LIBXML_UNICODE_ENABLED
+      /endif
+
+      * LIBXML_REGEXP_ENABLED:
+      *
+      * Whether the regular expressions interfaces are compiled in
+
+      /if defined(DEFINED_ WITH_REGEXPS@)
+      /define LIBXML_REGEXP_ENABLED
+      /endif
+
+      * LIBXML_AUTOMATA_ENABLED:
+      *
+      * Whether the automata interfaces are compiled in
+
+      /if defined(DEFINED_ WITH_REGEXPS@)
+      /define LIBXML_AUTOMATA_ENABLED
+      /endif
+
+      * LIBXML_EXPR_ENABLED:
+      *
+      * Whether the formal expressions interfaces are compiled in
+
+      /if defined(DEFINED_ WITH_SCHEMAS@)
+      /define LIBXML_EXPR_ENABLED
+      /endif
+
+      * LIBXML_SCHEMAS_ENABLED:
+      *
+      * Whether the Schemas validation interfaces are compiled in
+
+      /if defined(DEFINED_ WITH_SCHEMAS@)
+      /define LIBXML_SCHEMAS_ENABLED
+      /endif
+
+      * LIBXML_SCHEMATRON_ENABLED:
+      *
+      * Whether the Schematron validation interfaces are compiled in
+
+      /if defined(DEFINED_ WITH_SCHEMATRON@)
+      /define LIBXML_SCHEMATRON_ENABLED
+      /endif
+
+      * LIBXML_MODULES_ENABLED:
+      *
+      * Whether the module interfaces are compiled in
+
+      /if defined(DEFINED_ WITH_MODULES@)
+      /define LIBXML_MODULES_ENABLED
+
+      * LIBXML_MODULE_EXTENSION:
+      *
+      * the string suffix used by dynamic modules (usually shared libraries)
+
+     d LIBXML_MODULE_EXTENSION...
+     d                 c                   '.SRVPGM'
+      /endif
+
+      * LIBXML_ZLIB_ENABLED:
+      *
+      * Whether the Zlib support is compiled in
+
+      /if defined(DEFINED_ WITH_ZLIB@)
+      /define LIBXML_ZLIB_ENABLED
+      /endif
+
+      * LIBXML_LZMA_ENABLED:
+      *
+      * Whether the Lzma support is compiled in
+
+      /if defined(DEFINED_ WITH_LZMA@)
+      /define LIBXML_LZMA_ENABLED
+      /endif
+      /endif
diff --git a/os400/libxmlrpg/xmlwriter.rpgle b/os400/libxmlrpg/xmlwriter.rpgle
new file mode 100644
index 0000000..f2d3d30
--- /dev/null
+++ b/os400/libxmlrpg/xmlwriter.rpgle
@@ -0,0 +1,725 @@
+      * Summary: text writing API for XML
+      * Description: text writing API for XML
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XMLWRITER_H__)
+      /define XML_XMLWRITER_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_WRITER_ENABLED)
+
+      /include "libxmlrpg/xmlstdarg"
+      /include "libxmlrpg/xmlIO"
+      /include "libxmlrpg/list"
+      /include "libxmlrpg/xmlstring"
+
+     d xmlTextWriterPtr...
+     d                 s               *   based(######typedef######)
+
+      * Constructors & Destructor
+
+     d xmlNewTextWriter...
+     d                 pr                  extproc('xmlNewTextWriter')
+     d                                     like(xmlTextWriterPtr)
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlNewTextWriterFilename...
+     d                 pr                  extproc('xmlNewTextWriterFilename')
+     d                                     like(xmlTextWriterPtr)
+     d  uri                            *   value options(*string)               const char *
+     d  compression                  10i 0 value
+
+     d xmlNewTextWriterMemory...
+     d                 pr                  extproc('xmlNewTextWriterMemory')
+     d                                     like(xmlTextWriterPtr)
+     d  buf                                value like(xmlBufferPtr)
+     d  compression                  10i 0 value
+
+     d xmlNewTextWriterPushParser...
+     d                 pr                  extproc('xmlNewTextWriterPushParser')
+     d                                     like(xmlTextWriterPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  compression                  10i 0 value
+
+     d xmlNewTextWriterDoc...
+     d                 pr                  extproc('xmlNewTextWriterDoc')
+     d                                     like(xmlTextWriterPtr)
+     d  doc                                like(xmlDocPtr)
+     d  compression                  10i 0 value
+
+     d xmlNewTextWriterTree...
+     d                 pr                  extproc('xmlNewTextWriterTree')
+     d                                     like(xmlTextWriterPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  compression                  10i 0 value
+
+     d xmlFreeTextWriter...
+     d                 pr                  extproc('xmlFreeTextWriter')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * Functions
+
+      * Document
+
+     d xmlTextWriterStartDocument...
+     d                 pr            10i 0 extproc('xmlTextWriterStartDocument')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  version                        *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  standalone                     *   value options(*string)               const char *
+
+     d xmlTextWriterEndDocument...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDocument')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * Comments
+
+     d xmlTextWriterStartComment...
+     d                 pr            10i 0 extproc('xmlTextWriterStartComment')
+     d  writer                             value like(xmlTextWriterPtr)
+
+     d xmlTextWriterEndComment...
+     d                 pr            10i 0 extproc('xmlTextWriterEndComment')
+     d  writer                             value like(xmlTextWriterPtr)
+
+     d xmlTextWriterWriteFormatComment...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatComment')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string: *nopass)      const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatComment...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatComment')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteComment...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteComment')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * Elements
+
+     d xmlTextWriterStartElement...
+     d                 pr            10i 0 extproc('xmlTextWriterStartElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterStartElementNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartElementNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndElement...
+     d                 pr            10i 0 extproc('xmlTextWriterEndElement')
+     d  writer                             value like(xmlTextWriterPtr)
+
+     d xmlTextWriterFullEndElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterFullEndElement')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * Elements conveniency functions
+
+     d xmlTextWriterWriteFormatElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteElement...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteFormatElementNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatElementNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatElementNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatElementNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteElementNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteElementNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * Text
+
+     d xmlTextWriterWriteFormatRaw...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatRaw')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatRaw...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatRaw')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteRawLen...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteRawLen')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlTextWriterWriteRaw...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteRaw')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteFormatString...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatString')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatString...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatString')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteString...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteString')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteBase64...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteBase64')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  data                           *   value options(*string)               const char *
+     d  start                        10i 0 value
+     d  len                          10i 0 value
+
+     d xmlTextWriterWriteBinHex...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteBinHex')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  data                           *   value options(*string)               const char *
+     d  start                        10i 0 value
+     d  len                          10i 0 value
+
+      * Attributes
+
+     d xmlTextWriterStartAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterStartAttributeNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartAttributeNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndAttribute...
+     d                 pr            10i 0 extproc('xmlTextWriterEndAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * Attributes conveniency functions
+
+     d xmlTextWriterWriteFormatAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteFormatAttributeNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatAttributeNS'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatAttributeNS...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteVFormatAt-
+     d                                     tributeNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteAttributeNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteAttributeNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * PI's
+
+     d xmlTextWriterStartPI...
+     d                 pr            10i 0 extproc('xmlTextWriterStartPI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndPI...
+     d                 pr            10i 0 extproc('xmlTextWriterEndPI')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * PI conveniency functions
+
+     d xmlTextWriterWriteFormatPI...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteFormatPI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatPI...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatPI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWritePI...
+     d                 pr            10i 0 extproc('xmlTextWriterWritePI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * xmlTextWriterWriteProcessingInstruction:
+      *
+      * This macro maps to xmlTextWriterWritePI
+
+     d xmlTextWriterWriteProcessingInstruction...
+     d                 pr            10i 0 extproc('xmlTextWriterWritePI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * CDATA
+
+     d xmlTextWriterStartCDATA...
+     d                 pr            10i 0 extproc('xmlTextWriterStartCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+
+     d xmlTextWriterEndCDATA...
+     d                 pr            10i 0 extproc('xmlTextWriterEndCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * CDATA conveniency functions
+
+     d xmlTextWriterWriteFormatCDATA...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatCDATA...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteCDATA...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * DTD
+
+     d xmlTextWriterStartDTD...
+     d                 pr            10i 0 extproc('xmlTextWriterStartDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndDTD...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * DTD conveniency functions
+
+     d xmlTextWriterWriteFormatDTD...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatDTD...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteDTD...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  subset                         *   value options(*string)               const xmlChar *
+
+      * xmlTextWriterWriteDocType:
+      *
+      * this macro maps to xmlTextWriterWriteDTD
+
+     d xmlTextWriterWriteDocType...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  subset                         *   value options(*string)               const xmlChar *
+
+      * DTD element definition
+
+     d xmlTextWriterStartDTDElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartDTDElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndDTDElement...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDTDElement')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * DTD element definition conveniency functions
+
+     d xmlTextWriterWriteFormatDTDElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatDTDElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatDTDElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatDTDElement'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteDTDElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * DTD attribute list definition
+
+     d xmlTextWriterStartDTDAttlist...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartDTDAttlist')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndDTDAttlist...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDTDAttlist')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * DTD attribute list definition conveniency functions
+
+     d xmlTextWriterWriteFormatDTDAttlist...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatDTDAttlist')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatDTDAttlist...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatDTDAttlist'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteDTDAttlist...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDAttlist')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * DTD entity definition
+
+     d xmlTextWriterStartDTDEntity...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartDTDEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndDTDEntity...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDTDEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * DTD entity definition conveniency functions
+
+     d xmlTextWriterWriteFormatDTDInternalEntity...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteFormatDTD-
+     d                                     InternalEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatDTDInternalEntity...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteVFormatDT-
+     d                                     DInternalEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteDTDInternalEntity...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDInternalEntity'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteDTDExternalEntity...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDExternalEntity'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  ndataid                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteDTDExternalEntityContents...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteDTDExtern-
+     d                                     alEntityContents')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  ndataid                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteDTDEntity...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  ndataid                        *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * DTD notation definition
+
+     d xmlTextWriterWriteDTDNotation...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDNotation')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+
+      * Indentation
+
+     d xmlTextWriterSetIndent...
+     d                 pr            10i 0 extproc('xmlTextWriterSetIndent')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  indent                       10i 0 value
+
+     d xmlTextWriterSetIndentString...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterSetIndentString')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterSetQuoteChar...
+     d                 pr            10i 0 extproc('xmlTextWriterSetQuoteChar')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  quotechar                          value like(xmlChar)
+
+      * misc
+
+     d xmlTextWriterFlush...
+     d                 pr            10i 0 extproc('xmlTextWriterFlush')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      /endif                                                                    LIBXML_WRITER_ENABLD
+      /endif                                                                    XML_XMLWRITER_H__
diff --git a/os400/libxmlrpg/xpath.rpgle b/os400/libxmlrpg/xpath.rpgle
new file mode 100644
index 0000000..209e6c9
--- /dev/null
+++ b/os400/libxmlrpg/xpath.rpgle
@@ -0,0 +1,631 @@
+      * Summary: XML Path Language implementation
+      * Description: API for the XML Path Language implementation
+      *
+      * XML Path Language implementation
+      * XPath is a language for addressing parts of an XML document,
+      * designed to be used by both XSLT and XPointer
+      *     http://www.w3.org/TR/xpath
+      *
+      * Implements
+      * W3C Recommendation 16 November 1999
+      *     http://www.w3.org/TR/1999/REC-xpath-19991116
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XPATH_H__)
+      /define XML_XPATH_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_XPATH_ENABLED)
+
+      /include "libxmlrpg/xmlerror"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/hash"
+      /endif                                                                    LIBXML_XPATH_ENABLED
+
+      /if defined(LIBXML_XPATH_ENABLED)
+
+     d xmlXPathContextPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathParserContextPtr...
+     d                 s               *   based(######typedef######)
+
+      * The set of XPath error codes.
+
+     d xmlXPathError   s             10i 0 based(######typedef######)           enum
+     d  XPATH_EXPRESSION_OK...
+     d                 c                   0
+     d  XPATH_NUMBER_ERROR...
+     d                 c                   1
+     d  XPATH_UNFINISHED_LITERAL_ERROR...
+     d                 c                   2
+     d  XPATH_START_LITERAL_ERROR...
+     d                 c                   3
+     d  XPATH_VARIABLE_REF_ERROR...
+     d                 c                   4
+     d  XPATH_UNDEF_VARIABLE_ERROR...
+     d                 c                   5
+     d  XPATH_INVALID_PREDICATE_ERROR...
+     d                 c                   6
+     d  XPATH_EXPR_ERROR...
+     d                 c                   7
+     d  XPATH_UNCLOSED_ERROR...
+     d                 c                   8
+     d  XPATH_UNKNOWN_FUNC_ERROR...
+     d                 c                   9
+     d  XPATH_INVALID_OPERAND...
+     d                 c                   10
+     d  XPATH_INVALID_TYPE...
+     d                 c                   11
+     d  XPATH_INVALID_ARITY...
+     d                 c                   12
+     d  XPATH_INVALID_CTXT_SIZE...
+     d                 c                   13
+     d  XPATH_INVALID_CTXT_POSITION...
+     d                 c                   14
+     d  XPATH_MEMORY_ERROR...
+     d                 c                   15
+     d  XPTR_SYNTAX_ERROR...
+     d                 c                   16
+     d  XPTR_RESOURCE_ERROR...
+     d                 c                   17
+     d  XPTR_SUB_RESOURCE_ERROR...
+     d                 c                   18
+     d  XPATH_UNDEF_PREFIX_ERROR...
+     d                 c                   19
+     d  XPATH_ENCODING_ERROR...
+     d                 c                   20
+     d  XPATH_INVALID_CHAR_ERROR...
+     d                 c                   21
+     d  XPATH_INVALID_CTXT...
+     d                 c                   22
+     d  XPATH_STACK_ERROR...
+     d                 c                   23
+     d  XPATH_FORBID_VARIABLE_ERROR...
+     d                 c                   24
+
+      * A node-set (an unordered collection of nodes without duplicates).
+
+     d xmlNodeSetPtr   s               *   based(######typedef######)
+
+     d xmlNodeSet      ds                  based(xmlNodeSetPtr)
+     d                                     align qualified
+     d  nodeNr                       10i 0                                      Set node count
+     d  nodeMax                      10i 0                                      Max # nodes in set
+     d  nodeTab                        *                                        xmlNodePtr *
+
+      * An expression is evaluated to yield an object, which
+      * has one of the following four basic types:
+      *   - node-set
+      *   - boolean
+      *   - number
+      *   - string
+      *
+      * @@ XPointer will add more types !
+
+     d xmlXPathObjectType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XPATH_UNDEFINED...
+     d                 c                   0
+     d  XPATH_NODESET  c                   1
+     d  XPATH_BOOLEAN  c                   2
+     d  XPATH_NUMBER   c                   3
+     d  XPATH_STRING   c                   4
+     d  XPATH_POINT    c                   5
+     d  XPATH_RANGE    c                   6
+     d  XPATH_LOCATIONSET...
+     d                 c                   7
+     d  XPATH_USERS    c                   8
+     d  XPATH_XSLT_TREE...                                                      R/O XSLT value tree
+     d                 c                   9
+
+     d xmlXPathObjectPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathObject  ds                  based(xmlXPathObjectPtr)
+     d                                     align qualified
+     d  type                               like(xmlXPathObjectType)
+     d  nodesetval                         like(xmlNodeSetPtr)
+     d  boolval                      10i 0
+     d  floatval                      8f
+     d  stringval                      *                                        xmlChar *
+     d  user                           *                                        void *
+     d  index                        10i 0
+     d  user2                          *                                        void *
+     d  index2                       10i 0
+
+      * xmlXPathConvertFunc:
+      * @obj:  an XPath object
+      * @type:  the number of the target type
+      *
+      * A conversion function is associated to a type and used to cast
+      * the new type to primitive values.
+      *
+      * Returns -1 in case of error, 0 otherwise
+
+     d xmlXPathConvertFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Extra type: a name and a conversion function.
+
+     d xmlXPathTypePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathType    ds                  based(xmlXPathTypePtr)
+     d                                     align qualified
+     d  name                           *                                        The type name
+     d  func                               like(xmlXPathConvertFunc)            Conversion function
+
+      * Extra variable: a name and a value.
+
+     d xmlXPathVariablePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathVariable...
+     d                 ds                  based(xmlXPathVariablePtr)
+     d                                     align qualified
+     d  name                           *                                        The variable name
+     d  value                              like(xmlXPathObjectPtr)              The value
+
+      * xmlXPathEvalFunc:
+      * @ctxt: an XPath parser context
+      * @nargs: the number of arguments passed to the function
+      *
+      * An XPath evaluation function, the parameters are on the XPath
+      *   context stack.
+
+     d xmlXPathEvalFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Extra function: a name and an evaluation function.
+
+     d xmlXPathFuncPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathFunct   ds                  based(xmlXPathFuncPtr)
+     d                                     align qualified
+     d  name                           *                                        The function name
+     d  func                               like(xmlXPathEvalFunc)               Evaluation function
+
+      * xmlXPathAxisFunc:
+      * @ctxt:  the XPath interpreter context
+      * @cur:  the previous node being explored on that axis
+      *
+      * An axis traversal function. To traverse an axis, the engine calls
+      * the first time with cur == NULL and repeat until the function returns
+      * NULL indicating the end of the axis traversal.
+      *
+      * Returns the next node in that axis or NULL if at the end of the axis.
+
+     d xmlXPathAxisFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Extra axis: a name and an axis function.
+
+     d xmlXPathAxisPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathAxis    ds                  based(xmlXPathAxisPtr)
+     d                                     align qualified
+     d  name                           *                                        The axis name
+     d  func                               like(xmlXPathAxisFunc)               The search function
+
+      * xmlXPathFunction:
+      * @ctxt:  the XPath interprestation context
+      * @nargs:  the number of arguments
+      *
+      * An XPath function.
+      * The arguments (if any) are popped out from the context stack
+      * and the result is pushed on the stack.
+
+     d xmlXPathFunction...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Function and Variable Lookup.
+
+      * xmlXPathVariableLookupFunc:
+      * @ctxt:  an XPath context
+      * @name:  name of the variable
+      * @ns_uri:  the namespace name hosting this variable
+      *
+      * Prototype for callbacks used to plug variable lookup in the XPath
+      * engine.
+      *
+      * Returns the XPath object value or NULL if not found.
+
+     d xmlXPathVariableLookupFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlXPathFuncLookupFunc:
+      * @ctxt:  an XPath context
+      * @name:  name of the function
+      * @ns_uri:  the namespace name hosting this function
+      *
+      * Prototype for callbacks used to plug function lookup in the XPath
+      * engine.
+      *
+      * Returns the XPath function or NULL if not found.
+
+     d xmlXPathFuncLookupFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlXPathFlags:
+      * Flags for XPath engine compilation and runtime
+
+      * XML_XPATH_CHECKNS:
+      *
+      * check namespaces at compilation
+
+     d  XML_XPATH_CHECKNS...
+     d                 c                   X'0001'
+
+      * XML_XPATH_NOVAR:
+      *
+      * forbid variables in expression
+
+     d  XML_XPATH_NOVAR...
+     d                 c                   X'0002'
+
+      * xmlXPathContext:
+      *
+      * Expression evaluation occurs with respect to a context.
+      * he context consists of:
+      *    - a node (the context node)
+      *    - a node list (the context node list)
+      *    - a set of variable bindings
+      *    - a function library
+      *    - the set of namespace declarations in scope for the expression
+      * Following the switch to hash tables, this need to be trimmed up at
+      * the next binary incompatible release.
+      * The node may be modified when the context is passed to libxml2
+      * for an XPath evaluation so you may need to initialize it again
+      * before the next call.
+
+     d xmlXPathContext...
+     d                 ds                  based(xmlXPathContextPtr)
+     d                                     align qualified
+     d  doc                                like(xmlDocPtr)                      Current document
+     d  node                               like(xmlNodePtr)                     Current node
+      *
+     d  nb_variables_unused...                                                  Unused (hash table)
+     d                               10i 0
+     d  max_variables_unused...                                                  Unused (hash table)
+     d                               10i 0
+     d  varHash                            like(xmlHashTablePtr)                 Defined variables
+      *
+     d  nb_types                     10i 0                                       # of defined types
+     d  max_types                    10i 0                                       Max number of types
+     d  types                              like(xmlXPathTypePtr)                 Defined types array
+      *
+     d  nb_funcs_unused...                                                      Unused (hash table)
+     d                               10i 0
+     d  max_funcs_unused...                                                      Unused (hash table)
+     d                               10i 0
+     d  funcHash                           like(xmlHashTablePtr)                 Defined functions
+      *
+     d  nb_axis                      10i 0                                       # of defined axis
+     d  max_axis                     10i 0                                       Max number of axis
+     d  axis                               like(xmlXPathAxisPtr)                 Defined axis array
+      *
+      * the namespace nodes of the context node
+      *
+     d  namespaces                     *                                         xmlNsPtr *
+     d  nsNr                         10i 0                                       # scope namespaces
+     d  user                           *   procptr                               Function to free
+      *
+      * extra variables
+      *
+     d  contextSize                  10i 0                                       The context size
+     d  proximityPosition...
+     d                               10i 0
+      *
+      * extra stuff for XPointer
+      *
+     d  xptr                         10i 0                                       XPointer context ?
+     d  here                               like(xmlNodePtr)                      For here()
+     d  origin                             like(xmlNodePtr)                      For origin()
+      *
+      * the set of namespace declarations in scope for the expression
+      *
+     d  nsHash                             like(xmlHashTablePtr)                 Namespace hashtable
+     d  varLookupFunc                      like(xmlXPathVariableLookupFunc)      Var lookup function
+     d  varLookupData                  *                                         void *
+      *
+      * Possibility to link in an extra item
+      *
+     d  extra                          *                                         void *
+      *
+      * The function name and URI when calling a function
+      *
+     d  function                       *                                         const xmlChar *
+     d  functionURI                    *                                         const xmlChar *
+      *
+      * function lookup function and data
+      *
+     d  funcLookupFunc...                                                        Func lookup func
+     d                                     like(xmlXPathVariableLookupFunc)
+     d  funcLookupData...                                                        void *
+     d                                 *
+      *
+      * temporary namespace lists kept for walking the namespace axis
+      *
+     d  tmpNsList                      *                                        xmlNsPtr *
+     d  tmpNsNr                      10i 0                                      # scope namespaces
+      *
+      * error reporting mechanism
+      *
+     d  userData                       *                                        void *
+     d  error                              like(xmlStructuredErrorFunc)         Error callback
+     d  lastError                          like(xmlError)                       The last error
+     d  debugNode                          like(xmlNodePtr)                     XSLT source node
+      *
+      * dictionary
+      *
+     d  dict                               like(xmlDictPtr)                     Dictionary if any
+      *
+     d  flags                        10i 0                                      Compilation control
+      *
+      * Cache for reusal of XPath objects
+      *
+     d  cache                          *                                        void *
+
+      * The structure of a compiled expression form is not public.
+
+     d xmlXPathCompExprPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlXPathParserContext:
+      *
+      * An XPath parser context. It contains pure parsing informations,
+      * an xmlXPathContext, and the stack of objects.
+
+     d xmlXPathParserContext...
+     d                 ds                  based(xmlXPathParserContextPtr)
+     d                                     align qualified
+     d  cur                            *                                        const xmlChar *
+     d  base                           *                                        const xmlChar *
+      *
+     d  error                        10i 0                                      Error code
+      *
+     d  context                            like(xmlXPathContextPtr)             Evaluation context
+     d  value                              like(xmlXPathObjectPtr)              The current value
+     d  valueNr                      10i 0                                      Value stack depth
+     d  valueMax                     10i 0                                      Max stack depth
+     d  valueTab                       *                                        xmlXPathObjectPtr *
+      *
+     d  comp                               like(xmlXPathCompExprPtr)            Precompiled expr.
+     d  xptr                         10i 0                                      XPointer expression?
+     d  ancestor                           like(xmlNodePtr)                     To walk prec. axis
+      *
+     d  valueFrame                   10i 0                                      Limit stack pop
+
+      **************************************************************************
+      *                                                                        *
+      *                             Public API                                 *
+      *                                                                        *
+      **************************************************************************
+
+      * Objects and Nodesets handling
+
+     d xmlXPathNAN     s              8f   import('xmlXPathNAN')
+     d xmlXPathPINF    s              8f   import('xmlXPathPINF')
+     d xmlXPathNINF    s              8f   import('xmlXPathNINF')
+
+     d xmlXPathFreeObject...
+     d                 pr                  extproc('xmlXPathFreeObject')
+     d obj                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathNodeSetCreate...
+     d                 pr                  extproc('xmlXPathNodeSetCreate')
+     d                                     like(xmlNodeSetPtr)
+     d val                                 value like(xmlNodePtr)
+
+     d xmlXPathFreeNodeSetList...
+     d                 pr                  extproc('xmlXPathFreeNodeSetList')
+     d obj                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathFreeNodeSet...
+     d                 pr                  extproc('xmlXPathFreeNodeSet')
+     d obj                                 value like(xmlNodeSetPtr)
+
+     d xmlXPathObjectCopy...
+     d                 pr                  extproc('xmlXPathObjectCopy')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathCmpNodes...
+     d                 pr            10i 0 extproc('xmlXPathCmpNodes')
+     d node1                               value like(xmlNodePtr)
+     d node2                               value like(xmlNodePtr)
+
+      * Conversion functions to basic types.
+
+     d xmlXPathCastNumberToBoolean...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlXPathCastNumberToBoolean')
+     d val                            8f   value
+
+     d xmlXPathCastStringToBoolean...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlXPathCastStringToBoolean')
+     d val                             *   value options(*string)               const xmlChar *
+
+     d xmlXPathCastNodeSetToBoolean...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXPathCastNodeSetToBoolean')
+     d ns                                  value like(xmlNodeSetPtr)
+
+     d xmlXPathCastToBoolean...
+     d                 pr            10i 0 extproc('xmlXPathCastToBoolean')
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathCastBooleanToNumber...
+     d                 pr                  extproc(
+     d                                      'xmlXPathCastBooleanToNumber')
+     d                                8f
+     d val                           10i 0 value
+
+     d xmlXPathCastStringToNumber...
+     d                 pr             8f   extproc('xmlXPathCastStringToNumber')
+     d val                             *   value options(*string)               const xmlChar *
+
+     d xmlXPathCastNodeToNumber...
+     d                 pr             8f   extproc('xmlXPathCastNodeToNumber')
+     d node                                value like(xmlNodePtr)
+
+     d xmlXPathCastNodeSetToNumber...
+     d                 pr             8f   extproc(
+     d                                      'xmlXPathCastNodeSetToNumber')
+     d ns                                  value like(xmlNodeSetPtr)
+
+     d xmlXPathCastToNumber...
+     d                 pr             8f   extproc('xmlXPathCastToNumber')
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathCastBooleanToString...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                      'xmlXPathCastBooleanToString')
+     d val                           10i 0 value
+
+     d xmlXPathCastNumberToString...
+     d                 pr              *   extproc('xmlXPathCastNumberToString')xmlChar *
+     d val                            8f   value
+
+     d xmlXPathCastNodeToString...
+     d                 pr              *   extproc('xmlXPathCastNodeToString')  xmlChar *
+     d node                                value like(xmlNodePtr)
+
+     d xmlXPathCastNodeSetToString...
+     d                 pr              *   extproc('xmlXPathCastNodeSetToString'xmlChar *
+     d                                     )
+     d ns                                  value like(xmlNodeSetPtr)
+
+     d xmlXPathCastToString...
+     d                 pr              *   extproc('xmlXPathCastToString')      xmlChar *
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathConvertBoolean...
+     d                 pr                  extproc('xmlXPathConvertBoolean')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathConvertNumber...
+     d                 pr                  extproc('xmlXPathConvertNumber')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathConvertString...
+     d                 pr                  extproc('xmlXPathConvertString')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+      * Context handling.
+
+     d xmlXPathNewContext...
+     d                 pr                  extproc('xmlXPathNewContext')
+     d                                     like(xmlXPathContextPtr)
+     d doc                                 value like(xmlDocPtr)
+
+     d xmlXPathFreeContext...
+     d                 pr                  extproc('xmlXPathFreeContext')
+     d ctxt                                value like(xmlXPathContextPtr)
+
+     d xmlXPathContextSetCache...
+     d                 pr            10i 0 extproc('xmlXPathContextSetCache')
+     d ctxt                                value like(xmlXPathContextPtr)
+     d active                        10i 0 value
+     d value                         10i 0 value
+     d options                       10i 0 value
+
+      * Evaluation functions.
+
+     d xmlXPathOrderDocElems...
+     d                 pr            20i 0 extproc('xmlXPathOrderDocElems')
+     d doc                                 value like(xmlDocPtr)
+
+     d xmlXPathSetContextNode...
+     d                 pr            10i 0 extproc('xmlXPathSetContextNode')
+     d node                                value like(xmlNodePtr)
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPathNodeEval...
+     d                 pr                  extproc('xmlXPathNodeEval')
+     d                                     like(xmlXPathObjectPtr)
+     d node                                value like(xmlNodePtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPathEval    pr                  extproc('xmlXPathEval')
+     d                                     like(xmlXPathObjectPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPathEvalExpression...
+     d                 pr                  extproc('xmlXPathEvalExpression')
+     d                                     like(xmlXPathObjectPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d ctxt                                value like(xmlXPathContextPtr)
+
+     d xmlXPathEvalPredicate...
+     d                 pr            10i 0 extproc('xmlXPathEvalPredicate')
+     d ctxt                                value like(xmlXPathContextPtr)
+     d res                                 value like(xmlXPathObjectPtr)
+
+      * Separate compilation/evaluation entry points.
+
+     d xmlXPathCompile...
+     d                 pr                  extproc('xmlXPathCompile')
+     d                                     like(xmlXPathCompExprPtr)
+     d str                             *   value options(*string)               const xmlChar *
+
+     d xmlXPathCtxtCompile...
+     d                 pr                  extproc('xmlXPathCtxtCompile')
+     d                                     like(xmlXPathCompExprPtr)
+     d ctxt                                value like(xmlXPathContextPtr)
+     d str                             *   value options(*string)               const xmlChar *
+
+     d xmlXPathCompiledEval...
+     d                 pr                  extproc('xmlXPathCompiledEval')
+     d                                     like(xmlXPathObjectPtr)
+     d comp                                value like(xmlXPathCompExprPtr)
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPathCompiledEvalToBoolean...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXPathCompiledEvalToBoolean')
+     d comp                                value like(xmlXPathCompExprPtr)
+     d ctxt                                value like(xmlXPathContextPtr)
+
+     d xmlXPathFreeCompExpr...
+     d                 pr                  extproc('xmlXPathFreeCompExpr')
+     d comp                                value like(xmlXPathCompExprPtr)
+      /endif                                                                    LIBXML_XPATH_ENABLED
+
+      /undefine XML_TESTVAL
+      /if defined(LIBXML_XPATH_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlXPathInit    pr                  extproc('xmlXPathInit')
+
+     d xmlXPathIsNaN   pr            10i 0 extproc('xmlXPathIsNaN')
+     d val                            8f   value
+
+     d xmlXPathIsInf   pr            10i 0 extproc('xmlXPathIsInf')
+     d val                            8f   value
+
+      /undefine XML_TESTVAL
+      /endif
+      /endif                                                                    XML_XPATH_H__
diff --git a/os400/libxmlrpg/xpathInternals.rpgle b/os400/libxmlrpg/xpathInternals.rpgle
new file mode 100644
index 0000000..69f3ae0
--- /dev/null
+++ b/os400/libxmlrpg/xpathInternals.rpgle
@@ -0,0 +1,672 @@
+      * Summary: internal interfaces for XML Path Language implementation
+      * Description: internal interfaces for XML Path Language implementation
+      *              used to build new modules on top of XPath like XPointer and
+      *              XSLT
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XPATH_INTERNALS_H__)
+      /define XML_XPATH_INTERNALS_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xpath"
+
+      /if defined(LIBXML_XPATH_ENABLED)
+
+      ************************************************************************
+      *                                                                      *
+      *                            Helpers                                   *
+      *                                                                      *
+      ************************************************************************
+
+      * Many of these macros may later turn into functions. They
+      * shouldn't be used in #ifdef's preprocessor instructions.
+
+     d xmlXPathPopBoolean...
+     d                 pr            10i 0 extproc('xmlXPathPopBoolean')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathPopNumber...
+     d                 pr             8f   extproc('xmlXPathPopNumber')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathPopString...
+     d                 pr              *   extproc('xmlXPathPopString')         xmlChar *
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathPopNodeSet...
+     d                 pr                  extproc('xmlXPathPopNodeSet')
+     d                                     like(xmlNodeSetPtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathPopExternal...
+     d                 pr              *   extproc('xmlXPathPopExternal')       void *
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+      * Variable Lookup forwarding.
+
+     d xmlXPathRegisterVariableLookup...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisterVariableLookup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  f                                  value
+     d                                     like(xmlXPathVariableLookupFunc)
+     d  data                           *   value                                void *
+
+      * Function Lookup forwarding.
+
+     d xmlXPathRegisterFuncLookup...
+     d                 pr                  extproc('xmlXPathRegisterFuncLookup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  f                                  value like(xmlXPathFuncLookupFunc)
+     d  funcCtxt                       *   value                                void *
+
+      * Error reporting.
+      * Note this procedure is renamed in RPG to avoid character case clash with
+      *   data type xmlXPathError.
+
+     d xmlXPathReportError...
+     d                 pr                  extproc('xmlXPatherror')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+     d  no                           10i 0 value
+
+     d xmlXPathErr     pr                  extproc('xmlXPathErr')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  error                        10i 0 value
+
+      /if defined(LIBXML_DEBUG_ENABLED)
+     d xmlXPathDebugDumpObject...
+     d                 pr                  extproc('xmlXPathDebugDumpObject')
+     d  output                         *   value                                FILE *
+     d  cur                                value like(xmlXPathObjectPtr)
+     d  depth                        10i 0 value
+
+     d xmlXPathDebugDumpCompExpr...
+     d                 pr                  extproc('xmlXPathDebugDumpCompExpr')
+     d  output                         *   value                                FILE *
+     d  comp                               value like(xmlXPathCompExprPtr)
+     d  depth                        10i 0 value
+      /endif
+
+      * NodeSet handling.
+
+     d xmlXPathNodeSetContains...
+     d                 pr            10i 0 extproc('xmlXPathNodeSetContains')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathDifference...
+     d                 pr                  extproc('xmlXPathDifference')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathIntersection...
+     d                 pr                  extproc('xmlXPathIntersection')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathDistinctSorted...
+     d                 pr                  extproc('xmlXPathDistinctSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+
+     d xmlXPathDistinct...
+     d                 pr                  extproc('xmlXPathDistinct')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+
+     d xmlXPathHasSameNodes...
+     d                 pr            10i 0 extproc('xmlXPathHasSameNodes')
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeLeadingSorted...
+     d                 pr                  extproc('xmlXPathNodeLeadingSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlXPathLeadingSorted...
+     d                 pr                  extproc('xmlXPathLeadingSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeLeading...
+     d                 pr                  extproc('xmlXPathNodeLeading')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlXPathLeading...
+     d                 pr                  extproc('xmlXPathLeading')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeTrailingSorted...
+     d                 pr                  extproc('xmlXPathNodeTrailingSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlXPathTrailingSorted...
+     d                 pr                  extproc('xmlXPathTrailingSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeTrailing...
+     d                 pr                  extproc('xmlXPathNodeTrailing')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlXPathTrailing...
+     d                 pr                  extproc('xmlXPathTrailing')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+      * Extending a context.
+
+     d xmlXPathRegisterNs...
+     d                 pr            10i 0 extproc('xmlXPathRegisterNs')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+
+     d xmlXPathNsLookup...
+     d                 pr              *   extproc('xmlXPathNsLookup')          const xmlChar *
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlXPathRegisteredNsCleanup...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisteredNsCleanup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+     d xmlXPathRegisterFunc...
+     d                 pr            10i 0 extproc('xmlXPathRegisterFunc')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlXPathFunction)
+
+     d xmlXPathRegisterFuncNS...
+     d                 pr            10i 0 extproc('xmlXPathRegisterFuncNS')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlXPathFunction)
+
+     d xmlXPathRegisterVariable...
+     d                 pr            10i 0 extproc('xmlXPathRegisterVariable')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                              value like(xmlXPathObjectPtr)
+
+     d xmlXPathRegisterVariableNS...
+     d                 pr            10i 0 extproc('xmlXPathRegisterVariableNS')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+     d  value                              value like(xmlXPathObjectPtr)
+
+     d xmlXPathFunctionLookup...
+     d                 pr                  extproc('xmlXPathFunctionLookup')
+     d                                     like(xmlXPathFunction)
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlXPathFunctionLookupNS...
+     d                 pr                  extproc('xmlXPathFunctionLookupNS')
+     d                                     like(xmlXPathFunction)
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+
+     d xmlXPathRegisteredFuncsCleanup...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisteredFuncsCleanup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+     d xmlXPathVariableLookup...
+     d                 pr                  extproc('xmlXPathVariableLookup')
+     d                                     like(xmlXPathObjectPtr)
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlXPathVariableLookupNS...
+     d                 pr                  extproc('xmlXPathVariableLookupNS')
+     d                                     like(xmlXPathObjectPtr)
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+
+     d xmlXPathRegisteredVariablesCleanup...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisteredVariablesCleanup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+      * Utilities to extend XPath.
+
+     d xmlXPathNewParserContext...
+     d                 pr                  extproc('xmlXPathNewParserContext')
+     d                                     like(xmlXPathParserContextPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+     d xmlXPathFreeParserContext...
+     d                 pr                  extproc('xmlXPathFreeParserContext')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+
+      * TODO: remap to xmlXPathValuePop and Push.
+
+     d valuePop        pr                  extproc('valuePop')
+     d                                     like(xmlXPathObjectPtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d valuePush       pr            10i 0 extproc('valuePush')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  value                              value like(xmlXPathObjectPtr)
+
+     d xmlXPathNewString...
+     d                 pr                  extproc('xmlXPathNewString')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value options(*string)               const xmlChar *
+
+     d xmlXPathNewCString...
+     d                 pr                  extproc('xmlXPathNewCString')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value options(*string)               const char *
+
+     d xmlXPathWrapString...
+     d                 pr                  extproc('xmlXPathWrapString')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value options(*string)               xmlChar *
+
+     d xmlXPathWrapCString...
+     d                 pr                  extproc('xmlXPathWrapCString')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value options(*string)               char *
+
+     d xmlXPathNewFloat...
+     d                 pr                  extproc('xmlXPathNewFloat')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                           8f   value
+
+     d xmlXPathNewBoolean...
+     d                 pr                  extproc('xmlXPathNewBoolean')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                          10i 0 value
+
+     d xmlXPathNewNodeSet...
+     d                 pr                  extproc('xmlXPathNewNodeSet')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNewValueTree...
+     d                 pr                  extproc('xmlXPathNewValueTree')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNodeSetAdd...
+     d                 pr            10i 0 extproc('xmlXPathNodeSetAdd')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNodeSetAddUnique...
+     d                 pr            10i 0 extproc('xmlXPathNodeSetAddUnique')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNodeSetAddNs...
+     d                 pr            10i 0 extproc('xmlXPathNodeSetAddNs')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+
+     d xmlXPathNodeSetSort...
+     d                 pr                  extproc('xmlXPathNodeSetSort')
+     d  set                                value like(xmlNodeSetPtr)
+
+     d xmlXPathRoot    pr                  extproc('xmlXPathRoot')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathEvalExpr...
+     d                 pr                  extproc('xmlXPathEvalExpr')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathParseName...
+     d                 pr              *   extproc('xmlXPathParseName')         xmlChar *
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathParseNCName...
+     d                 pr              *   extproc('xmlXPathParseNCName')       xmlChar *
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+      * Existing functions.
+
+     d xmlXPathStringEvalNumber...
+     d                 pr             8f   extproc('xmlXPathStringEvalNumber')
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlXPathEvaluatePredicateResult...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXPathEvaluatePredicateResult')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  res                                value like(xmlXPathObjectPtr)
+
+     d xmlXPathRegisterAllFunctions...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisterAllFunctions')
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+     d xmlXPathNodeSetMerge...
+     d                 pr                  extproc('xmlXPathNodeSetMerge')
+     d                                     like(xmlNodeSetPtr)
+     d  val1                               value like(xmlNodeSetPtr)
+     d  val2                               value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeSetDel...
+     d                 pr                  extproc('xmlXPathNodeSetDel')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNodeSetRemove...
+     d                 pr                  extproc('xmlXPathNodeSetRemove')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                          10i 0 value
+
+     d xmlXPathNewNodeSetList...
+     d                 pr                  extproc('xmlXPathNewNodeSetList')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                                value like(xmlNodeSetPtr)
+
+     d xmlXPathWrapNodeSet...
+     d                 pr                  extproc('xmlXPathWrapNodeSet')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                                value like(xmlNodeSetPtr)
+
+     d xmlXPathWrapExternal...
+     d                 pr                  extproc('xmlXPathWrapExternal')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value                                void *
+
+     d xmlXPathEqualValues...
+     d                 pr            10i 0 extproc('xmlXPathEqualValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathNotEqualValues...
+     d                 pr            10i 0 extproc('xmlXPathNotEqualValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathCompareValues...
+     d                 pr            10i 0 extproc('xmlXPathCompareValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  inf                          10i 0 value
+     d  strict                       10i 0 value
+
+     d xmlXPathValueFlipSign...
+     d                 pr                  extproc('xmlXPathValueFlipSign')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathAddValues...
+     d                 pr                  extproc('xmlXPathAddValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathSubValues...
+     d                 pr                  extproc('xmlXPathSubValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathMultValues...
+     d                 pr                  extproc('xmlXPathMultValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathDivValues...
+     d                 pr                  extproc('xmlXPathDivValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathModValues...
+     d                 pr                  extproc('xmlXPathModValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathIsNodeType...
+     d                 pr            10i 0 extproc('xmlXPathIsNodeType')
+     d  name                           *   value options(*string)               const xmlChar *
+
+      * Some of the axis navigation routines.
+
+     d xmlXPathNextSelf...
+     d                 pr                  extproc('xmlXPathNextSelf')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextChild...
+     d                 pr                  extproc('xmlXPathNextChild')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextDescendant...
+     d                 pr                  extproc('xmlXPathNextDescendant')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextDescendantOrSelf...
+     d                 pr                  extproc(
+     d                                     'xmlXPathNextDescendantOrSelf')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextParent...
+     d                 pr                  extproc('xmlXPathNextParent')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextAncestorOrSelf...
+     d                 pr                  extproc('xmlXPathNextAncestorOrSelf')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextFollowingSibling...
+     d                 pr                  extproc(
+     d                                     'xmlXPathNextFollowingSibling')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextFollowing...
+     d                 pr                  extproc('xmlXPathNextFollowing')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextNamespace...
+     d                 pr                  extproc('xmlXPathNextNamespace')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextAttribute...
+     d                 pr                  extproc('xmlXPathNextAttribute')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextPreceding...
+     d                 pr                  extproc('xmlXPathNextPreceding')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextAncestor...
+     d                 pr                  extproc('xmlXPathNextAncestor')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextPrecedingSibling...
+     d                 pr                  extproc(
+     d                                     'xmlXPathNextPrecedingSibling')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+      * The official core of XPath functions.
+
+     d xmlXPathLastFunction...
+     d                 pr                  extproc('xmlXPathLastFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathPositionFunction...
+     d                 pr                  extproc('xmlXPathPositionFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathCountFunction...
+     d                 pr                  extproc('xmlXPathCountFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathIdFunction...
+     d                 pr                  extproc('xmlXPathIdFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathLocalNameFunction...
+     d                 pr                  extproc('xmlXPathLocalNameFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathNamespaceURIFunction...
+     d                 pr                  extproc(
+     d                                     'xmlXPathNamespaceURIFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathStringFunction...
+     d                 pr                  extproc('xmlXPathStringFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathStringLengthFunction...
+     d                 pr                  extproc(
+     d                                     'xmlXPathStringLengthFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathConcatFunction...
+     d                 pr                  extproc('xmlXPathConcatFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathContainsFunction...
+     d                 pr                  extproc('xmlXPathContainsFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathStartsWithFunction...
+     d                 pr                  extproc('xmlXPathStartsWithFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathSubstringFunction...
+     d                 pr                  extproc('xmlXPathSubstringFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathSubstringBeforeFunction...
+     d                 pr                  extproc(
+     d                                     'xmlXPathSubstringBeforeFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathSubstringAfterFunction...
+     d                 pr                  extproc(
+     d                                     'xmlXPathSubstringAfterFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+
+     d xmlXPathNormalizeFunction...
+     d                 pr                  extproc('xmlXPathNormalizeFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathTranslateFunction...
+     d                 pr                  extproc('xmlXPathTranslateFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathNotFunction...
+     d                 pr                  extproc('xmlXPathNotFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathTrueFunction...
+     d                 pr                  extproc('xmlXPathTrueFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathFalseFunction...
+     d                 pr                  extproc('xmlXPathFalseFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathLangFunction...
+     d                 pr                  extproc('xmlXPathLangFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathNumberFunction...
+     d                 pr                  extproc('xmlXPathNumberFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathSumFunction...
+     d                 pr                  extproc('xmlXPathSumFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathFloorFunction...
+     d                 pr                  extproc('xmlXPathFloorFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathCeilingFunction...
+     d                 pr                  extproc('xmlXPathCeilingFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathRoundFunction...
+     d                 pr                  extproc('xmlXPathRoundFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathBooleanFunction...
+     d                 pr                  extproc('xmlXPathBooleanFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+      * Really internal functions
+
+     d xmlXPathNodeSetFreeNs...
+     d                 pr                  extproc('xmlXPathNodeSetFreeNs')
+     d  ns                                 value like(xmlNsPtr)
+
+      /endif                                                                    LIBXML_XPATH_ENABLED
+      /endif                                                                    XPATH_INTERNALS_H__
diff --git a/os400/libxmlrpg/xpointer.rpgle b/os400/libxmlrpg/xpointer.rpgle
new file mode 100644
index 0000000..6f43314
--- /dev/null
+++ b/os400/libxmlrpg/xpointer.rpgle
@@ -0,0 +1,157 @@
+      * Summary: API to handle XML Pointers
+      * Description: API to handle XML Pointers
+      * Base implementation was made accordingly to
+      * W3C Candidate Recommendation 7 June 2000
+      * http://www.w3.org/TR/2000/CR-xptr-20000607
+      *
+      * Added support for the element() scheme described in:
+      * W3C Proposed Recommendation 13 November 2002
+      * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm datasphere ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XPTR_H__)
+      /define XML_XPTR_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_XPTR_ENABLED)
+
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/xpath"
+
+      * A Location Set
+
+     d xmlLocationSetPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlLocationSet  ds                  based(xmlLocationSetPtr)
+     d                                     align qualified
+     d  locNr                        10i 0                                      # locations in set
+     d  locMax                       10i 0                                      Max locations in set
+     d  locTab                         *                                        xmlXPathObjectPtr *
+
+      * Handling of location sets.
+
+     d xmlXPtrLocationSetCreate...
+     d                 pr                  extproc('xmlXPtrLocationSetCreate')
+     d                                     like(xmlLocationSetPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrFreeLocationSet...
+     d                 pr                  extproc('xmlXPtrFreeLocationSet')
+     d obj                                 value like(xmlLocationSetPtr)
+
+     d xmlXPtrLocationSetMerge...
+     d                 pr                  extproc('xmlXPtrLocationSetMerge')
+     d                                     like(xmlLocationSetPtr)
+     d val1                                value like(xmlLocationSetPtr)
+     d val2                                value like(xmlLocationSetPtr)
+
+     d xmlXPtrNewRange...
+     d                 pr                  extproc('xmlXPtrNewRange')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d startindex                    10i 0 value
+     d end                                 value like(xmlNodePtr)
+     d endindex                      10i 0 value
+
+     d xmlXPtrNewRangePoints...
+     d                 pr                  extproc('xmlXPtrNewRangePoints')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlXPathObjectPtr)
+     d end                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrNewRangeNodePoint...
+     d                 pr                  extproc('xmlXPtrNewRangeNodePoint')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d end                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrNewRangePointNode...
+     d                 pr                  extproc('xmlXPtrNewRangePointNode')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlXPathObjectPtr)
+     d end                                 value like(xmlNodePtr)
+
+     d xmlXPtrNewRangeNodes...
+     d                 pr                  extproc('xmlXPtrNewRangeNodes')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d end                                 value like(xmlNodePtr)
+
+     d xmlXPtrNewLocationSetNodes...
+     d                 pr                  extproc('xmlXPtrNewLocationSetNodes')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d end                                 value like(xmlNodePtr)
+
+     d xmlXPtrNewLocationSetNodeSet...
+     d                 pr                  extproc(
+     d                                     'xmlXPtrNewLocationSetNodeSet')
+     d                                     like(xmlXPathObjectPtr)
+     d set                                 value like(xmlNodeSetPtr)
+
+     d xmlXPtrNewRangeNodeObject...
+     d                 pr                  extproc('xmlXPtrNewRangeNodeObject')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d end                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrNewCollapsedRange...
+     d                 pr                  extproc('xmlXPtrNewCollapsedRange')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+
+     d xmlXPtrLocationSetAdd...
+     d                 pr                  extproc('xmlXPtrLocationSetAdd')
+     d cur                                 value like(xmlLocationSetPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrWrapLocationSet...
+     d                 pr                  extproc('xmlXPtrWrapLocationSet')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlLocationSetPtr)
+
+     d xmlXPtrLocationSetDel...
+     d                 pr                  extproc('xmlXPtrLocationSetDel')
+     d cur                                 value like(xmlLocationSetPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrLocationSetRemove...
+     d                 pr                  extproc('xmlXPtrLocationSetRemove')
+     d cur                                 value like(xmlLocationSetPtr)
+     d val                           10i 0 value
+
+      * Functions.
+
+     d xmlXPtrNewContext...
+     d                 pr                  extproc('xmlXPtrNewContext')
+     d                                     like(xmlXPathContextPtr)
+     d doc                                 value like(xmlDocPtr)
+     d here                                value like(xmlNodePtr)
+     d origin                              value like(xmlNodePtr)
+
+     d xmlXPtrEval     pr                  extproc('xmlXPtrEval')
+     d                                     like(xmlXPathObjectPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPtrRangeToFunction...
+     d                 pr                  extproc('xmlXPtrRangeToFunction')
+     d ctxt                                value like(xmlXPathParserContextPtr)
+     d nargs                         10i 0 value
+
+     d xmlXPtrBuildNodeList...
+     d                 pr                  extproc('xmlXPtrBuildNodeList')
+     d                                     like(xmlNodePtr)
+     d obj                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrEvalRangePredicate...
+     d                 pr                  extproc('xmlXPtrEvalRangePredicate')
+     d ctxt                                value like(xmlXPathParserContextPtr)
+
+      /endif                                                                    LIBXML_XPTR_ENABLED
+      /endif                                                                    XML_XPTR_H__


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]