      * 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/xmlTypesC"
      /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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                   based(######typedef######)
     d                                     like(xmlCenum)
     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                  extproc('xmlTextReaderSetup')
     d                                     like(xmlCint)
     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                            value like(xmlCint)

      * Iterators

     d xmlTextReaderRead...
     d                 pr                  extproc('xmlTextReaderRead')
     d                                     like(xmlCint)
     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                  extproc(
     d                                     'xmlTextReaderReadAttributeValue')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

      * Attributes of the node

     d xmlTextReaderAttributeCount...
     d                 pr                  extproc(
     d                                     'xmlTextReaderAttributeCount')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderDepth...
     d                 pr                  extproc('xmlTextReaderDepth')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderHasAttributes...
     d                 pr                  extproc('xmlTextReaderHasAttributes')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderHasValue...
     d                 pr                  extproc('xmlTextReaderHasValue')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderIsDefault...
     d                 pr                  extproc('xmlTextReaderIsDefault')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderIsEmptyElement...
     d                 pr                  extproc(
     d                                     'xmlTextReaderIsEmptyElement')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderNodeType...
     d                 pr                  extproc('xmlTextReaderNodeType')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderQuoteChar...
     d                 pr                  extproc('xmlTextReaderQuoteChar')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderReadState...
     d                 pr                  extproc('xmlTextReaderReadState')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderIsNamespaceDecl...
     d                 pr                  extproc(
     d                                     'xmlTextReaderIsNamespaceDecl')
     d                                     like(xmlCint)
     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                  extproc('xmlTextReaderClose')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderGetAttributeNo...
     d                 pr              *   extproc(                             xmlChar *
     d                                     'xmlTextReaderGetAttributeNo')
     d  reader                             value like(xmlTextReaderPtr)
     d  no                                 value like(xmlCint)

     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                  extproc(
     d                                     'xmlTextReaderMoveToAttributeNo')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  no                                 value like(xmlCint)

     d xmlTextReaderMoveToAttribute...
     d                 pr                  extproc(
     d                                     'xmlTextReaderMoveToAttribute')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  name                           *   value options(*string)               const xmlChar *

     d xmlTextReaderMoveToAttributeNs...
     d                 pr                  extproc(
     d                                     'xmlTextReaderMoveToAttributeNs')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  localName                      *   value options(*string)               const xmlChar *
     d  namespaceURI                   *   value options(*string)               const xmlChar *

     d xmlTextReaderMoveToFirstAttribute...
     d                 pr                  extproc(
     d                                     'xmlTextReaderMoveToFirstAttribute')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderMoveToNextAttribute...
     d                 pr                  extproc(
     d                                     'xmlTextReaderMoveToNextAttribute')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderMoveToElement...
     d                 pr                  extproc('xmlTextReaderMoveToElement')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderNormalization...
     d                 pr                  extproc('xmlTextReaderNormalization')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderConstEncoding...
     d                 pr              *   extproc('xmlTextReaderConstEncoding')const xmlChar *
     d  reader                             value like(xmlTextReaderPtr)

      * Extensions

     d xmlTextReaderSetParserProp...
     d                 pr                  extproc('xmlTextReaderSetParserProp')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  prop                               value like(xmlCint)
     d  value                              value like(xmlCint)

     d xmlTextReaderGetParserProp...
     d                 pr                  extproc('xmlTextReaderGetParserProp')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  prop                               value like(xmlCint)

     d xmlTextReaderCurrentNode...
     d                 pr                  extproc('xmlTextReaderCurrentNode')
     d                                     like(xmlNodePtr)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderGetParserLineNumber...
     d                 pr                  extproc(
     d                                     'xmlTextReaderGetParserLineNumber')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderGetParserColumnNumber...
     d                 pr                  extproc(
     d                                     'xmlTextReaderGetParserColumnNumber')
     d                                     like(xmlCint)
     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                  extproc(
     d                                     'xmlTextReaderPreservePattern')
     d                                     like(xmlCint)
     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                  extproc('xmlTextReaderNext')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderNextSibling...
     d                 pr                  extproc('xmlTextReaderNextSibling')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

     d xmlTextReaderIsValid...
     d                 pr                  extproc('xmlTextReaderIsValid')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

      /if defined(LIBXML_SCHEMAS_ENABLED)
     d xmlTextReaderRelaxNGValidate...
     d                 pr                  extproc(
     d                                     'xmlTextReaderRelaxNGValidate')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  rng                            *   value options(*string)               const char *

     d xmlTextReaderRelaxNGValidateCtxt...
     d                 pr                  extproc(
     d                                     'xmlTextReaderRelaxNGValidateCtxt')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
     d  options                            value like(xmlCint)

     d xmlTextReaderRelaxNGSetSchema...
     d                 pr                  extproc(
     d                                     'xmlTextReaderRelaxNGSetSchema')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  schema                             value like(xmlRelaxNGPtr)

     d xmlTextReaderSchemaValidate...
     d                 pr                  extproc(
     d                                     'xmlTextReaderSchemaValidate')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  xsd                            *   value options(*string)               const char *

     d xmlTextReaderSchemaValidateCtxt...
     d                 pr                  extproc(
     d                                     'xmlTextReaderSchemaValidateCtxt')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  ctxt                               value like(xmlSchemaValidCtxtPtr)
     d  options                            value like(xmlCint)

     d xmlTextReaderSetSchema...
     d                 pr                  extproc('xmlTextReaderSetSchema')
     d                                     like(xmlCint)
     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                  extproc('xmlTextReaderStandalone')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)

      * Index lookup

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

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

     d xmlReaderForMemory...
     d                 pr                  extproc('xmlReaderForMemory')
     d                                     like(xmlTextReaderPtr)
     d  buffer                         *   value options(*string)               const char *
     d  size                               value like(xmlCint)
     d  URL                            *   value options(*string)               const char *
     d  encoding                       *   value options(*string)               const char *
     d  options                            value like(xmlCint)

     d xmlReaderForFd  pr                  extproc('xmlReaderForFd')
     d                                     like(xmlTextReaderPtr)
     d  fd                                 value like(xmlCint)
     d  URL                            *   value options(*string)               const char *
     d  encoding                       *   value options(*string)               const char *
     d  options                            value like(xmlCint)

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

     d xmlReaderNewWalker...
     d                 pr                  extproc('xmlReaderNewWalker')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  doc                                value like(xmlDocPtr)

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

     d xmlReaderNewFile...
     d                 pr                  extproc('xmlReaderNewFile')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  filename                       *   value options(*string)               const char *
     d  encoding                       *   value options(*string)               const char *
     d  options                            value like(xmlCint)

     d xmlReaderNewMemory...
     d                 pr                  extproc('xmlReaderNewMemory')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  buffer                         *   value options(*string)               const char *
     d  size                               value like(xmlCint)
     d  URL                            *   value options(*string)               const char *
     d  encoding                       *   value options(*string)               const char *
     d  options                            value like(xmlCint)

     d xmlReaderNewFd  pr                  extproc('xmlReaderNewFd')
     d                                     like(xmlCint)
     d  reader                             value like(xmlTextReaderPtr)
     d  fd                                 value like(xmlCint)
     d  URL                            *   value options(*string)               const char *
     d  encoding                       *   value options(*string)               const char *
     d  options                            value like(xmlCint)

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

      * 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                  extproc(
     d                                     'xmlTextReaderLocatorLineNumber')
     d                                     like(xmlCint)
     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__
