      * Summary: interface for all global variables of the library
      * Description: all the global variables and thread handling for
      *              those variables is handled by this module.
      *
      * The bottom of this file is automatically generated by build_glob.py
      * based on the description file global.data
      *
      * Copy: See Copyright for the status of this software.
      *
      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.

      /if not defined(XML_GLOBALS_H)
      /define XML_GLOBALS_H

      /include "libxmlrpg/xmlversion"
      /include "libxmlrpg/xmlTypesC"
      /include "libxmlrpg/parser"
      /include "libxmlrpg/xmlerror"
      /include "libxmlrpg/SAX"
      /include "libxmlrpg/SAX2"
      /include "libxmlrpg/xmlmemory"

     d xmlInitGlobals  pr                  extproc('xmlInitGlobals')

     d xmlCleanupGlobals...
     d                 pr                  extproc('xmlCleanupGlobals')

      * xmlParserInputBufferCreateFilenameFunc:
      * @URI: the URI to read from
      * @enc: the requested source encoding
      *
      * Signature for the function doing the lookup for a suitable input method
      * corresponding to an URI.
      *
      * Returns the new xmlParserInputBufferPtr in case of success or NULL if no
      *         method was found.

     d xmlParserInputBufferCreateFilenameFunc...
     d                 s               *   based(######typedef######)
     d                                     procptr

      * xmlOutputBufferCreateFilenameFunc:
      * @URI: the URI to write to
      * @enc: the requested target encoding
      *
      * Signature for the function doing the lookup for a suitable output method
      * corresponding to an URI.
      *
      * Returns the new xmlOutputBufferPtr in case of success or NULL if no
      *         method was found.

     d xmlOutputBufferCreateFilenameFunc...
     d                 s               *   based(######typedef######)
     d                                     procptr

     d xmlParserInputBufferCreateFilenameDefault...
     d                 pr                  extproc('xmlParserInputBufferCreate+
     d                                     FilenameDefault')
     d                                     like(xmlParserInputBuffer...
     d                                     CreateFilenameFunc)
     d func                                value like(xmlParserInputBuffer...
     d                                     CreateFilenameFunc)

     d xmlOutputBufferCreateFilenameDefault...
     d                 pr                  extproc('xmlOutputBufferCreate+
     d                                     FilenameDefault')
     d                                     like(xmlOutputBuffer...
     d                                     CreateFilenameFunc)
     d func                                value like(xmlOutputBuffer...
     d                                     CreateFilenameFunc)

      * xmlRegisterNodeFunc:
      * @node: the current node
      *
      * Signature for the registration callback of a created node

     d xmlRegisterNodeFunc...
     d                 s               *   based(######typedef######)
     d                                     procptr

      * xmlDeregisterNodeFunc:
      * @node: the current node
      *
      * Signature for the deregistration callback of a discarded node

     d xmlDeregisterNodeFunc...
     d                 s               *   based(######typedef######)
     d                                     procptr

     d xmlGlobalStatePtr...
     d                 s               *   based(######typedef######)

     d xmlGlobalState  ds                  based(xmlGlobalStatePtr)
     d                                     align qualified
     d  xmlParserVersion...
     d                                 *                                        const char *
     d  xmlDefaultSAXLocator...
     d                                     likeds(xmlSAXLocator)
     d  xmlDefaultSAXHandler...
     d                                     likeds(xmlSAXHandlerV1)
     d  docbDefaultSAXHandler...
     d                                     likeds(xmlSAXHandlerV1)
     d  htmlDefaultSAXHandler...
     d                                     likeds(xmlSAXHandlerV1)
     d  xmlFree                            like(xmlFreeFunc)
     d  xmlMalloc                          like(xmlMallocFunc)
     d  xmlMemStrdup                       like(xmlStrdupFunc)
     d  xmlRealloc                         like(xmlReallocFunc)
     d  xmlGenericError...
     d                                     like(xmlGenericErrorFunc)
     d  xmlStructuredError...
     d                                     like(xmlStructuredErrorFunc)
     d  xmlGenericErrorContext...
     d                                 *                                        void *
     d  oldXMLWDcompatibility...
     d                                     like(xmlCint)
     d  xmlBufferAllocScheme...
     d                                     like(xmlBufferAllocationScheme)
     d  xmlDefaultBufferSize...
     d                                     like(xmlCint)
     d  xmlSubstituteEntitiesDefaultValue...
     d                                     like(xmlCint)
     d  xmlDoValidityCheckingDefaultValue...
     d                                     like(xmlCint)
     d  xmlGetWarningsDefaultValue...
     d                                     like(xmlCint)
     d  xmlKeepBlanksDefaultValue...
     d                                     like(xmlCint)
     d  xmlLineNumbersDefaultValue...
     d                                     like(xmlCint)
     d  xmlLoadExtDtdDefaultValue...
     d                                     like(xmlCint)
     d  xmlParserDebugEntities...
     d                                     like(xmlCint)
     d  xmlPedanticParserDefaultValue...
     d                                     like(xmlCint)
     d  xmlSaveNoEmptyTags...
     d                                     like(xmlCint)
     d  xmlIndentTreeOutput...
     d                                     like(xmlCint)
     d  xmlTreeIndentString...
     d                                 *                                        const char *
     d  xmlRegisterNodeDefaultValue...
     d                                     like(xmlRegisterNodeFunc)
     d  xmlDeregisterNodeDefaultValue...
     d                                     like(xmlDeregisterNodeFunc)
     d  xmlMallocAtomic...
     d                                     like(xmlMallocFunc)
     d  xmlLastError                       likeds(xmlError)
     d  xmlParserInputBufferCreateFilenameValue...
     d                                     like(xmlParserInputBuffer...
     d                                     CreateFilenameFunc)
     d  xmlOutputBufferCreateFilenameValue...
     d                                     like(xmlOutputBuffer...
     d                                     CreateFilenameFunc)
     d  xmlStructuredErrorContext...
     d                                 *                                        void *

      /include "libxmlrpg/threads"

     d xmlInitializeGlobalState...
     d                 pr                  extproc('xmlInitializeGlobalState')
     d qs                                  value like(xmlGlobalStatePtr)

     d xmlThrDefSetGenericErrorFunc...
     d                 pr                  extproc(
     d                                      'xmlThrDefSetGenericErrorFunc')
     d ctx                             *   value                                void *
     d handler                             value like(xmlGenericErrorFunc)

     d xmlThrDefSetStructuredErrorFunc...
     d                 pr                  extproc(
     d                                      'xmlThrDefSetStructuredErrorFunc')
     d ctx                             *   value                                void *
     d handler                             value like(xmlStructuredErrorFunc)

     d xmlRegisterNodeDefault...
     d                 pr                  extproc('xmlRegisterNodeDefault')
     d                                     like(xmlRegisterNodeFunc)
     d func                                value like(xmlRegisterNodeFunc)

     d xmlThrDefRegisterNodeDefault...
     d                 pr                  extproc(
     d                                      'xmlThrDefRegisterNodeDefault')
     d                                     like(xmlRegisterNodeFunc)
     d func                                value like(xmlRegisterNodeFunc)

     d xmlDeregisterNodeDefault...
     d                 pr                  extproc('xmlDeregisterNodeDefault')
     d                                     like(xmlDeregisterNodeFunc)
     d func                                value like(xmlDeregisterNodeFunc)

     d xmlThrDefDeregisterNodeDefault...
     d                 pr                  extproc(
     d                                      'xmlThrDefDeregisterNodeDefault')
     d                                     like(xmlDeregisterNodeFunc)
     d func                                value like(xmlDeregisterNodeFunc)

     d xmlThrDefOutputBufferCreateFilenameDefault...
     d                 pr                  extproc('xmlThrDefOutputBuffer+
     d                                     CreateFilenameDefault')
     d                                     like(xmlOutputBuffer...
     d                                     CreateFilenameFunc)
     d func                                value like(xmlOutputBuffer...
     d                                     CreateFilenameFunc)

     d xmlThrDefParserInputBufferCreateFilenameDefault...
     d                 pr                  extproc('xmlThrDefParserInputBuffer+
     d                                     CreateFilenameDefault')
     d                                     like(xmlParserInputBuffer...
     d                                     CreateFilenameFunc)
     d func                                value like(xmlParserInputBuffer...
     d                                     CreateFilenameFunc)

      /if defined(LIBXML_DOCB_ENABLED)
     d get_docbDefaultSAXHandler...
     d                 pr                  extproc(
     d                                       '__get_docbDefaultSAXHandler')
     d                                     likeds(xmlSAXHandlerV1)

     d set_docbDefaultSAXHandler...
     d                 pr                  extproc(
     d                                       '__set_docbDefaultSAXHandler')
     d  value                              value likeds(xmlSAXHandlerV1)
      /endif

      /if defined(LIBXML_HTML_ENABLED)
     d get_htmlDefaultSAXHandler...
     d                 pr                  extproc(
     d                                       '__get_htmlDefaultSAXHandler')
     d                                     likeds(xmlSAXHandlerV1)

     d set_htmlDefaultSAXHandler...
     d                 pr                  extproc(
     d                                       '__set_htmlDefaultSAXHandler')
     d  value                              value likeds(xmlSAXHandlerV1)
      /endif

     d get_xmlLastError...
     d                 pr                  extproc('__get_xmlLastError')
     d                                     likeds(xmlError)

     d set_xmlLastError...
     d                 pr                  extproc('__set_xmlLastError')
     d  value                              value likeds(xmlError)

     d get_oldXMLWDcompatibility...
     d                 pr                  extproc(
     d                                       '__get_oldXMLWDcompatibility')
     d                                     like(xmlCint)

     d set_oldXMLWDcompatibility...
     d                 pr                  extproc(
     d                                       '__set_oldXMLWDcompatibility')
     d  value                              value like(xmlCint)

     d get_xmlBufferAllocScheme...
     d                 pr                  extproc('__get_xmlBufferAllocScheme')
     d                                     like(xmlBufferAllocationScheme)

     d set_xmlBufferAllocScheme...
     d                 pr                  extproc('__set_xmlBufferAllocScheme')
     d  value                              value like(xmlBufferAllocationScheme)

     d xmlThrDefBufferAllocScheme...
     d                 pr                  extproc('xmlThrDefBufferAllocScheme')
     d                                     like(xmlBufferAllocationScheme)
     d  v                                  value like(xmlBufferAllocationScheme)

     d get_xmlDefaultBufferSize...
     d                 pr                  extproc('__get_xmlDefaultBufferSize')
     d                                     like(xmlCint)

     d set_xmlDefaultBufferSize...
     d                 pr                  extproc('__set_xmlDefaultBufferSize')
     d  value                              value like(xmlCint)

     d xmlThrDefDefaultBufferSize...
     d                 pr                  extproc('xmlThrDefDefaultBufferSize')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlDefaultSAXHandler...
     d                 pr                  extproc('__get_xmlDefaultSAXHandler')
     d                                     likeds(xmlSAXHandlerV1)

     d set_xmlDefaultSAXHandler...
     d                 pr                  extproc('__set_xmlDefaultSAXHandler')
     d  value                              value likeds(xmlSAXHandlerV1)

     d get_xmlDefaultSAXLocator...
     d                 pr                  extproc('__get_xmlDefaultSAXLocator')
     d                                     likeds(xmlSAXLocator)

     d set_xmlDefaultSAXLocator...
     d                 pr                  extproc('__set_xmlDefaultSAXLocator')
     d  value                              value likeds(xmlSAXLocator)

     d get_xmlDoValidityCheckingDefaultValue...
     d                 pr                  extproc('__get_xmlDoValidity+
     d                                       CheckingDefaultValue')
     d                                     like(xmlCint)

     d set_xmlDoValidityCheckingDefaultValue...
     d                 pr                  extproc('__set_xmlDoValidity+
     d                                       CheckingDefaultValue')
     d  value                              value like(xmlCint)

     d xmlThrDefDoValidityCheckingDefaultValue...
     d                 pr                  extproc('xmlThrDefDoValidity+
     d                                       CheckingDefaultValue')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlGenericError...
     d                 pr                  extproc('__get_xmlGenericError')
     d                                     like(xmlGenericErrorFunc)

     d set_xmlGenericError...
     d                 pr                  extproc('__set_xmlGenericError')
     d  func                               value like(xmlGenericErrorFunc)

     d get_xmlStructuredError...
     d                 pr                  extproc('__get_xmlStructuredError')
     d                                     like(xmlStructuredErrorFunc)

     d set_xmlStructuredError...
     d                 pr                  extproc('__set_xmlStructuredError')
     d  func                               value like(xmlStructuredErrorFunc)

     d xmlStructuredError...
     d                 pr                  extproc('__call_xmlStructuredError')
     d  userData                       *   value options(*string)               void *
     d  error                              value like(xmlErrorPtr)

     d get_xmlGenericErrorContext...
     d                 pr                  extproc(
     d                                       '__get_xmlGenericErrorContext')
     d                                 *                                        void *

     d set_xmlGenericErrorContext...
     d                 pr                  extproc(
     d                                       '__set_xmlGenericErrorContext')
     d  value                          *   value options(*string)               void *

     d get_xmlStructuredErrorContext...
     d                 pr                  extproc(
     d                                       '__get_xmlStructuredErrorContext')
     d                                 *                                        void *

     d set_xmlStructuredErrorContext...
     d                 pr                  extproc(
     d                                       '__set_xmlStructuredErrorContext')
     d  value                          *   value options(*string)               void *

     d get_xmlGetWarningsDefaultValue...
     d                 pr                  extproc(
     d                                       '__get_xmlGetWarningsDefaultValue')
     d                                     like(xmlCint)

     d set_xmlGetWarningsDefaultValue...
     d                 pr                  extproc(
     d                                       '__set_xmlGetWarningsDefaultValue')
     d  value                              value like(xmlCint)

     d xmlThrDefGetWarningsDefaultValue...
     d                 pr                  extproc(
     d                                       'xmlThrDefGetWarningsDefaultValue')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlIndentTreeOutput...
     d                 pr                  extproc('__get_xmlIndentTreeOutput')
     d                                     like(xmlCint)

     d set_xmlIndentTreeOutput...
     d                 pr                  extproc('__set_xmlIndentTreeOutput')
     d  value                              value like(xmlCint)

     d xmlThrDefIndentTreeOutput...
     d                 pr                  extproc('xmlThrDefIndentTreeOutput')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlTreeIndentString...
     d                 pr              *   extproc('__get_xmlTreeIndentString') const char *

     d set_xmlTreeIndentString...
     d                 pr                  extproc('__set_xmlTreeIndentString')
     d  value                          *   value options(*string)               const char *

     d xmlThrDefTreeIndentString...
     d                 pr              *   extproc('xmlThrDefTreeIndentString') const char *
     d  v                              *   value options(*string)               const char *

     d get_xmlKeepBlanksDefaultValue...
     d                 pr                  extproc(
     d                                       '__get_xmlKeepBlanksDefaultValue')
     d                                     like(xmlCint)

     d set_xmlKeepBlanksDefaultValue...
     d                 pr                  extproc(
     d                                       '__set_xmlKeepBlanksDefaultValue')
     d  value                              value like(xmlCint)

     d xmlThrDefKeepBlanksDefaultValue...
     d                 pr                  extproc(
     d                                       'xmlThrDefKeepBlanksDefaultValue')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlLineNumbersDefaultValue...
     d                 pr                  extproc(
     d                                       '__get_xmlLineNumbersDefaultValue')
     d                                     like(xmlCint)

     d set_xmlLineNumbersDefaultValue...
     d                 pr                  extproc(
     d                                       '__set_xmlLineNumbersDefaultValue')
     d  value                              value like(xmlCint)

     d xmlThrDefLineNumbersDefaultValue...
     d                 pr                  extproc(
     d                                       'xmlThrDefLineNumbersDefaultValue')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlLoadExtDtdDefaultValue...
     d                 pr                  extproc(
     d                                       '__get_xmlLoadExtDtdDefaultValue')
     d                                     like(xmlCint)

     d set_xmlLoadExtDtdDefaultValue...
     d                 pr                  extproc(
     d                                       '__set_xmlLoadExtDtdDefaultValue')
     d  value                              value like(xmlCint)

     d xmlThrDefLoadExtDtdDefaultValue...
     d                 pr                  extproc(
     d                                       'xmlThrDefLoadExtDtdDefaultValue')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlParserDebugEntities...
     d                 pr                  extproc(
     d                                       '__get_xmlParserDebugEntities')
     d                                     like(xmlCint)

     d set_xmlParserDebugEntities...
     d                 pr                  extproc(
     d                                       '__set_xmlParserDebugEntities')
     d  value                              value like(xmlCint)

     d xmlThrDefParserDebugEntities...
     d                 pr                  extproc(
     d                                       'xmlThrDefParserDebugEntities')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlParserVersion...
     d                 pr              *   extproc('__get_xmlParserVersion')    const char *

     d set_xmlParserVersion...
     d                 pr                  extproc('__set_xmlParserVersion')
     d  value                          *   value options(*string)               const char *

     d get_xmlPedanticParserDefaultValue...
     d                 pr                  extproc('__get_xmlPedantic+
     d                                       ParserDefaultValue')
     d                                     like(xmlCint)

     d set_xmlPedanticParserDefaultValue...
     d                 pr                  extproc('__set_xmlPedantic+
     d                                       ParserDefaultValue')
     d  value                              value like(xmlCint)

     d xmlThrDefPedanticParserDefaultValue...
     d                 pr                  extproc('xmlThrDefPedantic+
     d                                       ParserDefaultValue')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlSaveNoEmptyTags...
     d                 pr                  extproc('__get_xmlSaveNoEmptyTags')
     d                                     like(xmlCint)

     d set_xmlSaveNoEmptyTags...
     d                 pr                  extproc('__set_xmlSaveNoEmptyTags')
     d  value                              value like(xmlCint)

     d xmlThrDefSaveNoEmptyTags...
     d                 pr                  extproc('xmlThrDefSaveNoEmptyTags')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlSubstituteEntitiesDefaultValue...
     d                 pr                  extproc('__get_xmlSubstitute+
     d                                       EntitiesDefaultValue')
     d                                     like(xmlCint)

     d set_xmlSubstituteEntitiesDefaultValue...
     d                 pr                  extproc('__set_xmlSubstitute+
     d                                       EntitiesDefaultValue')
     d  value                              value like(xmlCint)

     d xmlThrDefSubstituteEntitiesDefaultValue...
     d                 pr                  extproc('xmlThrDefSubstitute+
     d                                       EntitiesDefaultValue')
     d                                     like(xmlCint)
     d  v                                  value like(xmlCint)

     d get_xmlRegisterNodeDefaultValue...
     d                 pr                  extproc('__get_xmlRegisterNode+
     d                                       DefaultValue')
     d                                     like(xmlRegisterNodeFunc)

     d set_xmlRegisterNodeDefaultValue...
     d                 pr                  extproc('__set_xmlRegisterNode+
     d                                       DefaultValue')
     d  value                              value like(xmlRegisterNodeFunc)

     d xmlRegisterNodeDefaultValue...
     d                 pr                  extproc('__call_xmlRegisterNode+
     d                                       DefaultValue')
     d  node                               value like(xmlNodePtr)

     d get_xmlDeregisterNodeDefaultValue...
     d                 pr                  extproc('__get_xmlDeregisterNode+
     d                                       DefaultValue')
     d                                     like(xmlDeregisterNodeFunc)

     d set_xmlDeregisterNodeDefaultValue...
     d                 pr                  extproc('__set_xmlDeregisterNode+
     d                                       DefaultValue')
     d  value                              value like(xmlDeregisterNodeFunc)

     d xmlDeregisterNodeDefaultValue...
     d                 pr                  extproc('__call_xmlDeregisterNode+
     d                                       DefaultValue')
     d  node                               value like(xmlNodePtr)

     d get_xmlParserInputBufferCreateFilenameValue...
     d                 pr                  extproc('__get_xmlParserInputBuffer+
     d                                       CreateFilenameValue')
     d                                     like(xmlParserInputBuffer...
     d                                       CreateFilenameFunc)

     d set_xmlParserInputBufferCreateFilenameValue...
     d                 pr                  extproc('__set_xmlParserInputBuffer+
     d                                       CreateFilenameValue')
     d  value                              value like(xmlParserInputBuffer...
     d                                       CreateFilenameFunc)

     d xmlParserInputBufferCreateFilenameValue...
     d                 pr                  extproc('__call_xmlParserInputBuffer+
     d                                       CreateFilenameValue')
     d                                     like(xmlParserInputBufferPtr)
     d  URI                            *   value options(*string)               const char *
     d  enc                                value like(xmlCharEncoding)

     d get_xmlOutputBufferCreateFilenameValue...
     d                 pr                  extproc('__get_xmlOutputBuffer+
     d                                       CreateFilenameValue')
     d                                     like(
     d                                       xmlOutputBufferCreateFilenameFunc)

     d set_xmlOutputBufferCreateFilenameValue...
     d                 pr                  extproc('__set_xmlOutputBuffer+
     d                                       CreateFilenameValue')
     d  value                              value like(
     d                                       xmlOutputBufferCreateFilenameFunc)

     d xmlOutputBufferCreateFilenameValue...
     d                 pr                  extproc('__call_xmlOutputBuffer+
     d                                       CreateFilenameValue')
     d                                     like(xmlOutputBufferPtr)
     d  URI                            *   value options(*string)               const char *
     d  encoder                            value like(xmlCharEncodingHandlerPtr)
     d  compression                        value like(xmlCint)

      /endif                                                                    XML_GLOBALS_H
