/**
***     Additional delarations for ILE/RPG support.
***
***     See Copyright for the status of this software.
***
***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
**/

#ifndef __RPGSUPPORT_H__
#define __RPGSUPPORT_H__

#include <sys/types.h>

#include <libxml/xmlmemory.h>
#include <libxml/xpath.h>


XMLPUBFUN xmlFreeFunc   __get_xmlFree(void);
XMLPUBFUN void          __set_xmlFree(xmlFreeFunc freefunc);
XMLPUBFUN void          __call_xmlFree(void * mem);
XMLPUBFUN xmlMallocFunc __get_xmlMalloc(void);
XMLPUBFUN void          __set_xmlMalloc(xmlMallocFunc allocfunc);
XMLPUBFUN void *        __call_xmlMalloc(size_t size);
XMLPUBFUN xmlMallocFunc __get_xmlMallocAtomic(void);
XMLPUBFUN void          __set_xmlMallocAtomic(xmlMallocFunc allocfunc);
XMLPUBFUN void *        __call_xmlMallocAtomic(size_t size);
XMLPUBFUN xmlReallocFunc __get_xmlRealloc(void);
XMLPUBFUN void          __set_xmlRealloc(xmlReallocFunc reallocfunc);
XMLPUBFUN void *        __call_xmlRealloc(void * mem, size_t size);
XMLPUBFUN xmlStrdupFunc __get_xmlMemStrdup(void);
XMLPUBFUN void          __set_xmlMemStrdup(xmlStrdupFunc strdupfunc);
XMLPUBFUN char *        __call_xmlMemStrdup(const char * str);

#ifdef LIBXML_DOCB_ENABLED
XMLPUBFUN xmlSAXHandlerV1 __get_docbDefaultSAXHandler(void);
XMLPUBFUN void          __set_docbDefaultSAXHandler(xmlSAXHandlerV1 hdlr);
#endif

#ifdef LIBXML_HTML_ENABLED
XMLPUBFUN xmlSAXHandlerV1 __get_htmlDefaultSAXHandler(void);
XMLPUBFUN void          __set_htmlDefaultSAXHandler(xmlSAXHandlerV1 hdlr);
#endif

XMLPUBFUN xmlError      __get_xmlLastError(void);
XMLPUBFUN void          __set_xmlLastError(xmlError err);

XMLPUBFUN int           __get_oldXMLWDcompatibility(void);
XMLPUBFUN void          __set_oldXMLWDcompatibility(int val);

XMLPUBFUN xmlBufferAllocationScheme __get_xmlBufferAllocScheme(void);
XMLPUBFUN void          __set_xmlBufferAllocScheme(xmlBufferAllocationScheme val);

XMLPUBFUN int           __get_xmlDefaultBufferSize(void);
XMLPUBFUN void          __set_xmlDefaultBufferSize(int val);

XMLPUBFUN xmlSAXHandlerV1 __get_xmlDefaultSAXHandler(void);
XMLPUBFUN void          __set_xmlDefaultSAXHandler(xmlSAXHandlerV1 val);

XMLPUBFUN xmlSAXLocator __get_xmlDefaultSAXLocator(void);
XMLPUBFUN void          __set_xmlDefaultSAXLocator(xmlSAXLocator val);

XMLPUBFUN int           __get_xmlDoValidityCheckingDefaultValue(void);
XMLPUBFUN void          __set_xmlDoValidityCheckingDefaultValue(int val);

XMLPUBFUN xmlGenericErrorFunc __get_xmlGenericError(void);
XMLPUBFUN void          __set_xmlGenericError(xmlGenericErrorFunc val);

XMLPUBFUN xmlStructuredErrorFunc __get_xmlStructuredError(void);
XMLPUBFUN void          __set_xmlStructuredError(xmlStructuredErrorFunc val);
XMLPUBFUN void          __call_xmlStructuredError(void *userData, xmlErrorPtr error);

XMLPUBFUN void *        __get_xmlGenericErrorContext(void);
XMLPUBFUN void          __set_xmlGenericErrorContext(void * val);

XMLPUBFUN void *        __get_xmlStructuredErrorContext(void);
XMLPUBFUN void          __set_xmlStructuredErrorContext(void * val);

