      * Summary: interfaces to the Catalog handling system
      * Description: the catalog module implements the support for
      * XML Catalogs and SGML catalogs
      *
      * SGML Open Technical Resolution TR9401:1997.
      * http://www.jclark.com/sp/catalog.htm
      *
      * XML Catalogs Working Draft 06 August 2001
      * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
      *
      * Copy: See Copyright for the status of this software.
      *
      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.

      /if not defined(XML_CATALOG_H__)
      /define XML_CATALOG_H__

      /include "libxmlrpg/xmlversion"

      /if defined(LIBXML_CATALOG_ENABLED)

      /include "libxmlrpg/xmlTypesC"
      /include "libxmlrpg/xmlstring"
      /include "libxmlrpg/tree"

      * XML_CATALOGS_NAMESPACE:
      *
      * The namespace for the XML Catalogs elements.

     d XML_CATALOGS_NAMESPACE...
     d                 c                   'urn:oasis:names:+
     d                                      tc:entity:xmlns:xml:catalog'

      * XML_CATALOG_PI:
      *
      * The specific XML Catalog Processing Instruction name.

     d XML_CATALOG_PI  c                   'oasis-xml-catalog'

      * The API is voluntarily limited to general cataloging.

     d xmlCatalogPrefer...
     d                 s                   based(######typedef######)
     d                                     like(xmlCenum)
     d XML_CATA_PREFER_NONE...
     d                 c                   0
     d XML_CATA_PREFER_PUBLIC...
     d                 c                   1
     d XML_CATA_PREFER_SYSTEM...
     d                 c                   2

     d xmlCatalogAllow...
     d                 s                   based(######typedef######)
     d                                     like(xmlCenum)
     d XML_CATA_ALLOW_NONE...
     d                 c                   0
     d XML_CATA_ALLOW_GLOBAL...
     d                 c                   1
     d XML_CATA_ALLOW_DOCUMENT...
     d                 c                   2
     d XML_CATA_ALLOW_ALL...
     d                 c                   3

     d xmlCatalogPtr   s               *   based(######typedef######)

      * Operations on a given catalog.

     d xmlNewCatalog   pr                  extproc('xmlNewCatalog')
     d                                     like(xmlCatalogPtr)
     d  sgml                               value like(xmlCint)

     d xmlLoadACatalog...
     d                 pr                  extproc('xmlLoadACatalog')
     d                                     like(xmlCatalogPtr)
     d  filename                       *   value options(*string)               const char *

     d xmlLoadSGMLSuperCatalog...
     d                 pr                  extproc('xmlLoadSGMLSuperCatalog')
     d                                     like(xmlCatalogPtr)
     d  filename                       *   value options(*string)               const char *

     d xmlConvertSGMLCatalog...
     d                 pr                  extproc('xmlConvertSGMLCatalog')
     d                                     like(xmlCint)
     d  catal                              value like(xmlCatalogPtr)

     d xmlACatalogAdd  pr                  extproc('xmlACatalogAdd')
     d                                     like(xmlCint)
     d  catal                              value like(xmlCatalogPtr)
     d  type                           *   value options(*string)               const xmlChar *
     d  orig                           *   value options(*string)               const xmlChar *
     d  replace                        *   value options(*string)               const xmlChar *

     d xmlACatalogRemove...
     d                 pr                  extproc('xmlACatalogRemove')
     d                                     like(xmlCint)
     d  catal                              value like(xmlCatalogPtr)
     d  value                          *   value options(*string)               const xmlChar *

     d xmlACatalogResolve...
     d                 pr              *   extproc('xmlACatalogResolve')        xmlChar *
     d  catal                              value like(xmlCatalogPtr)
     d  pubID                          *   value options(*string)               const xmlChar *
     d  sysID                          *   value options(*string)               const xmlChar *

     d xmlACatalogResolveSystem...
     d                 pr              *   extproc('xmlACatalogResolveSystem')  xmlChar *
     d  catal                              value like(xmlCatalogPtr)
     d  sysID                          *   value options(*string)               const xmlChar *

     d xmlACatalogResolvePublic...
     d                 pr              *   extproc('xmlACatalogResolvePublic')  xmlChar *
     d  catal                              value like(xmlCatalogPtr)
     d  pubID                          *   value options(*string)               const xmlChar *

     d xmlACatalogResolveURI...
     d                 pr              *   extproc('xmlACatalogResolveURI')     xmlChar *
     d  catal                              value like(xmlCatalogPtr)
     d  URI                            *   value options(*string)               const xmlChar *

      /if defined(LIBXML_OUTPUT_ENABLED)
     d xmlACatalogDump...
     d                 pr                  extproc('xmlACatalogDump')
     d  catal                              value like(xmlCatalogPtr)
     d  out                            *   value                                FILE *
      /endif                                                                    LIBXML_OUTPUT_ENABLD

     d xmlFreeCatalog  pr                  extproc('xmlFreeCatalog')
     d  catal                              value like(xmlCatalogPtr)

     d xmlCatalogIsEmpty...
     d                 pr                  extproc('xmlCatalogIsEmpty')
     d                                     like(xmlCint)
     d  catal                              value like(xmlCatalogPtr)

      * Global operations.

     d xmlInitializeCatalog...
     d                 pr                  extproc('xmlInitializeCatalog')

     d xmlLoadCatalog  pr                  extproc('xmlLoadCatalog')
     d                                     like(xmlCint)
     d  filename                       *   value options(*string)               const char *

     d xmlLoadCatalogs...
     d                 pr                  extproc('xmlLoadCatalogs')
     d  paths                          *   value options(*string)               const char *

     d xmlCatalogCleanup...
     d                 pr                  extproc('xmlCatalogCleanup')

      /if defined(LIBXML_OUTPUT_ENABLED)
     d xmlCatalogDump  pr                  extproc('xmlCatalogDump')
     d  out                            *   value                                FILE *
      /endif                                                                    LIBXML_OUTPUT_ENABLD

     d xmlCatalogResolve...
     d                 pr              *   extproc('xmlCatalogResolve')         xmlChar *
     d  pubID                          *   value options(*string)               const xmlChar *
     d  sysID                          *   value options(*string)               const xmlChar *

     d xmlCatalogResolveSystem...
     d                 pr              *   extproc('xmlCatalogResolveSystem')   xmlChar *
     d  sysID                          *   value options(*string)               const xmlChar *

     d xmlCatalogResolvePublic...
     d                 pr              *   extproc('xmlCatalogResolvePublic')   xmlChar *
     d  pubID                          *   value options(*string)               const xmlChar *

     d xmlCatalogResolveURI...
     d                 pr              *   extproc('xmlCatalogResolveURI')      xmlChar *
     d  URI                            *   value options(*string)               const xmlChar *

     d xmlCatalogAdd   pr                  extproc('xmlCatalogAdd')
     d                                     like(xmlCint)
     d  type                           *   value options(*string)               const xmlChar *
     d  orig                           *   value options(*string)               const xmlChar *
     d  replace                        *   value options(*string)               const xmlChar *

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

     d xmlParseCatalogFile...
     d                 pr                  extproc('xmlParseCatalogFile')
     d                                     like(xmlDocPtr)
     d  filename                       *   value options(*string)               const char *

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

      * Strictly minimal interfaces for per-document catalogs used
      * by the parser.

     d xmlCatalogFreeLocal...
     d                 pr                  extproc('xmlCatalogFreeLocal')
     d  catalogs                       *   value                                void *

     d xmlCatalogAddLocal...
     d                 pr              *   extproc('xmlCatalogAddLocal')        void *
     d  catalogs                       *   value                                void *
     d  URL                            *   value options(*string)               const xmlChar *

     d xmlCatalogLocalResolve...
     d                 pr              *   extproc('xmlCatalogLocalResolve')    xmlChar *
     d  catalogs                       *   value                                void *
     d  pubID                          *   value options(*string)               const xmlChar *
     d  sysID                          *   value options(*string)               const xmlChar *

     d xmlCatalogLocalResolveURI...
     d                 pr              *   extproc('xmlCatalogLocalResolveURI') xmlChar *
     d  catalogs                       *   value                                void *
     d  URI                            *   value options(*string)               const xmlChar *

      * Preference settings.

     d xmlCatalogSetDebug...
     d                 pr                  extproc('xmlCatalogSetDebug')
     d                                     like(xmlCint)
     d  level                              value like(xmlCint)

     d xmlCatalogSetDefaultPrefer...
     d                 pr                  extproc('xmlCatalogSetDefaultPrefer')
     d                                     like(xmlCatalogPrefer)
     d  prefer                             value like(xmlCatalogPrefer)

     d xmlCatalogSetDefaults...
     d                 pr                  extproc('xmlCatalogSetDefaults')
     d  allow                              value like(xmlCatalogAllow)

     d xmlCatalogGetDefaults...
     d                 pr                  extproc('xmlCatalogGetDefaults')
     d                                     like(xmlCatalogAllow)

      * DEPRECATED interfaces

     d xmlCatalogGetSystem...
     d                 pr              *   extproc('xmlCatalogGetSystem')       const xmlChar *
     d  sysID                          *   value options(*string)               const xmlChar *

     d xmlCatalogGetPublic...
     d                 pr              *   extproc('xmlCatalogGetPublic')       const xmlChar *
     d  pubID                          *   value options(*string)               const xmlChar *

      /endif                                                                    LIBXML_CATALOG_ENBLD
      /endif                                                                    XML_CATALOG_H__
