text: /*
   * Summary: interface for the I/O interfaces used by the parser
   * Description: interface for the I/O interfaces used by the parser
   *
   * Copy: See Copyright for the status of this software.
   *
   * Author: Daniel Veillard
   */
  
  #ifndef __XML_IO_H__
  #define __XML_IO_H__
  
  #include <stdio.h>
  #include "xmlversion.h"
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /*
   * Those are the functions and datatypes for the parser input
   * I/O structures.
   */
  
  /**
   * xmlInputMatchCallback:
   * @filename: the filename or URI
   *
   * Callback used in the I/O Input API to detect if the current handler 
   * can provide input fonctionnalities for this resource.
   *
   * Returns 1 if yes and 0 if another Input module should be used
   */
  typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename);
  /**
   * xmlInputOpenCallback:
   * @filename: the filename or URI
   *
   * Callback used in the I/O Input API to open the resource
   *
   * Returns an Input context or NULL in case or error
   */
  typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename);
  /**
   * xmlInputReadCallback:
   * @context:  an Input context
   * @buffer:  the buffer to store data read
   * @len:  the length of the buffer in bytes
   *
   * Callback used in the I/O Input API to read the resource
   *
   * Returns the number of bytes read or -1 in case of error
   */
  typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len);
  /**
   * xmlInputCloseCallback:
   * @context:  an Input context
   *
   * Callback used in the I/O Input API to close the resource
   *
   * Returns 0 or -1 in case of error
   */
  typedef int (XMLCALL *xmlInputCloseCallback) (void * context);
  
  #ifdef LIBXML_OUTPUT_ENABLED
  /*
   * Those are the functions and datatypes for the library output
   * I/O structures.
   */
  
  /**
   * xmlOutputMatchCallback:
   * @filename: the filename or URI
   *
   * Callback used in the I/O Output API to detect if the current handler 
   * can provide output fonctionnalities for this resource.
   *
   * Returns 1 if yes and 0 if another Output module should be used
   */
  typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename);
  /**
   * xmlOutputOpenCallback:
   * @filename: the filename or URI
   *
   * Callback used in the I/O Output API to open the resource
   *
   * Returns an Output context or NULL in case or error
   */
  typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename);
  /**
   * xmlOutputWriteCallback:
   * @context:  an Output context
   * @buffer:  the buffer of data to write
   * @len:  the length of the buffer in bytes
   *
   * Callback used in the I/O Output API to write to the resource
   *
   * Returns the number of bytes written or -1 in case of error
   */
  typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer,
                                         int len);
  /**
   * xmlOutputCloseCallback:
   * @context:  an Output context
   *
   * Callback used in the I/O Output API to close the resource
   *
   * Returns 0 or -1 in case of error
   */
  typedef int (XMLCALL *xmlOutputCloseCallback) (void * context);
  #endif /* LIBXML_OUTPUT_ENABLED */
  
  #ifdef __cplusplus
  }
  #endif
  
  #include "globals.h"
  #include "tree.h"
  #include "parser.h"
  #include "encoding.h"
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  struct _xmlParserInputBuffer {
      void*                  context;
      xmlInputReadCallback   readcallback;
      xmlInputCloseCallback  closecallback;
      
      xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
      
      xmlBufferPtr buffer;    /* Local buffer encoded in UTF-8 */
      xmlBufferPtr raw;       /* if encoder != NULL buffer for raw input */
      int compressed;         /* -1=unknown, 0=not compressed, 1=compressed */
      int error;
      unsigned long rawconsumed;/* amount consumed from raw */
  };
  
  
  #ifdef LIBXML_OUTPUT_ENABLED
  struct _xmlOutputBuffer {
      void*                   context;
      xmlOutputWriteCallback  writecallback;
      xmlOutputCloseCallback  closecallback;
      
      xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
      
      xmlBufferPtr buffer;    /* Local buffer encoded in UTF-8 or ISOLatin */
      xmlBufferPtr conv;      /* if encoder != NULL buffer for output */
      int written;            /* total number of byte written */
      int error;
  };
  #endif /* LIBXML_OUTPUT_ENABLED */
  
  /*
   * Interfaces for input
   */
  XMLPUBFUN void XMLCALL  
          xmlCleanupInputCallbacks                (void);
  
  XMLPUBFUN int XMLCALL
          xmlPopInputCallbacks                    (void);
  
  XMLPUBFUN void XMLCALL  
          xmlRegisterDefaultInputCallbacks        (void);
  XMLPUBFUN xmlParserInputBufferPtr XMLCALL
          xmlAllocParserInputBuffer               (xmlCharEncoding enc);
  
  XMLPUBFUN xmlParserInputBufferPtr XMLCALL
          xmlParserInputBufferCreateFilename      (const char *URI,
                                                   xmlCharEncoding enc);
  XMLPUBFUN xmlParserInputBufferPtr XMLCALL
          xmlParserInputBufferCreateFile          (FILE *file,
                                                   xmlCharEncoding enc);
  XMLPUBFUN xmlParserInputBufferPtr XMLCALL
          xmlParserInputBufferCreateFd            (int fd,
                                                   xmlCharEncoding enc);
  XMLPUBFUN xmlParserInputBufferPtr XMLCALL
          xmlParserInputBufferCreateMem           (const char *mem, int size,
                                                   xmlCharEncoding enc);
  XMLPUBFUN xmlParserInputBufferPtr XMLCALL
          xmlParserInputBufferCreateStatic        (const char *mem, int size,
                                                   xmlCharEncoding enc);
  XMLPUBFUN xmlParserInputBufferPtr XMLCALL
          xmlParserInputBufferCreateIO            (xmlInputReadCallback   ioread,
                                                   xmlInputCloseCallback  ioclose,
                                                   void *ioctx,
                                                   xmlCharEncoding enc);
  XMLPUBFUN int XMLCALL   
          xmlParserInputBufferRead                (xmlParserInputBufferPtr in,
                                                   int len);
  XMLPUBFUN int XMLCALL   
          xmlParserInputBufferGrow                (xmlParserInputBufferPtr in,
                                                   int len);
  XMLPUBFUN int XMLCALL   
          xmlParserInputBufferPush                (xmlParserInputBufferPtr in,
                                                   int len,
                                                   const char *buf);
  XMLPUBFUN void XMLCALL  
          xmlFreeParserInputBuffer                (xmlParserInputBufferPtr in);
  XMLPUBFUN char * XMLCALL        
          xmlParserGetDirectory                   (const char *filename);
  
  XMLPUBFUN int XMLCALL     
          xmlRegisterInputCallbacks               (xmlInputMatchCallback matchFunc,
                                                   xmlInputOpenCallback openFunc,
                                                   xmlInputReadCallback readFunc,
                                                   xmlInputCloseCallback closeFunc);
  
  xmlParserInputBufferPtr
          __xmlParserInputBufferCreateFilename(const char *URI,
                                                                                  xmlCharEncoding enc);
  
  #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
  /**
  * __xmlIOWin32UTF8ToWChar:
  * @u8String:  uft-8 string
  *
  * Convert a string from utf-8 to wchar (WINDOWS ONLY!)
  */
  XMLPUBFUN wchar_t* XMLCALL __xmlIOWin32UTF8ToWChar(const char *u8String);
  #endif
  
  #ifdef LIBXML_OUTPUT_ENABLED
  /*
   * Interfaces for output
   */
  XMLPUBFUN void XMLCALL  
          xmlCleanupOutputCallbacks               (void);
  XMLPUBFUN void XMLCALL  
          xmlRegisterDefaultOutputCallbacks(void);
  XMLPUBFUN xmlOutputBufferPtr XMLCALL
          xmlAllocOutputBuffer            (xmlCharEncodingHandlerPtr encoder);
  
  XMLPUBFUN xmlOutputBufferPtr XMLCALL
          xmlOutputBufferCreateFilename   (const char *URI,
                                           xmlCharEncodingHandlerPtr encoder,
                                           int compression);
  
  XMLPUBFUN xmlOutputBufferPtr XMLCALL
          xmlOutputBufferCreateFile       (FILE *file,
                                           xmlCharEncodingHandlerPtr encoder);
  
  XMLPUBFUN xmlOutputBufferPtr XMLCALL
          xmlOutputBufferCreateBuffer     (xmlBufferPtr buffer,
                                           xmlCharEncodingHandlerPtr encoder);
  
  XMLPUBFUN xmlOutputBufferPtr XMLCALL
          xmlOutputBufferCreateFd         (int fd,
                                           xmlCharEncodingHandlerPtr encoder);
  
  XMLPUBFUN xmlOutputBufferPtr XMLCALL
          xmlOutputBufferCreateIO         (xmlOutputWriteCallback   iowrite,
                                           xmlOutputCloseCallback  ioclose,
                                           void *ioctx,
                                           xmlCharEncodingHandlerPtr encoder);
  
  XMLPUBFUN int XMLCALL   
          xmlOutputBufferWrite            (xmlOutputBufferPtr out,
                                           int len,
                                           const char *buf);
  XMLPUBFUN int XMLCALL   
          xmlOutputBufferWriteString      (xmlOutputBufferPtr out,
                                           const char *str);
  XMLPUBFUN int XMLCALL   
          xmlOutputBufferWriteEscape      (xmlOutputBufferPtr out,
                                           const xmlChar *str,
                                           xmlCharEncodingOutputFunc escaping);
  
  XMLPUBFUN int XMLCALL   
          xmlOutputBufferFlush            (xmlOutputBufferPtr out);
  XMLPUBFUN int XMLCALL   
          xmlOutputBufferClose            (xmlOutputBufferPtr out);
  
  XMLPUBFUN int XMLCALL     
          xmlRegisterOutputCallbacks      (xmlOutputMatchCallback matchFunc,
                                           xmlOutputOpenCallback openFunc,
                                           xmlOutputWriteCallback writeFunc,
                                           xmlOutputCloseCallback closeFunc);
  
  xmlOutputBufferPtr
          __xmlOutputBufferCreateFilename(const char *URI,
                                xmlCharEncodingHandlerPtr encoder,
                                int compression);
  
  #ifdef LIBXML_HTTP_ENABLED
  /*  This function only exists if HTTP support built into the library  */
  XMLPUBFUN void XMLCALL  
          xmlRegisterHTTPPostCallbacks    (void );
  #endif /* LIBXML_HTTP_ENABLED */
          
  #endif /* LIBXML_OUTPUT_ENABLED */
  
  XMLPUBFUN xmlParserInputPtr XMLCALL
          xmlCheckHTTPInput               (xmlParserCtxtPtr ctxt,
                                           xmlParserInputPtr ret);
  
  /*
   * A predefined entity loader disabling network accesses
   */
  XMLPUBFUN xmlParserInputPtr XMLCALL 
          xmlNoNetExternalEntityLoader    (const char *URL,
                                           const char *ID,
                                           xmlParserCtxtPtr ctxt);
  
  /* 
   * xmlNormalizeWindowsPath is obsolete, don't use it. 
   * Check xmlCanonicPath in uri.h for a better alternative.
   */
  XMLPUBFUN xmlChar * XMLCALL 
          xmlNormalizeWindowsPath         (const xmlChar *path);
  
  XMLPUBFUN int XMLCALL   
          xmlCheckFilename                (const char *path);
  /**
   * Default 'file://' protocol callbacks 
   */
  XMLPUBFUN int XMLCALL   
          xmlFileMatch                    (const char *filename);
  XMLPUBFUN void * XMLCALL        
          xmlFileOpen                     (const char *filename);
  XMLPUBFUN int XMLCALL   
          xmlFileRead                     (void * context, 
                                           char * buffer, 
                                           int len);
  XMLPUBFUN int XMLCALL   
          xmlFileClose                    (void * context);
  
  /**
   * Default 'http://' protocol callbacks 
   */
  #ifdef LIBXML_HTTP_ENABLED
  XMLPUBFUN int XMLCALL   
          xmlIOHTTPMatch                  (const char *filename);
  XMLPUBFUN void * XMLCALL        
          xmlIOHTTPOpen                   (const char *filename);
  #ifdef LIBXML_OUTPUT_ENABLED
  XMLPUBFUN void * XMLCALL        
          xmlIOHTTPOpenW                  (const char * post_uri,
                                           int   compression );
  #endif /* LIBXML_OUTPUT_ENABLED */
  XMLPUBFUN int XMLCALL   
          xmlIOHTTPRead                   (void * context, 
                                           char * buffer, 
                                           int len);
  XMLPUBFUN int XMLCALL   
          xmlIOHTTPClose                  (void * context);
  #endif /* LIBXML_HTTP_ENABLED */
  
  /**
   * Default 'ftp://' protocol callbacks 
   */
  #ifdef LIBXML_FTP_ENABLED 
  XMLPUBFUN int XMLCALL   
          xmlIOFTPMatch                   (const char *filename);
  XMLPUBFUN void * XMLCALL        
          xmlIOFTPOpen                    (const char *filename);
  XMLPUBFUN int XMLCALL   
          xmlIOFTPRead                    (void * context, 
                                           char * buffer, 
                                           int len);
  XMLPUBFUN int XMLCALL   
          xmlIOFTPClose                   (void * context);
  #endif /* LIBXML_FTP_ENABLED */
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* __XML_IO_H__ */
  