XMLPUBFUN int           __get_xmlGetWarningsDefaultValue(void);
XMLPUBFUN void          __set_xmlGetWarningsDefaultValue(int val);

XMLPUBFUN int           __get_xmlIndentTreeOutput(void);
XMLPUBFUN void          __set_xmlIndentTreeOutput(int val);

XMLPUBFUN const char *  __get_xmlTreeIndentString(void);
XMLPUBFUN void          __set_xmlTreeIndentString(const char * val);

XMLPUBFUN int           __get_xmlKeepBlanksDefaultValue(void);
XMLPUBFUN void          __set_xmlKeepBlanksDefaultValue(int val);

XMLPUBFUN int           __get_xmlLineNumbersDefaultValue(void);
XMLPUBFUN void          __set_xmlLineNumbersDefaultValue(int val);

XMLPUBFUN int           __get_xmlLoadExtDtdDefaultValue(void);
XMLPUBFUN void          __set_xmlLoadExtDtdDefaultValue(int val);

XMLPUBFUN int           __get_xmlParserDebugEntities(void);
XMLPUBFUN void          __set_xmlParserDebugEntities(int val);

XMLPUBFUN const char *  __get_xmlParserVersion(void);
XMLPUBFUN void          __set_xmlParserVersion(const char * val);

XMLPUBFUN int           __get_xmlPedanticParserDefaultValue(void);
XMLPUBFUN void          __set_xmlPedanticParserDefaultValue(int val);

XMLPUBFUN int           __get_xmlSaveNoEmptyTags(void);
XMLPUBFUN void          __set_xmlSaveNoEmptyTags(int val);

XMLPUBFUN int           __get_xmlSubstituteEntitiesDefaultValue(void);
XMLPUBFUN void          __set_xmlSubstituteEntitiesDefaultValue(int val);

XMLPUBFUN xmlRegisterNodeFunc __get_xmlRegisterNodeDefaultValue(void);
XMLPUBFUN void          __set_xmlRegisterNodeDefaultValue(xmlRegisterNodeFunc val);
XMLPUBFUN void          __call_xmlRegisterNodeDefaultValue(xmlNodePtr node);

XMLPUBFUN xmlDeregisterNodeFunc __get_xmlDeregisterNodeDefaultValue(void);
XMLPUBFUN void          __set_xmlDeregisterNodeDefaultValue(xmlDeregisterNodeFunc val);
XMLPUBFUN void          __call_xmlDeregisterNodeDefaultValue(xmlNodePtr node);

XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
                        __get_xmlParserInputBufferCreateFilenameValue(void);
XMLPUBFUN void          __set_xmlParserInputBufferCreateFilenameValue(
                                xmlParserInputBufferCreateFilenameFunc val);
XMLPUBFUN xmlParserInputBufferPtr
                __call_xmlParserInputBufferCreateFilenameValue(const char *URI,
                                                        xmlCharEncoding enc);

XMLPUBFUN xmlOutputBufferCreateFilenameFunc
                        __get_xmlOutputBufferCreateFilenameValue(void);
XMLPUBFUN void          __set_xmlOutputBufferCreateFilenameValue(
                                xmlOutputBufferCreateFilenameFunc val);
XMLPUBFUN xmlOutputBufferPtr
                        __call_xmlOutputBufferCreateFilenameValue(const char *URI,
                                xmlCharEncodingHandlerPtr encoder,
                                int compression);


XMLPUBFUN void          __xmlVaStart(char * * list,
                                char * lastargaddr, size_t lastargsize);
XMLPUBFUN void *        __xmlVaArg(char * * list, void * dest, size_t argsize);
XMLPUBFUN void          __xmlVaEnd(char * * list);

#ifdef LIBXML_XPATH_ENABLED
XMLPUBFUN int		__xmlXPathNodeSetGetLength(xmlNodeSetPtr ns);
XMLPUBFUN xmlNodePtr	__xmlXPathNodeSetItem(xmlNodeSetPtr ns, int index);
XMLPUBFUN int		__xmlXPathNodeSetIsEmpty(xmlNodeSetPtr ns);
#endif

#endif
