      * 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/xmlTypesC"
      /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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                                like(xmlCuint)
     d  size                               like(xmlCuint)
     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                  extproc('xmlBufUse')
     d                                     like(xmlCsize_t)
     d  buf                                value like(xmlBufPtr)                const

     d xmlBufShrink    pr                  extproc('xmlBufShrink')
     d                                     like(xmlCsize_t)
     d  buf                                value like(xmlBufPtr)
     d  len                                value like(xmlCsize_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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                             like(xmlCint)                        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                             like(xmlCint)                        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                               like(xmlCushort)
     d  extra                              like(xmlCushort)                     Data for XPath/XSLT

      * xmlDocProperty
      *
      * Set of properties of the document as found by the parser
      * Some of them are linked to similarly named xmlParserOption

     d xmlDocProperties...
     d                 s                   based(######typedef######)
     d                                     like(xmlCenum)
     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                        like(xmlCint)                        zlib compression lev
     d  standalone                         like(xmlCint)
     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                            like(xmlCint)                        In-memory encoding
     d  dict                           *                                        xmlDictPtr for names
     d  psvi                           *                                        Type/PSVI ino
     d  parseFlags                         like(xmlCint)                        xmlParserOption's
     d  properties                         like(xmlCint)                        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                               like(xmlCint)
     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                  extproc('xmlValidateNCName')
     d                                     like(xmlCint)
     d  value                          *   value options(*string)               const xmlChar *
     d  space                              value like(xmlCint)

      /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                  extproc('xmlValidateQName')
     d                                     like(xmlCint)
     d  value                          *   value options(*string)               const xmlChar *
     d  space                              value like(xmlCint)

     d xmlValidateName...
     d                 pr                  extproc('xmlValidateName')
     d                                     like(xmlCint)
     d  value                          *   value options(*string)               const xmlChar *
     d  space                              value like(xmlCint)

     d xmlValidateNMToken...
     d                 pr                  extproc('xmlValidateNMToken')
     d                                     like(xmlCint)
     d  value                          *   value options(*string)               const xmlChar *
     d  space                              value like(xmlCint)

      /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                                value like(xmlCint)                  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                                like(xmlCint)

      * 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                               value like(xmlCsize_t)

     d xmlBufferCreateStatic...
     d                 pr                  extproc('xmlBufferCreateStatic')
     d                                     like(xmlBufferPtr)
     d  mem                            *   value
     d  size                               value like(xmlCsize_t)

     d xmlBufferResize...
     d                 pr                  extproc('xmlBufferResize')
     d                                     like(xmlCint)
     d  buf                                value like(xmlBufferPtr)
     d  size                               value like(xmlCsize_t)

     d xmlBufferFree   pr                  extproc('xmlBufferFree')
     d  buf                                value like(xmlBufferPtr)

     d xmlBufferDump   pr                  extproc('xmlBufferDump')
     d                                     like(xmlCint)
     d  file                           *   value                                FILE *
     d  buf                                value like(xmlBufferPtr)

     d xmlBufferAdd    pr                  extproc('xmlBufferAdd')
     d                                     like(xmlCint)
     d  buf                                value like(xmlBufferPtr)
     d  str                            *   value options(*string)               const xmlChar *
     d  len                                value like(xmlCint)                  str length

     d xmlBufferAddHead...
     d                 pr                  extproc('xmlBufferAddHead')
     d                                     like(xmlCint)
     d  buf                                value like(xmlBufferPtr)
     d  str                            *   value options(*string)               const xmlChar *
     d  len                                value like(xmlCint)                  str length

     d xmlBufferCat    pr                  extproc('xmlBufferCat')
     d                                     like(xmlCint)
     d  buf                                value like(xmlBufferPtr)
     d  str                            *   value options(*string)               const xmlChar *

     d xmlBufferCCat   pr                  extproc('xmlBufferCCat')
     d                                     like(xmlCint)
     d  buf                                value like(xmlBufferPtr)
     d  str                            *   value options(*string)               const char *

     d xmlBufferShrink...
     d                 pr                  extproc('xmlBufferShrink')
     d                                     like(xmlCint)
     d  buf                                value like(xmlBufferPtr)
     d  len                                value like(xmlCuint)

     d xmlBufferGrow   pr                  extproc('xmlBufferGrow')
     d                                     like(xmlCint)
     d  buf                                value like(xmlBufferPtr)
     d  len                                value like(xmlCuint)

     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                  extproc('xmlBufferLength')
     d                                     like(xmlCint)
     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                          value like(xmlCint)

      /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                                value like(xmlCint)

     d xmlNewTextLen   pr                  extproc('xmlNewTextLen')
     d                                     like(xmlNodePtr)
     d  content                        *   value options(*string)               const xmlChar *
     d  len                                value like(xmlCint)

     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                                value like(xmlCint)

     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                          value like(xmlCint)

     d xmlDocCopyNode  pr                  extproc('xmlDocCopyNode')
     d                                     like(xmlNodePtr)
     d  node                               value like(xmlNodePtr)
     d  doc                                value like(xmlDocPtr)
     d  recursive                          value like(xmlCint)

     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                  extproc('xmlGetLineNo')
     d                                     like(xmlClong)
     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                  extproc('xmlNodeIsText')
     d                                     like(xmlCint)
     d  node                               value like(xmlNodePtr)

     d xmlIsBlankNode  pr                  extproc('xmlIsBlankNode')
     d                                     like(xmlCint)
     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                  extproc('xmlTextConcat')
     d                                     like(xmlCint)
     d  node                               value like(xmlNodePtr)
     d  content                        *   value options(*string)               const xmlChar *
     d  len                                value like(xmlCint)

     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                                value like(xmlCint)

     d xmlNodeListGetString...
     d                 pr              *   extproc('xmlNodeListGetString')      xmlChar *
     d  doc                                value like(xmlDocPtr)
     d  list                               value like(xmlNodePtr)
     d  inLine                             value like(xmlCint)

      /if defined(LIBXML_TREE_ENABLED)
     d xmlNodeListGetRawString...
     d                 pr              *   extproc('xmlNodeListGetRawString')   xmlChar *
     d  doc                                value like(xmlDocPtr)
     d  list                               value like(xmlNodePtr)
     d  inLine                             value like(xmlCint)
      /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                                value like(xmlCint)
      /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                                value like(xmlCint)

     d xmlNodeGetContent...
     d                 pr              *   extproc('xmlNodeGetContent')         xmlChar *
     d  cur                                value like(xmlNodePtr)

     d xmlNodeBufGetContent...
     d                 pr                  extproc('xmlNodeBufGetContent')
     d                                     like(xmlCint)
     d  buffer                             value like(xmlBufferPtr)
     d  cur                                value like(xmlNodePtr)

     d xmlBufGetNodeContent...
     d                 pr                  extproc('xmlBufGetNodeContent')
     d                                     like(xmlCint)
     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                  extproc('xmlNodeGetSpacePreserve')
     d                                     like(xmlCint)
     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                                value like(xmlCint)
      /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                  extproc('xmlRemoveProp')
     d                                     like(xmlCint)
     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                  extproc('xmlUnsetNsProp')
     d                                     like(xmlCint)
     d  node                               value like(xmlNodePtr)
     d  ns                                 value like(xmlNsPtr)
     d  name                           *   value options(*string)               const xmlChar *

     d xmlUnsetProp    pr                  extproc('xmlUnsetProp')
     d                                     like(xmlCint)
     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                  extproc('xmlReconciliateNs')
     d                                     like(xmlCint)
     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                               like(xmlCint)
     d  format                             value like(xmlCint)

     d xmlDocDumpMemory...
     d                 pr                  extproc('xmlDocDumpMemory')
     d  cur                                value like(xmlDocPtr)
     d  mem                            *                                        xmlChar * (*)
     d  size                               like(xmlCint)

     d xmlDocDumpMemoryEnc...
     d                 pr                  extproc('xmlDocDumpMemoryEnc')
     d  out_doc                            value like(xmlDocPtr)
     d  doc_txt_ptr                    *                                        xmlChar * (*)
     d  doc_txt_len                        like(xmlCint)
     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                        like(xmlCint)
     d  txt_encoding                   *   value options(*string)               const char *
     d  format                             value like(xmlCint)

     d xmlDocFormatDump...
     d                 pr                  extproc('xmlDocFormatDump')
     d                                     like(xmlCint)
     d  f                              *   value                                FILE *
     d  cur                                value like(xmlDocPtr)
     d  format                             value like(xmlCint)

     d xmlDocDump      pr                  extproc('xmlDocDump')
     d                                     like(xmlCint)
     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                  extproc('xmlSaveFile')
     d                                     like(xmlCint)
     d  filename                       *   value options(*string)               const char *
     d  cur                                value like(xmlDocPtr)

     d xmlSaveFormatFile...
     d                 pr                  extproc('xmlSaveFormatFile')
     d                                     like(xmlCint)
     d  filename                       *   value options(*string)               const char *
     d  cur                                value like(xmlDocPtr)
     d  format                             value like(xmlCint)

     d xmlBufNodeDump  pr                  extproc('xmlBufNodeDump')
     d                                     like(xmlCsize_t)
     d  buf                                value like(xmlBufPtr)
     d  doc                                value like(xmlDocPtr)
     d  cur                                value like(xmlNodePtr)
     d  level                              value like(xmlCint)
     d  format                             value like(xmlCint)

     d xmlNodeDump     pr                  extproc('xmlNodeDump')
     d                                     like(xmlCint)
     d  buf                                value like(xmlBufferPtr)
     d  doc                                value like(xmlDocPtr)
     d  cur                                value like(xmlNodePtr)
     d  level                              value like(xmlCint)
     d  format                             value like(xmlCint)

     d xmlSaveFileTo   pr                  extproc('xmlSaveFileTo')
     d                                     like(xmlCint)
     d  buf                                value like(xmlOutputBufferPtr)
     d  cur                                value like(xmlDocPtr)
     d  encoding                       *   value options(*string)               const char *

     d xmlSaveFormatFileTo...
     d                 pr                  extproc('xmlSaveFormatFileTo')
     d                                     like(xmlCint)
     d  buf                                value like(xmlOutputBufferPtr)
     d  cur                                value like(xmlDocPtr)
     d  encoding                       *   value options(*string)               const char *
     d  format                             value like(xmlCint)

     d xmlNodeDumpOutput...
     d                 pr                  extproc('xmlNodeDumpOutput')
     d  buf                                value like(xmlOutputBufferPtr)
     d  doc                                value like(xmlDocPtr)
     d  cur                                value like(xmlNodePtr)
     d  level                              value like(xmlCint)
     d  format                             value like(xmlCint)
     d  encoding                       *   value options(*string)               const char *

     d xmlSaveFormatFileEnc...
     d                 pr                  extproc('xmlSaveFormatFileEnc')
     d                                     like(xmlCint)
     d  filename                       *   value options(*string)               const char *
     d  cur                                value like(xmlDocPtr)
     d  encoding                       *   value options(*string)               const char *
     d  format                             value like(xmlCint)

     d xmlSaveFileEnc  pr                  extproc('xmlSaveFileEnc')
     d                                     like(xmlCint)
     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                  extproc('xmlIsXHTML')
     d                                     like(xmlCint)
     d  systemID                       *   value options(*string)               const xmlChar *
     d  publicID                       *   value options(*string)               const xmlChar *

      * Compression.

     d xmlGetDocCompressMode...
     d                 pr                  extproc('xmlGetDocCompressMode')
     d                                     like(xmlCint)
     d  doc                                value like(xmlDocPtr)

     d xmlSetDocCompressMode...
     d                 pr                  extproc('xmlSetDocCompressMode')
     d  doc                                value like(xmlDocPtr)
     d  mode                               value like(xmlCint)

     d xmlGetCompressMode...
     d                 pr                  extproc('xmlGetCompressMode')
     d                                     like(xmlCint)

     d xmlSetCompressMode...
     d                 pr                  extproc('xmlSetCompressMode')
     d  mode                               value like(xmlCint)

      * 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                  extproc(
     d                                      'xmlDOMWrapReconcileNamespaces')
     d                                     like(xmlCint)
     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
     d  elem                               value like(xmlNodePtr)
     d  options                            value like(xmlCint)

     d xmlDOMWrapAdoptNode...
     d                 pr                  extproc('xmlDOMWrapAdoptNode')
     d                                     like(xmlCint)
     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                            value like(xmlCint)

     d xmlDOMWrapRemoveNode...
     d                 pr                  extproc('xmlDOMWrapRemoveNode')
     d                                     like(xmlCint)
     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
     d  doc                                value like(xmlDocPtr)
     d  node                               value like(xmlNodePtr)
     d  options                            value like(xmlCint)

     d xmlDOMWrapCloneNode...
     d                 pr                  extproc('xmlDOMWrapCloneNode')
     d                                     like(xmlCint)
     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                            value like(xmlCint)

      /if defined(LIBXML_TREE_ENABLED)

      * 5 interfaces from DOM ElementTraversal, but different in entities
      * traversal.

     d xmlChildElementCount...
     d                 pr                  extproc('xmlChildElementCount')
     d                                     like(xmlClong)
     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__
