win32/3rdparty/libxml2/trio.h
8cf9b527
 /*************************************************************************
  *
  * $Id$
  *
  * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
  * copyright notice and this permission notice appear in all copies.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
  * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
  *
  *************************************************************************
  *
  * http://ctrio.sourceforge.net/
  *
  ************************************************************************/
 
 #ifndef TRIO_TRIO_H
 #define TRIO_TRIO_H
 
 #if !defined(WITHOUT_TRIO)
 
 /*
  * Use autoconf defines if present. Packages using trio must define
  * HAVE_CONFIG_H as a compiler option themselves.
  */
 #if defined(TRIO_HAVE_CONFIG_H)
 # include "config.h"
 #endif
 
 #include "triodef.h"
 
 #include <stdio.h>
 #include <stdlib.h>
 #if defined(TRIO_COMPILER_ANCIENT)
 # include <varargs.h>
 #else
 # include <stdarg.h>
 #endif
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /*
  * Error codes.
  *
  * Remember to add a textual description to trio_strerror.
  */
 enum {
   TRIO_EOF      = 1,
   TRIO_EINVAL   = 2,
   TRIO_ETOOMANY = 3,
   TRIO_EDBLREF  = 4,
   TRIO_EGAP     = 5,
   TRIO_ENOMEM   = 6,
   TRIO_ERANGE   = 7,
   TRIO_ERRNO    = 8,
   TRIO_ECUSTOM  = 9
 };
 
 /* Error macros */
 #define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF)
 #define TRIO_ERROR_POSITION(x) ((-(x)) >> 8)
 #define TRIO_ERROR_NAME(x) trio_strerror(x)
 
 typedef int (*trio_outstream_t) TRIO_PROTO((trio_pointer_t, int));
 typedef int (*trio_instream_t) TRIO_PROTO((trio_pointer_t));
 
 TRIO_CONST char *trio_strerror TRIO_PROTO((int));
 
 /*************************************************************************
  * Print Functions
  */
 
 int trio_printf TRIO_PROTO((TRIO_CONST char *format, ...));
 int trio_vprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
 int trio_printfv TRIO_PROTO((TRIO_CONST char *format, void **args));
 
 int trio_fprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
 int trio_vfprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
 int trio_fprintfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
 
 int trio_dprintf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
 int trio_vdprintf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
 int trio_dprintfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
 
 int trio_cprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
 			     TRIO_CONST char *format, ...));
 int trio_vcprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
 			      TRIO_CONST char *format, va_list args));
 int trio_cprintfv TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
 			      TRIO_CONST char *format, void **args));
 
 int trio_sprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, ...));
 int trio_vsprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, va_list args));
 int trio_sprintfv TRIO_PROTO((char *buffer, TRIO_CONST char *format, void **args));
 
 int trio_snprintf TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
 int trio_vsnprintf TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
 		   va_list args));
 int trio_snprintfv TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
 		   void **args));
 
 int trio_snprintfcat TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
 int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
                       va_list args));
 
 char *trio_aprintf TRIO_PROTO((TRIO_CONST char *format, ...));
 char *trio_vaprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
 
 int trio_asprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, ...));
 int trio_vasprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, va_list args));
 
 /*************************************************************************
  * Scan Functions
  */
 int trio_scanf TRIO_PROTO((TRIO_CONST char *format, ...));
 int trio_vscanf TRIO_PROTO((TRIO_CONST char *format, va_list args));
 int trio_scanfv TRIO_PROTO((TRIO_CONST char *format, void **args));
 
 int trio_fscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
 int trio_vfscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
 int trio_fscanfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
 
 int trio_dscanf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
 int trio_vdscanf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
 int trio_dscanfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
 
 int trio_cscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
 			    TRIO_CONST char *format, ...));
 int trio_vcscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
 			     TRIO_CONST char *format, va_list args));
 int trio_cscanfv TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
 			     TRIO_CONST char *format, void **args));
 
 int trio_sscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, ...));
 int trio_vsscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, va_list args));
 int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, void **args));
 
 /*************************************************************************
  * Locale Functions
  */
 void trio_locale_set_decimal_point TRIO_PROTO((char *decimalPoint));
 void trio_locale_set_thousand_separator TRIO_PROTO((char *thousandSeparator));
 void trio_locale_set_grouping TRIO_PROTO((char *grouping));
 
 /*************************************************************************
  * Renaming
  */
 #ifdef TRIO_REPLACE_STDIO
 /* Replace the <stdio.h> functions */
 #ifndef HAVE_PRINTF
 # undef printf
 # define printf trio_printf
 #endif
 #ifndef HAVE_VPRINTF
 # undef vprintf
 # define vprintf trio_vprintf
 #endif
 #ifndef HAVE_FPRINTF
 # undef fprintf
 # define fprintf trio_fprintf
 #endif
 #ifndef HAVE_VFPRINTF
 # undef vfprintf
 # define vfprintf trio_vfprintf
 #endif
 #ifndef HAVE_SPRINTF
 # undef sprintf
 # define sprintf trio_sprintf
 #endif
 #ifndef HAVE_VSPRINTF
 # undef vsprintf
 # define vsprintf trio_vsprintf
 #endif
 #ifndef HAVE_SNPRINTF
 # undef snprintf
 # define snprintf trio_snprintf
 #endif
 #ifndef HAVE_VSNPRINTF
 # undef vsnprintf
 # define vsnprintf trio_vsnprintf
 #endif
 #ifndef HAVE_SCANF
 # undef scanf
 # define scanf trio_scanf
 #endif
 #ifndef HAVE_VSCANF
 # undef vscanf
 # define vscanf trio_vscanf
 #endif
 #ifndef HAVE_FSCANF
 # undef fscanf
 # define fscanf trio_fscanf
 #endif
 #ifndef HAVE_VFSCANF
 # undef vfscanf
 # define vfscanf trio_vfscanf
 #endif
 #ifndef HAVE_SSCANF
 # undef sscanf
 # define sscanf trio_sscanf
 #endif
 #ifndef HAVE_VSSCANF
 # undef vsscanf
 # define vsscanf trio_vsscanf
 #endif
 /* These aren't stdio functions, but we make them look similar */
 #define dprintf trio_dprintf
 #define vdprintf trio_vdprintf
 #define aprintf trio_aprintf
 #define vaprintf trio_vaprintf
 #define asprintf trio_asprintf
 #define vasprintf trio_vasprintf
 #define dscanf trio_dscanf
 #define vdscanf trio_vdscanf
 #endif
 
 #ifdef __cplusplus
 } /* extern "C" */
 #endif
 
 #endif /* WITHOUT_TRIO */
 
 #endif /* TRIO_TRIO_H */